125b1808ff271c53b392bb5485e9c8db8485aea09sewardj/*
225b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
325b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
425b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Copyright (c) 2003-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
525b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
625b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com>
725b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Copyright (c) 2007-2008 Intel Corporation
825b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Copyright (c) 2008 Red Hat Inc.
925b1808ff271c53b392bb5485e9c8db8485aea09sewardj * All rights reserved.
1025b1808ff271c53b392bb5485e9c8db8485aea09sewardj *
1125b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Permission is hereby granted, free of charge, to any person obtaining a
1225b1808ff271c53b392bb5485e9c8db8485aea09sewardj * copy of this software and associated documentation files (the "Software"),
1325b1808ff271c53b392bb5485e9c8db8485aea09sewardj * to deal in the Software without restriction, including without limitation
1425b1808ff271c53b392bb5485e9c8db8485aea09sewardj * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1525b1808ff271c53b392bb5485e9c8db8485aea09sewardj * and/or sell copies of the Software, and to permit persons to whom the
1625b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Software is furnished to do so, subject to the following conditions:
1725b1808ff271c53b392bb5485e9c8db8485aea09sewardj *
1825b1808ff271c53b392bb5485e9c8db8485aea09sewardj * The above copyright notice and this permission notice (including the next
1925b1808ff271c53b392bb5485e9c8db8485aea09sewardj * paragraph) shall be included in all copies or substantial portions of the
2025b1808ff271c53b392bb5485e9c8db8485aea09sewardj * Software.
2125b1808ff271c53b392bb5485e9c8db8485aea09sewardj *
2225b1808ff271c53b392bb5485e9c8db8485aea09sewardj * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2325b1808ff271c53b392bb5485e9c8db8485aea09sewardj * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2425b1808ff271c53b392bb5485e9c8db8485aea09sewardj * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
2525b1808ff271c53b392bb5485e9c8db8485aea09sewardj * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
2625b1808ff271c53b392bb5485e9c8db8485aea09sewardj * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
2725b1808ff271c53b392bb5485e9c8db8485aea09sewardj * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2825b1808ff271c53b392bb5485e9c8db8485aea09sewardj * OTHER DEALINGS IN THE SOFTWARE.
2925b1808ff271c53b392bb5485e9c8db8485aea09sewardj */
3025b1808ff271c53b392bb5485e9c8db8485aea09sewardj
3125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#ifndef __VKI_LINUX_DRM_H
3225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define __VKI_LINUX_DRM_H
3325b1808ff271c53b392bb5485e9c8db8485aea09sewardj
3425b1808ff271c53b392bb5485e9c8db8485aea09sewardj//----------------------------------------------------------------------
3525b1808ff271c53b392bb5485e9c8db8485aea09sewardj// From include/drm/drm.h
3625b1808ff271c53b392bb5485e9c8db8485aea09sewardj//----------------------------------------------------------------------
3725b1808ff271c53b392bb5485e9c8db8485aea09sewardj
3825b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef unsigned int vki_drm_context_t;
3925b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef unsigned int vki_drm_drawable_t;
4025b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef unsigned int vki_drm_magic_t;
4125b1808ff271c53b392bb5485e9c8db8485aea09sewardj
4225b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_clip_rect {
4325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned short x1;
4425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned short y1;
4525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned short x2;
4625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned short y2;
4725b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
4825b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_version {
4925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int version_major;	  /**< Major version */
5025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int version_minor;	  /**< Minor version */
5125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int version_patchlevel;	  /**< Patch level */
5225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	vki_size_t name_len;	  /**< Length of name buffer */
5325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	char __user *name;	  /**< Name of driver */
5425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	vki_size_t date_len;	  /**< Length of date buffer */
5525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	char __user *date;	  /**< User-space buffer to hold date */
5625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	vki_size_t desc_len;	  /**< Length of desc buffer */
5725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	char __user *desc;	  /**< User-space buffer to hold desc */
5825b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
5925b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_unique {
6025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	vki_size_t unique_len;	  /**< Length of unique */
6125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	char __user *unique;	  /**< Unique name for driver instantiation */
6225b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
6325b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_block {
6425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int unused;
6525b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
6625b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_control {
6725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum {
6825b1808ff271c53b392bb5485e9c8db8485aea09sewardj		VKI_DRM_ADD_COMMAND,
6925b1808ff271c53b392bb5485e9c8db8485aea09sewardj		VKI_DRM_RM_COMMAND,
7025b1808ff271c53b392bb5485e9c8db8485aea09sewardj		VKI_DRM_INST_HANDLER,
7125b1808ff271c53b392bb5485e9c8db8485aea09sewardj		VKI_DRM_UNINST_HANDLER
7225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	} func;
7325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int irq;
7425b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
7525b1808ff271c53b392bb5485e9c8db8485aea09sewardj
7625b1808ff271c53b392bb5485e9c8db8485aea09sewardjenum vki_drm_map_type {
7725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_FRAME_BUFFER = 0,	  /**< WC (no caching), no core dump */
7825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_REGISTERS = 1,	  /**< no caching, no core dump */
7925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_SHM = 2,		  /**< shared, cached */
8025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_AGP = 3,		  /**< AGP/GART */
8125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */
8225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_CONSISTENT = 5,	  /**< Consistent memory for PCI DMA */
8325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_GEM = 6,		  /**< GEM object */
8425b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
8525b1808ff271c53b392bb5485e9c8db8485aea09sewardjenum vki_drm_map_flags {
8625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_RESTRICTED = 0x01,	     /**< Cannot be mapped to user-virtual */
8725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_READ_ONLY = 0x02,
8825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_LOCKED = 0x04,	     /**< shared, cached, locked */
8925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_KERNEL = 0x08,	     /**< kernel requires access */
9025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
9125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
9225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_REMOVABLE = 0x40,	     /**< Removable mapping */
9325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_DRIVER = 0x80	     /**< Managed by driver */
9425b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
9525b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_ctx_priv_map {
9625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int ctx_id;	 /**< Context requesting private mapping */
9725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	void *handle;		 /**< Handle of map */
9825b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
9925b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_map {
10025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long offset;	 /**< Requested physical address (0 for SAREA)*/
10125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long size;	 /**< Requested physical size (bytes) */
10225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum vki_drm_map_type type;	 /**< Type of memory to map */
10325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum vki_drm_map_flags flags;	 /**< Flags */
10425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	void *handle;		 /**< User-space: "Handle" to pass to mmap() */
10525b1808ff271c53b392bb5485e9c8db8485aea09sewardj				 /**< Kernel-space: kernel-virtual address */
10625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int mtrr;		 /**< MTRR slot used */
10725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	/*   Private data */
10825b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
10925b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_client {
11025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int idx;		/**< Which client desired? */
11125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int auth;		/**< Is client authenticated? */
11225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long pid;	/**< Process ID */
11325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long uid;	/**< User ID */
11425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long magic;	/**< Magic */
11525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long iocs;	/**< Ioctl count */
11625b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
11725b1808ff271c53b392bb5485e9c8db8485aea09sewardjenum vki_drm_stat_type {
11825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_LOCK,
11925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_OPENS,
12025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_CLOSES,
12125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_IOCTLS,
12225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_LOCKS,
12325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_UNLOCKS,
12425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_VALUE,	/**< Generic value */
12525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_BYTE,		/**< Generic byte counter (1024bytes/K) */
12625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_COUNT,	/**< Generic non-byte counter (1000/k) */
12725b1808ff271c53b392bb5485e9c8db8485aea09sewardj
12825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_IRQ,		/**< IRQ */
12925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_PRIMARY,	/**< Primary DMA bytes */
13025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_SECONDARY,	/**< Secondary DMA bytes */
13125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_DMA,		/**< DMA */
13225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_SPECIAL,	/**< Special DMA (e.g., priority or polled) */
13325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_STAT_MISSED	/**< Missed DMA opportunity */
13425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	    /* Add to the *END* of the list */
13525b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
13625b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_stats {
13725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long count;
13825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct {
13925b1808ff271c53b392bb5485e9c8db8485aea09sewardj		unsigned long value;
14025b1808ff271c53b392bb5485e9c8db8485aea09sewardj		enum vki_drm_stat_type type;
14125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	} data[15];
14225b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
14325b1808ff271c53b392bb5485e9c8db8485aea09sewardjenum vki_drm_lock_flags {
14425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_LOCK_READY = 0x01,	     /**< Wait until hardware is ready for DMA */
14525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_LOCK_QUIESCENT = 0x02,  /**< Wait until hardware quiescent */
14625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_LOCK_FLUSH = 0x04,	     /**< Flush this context's DMA queue first */
14725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_LOCK_FLUSH_ALL = 0x08,  /**< Flush all DMA queues first */
14825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	/* These *HALT* flags aren't supported yet
14925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	   -- they will be used to support the
15025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	   full-screen DGA-like mode. */
15125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */
15225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_HALT_CUR_QUEUES = 0x20  /**< Halt all current queues */
15325b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
15425b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_lock {
15525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int context;
15625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum vki_drm_lock_flags flags;
15725b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
15825b1808ff271c53b392bb5485e9c8db8485aea09sewardjenum vki_drm_dma_flags {
15925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	/* Flags for DMA buffer dispatch */
16025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_DMA_BLOCK = 0x01,	      /**<
16125b1808ff271c53b392bb5485e9c8db8485aea09sewardj				       * Block until buffer dispatched.
16225b1808ff271c53b392bb5485e9c8db8485aea09sewardj				       *
16325b1808ff271c53b392bb5485e9c8db8485aea09sewardj				       * \note The buffer may not yet have
16425b1808ff271c53b392bb5485e9c8db8485aea09sewardj				       * been processed by the hardware --
16525b1808ff271c53b392bb5485e9c8db8485aea09sewardj				       * getting a hardware lock with the
16625b1808ff271c53b392bb5485e9c8db8485aea09sewardj				       * hardware quiescent will ensure
16725b1808ff271c53b392bb5485e9c8db8485aea09sewardj				       * that the buffer has been
16825b1808ff271c53b392bb5485e9c8db8485aea09sewardj				       * processed.
16925b1808ff271c53b392bb5485e9c8db8485aea09sewardj				       */
17025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */
17125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_DMA_PRIORITY = 0x04,     /**< High priority dispatch */
17225b1808ff271c53b392bb5485e9c8db8485aea09sewardj
17325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	/* Flags for DMA buffer request */
17425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_DMA_WAIT = 0x10,	      /**< Wait for free buffers */
17525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_DMA_SMALLER_OK = 0x20,   /**< Smaller-than-requested buffers OK */
17625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_DMA_LARGER_OK = 0x40     /**< Larger-than-requested buffers OK */
17725b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
17825b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_buf_desc {
17925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int count;		 /**< Number of buffers of this size */
18025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int size;		 /**< Size in bytes */
18125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int low_mark;		 /**< Low water mark */
18225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int high_mark;		 /**< High water mark */
18325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum {
18425b1808ff271c53b392bb5485e9c8db8485aea09sewardj		_VKI_DRM_PAGE_ALIGN = 0x01,	/**< Align on page boundaries for DMA */
18525b1808ff271c53b392bb5485e9c8db8485aea09sewardj		_VKI_DRM_AGP_BUFFER = 0x02,	/**< Buffer is in AGP space */
18625b1808ff271c53b392bb5485e9c8db8485aea09sewardj		_VKI_DRM_SG_BUFFER = 0x04,	/**< Scatter/gather memory buffer */
18725b1808ff271c53b392bb5485e9c8db8485aea09sewardj		_VKI_DRM_FB_BUFFER = 0x08,	/**< Buffer is in frame buffer */
18825b1808ff271c53b392bb5485e9c8db8485aea09sewardj		_VKI_DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
18925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	} flags;
19025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long agp_start; /**<
19125b1808ff271c53b392bb5485e9c8db8485aea09sewardj				  * Start address of where the AGP buffers are
19225b1808ff271c53b392bb5485e9c8db8485aea09sewardj				  * in the AGP aperture
19325b1808ff271c53b392bb5485e9c8db8485aea09sewardj				  */
19425b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
19525b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_buf_info {
19625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int count;		/**< Entries in list */
19725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct vki_drm_buf_desc __user *list;
19825b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
19925b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_buf_free {
20025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int count;
20125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int __user *list;
20225b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
20325b1808ff271c53b392bb5485e9c8db8485aea09sewardj
20425b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_buf_pub {
20525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int idx;		       /**< Index into the master buffer list */
20625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int total;		       /**< Buffer size */
20725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int used;		       /**< Amount of buffer in use (for DMA) */
20825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	void __user *address;	       /**< Address of buffer */
20925b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
21025b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_buf_map {
21125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int count;		/**< Length of the buffer list */
2123c628baf67de89f5aa78d88e5f00c320d39e38c7sewardj	void __user *virtuaL;		/**< Mmap'd area in user-virtual */
21325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct vki_drm_buf_pub __user *list;	/**< Buffer information */
21425b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
21525b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_dma {
21625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int context;			  /**< Context handle */
21725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int send_count;			  /**< Number of buffers to send */
21825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int __user *send_indices;	  /**< List of handles to buffers */
21925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int __user *send_sizes;		  /**< Lengths of data to send */
22025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum vki_drm_dma_flags flags;	  /**< Flags */
22125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int request_count;		  /**< Number of buffers requested */
22225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int request_size;		  /**< Desired size for buffers */
22325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int __user *request_indices;	  /**< Buffer information */
22425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int __user *request_sizes;
22525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int granted_count;		  /**< Number of buffers granted */
22625b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
22725b1808ff271c53b392bb5485e9c8db8485aea09sewardj
22825b1808ff271c53b392bb5485e9c8db8485aea09sewardjenum vki_drm_ctx_flags {
22925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_CONTEXT_PRESERVED = 0x01,
23025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_CONTEXT_2DONLY = 0x02
23125b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
23225b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_ctx {
23325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	vki_drm_context_t handle;
23425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum vki_drm_ctx_flags flags;
23525b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
23625b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_ctx_res {
23725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int count;
23825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct vki_drm_ctx __user *contexts;
23925b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
24025b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_draw {
24125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	vki_drm_drawable_t handle;
24225b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
24325b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef enum {
24425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	VKI_DRM_DRAWABLE_CLIPRECTS,
24525b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_drawable_info_type_t;
24625b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_update_draw {
24725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	vki_drm_drawable_t handle;
24825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int type;
24925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int num;
25025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long long data;
25125b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
25225b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_auth {
25325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	vki_drm_magic_t magic;
25425b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
25525b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_irq_busid {
25625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int irq;	/**< IRQ number */
25725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int busnum;	/**< bus number */
25825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int devnum;	/**< device number */
25925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int funcnum;	/**< function number */
26025b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
26125b1808ff271c53b392bb5485e9c8db8485aea09sewardjenum vki_drm_vblank_seq_type {
26225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_VBLANK_ABSOLUTE = 0x0,	/**< Wait for specific vblank sequence number */
26325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_VBLANK_RELATIVE = 0x1,	/**< Wait for given number of vblanks */
26425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e,
26525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_VBLANK_EVENT = 0x4000000,   /**< Send event instead of blocking */
26625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_VBLANK_FLIP = 0x8000000,   /**< Scheduled buffer swap should flip */
26725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_VBLANK_NEXTONMISS = 0x10000000,	/**< If missed, wait for next vblank */
26825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_VBLANK_SECONDARY = 0x20000000,	/**< Secondary display controller */
26925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	_VKI_DRM_VBLANK_SIGNAL = 0x40000000	/**< Send signal instead of blocking, unsupported */
27025b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
27125b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_wait_vblank_request {
27225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum vki_drm_vblank_seq_type type;
27325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int sequence;
27425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long signal;
27525b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
27625b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_wait_vblank_reply {
27725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum vki_drm_vblank_seq_type type;
27825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int sequence;
27925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	long tval_sec;
28025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	long tval_usec;
28125b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
28225b1808ff271c53b392bb5485e9c8db8485aea09sewardjunion vki_drm_wait_vblank {
28325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct vki_drm_wait_vblank_request request;
28425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct vki_drm_wait_vblank_reply reply;
28525b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
28625b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_modeset_ctl {
28725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 crtc;
28825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 cmd;
28925b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
29025b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_agp_mode {
29125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long mode;	/**< AGP mode */
29225b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
29325b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_agp_buffer {
29425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long size;	/**< In bytes -- will round to page boundary */
29525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long handle;	/**< Used for binding / unbinding */
29625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long type;	/**< Type of memory to allocate */
29725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long physical;	/**< Physical used by i810 */
29825b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
29925b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_agp_binding {
30025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long handle;	/**< From drm_agp_buffer */
30125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long offset;	/**< In bytes -- will round to page boundary */
30225b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
30325b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_agp_info {
30425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int agp_version_major;
30525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int agp_version_minor;
30625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long mode;
30725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long aperture_base;	/* physical address */
30825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long aperture_size;	/* bytes */
30925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long memory_allowed;	/* bytes */
31025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long memory_used;
31125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned short id_vendor;
31225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned short id_device;
31325b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
31425b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_scatter_gather {
31525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long size;	/**< In bytes -- will round to page boundary */
31625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned long handle;	/**< Used for mapping / unmapping */
31725b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
31825b1808ff271c53b392bb5485e9c8db8485aea09sewardj
31925b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_set_version {
32025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int drm_di_major;
32125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int drm_di_minor;
32225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int drm_dd_major;
32325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int drm_dd_minor;
32425b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
32525b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_gem_close {
32625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
32725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pad;
32825b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
32925b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_gem_flink {
33025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
33125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 name;
33225b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
33325b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_gem_open {
33425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 name;
33525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
33625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 size;
33725b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
33825b1808ff271c53b392bb5485e9c8db8485aea09sewardj
33925b1808ff271c53b392bb5485e9c8db8485aea09sewardj//----------------------------------------------------------------------
34025b1808ff271c53b392bb5485e9c8db8485aea09sewardj// From include/drm/drm_mode.h
34125b1808ff271c53b392bb5485e9c8db8485aea09sewardj//----------------------------------------------------------------------
34225b1808ff271c53b392bb5485e9c8db8485aea09sewardj
34325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_DISPLAY_MODE_LEN 32
34425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_PROP_NAME_LEN 32
34525b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_modeinfo {
34625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 clock;
34725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u16 hdisplay, hsync_start, hsync_end, htotal, hskew;
34825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u16 vdisplay, vsync_start, vsync_end, vtotal, vscan;
34925b1808ff271c53b392bb5485e9c8db8485aea09sewardj
35025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 vrefresh; /* vertical refresh * 1000 */
35125b1808ff271c53b392bb5485e9c8db8485aea09sewardj
35225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 flags;
35325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 type;
35425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	char name[VKI_DRM_DISPLAY_MODE_LEN];
35525b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
35625b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_card_res {
35725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 fb_id_ptr;
35825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 crtc_id_ptr;
35925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 connector_id_ptr;
36025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 encoder_id_ptr;
36125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 count_fbs;
36225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 count_crtcs;
36325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 count_connectors;
36425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 count_encoders;
36525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 min_width, max_width;
36625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 min_height, max_height;
36725b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
36825b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_crtc {
36925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 set_connectors_ptr;
37025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 count_connectors;
37125b1808ff271c53b392bb5485e9c8db8485aea09sewardj
37225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 crtc_id; /**< Id */
37325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 fb_id; /**< Id of framebuffer */
37425b1808ff271c53b392bb5485e9c8db8485aea09sewardj
37525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 x, y; /**< Position on the frameuffer */
37625b1808ff271c53b392bb5485e9c8db8485aea09sewardj
37725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 gamma_size;
37825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 mode_valid;
37925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct vki_drm_mode_modeinfo mode;
38025b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
38125b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_get_encoder {
38225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 encoder_id;
38325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 encoder_type;
38425b1808ff271c53b392bb5485e9c8db8485aea09sewardj
38525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 crtc_id; /**< Id of crtc */
38625b1808ff271c53b392bb5485e9c8db8485aea09sewardj
38725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 possible_crtcs;
38825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 possible_clones;
38925b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
39025b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_get_property {
39125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 values_ptr; /* values and blob lengths */
39225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 enum_blob_ptr; /* enum and blob id ptrs */
39325b1808ff271c53b392bb5485e9c8db8485aea09sewardj
39425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 prop_id;
39525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 flags;
39625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	char name[VKI_DRM_PROP_NAME_LEN];
39725b1808ff271c53b392bb5485e9c8db8485aea09sewardj
39825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 count_values;
39925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 count_enum_blobs;
40025b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
40125b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_connector_set_property {
40225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 value;
40325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 prop_id;
40425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 connector_id;
40525b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
40625b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_get_blob {
40725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 blob_id;
40825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 length;
40925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 data;
41025b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
41125b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_fb_cmd {
41225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 fb_id;
41325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 width, height;
41425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pitch;
41525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 bpp;
41625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 depth;
41725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	/* driver specific handle */
41825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
41925b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
42025b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_mode_cmd {
42125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 connector_id;
42225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct vki_drm_mode_modeinfo mode;
42325b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
42425b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_cursor {
42525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 flags;
42625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 crtc_id;
42725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_s32 x;
42825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_s32 y;
42925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 width;
43025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 height;
43125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	/* driver specific handle */
43225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
43325b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
43425b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_mode_crtc_lut {
43525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 crtc_id;
43625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 gamma_size;
43725b1808ff271c53b392bb5485e9c8db8485aea09sewardj
43825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	/* pointers to arrays */
43925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 red;
44025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 green;
44125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 blue;
44225b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
44325b1808ff271c53b392bb5485e9c8db8485aea09sewardj
44425b1808ff271c53b392bb5485e9c8db8485aea09sewardj//----------------------------------------------------------------------
44525b1808ff271c53b392bb5485e9c8db8485aea09sewardj// From include/drm/drm.h
44625b1808ff271c53b392bb5485e9c8db8485aea09sewardj//----------------------------------------------------------------------
44725b1808ff271c53b392bb5485e9c8db8485aea09sewardj
44825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_BASE		'd'
44925b1808ff271c53b392bb5485e9c8db8485aea09sewardj
45025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IO(nr)			_VKI_IO(VKI_DRM_IOCTL_BASE,nr)
45125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOR(nr,type)		_VKI_IOR(VKI_DRM_IOCTL_BASE,nr,type)
45225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOW(nr,type)		_VKI_IOW(VKI_DRM_IOCTL_BASE,nr,type)
45325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOWR(nr,type)		_VKI_IOWR(VKI_DRM_IOCTL_BASE,nr,type)
45425b1808ff271c53b392bb5485e9c8db8485aea09sewardj
45525b1808ff271c53b392bb5485e9c8db8485aea09sewardj
45625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_VERSION		VKI_DRM_IOWR(0x00, struct vki_drm_version)
45725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GET_UNIQUE	VKI_DRM_IOWR(0x01, struct vki_drm_unique)
45825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GET_MAGIC		VKI_DRM_IOR( 0x02, struct vki_drm_auth)
45925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_IRQ_BUSID		VKI_DRM_IOWR(0x03, struct vki_drm_irq_busid)
46025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GET_MAP           VKI_DRM_IOWR(0x04, struct vki_drm_map)
46125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GET_CLIENT        VKI_DRM_IOWR(0x05, struct vki_drm_client)
46225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GET_STATS         VKI_DRM_IOR( 0x06, struct vki_drm_stats)
46325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_SET_VERSION	VKI_DRM_IOWR(0x07, struct vki_drm_set_version)
46425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODESET_CTL       VKI_DRM_IOW(0x08, struct vki_drm_modeset_ctl)
46525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GEM_CLOSE		VKI_DRM_IOW (0x09, struct vki_drm_gem_close)
46625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GEM_FLINK		VKI_DRM_IOWR(0x0a, struct vki_drm_gem_flink)
46725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GEM_OPEN		VKI_DRM_IOWR(0x0b, struct vki_drm_gem_open)
46825b1808ff271c53b392bb5485e9c8db8485aea09sewardj
46925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_SET_UNIQUE	VKI_DRM_IOW( 0x10, struct vki_drm_unique)
47025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_AUTH_MAGIC	VKI_DRM_IOW( 0x11, struct vki_drm_auth)
47125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_BLOCK		VKI_DRM_IOWR(0x12, struct vki_drm_block)
47225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_UNBLOCK		VKI_DRM_IOWR(0x13, struct vki_drm_block)
47325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_CONTROL		VKI_DRM_IOW( 0x14, struct vki_drm_control)
47425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_ADD_MAP		VKI_DRM_IOWR(0x15, struct vki_drm_map)
47525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_ADD_BUFS		VKI_DRM_IOWR(0x16, struct vki_drm_buf_desc)
47625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MARK_BUFS		VKI_DRM_IOW( 0x17, struct vki_drm_buf_desc)
47725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_INFO_BUFS		VKI_DRM_IOWR(0x18, struct vki_drm_buf_info)
47825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MAP_BUFS		VKI_DRM_IOWR(0x19, struct vki_drm_buf_map)
47925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_FREE_BUFS		VKI_DRM_IOW( 0x1a, struct vki_drm_buf_free)
48025b1808ff271c53b392bb5485e9c8db8485aea09sewardj
48125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_RM_MAP		VKI_DRM_IOW( 0x1b, struct vki_drm_map)
48225b1808ff271c53b392bb5485e9c8db8485aea09sewardj
48325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_SET_SAREA_CTX	VKI_DRM_IOW( 0x1c, struct vki_drm_ctx_priv_map)
48425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GET_SAREA_CTX 	VKI_DRM_IOWR(0x1d, struct vki_drm_ctx_priv_map)
48525b1808ff271c53b392bb5485e9c8db8485aea09sewardj
48625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_SET_MASTER        VKI_DRM_IO(0x1e)
48725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_DROP_MASTER       VKI_DRM_IO(0x1f)
48825b1808ff271c53b392bb5485e9c8db8485aea09sewardj
48925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_ADD_CTX		VKI_DRM_IOWR(0x20, struct vki_drm_ctx)
49025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_RM_CTX		VKI_DRM_IOWR(0x21, struct vki_drm_ctx)
49125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MOD_CTX		VKI_DRM_IOW( 0x22, struct vki_drm_ctx)
49225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_GET_CTX		VKI_DRM_IOWR(0x23, struct vki_drm_ctx)
49325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_SWITCH_CTX	VKI_DRM_IOW( 0x24, struct vki_drm_ctx)
49425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_NEW_CTX		VKI_DRM_IOW( 0x25, struct vki_drm_ctx)
49525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_RES_CTX		VKI_DRM_IOWR(0x26, struct vki_drm_ctx_res)
49625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_ADD_DRAW		VKI_DRM_IOWR(0x27, struct vki_drm_draw)
49725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_RM_DRAW		VKI_DRM_IOWR(0x28, struct vki_drm_draw)
49825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_DMA		VKI_DRM_IOWR(0x29, struct vki_drm_dma)
49925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_LOCK		VKI_DRM_IOW( 0x2a, struct vki_drm_lock)
50025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_UNLOCK		VKI_DRM_IOW( 0x2b, struct vki_drm_lock)
50125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_FINISH		VKI_DRM_IOW( 0x2c, struct vki_drm_lock)
50225b1808ff271c53b392bb5485e9c8db8485aea09sewardj
50325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_AGP_ACQUIRE	VKI_DRM_IO(  0x30)
50425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_AGP_RELEASE	VKI_DRM_IO(  0x31)
50525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_AGP_ENABLE	VKI_DRM_IOW( 0x32, struct vki_drm_agp_mode)
50625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_AGP_INFO		VKI_DRM_IOR( 0x33, struct vki_drm_agp_info)
50725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_AGP_ALLOC		VKI_DRM_IOWR(0x34, struct vki_drm_agp_buffer)
50825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_AGP_FREE		VKI_DRM_IOW( 0x35, struct vki_drm_agp_buffer)
50925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_AGP_BIND		VKI_DRM_IOW( 0x36, struct vki_drm_agp_binding)
51025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_AGP_UNBIND	VKI_DRM_IOW( 0x37, struct vki_drm_agp_binding)
51125b1808ff271c53b392bb5485e9c8db8485aea09sewardj
51225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_SG_ALLOC		VKI_DRM_IOWR(0x38, struct vki_drm_scatter_gather)
51325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_SG_FREE		VKI_DRM_IOW( 0x39, struct vki_drm_scatter_gather)
51425b1808ff271c53b392bb5485e9c8db8485aea09sewardj
51525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_WAIT_VBLANK	VKI_DRM_IOWR(0x3a, union vki_drm_wait_vblank)
51625b1808ff271c53b392bb5485e9c8db8485aea09sewardj
51725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_UPDATE_DRAW	VKI_DRM_IOW(0x3f, struct vki_drm_update_draw)
51825b1808ff271c53b392bb5485e9c8db8485aea09sewardj
51925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_GETRESOURCES	VKI_DRM_IOWR(0xA0, struct vki_drm_mode_card_res)
52025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_GETCRTC	VKI_DRM_IOWR(0xA1, struct vki_drm_mode_crtc)
52125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_SETCRTC	VKI_DRM_IOWR(0xA2, struct vki_drm_mode_crtc)
52225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_CURSOR	VKI_DRM_IOWR(0xA3, struct vki_drm_mode_cursor)
52325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_GETGAMMA	VKI_DRM_IOWR(0xA4, struct vki_drm_mode_crtc_lut)
52425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_SETGAMMA	VKI_DRM_IOWR(0xA5, struct vki_drm_mode_crtc_lut)
52525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_GETENCODER	VKI_DRM_IOWR(0xA6, struct vki_drm_mode_get_encoder)
52625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_GETCONNECTOR	VKI_DRM_IOWR(0xA7, struct vki_drm_mode_get_connector)
52725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_ATTACHMODE	VKI_DRM_IOWR(0xA8, struct vki_drm_mode_mode_cmd)
52825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_DETACHMODE	VKI_DRM_IOWR(0xA9, struct vki_drm_mode_mode_cmd)
52925b1808ff271c53b392bb5485e9c8db8485aea09sewardj
53025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_GETPROPERTY	VKI_DRM_IOWR(0xAA, struct vki_drm_mode_get_property)
53125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_SETPROPERTY	VKI_DRM_IOWR(0xAB, struct vki_drm_mode_connector_set_property)
53225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_GETPROPBLOB	VKI_DRM_IOWR(0xAC, struct vki_drm_mode_get_blob)
53325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_GETFB	VKI_DRM_IOWR(0xAD, struct vki_drm_mode_fb_cmd)
53425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_ADDFB	VKI_DRM_IOWR(0xAE, struct vki_drm_mode_fb_cmd)
53525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_MODE_RMFB		VKI_DRM_IOWR(0xAF, unsigned int)
53625b1808ff271c53b392bb5485e9c8db8485aea09sewardj
53725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_COMMAND_BASE            0x40
53825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_COMMAND_END		0xA0
53925b1808ff271c53b392bb5485e9c8db8485aea09sewardj
54025b1808ff271c53b392bb5485e9c8db8485aea09sewardj//----------------------------------------------------------------------
54125b1808ff271c53b392bb5485e9c8db8485aea09sewardj// From include/drm/i915_drm.h
54225b1808ff271c53b392bb5485e9c8db8485aea09sewardj//----------------------------------------------------------------------
54325b1808ff271c53b392bb5485e9c8db8485aea09sewardj
54425b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct _vki_drm_i915_init {
54525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum {
54625b1808ff271c53b392bb5485e9c8db8485aea09sewardj		VKI_I915_INIT_DMA = 0x01,
54725b1808ff271c53b392bb5485e9c8db8485aea09sewardj		VKI_I915_CLEANUP_DMA = 0x02,
54825b1808ff271c53b392bb5485e9c8db8485aea09sewardj		VKI_I915_RESUME_DMA = 0x03
54925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	} func;
55025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int mmio_offset;
55125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int sarea_priv_offset;
55225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int ring_start;
55325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int ring_end;
55425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int ring_size;
55525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int front_offset;
55625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int back_offset;
55725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int depth_offset;
55825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int w;
55925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int h;
56025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int pitch;
56125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int pitch_bits;
56225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int back_pitch;
56325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int depth_pitch;
56425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int cpp;
56525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int chipset;
56625b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_init_t;
56725b1808ff271c53b392bb5485e9c8db8485aea09sewardj
56825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_INIT		    0x00
56925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_FLUSH		    0x01
57025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_FLIP		    0x02
57125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_BATCHBUFFER	    0x03
57225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_IRQ_EMIT		    0x04
57325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_IRQ_WAIT		    0x05
57425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GETPARAM		    0x06
57525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_SETPARAM		    0x07
57625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_ALLOC		    0x08
57725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_FREE		    0x09
57825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_INIT_HEAP		    0x0a
57925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_CMDBUFFER		    0x0b
58025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_DESTROY_HEAP	    0x0c
58125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_SET_VBLANK_PIPE	    0x0d
58225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GET_VBLANK_PIPE	    0x0e
58325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_VBLANK_SWAP	    0x0f
58425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_HWS_ADDR		    0x11
58525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_INIT		    0x13
58625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_EXECBUFFER	    0x14
58725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_PIN		    0x15
58825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_UNPIN		    0x16
58925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_BUSY		    0x17
59025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_THROTTLE	    0x18
59125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_ENTERVT	    0x19
59225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_LEAVEVT	    0x1a
59325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_CREATE		    0x1b
59425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_PREAD		    0x1c
59525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_PWRITE		    0x1d
59625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_MMAP		    0x1e
59725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_SET_DOMAIN	    0x1f
59825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_SW_FINISH	    0x20
59925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_SET_TILING	    0x21
60025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_GET_TILING	    0x22
60125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_GET_APERTURE	    0x23
60225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_MMAP_GTT	    0x24
60325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GET_PIPE_FROM_CRTC_ID  0x25
60425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_MADVISE	    0x26
60525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_OVERLAY_PUT_IMAGE	    0x27
60625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_OVERLAY_ATTRS	    0x28
60725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_I915_GEM_EXECBUFFER2	    0x29
60825b1808ff271c53b392bb5485e9c8db8485aea09sewardj
60925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_INIT			    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_INIT, vki_drm_i915_init_t)
61025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_FLUSH		    VKI_DRM_IO ( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_FLUSH)
61125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_FLIP			    VKI_DRM_IO ( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_FLIP)
61225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_BATCHBUFFER		    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_BATCHBUFFER, vki_drm_i915_batchbuffer_t)
61325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
61425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
61525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_GETPARAM		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GETPARAM, vki_drm_i915_getparam_t)
61625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_SETPARAM		    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_SETPARAM, vki_drm_i915_setparam_t)
61725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_ALLOC		    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_ALLOC, vki_drm_i915_mem_alloc_t)
61825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_FREE			    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_FREE, vki_drm_i915_mem_free_t)
61925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
62025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_CMDBUFFER		    VKI_DRM_IOW( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_CMDBUFFER, vki_drm_i915_cmdbuffer_t)
62125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
62225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
62325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
62425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
62525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
62625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
62725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
62825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
62925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
63025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_GEM_THROTTLE		    VKI_DRM_IO ( VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_THROTTLE)
63125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_GEM_ENTERVT		    VKI_DRM_IO(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_ENTERVT)
63225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#define VKI_DRM_IOCTL_I915_GEM_LEAVEVT		    VKI_DRM_IO(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_LEAVEVT)
63325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
63425b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
63525b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
63625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
63725b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
63825b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
63925b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
64025b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
64125b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
64225b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
64325b1808ff271c53b392bb5485e9c8db8485aea09sewardj#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)
64425b1808ff271c53b392bb5485e9c8db8485aea09sewardj
64525b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_batchbuffer {
64625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int start;		/* agp offset */
64725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int used;		/* nr bytes in use */
64825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
64925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
65025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int num_cliprects;	/* mulitpass with multiple cliprects? */
65125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct vki_drm_clip_rect __user *cliprects;	/* pointer to userspace cliprects */
65225b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_batchbuffer_t;
65325b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct _vki_drm_i915_cmdbuffer {
65425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	char __user *buf;	/* pointer to userspace command buffer */
65525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int sz;			/* nr bytes in buf */
65625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
65725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
65825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int num_cliprects;	/* mulitpass with multiple cliprects? */
65925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	struct vki_drm_clip_rect __user *cliprects;	/* pointer to userspace cliprects */
66025b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_cmdbuffer_t;
66125b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_irq_emit {
66225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int __user *irq_seq;
66325b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_irq_emit_t;
66425b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_irq_wait {
66525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int irq_seq;
66625b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_irq_wait_t;
66725b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_getparam {
66825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int param;
66925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int __user *value;
67025b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_getparam_t;
67125b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_setparam {
67225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int param;
67325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int value;
67425b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_setparam_t;
67525b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_mem_alloc {
67625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int region;
67725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int alignment;
67825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int size;
67925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int __user *region_offset;	/* offset from start of fb or agp */
68025b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_mem_alloc_t;
68125b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_mem_free {
68225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int region;
68325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int region_offset;
68425b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_mem_free_t;
68525b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_mem_init_heap {
68625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int region;
68725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int size;
68825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int start;
68925b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_mem_init_heap_t;
69025b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_mem_destroy_heap {
69125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int region;
69225b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_mem_destroy_heap_t;
69325b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_vblank_pipe {
69425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	int pipe;
69525b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_vblank_pipe_t;
69625b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_vblank_swap {
69725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	vki_drm_drawable_t drawable;
69825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	enum vki_drm_vblank_seq_type seqtype;
69925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	unsigned int sequence;
70025b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_vblank_swap_t;
70125b1808ff271c53b392bb5485e9c8db8485aea09sewardjtypedef struct vki_drm_i915_hws_addr {
70225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 addr;
70325b1808ff271c53b392bb5485e9c8db8485aea09sewardj} vki_drm_i915_hws_addr_t;
70425b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_init {
70525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 gtt_start;
70625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 gtt_end;
70725b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
70825b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_create {
70925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 size;
71025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
71125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pad;
71225b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
71325b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_pread {
71425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
71525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pad;
71625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 offset;
71725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 size;
71825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 data_ptr;
71925b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
72025b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_pwrite {
72125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
72225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pad;
72325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 offset;
72425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 size;
72525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 data_ptr;
72625b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
72725b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_mmap {
72825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
72925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pad;
73025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 offset;
73125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 size;
73225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 addr_ptr;
73325b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
73425b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_mmap_gtt {
73525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
73625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pad;
73725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 offset;
73825b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
73925b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_set_domain {
74025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
74125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 read_domains;
74225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 write_domain;
74325b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
74425b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_sw_finish {
74525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
74625b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
74725b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_relocation_entry {
74825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 target_handle;
74925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 delta;
75025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 offset;
75125b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 presumed_offset;
75225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 read_domains;
75325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 write_domain;
75425b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
75525b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_exec_object {
75625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
75725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 relocation_count;
75825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 relocs_ptr;
75925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 alignment;
76025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 offset;
76125b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
76225b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_execbuffer {
76325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 buffers_ptr;
76425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 buffer_count;
76525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 batch_start_offset;
76625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 batch_len;
76725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 DR1;
76825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 DR4;
76925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 num_cliprects;
77025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 cliprects_ptr;
77125b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
77225b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_pin {
77325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
77425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pad;
77525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 alignment;
77625b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 offset;
77725b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
77825b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_unpin {
77925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
78025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pad;
78125b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
78225b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_busy {
78325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
78425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 busy;
78525b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
78625b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_set_tiling {
78725b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
78825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 tiling_mode;
78925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 stride;
79025b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 swizzle_mode;
79125b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
79225b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_get_tiling {
79325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 handle;
79425b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 tiling_mode;
79525b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 swizzle_mode;
79625b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
79725b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_gem_get_aperture {
79825b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 aper_size;
79925b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u64 aper_available_size;
80025b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
80125b1808ff271c53b392bb5485e9c8db8485aea09sewardjstruct vki_drm_i915_get_pipe_from_crtc_id {
80225b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 crtc_id;
80325b1808ff271c53b392bb5485e9c8db8485aea09sewardj	__vki_u32 pipe;
80425b1808ff271c53b392bb5485e9c8db8485aea09sewardj};
80525b1808ff271c53b392bb5485e9c8db8485aea09sewardj
80625b1808ff271c53b392bb5485e9c8db8485aea09sewardj#endif //__VKI_LINUX_DRM_H
80725b1808ff271c53b392bb5485e9c8db8485aea09sewardj
80825b1808ff271c53b392bb5485e9c8db8485aea09sewardj/*--------------------------------------------------------------------*/
80925b1808ff271c53b392bb5485e9c8db8485aea09sewardj/*--- end                                                          ---*/
81025b1808ff271c53b392bb5485e9c8db8485aea09sewardj/*--------------------------------------------------------------------*/
811