genode/repos/dde_linux/src/drivers/framebuffer/intel/include/drm/drmP.h

685 lines
24 KiB
C

/*
* \brief Platform interface of DRM code
* \author Norman Feske
* \date 2015-08-19
*/
#ifndef _DRMP_H_
#define _DRMP_H_
#ifdef __cplusplus
extern "C" {
#endif
/* local includes */
#include <lx_emul.h>
/*
* Unfortunately, DRM headers use certain C++ keywords as variable names.
* To enable the inclusion of 'drmP.h' from C++ source codes, we have to
* rename these identifiers.
*/
#ifdef __cplusplus
#define new _new
#define virtual _virtual
#define private _private
#endif /* __cplusplus */
#include <uapi/drm/drm.h>
#include <uapi/drm/i915_drm.h>
#include <uapi/drm/drm_fourcc.h>
#include <uapi/drm/drm_mode.h>
#include <drm/i915_pciids.h>
#include <drm/drm_mm.h>
#include <drm/drm_crtc.h>
#include <drm/drm_crtc_helper.h>
#ifdef __cplusplus
#undef virtual
#undef new
#undef private
#endif /* __cplusplus */
extern unsigned int drm_debug;
/*******************
** DRM constants **
*******************/
enum {
DRM_MINOR_CONTROL = 2,
// DRM_MINOR_RENDER = 3,
// DRM_MAGIC_HASH_ORDER = 4,
};
enum {
DRM_AUTH = 0x1,
DRM_MASTER = 0x2,
DRM_ROOT_ONLY = 0x4,
DRM_CONTROL_ALLOW = 0x8,
DRM_UNLOCKED = 0x10,
DRM_RENDER_ALLOW = 0x20,
};
enum {
DRIVER_USE_AGP = 0x1,
DRIVER_REQUIRE_AGP = 0x2,
DRIVER_HAVE_IRQ = 0x40,
DRIVER_IRQ_SHARED = 0x80,
DRIVER_GEM = 0x1000,
DRIVER_MODESET = 0x2000,
DRIVER_PRIME = 0x4000,
DRIVER_RENDER = 0x8000,
};
//enum { DRM_HZ = HZ };
enum {
DRM_SCANOUTPOS_VALID = (1 << 0),
DRM_SCANOUTPOS_INVBL = (1 << 1),
DRM_SCANOUTPOS_ACCURATE = (1 << 2),
};
enum { DRM_CALLED_FROM_VBLIRQ = 1 };
//enum {
// DRM_CONNECTOR_POLL_HPD = 1 << 0,
// DRM_CONNECTOR_POLL_CONNECT = 1 << 1,
// DRM_CONNECTOR_POLL_DISCONNECT = 1 << 2,
//};
/****************
** DRM macros **
****************/
#define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
///*
// * Type and function mappings
// */
//#define DRM_IRQ_ARGS void *arg
//#define DRM_ARRAY_SIZE ARRAY_SIZE
//#define DRM_WAKEUP wake_up
//#define DRM_INIT_WAITQUEUE init_waitqueue_head
//#define DRM_AGP_KERN struct agp_kern_info
//#define DRM_AGP_MEM struct agp_memory
//#define DRM_COPY_TO_USER copy_to_user
//
///*
// * Debug macros
// */
#define DRM_VERBOSE 1
#if DRM_VERBOSE
#define DRM_INFO(fmt, arg...) do { \
lx_printfln("[" DRM_NAME ":%s] *INFO* " fmt , __func__ , ##arg); } while (0)
#define DRM_ERROR(fmt, arg...) do { \
lx_printfln("[" DRM_NAME ":%s] *ERROR* " fmt , __func__ , ##arg); } while (0)
#define DRM_DEBUG(fmt, arg...) do { \
lx_printfln("[" DRM_NAME ":%s] *DEBUG* " fmt , __func__ , ##arg); } while (0)
#define DRM_DEBUG_DRIVER(fmt, arg...) do { \
lx_printfln("[" DRM_NAME ":%s] *DRIVER* " fmt , __func__ , ##arg); } while (0)
#define DRM_DEBUG_KMS(fmt, arg...) do { \
lx_printfln("[" DRM_NAME ":%s] *KMS* " fmt , __func__ , ##arg); } while (0)
#else
#define DRM_INFO(fmt, arg...) do { } while (0)
#define DRM_ERROR(fmt, arg...) do { } while (0)
#define DRM_DEBUG(fmt, arg...) do { } while (0)
#define DRM_DEBUG_DRIVER(fmt, arg...) do { } while (0)
#define DRM_DEBUG_KMS(fmt, arg...) do { } while (0)
#endif
#define DRM_ARRAY_SIZE(x) ARRAY_SIZE(x)
#define DRM_UT_KMS 0x04
///***************
// ** DRM types **
// ***************/
//
///*
// * Forward type declarations
// */
struct drm_device;
struct drm_mm_node;
struct drm_master;
struct drm_file;
struct drm_crtc;
struct drm_plane;
struct drm_display_mode;
struct drm_connector;
struct drm_mode_create_dumb;
struct drm_mode_fb_cmd2;
/**
* Ioctl handler function
*/
typedef int drm_ioctl_t(struct drm_device *dev, void *data,
struct drm_file *file_priv);
/**
* Ioctl representation
*/
struct drm_ioctl_desc {
unsigned int cmd;
int flags;
drm_ioctl_t *func;
unsigned int cmd_drv;
const char *name;
};
#define DRM_IOCTL_NR(n) (n & 0xff)
#define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags) \
[DRM_IOCTL_NR(DRM_##ioctl)] = {.cmd = DRM_##ioctl, .func = _func, .flags = _flags, .cmd_drv = DRM_IOCTL_##ioctl, .name = #ioctl}
#if 0
#define DRM_IOCTL_DEF(ioctl, _func, _flags) \
[ioctl & 0xff] = {.cmd = ioctl, .func = _func, .flags = _flags}
#endif
struct drm_gem_object;
struct drm_driver {
u32 driver_features;
const struct vm_operations_struct *gem_vm_ops;
const struct drm_ioctl_desc *ioctls;
int num_ioctls;
const struct file_operations *fops;
int major;
int minor;
int patchlevel;
char *name;
char *desc;
char *date;
int (*load) (struct drm_device *, unsigned long flags);
int (*unload) (struct drm_device *);
int (*open) (struct drm_device *, struct drm_file *);
void (*lastclose) (struct drm_device *);
void (*preclose) (struct drm_device *, struct drm_file *file_priv);
void (*postclose) (struct drm_device *, struct drm_file *);
int (*suspend) (struct drm_device *, pm_message_t state);
int (*resume) (struct drm_device *);
int (*device_is_agp) (struct drm_device *dev);
int (*master_create)(struct drm_device *dev, struct drm_master *master);
void (*master_destroy)(struct drm_device *dev, struct drm_master *master);
void (*gem_free_object) (struct drm_gem_object *obj);
int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv,
uint32_t handle, uint32_t flags, int *prime_fd);
int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv,
int prime_fd, uint32_t *handle);
struct dma_buf * (*gem_prime_export)(struct drm_device *dev,
struct drm_gem_object *obj, int flags);
struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
struct dma_buf *dma_buf);
int (*dumb_create)(struct drm_file *file_priv,
struct drm_device *dev,
struct drm_mode_create_dumb *args);
int (*dumb_map_offset)(struct drm_file *file_priv,
struct drm_device *dev, uint32_t handle,
uint64_t *offset);
int (*dumb_destroy)(struct drm_file *file_priv,
struct drm_device *dev,
uint32_t handle);
int (*get_vblank_timestamp) (struct drm_device *dev, int crtc,
int *max_error,
struct timeval *vblank_time,
unsigned flags);
u32 (*get_vblank_counter) (struct drm_device *dev, int crtc);
int (*get_scanout_position) (struct drm_device *dev, int crtc,
unsigned int flags,
int *vpos, int *hpos, ktime_t *stime,
ktime_t *etime);
irqreturn_t(*irq_handler) (int irq, void *arg);
void (*irq_preinstall) (struct drm_device *dev);
int (*irq_postinstall) (struct drm_device *dev);
void (*irq_uninstall) (struct drm_device *dev);
int (*enable_vblank) (struct drm_device *dev, int crtc);
void (*disable_vblank) (struct drm_device *dev, int crtc);
};
///* needed by drm_agpsupport.c */
//struct drm_agp_mem {
// unsigned long handle;
// DRM_AGP_MEM *memory;
// unsigned long bound;
// int pages;
// struct list_head head;
//};
//
//struct drm_agp_head {
// DRM_AGP_KERN agp_info;
// unsigned long base;
//
// /*
// * Members used by drm_agpsupport.c
// */
// int acquired;
// struct agp_bridge_data *bridge;
// int enabled;
// unsigned long mode;
// struct list_head memory;
// int cant_use_aperture;
// unsigned long page_mask;
//};
#define DRM_SWITCH_POWER_ON 0
#define DRM_SWITCH_POWER_OFF 1
#define DRM_SWITCH_POWER_CHANGING 2
struct drm_i915_private;
struct drm_device {
// int pci_device;
struct pci_dev *pdev;
struct mutex struct_mutex;
struct drm_driver *driver;
struct drm_i915_private *dev_private;
// struct drm_gem_mm *mm_private;
// enum drm_stat_type types[15];
// unsigned long counters;
struct address_space *dev_mapping;
struct drm_agp_head *agp;
int irq_enabled; /* needed for i915_dma.c */
spinlock_t count_lock;
struct drm_mode_config mode_config;
int open_count;
int vblank_disable_allowed;
u32 max_vblank_count;
struct drm_minor *primary; /* needed by i915_dma.c */
// atomic_t object_count;
// atomic_t object_memory;
// atomic_t pin_count;
// atomic_t pin_memory;
// atomic_t gtt_count;
// atomic_t gtt_memory;
// uint32_t gtt_total;
// uint32_t invalidate_domains;
// uint32_t flush_domains;
int switch_power_state;
spinlock_t event_lock;
struct device *dev; /* i915_gem_stolen.c */
};
//
//struct drm_map_list {
// struct drm_hash_item hash;
// struct drm_local_map *map;
// struct drm_mm_node *file_offset_node;
//};
/***************************
** drm/drm_vma_manager.h **
***************************/
struct drm_vma_offset_node {
int dummy;
};
struct drm_gem_object {
// /** Related drm device */
struct drm_device *dev;
//
// /** File representing the shmem storage */
struct file *filp;
//
// /**
// * Size of the object, in bytes. Immutable over the object's
// * lifetime.
// */
size_t size;
//
// /**
// * Global name for this object, starts at 1. 0 means unnamed.
// * Access is covered by the object_name_lock in the related drm_device
// */
// int name;
//
// /* Mapping info for this object */
// struct drm_map_list map_list;
//
// /**
// * Memory domains. These monitor which caches contain read/write data
// * related to the object. When transitioning from one set of domains
// * to another, the driver is called to ensure that caches are suitably
// * flushed and invalidated
// */
uint32_t read_domains;
uint32_t write_domain;
//
// /**
// * While validating an exec operation, the
// * new read/write domain values are computed here.
// * They will be transferred to the above values
// * at the point that any cache flushing occurs
// */
// uint32_t pending_read_domains;
// uint32_t pending_write_domain;
//
// void *driver_private;
struct drm_vma_offset_node vma_node;
struct dma_buf_attachment *import_attach;
};
typedef struct drm_dma_handle {
void *vaddr;
size_t size;
dma_addr_t busaddr; /* needed by i915_drv.h */
} drm_dma_handle_t;
typedef struct drm_local_map {
size_t offset; /* Requested physical address (0 for SAREA)*/
unsigned long size; /* Requested physical size (bytes) */
// enum drm_map_type type; /* Type of memory to map */
// enum drm_map_flags flags; /* Flags */
void *handle; /* User-space: "Handle" to pass to mmap() */
/* Kernel-space: kernel-virtual address */
int mtrr; /* MTRR slot used */
} drm_local_map_t;
//struct drm_gem_mm {
// struct drm_mm offset_manager;
// struct drm_open_hash offset_hash;
//};
//
struct drm_lock_data {
struct drm_hw_lock *hw_lock; /* for i915_dma.c */
struct drm_file *file_priv; /* for i915_dma.c */
};
//
struct drm_master {
struct drm_lock_data lock; /* needed for i915_dma.c */
void *driver_priv; /* needed for i915_dma.c */
struct drm_minor *minor;
};
struct drm_file {
void *driver_priv;
struct drm_minor *minor; /* needed for drm_agpsupport.c */
struct drm_master *master; /* needed for i915_dma.c */
struct list_head fbs;
struct mutex fbs_lock;
unsigned stereo_allowed :1;
unsigned is_master :1; /* this file private is a master for a minor */
int event_space;
};
//
///*
// * needed for drm_agpsupport.c
// */
struct drm_minor {
struct device *kdev; /* needed by i915_irq.c */
struct drm_device *dev;
struct drm_master *master; /* needed for i915_dma.c */
int index; /**< Minor device number */
struct drm_mode_group mode_group;
int type; /**< Control or render */
};
//
///*
// * needed for drm_crtc_helper.h, included by i915_dma.c
// */
//struct drm_encoder { void *helper_private; };
//struct drm_mode_set { };
#define DRM_MODE_OBJECT_CRTC 0xcccccccc
//#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
//#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
#define DRM_MODE_OBJECT_MODE 0xdededede
//#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
//#define DRM_MODE_OBJECT_FB 0xfbfbfbfb
//#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
//#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
//#define DRM_MODE_OBJECT_BRIDGE 0xbdbdbdbd
#define DRM_MODE(nm, t, c, hd, hss, hse, ht, hsk, vd, vss, vse, vt, vs, f) \
.name = nm, .status = 0, .type = (t), .clock = (c), \
.hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), \
.htotal = (ht), .hskew = (hsk), .vdisplay = (vd), \
.vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), \
.vscan = (vs), .flags = (f), \
.base.type = DRM_MODE_OBJECT_MODE
#define CRTC_STEREO_DOUBLE (1 << 1) /* adjust timings for stereo modes */
struct drm_pending_vblank_event;
struct drm_fb_helper { int dummy; };
#include <drm/drm_dp_helper.h>
/***************************
** drm/drm_crtc_helper.h **
***************************/
struct drm_pending_event {
struct drm_event *event;
// struct list_head link;
struct drm_file *file_priv;
// pid_t pid; /* pid of requester, no guarantee it's valid by the time
// we deliver the event, for tracing only */
void (*destroy)(struct drm_pending_event *event);
};
struct drm_pending_vblank_event {
int dummy;
struct drm_pending_event base;
// int pipe;
struct drm_event_vblank event;
};
/******************
** Misc helpers **
******************/
/* normally found in drm_os_linux.h */
#define DRM_WAIT_ON( ret, queue, timeout, condition ) \
do { \
DECLARE_WAITQUEUE(entry, current); \
unsigned long end = jiffies + (timeout); \
add_wait_queue(&(queue), &entry); \
\
for (;;) { \
__set_current_state(TASK_INTERRUPTIBLE); \
if (condition) \
break; \
if (time_after_eq(jiffies, end)) { \
ret = -EBUSY; \
break; \
} \
schedule_timeout((HZ/100 > 1) ? HZ/100 : 1); \
if (signal_pending(current)) { \
ret = -EINTR; \
break; \
} \
} \
__set_current_state(TASK_RUNNING); \
remove_wait_queue(&(queue), &entry); \
} while (0)
/* normally found in Linux drmP.h */
#define LOCK_TEST_WITH_RETURN( dev, _file_priv ) \
do { \
if (!_DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock) || \
_file_priv->master->lock.file_priv != _file_priv) { \
DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\
__func__, _DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock),\
_file_priv->master->lock.file_priv, _file_priv); \
return -EINVAL; \
} \
} while (0)
static inline int drm_core_check_feature(struct drm_device *dev, int feature) {
return ((dev->driver->driver_features & feature) ? 1 : 0); }
#if 0
static inline int drm_core_has_AGP(struct drm_device *dev) {
return drm_core_check_feature(dev, DRIVER_USE_AGP); }
/*
* Functions normally provided by drm_bufs.c
*/
static inline resource_size_t
drm_get_resource_start(struct drm_device *dev, unsigned int rsc) {
return pci_resource_start(dev->pdev, rsc); }
static inline resource_size_t
drm_get_resource_len(struct drm_device *dev, unsigned int rsc) {
return pci_resource_len(dev->pdev, rsc); }
#endif
static __inline__ bool drm_can_sleep(void) { return true; }
extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah);
extern int drm_noop(struct drm_device *dev, void *data, struct drm_file *file_priv);
extern int drm_irq_install(struct drm_device *dev);
extern int drm_irq_uninstall(struct drm_device *dev);
extern struct drm_local_map *drm_getsarea(struct drm_device *dev);
extern int drm_vblank_init(struct drm_device *dev, int num_crtcs);
extern void drm_vblank_cleanup(struct drm_device *dev);
extern void drm_kms_helper_poll_disable(struct drm_device *dev);
extern void drm_kms_helper_poll_init(struct drm_device *dev);
extern void drm_mm_takedown(struct drm_mm *mm);
extern bool drm_helper_hpd_irq_event(struct drm_device *dev);
extern void drm_modeset_lock_all(struct drm_device *dev);
extern void drm_mode_config_reset(struct drm_device *dev);
extern void drm_modeset_unlock_all(struct drm_device *dev);
extern void drm_kms_helper_poll_enable(struct drm_device *dev);
extern int drm_get_pci_dev(struct pci_dev *pdev, const struct pci_device_id *ent, struct drm_driver *driver);
extern void drm_put_dev(struct drm_device *dev);
extern void drm_gem_vm_open(struct vm_area_struct *vma);
extern void drm_gem_vm_close(struct vm_area_struct *vma);
extern int drm_open(struct inode *inode, struct file *filp);
extern int drm_release(struct inode *inode, struct file *filp);
extern int drm_mmap(struct file *filp, struct vm_area_struct *vma);
extern long drm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
extern ssize_t drm_read(struct file *filp, char __user *buffer, size_t count, loff_t *offset);
extern int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma);
extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd);
extern int drm_gem_prime_fd_to_handle(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle);
extern int drm_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev, uint32_t handle);
extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
extern void drm_vblank_off(struct drm_device *dev, int crtc);
extern void drm_encoder_cleanup(struct drm_encoder *encoder);
extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
extern struct drm_connector *drm_select_eld(struct drm_encoder *encoder, struct drm_display_mode *mode);
extern int drm_av_sync_delay(struct drm_connector *connector, struct drm_display_mode *mode);
extern struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, struct drm_file *filp, u32 handle);
extern void drm_gem_object_unreference(struct drm_gem_object *obj);
extern void drm_gem_object_unreference_unlocked(struct drm_gem_object *obj);
extern uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth);
extern void drm_framebuffer_unregister_private(struct drm_framebuffer *fb);
extern void drm_framebuffer_unreference(struct drm_framebuffer *fb);
extern void drm_mode_set_name(struct drm_display_mode *mode);
extern void drm_crtc_cleanup(struct drm_crtc *crtc);
extern void drm_send_vblank_event(struct drm_device *dev, int crtc, struct drm_pending_vblank_event *e);
extern void drm_vblank_put(struct drm_device *dev, int crtc);
extern int drm_vblank_get(struct drm_device *dev, int crtc);
extern void drm_gem_object_reference(struct drm_gem_object *obj);
extern void drm_mode_debug_printmodeline(const struct drm_display_mode *mode);
extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src);
extern void drm_mode_set_crtcinfo(struct drm_display_mode *p, int adjust_flags);
extern int drm_object_property_set_value(struct drm_mode_object *obj, struct drm_property *property, uint64_t val);
extern void drm_calc_timestamping_constants(struct drm_crtc *crtc, const struct drm_display_mode *mode);
extern bool drm_mode_equal(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2);
extern bool drm_encoder_crtc_ok(struct drm_encoder *encoder, struct drm_crtc *crtc);
extern int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc, int gamma_size);
extern void drm_crtc_helper_add(struct drm_crtc *crtc, const struct drm_crtc_helper_funcs *funcs);
extern struct drm_mode_object *drm_mode_object_find(struct drm_device *dev, uint32_t id, uint32_t type);
extern void drm_helper_move_panel_connectors_to_head(struct drm_device *);
extern void drm_framebuffer_cleanup(struct drm_framebuffer *fb);
extern int drm_gem_handle_create(struct drm_file *file_priv, struct drm_gem_object *obj, u32 *handlep);
extern int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb, struct drm_mode_fb_cmd2 *mode_cmd);
extern int drm_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *fb, const struct drm_framebuffer_funcs *funcs);
extern void drm_mode_config_init(struct drm_device *dev);
extern void drm_kms_helper_poll_fini(struct drm_device *dev);
extern void drm_sysfs_connector_remove(struct drm_connector *connector);
extern void drm_mode_config_cleanup(struct drm_device *dev);
extern int drm_mode_connector_attach_encoder(struct drm_connector *connector, struct drm_encoder *encoder);
extern bool drm_dp_enhanced_frame_cap(const u8 dpcd[DP_RECEIVER_CAP_SIZE]);
extern int drm_encoder_init(struct drm_device *dev, struct drm_encoder *encoder, const struct drm_encoder_funcs *funcs, int encoder_type);
extern int drm_dp_bw_code_to_link_rate(u8 link_bw);
extern u8 drm_dp_max_lane_count(const u8 dpcd[DP_RECEIVER_CAP_SIZE]);
extern u8 drm_match_cea_mode(const struct drm_display_mode *to_match);
extern bool drm_probe_ddc(struct i2c_adapter *adapter);
extern struct edid *drm_edid_duplicate(const struct edid *edid);
extern struct edid *drm_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter);
extern bool drm_detect_monitor_audio(struct edid *edid);
extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev, const struct drm_display_mode *mode);
extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode);
extern void drm_connector_cleanup(struct drm_connector *connector);
extern int drm_helper_probe_single_connector_modes(struct drm_connector *connector, uint32_t maxX, uint32_t maxY);
extern int drm_mode_create_scaling_mode_property(struct drm_device *dev);
extern void drm_object_attach_property(struct drm_mode_object *obj, struct drm_property *property, uint64_t init_val);
extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid);
extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid);
extern void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid);
extern int drm_connector_init(struct drm_device *dev, struct drm_connector *connector, const struct drm_connector_funcs *funcs, int connector_type);
extern int drm_sysfs_connector_add(struct drm_connector *connector);
extern void drm_clflush_virt_range(char *addr, unsigned long length);
extern void drm_vma_node_unmap(struct drm_vma_offset_node *node, struct address_space *file_mapping);
extern bool drm_vma_node_has_offset(struct drm_vma_offset_node *node);
extern int drm_gem_create_mmap_offset(struct drm_gem_object *obj);
extern void drm_gem_free_mmap_offset(struct drm_gem_object *obj);
extern __u64 drm_vma_node_offset_addr(struct drm_vma_offset_node *node);
extern bool drm_mm_node_allocated(struct drm_mm_node *node);
extern void drm_mm_remove_node(struct drm_mm_node *node);
extern void drm_clflush_sg(struct sg_table *st);
extern int drm_gem_object_init(struct drm_device *dev, struct drm_gem_object *obj, size_t size);
extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg);
extern void drm_gem_object_release(struct drm_gem_object *obj);
extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size, size_t align);
extern void drm_clflush_pages(struct page *pages[], unsigned long num_pages);
extern void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode);
extern const char *drm_get_connector_name(const struct drm_connector *connector);
extern const char *drm_get_encoder_name(const struct drm_encoder *encoder);
extern const char *drm_get_format_name(uint32_t format);
extern void drm_mm_init(struct drm_mm *mm, unsigned long start, unsigned long size);
extern int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node);
extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc, int *max_error, struct timeval *vblank_time, unsigned flags, const struct drm_crtc *refcrtc, const struct drm_display_mode *mode);
extern const char *drm_get_connector_status_name(enum drm_connector_status status);
extern void drm_kms_helper_hotplug_event(struct drm_device *dev);
extern bool drm_handle_vblank(struct drm_device *dev, int crtc);
extern void drm_gem_private_object_init(struct drm_device *dev, struct drm_gem_object *obj, size_t size);
#ifdef __cplusplus
}
#endif /* extern "C" */
#endif /* _DRMP_H_ */