Home | History | Annotate | Download | only in vki
      1 /*
      2  * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
      3  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
      4  * Copyright (c) 2003-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
      5  * Copyright (c) 2007 Dave Airlie <airlied (at) linux.ie>
      6  * Copyright (c) 2007 Jakob Bornecrantz <wallbraker (at) gmail.com>
      7  * Copyright (c) 2007-2008 Intel Corporation
      8  * Copyright (c) 2008 Red Hat Inc.
      9  * All rights reserved.
     10  *
     11  * Permission is hereby granted, free of charge, to any person obtaining a
     12  * copy of this software and associated documentation files (the "Software"),
     13  * to deal in the Software without restriction, including without limitation
     14  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     15  * and/or sell copies of the Software, and to permit persons to whom the
     16  * Software is furnished to do so, subject to the following conditions:
     17  *
     18  * The above copyright notice and this permission notice (including the next
     19  * paragraph) shall be included in all copies or substantial portions of the
     20  * Software.
     21  *
     22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     23  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     24  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     25  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
     26  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     27  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     28  * OTHER DEALINGS IN THE SOFTWARE.
     29  */
     30 
     31 #ifndef __VKI_LINUX_DRM_H
     32 #define __VKI_LINUX_DRM_H
     33 
     34 //----------------------------------------------------------------------
     35 // From include/drm/drm.h
     36 //----------------------------------------------------------------------
     37 
     38 typedef unsigned int vki_drm_context_t;
     39 typedef unsigned int vki_drm_drawable_t;
     40 typedef unsigned int vki_drm_magic_t;
     41 
     42 struct vki_drm_clip_rect {
     43 	unsigned short x1;
     44 	unsigned short y1;
     45 	unsigned short x2;
     46 	unsigned short y2;
     47 };
     48 struct vki_drm_version {
     49 	int version_major;	  /**< Major version */
     50 	int version_minor;	  /**< Minor version */
     51 	int version_patchlevel;	  /**< Patch level */
     52 	vki_size_t name_len;	  /**< Length of name buffer */
     53 	char __user *name;	  /**< Name of driver */
     54 	vki_size_t date_len;	  /**< Length of date buffer */
     55 	char __user *date;	  /**< User-space buffer to hold date */
     56 	vki_size_t desc_len;	  /**< Length of desc buffer */
     57 	char __user *desc;	  /**< User-space buffer to hold desc */
     58 };
     59 struct vki_drm_unique {
     60 	vki_size_t unique_len;	  /**< Length of unique */
     61 	char __user *unique;	  /**< Unique name for driver instantiation */
     62 };
     63 struct vki_drm_block {
     64 	int unused;
     65 };
     66 struct vki_drm_control {
     67 	enum {
     68 		VKI_DRM_ADD_COMMAND,
     69 		VKI_DRM_RM_COMMAND,
     70 		VKI_DRM_INST_HANDLER,
     71 		VKI_DRM_UNINST_HANDLER
     72 	} func;
     73 	int irq;
     74 };
     75 
     76 enum vki_drm_map_type {
     77 	_VKI_DRM_FRAME_BUFFER = 0,	  /**< WC (no caching), no core dump */
     78 	_VKI_DRM_REGISTERS = 1,	  /**< no caching, no core dump */
     79 	_VKI_DRM_SHM = 2,		  /**< shared, cached */
     80 	_VKI_DRM_AGP = 3,		  /**< AGP/GART */
     81 	_VKI_DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */
     82 	_VKI_DRM_CONSISTENT = 5,	  /**< Consistent memory for PCI DMA */
     83 	_VKI_DRM_GEM = 6,		  /**< GEM object */
     84 };
     85 enum vki_drm_map_flags {
     86 	_VKI_DRM_RESTRICTED = 0x01,	     /**< Cannot be mapped to user-virtual */
     87 	_VKI_DRM_READ_ONLY = 0x02,
     88 	_VKI_DRM_LOCKED = 0x04,	     /**< shared, cached, locked */
     89 	_VKI_DRM_KERNEL = 0x08,	     /**< kernel requires access */
     90 	_VKI_DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
     91 	_VKI_DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
     92 	_VKI_DRM_REMOVABLE = 0x40,	     /**< Removable mapping */
     93 	_VKI_DRM_DRIVER = 0x80	     /**< Managed by driver */
     94 };
     95 struct vki_drm_ctx_priv_map {
     96 	unsigned int ctx_id;	 /**< Context requesting private mapping */
     97 	void *handle;		 /**< Handle of map */
     98 };
     99 struct vki_drm_map {
    100 	unsigned long offset;	 /**< Requested physical address (0 for SAREA)*/
    101 	unsigned long size;	 /**< Requested physical size (bytes) */
    102 	enum vki_drm_map_type type;	 /**< Type of memory to map */
    103 	enum vki_drm_map_flags flags;	 /**< Flags */
    104 	void *handle;		 /**< User-space: "Handle" to pass to mmap() */
    105 				 /**< Kernel-space: kernel-virtual address */
    106 	int mtrr;		 /**< MTRR slot used */
    107 	/*   Private data */
    108 };
    109 struct vki_drm_client {
    110 	int idx;		/**< Which client desired? */
    111 	int auth;		/**< Is client authenticated? */
    112 	unsigned long pid;	/**< Process ID */
    113 	unsigned long uid;	/**< User ID */
    114 	unsigned long magic;	/**< Magic */
    115 	unsigned long iocs;	/**< Ioctl count */
    116 };
    117 enum vki_drm_stat_type {
    118 	_VKI_DRM_STAT_LOCK,
    119 	_VKI_DRM_STAT_OPENS,
    120 	_VKI_DRM_STAT_CLOSES,
    121 	_VKI_DRM_STAT_IOCTLS,
    122 	_VKI_DRM_STAT_LOCKS,
    123 	_VKI_DRM_STAT_UNLOCKS,
    124 	_VKI_DRM_STAT_VALUE,	/**< Generic value */
    125 	_VKI_DRM_STAT_BYTE,		/**< Generic byte counter (1024bytes/K) */
    126 	_VKI_DRM_STAT_COUNT,	/**< Generic non-byte counter (1000/k) */
    127 
    128 	_VKI_DRM_STAT_IRQ,		/**< IRQ */
    129 	_VKI_DRM_STAT_PRIMARY,	/**< Primary DMA bytes */
    130 	_VKI_DRM_STAT_SECONDARY,	/**< Secondary DMA bytes */
    131 	_VKI_DRM_STAT_DMA,		/**< DMA */
    132 	_VKI_DRM_STAT_SPECIAL,	/**< Special DMA (e.g., priority or polled) */
    133 	_VKI_DRM_STAT_MISSED	/**< Missed DMA opportunity */
    134 	    /* Add to the *END* of the list */
    135 };
    136 struct vki_drm_stats {
    137 	unsigned long count;
    138 	struct {
    139 		unsigned long value;
    140 		enum vki_drm_stat_type type;
    141 	} data[15];
    142 };
    143 enum vki_drm_lock_flags {
    144 	_VKI_DRM_LOCK_READY = 0x01,	     /**< Wait until hardware is ready for DMA */
    145 	_VKI_DRM_LOCK_QUIESCENT = 0x02,  /**< Wait until hardware quiescent */
    146 	_VKI_DRM_LOCK_FLUSH = 0x04,	     /**< Flush this context's DMA queue first */
    147 	_VKI_DRM_LOCK_FLUSH_ALL = 0x08,  /**< Flush all DMA queues first */
    148 	/* These *HALT* flags aren't supported yet
    149 	   -- they will be used to support the
    150 	   full-screen DGA-like mode. */
    151 	_VKI_DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */
    152 	_VKI_DRM_HALT_CUR_QUEUES = 0x20  /**< Halt all current queues */
    153 };
    154 struct vki_drm_lock {
    155 	int context;
    156 	enum vki_drm_lock_flags flags;
    157 };
    158 enum vki_drm_dma_flags {
    159 	/* Flags for DMA buffer dispatch */
    160 	_VKI_DRM_DMA_BLOCK = 0x01,	      /**<
    161 				       * Block until buffer dispatched.
    162 				       *
    163 				       * \note The buffer may not yet have
    164 				       * been processed by the hardware --
    165 				       * getting a hardware lock with the
    166 				       * hardware quiescent will ensure
    167 				       * that the buffer has been
    168 				       * processed.
    169 				       */
    170 	_VKI_DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */
    171 	_VKI_DRM_DMA_PRIORITY = 0x04,     /**< High priority dispatch */
    172 
    173 	/* Flags for DMA buffer request */
    174 	_VKI_DRM_DMA_WAIT = 0x10,	      /**< Wait for free buffers */
    175 	_VKI_DRM_DMA_SMALLER_OK = 0x20,   /**< Smaller-than-requested buffers OK */
    176 	_VKI_DRM_DMA_LARGER_OK = 0x40     /**< Larger-than-requested buffers OK */
    177 };
    178 struct vki_drm_buf_desc {
    179 	int count;		 /**< Number of buffers of this size */
    180 	int size;		 /**< Size in bytes */
    181 	int low_mark;		 /**< Low water mark */
    182 	int high_mark;		 /**< High water mark */
    183 	enum {
    184 		_VKI_DRM_PAGE_ALIGN = 0x01,	/**< Align on page boundaries for DMA */
    185 		_VKI_DRM_AGP_BUFFER = 0x02,	/**< Buffer is in AGP space */
    186 		_VKI_DRM_SG_BUFFER = 0x04,	/**< Scatter/gather memory buffer */
    187 		_VKI_DRM_FB_BUFFER = 0x08,	/**< Buffer is in frame buffer */
    188 		_VKI_DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
    189 	} flags;
    190 	unsigned long agp_start; /**<
    191 				  * Start address of where the AGP buffers are
    192 				  * in the AGP aperture
    193 				  */
    194 };
    195 struct vki_drm_buf_info {
    196 	int count;		/**< Entries in list */
    197 	struct vki_drm_buf_desc __user *list;
    198 };
    199 struct vki_drm_buf_free {
    200 	int count;
    201 	int __user *list;
    202 };
    203 
    204 struct vki_drm_buf_pub {
    205 	int idx;		       /**< Index into the master buffer list */
    206 	int total;		       /**< Buffer size */
    207 	int used;		       /**< Amount of buffer in use (for DMA) */
    208 	void __user *address;	       /**< Address of buffer */
    209 };
    210 struct vki_drm_buf_map {
    211 	int count;		/**< Length of the buffer list */
    212 	void __user *virtuaL;		/**< Mmap'd area in user-virtual */
    213 	struct vki_drm_buf_pub __user *list;	/**< Buffer information */
    214 };
    215 struct vki_drm_dma {
    216 	int context;			  /**< Context handle */
    217 	int send_count;			  /**< Number of buffers to send */
    218 	int __user *send_indices;	  /**< List of handles to buffers */
    219 	int __user *send_sizes;		  /**< Lengths of data to send */
    220 	enum vki_drm_dma_flags flags;	  /**< Flags */
    221 	int request_count;		  /**< Number of buffers requested */
    222 	int request_size;		  /**< Desired size for buffers */
    223 	int __user *request_indices;	  /**< Buffer information */
    224 	int __user *request_sizes;
    225 	int granted_count;		  /**< Number of buffers granted */
    226 };
    227 
    228 enum vki_drm_ctx_flags {
    229 	_VKI_DRM_CONTEXT_PRESERVED = 0x01,
    230 	_VKI_DRM_CONTEXT_2DONLY = 0x02
    231 };
    232 struct vki_drm_ctx {
    233 	vki_drm_context_t handle;
    234 	enum vki_drm_ctx_flags flags;
    235 };
    236 struct vki_drm_ctx_res {
    237 	int count;
    238 	struct vki_drm_ctx __user *contexts;
    239 };
    240 struct vki_drm_draw {
    241 	vki_drm_drawable_t handle;
    242 };
    243 typedef enum {
    244 	VKI_DRM_DRAWABLE_CLIPRECTS,
    245 } vki_drm_drawable_info_type_t;
    246 struct vki_drm_update_draw {
    247 	vki_drm_drawable_t handle;
    248 	unsigned int type;
    249 	unsigned int num;
    250 	unsigned long long data;
    251 };
    252 struct vki_drm_auth {
    253 	vki_drm_magic_t magic;
    254 };
    255 struct vki_drm_irq_busid {
    256 	int irq;	/**< IRQ number */
    257 	int busnum;	/**< bus number */
    258 	int devnum;	/**< device number */
    259 	int funcnum;	/**< function number */
    260 };
    261 enum vki_drm_vblank_seq_type {
    262 	_VKI_DRM_VBLANK_ABSOLUTE = 0x0,	/**< Wait for specific vblank sequence number */
    263 	_VKI_DRM_VBLANK_RELATIVE = 0x1,	/**< Wait for given number of vblanks */
    264 	_VKI_DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e,
    265 	_VKI_DRM_VBLANK_EVENT = 0x4000000,   /**< Send event instead of blocking */
    266 	_VKI_DRM_VBLANK_FLIP = 0x8000000,   /**< Scheduled buffer swap should flip */
    267 	_VKI_DRM_VBLANK_NEXTONMISS = 0x10000000,	/**< If missed, wait for next vblank */
    268 	_VKI_DRM_VBLANK_SECONDARY = 0x20000000,	/**< Secondary display controller */
    269 	_VKI_DRM_VBLANK_SIGNAL = 0x40000000	/**< Send signal instead of blocking, unsupported */
    270 };
    271 struct vki_drm_wait_vblank_request {
    272 	enum vki_drm_vblank_seq_type type;
    273 	unsigned int sequence;
    274 	unsigned long signal;
    275 };
    276 struct vki_drm_wait_vblank_reply {
    277 	enum vki_drm_vblank_seq_type type;
    278 	unsigned int sequence;
    279 	long tval_sec;
    280 	long tval_usec;
    281 };
    282 union vki_drm_wait_vblank {
    283 	struct vki_drm_wait_vblank_request request;
    284 	struct vki_drm_wait_vblank_reply reply;
    285 };
    286 struct vki_drm_modeset_ctl {
    287 	__vki_u32 crtc;
    288 	__vki_u32 cmd;
    289 };
    290 struct vki_drm_agp_mode {
    291 	unsigned long mode;	/**< AGP mode */
    292 };
    293 struct vki_drm_agp_buffer {
    294 	unsigned long size;	/**< In bytes -- will round to page boundary */
    295 	unsigned long handle;	/**< Used for binding / unbinding */
    296 	unsigned long type;	/**< Type of memory to allocate */
    297 	unsigned long physical;	/**< Physical used by i810 */
    298 };
    299 struct vki_drm_agp_binding {
    300 	unsigned long handle;	/**< From drm_agp_buffer */
    301 	unsigned long offset;	/**< In bytes -- will round to page boundary */
    302 };
    303 struct vki_drm_agp_info {
    304 	int agp_version_major;
    305 	int agp_version_minor;
    306 	unsigned long mode;
    307 	unsigned long aperture_base;	/* physical address */
    308 	unsigned long aperture_size;	/* bytes */
    309 	unsigned long memory_allowed;	/* bytes */
    310 	unsigned long memory_used;
    311 	unsigned short id_vendor;
    312 	unsigned short id_device;
    313 };
    314 struct vki_drm_scatter_gather {
    315 	unsigned long size;	/**< In bytes -- will round to page boundary */
    316 	unsigned long handle;	/**< Used for mapping / unmapping */
    317 };
    318 
    319 struct vki_drm_set_version {
    320 	int drm_di_major;
    321 	int drm_di_minor;
    322 	int drm_dd_major;
    323 	int drm_dd_minor;
    324 };
    325 struct vki_drm_gem_close {
    326 	__vki_u32 handle;
    327 	__vki_u32 pad;
    328 };
    329 struct vki_drm_gem_flink {
    330 	__vki_u32 handle;
    331 	__vki_u32 name;
    332 };
    333 struct vki_drm_gem_open {
    334 	__vki_u32 name;
    335 	__vki_u32 handle;
    336 	__vki_u64 size;
    337 };
    338 
    339 //----------------------------------------------------------------------
    340 // From include/drm/drm_mode.h
    341 //----------------------------------------------------------------------
    342 
    343 #define VKI_DRM_DISPLAY_MODE_LEN 32
    344 #define VKI_DRM_PROP_NAME_LEN 32
    345 struct vki_drm_mode_modeinfo {
    346 	__vki_u32 clock;
    347 	__vki_u16 hdisplay, hsync_start, hsync_end, htotal, hskew;
    348 	__vki_u16 vdisplay, vsync_start, vsync_end, vtotal, vscan;
    349 
    350 	__vki_u32 vrefresh; /* vertical refresh * 1000 */
    351 
    352 	__vki_u32 flags;
    353 	__vki_u32 type;
    354 	char name[VKI_DRM_DISPLAY_MODE_LEN];
    355 };
    356 struct vki_drm_mode_card_res {
    357 	__vki_u64 fb_id_ptr;
    358 	__vki_u64 crtc_id_ptr;
    359 	__vki_u64 connector_id_ptr;
    360 	__vki_u64 encoder_id_ptr;
    361 	__vki_u32 count_fbs;
    362 	__vki_u32 count_crtcs;
    363 	__vki_u32 count_connectors;
    364 	__vki_u32 count_encoders;
    365 	__vki_u32 min_width, max_width;
    366 	__vki_u32 min_height, max_height;
    367 };
    368 struct vki_drm_mode_crtc {
    369 	__vki_u64 set_connectors_ptr;
    370 	__vki_u32 count_connectors;
    371 
    372 	__vki_u32 crtc_id; /**< Id */
    373 	__vki_u32 fb_id; /**< Id of framebuffer */
    374 
    375 	__vki_u32 x, y; /**< Position on the frameuffer */
    376 
    377 	__vki_u32 gamma_size;
    378 	__vki_u32 mode_valid;
    379 	struct vki_drm_mode_modeinfo mode;
    380 };
    381 struct vki_drm_mode_get_encoder {
    382 	__vki_u32 encoder_id;
    383 	__vki_u32 encoder_type;
    384 
    385 	__vki_u32 crtc_id; /**< Id of crtc */
    386 
    387 	__vki_u32 possible_crtcs;
    388 	__vki_u32 possible_clones;
    389 };
    390 struct vki_drm_mode_get_property {
    391 	__vki_u64 values_ptr; /* values and blob lengths */
    392 	__vki_u64 enum_blob_ptr; /* enum and blob id ptrs */
    393 
    394 	__vki_u32 prop_id;
    395 	__vki_u32 flags;
    396 	char name[VKI_DRM_PROP_NAME_LEN];
    397 
    398 	__vki_u32 count_values;
    399 	__vki_u32 count_enum_blobs;
    400 };
    401 struct vki_drm_mode_connector_set_property {
    402 	__vki_u64 value;
    403 	__vki_u32 prop_id;
    404 	__vki_u32 connector_id;
    405 };
    406 struct vki_drm_mode_get_blob {
    407 	__vki_u32 blob_id;
    408 	__vki_u32 length;
    409 	__vki_u64 data;
    410 };
    411 struct vki_drm_mode_fb_cmd {
    412 	__vki_u32 fb_id;
    413 	__vki_u32 width, height;
    414 	__vki_u32 pitch;
    415 	__vki_u32 bpp;
    416 	__vki_u32 depth;
    417 	/* driver specific handle */
    418 	__vki_u32 handle;
    419 };
    420 struct vki_drm_mode_mode_cmd {
    421 	__vki_u32 connector_id;
    422 	struct vki_drm_mode_modeinfo mode;
    423 };
    424 struct vki_drm_mode_cursor {
    425 	__vki_u32 flags;
    426 	__vki_u32 crtc_id;
    427 	__vki_s32 x;
    428 	__vki_s32 y;
    429 	__vki_u32 width;
    430 	__vki_u32 height;
    431 	/* driver specific handle */
    432 	__vki_u32 handle;
    433 };
    434 struct vki_drm_mode_crtc_lut {
    435 	__vki_u32 crtc_id;
    436 	__vki_u32 gamma_size;
    437 
    438 	/* pointers to arrays */
    439 	__vki_u64 red;
    440 	__vki_u64 green;
    441 	__vki_u64 blue;
    442 };
    443 
    444 //----------------------------------------------------------------------
    445 // From include/drm/drm.h
    446 //----------------------------------------------------------------------
    447 
    448 #define VKI_DRM_IOCTL_BASE		'd'
    449 
    450 #define VKI_DRM_IO(nr)			_VKI_IO(VKI_DRM_IOCTL_BASE,nr)
    451 #define VKI_DRM_IOR(nr,type)		_VKI_IOR(VKI_DRM_IOCTL_BASE,nr,type)
    452 #define VKI_DRM_IOW(nr,type)		_VKI_IOW(VKI_DRM_IOCTL_BASE,nr,type)
    453 #define VKI_DRM_IOWR(nr,type)		_VKI_IOWR(VKI_DRM_IOCTL_BASE,nr,type)
    454 
    455 
    456 #define VKI_DRM_IOCTL_VERSION		VKI_DRM_IOWR(0x00, struct vki_drm_version)
    457 #define VKI_DRM_IOCTL_GET_UNIQUE	VKI_DRM_IOWR(0x01, struct vki_drm_unique)
    458 #define VKI_DRM_IOCTL_GET_MAGIC		VKI_DRM_IOR( 0x02, struct vki_drm_auth)
    459 #define VKI_DRM_IOCTL_IRQ_BUSID		VKI_DRM_IOWR(0x03, struct vki_drm_irq_busid)
    460 #define VKI_DRM_IOCTL_GET_MAP           VKI_DRM_IOWR(0x04, struct vki_drm_map)
    461 #define VKI_DRM_IOCTL_GET_CLIENT        VKI_DRM_IOWR(0x05, struct vki_drm_client)
    462 #define VKI_DRM_IOCTL_GET_STATS         VKI_DRM_IOR( 0x06, struct vki_drm_stats)
    463 #define VKI_DRM_IOCTL_SET_VERSION	VKI_DRM_IOWR(0x07, struct vki_drm_set_version)
    464 #define VKI_DRM_IOCTL_MODESET_CTL       VKI_DRM_IOW(0x08, struct vki_drm_modeset_ctl)
    465 #define VKI_DRM_IOCTL_GEM_CLOSE		VKI_DRM_IOW (0x09, struct vki_drm_gem_close)
    466 #define VKI_DRM_IOCTL_GEM_FLINK		VKI_DRM_IOWR(0x0a, struct vki_drm_gem_flink)
    467 #define VKI_DRM_IOCTL_GEM_OPEN		VKI_DRM_IOWR(0x0b, struct vki_drm_gem_open)
    468 
    469 #define VKI_DRM_IOCTL_SET_UNIQUE	VKI_DRM_IOW( 0x10, struct vki_drm_unique)
    470 #define VKI_DRM_IOCTL_AUTH_MAGIC	VKI_DRM_IOW( 0x11, struct vki_drm_auth)
    471 #define VKI_DRM_IOCTL_BLOCK		VKI_DRM_IOWR(0x12, struct vki_drm_block)
    472 #define VKI_DRM_IOCTL_UNBLOCK		VKI_DRM_IOWR(0x13, struct vki_drm_block)
    473 #define VKI_DRM_IOCTL_CONTROL		VKI_DRM_IOW( 0x14, struct vki_drm_control)
    474 #define VKI_DRM_IOCTL_ADD_MAP		VKI_DRM_IOWR(0x15, struct vki_drm_map)
    475 #define VKI_DRM_IOCTL_ADD_BUFS		VKI_DRM_IOWR(0x16, struct vki_drm_buf_desc)
    476 #define VKI_DRM_IOCTL_MARK_BUFS		VKI_DRM_IOW( 0x17, struct vki_drm_buf_desc)
    477 #define VKI_DRM_IOCTL_INFO_BUFS		VKI_DRM_IOWR(0x18, struct vki_drm_buf_info)
    478 #define VKI_DRM_IOCTL_MAP_BUFS		VKI_DRM_IOWR(0x19, struct vki_drm_buf_map)
    479 #define VKI_DRM_IOCTL_FREE_BUFS		VKI_DRM_IOW( 0x1a, struct vki_drm_buf_free)
    480 
    481 #define VKI_DRM_IOCTL_RM_MAP		VKI_DRM_IOW( 0x1b, struct vki_drm_map)
    482 
    483 #define VKI_DRM_IOCTL_SET_SAREA_CTX	VKI_DRM_IOW( 0x1c, struct vki_drm_ctx_priv_map)
    484 #define VKI_DRM_IOCTL_GET_SAREA_CTX 	VKI_DRM_IOWR(0x1d, struct vki_drm_ctx_priv_map)
    485 
    486 #define VKI_DRM_IOCTL_SET_MASTER        VKI_DRM_IO(0x1e)
    487 #define VKI_DRM_IOCTL_DROP_MASTER       VKI_DRM_IO(0x1f)
    488 
    489 #define VKI_DRM_IOCTL_ADD_CTX		VKI_DRM_IOWR(0x20, struct vki_drm_ctx)
    490 #define VKI_DRM_IOCTL_RM_CTX		VKI_DRM_IOWR(0x21, struct vki_drm_ctx)
    491 #define VKI_DRM_IOCTL_MOD_CTX		VKI_DRM_IOW( 0x22, struct vki_drm_ctx)
    492 #define VKI_DRM_IOCTL_GET_CTX		VKI_DRM_IOWR(0x23, struct vki_drm_ctx)
    493 #define VKI_DRM_IOCTL_SWITCH_CTX	VKI_DRM_IOW( 0x24, struct vki_drm_ctx)
    494 #define VKI_DRM_IOCTL_NEW_CTX		VKI_DRM_IOW( 0x25, struct vki_drm_ctx)
    495 #define VKI_DRM_IOCTL_RES_CTX		VKI_DRM_IOWR(0x26, struct vki_drm_ctx_res)
    496 #define VKI_DRM_IOCTL_ADD_DRAW		VKI_DRM_IOWR(0x27, struct vki_drm_draw)
    497 #define VKI_DRM_IOCTL_RM_DRAW		VKI_DRM_IOWR(0x28, struct vki_drm_draw)
    498 #define VKI_DRM_IOCTL_DMA		VKI_DRM_IOWR(0x29, struct vki_drm_dma)
    499 #define VKI_DRM_IOCTL_LOCK		VKI_DRM_IOW( 0x2a, struct vki_drm_lock)
    500 #define VKI_DRM_IOCTL_UNLOCK		VKI_DRM_IOW( 0x2b, struct vki_drm_lock)
    501 #define VKI_DRM_IOCTL_FINISH		VKI_DRM_IOW( 0x2c, struct vki_drm_lock)
    502 
    503 #define VKI_DRM_IOCTL_AGP_ACQUIRE	VKI_DRM_IO(  0x30)
    504 #define VKI_DRM_IOCTL_AGP_RELEASE	VKI_DRM_IO(  0x31)
    505 #define VKI_DRM_IOCTL_AGP_ENABLE	VKI_DRM_IOW( 0x32, struct vki_drm_agp_mode)
    506 #define VKI_DRM_IOCTL_AGP_INFO		VKI_DRM_IOR( 0x33, struct vki_drm_agp_info)
    507 #define VKI_DRM_IOCTL_AGP_ALLOC		VKI_DRM_IOWR(0x34, struct vki_drm_agp_buffer)
    508 #define VKI_DRM_IOCTL_AGP_FREE		VKI_DRM_IOW( 0x35, struct vki_drm_agp_buffer)
    509 #define VKI_DRM_IOCTL_AGP_BIND		VKI_DRM_IOW( 0x36, struct vki_drm_agp_binding)
    510 #define VKI_DRM_IOCTL_AGP_UNBIND	VKI_DRM_IOW( 0x37, struct vki_drm_agp_binding)
    511 
    512 #define VKI_DRM_IOCTL_SG_ALLOC		VKI_DRM_IOWR(0x38, struct vki_drm_scatter_gather)
    513 #define VKI_DRM_IOCTL_SG_FREE		VKI_DRM_IOW( 0x39, struct vki_drm_scatter_gather)
    514 
    515 #define VKI_DRM_IOCTL_WAIT_VBLANK	VKI_DRM_IOWR(0x3a, union vki_drm_wait_vblank)
    516 
    517 #define VKI_DRM_IOCTL_UPDATE_DRAW	VKI_DRM_IOW(0x3f, struct vki_drm_update_draw)
    518 
    519 #define VKI_DRM_IOCTL_MODE_GETRESOURCES	VKI_DRM_IOWR(0xA0, struct vki_drm_mode_card_res)
    520 #define VKI_DRM_IOCTL_MODE_GETCRTC	VKI_DRM_IOWR(0xA1, struct vki_drm_mode_crtc)
    521 #define VKI_DRM_IOCTL_MODE_SETCRTC	VKI_DRM_IOWR(0xA2, struct vki_drm_mode_crtc)
    522 #define VKI_DRM_IOCTL_MODE_CURSOR	VKI_DRM_IOWR(0xA3, struct vki_drm_mode_cursor)
    523 #define VKI_DRM_IOCTL_MODE_GETGAMMA	VKI_DRM_IOWR(0xA4, struct vki_drm_mode_crtc_lut)
    524 #define VKI_DRM_IOCTL_MODE_SETGAMMA	VKI_DRM_IOWR(0xA5, struct vki_drm_mode_crtc_lut)
    525 #define VKI_DRM_IOCTL_MODE_GETENCODER	VKI_DRM_IOWR(0xA6, struct vki_drm_mode_get_encoder)
    526 #define VKI_DRM_IOCTL_MODE_GETCONNECTOR	VKI_DRM_IOWR(0xA7, struct vki_drm_mode_get_connector)
    527 #define VKI_DRM_IOCTL_MODE_ATTACHMODE	VKI_DRM_IOWR(0xA8, struct vki_drm_mode_mode_cmd)
    528 #define VKI_DRM_IOCTL_MODE_DETACHMODE	VKI_DRM_IOWR(0xA9, struct vki_drm_mode_mode_cmd)
    529 
    530 #define VKI_DRM_IOCTL_MODE_GETPROPERTY	VKI_DRM_IOWR(0xAA, struct vki_drm_mode_get_property)
    531 #define VKI_DRM_IOCTL_MODE_SETPROPERTY	VKI_DRM_IOWR(0xAB, struct vki_drm_mode_connector_set_property)
    532 #define VKI_DRM_IOCTL_MODE_GETPROPBLOB	VKI_DRM_IOWR(0xAC, struct vki_drm_mode_get_blob)
    533 #define VKI_DRM_IOCTL_MODE_GETFB	VKI_DRM_IOWR(0xAD, struct vki_drm_mode_fb_cmd)
    534 #define VKI_DRM_IOCTL_MODE_ADDFB	VKI_DRM_IOWR(0xAE, struct vki_drm_mode_fb_cmd)
    535 #define VKI_DRM_IOCTL_MODE_RMFB		VKI_DRM_IOWR(0xAF, unsigned int)
    536 
    537 #define VKI_DRM_COMMAND_BASE            0x40
    538 #define VKI_DRM_COMMAND_END		0xA0
    539 
    540 //----------------------------------------------------------------------
    541 // From include/drm/i915_drm.h
    542 //----------------------------------------------------------------------
    543 
    544 typedef struct _vki_drm_i915_init {
    545 	enum {
    546 		VKI_I915_INIT_DMA = 0x01,
    547 		VKI_I915_CLEANUP_DMA = 0x02,
    548 		VKI_I915_RESUME_DMA = 0x03
    549 	} func;
    550 	unsigned int mmio_offset;
    551 	int sarea_priv_offset;
    552 	unsigned int ring_start;
    553 	unsigned int ring_end;
    554 	unsigned int ring_size;
    555 	unsigned int front_offset;
    556 	unsigned int back_offset;
    557 	unsigned int depth_offset;
    558 	unsigned int w;
    559 	unsigned int h;
    560 	unsigned int pitch;
    561 	unsigned int pitch_bits;
    562 	unsigned int back_pitch;
    563 	unsigned int depth_pitch;
    564 	unsigned int cpp;
    565 	unsigned int chipset;
    566 } vki_drm_i915_init_t;
    567 
    568 #define VKI_DRM_I915_INIT		    0x00
    569 #define VKI_DRM_I915_FLUSH		    0x01
    570 #define VKI_DRM_I915_FLIP		    0x02
    571 #define VKI_DRM_I915_BATCHBUFFER	    0x03
    572 #define VKI_DRM_I915_IRQ_EMIT		    0x04
    573 #define VKI_DRM_I915_IRQ_WAIT		    0x05
    574 #define VKI_DRM_I915_GETPARAM		    0x06
    575 #define VKI_DRM_I915_SETPARAM		    0x07
    576 #define VKI_DRM_I915_ALLOC		    0x08
    577 #define VKI_DRM_I915_FREE		    0x09
    578 #define VKI_DRM_I915_INIT_HEAP		    0x0a
    579 #define VKI_DRM_I915_CMDBUFFER		    0x0b
    580 #define VKI_DRM_I915_DESTROY_HEAP	    0x0c
    581 #define VKI_DRM_I915_SET_VBLANK_PIPE	    0x0d
    582 #define VKI_DRM_I915_GET_VBLANK_PIPE	    0x0e
    583 #define VKI_DRM_I915_VBLANK_SWAP	    0x0f
    584 #define VKI_DRM_I915_HWS_ADDR		    0x11
    585 #define VKI_DRM_I915_GEM_INIT		    0x13
    586 #define VKI_DRM_I915_GEM_EXECBUFFER	    0x14
    587 #define VKI_DRM_I915_GEM_PIN		    0x15
    588 #define VKI_DRM_I915_GEM_UNPIN		    0x16
    589 #define VKI_DRM_I915_GEM_BUSY		    0x17
    590 #define VKI_DRM_I915_GEM_THROTTLE	    0x18
    591 #define VKI_DRM_I915_GEM_ENTERVT	    0x19
    592 #define VKI_DRM_I915_GEM_LEAVEVT	    0x1a
    593 #define VKI_DRM_I915_GEM_CREATE		    0x1b
    594 #define VKI_DRM_I915_GEM_PREAD		    0x1c
    595 #define VKI_DRM_I915_GEM_PWRITE		    0x1d
    596 #define VKI_DRM_I915_GEM_MMAP		    0x1e
    597 #define VKI_DRM_I915_GEM_SET_DOMAIN	    0x1f
    598 #define VKI_DRM_I915_GEM_SW_FINISH	    0x20
    599 #define VKI_DRM_I915_GEM_SET_TILING	    0x21
    600 #define VKI_DRM_I915_GEM_GET_TILING	    0x22
    601 #define VKI_DRM_I915_GEM_GET_APERTURE	    0x23
    602 #define VKI_DRM_I915_GEM_MMAP_GTT	    0x24
    603 #define VKI_DRM_I915_GET_PIPE_FROM_CRTC_ID  0x25
    604 #define VKI_DRM_I915_GEM_MADVISE	    0x26
    605 #define VKI_DRM_I915_OVERLAY_PUT_IMAGE	    0x27
    606 #define VKI_DRM_I915_OVERLAY_ATTRS	    0x28
    607 #define VKI_DRM_I915_GEM_EXECBUFFER2	    0x29
    608 
    609 #define VKI_DRM_IOCTL_I915_INIT			    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_INIT, vki_drm_i915_init_t)
    610 #define VKI_DRM_IOCTL_I915_FLUSH		    VKI_DRM_IO ( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_FLUSH)
    611 #define VKI_DRM_IOCTL_I915_FLIP			    VKI_DRM_IO ( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_FLIP)
    612 #define VKI_DRM_IOCTL_I915_BATCHBUFFER		    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_BATCHBUFFER, vki_drm_i915_batchbuffer_t)
    613 #define VKI_DRM_IOCTL_I915_IRQ_EMIT		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_IRQ_EMIT, vki_drm_i915_irq_emit_t)
    614 #define VKI_DRM_IOCTL_I915_IRQ_WAIT		    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_IRQ_WAIT, vki_drm_i915_irq_wait_t)
    615 #define VKI_DRM_IOCTL_I915_GETPARAM		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GETPARAM, vki_drm_i915_getparam_t)
    616 #define VKI_DRM_IOCTL_I915_SETPARAM		    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_SETPARAM, vki_drm_i915_setparam_t)
    617 #define VKI_DRM_IOCTL_I915_ALLOC		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_ALLOC, vki_drm_i915_mem_alloc_t)
    618 #define VKI_DRM_IOCTL_I915_FREE			    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_FREE, vki_drm_i915_mem_free_t)
    619 #define VKI_DRM_IOCTL_I915_INIT_HEAP		    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_INIT_HEAP, vki_drm_i915_mem_init_heap_t)
    620 #define VKI_DRM_IOCTL_I915_CMDBUFFER		    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_CMDBUFFER, vki_drm_i915_cmdbuffer_t)
    621 #define VKI_DRM_IOCTL_I915_DESTROY_HEAP		    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_DESTROY_HEAP, vki_drm_i915_mem_destroy_heap_t)
    622 #define VKI_DRM_IOCTL_I915_SET_VBLANK_PIPE	    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_SET_VBLANK_PIPE, vki_drm_i915_vblank_pipe_t)
    623 #define VKI_DRM_IOCTL_I915_GET_VBLANK_PIPE	    VKI_DRM_IOR( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GET_VBLANK_PIPE, vki_drm_i915_vblank_pipe_t)
    624 #define VKI_DRM_IOCTL_I915_VBLANK_SWAP		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_VBLANK_SWAP, vki_drm_i915_vblank_swap_t)
    625 #define VKI_DRM_IOCTL_I915_GEM_INIT		    VKI_DRM_IOW(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_INIT, struct vki_drm_i915_gem_init)
    626 #define VKI_DRM_IOCTL_I915_GEM_EXECBUFFER	    VKI_DRM_IOW(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_EXECBUFFER, struct vki_drm_i915_gem_execbuffer)
    627 #define VKI_DRM_IOCTL_I915_GEM_PIN		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_PIN, struct vki_drm_i915_gem_pin)
    628 #define VKI_DRM_IOCTL_I915_GEM_UNPIN		    VKI_DRM_IOW(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_UNPIN, struct vki_drm_i915_gem_unpin)
    629 #define VKI_DRM_IOCTL_I915_GEM_BUSY		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_BUSY, struct vki_drm_i915_gem_busy)
    630 #define VKI_DRM_IOCTL_I915_GEM_THROTTLE		    VKI_DRM_IO ( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_THROTTLE)
    631 #define VKI_DRM_IOCTL_I915_GEM_ENTERVT		    VKI_DRM_IO(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_ENTERVT)
    632 #define VKI_DRM_IOCTL_I915_GEM_LEAVEVT		    VKI_DRM_IO(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_LEAVEVT)
    633 #define VKI_DRM_IOCTL_I915_GEM_CREATE		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_CREATE, struct vki_drm_i915_gem_create)
    634 #define VKI_DRM_IOCTL_I915_GEM_PREAD		    VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_PREAD, struct vki_drm_i915_gem_pread)
    635 #define VKI_DRM_IOCTL_I915_GEM_PWRITE		    VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_PWRITE, struct vki_drm_i915_gem_pwrite)
    636 #define VKI_DRM_IOCTL_I915_GEM_MMAP		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_MMAP, struct vki_drm_i915_gem_mmap)
    637 #define VKI_DRM_IOCTL_I915_GEM_MMAP_GTT		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_MMAP_GTT, struct vki_drm_i915_gem_mmap_gtt)
    638 #define VKI_DRM_IOCTL_I915_GEM_SET_DOMAIN	    VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_SET_DOMAIN, struct vki_drm_i915_gem_set_domain)
    639 #define VKI_DRM_IOCTL_I915_GEM_SW_FINISH	    VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_SW_FINISH, struct vki_drm_i915_gem_sw_finish)
    640 #define VKI_DRM_IOCTL_I915_GEM_SET_TILING	    VKI_DRM_IOWR (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_SET_TILING, struct vki_drm_i915_gem_set_tiling)
    641 #define VKI_DRM_IOCTL_I915_GEM_GET_TILING	    VKI_DRM_IOWR (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_GET_TILING, struct vki_drm_i915_gem_get_tiling)
    642 #define VKI_DRM_IOCTL_I915_GEM_GET_APERTURE	    VKI_DRM_IOR  (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_GET_APERTURE, struct vki_drm_i915_gem_get_aperture)
    643 #define VKI_DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GET_PIPE_FROM_CRTC_ID, struct vki_drm_intel_get_pipe_from_crtc_id)
    644 
    645 typedef struct vki_drm_i915_batchbuffer {
    646 	int start;		/* agp offset */
    647 	int used;		/* nr bytes in use */
    648 	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
    649 	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
    650 	int num_cliprects;	/* mulitpass with multiple cliprects? */
    651 	struct vki_drm_clip_rect __user *cliprects;	/* pointer to userspace cliprects */
    652 } vki_drm_i915_batchbuffer_t;
    653 typedef struct _vki_drm_i915_cmdbuffer {
    654 	char __user *buf;	/* pointer to userspace command buffer */
    655 	int sz;			/* nr bytes in buf */
    656 	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
    657 	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
    658 	int num_cliprects;	/* mulitpass with multiple cliprects? */
    659 	struct vki_drm_clip_rect __user *cliprects;	/* pointer to userspace cliprects */
    660 } vki_drm_i915_cmdbuffer_t;
    661 typedef struct vki_drm_i915_irq_emit {
    662 	int __user *irq_seq;
    663 } vki_drm_i915_irq_emit_t;
    664 typedef struct vki_drm_i915_irq_wait {
    665 	int irq_seq;
    666 } vki_drm_i915_irq_wait_t;
    667 typedef struct vki_drm_i915_getparam {
    668 	int param;
    669 	int __user *value;
    670 } vki_drm_i915_getparam_t;
    671 typedef struct vki_drm_i915_setparam {
    672 	int param;
    673 	int value;
    674 } vki_drm_i915_setparam_t;
    675 typedef struct vki_drm_i915_mem_alloc {
    676 	int region;
    677 	int alignment;
    678 	int size;
    679 	int __user *region_offset;	/* offset from start of fb or agp */
    680 } vki_drm_i915_mem_alloc_t;
    681 typedef struct vki_drm_i915_mem_free {
    682 	int region;
    683 	int region_offset;
    684 } vki_drm_i915_mem_free_t;
    685 typedef struct vki_drm_i915_mem_init_heap {
    686 	int region;
    687 	int size;
    688 	int start;
    689 } vki_drm_i915_mem_init_heap_t;
    690 typedef struct vki_drm_i915_mem_destroy_heap {
    691 	int region;
    692 } vki_drm_i915_mem_destroy_heap_t;
    693 typedef struct vki_drm_i915_vblank_pipe {
    694 	int pipe;
    695 } vki_drm_i915_vblank_pipe_t;
    696 typedef struct vki_drm_i915_vblank_swap {
    697 	vki_drm_drawable_t drawable;
    698 	enum vki_drm_vblank_seq_type seqtype;
    699 	unsigned int sequence;
    700 } vki_drm_i915_vblank_swap_t;
    701 typedef struct vki_drm_i915_hws_addr {
    702 	__vki_u64 addr;
    703 } vki_drm_i915_hws_addr_t;
    704 struct vki_drm_i915_gem_init {
    705 	__vki_u64 gtt_start;
    706 	__vki_u64 gtt_end;
    707 };
    708 struct vki_drm_i915_gem_create {
    709 	__vki_u64 size;
    710 	__vki_u32 handle;
    711 	__vki_u32 pad;
    712 };
    713 struct vki_drm_i915_gem_pread {
    714 	__vki_u32 handle;
    715 	__vki_u32 pad;
    716 	__vki_u64 offset;
    717 	__vki_u64 size;
    718 	__vki_u64 data_ptr;
    719 };
    720 struct vki_drm_i915_gem_pwrite {
    721 	__vki_u32 handle;
    722 	__vki_u32 pad;
    723 	__vki_u64 offset;
    724 	__vki_u64 size;
    725 	__vki_u64 data_ptr;
    726 };
    727 struct vki_drm_i915_gem_mmap {
    728 	__vki_u32 handle;
    729 	__vki_u32 pad;
    730 	__vki_u64 offset;
    731 	__vki_u64 size;
    732 	__vki_u64 addr_ptr;
    733 };
    734 struct vki_drm_i915_gem_mmap_gtt {
    735 	__vki_u32 handle;
    736 	__vki_u32 pad;
    737 	__vki_u64 offset;
    738 };
    739 struct vki_drm_i915_gem_set_domain {
    740 	__vki_u32 handle;
    741 	__vki_u32 read_domains;
    742 	__vki_u32 write_domain;
    743 };
    744 struct vki_drm_i915_gem_sw_finish {
    745 	__vki_u32 handle;
    746 };
    747 struct vki_drm_i915_gem_relocation_entry {
    748 	__vki_u32 target_handle;
    749 	__vki_u32 delta;
    750 	__vki_u64 offset;
    751 	__vki_u64 presumed_offset;
    752 	__vki_u32 read_domains;
    753 	__vki_u32 write_domain;
    754 };
    755 struct vki_drm_i915_gem_exec_object {
    756 	__vki_u32 handle;
    757 	__vki_u32 relocation_count;
    758 	__vki_u64 relocs_ptr;
    759 	__vki_u64 alignment;
    760 	__vki_u64 offset;
    761 };
    762 struct vki_drm_i915_gem_execbuffer {
    763 	__vki_u64 buffers_ptr;
    764 	__vki_u32 buffer_count;
    765 	__vki_u32 batch_start_offset;
    766 	__vki_u32 batch_len;
    767 	__vki_u32 DR1;
    768 	__vki_u32 DR4;
    769 	__vki_u32 num_cliprects;
    770 	__vki_u64 cliprects_ptr;
    771 };
    772 struct vki_drm_i915_gem_pin {
    773 	__vki_u32 handle;
    774 	__vki_u32 pad;
    775 	__vki_u64 alignment;
    776 	__vki_u64 offset;
    777 };
    778 struct vki_drm_i915_gem_unpin {
    779 	__vki_u32 handle;
    780 	__vki_u32 pad;
    781 };
    782 struct vki_drm_i915_gem_busy {
    783 	__vki_u32 handle;
    784 	__vki_u32 busy;
    785 };
    786 struct vki_drm_i915_gem_set_tiling {
    787 	__vki_u32 handle;
    788 	__vki_u32 tiling_mode;
    789 	__vki_u32 stride;
    790 	__vki_u32 swizzle_mode;
    791 };
    792 struct vki_drm_i915_gem_get_tiling {
    793 	__vki_u32 handle;
    794 	__vki_u32 tiling_mode;
    795 	__vki_u32 swizzle_mode;
    796 };
    797 struct vki_drm_i915_gem_get_aperture {
    798 	__vki_u64 aper_size;
    799 	__vki_u64 aper_available_size;
    800 };
    801 struct vki_drm_i915_get_pipe_from_crtc_id {
    802 	__vki_u32 crtc_id;
    803 	__vki_u32 pipe;
    804 };
    805 
    806 #endif //__VKI_LINUX_DRM_H
    807 
    808 /*--------------------------------------------------------------------*/
    809 /*--- end                                                          ---*/
    810 /*--------------------------------------------------------------------*/
    811