Blame view

include/drm/drm.h 24.5 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /**
b5e89ed53   Dave Airlie   drm: lindent the ...
2
   * \file drm.h
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
   * Header for the Direct Rendering Manager
b5e89ed53   Dave Airlie   drm: lindent the ...
4
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
   * \author Rickard E. (Rik) Faith <faith@valinux.com>
   *
   * \par Acknowledgments:
   * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic \c cmpxchg.
   */
  
  /*
   * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
   * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
   * All rights reserved.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a
   * copy of this software and associated documentation files (the "Software"),
   * to deal in the Software without restriction, including without limitation
   * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   * and/or sell copies of the Software, and to permit persons to whom the
   * Software is furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice (including the next
   * paragraph) shall be included in all copies or substantial portions of the
   * Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
   * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
   * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
   * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
   * OTHER DEALINGS IN THE SOFTWARE.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
36
  #ifndef _DRM_H_
  #define _DRM_H_
1a95916f5   Kristian Høgsberg   drm: Add compatib...
37
  #if defined(__linux__)
1d7f83d5a   Arnd Bergmann   make drm headers ...
38
  #include <linux/types.h>
1a95916f5   Kristian Høgsberg   drm: Add compatib...
39
40
41
42
  #include <asm/ioctl.h>
  typedef unsigned int drm_handle_t;
  
  #else /* One of the BSDs */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
43

1a95916f5   Kristian Høgsberg   drm: Add compatib...
44
45
46
47
48
49
50
51
52
53
54
55
56
  #include <sys/ioccom.h>
  #include <sys/types.h>
  typedef int8_t   __s8;
  typedef uint8_t  __u8;
  typedef int16_t  __s16;
  typedef uint16_t __u16;
  typedef int32_t  __s32;
  typedef uint32_t __u32;
  typedef int64_t  __s64;
  typedef uint64_t __u64;
  typedef unsigned long drm_handle_t;
  
  #endif
b589ee594   Dave Airlie   drm: remove XFREE...
57

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
59
60
61
  #define DRM_NAME	"drm"	  /**< Name in kernel, /dev, and /proc */
  #define DRM_MIN_ORDER	5	  /**< At least 2^5 bytes = 32 bytes */
  #define DRM_MAX_ORDER	22	  /**< Up to 2^22 bytes = 4MB */
  #define DRM_RAM_PERCENT 10	  /**< How much system ram can we lock? */
b3a80a223   Dave Airlie   drm: update lock ...
62
63
  #define _DRM_LOCK_HELD	0x80000000U /**< Hardware lock is held */
  #define _DRM_LOCK_CONT	0x40000000U /**< Hardware lock is contended */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
65
66
  #define _DRM_LOCK_IS_HELD(lock)	   ((lock) & _DRM_LOCK_HELD)
  #define _DRM_LOCK_IS_CONT(lock)	   ((lock) & _DRM_LOCK_CONT)
  #define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
b5e89ed53   Dave Airlie   drm: lindent the ...
67
68
69
  typedef unsigned int drm_context_t;
  typedef unsigned int drm_drawable_t;
  typedef unsigned int drm_magic_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
70
71
72
  
  /**
   * Cliprect.
b5e89ed53   Dave Airlie   drm: lindent the ...
73
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74
75
76
77
78
79
80
   * \warning: If you change this structure, make sure you change
   * XF86DRIClipRectRec in the server as well
   *
   * 
  ote KW: Actually it's illegal to change either for
   * backwards-compatibility reasons.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
81
  struct drm_clip_rect {
b5e89ed53   Dave Airlie   drm: lindent the ...
82
83
84
85
  	unsigned short x1;
  	unsigned short y1;
  	unsigned short x2;
  	unsigned short y2;
c60ce623b   Dave Airlie   drm: remove a bun...
86
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
88
  /**
bea5679f9   Michel Dänzer   drm: Add support ...
89
90
   * Drawable information.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
91
  struct drm_drawable_info {
bea5679f9   Michel Dänzer   drm: Add support ...
92
  	unsigned int num_rects;
c60ce623b   Dave Airlie   drm: remove a bun...
93
94
  	struct drm_clip_rect *rects;
  };
bea5679f9   Michel Dänzer   drm: Add support ...
95
96
  
  /**
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
97
98
   * Texture region,
   */
c60ce623b   Dave Airlie   drm: remove a bun...
99
  struct drm_tex_region {
b5e89ed53   Dave Airlie   drm: lindent the ...
100
101
102
103
104
  	unsigned char next;
  	unsigned char prev;
  	unsigned char in_use;
  	unsigned char padding;
  	unsigned int age;
c60ce623b   Dave Airlie   drm: remove a bun...
105
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
106
107
108
109
110
111
112
113
  
  /**
   * Hardware lock.
   *
   * The lock structure is a simple cache-line aligned integer.  To avoid
   * processor bus contention on a multiprocessor system, there should not be any
   * other data stored in the same cache line.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
114
  struct drm_hw_lock {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
115
  	__volatile__ unsigned int lock;		/**< lock variable */
b5e89ed53   Dave Airlie   drm: lindent the ...
116
  	char padding[60];			/**< Pad to cache line */
c60ce623b   Dave Airlie   drm: remove a bun...
117
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
118

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
120
  /**
   * DRM_IOCTL_VERSION ioctl argument type.
b5e89ed53   Dave Airlie   drm: lindent the ...
121
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
123
   * \sa drmGetVersion().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
124
  struct drm_version {
b5e89ed53   Dave Airlie   drm: lindent the ...
125
126
127
  	int version_major;	  /**< Major version */
  	int version_minor;	  /**< Minor version */
  	int version_patchlevel;	  /**< Patch level */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
128
  	size_t name_len;	  /**< Length of name buffer */
b5e89ed53   Dave Airlie   drm: lindent the ...
129
  	char __user *name;	  /**< Name of driver */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
130
  	size_t date_len;	  /**< Length of date buffer */
b5e89ed53   Dave Airlie   drm: lindent the ...
131
  	char __user *date;	  /**< User-space buffer to hold date */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
132
  	size_t desc_len;	  /**< Length of desc buffer */
b5e89ed53   Dave Airlie   drm: lindent the ...
133
  	char __user *desc;	  /**< User-space buffer to hold desc */
c60ce623b   Dave Airlie   drm: remove a bun...
134
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
135

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
136
137
138
139
140
  /**
   * DRM_IOCTL_GET_UNIQUE ioctl argument type.
   *
   * \sa drmGetBusid() and drmSetBusId().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
141
  struct drm_unique {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
  	size_t unique_len;	  /**< Length of unique */
b5e89ed53   Dave Airlie   drm: lindent the ...
143
  	char __user *unique;	  /**< Unique name for driver instantiation */
c60ce623b   Dave Airlie   drm: remove a bun...
144
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145

c60ce623b   Dave Airlie   drm: remove a bun...
146
  struct drm_list {
b5e89ed53   Dave Airlie   drm: lindent the ...
147
  	int count;		  /**< Length of user-space structures */
c60ce623b   Dave Airlie   drm: remove a bun...
148
149
  	struct drm_version __user *version;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
150

c60ce623b   Dave Airlie   drm: remove a bun...
151
  struct drm_block {
b5e89ed53   Dave Airlie   drm: lindent the ...
152
  	int unused;
c60ce623b   Dave Airlie   drm: remove a bun...
153
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
154

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
155
156
157
158
159
  /**
   * DRM_IOCTL_CONTROL ioctl argument type.
   *
   * \sa drmCtlInstHandler() and drmCtlUninstHandler().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
160
  struct drm_control {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
161
162
163
164
165
  	enum {
  		DRM_ADD_COMMAND,
  		DRM_RM_COMMAND,
  		DRM_INST_HANDLER,
  		DRM_UNINST_HANDLER
b5e89ed53   Dave Airlie   drm: lindent the ...
166
167
  	} func;
  	int irq;
c60ce623b   Dave Airlie   drm: remove a bun...
168
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
169

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
170
171
172
  /**
   * Type of memory to map.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
173
  enum drm_map_type {
b5e89ed53   Dave Airlie   drm: lindent the ...
174
175
176
177
  	_DRM_FRAME_BUFFER = 0,	  /**< WC (no caching), no core dump */
  	_DRM_REGISTERS = 1,	  /**< no caching, no core dump */
  	_DRM_SHM = 2,		  /**< shared, cached */
  	_DRM_AGP = 3,		  /**< AGP/GART */
2d0f9eaff   Dave Airlie   drm: add _DRM_CON...
178
  	_DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */
b5e89ed53   Dave Airlie   drm: lindent the ...
179
  	_DRM_CONSISTENT = 5,	  /**< Consistent memory for PCI DMA */
a2c0a97b7   Jesse Barnes   drm: GEM mmap sup...
180
  	_DRM_GEM = 6,		  /**< GEM object */
c60ce623b   Dave Airlie   drm: remove a bun...
181
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
182

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
183
184
185
  /**
   * Memory mapping flags.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
186
  enum drm_map_flags {
b5e89ed53   Dave Airlie   drm: lindent the ...
187
188
189
190
  	_DRM_RESTRICTED = 0x01,	     /**< Cannot be mapped to user-virtual */
  	_DRM_READ_ONLY = 0x02,
  	_DRM_LOCKED = 0x04,	     /**< shared, cached, locked */
  	_DRM_KERNEL = 0x08,	     /**< kernel requires access */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
191
  	_DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
b5e89ed53   Dave Airlie   drm: lindent the ...
192
  	_DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
e3236a117   Dave Airlie   drm: add _DRM_DRI...
193
194
  	_DRM_REMOVABLE = 0x40,	     /**< Removable mapping */
  	_DRM_DRIVER = 0x80	     /**< Managed by driver */
c60ce623b   Dave Airlie   drm: remove a bun...
195
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
196

c60ce623b   Dave Airlie   drm: remove a bun...
197
  struct drm_ctx_priv_map {
b5e89ed53   Dave Airlie   drm: lindent the ...
198
199
  	unsigned int ctx_id;	 /**< Context requesting private mapping */
  	void *handle;		 /**< Handle of map */
c60ce623b   Dave Airlie   drm: remove a bun...
200
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
201

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
202
203
204
205
206
207
  /**
   * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
   * argument type.
   *
   * \sa drmAddMap().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
208
  struct drm_map {
b5e89ed53   Dave Airlie   drm: lindent the ...
209
210
  	unsigned long offset;	 /**< Requested physical address (0 for SAREA)*/
  	unsigned long size;	 /**< Requested physical size (bytes) */
c60ce623b   Dave Airlie   drm: remove a bun...
211
212
  	enum drm_map_type type;	 /**< Type of memory to map */
  	enum drm_map_flags flags;	 /**< Flags */
b5e89ed53   Dave Airlie   drm: lindent the ...
213
  	void *handle;		 /**< User-space: "Handle" to pass to mmap() */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
214
  				 /**< Kernel-space: kernel-virtual address */
b5e89ed53   Dave Airlie   drm: lindent the ...
215
216
  	int mtrr;		 /**< MTRR slot used */
  	/*   Private data */
c60ce623b   Dave Airlie   drm: remove a bun...
217
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
218

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
219
220
221
  /**
   * DRM_IOCTL_GET_CLIENT ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
222
  struct drm_client {
b5e89ed53   Dave Airlie   drm: lindent the ...
223
224
225
226
227
228
  	int idx;		/**< Which client desired? */
  	int auth;		/**< Is client authenticated? */
  	unsigned long pid;	/**< Process ID */
  	unsigned long uid;	/**< User ID */
  	unsigned long magic;	/**< Magic */
  	unsigned long iocs;	/**< Ioctl count */
c60ce623b   Dave Airlie   drm: remove a bun...
229
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
230

c60ce623b   Dave Airlie   drm: remove a bun...
231
  enum drm_stat_type {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
  	_DRM_STAT_LOCK,
  	_DRM_STAT_OPENS,
  	_DRM_STAT_CLOSES,
  	_DRM_STAT_IOCTLS,
  	_DRM_STAT_LOCKS,
  	_DRM_STAT_UNLOCKS,
  	_DRM_STAT_VALUE,	/**< Generic value */
  	_DRM_STAT_BYTE,		/**< Generic byte counter (1024bytes/K) */
  	_DRM_STAT_COUNT,	/**< Generic non-byte counter (1000/k) */
  
  	_DRM_STAT_IRQ,		/**< IRQ */
  	_DRM_STAT_PRIMARY,	/**< Primary DMA bytes */
  	_DRM_STAT_SECONDARY,	/**< Secondary DMA bytes */
  	_DRM_STAT_DMA,		/**< DMA */
  	_DRM_STAT_SPECIAL,	/**< Special DMA (e.g., priority or polled) */
  	_DRM_STAT_MISSED	/**< Missed DMA opportunity */
b5e89ed53   Dave Airlie   drm: lindent the ...
248
  	    /* Add to the *END* of the list */
c60ce623b   Dave Airlie   drm: remove a bun...
249
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
250

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
251
252
253
  /**
   * DRM_IOCTL_GET_STATS ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
254
  struct drm_stats {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
255
256
  	unsigned long count;
  	struct {
b5e89ed53   Dave Airlie   drm: lindent the ...
257
  		unsigned long value;
c60ce623b   Dave Airlie   drm: remove a bun...
258
  		enum drm_stat_type type;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
259
  	} data[15];
c60ce623b   Dave Airlie   drm: remove a bun...
260
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
261

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
262
263
264
  /**
   * Hardware locking flags.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
265
  enum drm_lock_flags {
b5e89ed53   Dave Airlie   drm: lindent the ...
266
267
268
269
270
271
272
  	_DRM_LOCK_READY = 0x01,	     /**< Wait until hardware is ready for DMA */
  	_DRM_LOCK_QUIESCENT = 0x02,  /**< Wait until hardware quiescent */
  	_DRM_LOCK_FLUSH = 0x04,	     /**< Flush this context's DMA queue first */
  	_DRM_LOCK_FLUSH_ALL = 0x08,  /**< Flush all DMA queues first */
  	/* These *HALT* flags aren't supported yet
  	   -- they will be used to support the
  	   full-screen DGA-like mode. */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
273
274
  	_DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */
  	_DRM_HALT_CUR_QUEUES = 0x20  /**< Halt all current queues */
c60ce623b   Dave Airlie   drm: remove a bun...
275
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
276

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
277
278
  /**
   * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type.
b5e89ed53   Dave Airlie   drm: lindent the ...
279
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
280
281
   * \sa drmGetLock() and drmUnlock().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
282
  struct drm_lock {
b5e89ed53   Dave Airlie   drm: lindent the ...
283
  	int context;
c60ce623b   Dave Airlie   drm: remove a bun...
284
285
  	enum drm_lock_flags flags;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
286

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
287
288
289
  /**
   * DMA flags
   *
b5e89ed53   Dave Airlie   drm: lindent the ...
290
   * \warning
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
291
292
293
294
   * These values \e must match xf86drm.h.
   *
   * \sa drm_dma.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
295
  enum drm_dma_flags {
b5e89ed53   Dave Airlie   drm: lindent the ...
296
297
  	/* Flags for DMA buffer dispatch */
  	_DRM_DMA_BLOCK = 0x01,	      /**<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
298
  				       * Block until buffer dispatched.
b5e89ed53   Dave Airlie   drm: lindent the ...
299
  				       *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
300
301
302
303
304
305
306
307
308
  				       * 
  ote The buffer may not yet have
  				       * been processed by the hardware --
  				       * getting a hardware lock with the
  				       * hardware quiescent will ensure
  				       * that the buffer has been
  				       * processed.
  				       */
  	_DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */
b5e89ed53   Dave Airlie   drm: lindent the ...
309
  	_DRM_DMA_PRIORITY = 0x04,     /**< High priority dispatch */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
310

b5e89ed53   Dave Airlie   drm: lindent the ...
311
312
313
314
  	/* Flags for DMA buffer request */
  	_DRM_DMA_WAIT = 0x10,	      /**< Wait for free buffers */
  	_DRM_DMA_SMALLER_OK = 0x20,   /**< Smaller-than-requested buffers OK */
  	_DRM_DMA_LARGER_OK = 0x40     /**< Larger-than-requested buffers OK */
c60ce623b   Dave Airlie   drm: remove a bun...
315
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
316

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
317
318
319
320
321
  /**
   * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type.
   *
   * \sa drmAddBufs().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
322
  struct drm_buf_desc {
b5e89ed53   Dave Airlie   drm: lindent the ...
323
324
325
326
  	int count;		 /**< Number of buffers of this size */
  	int size;		 /**< Size in bytes */
  	int low_mark;		 /**< Low water mark */
  	int high_mark;		 /**< High water mark */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
327
  	enum {
b5e89ed53   Dave Airlie   drm: lindent the ...
328
329
330
  		_DRM_PAGE_ALIGN = 0x01,	/**< Align on page boundaries for DMA */
  		_DRM_AGP_BUFFER = 0x02,	/**< Buffer is in AGP space */
  		_DRM_SG_BUFFER = 0x04,	/**< Scatter/gather memory buffer */
3417f33e7   George Sapountzis   drm: add flag for...
331
332
  		_DRM_FB_BUFFER = 0x08,	/**< Buffer is in frame buffer */
  		_DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
b5e89ed53   Dave Airlie   drm: lindent the ...
333
334
  	} flags;
  	unsigned long agp_start; /**<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
335
336
337
  				  * Start address of where the AGP buffers are
  				  * in the AGP aperture
  				  */
c60ce623b   Dave Airlie   drm: remove a bun...
338
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
339

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
340
341
342
  /**
   * DRM_IOCTL_INFO_BUFS ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
343
  struct drm_buf_info {
b5e89ed53   Dave Airlie   drm: lindent the ...
344
  	int count;		/**< Entries in list */
c60ce623b   Dave Airlie   drm: remove a bun...
345
346
  	struct drm_buf_desc __user *list;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
347

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
348
349
350
  /**
   * DRM_IOCTL_FREE_BUFS ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
351
  struct drm_buf_free {
b5e89ed53   Dave Airlie   drm: lindent the ...
352
353
  	int count;
  	int __user *list;
c60ce623b   Dave Airlie   drm: remove a bun...
354
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
355

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
356
357
358
359
360
  /**
   * Buffer information
   *
   * \sa drm_buf_map.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
361
  struct drm_buf_pub {
b5e89ed53   Dave Airlie   drm: lindent the ...
362
363
364
365
  	int idx;		       /**< Index into the master buffer list */
  	int total;		       /**< Buffer size */
  	int used;		       /**< Amount of buffer in use (for DMA) */
  	void __user *address;	       /**< Address of buffer */
c60ce623b   Dave Airlie   drm: remove a bun...
366
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
367

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
368
369
370
  /**
   * DRM_IOCTL_MAP_BUFS ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
371
  struct drm_buf_map {
b5e89ed53   Dave Airlie   drm: lindent the ...
372
373
  	int count;		/**< Length of the buffer list */
  	void __user *virtual;		/**< Mmap'd area in user-virtual */
c60ce623b   Dave Airlie   drm: remove a bun...
374
375
  	struct drm_buf_pub __user *list;	/**< Buffer information */
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
376

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
377
378
379
380
381
382
383
  /**
   * DRM_IOCTL_DMA ioctl argument type.
   *
   * Indices here refer to the offset into the buffer list in drm_buf_get.
   *
   * \sa drmDMA().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
384
  struct drm_dma {
b5e89ed53   Dave Airlie   drm: lindent the ...
385
386
387
388
  	int context;			  /**< Context handle */
  	int send_count;			  /**< Number of buffers to send */
  	int __user *send_indices;	  /**< List of handles to buffers */
  	int __user *send_sizes;		  /**< Lengths of data to send */
c60ce623b   Dave Airlie   drm: remove a bun...
389
  	enum drm_dma_flags flags;	  /**< Flags */
b5e89ed53   Dave Airlie   drm: lindent the ...
390
391
392
393
394
  	int request_count;		  /**< Number of buffers requested */
  	int request_size;		  /**< Desired size for buffers */
  	int __user *request_indices;	  /**< Buffer information */
  	int __user *request_sizes;
  	int granted_count;		  /**< Number of buffers granted */
c60ce623b   Dave Airlie   drm: remove a bun...
395
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
396

c60ce623b   Dave Airlie   drm: remove a bun...
397
  enum drm_ctx_flags {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
398
  	_DRM_CONTEXT_PRESERVED = 0x01,
b5e89ed53   Dave Airlie   drm: lindent the ...
399
  	_DRM_CONTEXT_2DONLY = 0x02
c60ce623b   Dave Airlie   drm: remove a bun...
400
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
401

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
402
403
404
405
406
  /**
   * DRM_IOCTL_ADD_CTX ioctl argument type.
   *
   * \sa drmCreateContext() and drmDestroyContext().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
407
  struct drm_ctx {
b5e89ed53   Dave Airlie   drm: lindent the ...
408
  	drm_context_t handle;
c60ce623b   Dave Airlie   drm: remove a bun...
409
410
  	enum drm_ctx_flags flags;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
411

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
412
413
414
  /**
   * DRM_IOCTL_RES_CTX ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
415
  struct drm_ctx_res {
b5e89ed53   Dave Airlie   drm: lindent the ...
416
  	int count;
c60ce623b   Dave Airlie   drm: remove a bun...
417
418
  	struct drm_ctx __user *contexts;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
419

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
420
421
422
  /**
   * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
423
  struct drm_draw {
b5e89ed53   Dave Airlie   drm: lindent the ...
424
  	drm_drawable_t handle;
c60ce623b   Dave Airlie   drm: remove a bun...
425
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
426

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
427
  /**
bea5679f9   Michel Dänzer   drm: Add support ...
428
429
430
431
432
   * DRM_IOCTL_UPDATE_DRAW ioctl argument type.
   */
  typedef enum {
  	DRM_DRAWABLE_CLIPRECTS,
  } drm_drawable_info_type_t;
c60ce623b   Dave Airlie   drm: remove a bun...
433
  struct drm_update_draw {
bea5679f9   Michel Dänzer   drm: Add support ...
434
435
436
437
  	drm_drawable_t handle;
  	unsigned int type;
  	unsigned int num;
  	unsigned long long data;
c60ce623b   Dave Airlie   drm: remove a bun...
438
  };
bea5679f9   Michel Dänzer   drm: Add support ...
439
440
  
  /**
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
441
442
   * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
443
  struct drm_auth {
b5e89ed53   Dave Airlie   drm: lindent the ...
444
  	drm_magic_t magic;
c60ce623b   Dave Airlie   drm: remove a bun...
445
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
446

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
447
448
449
450
451
  /**
   * DRM_IOCTL_IRQ_BUSID ioctl argument type.
   *
   * \sa drmGetInterruptFromBusID().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
452
  struct drm_irq_busid {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
453
454
455
456
  	int irq;	/**< IRQ number */
  	int busnum;	/**< bus number */
  	int devnum;	/**< device number */
  	int funcnum;	/**< function number */
c60ce623b   Dave Airlie   drm: remove a bun...
457
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
458

c60ce623b   Dave Airlie   drm: remove a bun...
459
  enum drm_vblank_seq_type {
b5e89ed53   Dave Airlie   drm: lindent the ...
460
461
  	_DRM_VBLANK_ABSOLUTE = 0x0,	/**< Wait for specific vblank sequence number */
  	_DRM_VBLANK_RELATIVE = 0x1,	/**< Wait for given number of vblanks */
51eab416c   Dave Airlie   drm/vblank: updat...
462
463
  	/* bits 1-6 are reserved for high crtcs */
  	_DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e,
c9a9c5e02   Kristian Høgsberg   drm: Add async ev...
464
  	_DRM_VBLANK_EVENT = 0x4000000,   /**< Send event instead of blocking */
0a3e67a4c   Jesse Barnes   drm: Rework vblan...
465
  	_DRM_VBLANK_FLIP = 0x8000000,   /**< Scheduled buffer swap should flip */
ab285d74e   Michel Dänzer   drm: Core vsync: ...
466
  	_DRM_VBLANK_NEXTONMISS = 0x10000000,	/**< If missed, wait for next vblank */
776c9443e   Michel Dänzer   drm: add support ...
467
  	_DRM_VBLANK_SECONDARY = 0x20000000,	/**< Secondary display controller */
30b236340   Eric Anholt   drm: Rip out the ...
468
  	_DRM_VBLANK_SIGNAL = 0x40000000	/**< Send signal instead of blocking, unsupported */
c60ce623b   Dave Airlie   drm: remove a bun...
469
  };
51eab416c   Dave Airlie   drm/vblank: updat...
470
  #define _DRM_VBLANK_HIGH_CRTC_SHIFT 1
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
471

776c9443e   Michel Dänzer   drm: add support ...
472
  #define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE)
c9a9c5e02   Kristian Høgsberg   drm: Add async ev...
473
474
  #define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_EVENT | _DRM_VBLANK_SIGNAL | \
  				_DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
475

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
476
  struct drm_wait_vblank_request {
c60ce623b   Dave Airlie   drm: remove a bun...
477
  	enum drm_vblank_seq_type type;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
478
479
480
  	unsigned int sequence;
  	unsigned long signal;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
481
  struct drm_wait_vblank_reply {
c60ce623b   Dave Airlie   drm: remove a bun...
482
  	enum drm_vblank_seq_type type;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
483
484
485
486
  	unsigned int sequence;
  	long tval_sec;
  	long tval_usec;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
487
488
489
490
491
  /**
   * DRM_IOCTL_WAIT_VBLANK ioctl argument type.
   *
   * \sa drmWaitVBlank().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
492
  union drm_wait_vblank {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
493
494
  	struct drm_wait_vblank_request request;
  	struct drm_wait_vblank_reply reply;
c60ce623b   Dave Airlie   drm: remove a bun...
495
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
496

0a3e67a4c   Jesse Barnes   drm: Rework vblan...
497
498
499
500
501
502
503
504
505
  #define _DRM_PRE_MODESET 1
  #define _DRM_POST_MODESET 2
  
  /**
   * DRM_IOCTL_MODESET_CTL ioctl argument type
   *
   * \sa drmModesetCtl().
   */
  struct drm_modeset_ctl {
1d7f83d5a   Arnd Bergmann   make drm headers ...
506
507
  	__u32 crtc;
  	__u32 cmd;
0a3e67a4c   Jesse Barnes   drm: Rework vblan...
508
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
509
510
511
512
513
  /**
   * DRM_IOCTL_AGP_ENABLE ioctl argument type.
   *
   * \sa drmAgpEnable().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
514
  struct drm_agp_mode {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
515
  	unsigned long mode;	/**< AGP mode */
c60ce623b   Dave Airlie   drm: remove a bun...
516
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
517

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
518
519
520
521
522
  /**
   * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type.
   *
   * \sa drmAgpAlloc() and drmAgpFree().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
523
  struct drm_agp_buffer {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
524
525
  	unsigned long size;	/**< In bytes -- will round to page boundary */
  	unsigned long handle;	/**< Used for binding / unbinding */
b5e89ed53   Dave Airlie   drm: lindent the ...
526
527
  	unsigned long type;	/**< Type of memory to allocate */
  	unsigned long physical;	/**< Physical used by i810 */
c60ce623b   Dave Airlie   drm: remove a bun...
528
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
529

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
530
531
532
533
534
  /**
   * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type.
   *
   * \sa drmAgpBind() and drmAgpUnbind().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
535
  struct drm_agp_binding {
b5e89ed53   Dave Airlie   drm: lindent the ...
536
  	unsigned long handle;	/**< From drm_agp_buffer */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
537
  	unsigned long offset;	/**< In bytes -- will round to page boundary */
c60ce623b   Dave Airlie   drm: remove a bun...
538
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
539

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
540
541
542
543
544
545
546
  /**
   * DRM_IOCTL_AGP_INFO ioctl argument type.
   *
   * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(),
   * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(),
   * drmAgpVendorId() and drmAgpDeviceId().
   */
c60ce623b   Dave Airlie   drm: remove a bun...
547
  struct drm_agp_info {
b5e89ed53   Dave Airlie   drm: lindent the ...
548
549
550
551
552
553
554
555
556
  	int agp_version_major;
  	int agp_version_minor;
  	unsigned long mode;
  	unsigned long aperture_base;	/* physical address */
  	unsigned long aperture_size;	/* bytes */
  	unsigned long memory_allowed;	/* bytes */
  	unsigned long memory_used;
  
  	/* PCI information */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
557
558
  	unsigned short id_vendor;
  	unsigned short id_device;
c60ce623b   Dave Airlie   drm: remove a bun...
559
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
560

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
561
562
563
  /**
   * DRM_IOCTL_SG_ALLOC ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
564
  struct drm_scatter_gather {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
565
566
  	unsigned long size;	/**< In bytes -- will round to page boundary */
  	unsigned long handle;	/**< Used for mapping / unmapping */
c60ce623b   Dave Airlie   drm: remove a bun...
567
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
568
569
570
571
  
  /**
   * DRM_IOCTL_SET_VERSION ioctl argument type.
   */
c60ce623b   Dave Airlie   drm: remove a bun...
572
  struct drm_set_version {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
573
574
575
576
  	int drm_di_major;
  	int drm_di_minor;
  	int drm_dd_major;
  	int drm_dd_minor;
c60ce623b   Dave Airlie   drm: remove a bun...
577
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
578

673a394b1   Eric Anholt   drm: Add GEM ("gr...
579
580
581
  /** DRM_IOCTL_GEM_CLOSE ioctl argument type */
  struct drm_gem_close {
  	/** Handle of the object to be closed. */
1d7f83d5a   Arnd Bergmann   make drm headers ...
582
583
  	__u32 handle;
  	__u32 pad;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
584
585
586
587
588
  };
  
  /** DRM_IOCTL_GEM_FLINK ioctl argument type */
  struct drm_gem_flink {
  	/** Handle for the object being named */
1d7f83d5a   Arnd Bergmann   make drm headers ...
589
  	__u32 handle;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
590
591
  
  	/** Returned global name */
1d7f83d5a   Arnd Bergmann   make drm headers ...
592
  	__u32 name;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
593
594
595
596
597
  };
  
  /** DRM_IOCTL_GEM_OPEN ioctl argument type */
  struct drm_gem_open {
  	/** Name of object being opened */
1d7f83d5a   Arnd Bergmann   make drm headers ...
598
  	__u32 name;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
599
600
  
  	/** Returned handle for the object */
1d7f83d5a   Arnd Bergmann   make drm headers ...
601
  	__u32 handle;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
602
603
  
  	/** Returned size of the object */
1d7f83d5a   Arnd Bergmann   make drm headers ...
604
  	__u64 size;
673a394b1   Eric Anholt   drm: Add GEM ("gr...
605
  };
9f35421e0   Ben Skeggs   drm/core: add ioc...
606
607
608
609
610
  /** DRM_IOCTL_GET_CAP ioctl argument type */
  struct drm_get_cap {
  	__u64 capability;
  	__u64 value;
  };
f453ba046   Dave Airlie   DRM: add mode set...
611
  #include "drm_mode.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
612
613
614
615
616
  #define DRM_IOCTL_BASE			'd'
  #define DRM_IO(nr)			_IO(DRM_IOCTL_BASE,nr)
  #define DRM_IOR(nr,type)		_IOR(DRM_IOCTL_BASE,nr,type)
  #define DRM_IOW(nr,type)		_IOW(DRM_IOCTL_BASE,nr,type)
  #define DRM_IOWR(nr,type)		_IOWR(DRM_IOCTL_BASE,nr,type)
c60ce623b   Dave Airlie   drm: remove a bun...
617
618
619
620
621
622
623
624
  #define DRM_IOCTL_VERSION		DRM_IOWR(0x00, struct drm_version)
  #define DRM_IOCTL_GET_UNIQUE		DRM_IOWR(0x01, struct drm_unique)
  #define DRM_IOCTL_GET_MAGIC		DRM_IOR( 0x02, struct drm_auth)
  #define DRM_IOCTL_IRQ_BUSID		DRM_IOWR(0x03, struct drm_irq_busid)
  #define DRM_IOCTL_GET_MAP               DRM_IOWR(0x04, struct drm_map)
  #define DRM_IOCTL_GET_CLIENT            DRM_IOWR(0x05, struct drm_client)
  #define DRM_IOCTL_GET_STATS             DRM_IOR( 0x06, struct drm_stats)
  #define DRM_IOCTL_SET_VERSION		DRM_IOWR(0x07, struct drm_set_version)
0a3e67a4c   Jesse Barnes   drm: Rework vblan...
625
  #define DRM_IOCTL_MODESET_CTL           DRM_IOW(0x08, struct drm_modeset_ctl)
673a394b1   Eric Anholt   drm: Add GEM ("gr...
626
627
628
  #define DRM_IOCTL_GEM_CLOSE		DRM_IOW (0x09, struct drm_gem_close)
  #define DRM_IOCTL_GEM_FLINK		DRM_IOWR(0x0a, struct drm_gem_flink)
  #define DRM_IOCTL_GEM_OPEN		DRM_IOWR(0x0b, struct drm_gem_open)
9f35421e0   Ben Skeggs   drm/core: add ioc...
629
  #define DRM_IOCTL_GET_CAP		DRM_IOWR(0x0c, struct drm_get_cap)
c60ce623b   Dave Airlie   drm: remove a bun...
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
  
  #define DRM_IOCTL_SET_UNIQUE		DRM_IOW( 0x10, struct drm_unique)
  #define DRM_IOCTL_AUTH_MAGIC		DRM_IOW( 0x11, struct drm_auth)
  #define DRM_IOCTL_BLOCK			DRM_IOWR(0x12, struct drm_block)
  #define DRM_IOCTL_UNBLOCK		DRM_IOWR(0x13, struct drm_block)
  #define DRM_IOCTL_CONTROL		DRM_IOW( 0x14, struct drm_control)
  #define DRM_IOCTL_ADD_MAP		DRM_IOWR(0x15, struct drm_map)
  #define DRM_IOCTL_ADD_BUFS		DRM_IOWR(0x16, struct drm_buf_desc)
  #define DRM_IOCTL_MARK_BUFS		DRM_IOW( 0x17, struct drm_buf_desc)
  #define DRM_IOCTL_INFO_BUFS		DRM_IOWR(0x18, struct drm_buf_info)
  #define DRM_IOCTL_MAP_BUFS		DRM_IOWR(0x19, struct drm_buf_map)
  #define DRM_IOCTL_FREE_BUFS		DRM_IOW( 0x1a, struct drm_buf_free)
  
  #define DRM_IOCTL_RM_MAP		DRM_IOW( 0x1b, struct drm_map)
  
  #define DRM_IOCTL_SET_SAREA_CTX		DRM_IOW( 0x1c, struct drm_ctx_priv_map)
  #define DRM_IOCTL_GET_SAREA_CTX 	DRM_IOWR(0x1d, struct drm_ctx_priv_map)
7c1c2871a   Dave Airlie   drm: move to kref...
647
648
  #define DRM_IOCTL_SET_MASTER            DRM_IO(0x1e)
  #define DRM_IOCTL_DROP_MASTER           DRM_IO(0x1f)
c60ce623b   Dave Airlie   drm: remove a bun...
649
650
651
652
653
654
655
656
657
658
659
660
661
  #define DRM_IOCTL_ADD_CTX		DRM_IOWR(0x20, struct drm_ctx)
  #define DRM_IOCTL_RM_CTX		DRM_IOWR(0x21, struct drm_ctx)
  #define DRM_IOCTL_MOD_CTX		DRM_IOW( 0x22, struct drm_ctx)
  #define DRM_IOCTL_GET_CTX		DRM_IOWR(0x23, struct drm_ctx)
  #define DRM_IOCTL_SWITCH_CTX		DRM_IOW( 0x24, struct drm_ctx)
  #define DRM_IOCTL_NEW_CTX		DRM_IOW( 0x25, struct drm_ctx)
  #define DRM_IOCTL_RES_CTX		DRM_IOWR(0x26, struct drm_ctx_res)
  #define DRM_IOCTL_ADD_DRAW		DRM_IOWR(0x27, struct drm_draw)
  #define DRM_IOCTL_RM_DRAW		DRM_IOWR(0x28, struct drm_draw)
  #define DRM_IOCTL_DMA			DRM_IOWR(0x29, struct drm_dma)
  #define DRM_IOCTL_LOCK			DRM_IOW( 0x2a, struct drm_lock)
  #define DRM_IOCTL_UNLOCK		DRM_IOW( 0x2b, struct drm_lock)
  #define DRM_IOCTL_FINISH		DRM_IOW( 0x2c, struct drm_lock)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
662

ba4420c22   Dave Airlie   drm: move ttm glo...
663
  #define DRM_IOCTL_GEM_PRIME_OPEN        DRM_IOWR(0x2e, struct drm_gem_open)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
664
665
  #define DRM_IOCTL_AGP_ACQUIRE		DRM_IO(  0x30)
  #define DRM_IOCTL_AGP_RELEASE		DRM_IO(  0x31)
c60ce623b   Dave Airlie   drm: remove a bun...
666
667
668
669
670
671
  #define DRM_IOCTL_AGP_ENABLE		DRM_IOW( 0x32, struct drm_agp_mode)
  #define DRM_IOCTL_AGP_INFO		DRM_IOR( 0x33, struct drm_agp_info)
  #define DRM_IOCTL_AGP_ALLOC		DRM_IOWR(0x34, struct drm_agp_buffer)
  #define DRM_IOCTL_AGP_FREE		DRM_IOW( 0x35, struct drm_agp_buffer)
  #define DRM_IOCTL_AGP_BIND		DRM_IOW( 0x36, struct drm_agp_binding)
  #define DRM_IOCTL_AGP_UNBIND		DRM_IOW( 0x37, struct drm_agp_binding)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
672

b55430590   Dave Airlie   drm: the sg alloc...
673
  #define DRM_IOCTL_SG_ALLOC		DRM_IOWR(0x38, struct drm_scatter_gather)
c60ce623b   Dave Airlie   drm: remove a bun...
674
  #define DRM_IOCTL_SG_FREE		DRM_IOW( 0x39, struct drm_scatter_gather)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
675

c60ce623b   Dave Airlie   drm: remove a bun...
676
  #define DRM_IOCTL_WAIT_VBLANK		DRM_IOWR(0x3a, union drm_wait_vblank)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
677

c60ce623b   Dave Airlie   drm: remove a bun...
678
  #define DRM_IOCTL_UPDATE_DRAW		DRM_IOW(0x3f, struct drm_update_draw)
bea5679f9   Michel Dänzer   drm: Add support ...
679

f453ba046   Dave Airlie   DRM: add mode set...
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
  #define DRM_IOCTL_MODE_GETRESOURCES	DRM_IOWR(0xA0, struct drm_mode_card_res)
  #define DRM_IOCTL_MODE_GETCRTC		DRM_IOWR(0xA1, struct drm_mode_crtc)
  #define DRM_IOCTL_MODE_SETCRTC		DRM_IOWR(0xA2, struct drm_mode_crtc)
  #define DRM_IOCTL_MODE_CURSOR		DRM_IOWR(0xA3, struct drm_mode_cursor)
  #define DRM_IOCTL_MODE_GETGAMMA		DRM_IOWR(0xA4, struct drm_mode_crtc_lut)
  #define DRM_IOCTL_MODE_SETGAMMA		DRM_IOWR(0xA5, struct drm_mode_crtc_lut)
  #define DRM_IOCTL_MODE_GETENCODER	DRM_IOWR(0xA6, struct drm_mode_get_encoder)
  #define DRM_IOCTL_MODE_GETCONNECTOR	DRM_IOWR(0xA7, struct drm_mode_get_connector)
  #define DRM_IOCTL_MODE_ATTACHMODE	DRM_IOWR(0xA8, struct drm_mode_mode_cmd)
  #define DRM_IOCTL_MODE_DETACHMODE	DRM_IOWR(0xA9, struct drm_mode_mode_cmd)
  
  #define DRM_IOCTL_MODE_GETPROPERTY	DRM_IOWR(0xAA, struct drm_mode_get_property)
  #define DRM_IOCTL_MODE_SETPROPERTY	DRM_IOWR(0xAB, struct drm_mode_connector_set_property)
  #define DRM_IOCTL_MODE_GETPROPBLOB	DRM_IOWR(0xAC, struct drm_mode_get_blob)
  #define DRM_IOCTL_MODE_GETFB		DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
  #define DRM_IOCTL_MODE_ADDFB		DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
  #define DRM_IOCTL_MODE_RMFB		DRM_IOWR(0xAF, unsigned int)
d91d8a3f8   Kristian Høgsberg   drm/kms: add page...
697
  #define DRM_IOCTL_MODE_PAGE_FLIP	DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip)
884840aa3   Jakob Bornecrantz   drm: Add dirty io...
698
  #define DRM_IOCTL_MODE_DIRTYFB		DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd)
f453ba046   Dave Airlie   DRM: add mode set...
699

ff72145ba   Dave Airlie   drm: dumb scanout...
700
701
702
  #define DRM_IOCTL_MODE_CREATE_DUMB DRM_IOWR(0xB2, struct drm_mode_create_dumb)
  #define DRM_IOCTL_MODE_MAP_DUMB    DRM_IOWR(0xB3, struct drm_mode_map_dumb)
  #define DRM_IOCTL_MODE_DESTROY_DUMB    DRM_IOWR(0xB4, struct drm_mode_destroy_dumb)
8cf5c9177   Jesse Barnes   drm: add plane su...
703
704
705
  #define DRM_IOCTL_MODE_GETPLANERESOURCES DRM_IOWR(0xB5, struct drm_mode_get_plane_res)
  #define DRM_IOCTL_MODE_GETPLANE	DRM_IOWR(0xB6, struct drm_mode_get_plane)
  #define DRM_IOCTL_MODE_SETPLANE	DRM_IOWR(0xB7, struct drm_mode_set_plane)
308e5bcbd   Jesse Barnes   drm: add an fb cr...
706
  #define DRM_IOCTL_MODE_ADDFB2		DRM_IOWR(0xB8, struct drm_mode_fb_cmd2)
ff72145ba   Dave Airlie   drm: dumb scanout...
707

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
708
709
  /**
   * Device specific ioctls should only be in their respective headers
99da6d861   Thomas Hellstrom   drm: allow for mo...
710
711
   * The device specific ioctl range is from 0x40 to 0x99.
   * Generic IOCTLS restart at 0xA0.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
712
713
714
715
716
   *
   * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and
   * drmCommandReadWrite().
   */
  #define DRM_COMMAND_BASE                0x40
99da6d861   Thomas Hellstrom   drm: allow for mo...
717
  #define DRM_COMMAND_END			0xA0
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
718

c9a9c5e02   Kristian Høgsberg   drm: Add async ev...
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
  /**
   * Header for events written back to userspace on the drm fd.  The
   * type defines the type of event, the length specifies the total
   * length of the event (including the header), and user_data is
   * typically a 64 bit value passed with the ioctl that triggered the
   * event.  A read on the drm fd will always only return complete
   * events, that is, if for example the read buffer is 100 bytes, and
   * there are two 64 byte events pending, only one will be returned.
   *
   * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and
   * up are chipset specific.
   */
  struct drm_event {
  	__u32 type;
  	__u32 length;
  };
  
  #define DRM_EVENT_VBLANK 0x01
7bd4d7be5   Jesse Barnes   drm: use page fli...
737
  #define DRM_EVENT_FLIP_COMPLETE 0x02
c9a9c5e02   Kristian Høgsberg   drm: Add async ev...
738
739
740
741
742
743
744
745
746
  
  struct drm_event_vblank {
  	struct drm_event base;
  	__u64 user_data;
  	__u32 tv_sec;
  	__u32 tv_usec;
  	__u32 sequence;
  	__u32 reserved;
  };
e73f88af6   Dave Airlie   drm: add cap bit ...
747
  #define DRM_CAP_DUMB_BUFFER 0x1
51eab416c   Dave Airlie   drm/vblank: updat...
748
  #define DRM_CAP_VBLANK_HIGH_CRTC 0x2
e73f88af6   Dave Airlie   drm: add cap bit ...
749

c60ce623b   Dave Airlie   drm: remove a bun...
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
  /* typedef area */
  #ifndef __KERNEL__
  typedef struct drm_clip_rect drm_clip_rect_t;
  typedef struct drm_drawable_info drm_drawable_info_t;
  typedef struct drm_tex_region drm_tex_region_t;
  typedef struct drm_hw_lock drm_hw_lock_t;
  typedef struct drm_version drm_version_t;
  typedef struct drm_unique drm_unique_t;
  typedef struct drm_list drm_list_t;
  typedef struct drm_block drm_block_t;
  typedef struct drm_control drm_control_t;
  typedef enum drm_map_type drm_map_type_t;
  typedef enum drm_map_flags drm_map_flags_t;
  typedef struct drm_ctx_priv_map drm_ctx_priv_map_t;
  typedef struct drm_map drm_map_t;
  typedef struct drm_client drm_client_t;
  typedef enum drm_stat_type drm_stat_type_t;
  typedef struct drm_stats drm_stats_t;
  typedef enum drm_lock_flags drm_lock_flags_t;
  typedef struct drm_lock drm_lock_t;
  typedef enum drm_dma_flags drm_dma_flags_t;
  typedef struct drm_buf_desc drm_buf_desc_t;
  typedef struct drm_buf_info drm_buf_info_t;
  typedef struct drm_buf_free drm_buf_free_t;
  typedef struct drm_buf_pub drm_buf_pub_t;
  typedef struct drm_buf_map drm_buf_map_t;
  typedef struct drm_dma drm_dma_t;
  typedef union drm_wait_vblank drm_wait_vblank_t;
  typedef struct drm_agp_mode drm_agp_mode_t;
  typedef enum drm_ctx_flags drm_ctx_flags_t;
  typedef struct drm_ctx drm_ctx_t;
  typedef struct drm_ctx_res drm_ctx_res_t;
  typedef struct drm_draw drm_draw_t;
  typedef struct drm_update_draw drm_update_draw_t;
  typedef struct drm_auth drm_auth_t;
  typedef struct drm_irq_busid drm_irq_busid_t;
  typedef enum drm_vblank_seq_type drm_vblank_seq_type_t;
  
  typedef struct drm_agp_buffer drm_agp_buffer_t;
  typedef struct drm_agp_binding drm_agp_binding_t;
  typedef struct drm_agp_info drm_agp_info_t;
  typedef struct drm_scatter_gather drm_scatter_gather_t;
  typedef struct drm_set_version drm_set_version_t;
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
794
  #endif