1
2
3
4
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
35
36#ifndef _DRM_H_
37#define _DRM_H_
38
39#include <linux/types.h>
40#include <asm/ioctl.h>
41#define DRM_IOCTL_NR(n) _IOC_NR(n)
42#define DRM_IOC_VOID _IOC_NONE
43#define DRM_IOC_READ _IOC_READ
44#define DRM_IOC_WRITE _IOC_WRITE
45#define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE
46#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
47
48#define DRM_MAJOR 226
49#define DRM_MAX_MINOR 15
50
51#define DRM_NAME "drm"
52#define DRM_MIN_ORDER 5
53#define DRM_MAX_ORDER 22
54#define DRM_RAM_PERCENT 10
55
56#define _DRM_LOCK_HELD 0x80000000U
57#define _DRM_LOCK_CONT 0x40000000U
58#define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD)
59#define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT)
60#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
61
62typedef unsigned int drm_handle_t;
63typedef unsigned int drm_context_t;
64typedef unsigned int drm_drawable_t;
65typedef unsigned int drm_magic_t;
66
67
68
69
70
71
72
73
74
75
76struct drm_clip_rect {
77 unsigned short x1;
78 unsigned short y1;
79 unsigned short x2;
80 unsigned short y2;
81};
82
83
84
85
86struct drm_drawable_info {
87 unsigned int num_rects;
88 struct drm_clip_rect *rects;
89};
90
91
92
93
94struct drm_tex_region {
95 unsigned char next;
96 unsigned char prev;
97 unsigned char in_use;
98 unsigned char padding;
99 unsigned int age;
100};
101
102
103
104
105
106
107
108
109struct drm_hw_lock {
110 __volatile__ unsigned int lock;
111 char padding[60];
112};
113
114
115
116
117
118
119struct drm_version {
120 int version_major;
121 int version_minor;
122 int version_patchlevel;
123 size_t name_len;
124 char __user *name;
125 size_t date_len;
126 char __user *date;
127 size_t desc_len;
128 char __user *desc;
129};
130
131
132
133
134
135
136struct drm_unique {
137 size_t unique_len;
138 char __user *unique;
139};
140
141struct drm_list {
142 int count;
143 struct drm_version __user *version;
144};
145
146struct drm_block {
147 int unused;
148};
149
150
151
152
153
154
155struct drm_control {
156 enum {
157 DRM_ADD_COMMAND,
158 DRM_RM_COMMAND,
159 DRM_INST_HANDLER,
160 DRM_UNINST_HANDLER
161 } func;
162 int irq;
163};
164
165
166
167
168enum drm_map_type {
169 _DRM_FRAME_BUFFER = 0,
170 _DRM_REGISTERS = 1,
171 _DRM_SHM = 2,
172 _DRM_AGP = 3,
173 _DRM_SCATTER_GATHER = 4,
174 _DRM_CONSISTENT = 5,
175 _DRM_GEM = 6,
176};
177
178
179
180
181enum drm_map_flags {
182 _DRM_RESTRICTED = 0x01,
183 _DRM_READ_ONLY = 0x02,
184 _DRM_LOCKED = 0x04,
185 _DRM_KERNEL = 0x08,
186 _DRM_WRITE_COMBINING = 0x10,
187 _DRM_CONTAINS_LOCK = 0x20,
188 _DRM_REMOVABLE = 0x40,
189 _DRM_DRIVER = 0x80
190};
191
192struct drm_ctx_priv_map {
193 unsigned int ctx_id;
194 void *handle;
195};
196
197
198
199
200
201
202
203struct drm_map {
204 unsigned long offset;
205 unsigned long size;
206 enum drm_map_type type;
207 enum drm_map_flags flags;
208 void *handle;
209
210 int mtrr;
211
212};
213
214
215
216
217struct drm_client {
218 int idx;
219 int auth;
220 unsigned long pid;
221 unsigned long uid;
222 unsigned long magic;
223 unsigned long iocs;
224};
225
226enum drm_stat_type {
227 _DRM_STAT_LOCK,
228 _DRM_STAT_OPENS,
229 _DRM_STAT_CLOSES,
230 _DRM_STAT_IOCTLS,
231 _DRM_STAT_LOCKS,
232 _DRM_STAT_UNLOCKS,
233 _DRM_STAT_VALUE,
234 _DRM_STAT_BYTE,
235 _DRM_STAT_COUNT,
236
237 _DRM_STAT_IRQ,
238 _DRM_STAT_PRIMARY,
239 _DRM_STAT_SECONDARY,
240 _DRM_STAT_DMA,
241 _DRM_STAT_SPECIAL,
242 _DRM_STAT_MISSED
243
244};
245
246
247
248
249struct drm_stats {
250 unsigned long count;
251 struct {
252 unsigned long value;
253 enum drm_stat_type type;
254 } data[15];
255};
256
257
258
259
260enum drm_lock_flags {
261 _DRM_LOCK_READY = 0x01,
262 _DRM_LOCK_QUIESCENT = 0x02,
263 _DRM_LOCK_FLUSH = 0x04,
264 _DRM_LOCK_FLUSH_ALL = 0x08,
265
266
267
268 _DRM_HALT_ALL_QUEUES = 0x10,
269 _DRM_HALT_CUR_QUEUES = 0x20
270};
271
272
273
274
275
276
277struct drm_lock {
278 int context;
279 enum drm_lock_flags flags;
280};
281
282
283
284
285
286
287
288
289
290enum drm_dma_flags {
291
292 _DRM_DMA_BLOCK = 0x01,
293
294
295
296
297
298
299
300
301
302 _DRM_DMA_WHILE_LOCKED = 0x02,
303 _DRM_DMA_PRIORITY = 0x04,
304
305
306 _DRM_DMA_WAIT = 0x10,
307 _DRM_DMA_SMALLER_OK = 0x20,
308 _DRM_DMA_LARGER_OK = 0x40
309};
310
311
312
313
314
315
316struct drm_buf_desc {
317 int count;
318 int size;
319 int low_mark;
320 int high_mark;
321 enum {
322 _DRM_PAGE_ALIGN = 0x01,
323 _DRM_AGP_BUFFER = 0x02,
324 _DRM_SG_BUFFER = 0x04,
325 _DRM_FB_BUFFER = 0x08,
326 _DRM_PCI_BUFFER_RO = 0x10
327 } flags;
328 unsigned long agp_start;
329
330
331
332};
333
334
335
336
337struct drm_buf_info {
338 int count;
339 struct drm_buf_desc __user *list;
340};
341
342
343
344
345struct drm_buf_free {
346 int count;
347 int __user *list;
348};
349
350
351
352
353
354
355struct drm_buf_pub {
356 int idx;
357 int total;
358 int used;
359 void __user *address;
360};
361
362
363
364
365struct drm_buf_map {
366 int count;
367 void __user *virtual;
368 struct drm_buf_pub __user *list;
369};
370
371
372
373
374
375
376
377
378struct drm_dma {
379 int context;
380 int send_count;
381 int __user *send_indices;
382 int __user *send_sizes;
383 enum drm_dma_flags flags;
384 int request_count;
385 int request_size;
386 int __user *request_indices;
387 int __user *request_sizes;
388 int granted_count;
389};
390
391enum drm_ctx_flags {
392 _DRM_CONTEXT_PRESERVED = 0x01,
393 _DRM_CONTEXT_2DONLY = 0x02
394};
395
396
397
398
399
400
401struct drm_ctx {
402 drm_context_t handle;
403 enum drm_ctx_flags flags;
404};
405
406
407
408
409struct drm_ctx_res {
410 int count;
411 struct drm_ctx __user *contexts;
412};
413
414
415
416
417struct drm_draw {
418 drm_drawable_t handle;
419};
420
421
422
423
424typedef enum {
425 DRM_DRAWABLE_CLIPRECTS,
426} drm_drawable_info_type_t;
427
428struct drm_update_draw {
429 drm_drawable_t handle;
430 unsigned int type;
431 unsigned int num;
432 unsigned long long data;
433};
434
435
436
437
438struct drm_auth {
439 drm_magic_t magic;
440};
441
442
443
444
445
446
447struct drm_irq_busid {
448 int irq;
449 int busnum;
450 int devnum;
451 int funcnum;
452};
453
454enum drm_vblank_seq_type {
455 _DRM_VBLANK_ABSOLUTE = 0x0,
456 _DRM_VBLANK_RELATIVE = 0x1,
457 _DRM_VBLANK_FLIP = 0x8000000,
458 _DRM_VBLANK_NEXTONMISS = 0x10000000,
459 _DRM_VBLANK_SECONDARY = 0x20000000,
460 _DRM_VBLANK_SIGNAL = 0x40000000
461};
462
463#define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE)
464#define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_SIGNAL | _DRM_VBLANK_SECONDARY | \
465 _DRM_VBLANK_NEXTONMISS)
466
467struct drm_wait_vblank_request {
468 enum drm_vblank_seq_type type;
469 unsigned int sequence;
470 unsigned long signal;
471};
472
473struct drm_wait_vblank_reply {
474 enum drm_vblank_seq_type type;
475 unsigned int sequence;
476 long tval_sec;
477 long tval_usec;
478};
479
480
481
482
483
484
485union drm_wait_vblank {
486 struct drm_wait_vblank_request request;
487 struct drm_wait_vblank_reply reply;
488};
489
490#define _DRM_PRE_MODESET 1
491#define _DRM_POST_MODESET 2
492
493
494
495
496
497
498struct drm_modeset_ctl {
499 __u32 crtc;
500 __u32 cmd;
501};
502
503
504
505
506
507
508struct drm_agp_mode {
509 unsigned long mode;
510};
511
512
513
514
515
516
517struct drm_agp_buffer {
518 unsigned long size;
519 unsigned long handle;
520 unsigned long type;
521 unsigned long physical;
522};
523
524
525
526
527
528
529struct drm_agp_binding {
530 unsigned long handle;
531 unsigned long offset;
532};
533
534
535
536
537
538
539
540
541struct drm_agp_info {
542 int agp_version_major;
543 int agp_version_minor;
544 unsigned long mode;
545 unsigned long aperture_base;
546 unsigned long aperture_size;
547 unsigned long memory_allowed;
548 unsigned long memory_used;
549
550
551 unsigned short id_vendor;
552 unsigned short id_device;
553};
554
555
556
557
558struct drm_scatter_gather {
559 unsigned long size;
560 unsigned long handle;
561};
562
563
564
565
566struct drm_set_version {
567 int drm_di_major;
568 int drm_di_minor;
569 int drm_dd_major;
570 int drm_dd_minor;
571};
572
573
574struct drm_gem_close {
575
576 __u32 handle;
577 __u32 pad;
578};
579
580
581struct drm_gem_flink {
582
583 __u32 handle;
584
585
586 __u32 name;
587};
588
589
590struct drm_gem_open {
591
592 __u32 name;
593
594
595 __u32 handle;
596
597
598 __u64 size;
599};
600
601#include "drm_mode.h"
602
603#define DRM_IOCTL_BASE 'd'
604#define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr)
605#define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type)
606#define DRM_IOW(nr,type) _IOW(DRM_IOCTL_BASE,nr,type)
607#define DRM_IOWR(nr,type) _IOWR(DRM_IOCTL_BASE,nr,type)
608
609#define DRM_IOCTL_VERSION DRM_IOWR(0x00, struct drm_version)
610#define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, struct drm_unique)
611#define DRM_IOCTL_GET_MAGIC DRM_IOR( 0x02, struct drm_auth)
612#define DRM_IOCTL_IRQ_BUSID DRM_IOWR(0x03, struct drm_irq_busid)
613#define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, struct drm_map)
614#define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client)
615#define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats)
616#define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version)
617#define DRM_IOCTL_MODESET_CTL DRM_IOW(0x08, struct drm_modeset_ctl)
618#define DRM_IOCTL_GEM_CLOSE DRM_IOW (0x09, struct drm_gem_close)
619#define DRM_IOCTL_GEM_FLINK DRM_IOWR(0x0a, struct drm_gem_flink)
620#define DRM_IOCTL_GEM_OPEN DRM_IOWR(0x0b, struct drm_gem_open)
621
622#define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique)
623#define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth)
624#define DRM_IOCTL_BLOCK DRM_IOWR(0x12, struct drm_block)
625#define DRM_IOCTL_UNBLOCK DRM_IOWR(0x13, struct drm_block)
626#define DRM_IOCTL_CONTROL DRM_IOW( 0x14, struct drm_control)
627#define DRM_IOCTL_ADD_MAP DRM_IOWR(0x15, struct drm_map)
628#define DRM_IOCTL_ADD_BUFS DRM_IOWR(0x16, struct drm_buf_desc)
629#define DRM_IOCTL_MARK_BUFS DRM_IOW( 0x17, struct drm_buf_desc)
630#define DRM_IOCTL_INFO_BUFS DRM_IOWR(0x18, struct drm_buf_info)
631#define DRM_IOCTL_MAP_BUFS DRM_IOWR(0x19, struct drm_buf_map)
632#define DRM_IOCTL_FREE_BUFS DRM_IOW( 0x1a, struct drm_buf_free)
633
634#define DRM_IOCTL_RM_MAP DRM_IOW( 0x1b, struct drm_map)
635
636#define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map)
637#define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map)
638
639#define DRM_IOCTL_SET_MASTER DRM_IO(0x1e)
640#define DRM_IOCTL_DROP_MASTER DRM_IO(0x1f)
641
642#define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx)
643#define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx)
644#define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx)
645#define DRM_IOCTL_GET_CTX DRM_IOWR(0x23, struct drm_ctx)
646#define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, struct drm_ctx)
647#define DRM_IOCTL_NEW_CTX DRM_IOW( 0x25, struct drm_ctx)
648#define DRM_IOCTL_RES_CTX DRM_IOWR(0x26, struct drm_ctx_res)
649#define DRM_IOCTL_ADD_DRAW DRM_IOWR(0x27, struct drm_draw)
650#define DRM_IOCTL_RM_DRAW DRM_IOWR(0x28, struct drm_draw)
651#define DRM_IOCTL_DMA DRM_IOWR(0x29, struct drm_dma)
652#define DRM_IOCTL_LOCK DRM_IOW( 0x2a, struct drm_lock)
653#define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock)
654#define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock)
655
656#define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30)
657#define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31)
658#define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode)
659#define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info)
660#define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer)
661#define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer)
662#define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding)
663#define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding)
664
665#define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather)
666#define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather)
667
668#define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank)
669
670#define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw)
671
672#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res)
673#define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc)
674#define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc)
675#define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor)
676#define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut)
677#define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut)
678#define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder)
679#define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector)
680#define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd)
681#define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd)
682
683#define DRM_IOCTL_MODE_GETPROPERTY DRM_IOWR(0xAA, struct drm_mode_get_property)
684#define DRM_IOCTL_MODE_SETPROPERTY DRM_IOWR(0xAB, struct drm_mode_connector_set_property)
685#define DRM_IOCTL_MODE_GETPROPBLOB DRM_IOWR(0xAC, struct drm_mode_get_blob)
686#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
687#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
688#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int)
689
690
691
692
693
694
695
696
697
698#define DRM_COMMAND_BASE 0x40
699#define DRM_COMMAND_END 0xA0
700
701
702#ifndef __KERNEL__
703typedef struct drm_clip_rect drm_clip_rect_t;
704typedef struct drm_drawable_info drm_drawable_info_t;
705typedef struct drm_tex_region drm_tex_region_t;
706typedef struct drm_hw_lock drm_hw_lock_t;
707typedef struct drm_version drm_version_t;
708typedef struct drm_unique drm_unique_t;
709typedef struct drm_list drm_list_t;
710typedef struct drm_block drm_block_t;
711typedef struct drm_control drm_control_t;
712typedef enum drm_map_type drm_map_type_t;
713typedef enum drm_map_flags drm_map_flags_t;
714typedef struct drm_ctx_priv_map drm_ctx_priv_map_t;
715typedef struct drm_map drm_map_t;
716typedef struct drm_client drm_client_t;
717typedef enum drm_stat_type drm_stat_type_t;
718typedef struct drm_stats drm_stats_t;
719typedef enum drm_lock_flags drm_lock_flags_t;
720typedef struct drm_lock drm_lock_t;
721typedef enum drm_dma_flags drm_dma_flags_t;
722typedef struct drm_buf_desc drm_buf_desc_t;
723typedef struct drm_buf_info drm_buf_info_t;
724typedef struct drm_buf_free drm_buf_free_t;
725typedef struct drm_buf_pub drm_buf_pub_t;
726typedef struct drm_buf_map drm_buf_map_t;
727typedef struct drm_dma drm_dma_t;
728typedef union drm_wait_vblank drm_wait_vblank_t;
729typedef struct drm_agp_mode drm_agp_mode_t;
730typedef enum drm_ctx_flags drm_ctx_flags_t;
731typedef struct drm_ctx drm_ctx_t;
732typedef struct drm_ctx_res drm_ctx_res_t;
733typedef struct drm_draw drm_draw_t;
734typedef struct drm_update_draw drm_update_draw_t;
735typedef struct drm_auth drm_auth_t;
736typedef struct drm_irq_busid drm_irq_busid_t;
737typedef enum drm_vblank_seq_type drm_vblank_seq_type_t;
738
739typedef struct drm_agp_buffer drm_agp_buffer_t;
740typedef struct drm_agp_binding drm_agp_binding_t;
741typedef struct drm_agp_info drm_agp_info_t;
742typedef struct drm_scatter_gather drm_scatter_gather_t;
743typedef struct drm_set_version drm_set_version_t;
744#endif
745
746#endif
747