Home | History | Annotate | Line # | Download | only in shared-core
      1  1.1  mrg /**
      2  1.1  mrg  * \file drm.h
      3  1.1  mrg  * Header for the Direct Rendering Manager
      4  1.1  mrg  *
      5  1.1  mrg  * \author Rickard E. (Rik) Faith <faith (at) valinux.com>
      6  1.1  mrg  *
      7  1.1  mrg  * \par Acknowledgments:
      8  1.1  mrg  * Dec 1999, Richard Henderson <rth (at) twiddle.net>, move to generic \c cmpxchg.
      9  1.1  mrg  */
     10  1.1  mrg 
     11  1.1  mrg /*
     12  1.1  mrg  * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
     13  1.1  mrg  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
     14  1.1  mrg  * All rights reserved.
     15  1.1  mrg  *
     16  1.1  mrg  * Permission is hereby granted, free of charge, to any person obtaining a
     17  1.1  mrg  * copy of this software and associated documentation files (the "Software"),
     18  1.1  mrg  * to deal in the Software without restriction, including without limitation
     19  1.1  mrg  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     20  1.1  mrg  * and/or sell copies of the Software, and to permit persons to whom the
     21  1.1  mrg  * Software is furnished to do so, subject to the following conditions:
     22  1.1  mrg  *
     23  1.1  mrg  * The above copyright notice and this permission notice (including the next
     24  1.1  mrg  * paragraph) shall be included in all copies or substantial portions of the
     25  1.1  mrg  * Software.
     26  1.1  mrg  *
     27  1.1  mrg  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     28  1.1  mrg  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     29  1.1  mrg  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     30  1.1  mrg  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
     31  1.1  mrg  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     32  1.1  mrg  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     33  1.1  mrg  * OTHER DEALINGS IN THE SOFTWARE.
     34  1.1  mrg  */
     35  1.1  mrg 
     36  1.1  mrg /**
     37  1.1  mrg  * \mainpage
     38  1.1  mrg  *
     39  1.1  mrg  * The Direct Rendering Manager (DRM) is a device-independent kernel-level
     40  1.1  mrg  * device driver that provides support for the XFree86 Direct Rendering
     41  1.1  mrg  * Infrastructure (DRI).
     42  1.1  mrg  *
     43  1.1  mrg  * The DRM supports the Direct Rendering Infrastructure (DRI) in four major
     44  1.1  mrg  * ways:
     45  1.1  mrg  *     -# The DRM provides synchronized access to the graphics hardware via
     46  1.1  mrg  *        the use of an optimized two-tiered lock.
     47  1.1  mrg  *     -# The DRM enforces the DRI security policy for access to the graphics
     48  1.1  mrg  *        hardware by only allowing authenticated X11 clients access to
     49  1.1  mrg  *        restricted regions of memory.
     50  1.1  mrg  *     -# The DRM provides a generic DMA engine, complete with multiple
     51  1.1  mrg  *        queues and the ability to detect the need for an OpenGL context
     52  1.1  mrg  *        switch.
     53  1.1  mrg  *     -# The DRM is extensible via the use of small device-specific modules
     54  1.1  mrg  *        that rely extensively on the API exported by the DRM module.
     55  1.1  mrg  *
     56  1.1  mrg  */
     57  1.1  mrg 
     58  1.1  mrg #ifndef _DRM_H_
     59  1.1  mrg #define _DRM_H_
     60  1.1  mrg 
     61  1.1  mrg #ifndef __user
     62  1.1  mrg #define __user
     63  1.1  mrg #endif
     64  1.1  mrg #ifndef __iomem
     65  1.1  mrg #define __iomem
     66  1.1  mrg #endif
     67  1.1  mrg 
     68  1.1  mrg #ifdef __GNUC__
     69  1.1  mrg # define DEPRECATED  __attribute__ ((deprecated))
     70  1.1  mrg #else
     71  1.1  mrg # define DEPRECATED
     72  1.2  mrg # ifndef __FUNCTION__
     73  1.2  mrg #  define __FUNCTION__ __func__ /* C99 */
     74  1.2  mrg # endif
     75  1.2  mrg # ifndef __volatile__
     76  1.2  mrg #  define __volatile__ volatile
     77  1.2  mrg # endif
     78  1.1  mrg #endif
     79  1.1  mrg 
     80  1.1  mrg #if defined(__linux__)
     81  1.1  mrg #include <asm/ioctl.h>		/* For _IO* macros */
     82  1.1  mrg #define DRM_IOCTL_NR(n)		_IOC_NR(n)
     83  1.1  mrg #define DRM_IOC_VOID		_IOC_NONE
     84  1.1  mrg #define DRM_IOC_READ		_IOC_READ
     85  1.1  mrg #define DRM_IOC_WRITE		_IOC_WRITE
     86  1.1  mrg #define DRM_IOC_READWRITE	_IOC_READ|_IOC_WRITE
     87  1.1  mrg #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
     88  1.1  mrg #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
     89  1.1  mrg #include <sys/ioccom.h>
     90  1.1  mrg #define DRM_IOCTL_NR(n)		((n) & 0xff)
     91  1.1  mrg #define DRM_IOC_VOID		IOC_VOID
     92  1.1  mrg #define DRM_IOC_READ		IOC_OUT
     93  1.1  mrg #define DRM_IOC_WRITE		IOC_IN
     94  1.1  mrg #define DRM_IOC_READWRITE	IOC_INOUT
     95  1.1  mrg #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
     96  1.1  mrg #endif
     97  1.1  mrg 
     98  1.1  mrg #ifdef __OpenBSD__
     99  1.1  mrg #define DRM_MAJOR       81
    100  1.1  mrg #endif
    101  1.2  mrg #if defined(__NetBSD__)
    102  1.2  mrg #define DRM_MAJOR       180
    103  1.2  mrg #endif
    104  1.2  mrg #if defined(__linux__)
    105  1.1  mrg #define DRM_MAJOR       226
    106  1.1  mrg #endif
    107  1.1  mrg #define DRM_MAX_MINOR   15
    108  1.1  mrg 
    109  1.1  mrg #define DRM_NAME	"drm"	  /**< Name in kernel, /dev, and /proc */
    110  1.1  mrg #define DRM_MIN_ORDER	5	  /**< At least 2^5 bytes = 32 bytes */
    111  1.1  mrg #define DRM_MAX_ORDER	22	  /**< Up to 2^22 bytes = 4MB */
    112  1.1  mrg #define DRM_RAM_PERCENT 10	  /**< How much system ram can we lock? */
    113  1.1  mrg 
    114  1.1  mrg #define _DRM_LOCK_HELD	0x80000000U /**< Hardware lock is held */
    115  1.1  mrg #define _DRM_LOCK_CONT	0x40000000U /**< Hardware lock is contended */
    116  1.1  mrg #define _DRM_LOCK_IS_HELD(lock)	   ((lock) & _DRM_LOCK_HELD)
    117  1.1  mrg #define _DRM_LOCK_IS_CONT(lock)	   ((lock) & _DRM_LOCK_CONT)
    118  1.1  mrg #define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
    119  1.1  mrg 
    120  1.1  mrg #if defined(__linux__)
    121  1.1  mrg typedef unsigned int drm_handle_t;
    122  1.1  mrg #else
    123  1.1  mrg #include <sys/types.h>
    124  1.1  mrg typedef unsigned long drm_handle_t;	/**< To mapped regions */
    125  1.1  mrg #endif
    126  1.1  mrg typedef unsigned int drm_context_t;	/**< GLXContext handle */
    127  1.1  mrg typedef unsigned int drm_drawable_t;
    128  1.1  mrg typedef unsigned int drm_magic_t;	/**< Magic for authentication */
    129  1.1  mrg 
    130  1.1  mrg /**
    131  1.1  mrg  * Cliprect.
    132  1.1  mrg  *
    133  1.1  mrg  * \warning If you change this structure, make sure you change
    134  1.1  mrg  * XF86DRIClipRectRec in the server as well
    135  1.1  mrg  *
    136  1.1  mrg  * \note KW: Actually it's illegal to change either for
    137  1.1  mrg  * backwards-compatibility reasons.
    138  1.1  mrg  */
    139  1.1  mrg struct drm_clip_rect {
    140  1.1  mrg 	unsigned short x1;
    141  1.1  mrg 	unsigned short y1;
    142  1.1  mrg 	unsigned short x2;
    143  1.1  mrg 	unsigned short y2;
    144  1.1  mrg };
    145  1.1  mrg 
    146  1.1  mrg /**
    147  1.1  mrg  * Texture region,
    148  1.1  mrg  */
    149  1.1  mrg struct drm_tex_region {
    150  1.1  mrg 	unsigned char next;
    151  1.1  mrg 	unsigned char prev;
    152  1.1  mrg 	unsigned char in_use;
    153  1.1  mrg 	unsigned char padding;
    154  1.1  mrg 	unsigned int age;
    155  1.1  mrg };
    156  1.1  mrg 
    157  1.1  mrg /**
    158  1.1  mrg  * Hardware lock.
    159  1.1  mrg  *
    160  1.1  mrg  * The lock structure is a simple cache-line aligned integer.  To avoid
    161  1.1  mrg  * processor bus contention on a multiprocessor system, there should not be any
    162  1.1  mrg  * other data stored in the same cache line.
    163  1.1  mrg  */
    164  1.1  mrg struct drm_hw_lock {
    165  1.1  mrg 	__volatile__ unsigned int lock;		/**< lock variable */
    166  1.1  mrg 	char padding[60];			/**< Pad to cache line */
    167  1.1  mrg };
    168  1.1  mrg 
    169  1.1  mrg /* This is beyond ugly, and only works on GCC.  However, it allows me to use
    170  1.1  mrg  * drm.h in places (i.e., in the X-server) where I can't use size_t.  The real
    171  1.1  mrg  * fix is to use uint32_t instead of size_t, but that fix will break existing
    172  1.1  mrg  * LP64 (i.e., PowerPC64, SPARC64, IA-64, Alpha, etc.) systems.  That *will*
    173  1.1  mrg  * eventually happen, though.  I chose 'unsigned long' to be the fallback type
    174  1.1  mrg  * because that works on all the platforms I know about.  Hopefully, the
    175  1.1  mrg  * real fix will happen before that bites us.
    176  1.1  mrg  */
    177  1.1  mrg 
    178  1.1  mrg #ifdef __SIZE_TYPE__
    179  1.1  mrg # define DRM_SIZE_T __SIZE_TYPE__
    180  1.1  mrg #else
    181  1.1  mrg # warning "__SIZE_TYPE__ not defined.  Assuming sizeof(size_t) == sizeof(unsigned long)!"
    182  1.1  mrg # define DRM_SIZE_T unsigned long
    183  1.1  mrg #endif
    184  1.1  mrg 
    185  1.1  mrg /**
    186  1.1  mrg  * DRM_IOCTL_VERSION ioctl argument type.
    187  1.1  mrg  *
    188  1.1  mrg  * \sa drmGetVersion().
    189  1.1  mrg  */
    190  1.1  mrg struct drm_version {
    191  1.1  mrg 	int version_major;	  /**< Major version */
    192  1.1  mrg 	int version_minor;	  /**< Minor version */
    193  1.1  mrg 	int version_patchlevel;	  /**< Patch level */
    194  1.1  mrg 	DRM_SIZE_T name_len;	  /**< Length of name buffer */
    195  1.1  mrg 	char __user *name;		  /**< Name of driver */
    196  1.1  mrg 	DRM_SIZE_T date_len;	  /**< Length of date buffer */
    197  1.1  mrg 	char __user *date;		  /**< User-space buffer to hold date */
    198  1.1  mrg 	DRM_SIZE_T desc_len;	  /**< Length of desc buffer */
    199  1.1  mrg 	char __user *desc;		  /**< User-space buffer to hold desc */
    200  1.1  mrg };
    201  1.1  mrg 
    202  1.1  mrg /**
    203  1.1  mrg  * DRM_IOCTL_GET_UNIQUE ioctl argument type.
    204  1.1  mrg  *
    205  1.1  mrg  * \sa drmGetBusid() and drmSetBusId().
    206  1.1  mrg  */
    207  1.1  mrg struct drm_unique {
    208  1.1  mrg 	DRM_SIZE_T unique_len;	  /**< Length of unique */
    209  1.1  mrg 	char __user *unique;		  /**< Unique name for driver instantiation */
    210  1.1  mrg };
    211  1.1  mrg 
    212  1.1  mrg #undef DRM_SIZE_T
    213  1.1  mrg 
    214  1.1  mrg struct drm_list {
    215  1.1  mrg 	int count;		  /**< Length of user-space structures */
    216  1.1  mrg 	struct drm_version __user *version;
    217  1.1  mrg };
    218  1.1  mrg 
    219  1.1  mrg struct drm_block {
    220  1.1  mrg 	int unused;
    221  1.1  mrg };
    222  1.1  mrg 
    223  1.1  mrg /**
    224  1.1  mrg  * DRM_IOCTL_CONTROL ioctl argument type.
    225  1.1  mrg  *
    226  1.1  mrg  * \sa drmCtlInstHandler() and drmCtlUninstHandler().
    227  1.1  mrg  */
    228  1.1  mrg struct drm_control {
    229  1.1  mrg 	enum {
    230  1.1  mrg 		DRM_ADD_COMMAND,
    231  1.1  mrg 		DRM_RM_COMMAND,
    232  1.1  mrg 		DRM_INST_HANDLER,
    233  1.1  mrg 		DRM_UNINST_HANDLER
    234  1.1  mrg 	} func;
    235  1.1  mrg 	int irq;
    236  1.1  mrg };
    237  1.1  mrg 
    238  1.1  mrg /**
    239  1.1  mrg  * Type of memory to map.
    240  1.1  mrg  */
    241  1.1  mrg enum drm_map_type {
    242  1.1  mrg 	_DRM_FRAME_BUFFER = 0,	  /**< WC (no caching), no core dump */
    243  1.1  mrg 	_DRM_REGISTERS = 1,	  /**< no caching, no core dump */
    244  1.1  mrg 	_DRM_SHM = 2,		  /**< shared, cached */
    245  1.1  mrg 	_DRM_AGP = 3,		  /**< AGP/GART */
    246  1.1  mrg 	_DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */
    247  1.1  mrg 	_DRM_CONSISTENT = 5,	  /**< Consistent memory for PCI DMA */
    248  1.2  mrg 	_DRM_GEM = 6,
    249  1.2  mrg 	_DRM_TTM = 7,
    250  1.1  mrg };
    251  1.1  mrg 
    252  1.1  mrg /**
    253  1.1  mrg  * Memory mapping flags.
    254  1.1  mrg  */
    255  1.1  mrg enum drm_map_flags {
    256  1.1  mrg 	_DRM_RESTRICTED = 0x01,	     /**< Cannot be mapped to user-virtual */
    257  1.1  mrg 	_DRM_READ_ONLY = 0x02,
    258  1.1  mrg 	_DRM_LOCKED = 0x04,	     /**< shared, cached, locked */
    259  1.1  mrg 	_DRM_KERNEL = 0x08,	     /**< kernel requires access */
    260  1.1  mrg 	_DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
    261  1.1  mrg 	_DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
    262  1.1  mrg 	_DRM_REMOVABLE = 0x40,	     /**< Removable mapping */
    263  1.1  mrg 	_DRM_DRIVER = 0x80	     /**< Managed by driver */
    264  1.1  mrg };
    265  1.1  mrg 
    266  1.1  mrg struct drm_ctx_priv_map {
    267  1.1  mrg 	unsigned int ctx_id;	 /**< Context requesting private mapping */
    268  1.1  mrg 	void *handle;		 /**< Handle of map */
    269  1.1  mrg };
    270  1.1  mrg 
    271  1.1  mrg /**
    272  1.1  mrg  * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
    273  1.1  mrg  * argument type.
    274  1.1  mrg  *
    275  1.1  mrg  * \sa drmAddMap().
    276  1.1  mrg  */
    277  1.1  mrg struct drm_map {
    278  1.1  mrg 	unsigned long offset;	 /**< Requested physical address (0 for SAREA)*/
    279  1.1  mrg 	unsigned long size;	 /**< Requested physical size (bytes) */
    280  1.1  mrg 	enum drm_map_type type;	 /**< Type of memory to map */
    281  1.1  mrg 	enum drm_map_flags flags;	 /**< Flags */
    282  1.1  mrg 	void *handle;		 /**< User-space: "Handle" to pass to mmap() */
    283  1.1  mrg 				 /**< Kernel-space: kernel-virtual address */
    284  1.1  mrg 	int mtrr;		 /**< MTRR slot used */
    285  1.1  mrg 	/*   Private data */
    286  1.1  mrg };
    287  1.1  mrg 
    288  1.1  mrg /**
    289  1.1  mrg  * DRM_IOCTL_GET_CLIENT ioctl argument type.
    290  1.1  mrg  */
    291  1.1  mrg struct drm_client {
    292  1.1  mrg 	int idx;		/**< Which client desired? */
    293  1.1  mrg 	int auth;		/**< Is client authenticated? */
    294  1.1  mrg 	unsigned long pid;	/**< Process ID */
    295  1.1  mrg 	unsigned long uid;	/**< User ID */
    296  1.1  mrg 	unsigned long magic;	/**< Magic */
    297  1.1  mrg 	unsigned long iocs;	/**< Ioctl count */
    298  1.1  mrg };
    299  1.1  mrg 
    300  1.1  mrg enum drm_stat_type {
    301  1.1  mrg 	_DRM_STAT_LOCK,
    302  1.1  mrg 	_DRM_STAT_OPENS,
    303  1.1  mrg 	_DRM_STAT_CLOSES,
    304  1.1  mrg 	_DRM_STAT_IOCTLS,
    305  1.1  mrg 	_DRM_STAT_LOCKS,
    306  1.1  mrg 	_DRM_STAT_UNLOCKS,
    307  1.1  mrg 	_DRM_STAT_VALUE,	/**< Generic value */
    308  1.1  mrg 	_DRM_STAT_BYTE,		/**< Generic byte counter (1024bytes/K) */
    309  1.1  mrg 	_DRM_STAT_COUNT,	/**< Generic non-byte counter (1000/k) */
    310  1.1  mrg 
    311  1.1  mrg 	_DRM_STAT_IRQ,		/**< IRQ */
    312  1.1  mrg 	_DRM_STAT_PRIMARY,	/**< Primary DMA bytes */
    313  1.1  mrg 	_DRM_STAT_SECONDARY,	/**< Secondary DMA bytes */
    314  1.1  mrg 	_DRM_STAT_DMA,		/**< DMA */
    315  1.1  mrg 	_DRM_STAT_SPECIAL,	/**< Special DMA (e.g., priority or polled) */
    316  1.1  mrg 	_DRM_STAT_MISSED	/**< Missed DMA opportunity */
    317  1.1  mrg 	    /* Add to the *END* of the list */
    318  1.1  mrg };
    319  1.1  mrg 
    320  1.1  mrg /**
    321  1.1  mrg  * DRM_IOCTL_GET_STATS ioctl argument type.
    322  1.1  mrg  */
    323  1.1  mrg struct drm_stats {
    324  1.1  mrg 	unsigned long count;
    325  1.1  mrg 	struct {
    326  1.1  mrg 		unsigned long value;
    327  1.1  mrg 		enum drm_stat_type type;
    328  1.1  mrg 	} data[15];
    329  1.1  mrg };
    330  1.1  mrg 
    331  1.1  mrg /**
    332  1.1  mrg  * Hardware locking flags.
    333  1.1  mrg  */
    334  1.1  mrg enum drm_lock_flags {
    335  1.1  mrg 	_DRM_LOCK_READY = 0x01,	     /**< Wait until hardware is ready for DMA */
    336  1.1  mrg 	_DRM_LOCK_QUIESCENT = 0x02,  /**< Wait until hardware quiescent */
    337  1.1  mrg 	_DRM_LOCK_FLUSH = 0x04,	     /**< Flush this context's DMA queue first */
    338  1.1  mrg 	_DRM_LOCK_FLUSH_ALL = 0x08,  /**< Flush all DMA queues first */
    339  1.1  mrg 	/* These *HALT* flags aren't supported yet
    340  1.1  mrg 	   -- they will be used to support the
    341  1.1  mrg 	   full-screen DGA-like mode. */
    342  1.1  mrg 	_DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */
    343  1.1  mrg 	_DRM_HALT_CUR_QUEUES = 0x20  /**< Halt all current queues */
    344  1.1  mrg };
    345  1.1  mrg 
    346  1.1  mrg /**
    347  1.1  mrg  * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type.
    348  1.1  mrg  *
    349  1.1  mrg  * \sa drmGetLock() and drmUnlock().
    350  1.1  mrg  */
    351  1.1  mrg struct drm_lock {
    352  1.1  mrg 	int context;
    353  1.1  mrg 	enum drm_lock_flags flags;
    354  1.1  mrg };
    355  1.1  mrg 
    356  1.1  mrg /**
    357  1.1  mrg  * DMA flags
    358  1.1  mrg  *
    359  1.1  mrg  * \warning
    360  1.1  mrg  * These values \e must match xf86drm.h.
    361  1.1  mrg  *
    362  1.1  mrg  * \sa drm_dma.
    363  1.1  mrg  */
    364  1.1  mrg enum drm_dma_flags {
    365  1.1  mrg 	/* Flags for DMA buffer dispatch */
    366  1.1  mrg 	_DRM_DMA_BLOCK = 0x01,	      /**<
    367  1.1  mrg 				       * Block until buffer dispatched.
    368  1.1  mrg 				       *
    369  1.1  mrg 				       * \note The buffer may not yet have
    370  1.1  mrg 				       * been processed by the hardware --
    371  1.1  mrg 				       * getting a hardware lock with the
    372  1.1  mrg 				       * hardware quiescent will ensure
    373  1.1  mrg 				       * that the buffer has been
    374  1.1  mrg 				       * processed.
    375  1.1  mrg 				       */
    376  1.1  mrg 	_DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */
    377  1.1  mrg 	_DRM_DMA_PRIORITY = 0x04,     /**< High priority dispatch */
    378  1.1  mrg 
    379  1.1  mrg 	/* Flags for DMA buffer request */
    380  1.1  mrg 	_DRM_DMA_WAIT = 0x10,	      /**< Wait for free buffers */
    381  1.1  mrg 	_DRM_DMA_SMALLER_OK = 0x20,   /**< Smaller-than-requested buffers OK */
    382  1.1  mrg 	_DRM_DMA_LARGER_OK = 0x40     /**< Larger-than-requested buffers OK */
    383  1.1  mrg };
    384  1.1  mrg 
    385  1.1  mrg /**
    386  1.1  mrg  * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type.
    387  1.1  mrg  *
    388  1.1  mrg  * \sa drmAddBufs().
    389  1.1  mrg  */
    390  1.1  mrg struct drm_buf_desc {
    391  1.1  mrg 	int count;		 /**< Number of buffers of this size */
    392  1.1  mrg 	int size;		 /**< Size in bytes */
    393  1.1  mrg 	int low_mark;		 /**< Low water mark */
    394  1.1  mrg 	int high_mark;		 /**< High water mark */
    395  1.1  mrg 	enum {
    396  1.1  mrg 		_DRM_PAGE_ALIGN = 0x01,	/**< Align on page boundaries for DMA */
    397  1.1  mrg 		_DRM_AGP_BUFFER = 0x02,	/**< Buffer is in AGP space */
    398  1.1  mrg 		_DRM_SG_BUFFER  = 0x04,	/**< Scatter/gather memory buffer */
    399  1.1  mrg 		_DRM_FB_BUFFER  = 0x08, /**< Buffer is in frame buffer */
    400  1.1  mrg 		_DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
    401  1.1  mrg 	} flags;
    402  1.1  mrg 	unsigned long agp_start; /**<
    403  1.1  mrg 				  * Start address of where the AGP buffers are
    404  1.1  mrg 				  * in the AGP aperture
    405  1.1  mrg 				  */
    406  1.1  mrg };
    407  1.1  mrg 
    408  1.1  mrg /**
    409  1.1  mrg  * DRM_IOCTL_INFO_BUFS ioctl argument type.
    410  1.1  mrg  */
    411  1.1  mrg struct drm_buf_info {
    412  1.1  mrg 	int count;		  /**< Number of buffers described in list */
    413  1.1  mrg 	struct drm_buf_desc __user *list; /**< List of buffer descriptions */
    414  1.1  mrg };
    415  1.1  mrg 
    416  1.1  mrg /**
    417  1.1  mrg  * DRM_IOCTL_FREE_BUFS ioctl argument type.
    418  1.1  mrg  */
    419  1.1  mrg struct drm_buf_free {
    420  1.1  mrg 	int count;
    421  1.1  mrg 	int __user *list;
    422  1.1  mrg };
    423  1.1  mrg 
    424  1.1  mrg /**
    425  1.1  mrg  * Buffer information
    426  1.1  mrg  *
    427  1.1  mrg  * \sa drm_buf_map.
    428  1.1  mrg  */
    429  1.1  mrg struct drm_buf_pub {
    430  1.1  mrg 	int idx;		       /**< Index into the master buffer list */
    431  1.1  mrg 	int total;		       /**< Buffer size */
    432  1.1  mrg 	int used;		       /**< Amount of buffer in use (for DMA) */
    433  1.1  mrg 	void __user *address;	       /**< Address of buffer */
    434  1.1  mrg };
    435  1.1  mrg 
    436  1.1  mrg /**
    437  1.1  mrg  * DRM_IOCTL_MAP_BUFS ioctl argument type.
    438  1.1  mrg  */
    439  1.1  mrg struct drm_buf_map {
    440  1.1  mrg 	int count;		/**< Length of the buffer list */
    441  1.1  mrg #if defined(__cplusplus)
    442  1.1  mrg 	void __user *c_virtual;
    443  1.1  mrg #else
    444  1.1  mrg 	void __user *virtual;		/**< Mmap'd area in user-virtual */
    445  1.1  mrg #endif
    446  1.1  mrg 	struct drm_buf_pub __user *list;	/**< Buffer information */
    447  1.1  mrg };
    448  1.1  mrg 
    449  1.1  mrg /**
    450  1.1  mrg  * DRM_IOCTL_DMA ioctl argument type.
    451  1.1  mrg  *
    452  1.1  mrg  * Indices here refer to the offset into the buffer list in drm_buf_get.
    453  1.1  mrg  *
    454  1.1  mrg  * \sa drmDMA().
    455  1.1  mrg  */
    456  1.1  mrg struct drm_dma {
    457  1.1  mrg 	int context;			  /**< Context handle */
    458  1.1  mrg 	int send_count;			  /**< Number of buffers to send */
    459  1.1  mrg 	int __user *send_indices;	  /**< List of handles to buffers */
    460  1.1  mrg 	int __user *send_sizes;		  /**< Lengths of data to send */
    461  1.1  mrg 	enum drm_dma_flags flags;	  /**< Flags */
    462  1.1  mrg 	int request_count;		  /**< Number of buffers requested */
    463  1.1  mrg 	int request_size;		  /**< Desired size for buffers */
    464  1.1  mrg 	int __user *request_indices;	 /**< Buffer information */
    465  1.1  mrg 	int __user *request_sizes;
    466  1.1  mrg 	int granted_count;		  /**< Number of buffers granted */
    467  1.1  mrg };
    468  1.1  mrg 
    469  1.1  mrg enum drm_ctx_flags {
    470  1.1  mrg 	_DRM_CONTEXT_PRESERVED = 0x01,
    471  1.1  mrg 	_DRM_CONTEXT_2DONLY = 0x02
    472  1.1  mrg };
    473  1.1  mrg 
    474  1.1  mrg /**
    475  1.1  mrg  * DRM_IOCTL_ADD_CTX ioctl argument type.
    476  1.1  mrg  *
    477  1.1  mrg  * \sa drmCreateContext() and drmDestroyContext().
    478  1.1  mrg  */
    479  1.1  mrg struct drm_ctx {
    480  1.1  mrg 	drm_context_t handle;
    481  1.1  mrg 	enum drm_ctx_flags flags;
    482  1.1  mrg };
    483  1.1  mrg 
    484  1.1  mrg /**
    485  1.1  mrg  * DRM_IOCTL_RES_CTX ioctl argument type.
    486  1.1  mrg  */
    487  1.1  mrg struct drm_ctx_res {
    488  1.1  mrg 	int count;
    489  1.1  mrg 	struct drm_ctx __user *contexts;
    490  1.1  mrg };
    491  1.1  mrg 
    492  1.1  mrg /**
    493  1.1  mrg  * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type.
    494  1.1  mrg  */
    495  1.1  mrg struct drm_draw {
    496  1.1  mrg 	drm_drawable_t handle;
    497  1.1  mrg };
    498  1.1  mrg 
    499  1.1  mrg /**
    500  1.1  mrg  * DRM_IOCTL_UPDATE_DRAW ioctl argument type.
    501  1.1  mrg  */
    502  1.1  mrg typedef enum {
    503  1.1  mrg 	DRM_DRAWABLE_CLIPRECTS,
    504  1.1  mrg } drm_drawable_info_type_t;
    505  1.1  mrg 
    506  1.1  mrg struct drm_update_draw {
    507  1.1  mrg 	drm_drawable_t handle;
    508  1.1  mrg 	unsigned int type;
    509  1.1  mrg 	unsigned int num;
    510  1.1  mrg 	unsigned long long data;
    511  1.1  mrg };
    512  1.1  mrg 
    513  1.1  mrg /**
    514  1.1  mrg  * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type.
    515  1.1  mrg  */
    516  1.1  mrg struct drm_auth {
    517  1.1  mrg 	drm_magic_t magic;
    518  1.1  mrg };
    519  1.1  mrg 
    520  1.1  mrg /**
    521  1.1  mrg  * DRM_IOCTL_IRQ_BUSID ioctl argument type.
    522  1.1  mrg  *
    523  1.1  mrg  * \sa drmGetInterruptFromBusID().
    524  1.1  mrg  */
    525  1.1  mrg struct drm_irq_busid {
    526  1.1  mrg 	int irq;	/**< IRQ number */
    527  1.1  mrg 	int busnum;	/**< bus number */
    528  1.1  mrg 	int devnum;	/**< device number */
    529  1.1  mrg 	int funcnum;	/**< function number */
    530  1.1  mrg };
    531  1.1  mrg 
    532  1.1  mrg enum drm_vblank_seq_type {
    533  1.1  mrg 	_DRM_VBLANK_ABSOLUTE = 0x0,	/**< Wait for specific vblank sequence number */
    534  1.1  mrg 	_DRM_VBLANK_RELATIVE = 0x1,	/**< Wait for given number of vblanks */
    535  1.1  mrg 	_DRM_VBLANK_FLIP = 0x8000000,	/**< Scheduled buffer swap should flip */
    536  1.1  mrg 	_DRM_VBLANK_NEXTONMISS = 0x10000000,	/**< If missed, wait for next vblank */
    537  1.1  mrg 	_DRM_VBLANK_SECONDARY = 0x20000000,	/**< Secondary display controller */
    538  1.1  mrg 	_DRM_VBLANK_SIGNAL = 0x40000000	/**< Send signal instead of blocking */
    539  1.1  mrg };
    540  1.1  mrg 
    541  1.1  mrg #define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE)
    542  1.1  mrg #define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_SIGNAL | _DRM_VBLANK_SECONDARY | \
    543  1.1  mrg 				_DRM_VBLANK_NEXTONMISS)
    544  1.1  mrg 
    545  1.1  mrg struct drm_wait_vblank_request {
    546  1.1  mrg 	enum drm_vblank_seq_type type;
    547  1.1  mrg 	unsigned int sequence;
    548  1.1  mrg 	unsigned long signal;
    549  1.1  mrg };
    550  1.1  mrg 
    551  1.1  mrg struct drm_wait_vblank_reply {
    552  1.1  mrg 	enum drm_vblank_seq_type type;
    553  1.1  mrg 	unsigned int sequence;
    554  1.1  mrg 	long tval_sec;
    555  1.1  mrg 	long tval_usec;
    556  1.1  mrg };
    557  1.1  mrg 
    558  1.1  mrg /**
    559  1.1  mrg  * DRM_IOCTL_WAIT_VBLANK ioctl argument type.
    560  1.1  mrg  *
    561  1.1  mrg  * \sa drmWaitVBlank().
    562  1.1  mrg  */
    563  1.1  mrg union drm_wait_vblank {
    564  1.1  mrg 	struct drm_wait_vblank_request request;
    565  1.1  mrg 	struct drm_wait_vblank_reply reply;
    566  1.1  mrg };
    567  1.1  mrg 
    568  1.1  mrg 
    569  1.1  mrg #define _DRM_PRE_MODESET 1
    570  1.1  mrg #define _DRM_POST_MODESET 2
    571  1.1  mrg 
    572  1.1  mrg /**
    573  1.1  mrg  * DRM_IOCTL_MODESET_CTL ioctl argument type
    574  1.1  mrg  *
    575  1.1  mrg  * \sa drmModesetCtl().
    576  1.1  mrg  */
    577  1.1  mrg struct drm_modeset_ctl {
    578  1.1  mrg 	uint32_t crtc;
    579  1.1  mrg 	uint32_t cmd;
    580  1.1  mrg };
    581  1.1  mrg 
    582  1.1  mrg /**
    583  1.1  mrg  * DRM_IOCTL_AGP_ENABLE ioctl argument type.
    584  1.1  mrg  *
    585  1.1  mrg  * \sa drmAgpEnable().
    586  1.1  mrg  */
    587  1.1  mrg struct drm_agp_mode {
    588  1.1  mrg 	unsigned long mode;	/**< AGP mode */
    589  1.1  mrg };
    590  1.1  mrg 
    591  1.1  mrg /**
    592  1.1  mrg  * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type.
    593  1.1  mrg  *
    594  1.1  mrg  * \sa drmAgpAlloc() and drmAgpFree().
    595  1.1  mrg  */
    596  1.1  mrg struct drm_agp_buffer {
    597  1.1  mrg 	unsigned long size;	/**< In bytes -- will round to page boundary */
    598  1.1  mrg 	unsigned long handle;	/**< Used for binding / unbinding */
    599  1.1  mrg 	unsigned long type;	/**< Type of memory to allocate */
    600  1.1  mrg 	unsigned long physical;	/**< Physical used by i810 */
    601  1.1  mrg };
    602  1.1  mrg 
    603  1.1  mrg /**
    604  1.1  mrg  * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type.
    605  1.1  mrg  *
    606  1.1  mrg  * \sa drmAgpBind() and drmAgpUnbind().
    607  1.1  mrg  */
    608  1.1  mrg struct drm_agp_binding {
    609  1.1  mrg 	unsigned long handle;	/**< From drm_agp_buffer */
    610  1.1  mrg 	unsigned long offset;	/**< In bytes -- will round to page boundary */
    611  1.1  mrg };
    612  1.1  mrg 
    613  1.1  mrg /**
    614  1.1  mrg  * DRM_IOCTL_AGP_INFO ioctl argument type.
    615  1.1  mrg  *
    616  1.1  mrg  * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(),
    617  1.1  mrg  * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(),
    618  1.1  mrg  * drmAgpVendorId() and drmAgpDeviceId().
    619  1.1  mrg  */
    620  1.1  mrg struct drm_agp_info {
    621  1.1  mrg 	int agp_version_major;
    622  1.1  mrg 	int agp_version_minor;
    623  1.1  mrg 	unsigned long mode;
    624  1.1  mrg 	unsigned long aperture_base;   /**< physical address */
    625  1.1  mrg 	unsigned long aperture_size;   /**< bytes */
    626  1.1  mrg 	unsigned long memory_allowed;  /**< bytes */
    627  1.1  mrg 	unsigned long memory_used;
    628  1.1  mrg 
    629  1.1  mrg 	/** \name PCI information */
    630  1.1  mrg 	/*@{ */
    631  1.1  mrg 	unsigned short id_vendor;
    632  1.1  mrg 	unsigned short id_device;
    633  1.1  mrg 	/*@} */
    634  1.1  mrg };
    635  1.1  mrg 
    636  1.1  mrg /**
    637  1.1  mrg  * DRM_IOCTL_SG_ALLOC ioctl argument type.
    638  1.1  mrg  */
    639  1.1  mrg struct drm_scatter_gather {
    640  1.1  mrg 	unsigned long size;	/**< In bytes -- will round to page boundary */
    641  1.1  mrg 	unsigned long handle;	/**< Used for mapping / unmapping */
    642  1.1  mrg };
    643  1.1  mrg 
    644  1.1  mrg /**
    645  1.1  mrg  * DRM_IOCTL_SET_VERSION ioctl argument type.
    646  1.1  mrg  */
    647  1.1  mrg struct drm_set_version {
    648  1.1  mrg 	int drm_di_major;
    649  1.1  mrg 	int drm_di_minor;
    650  1.1  mrg 	int drm_dd_major;
    651  1.1  mrg 	int drm_dd_minor;
    652  1.1  mrg };
    653  1.1  mrg 
    654  1.1  mrg 
    655  1.1  mrg #define DRM_FENCE_FLAG_EMIT                0x00000001
    656  1.1  mrg #define DRM_FENCE_FLAG_SHAREABLE           0x00000002
    657  1.1  mrg /**
    658  1.1  mrg  * On hardware with no interrupt events for operation completion,
    659  1.1  mrg  * indicates that the kernel should sleep while waiting for any blocking
    660  1.1  mrg  * operation to complete rather than spinning.
    661  1.1  mrg  *
    662  1.1  mrg  * Has no effect otherwise.
    663  1.1  mrg  */
    664  1.1  mrg #define DRM_FENCE_FLAG_WAIT_LAZY           0x00000004
    665  1.1  mrg #define DRM_FENCE_FLAG_NO_USER             0x00000010
    666  1.1  mrg 
    667  1.1  mrg /* Reserved for driver use */
    668  1.1  mrg #define DRM_FENCE_MASK_DRIVER              0xFF000000
    669  1.1  mrg 
    670  1.1  mrg #define DRM_FENCE_TYPE_EXE                 0x00000001
    671  1.1  mrg 
    672  1.1  mrg struct drm_fence_arg {
    673  1.1  mrg 	unsigned int handle;
    674  1.1  mrg 	unsigned int fence_class;
    675  1.1  mrg 	unsigned int type;
    676  1.1  mrg 	unsigned int flags;
    677  1.1  mrg 	unsigned int signaled;
    678  1.1  mrg 	unsigned int error;
    679  1.1  mrg 	unsigned int sequence;
    680  1.1  mrg 	unsigned int pad64;
    681  1.1  mrg 	uint64_t expand_pad[2]; /*Future expansion */
    682  1.1  mrg };
    683  1.1  mrg 
    684  1.1  mrg /* Buffer permissions, referring to how the GPU uses the buffers.
    685  1.1  mrg  * these translate to fence types used for the buffers.
    686  1.1  mrg  * Typically a texture buffer is read, A destination buffer is write and
    687  1.1  mrg  *  a command (batch-) buffer is exe. Can be or-ed together.
    688  1.1  mrg  */
    689  1.1  mrg 
    690  1.1  mrg #define DRM_BO_FLAG_READ        (1ULL << 0)
    691  1.1  mrg #define DRM_BO_FLAG_WRITE       (1ULL << 1)
    692  1.1  mrg #define DRM_BO_FLAG_EXE         (1ULL << 2)
    693  1.1  mrg 
    694  1.1  mrg /*
    695  1.1  mrg  * All of the bits related to access mode
    696  1.1  mrg  */
    697  1.1  mrg #define DRM_BO_MASK_ACCESS	(DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE | DRM_BO_FLAG_EXE)
    698  1.1  mrg /*
    699  1.1  mrg  * Status flags. Can be read to determine the actual state of a buffer.
    700  1.1  mrg  * Can also be set in the buffer mask before validation.
    701  1.1  mrg  */
    702  1.1  mrg 
    703  1.1  mrg /*
    704  1.1  mrg  * Mask: Never evict this buffer. Not even with force. This type of buffer is only
    705  1.1  mrg  * available to root and must be manually removed before buffer manager shutdown
    706  1.1  mrg  * or lock.
    707  1.1  mrg  * Flags: Acknowledge
    708  1.1  mrg  */
    709  1.1  mrg #define DRM_BO_FLAG_NO_EVICT    (1ULL << 4)
    710  1.1  mrg 
    711  1.1  mrg /*
    712  1.1  mrg  * Mask: Require that the buffer is placed in mappable memory when validated.
    713  1.1  mrg  *       If not set the buffer may or may not be in mappable memory when validated.
    714  1.1  mrg  * Flags: If set, the buffer is in mappable memory.
    715  1.1  mrg  */
    716  1.1  mrg #define DRM_BO_FLAG_MAPPABLE    (1ULL << 5)
    717  1.1  mrg 
    718  1.1  mrg /* Mask: The buffer should be shareable with other processes.
    719  1.1  mrg  * Flags: The buffer is shareable with other processes.
    720  1.1  mrg  */
    721  1.1  mrg #define DRM_BO_FLAG_SHAREABLE   (1ULL << 6)
    722  1.1  mrg 
    723  1.1  mrg /* Mask: If set, place the buffer in cache-coherent memory if available.
    724  1.1  mrg  *       If clear, never place the buffer in cache coherent memory if validated.
    725  1.1  mrg  * Flags: The buffer is currently in cache-coherent memory.
    726  1.1  mrg  */
    727  1.1  mrg #define DRM_BO_FLAG_CACHED      (1ULL << 7)
    728  1.1  mrg 
    729  1.1  mrg /* Mask: Make sure that every time this buffer is validated,
    730  1.1  mrg  *       it ends up on the same location provided that the memory mask is the same.
    731  1.1  mrg  *       The buffer will also not be evicted when claiming space for
    732  1.1  mrg  *       other buffers. Basically a pinned buffer but it may be thrown out as
    733  1.1  mrg  *       part of buffer manager shutdown or locking.
    734  1.1  mrg  * Flags: Acknowledge.
    735  1.1  mrg  */
    736  1.1  mrg #define DRM_BO_FLAG_NO_MOVE     (1ULL << 8)
    737  1.1  mrg 
    738  1.1  mrg /* Mask: Make sure the buffer is in cached memory when mapped.  In conjunction
    739  1.1  mrg  * with DRM_BO_FLAG_CACHED it also allows the buffer to be bound into the GART
    740  1.1  mrg  * with unsnooped PTEs instead of snooped, by using chipset-specific cache
    741  1.1  mrg  * flushing at bind time.  A better name might be DRM_BO_FLAG_TT_UNSNOOPED,
    742  1.1  mrg  * as the eviction to local memory (TTM unbind) on map is just a side effect
    743  1.1  mrg  * to prevent aggressive cache prefetch from the GPU disturbing the cache
    744  1.1  mrg  * management that the DRM is doing.
    745  1.1  mrg  *
    746  1.1  mrg  * Flags: Acknowledge.
    747  1.1  mrg  * Buffers allocated with this flag should not be used for suballocators
    748  1.1  mrg  * This type may have issues on CPUs with over-aggressive caching
    749  1.1  mrg  * http://marc.info/?l=linux-kernel&m=102376926732464&w=2
    750  1.1  mrg  */
    751  1.1  mrg #define DRM_BO_FLAG_CACHED_MAPPED    (1ULL << 19)
    752  1.1  mrg 
    753  1.1  mrg 
    754  1.1  mrg /* Mask: Force DRM_BO_FLAG_CACHED flag strictly also if it is set.
    755  1.1  mrg  * Flags: Acknowledge.
    756  1.1  mrg  */
    757  1.1  mrg #define DRM_BO_FLAG_FORCE_CACHING  (1ULL << 13)
    758  1.1  mrg 
    759  1.1  mrg /*
    760  1.1  mrg  * Mask: Force DRM_BO_FLAG_MAPPABLE flag strictly also if it is clear.
    761  1.1  mrg  * Flags: Acknowledge.
    762  1.1  mrg  */
    763  1.1  mrg #define DRM_BO_FLAG_FORCE_MAPPABLE (1ULL << 14)
    764  1.1  mrg #define DRM_BO_FLAG_TILE           (1ULL << 15)
    765  1.1  mrg 
    766  1.1  mrg /*
    767  1.1  mrg  * Memory type flags that can be or'ed together in the mask, but only
    768  1.1  mrg  * one appears in flags.
    769  1.1  mrg  */
    770  1.1  mrg 
    771  1.1  mrg /* System memory */
    772  1.1  mrg #define DRM_BO_FLAG_MEM_LOCAL  (1ULL << 24)
    773  1.1  mrg /* Translation table memory */
    774  1.1  mrg #define DRM_BO_FLAG_MEM_TT     (1ULL << 25)
    775  1.1  mrg /* Vram memory */
    776  1.1  mrg #define DRM_BO_FLAG_MEM_VRAM   (1ULL << 26)
    777  1.1  mrg /* Up to the driver to define. */
    778  1.1  mrg #define DRM_BO_FLAG_MEM_PRIV0  (1ULL << 27)
    779  1.1  mrg #define DRM_BO_FLAG_MEM_PRIV1  (1ULL << 28)
    780  1.1  mrg #define DRM_BO_FLAG_MEM_PRIV2  (1ULL << 29)
    781  1.1  mrg #define DRM_BO_FLAG_MEM_PRIV3  (1ULL << 30)
    782  1.1  mrg #define DRM_BO_FLAG_MEM_PRIV4  (1ULL << 31)
    783  1.1  mrg /* We can add more of these now with a 64-bit flag type */
    784  1.1  mrg 
    785  1.1  mrg /*
    786  1.1  mrg  * This is a mask covering all of the memory type flags; easier to just
    787  1.1  mrg  * use a single constant than a bunch of | values. It covers
    788  1.1  mrg  * DRM_BO_FLAG_MEM_LOCAL through DRM_BO_FLAG_MEM_PRIV4
    789  1.1  mrg  */
    790  1.1  mrg #define DRM_BO_MASK_MEM         0x00000000FF000000ULL
    791  1.1  mrg /*
    792  1.1  mrg  * This adds all of the CPU-mapping options in with the memory
    793  1.1  mrg  * type to label all bits which change how the page gets mapped
    794  1.1  mrg  */
    795  1.1  mrg #define DRM_BO_MASK_MEMTYPE     (DRM_BO_MASK_MEM | \
    796  1.1  mrg 				 DRM_BO_FLAG_CACHED_MAPPED | \
    797  1.1  mrg 				 DRM_BO_FLAG_CACHED | \
    798  1.1  mrg 				 DRM_BO_FLAG_MAPPABLE)
    799  1.1  mrg 
    800  1.1  mrg /* Driver-private flags */
    801  1.1  mrg #define DRM_BO_MASK_DRIVER      0xFFFF000000000000ULL
    802  1.1  mrg 
    803  1.1  mrg /*
    804  1.1  mrg  * Don't block on validate and map. Instead, return EBUSY.
    805  1.1  mrg  */
    806  1.1  mrg #define DRM_BO_HINT_DONT_BLOCK  0x00000002
    807  1.1  mrg /*
    808  1.1  mrg  * Don't place this buffer on the unfenced list. This means
    809  1.1  mrg  * that the buffer will not end up having a fence associated
    810  1.1  mrg  * with it as a result of this operation
    811  1.1  mrg  */
    812  1.1  mrg #define DRM_BO_HINT_DONT_FENCE  0x00000004
    813  1.1  mrg /**
    814  1.1  mrg  * On hardware with no interrupt events for operation completion,
    815  1.1  mrg  * indicates that the kernel should sleep while waiting for any blocking
    816  1.1  mrg  * operation to complete rather than spinning.
    817  1.1  mrg  *
    818  1.1  mrg  * Has no effect otherwise.
    819  1.1  mrg  */
    820  1.1  mrg #define DRM_BO_HINT_WAIT_LAZY   0x00000008
    821  1.1  mrg /*
    822  1.1  mrg  * The client has compute relocations refering to this buffer using the
    823  1.1  mrg  * offset in the presumed_offset field. If that offset ends up matching
    824  1.1  mrg  * where this buffer lands, the kernel is free to skip executing those
    825  1.1  mrg  * relocations
    826  1.1  mrg  */
    827  1.1  mrg #define DRM_BO_HINT_PRESUMED_OFFSET 0x00000010
    828  1.1  mrg 
    829  1.1  mrg #define DRM_BO_INIT_MAGIC 0xfe769812
    830  1.1  mrg #define DRM_BO_INIT_MAJOR 1
    831  1.1  mrg #define DRM_BO_INIT_MINOR 0
    832  1.1  mrg #define DRM_BO_INIT_PATCH 0
    833  1.1  mrg 
    834  1.1  mrg 
    835  1.1  mrg struct drm_bo_info_req {
    836  1.1  mrg 	uint64_t mask;
    837  1.1  mrg 	uint64_t flags;
    838  1.1  mrg 	unsigned int handle;
    839  1.1  mrg 	unsigned int hint;
    840  1.1  mrg 	unsigned int fence_class;
    841  1.1  mrg 	unsigned int desired_tile_stride;
    842  1.1  mrg 	unsigned int tile_info;
    843  1.1  mrg 	unsigned int pad64;
    844  1.1  mrg 	uint64_t presumed_offset;
    845  1.1  mrg };
    846  1.1  mrg 
    847  1.1  mrg struct drm_bo_create_req {
    848  1.1  mrg 	uint64_t flags;
    849  1.1  mrg 	uint64_t size;
    850  1.1  mrg 	uint64_t buffer_start;
    851  1.1  mrg 	unsigned int hint;
    852  1.1  mrg 	unsigned int page_alignment;
    853  1.1  mrg };
    854  1.1  mrg 
    855  1.1  mrg 
    856  1.1  mrg /*
    857  1.1  mrg  * Reply flags
    858  1.1  mrg  */
    859  1.1  mrg 
    860  1.1  mrg #define DRM_BO_REP_BUSY 0x00000001
    861  1.1  mrg 
    862  1.1  mrg struct drm_bo_info_rep {
    863  1.1  mrg 	uint64_t flags;
    864  1.1  mrg 	uint64_t proposed_flags;
    865  1.1  mrg 	uint64_t size;
    866  1.1  mrg 	uint64_t offset;
    867  1.1  mrg 	uint64_t arg_handle;
    868  1.1  mrg 	uint64_t buffer_start;
    869  1.1  mrg 	unsigned int handle;
    870  1.1  mrg 	unsigned int fence_flags;
    871  1.1  mrg 	unsigned int rep_flags;
    872  1.1  mrg 	unsigned int page_alignment;
    873  1.1  mrg 	unsigned int desired_tile_stride;
    874  1.1  mrg 	unsigned int hw_tile_stride;
    875  1.1  mrg 	unsigned int tile_info;
    876  1.1  mrg 	unsigned int pad64;
    877  1.1  mrg 	uint64_t expand_pad[4]; /*Future expansion */
    878  1.1  mrg };
    879  1.1  mrg 
    880  1.1  mrg struct drm_bo_arg_rep {
    881  1.1  mrg 	struct drm_bo_info_rep bo_info;
    882  1.1  mrg 	int ret;
    883  1.1  mrg 	unsigned int pad64;
    884  1.1  mrg };
    885  1.1  mrg 
    886  1.1  mrg struct drm_bo_create_arg {
    887  1.1  mrg 	union {
    888  1.1  mrg 		struct drm_bo_create_req req;
    889  1.1  mrg 		struct drm_bo_info_rep rep;
    890  1.1  mrg 	} d;
    891  1.1  mrg };
    892  1.1  mrg 
    893  1.1  mrg struct drm_bo_handle_arg {
    894  1.1  mrg 	unsigned int handle;
    895  1.1  mrg };
    896  1.1  mrg 
    897  1.1  mrg struct drm_bo_reference_info_arg {
    898  1.1  mrg 	union {
    899  1.1  mrg 		struct drm_bo_handle_arg req;
    900  1.1  mrg 		struct drm_bo_info_rep rep;
    901  1.1  mrg 	} d;
    902  1.1  mrg };
    903  1.1  mrg 
    904  1.1  mrg struct drm_bo_map_wait_idle_arg {
    905  1.1  mrg 	union {
    906  1.1  mrg 		struct drm_bo_info_req req;
    907  1.1  mrg 		struct drm_bo_info_rep rep;
    908  1.1  mrg 	} d;
    909  1.1  mrg };
    910  1.1  mrg 
    911  1.1  mrg struct drm_bo_op_req {
    912  1.1  mrg 	enum {
    913  1.1  mrg 		drm_bo_validate,
    914  1.1  mrg 		drm_bo_fence,
    915  1.1  mrg 		drm_bo_ref_fence,
    916  1.1  mrg 	} op;
    917  1.1  mrg 	unsigned int arg_handle;
    918  1.1  mrg 	struct drm_bo_info_req bo_req;
    919  1.1  mrg };
    920  1.1  mrg 
    921  1.1  mrg 
    922  1.1  mrg struct drm_bo_op_arg {
    923  1.1  mrg 	uint64_t next;
    924  1.1  mrg 	union {
    925  1.1  mrg 		struct drm_bo_op_req req;
    926  1.1  mrg 		struct drm_bo_arg_rep rep;
    927  1.1  mrg 	} d;
    928  1.1  mrg 	int handled;
    929  1.1  mrg 	unsigned int pad64;
    930  1.1  mrg };
    931  1.1  mrg 
    932  1.1  mrg 
    933  1.1  mrg #define DRM_BO_MEM_LOCAL 0
    934  1.1  mrg #define DRM_BO_MEM_TT 1
    935  1.1  mrg #define DRM_BO_MEM_VRAM 2
    936  1.1  mrg #define DRM_BO_MEM_PRIV0 3
    937  1.1  mrg #define DRM_BO_MEM_PRIV1 4
    938  1.1  mrg #define DRM_BO_MEM_PRIV2 5
    939  1.1  mrg #define DRM_BO_MEM_PRIV3 6
    940  1.1  mrg #define DRM_BO_MEM_PRIV4 7
    941  1.1  mrg 
    942  1.1  mrg #define DRM_BO_MEM_TYPES 8 /* For now. */
    943  1.1  mrg 
    944  1.1  mrg #define DRM_BO_LOCK_UNLOCK_BM       (1 << 0)
    945  1.1  mrg #define DRM_BO_LOCK_IGNORE_NO_EVICT (1 << 1)
    946  1.1  mrg 
    947  1.1  mrg struct drm_bo_version_arg {
    948  1.1  mrg 	uint32_t major;
    949  1.1  mrg 	uint32_t minor;
    950  1.1  mrg 	uint32_t patchlevel;
    951  1.1  mrg };
    952  1.1  mrg 
    953  1.1  mrg struct drm_mm_type_arg {
    954  1.1  mrg 	unsigned int mem_type;
    955  1.1  mrg 	unsigned int lock_flags;
    956  1.1  mrg };
    957  1.1  mrg 
    958  1.1  mrg struct drm_mm_init_arg {
    959  1.1  mrg 	unsigned int magic;
    960  1.1  mrg 	unsigned int major;
    961  1.1  mrg 	unsigned int minor;
    962  1.1  mrg 	unsigned int mem_type;
    963  1.1  mrg 	uint64_t p_offset;
    964  1.1  mrg 	uint64_t p_size;
    965  1.1  mrg };
    966  1.1  mrg 
    967  1.1  mrg struct drm_mm_info_arg {
    968  1.1  mrg 	unsigned int mem_type;
    969  1.1  mrg 	uint64_t p_size;
    970  1.1  mrg };
    971  1.1  mrg 
    972  1.2  mrg struct drm_gem_close {
    973  1.2  mrg 	/** Handle of the object to be closed. */
    974  1.2  mrg 	uint32_t handle;
    975  1.2  mrg 	uint32_t pad;
    976  1.2  mrg };
    977  1.2  mrg 
    978  1.2  mrg struct drm_gem_flink {
    979  1.2  mrg 	/** Handle for the object being named */
    980  1.2  mrg 	uint32_t handle;
    981  1.2  mrg 
    982  1.2  mrg 	/** Returned global name */
    983  1.2  mrg 	uint32_t name;
    984  1.2  mrg };
    985  1.2  mrg 
    986  1.2  mrg struct drm_gem_open {
    987  1.2  mrg 	/** Name of object being opened */
    988  1.2  mrg 	uint32_t name;
    989  1.2  mrg 
    990  1.2  mrg 	/** Returned handle for the object */
    991  1.2  mrg 	uint32_t handle;
    992  1.2  mrg 
    993  1.2  mrg 	/** Returned size of the object */
    994  1.2  mrg 	uint64_t size;
    995  1.2  mrg };
    996  1.2  mrg 
    997  1.2  mrg #include "drm_mode.h"
    998  1.2  mrg 
    999  1.1  mrg /**
   1000  1.1  mrg  * \name Ioctls Definitions
   1001  1.1  mrg  */
   1002  1.1  mrg /*@{*/
   1003  1.1  mrg 
   1004  1.1  mrg #define DRM_IOCTL_BASE			'd'
   1005  1.1  mrg #define DRM_IO(nr)			_IO(DRM_IOCTL_BASE,nr)
   1006  1.1  mrg #define DRM_IOR(nr,type)		_IOR(DRM_IOCTL_BASE,nr,type)
   1007  1.1  mrg #define DRM_IOW(nr,type)		_IOW(DRM_IOCTL_BASE,nr,type)
   1008  1.1  mrg #define DRM_IOWR(nr,type)		_IOWR(DRM_IOCTL_BASE,nr,type)
   1009  1.1  mrg 
   1010  1.1  mrg #define DRM_IOCTL_VERSION		DRM_IOWR(0x00, struct drm_version)
   1011  1.1  mrg #define DRM_IOCTL_GET_UNIQUE		DRM_IOWR(0x01, struct drm_unique)
   1012  1.1  mrg #define DRM_IOCTL_GET_MAGIC		DRM_IOR( 0x02, struct drm_auth)
   1013  1.1  mrg #define DRM_IOCTL_IRQ_BUSID		DRM_IOWR(0x03, struct drm_irq_busid)
   1014  1.1  mrg #define DRM_IOCTL_GET_MAP               DRM_IOWR(0x04, struct drm_map)
   1015  1.1  mrg #define DRM_IOCTL_GET_CLIENT            DRM_IOWR(0x05, struct drm_client)
   1016  1.1  mrg #define DRM_IOCTL_GET_STATS             DRM_IOR( 0x06, struct drm_stats)
   1017  1.1  mrg #define DRM_IOCTL_SET_VERSION		DRM_IOWR(0x07, struct drm_set_version)
   1018  1.2  mrg #define DRM_IOCTL_MODESET_CTL           DRM_IOW(0x08,  struct drm_modeset_ctl)
   1019  1.2  mrg 
   1020  1.2  mrg #define DRM_IOCTL_GEM_CLOSE		DRM_IOW (0x09, struct drm_gem_close)
   1021  1.2  mrg #define DRM_IOCTL_GEM_FLINK		DRM_IOWR(0x0a, struct drm_gem_flink)
   1022  1.2  mrg #define DRM_IOCTL_GEM_OPEN		DRM_IOWR(0x0b, struct drm_gem_open)
   1023  1.1  mrg 
   1024  1.1  mrg #define DRM_IOCTL_SET_UNIQUE		DRM_IOW( 0x10, struct drm_unique)
   1025  1.1  mrg #define DRM_IOCTL_AUTH_MAGIC		DRM_IOW( 0x11, struct drm_auth)
   1026  1.1  mrg #define DRM_IOCTL_BLOCK			DRM_IOWR(0x12, struct drm_block)
   1027  1.1  mrg #define DRM_IOCTL_UNBLOCK		DRM_IOWR(0x13, struct drm_block)
   1028  1.1  mrg #define DRM_IOCTL_CONTROL		DRM_IOW( 0x14, struct drm_control)
   1029  1.1  mrg #define DRM_IOCTL_ADD_MAP		DRM_IOWR(0x15, struct drm_map)
   1030  1.1  mrg #define DRM_IOCTL_ADD_BUFS		DRM_IOWR(0x16, struct drm_buf_desc)
   1031  1.1  mrg #define DRM_IOCTL_MARK_BUFS		DRM_IOW( 0x17, struct drm_buf_desc)
   1032  1.1  mrg #define DRM_IOCTL_INFO_BUFS		DRM_IOWR(0x18, struct drm_buf_info)
   1033  1.1  mrg #define DRM_IOCTL_MAP_BUFS		DRM_IOWR(0x19, struct drm_buf_map)
   1034  1.1  mrg #define DRM_IOCTL_FREE_BUFS		DRM_IOW( 0x1a, struct drm_buf_free)
   1035  1.1  mrg 
   1036  1.1  mrg #define DRM_IOCTL_RM_MAP		DRM_IOW( 0x1b, struct drm_map)
   1037  1.1  mrg 
   1038  1.1  mrg #define DRM_IOCTL_SET_SAREA_CTX		DRM_IOW( 0x1c, struct drm_ctx_priv_map)
   1039  1.1  mrg #define DRM_IOCTL_GET_SAREA_CTX		DRM_IOWR(0x1d, struct drm_ctx_priv_map)
   1040  1.1  mrg 
   1041  1.2  mrg #define DRM_IOCTL_SET_MASTER            DRM_IO(0x1e)
   1042  1.2  mrg #define DRM_IOCTL_DROP_MASTER           DRM_IO(0x1f)
   1043  1.2  mrg 
   1044  1.1  mrg #define DRM_IOCTL_ADD_CTX		DRM_IOWR(0x20, struct drm_ctx)
   1045  1.1  mrg #define DRM_IOCTL_RM_CTX		DRM_IOWR(0x21, struct drm_ctx)
   1046  1.1  mrg #define DRM_IOCTL_MOD_CTX		DRM_IOW( 0x22, struct drm_ctx)
   1047  1.1  mrg #define DRM_IOCTL_GET_CTX		DRM_IOWR(0x23, struct drm_ctx)
   1048  1.1  mrg #define DRM_IOCTL_SWITCH_CTX		DRM_IOW( 0x24, struct drm_ctx)
   1049  1.1  mrg #define DRM_IOCTL_NEW_CTX		DRM_IOW( 0x25, struct drm_ctx)
   1050  1.1  mrg #define DRM_IOCTL_RES_CTX		DRM_IOWR(0x26, struct drm_ctx_res)
   1051  1.1  mrg #define DRM_IOCTL_ADD_DRAW		DRM_IOWR(0x27, struct drm_draw)
   1052  1.1  mrg #define DRM_IOCTL_RM_DRAW		DRM_IOWR(0x28, struct drm_draw)
   1053  1.1  mrg #define DRM_IOCTL_DMA			DRM_IOWR(0x29, struct drm_dma)
   1054  1.1  mrg #define DRM_IOCTL_LOCK			DRM_IOW( 0x2a, struct drm_lock)
   1055  1.1  mrg #define DRM_IOCTL_UNLOCK		DRM_IOW( 0x2b, struct drm_lock)
   1056  1.1  mrg #define DRM_IOCTL_FINISH		DRM_IOW( 0x2c, struct drm_lock)
   1057  1.1  mrg 
   1058  1.1  mrg #define DRM_IOCTL_AGP_ACQUIRE		DRM_IO(  0x30)
   1059  1.1  mrg #define DRM_IOCTL_AGP_RELEASE		DRM_IO(  0x31)
   1060  1.1  mrg #define DRM_IOCTL_AGP_ENABLE		DRM_IOW( 0x32, struct drm_agp_mode)
   1061  1.1  mrg #define DRM_IOCTL_AGP_INFO		DRM_IOR( 0x33, struct drm_agp_info)
   1062  1.1  mrg #define DRM_IOCTL_AGP_ALLOC		DRM_IOWR(0x34, struct drm_agp_buffer)
   1063  1.1  mrg #define DRM_IOCTL_AGP_FREE		DRM_IOW( 0x35, struct drm_agp_buffer)
   1064  1.1  mrg #define DRM_IOCTL_AGP_BIND		DRM_IOW( 0x36, struct drm_agp_binding)
   1065  1.1  mrg #define DRM_IOCTL_AGP_UNBIND		DRM_IOW( 0x37, struct drm_agp_binding)
   1066  1.1  mrg 
   1067  1.1  mrg #define DRM_IOCTL_SG_ALLOC		DRM_IOWR(0x38, struct drm_scatter_gather)
   1068  1.1  mrg #define DRM_IOCTL_SG_FREE		DRM_IOW( 0x39, struct drm_scatter_gather)
   1069  1.1  mrg 
   1070  1.1  mrg #define DRM_IOCTL_WAIT_VBLANK		DRM_IOWR(0x3a, union drm_wait_vblank)
   1071  1.1  mrg 
   1072  1.1  mrg #define DRM_IOCTL_UPDATE_DRAW           DRM_IOW(0x3f, struct drm_update_draw)
   1073  1.1  mrg 
   1074  1.1  mrg #define DRM_IOCTL_MM_INIT               DRM_IOWR(0xc0, struct drm_mm_init_arg)
   1075  1.1  mrg #define DRM_IOCTL_MM_TAKEDOWN           DRM_IOWR(0xc1, struct drm_mm_type_arg)
   1076  1.1  mrg #define DRM_IOCTL_MM_LOCK               DRM_IOWR(0xc2, struct drm_mm_type_arg)
   1077  1.1  mrg #define DRM_IOCTL_MM_UNLOCK             DRM_IOWR(0xc3, struct drm_mm_type_arg)
   1078  1.1  mrg 
   1079  1.1  mrg #define DRM_IOCTL_FENCE_CREATE          DRM_IOWR(0xc4, struct drm_fence_arg)
   1080  1.1  mrg #define DRM_IOCTL_FENCE_REFERENCE       DRM_IOWR(0xc6, struct drm_fence_arg)
   1081  1.1  mrg #define DRM_IOCTL_FENCE_UNREFERENCE     DRM_IOWR(0xc7, struct drm_fence_arg)
   1082  1.1  mrg #define DRM_IOCTL_FENCE_SIGNALED        DRM_IOWR(0xc8, struct drm_fence_arg)
   1083  1.1  mrg #define DRM_IOCTL_FENCE_FLUSH           DRM_IOWR(0xc9, struct drm_fence_arg)
   1084  1.1  mrg #define DRM_IOCTL_FENCE_WAIT            DRM_IOWR(0xca, struct drm_fence_arg)
   1085  1.1  mrg #define DRM_IOCTL_FENCE_EMIT            DRM_IOWR(0xcb, struct drm_fence_arg)
   1086  1.1  mrg #define DRM_IOCTL_FENCE_BUFFERS         DRM_IOWR(0xcc, struct drm_fence_arg)
   1087  1.1  mrg 
   1088  1.1  mrg #define DRM_IOCTL_BO_CREATE             DRM_IOWR(0xcd, struct drm_bo_create_arg)
   1089  1.1  mrg #define DRM_IOCTL_BO_MAP                DRM_IOWR(0xcf, struct drm_bo_map_wait_idle_arg)
   1090  1.1  mrg #define DRM_IOCTL_BO_UNMAP              DRM_IOWR(0xd0, struct drm_bo_handle_arg)
   1091  1.1  mrg #define DRM_IOCTL_BO_REFERENCE          DRM_IOWR(0xd1, struct drm_bo_reference_info_arg)
   1092  1.1  mrg #define DRM_IOCTL_BO_UNREFERENCE        DRM_IOWR(0xd2, struct drm_bo_handle_arg)
   1093  1.1  mrg #define DRM_IOCTL_BO_SETSTATUS          DRM_IOWR(0xd3, struct drm_bo_map_wait_idle_arg)
   1094  1.1  mrg #define DRM_IOCTL_BO_INFO               DRM_IOWR(0xd4, struct drm_bo_reference_info_arg)
   1095  1.1  mrg #define DRM_IOCTL_BO_WAIT_IDLE          DRM_IOWR(0xd5, struct drm_bo_map_wait_idle_arg)
   1096  1.1  mrg #define DRM_IOCTL_BO_VERSION          DRM_IOR(0xd6, struct drm_bo_version_arg)
   1097  1.1  mrg #define DRM_IOCTL_MM_INFO               DRM_IOWR(0xd7, struct drm_mm_info_arg)
   1098  1.1  mrg 
   1099  1.2  mrg #define DRM_IOCTL_MODE_GETRESOURCES     DRM_IOWR(0xA0, struct drm_mode_card_res)
   1100  1.2  mrg 
   1101  1.2  mrg #define DRM_IOCTL_MODE_GETCRTC          DRM_IOWR(0xA1, struct drm_mode_crtc)
   1102  1.2  mrg #define DRM_IOCTL_MODE_SETCRTC		DRM_IOWR(0xA2, struct drm_mode_crtc)
   1103  1.2  mrg #define DRM_IOCTL_MODE_CURSOR		DRM_IOWR(0xA3, struct drm_mode_cursor)
   1104  1.2  mrg #define DRM_IOCTL_MODE_GETGAMMA		DRM_IOWR(0xA4, struct drm_mode_crtc_lut)
   1105  1.2  mrg #define DRM_IOCTL_MODE_SETGAMMA		DRM_IOWR(0xA5, struct drm_mode_crtc_lut)
   1106  1.2  mrg 
   1107  1.2  mrg #define DRM_IOCTL_MODE_GETENCODER	DRM_IOWR(0xA6, struct drm_mode_get_encoder)
   1108  1.2  mrg 
   1109  1.2  mrg #define DRM_IOCTL_MODE_GETCONNECTOR	DRM_IOWR(0xA7, struct drm_mode_get_connector)
   1110  1.2  mrg #define DRM_IOCTL_MODE_ATTACHMODE	DRM_IOWR(0xA8, struct drm_mode_mode_cmd)
   1111  1.2  mrg #define DRM_IOCTL_MODE_DETACHMODE	DRM_IOWR(0xA9, struct drm_mode_mode_cmd)
   1112  1.2  mrg #define DRM_IOCTL_MODE_GETPROPERTY	DRM_IOWR(0xAA, struct drm_mode_get_property)
   1113  1.2  mrg #define DRM_IOCTL_MODE_SETPROPERTY	DRM_IOWR(0xAB, struct drm_mode_connector_set_property)
   1114  1.2  mrg #define DRM_IOCTL_MODE_GETPROPBLOB	DRM_IOWR(0xAC, struct drm_mode_get_blob)
   1115  1.2  mrg 
   1116  1.2  mrg #define DRM_IOCTL_MODE_GETFB		DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
   1117  1.2  mrg #define DRM_IOCTL_MODE_ADDFB		DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
   1118  1.2  mrg #define DRM_IOCTL_MODE_RMFB		DRM_IOWR(0xAF, uint32_t)
   1119  1.2  mrg #define DRM_IOCTL_MODE_REPLACEFB	DRM_IOWR(0xB0, struct drm_mode_fb_cmd)
   1120  1.2  mrg 
   1121  1.1  mrg /*@}*/
   1122  1.1  mrg 
   1123  1.1  mrg /**
   1124  1.1  mrg  * Device specific ioctls should only be in their respective headers
   1125  1.1  mrg  * The device specific ioctl range is from 0x40 to 0x99.
   1126  1.1  mrg  * Generic IOCTLS restart at 0xA0.
   1127  1.1  mrg  *
   1128  1.1  mrg  * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and
   1129  1.1  mrg  * drmCommandReadWrite().
   1130  1.1  mrg  */
   1131  1.1  mrg #define DRM_COMMAND_BASE                0x40
   1132  1.1  mrg #define DRM_COMMAND_END                 0xA0
   1133  1.1  mrg 
   1134  1.1  mrg /* typedef area */
   1135  1.2  mrg #ifndef __KERNEL__
   1136  1.1  mrg typedef struct drm_clip_rect drm_clip_rect_t;
   1137  1.1  mrg typedef struct drm_tex_region drm_tex_region_t;
   1138  1.1  mrg typedef struct drm_hw_lock drm_hw_lock_t;
   1139  1.1  mrg typedef struct drm_version drm_version_t;
   1140  1.1  mrg typedef struct drm_unique drm_unique_t;
   1141  1.1  mrg typedef struct drm_list drm_list_t;
   1142  1.1  mrg typedef struct drm_block drm_block_t;
   1143  1.1  mrg typedef struct drm_control drm_control_t;
   1144  1.1  mrg typedef enum drm_map_type drm_map_type_t;
   1145  1.1  mrg typedef enum drm_map_flags drm_map_flags_t;
   1146  1.1  mrg typedef struct drm_ctx_priv_map drm_ctx_priv_map_t;
   1147  1.1  mrg typedef struct drm_map drm_map_t;
   1148  1.1  mrg typedef struct drm_client drm_client_t;
   1149  1.1  mrg typedef enum drm_stat_type drm_stat_type_t;
   1150  1.1  mrg typedef struct drm_stats drm_stats_t;
   1151  1.1  mrg typedef enum drm_lock_flags drm_lock_flags_t;
   1152  1.1  mrg typedef struct drm_lock drm_lock_t;
   1153  1.1  mrg typedef enum drm_dma_flags drm_dma_flags_t;
   1154  1.1  mrg typedef struct drm_buf_desc drm_buf_desc_t;
   1155  1.1  mrg typedef struct drm_buf_info drm_buf_info_t;
   1156  1.1  mrg typedef struct drm_buf_free drm_buf_free_t;
   1157  1.1  mrg typedef struct drm_buf_pub drm_buf_pub_t;
   1158  1.1  mrg typedef struct drm_buf_map drm_buf_map_t;
   1159  1.1  mrg typedef struct drm_dma drm_dma_t;
   1160  1.1  mrg typedef union drm_wait_vblank drm_wait_vblank_t;
   1161  1.1  mrg typedef struct drm_agp_mode drm_agp_mode_t;
   1162  1.1  mrg typedef enum drm_ctx_flags drm_ctx_flags_t;
   1163  1.1  mrg typedef struct drm_ctx drm_ctx_t;
   1164  1.1  mrg typedef struct drm_ctx_res drm_ctx_res_t;
   1165  1.1  mrg typedef struct drm_draw drm_draw_t;
   1166  1.1  mrg typedef struct drm_update_draw drm_update_draw_t;
   1167  1.1  mrg typedef struct drm_auth drm_auth_t;
   1168  1.1  mrg typedef struct drm_irq_busid drm_irq_busid_t;
   1169  1.1  mrg typedef enum drm_vblank_seq_type drm_vblank_seq_type_t;
   1170  1.1  mrg typedef struct drm_agp_buffer drm_agp_buffer_t;
   1171  1.1  mrg typedef struct drm_agp_binding drm_agp_binding_t;
   1172  1.1  mrg typedef struct drm_agp_info drm_agp_info_t;
   1173  1.1  mrg typedef struct drm_scatter_gather drm_scatter_gather_t;
   1174  1.1  mrg typedef struct drm_set_version drm_set_version_t;
   1175  1.1  mrg 
   1176  1.1  mrg typedef struct drm_fence_arg drm_fence_arg_t;
   1177  1.1  mrg typedef struct drm_mm_type_arg drm_mm_type_arg_t;
   1178  1.1  mrg typedef struct drm_mm_init_arg drm_mm_init_arg_t;
   1179  1.1  mrg typedef enum drm_bo_type drm_bo_type_t;
   1180  1.1  mrg #endif
   1181  1.1  mrg 
   1182  1.1  mrg #endif
   1183