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#ifndef _DRM_P_H_
36#define _DRM_P_H_
37
38#ifdef __KERNEL__
39#ifdef __alpha__
40
41
42
43#include <asm/current.h>
44#endif
45#include <linux/kernel.h>
46#include <linux/kref.h>
47#include <linux/miscdevice.h>
48#include <linux/fs.h>
49#include <linux/init.h>
50#include <linux/file.h>
51#include <linux/platform_device.h>
52#include <linux/pci.h>
53#include <linux/jiffies.h>
54#include <linux/dma-mapping.h>
55#include <linux/mm.h>
56#include <linux/cdev.h>
57#include <linux/mutex.h>
58#include <linux/io.h>
59#include <linux/slab.h>
60#include <linux/ratelimit.h>
61#if defined(__alpha__) || defined(__powerpc__)
62#include <asm/pgtable.h>
63#endif
64#include <asm/mman.h>
65#include <asm/uaccess.h>
66#include <linux/types.h>
67#include <linux/agp_backend.h>
68#include <linux/workqueue.h>
69#include <linux/poll.h>
70#include <asm/pgalloc.h>
71#include <drm/drm.h>
72#include <drm/drm_sarea.h>
73#include <drm/drm_vma_manager.h>
74
75#include <linux/idr.h>
76
77#define __OS_HAS_AGP (defined(CONFIG_AGP) || (defined(CONFIG_AGP_MODULE) && defined(MODULE)))
78
79struct module;
80
81struct drm_file;
82struct drm_device;
83
84struct device_node;
85struct videomode;
86
87#include <drm/drm_os_linux.h>
88#include <drm/drm_hashtab.h>
89#include <drm/drm_mm.h>
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119#define DRM_UT_CORE 0x01
120#define DRM_UT_DRIVER 0x02
121#define DRM_UT_KMS 0x04
122#define DRM_UT_PRIME 0x08
123
124extern __printf(2, 3)
125void drm_ut_debug_printk(const char *function_name,
126 const char *format, ...);
127extern __printf(2, 3)
128int drm_err(const char *func, const char *format, ...);
129
130
131
132
133
134
135#define DRIVER_USE_AGP 0x1
136#define DRIVER_PCI_DMA 0x8
137#define DRIVER_SG 0x10
138#define DRIVER_HAVE_DMA 0x20
139#define DRIVER_HAVE_IRQ 0x40
140#define DRIVER_IRQ_SHARED 0x80
141#define DRIVER_GEM 0x1000
142#define DRIVER_MODESET 0x2000
143#define DRIVER_PRIME 0x4000
144#define DRIVER_RENDER 0x8000
145
146
147
148
149
150#define DRM_DEBUG_CODE 2
151
152
153#define DRM_MAGIC_HASH_ORDER 4
154#define DRM_KERNEL_CONTEXT 0
155#define DRM_RESERVED_CONTEXTS 1
156
157#define DRM_MAP_HASH_OFFSET 0x10000000
158
159
160
161
162
163
164
165
166
167
168
169
170
171#define DRM_ERROR(fmt, ...) \
172 drm_err(__func__, fmt, ##__VA_ARGS__)
173
174
175
176
177
178
179
180#define DRM_ERROR_RATELIMITED(fmt, ...) \
181({ \
182 static DEFINE_RATELIMIT_STATE(_rs, \
183 DEFAULT_RATELIMIT_INTERVAL, \
184 DEFAULT_RATELIMIT_BURST); \
185 \
186 if (__ratelimit(&_rs)) \
187 drm_err(__func__, fmt, ##__VA_ARGS__); \
188})
189
190#define DRM_INFO(fmt, ...) \
191 printk(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__)
192
193#define DRM_INFO_ONCE(fmt, ...) \
194 printk_once(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__)
195
196
197
198
199
200
201
202#if DRM_DEBUG_CODE
203#define DRM_DEBUG(fmt, args...) \
204 do { \
205 if (unlikely(drm_debug & DRM_UT_CORE)) \
206 drm_ut_debug_printk(__func__, fmt, ##args); \
207 } while (0)
208
209#define DRM_DEBUG_DRIVER(fmt, args...) \
210 do { \
211 if (unlikely(drm_debug & DRM_UT_DRIVER)) \
212 drm_ut_debug_printk(__func__, fmt, ##args); \
213 } while (0)
214#define DRM_DEBUG_KMS(fmt, args...) \
215 do { \
216 if (unlikely(drm_debug & DRM_UT_KMS)) \
217 drm_ut_debug_printk(__func__, fmt, ##args); \
218 } while (0)
219#define DRM_DEBUG_PRIME(fmt, args...) \
220 do { \
221 if (unlikely(drm_debug & DRM_UT_PRIME)) \
222 drm_ut_debug_printk(__func__, fmt, ##args); \
223 } while (0)
224#else
225#define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0)
226#define DRM_DEBUG_KMS(fmt, args...) do { } while (0)
227#define DRM_DEBUG_PRIME(fmt, args...) do { } while (0)
228#define DRM_DEBUG(fmt, arg...) do { } while (0)
229#endif
230
231
232
233
234
235
236
237#define DRM_IF_VERSION(maj, min) (maj << 16 | min)
238
239
240
241
242
243
244
245#define LOCK_TEST_WITH_RETURN( dev, _file_priv ) \
246do { \
247 if (!_DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock) || \
248 _file_priv->master->lock.file_priv != _file_priv) { \
249 DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\
250 __func__, _DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock),\
251 _file_priv->master->lock.file_priv, _file_priv); \
252 return -EINVAL; \
253 } \
254} while (0)
255
256
257
258
259
260
261
262
263
264typedef int drm_ioctl_t(struct drm_device *dev, void *data,
265 struct drm_file *file_priv);
266
267typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
268 unsigned long arg);
269
270#define DRM_IOCTL_NR(n) _IOC_NR(n)
271#define DRM_MAJOR 226
272
273#define DRM_AUTH 0x1
274#define DRM_MASTER 0x2
275#define DRM_ROOT_ONLY 0x4
276#define DRM_CONTROL_ALLOW 0x8
277#define DRM_UNLOCKED 0x10
278#define DRM_RENDER_ALLOW 0x20
279
280struct drm_ioctl_desc {
281 unsigned int cmd;
282 int flags;
283 drm_ioctl_t *func;
284 unsigned int cmd_drv;
285 const char *name;
286};
287
288
289
290
291
292
293#define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags) \
294 [DRM_IOCTL_NR(DRM_##ioctl)] = {.cmd = DRM_##ioctl, .func = _func, .flags = _flags, .cmd_drv = DRM_IOCTL_##ioctl, .name = #ioctl}
295
296struct drm_magic_entry {
297 struct list_head head;
298 struct drm_hash_item hash_item;
299 struct drm_file *priv;
300};
301
302struct drm_vma_entry {
303 struct list_head head;
304 struct vm_area_struct *vma;
305 pid_t pid;
306};
307
308
309
310
311struct drm_buf {
312 int idx;
313 int total;
314 int order;
315 int used;
316 unsigned long offset;
317 void *address;
318 unsigned long bus_address;
319 struct drm_buf *next;
320 __volatile__ int waiting;
321 __volatile__ int pending;
322 struct drm_file *file_priv;
323 int context;
324 int while_locked;
325 enum {
326 DRM_LIST_NONE = 0,
327 DRM_LIST_FREE = 1,
328 DRM_LIST_WAIT = 2,
329 DRM_LIST_PEND = 3,
330 DRM_LIST_PRIO = 4,
331 DRM_LIST_RECLAIM = 5
332 } list;
333
334 int dev_priv_size;
335 void *dev_private;
336};
337
338
339struct drm_waitlist {
340 int count;
341 struct drm_buf **bufs;
342 struct drm_buf **rp;
343 struct drm_buf **wp;
344 struct drm_buf **end;
345 spinlock_t read_lock;
346 spinlock_t write_lock;
347};
348
349struct drm_freelist {
350 int initialized;
351 atomic_t count;
352 struct drm_buf *next;
353
354 wait_queue_head_t waiting;
355 int low_mark;
356 int high_mark;
357 atomic_t wfh;
358 spinlock_t lock;
359};
360
361typedef struct drm_dma_handle {
362 dma_addr_t busaddr;
363 void *vaddr;
364 size_t size;
365} drm_dma_handle_t;
366
367
368
369
370struct drm_buf_entry {
371 int buf_size;
372 int buf_count;
373 struct drm_buf *buflist;
374 int seg_count;
375 int page_order;
376 struct drm_dma_handle **seglist;
377
378 struct drm_freelist freelist;
379};
380
381
382struct drm_pending_event {
383 struct drm_event *event;
384 struct list_head link;
385 struct drm_file *file_priv;
386 pid_t pid;
387
388 void (*destroy)(struct drm_pending_event *event);
389};
390
391
392struct drm_prime_file_private {
393 struct list_head head;
394 struct mutex lock;
395};
396
397
398struct drm_file {
399 unsigned always_authenticated :1;
400 unsigned authenticated :1;
401
402 unsigned is_master :1;
403
404 unsigned stereo_allowed :1;
405
406
407
408
409 unsigned universal_planes:1;
410
411 struct pid *pid;
412 kuid_t uid;
413 drm_magic_t magic;
414 struct list_head lhead;
415 struct drm_minor *minor;
416 unsigned long lock_count;
417
418
419 struct idr object_idr;
420
421 spinlock_t table_lock;
422
423 struct file *filp;
424 void *driver_priv;
425
426 struct drm_master *master;
427
428
429
430
431
432
433
434 struct list_head fbs;
435 struct mutex fbs_lock;
436
437 wait_queue_head_t event_wait;
438 struct list_head event_list;
439 int event_space;
440
441 struct drm_prime_file_private prime;
442};
443
444
445struct drm_queue {
446 atomic_t use_count;
447 atomic_t finalization;
448 atomic_t block_count;
449 atomic_t block_read;
450 wait_queue_head_t read_queue;
451 atomic_t block_write;
452 wait_queue_head_t write_queue;
453 atomic_t total_queued;
454 atomic_t total_flushed;
455 atomic_t total_locks;
456 enum drm_ctx_flags flags;
457 struct drm_waitlist waitlist;
458 wait_queue_head_t flush_queue;
459};
460
461
462
463
464struct drm_lock_data {
465 struct drm_hw_lock *hw_lock;
466
467 struct drm_file *file_priv;
468 wait_queue_head_t lock_queue;
469 unsigned long lock_time;
470 spinlock_t spinlock;
471 uint32_t kernel_waiters;
472 uint32_t user_waiters;
473 int idle_has_lock;
474};
475
476
477
478
479struct drm_device_dma {
480
481 struct drm_buf_entry bufs[DRM_MAX_ORDER + 1];
482 int buf_count;
483 struct drm_buf **buflist;
484 int seg_count;
485 int page_count;
486 unsigned long *pagelist;
487 unsigned long byte_count;
488 enum {
489 _DRM_DMA_USE_AGP = 0x01,
490 _DRM_DMA_USE_SG = 0x02,
491 _DRM_DMA_USE_FB = 0x04,
492 _DRM_DMA_USE_PCI_RO = 0x08
493 } flags;
494
495};
496
497
498
499
500struct drm_agp_mem {
501 unsigned long handle;
502 struct agp_memory *memory;
503 unsigned long bound;
504 int pages;
505 struct list_head head;
506};
507
508
509
510
511
512
513struct drm_agp_head {
514 struct agp_kern_info agp_info;
515 struct list_head memory;
516 unsigned long mode;
517 struct agp_bridge_data *bridge;
518 int enabled;
519 int acquired;
520 unsigned long base;
521 int agp_mtrr;
522 int cant_use_aperture;
523 unsigned long page_mask;
524};
525
526
527
528
529struct drm_sg_mem {
530 unsigned long handle;
531 void *virtual;
532 int pages;
533 struct page **pagelist;
534 dma_addr_t *busaddr;
535};
536
537struct drm_sigdata {
538 int context;
539 struct drm_hw_lock *lock;
540};
541
542
543
544
545
546struct drm_local_map {
547 resource_size_t offset;
548 unsigned long size;
549 enum drm_map_type type;
550 enum drm_map_flags flags;
551 void *handle;
552
553 int mtrr;
554};
555
556typedef struct drm_local_map drm_local_map_t;
557
558
559
560
561struct drm_map_list {
562 struct list_head head;
563 struct drm_hash_item hash;
564 struct drm_local_map *map;
565 uint64_t user_token;
566 struct drm_master *master;
567};
568
569
570
571
572struct drm_ctx_list {
573 struct list_head head;
574 drm_context_t handle;
575 struct drm_file *tag;
576};
577
578
579#define DRM_ATI_GART_MAIN 1
580#define DRM_ATI_GART_FB 2
581
582#define DRM_ATI_GART_PCI 1
583#define DRM_ATI_GART_PCIE 2
584#define DRM_ATI_GART_IGP 3
585
586struct drm_ati_pcigart_info {
587 int gart_table_location;
588 int gart_reg_if;
589 void *addr;
590 dma_addr_t bus_addr;
591 dma_addr_t table_mask;
592 struct drm_dma_handle *table_handle;
593 struct drm_local_map mapping;
594 int table_size;
595};
596
597
598
599
600
601struct drm_gem_object {
602
603 struct kref refcount;
604
605
606
607
608
609
610
611
612
613
614 unsigned handle_count;
615
616
617 struct drm_device *dev;
618
619
620 struct file *filp;
621
622
623 struct drm_vma_offset_node vma_node;
624
625
626
627
628
629 size_t size;
630
631
632
633
634
635 int name;
636
637
638
639
640
641
642
643 uint32_t read_domains;
644 uint32_t write_domain;
645
646
647
648
649
650
651
652 uint32_t pending_read_domains;
653 uint32_t pending_write_domain;
654
655
656
657
658
659
660
661
662
663
664 struct dma_buf *dma_buf;
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681 struct dma_buf_attachment *import_attach;
682};
683
684#include <drm/drm_crtc.h>
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699struct drm_master {
700 struct kref refcount;
701 struct drm_minor *minor;
702 char *unique;
703 int unique_len;
704 int unique_size;
705 struct drm_open_hash magiclist;
706 struct list_head magicfree;
707 struct drm_lock_data lock;
708 void *driver_priv;
709};
710
711
712
713
714#define DRM_VBLANKTIME_RBSIZE 2
715
716
717#define DRM_CALLED_FROM_VBLIRQ 1
718#define DRM_VBLANKTIME_SCANOUTPOS_METHOD (1 << 0)
719#define DRM_VBLANKTIME_INVBL (1 << 1)
720
721
722#define DRM_SCANOUTPOS_VALID (1 << 0)
723#define DRM_SCANOUTPOS_INVBL (1 << 1)
724#define DRM_SCANOUTPOS_ACCURATE (1 << 2)
725
726struct drm_bus {
727 int (*set_busid)(struct drm_device *dev, struct drm_master *master);
728};
729
730
731
732
733
734
735struct drm_driver {
736 int (*load) (struct drm_device *, unsigned long flags);
737 int (*firstopen) (struct drm_device *);
738 int (*open) (struct drm_device *, struct drm_file *);
739 void (*preclose) (struct drm_device *, struct drm_file *file_priv);
740 void (*postclose) (struct drm_device *, struct drm_file *);
741 void (*lastclose) (struct drm_device *);
742 int (*unload) (struct drm_device *);
743 int (*suspend) (struct drm_device *, pm_message_t state);
744 int (*resume) (struct drm_device *);
745 int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
746 int (*dma_quiescent) (struct drm_device *);
747 int (*context_dtor) (struct drm_device *dev, int context);
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766 u32 (*get_vblank_counter) (struct drm_device *dev, int crtc);
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781 int (*enable_vblank) (struct drm_device *dev, int crtc);
782
783
784
785
786
787
788
789
790
791
792 void (*disable_vblank) (struct drm_device *dev, int crtc);
793
794
795
796
797
798
799
800
801
802
803
804
805 int (*device_is_agp) (struct drm_device *dev);
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837 int (*get_scanout_position) (struct drm_device *dev, int crtc,
838 unsigned int flags,
839 int *vpos, int *hpos, ktime_t *stime,
840 ktime_t *etime);
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872 int (*get_vblank_timestamp) (struct drm_device *dev, int crtc,
873 int *max_error,
874 struct timeval *vblank_time,
875 unsigned flags);
876
877
878
879 irqreturn_t(*irq_handler) (int irq, void *arg);
880 void (*irq_preinstall) (struct drm_device *dev);
881 int (*irq_postinstall) (struct drm_device *dev);
882 void (*irq_uninstall) (struct drm_device *dev);
883
884
885 int (*master_create)(struct drm_device *dev, struct drm_master *master);
886 void (*master_destroy)(struct drm_device *dev, struct drm_master *master);
887
888
889
890
891
892 int (*master_set)(struct drm_device *dev, struct drm_file *file_priv,
893 bool from_open);
894 void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv,
895 bool from_release);
896
897 int (*debugfs_init)(struct drm_minor *minor);
898 void (*debugfs_cleanup)(struct drm_minor *minor);
899
900
901
902
903
904
905
906 void (*gem_free_object) (struct drm_gem_object *obj);
907 int (*gem_open_object) (struct drm_gem_object *, struct drm_file *);
908 void (*gem_close_object) (struct drm_gem_object *, struct drm_file *);
909
910
911
912 int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv,
913 uint32_t handle, uint32_t flags, int *prime_fd);
914
915 int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv,
916 int prime_fd, uint32_t *handle);
917
918 struct dma_buf * (*gem_prime_export)(struct drm_device *dev,
919 struct drm_gem_object *obj, int flags);
920
921 struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
922 struct dma_buf *dma_buf);
923
924 int (*gem_prime_pin)(struct drm_gem_object *obj);
925 void (*gem_prime_unpin)(struct drm_gem_object *obj);
926 struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj);
927 struct drm_gem_object *(*gem_prime_import_sg_table)(
928 struct drm_device *dev, size_t size,
929 struct sg_table *sgt);
930 void *(*gem_prime_vmap)(struct drm_gem_object *obj);
931 void (*gem_prime_vunmap)(struct drm_gem_object *obj, void *vaddr);
932 int (*gem_prime_mmap)(struct drm_gem_object *obj,
933 struct vm_area_struct *vma);
934
935
936 void (*vgaarb_irq)(struct drm_device *dev, bool state);
937
938
939 int (*dumb_create)(struct drm_file *file_priv,
940 struct drm_device *dev,
941 struct drm_mode_create_dumb *args);
942 int (*dumb_map_offset)(struct drm_file *file_priv,
943 struct drm_device *dev, uint32_t handle,
944 uint64_t *offset);
945 int (*dumb_destroy)(struct drm_file *file_priv,
946 struct drm_device *dev,
947 uint32_t handle);
948
949
950 const struct vm_operations_struct *gem_vm_ops;
951
952 int major;
953 int minor;
954 int patchlevel;
955 char *name;
956 char *desc;
957 char *date;
958
959 u32 driver_features;
960 int dev_priv_size;
961 const struct drm_ioctl_desc *ioctls;
962 int num_ioctls;
963 const struct file_operations *fops;
964 struct drm_bus *bus;
965
966
967 struct list_head legacy_dev_list;
968};
969
970enum drm_minor_type {
971 DRM_MINOR_LEGACY,
972 DRM_MINOR_CONTROL,
973 DRM_MINOR_RENDER,
974 DRM_MINOR_CNT,
975};
976
977
978
979
980
981struct drm_info_list {
982 const char *name;
983 int (*show)(struct seq_file*, void*);
984 u32 driver_features;
985 void *data;
986};
987
988
989
990
991struct drm_info_node {
992 struct list_head list;
993 struct drm_minor *minor;
994 const struct drm_info_list *info_ent;
995 struct dentry *dent;
996};
997
998
999
1000
1001struct drm_minor {
1002 int index;
1003 int type;
1004 struct device *kdev;
1005 struct drm_device *dev;
1006
1007 struct dentry *debugfs_root;
1008
1009 struct list_head debugfs_list;
1010 struct mutex debugfs_lock;
1011
1012
1013 struct drm_master *master;
1014 struct drm_mode_group mode_group;
1015};
1016
1017
1018struct drm_pending_vblank_event {
1019 struct drm_pending_event base;
1020 int pipe;
1021 struct drm_event_vblank event;
1022};
1023
1024struct drm_vblank_crtc {
1025 struct drm_device *dev;
1026 wait_queue_head_t queue;
1027 struct timeval time[DRM_VBLANKTIME_RBSIZE];
1028 struct timer_list disable_timer;
1029 atomic_t count;
1030 atomic_t refcount;
1031 u32 last;
1032
1033 u32 last_wait;
1034 unsigned int inmodeset;
1035 int crtc;
1036 bool enabled;
1037
1038};
1039
1040
1041
1042
1043
1044struct drm_device {
1045 struct list_head legacy_dev_list;
1046 int if_version;
1047
1048
1049
1050 struct kref ref;
1051 struct device *dev;
1052 struct drm_driver *driver;
1053 void *dev_private;
1054 struct drm_minor *control;
1055 struct drm_minor *primary;
1056 struct drm_minor *render;
1057 atomic_t unplugged;
1058 struct inode *anon_inode;
1059 char *unique;
1060
1061
1062
1063
1064 struct mutex struct_mutex;
1065 struct mutex master_mutex;
1066
1067
1068
1069
1070 int open_count;
1071 spinlock_t buf_lock;
1072 int buf_use;
1073 atomic_t buf_alloc;
1074
1075
1076 struct list_head filelist;
1077
1078
1079
1080 struct list_head maplist;
1081 struct drm_open_hash map_hash;
1082
1083
1084
1085 struct list_head ctxlist;
1086 struct mutex ctxlist_mutex;
1087
1088 struct idr ctx_idr;
1089
1090 struct list_head vmalist;
1091
1092
1093
1094
1095
1096 struct drm_device_dma *dma;
1097
1098
1099
1100
1101 bool irq_enabled;
1102 int irq;
1103
1104 __volatile__ long context_flag;
1105 int last_context;
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117 bool vblank_disable_allowed;
1118
1119
1120 struct drm_vblank_crtc *vblank;
1121
1122 spinlock_t vblank_time_lock;
1123 spinlock_t vbl_lock;
1124
1125 u32 max_vblank_count;
1126
1127
1128
1129
1130 struct list_head vblank_event_list;
1131 spinlock_t event_lock;
1132
1133
1134
1135 struct drm_agp_head *agp;
1136
1137 struct pci_dev *pdev;
1138#ifdef __alpha__
1139 struct pci_controller *hose;
1140#endif
1141
1142 struct platform_device *platformdev;
1143 struct usb_device *usbdev;
1144
1145 struct drm_sg_mem *sg;
1146 unsigned int num_crtcs;
1147 struct drm_sigdata sigdata;
1148 sigset_t sigmask;
1149
1150 struct drm_local_map *agp_buffer_map;
1151 unsigned int agp_buffer_token;
1152
1153 struct drm_mode_config mode_config;
1154
1155
1156
1157 struct mutex object_name_lock;
1158 struct idr object_name_idr;
1159 struct drm_vma_offset_manager *vma_offset_manager;
1160
1161 int switch_power_state;
1162};
1163
1164#define DRM_SWITCH_POWER_ON 0
1165#define DRM_SWITCH_POWER_OFF 1
1166#define DRM_SWITCH_POWER_CHANGING 2
1167#define DRM_SWITCH_POWER_DYNAMIC_OFF 3
1168
1169static __inline__ int drm_core_check_feature(struct drm_device *dev,
1170 int feature)
1171{
1172 return ((dev->driver->driver_features & feature) ? 1 : 0);
1173}
1174
1175static inline void drm_device_set_unplugged(struct drm_device *dev)
1176{
1177 smp_wmb();
1178 atomic_set(&dev->unplugged, 1);
1179}
1180
1181static inline int drm_device_is_unplugged(struct drm_device *dev)
1182{
1183 int ret = atomic_read(&dev->unplugged);
1184 smp_rmb();
1185 return ret;
1186}
1187
1188static inline bool drm_is_render_client(const struct drm_file *file_priv)
1189{
1190 return file_priv->minor->type == DRM_MINOR_RENDER;
1191}
1192
1193static inline bool drm_is_control_client(const struct drm_file *file_priv)
1194{
1195 return file_priv->minor->type == DRM_MINOR_CONTROL;
1196}
1197
1198static inline bool drm_is_primary_client(const struct drm_file *file_priv)
1199{
1200 return file_priv->minor->type == DRM_MINOR_LEGACY;
1201}
1202
1203
1204
1205
1206
1207
1208extern long drm_ioctl(struct file *filp,
1209 unsigned int cmd, unsigned long arg);
1210extern long drm_compat_ioctl(struct file *filp,
1211 unsigned int cmd, unsigned long arg);
1212extern int drm_lastclose(struct drm_device *dev);
1213extern bool drm_ioctl_flags(unsigned int nr, unsigned int *flags);
1214
1215
1216extern struct mutex drm_global_mutex;
1217extern int drm_open(struct inode *inode, struct file *filp);
1218extern int drm_stub_open(struct inode *inode, struct file *filp);
1219extern ssize_t drm_read(struct file *filp, char __user *buffer,
1220 size_t count, loff_t *offset);
1221extern int drm_release(struct inode *inode, struct file *filp);
1222
1223
1224extern int drm_mmap(struct file *filp, struct vm_area_struct *vma);
1225extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma);
1226extern void drm_vm_open_locked(struct drm_device *dev, struct vm_area_struct *vma);
1227extern void drm_vm_close_locked(struct drm_device *dev, struct vm_area_struct *vma);
1228extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
1229
1230
1231#include <drm/drm_memory.h>
1232
1233
1234
1235extern int drm_irq_by_busid(struct drm_device *dev, void *data,
1236 struct drm_file *file_priv);
1237extern int drm_getunique(struct drm_device *dev, void *data,
1238 struct drm_file *file_priv);
1239extern int drm_setunique(struct drm_device *dev, void *data,
1240 struct drm_file *file_priv);
1241extern int drm_getmap(struct drm_device *dev, void *data,
1242 struct drm_file *file_priv);
1243extern int drm_getclient(struct drm_device *dev, void *data,
1244 struct drm_file *file_priv);
1245extern int drm_getstats(struct drm_device *dev, void *data,
1246 struct drm_file *file_priv);
1247extern int drm_getcap(struct drm_device *dev, void *data,
1248 struct drm_file *file_priv);
1249extern int drm_setclientcap(struct drm_device *dev, void *data,
1250 struct drm_file *file_priv);
1251extern int drm_setversion(struct drm_device *dev, void *data,
1252 struct drm_file *file_priv);
1253extern int drm_noop(struct drm_device *dev, void *data,
1254 struct drm_file *file_priv);
1255
1256
1257extern int drm_resctx(struct drm_device *dev, void *data,
1258 struct drm_file *file_priv);
1259extern int drm_addctx(struct drm_device *dev, void *data,
1260 struct drm_file *file_priv);
1261extern int drm_getctx(struct drm_device *dev, void *data,
1262 struct drm_file *file_priv);
1263extern int drm_switchctx(struct drm_device *dev, void *data,
1264 struct drm_file *file_priv);
1265extern int drm_newctx(struct drm_device *dev, void *data,
1266 struct drm_file *file_priv);
1267extern int drm_rmctx(struct drm_device *dev, void *data,
1268 struct drm_file *file_priv);
1269
1270extern int drm_ctxbitmap_init(struct drm_device *dev);
1271extern void drm_ctxbitmap_cleanup(struct drm_device *dev);
1272extern void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle);
1273
1274extern int drm_setsareactx(struct drm_device *dev, void *data,
1275 struct drm_file *file_priv);
1276extern int drm_getsareactx(struct drm_device *dev, void *data,
1277 struct drm_file *file_priv);
1278
1279
1280extern int drm_getmagic(struct drm_device *dev, void *data,
1281 struct drm_file *file_priv);
1282extern int drm_authmagic(struct drm_device *dev, void *data,
1283 struct drm_file *file_priv);
1284extern int drm_remove_magic(struct drm_master *master, drm_magic_t magic);
1285
1286
1287void drm_clflush_pages(struct page *pages[], unsigned long num_pages);
1288void drm_clflush_sg(struct sg_table *st);
1289void drm_clflush_virt_range(void *addr, unsigned long length);
1290
1291
1292extern int drm_lock(struct drm_device *dev, void *data,
1293 struct drm_file *file_priv);
1294extern int drm_unlock(struct drm_device *dev, void *data,
1295 struct drm_file *file_priv);
1296extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context);
1297extern void drm_idlelock_take(struct drm_lock_data *lock_data);
1298extern void drm_idlelock_release(struct drm_lock_data *lock_data);
1299
1300
1301
1302
1303
1304
1305extern int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv);
1306
1307
1308extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request);
1309extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request);
1310extern int drm_addmap(struct drm_device *dev, resource_size_t offset,
1311 unsigned int size, enum drm_map_type type,
1312 enum drm_map_flags flags, struct drm_local_map **map_ptr);
1313extern int drm_addmap_ioctl(struct drm_device *dev, void *data,
1314 struct drm_file *file_priv);
1315extern int drm_rmmap(struct drm_device *dev, struct drm_local_map *map);
1316extern int drm_rmmap_locked(struct drm_device *dev, struct drm_local_map *map);
1317extern int drm_rmmap_ioctl(struct drm_device *dev, void *data,
1318 struct drm_file *file_priv);
1319extern int drm_addbufs(struct drm_device *dev, void *data,
1320 struct drm_file *file_priv);
1321extern int drm_infobufs(struct drm_device *dev, void *data,
1322 struct drm_file *file_priv);
1323extern int drm_markbufs(struct drm_device *dev, void *data,
1324 struct drm_file *file_priv);
1325extern int drm_freebufs(struct drm_device *dev, void *data,
1326 struct drm_file *file_priv);
1327extern int drm_mapbufs(struct drm_device *dev, void *data,
1328 struct drm_file *file_priv);
1329extern int drm_dma_ioctl(struct drm_device *dev, void *data,
1330 struct drm_file *file_priv);
1331
1332
1333extern int drm_legacy_dma_setup(struct drm_device *dev);
1334extern void drm_legacy_dma_takedown(struct drm_device *dev);
1335extern void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf);
1336extern void drm_core_reclaim_buffers(struct drm_device *dev,
1337 struct drm_file *filp);
1338
1339
1340extern int drm_control(struct drm_device *dev, void *data,
1341 struct drm_file *file_priv);
1342extern int drm_irq_install(struct drm_device *dev, int irq);
1343extern int drm_irq_uninstall(struct drm_device *dev);
1344
1345extern int drm_vblank_init(struct drm_device *dev, int num_crtcs);
1346extern int drm_wait_vblank(struct drm_device *dev, void *data,
1347 struct drm_file *filp);
1348extern u32 drm_vblank_count(struct drm_device *dev, int crtc);
1349extern u32 drm_vblank_count_and_time(struct drm_device *dev, int crtc,
1350 struct timeval *vblanktime);
1351extern void drm_send_vblank_event(struct drm_device *dev, int crtc,
1352 struct drm_pending_vblank_event *e);
1353extern bool drm_handle_vblank(struct drm_device *dev, int crtc);
1354extern int drm_vblank_get(struct drm_device *dev, int crtc);
1355extern void drm_vblank_put(struct drm_device *dev, int crtc);
1356extern int drm_crtc_vblank_get(struct drm_crtc *crtc);
1357extern void drm_crtc_vblank_put(struct drm_crtc *crtc);
1358extern void drm_vblank_off(struct drm_device *dev, int crtc);
1359extern void drm_vblank_on(struct drm_device *dev, int crtc);
1360extern void drm_crtc_vblank_off(struct drm_crtc *crtc);
1361extern void drm_crtc_vblank_on(struct drm_crtc *crtc);
1362extern void drm_vblank_cleanup(struct drm_device *dev);
1363
1364extern u32 drm_get_last_vbltimestamp(struct drm_device *dev, int crtc,
1365 struct timeval *tvblank, unsigned flags);
1366extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
1367 int crtc, int *max_error,
1368 struct timeval *vblank_time,
1369 unsigned flags,
1370 const struct drm_crtc *refcrtc,
1371 const struct drm_display_mode *mode);
1372extern void drm_calc_timestamping_constants(struct drm_crtc *crtc,
1373 const struct drm_display_mode *mode);
1374
1375
1376
1377extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
1378extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
1379extern int drm_modeset_ctl(struct drm_device *dev, void *data,
1380 struct drm_file *file_priv);
1381
1382
1383
1384#include <drm/drm_agpsupport.h>
1385
1386
1387extern int drm_setmaster_ioctl(struct drm_device *dev, void *data,
1388 struct drm_file *file_priv);
1389extern int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
1390 struct drm_file *file_priv);
1391struct drm_master *drm_master_create(struct drm_minor *minor);
1392extern struct drm_master *drm_master_get(struct drm_master *master);
1393extern void drm_master_put(struct drm_master **master);
1394
1395extern void drm_put_dev(struct drm_device *dev);
1396extern void drm_unplug_dev(struct drm_device *dev);
1397extern unsigned int drm_debug;
1398extern unsigned int drm_rnodes;
1399extern unsigned int drm_universal_planes;
1400
1401extern unsigned int drm_vblank_offdelay;
1402extern unsigned int drm_timestamp_precision;
1403extern unsigned int drm_timestamp_monotonic;
1404
1405extern struct class *drm_class;
1406extern struct dentry *drm_debugfs_root;
1407
1408extern struct idr drm_minors_idr;
1409
1410extern struct drm_local_map *drm_getsarea(struct drm_device *dev);
1411
1412
1413#if defined(CONFIG_DEBUG_FS)
1414extern int drm_debugfs_init(struct drm_minor *minor, int minor_id,
1415 struct dentry *root);
1416extern int drm_debugfs_create_files(const struct drm_info_list *files,
1417 int count, struct dentry *root,
1418 struct drm_minor *minor);
1419extern int drm_debugfs_remove_files(const struct drm_info_list *files,
1420 int count, struct drm_minor *minor);
1421extern int drm_debugfs_cleanup(struct drm_minor *minor);
1422#else
1423static inline int drm_debugfs_init(struct drm_minor *minor, int minor_id,
1424 struct dentry *root)
1425{
1426 return 0;
1427}
1428
1429static inline int drm_debugfs_create_files(const struct drm_info_list *files,
1430 int count, struct dentry *root,
1431 struct drm_minor *minor)
1432{
1433 return 0;
1434}
1435
1436static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
1437 int count, struct drm_minor *minor)
1438{
1439 return 0;
1440}
1441
1442static inline int drm_debugfs_cleanup(struct drm_minor *minor)
1443{
1444 return 0;
1445}
1446#endif
1447
1448
1449extern int drm_name_info(struct seq_file *m, void *data);
1450extern int drm_vm_info(struct seq_file *m, void *data);
1451extern int drm_bufs_info(struct seq_file *m, void *data);
1452extern int drm_vblank_info(struct seq_file *m, void *data);
1453extern int drm_clients_info(struct seq_file *m, void* data);
1454extern int drm_gem_name_info(struct seq_file *m, void *data);
1455
1456
1457extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
1458 struct drm_gem_object *obj, int flags);
1459extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
1460 struct drm_file *file_priv, uint32_t handle, uint32_t flags,
1461 int *prime_fd);
1462extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
1463 struct dma_buf *dma_buf);
1464extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
1465 struct drm_file *file_priv, int prime_fd, uint32_t *handle);
1466extern void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
1467
1468extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
1469 struct drm_file *file_priv);
1470extern int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
1471 struct drm_file *file_priv);
1472
1473extern int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages,
1474 dma_addr_t *addrs, int max_pages);
1475extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages);
1476extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg);
1477
1478int drm_gem_dumb_destroy(struct drm_file *file,
1479 struct drm_device *dev,
1480 uint32_t handle);
1481
1482void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv);
1483void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv);
1484void drm_prime_remove_buf_handle_locked(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf);
1485
1486#if DRM_DEBUG_CODE
1487extern int drm_vma_info(struct seq_file *m, void *data);
1488#endif
1489
1490
1491extern void drm_legacy_sg_cleanup(struct drm_device *dev);
1492extern int drm_sg_alloc(struct drm_device *dev, void *data,
1493 struct drm_file *file_priv);
1494extern int drm_sg_free(struct drm_device *dev, void *data,
1495 struct drm_file *file_priv);
1496
1497
1498extern int drm_ati_pcigart_init(struct drm_device *dev,
1499 struct drm_ati_pcigart_info * gart_info);
1500extern int drm_ati_pcigart_cleanup(struct drm_device *dev,
1501 struct drm_ati_pcigart_info * gart_info);
1502
1503extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size,
1504 size_t align);
1505extern void __drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah);
1506extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah);
1507extern int drm_pci_set_unique(struct drm_device *dev,
1508 struct drm_master *master,
1509 struct drm_unique *u);
1510
1511
1512struct drm_sysfs_class;
1513extern struct class *drm_sysfs_create(struct module *owner, char *name);
1514extern void drm_sysfs_destroy(void);
1515extern int drm_sysfs_device_add(struct drm_minor *minor);
1516extern void drm_sysfs_hotplug_event(struct drm_device *dev);
1517extern void drm_sysfs_device_remove(struct drm_minor *minor);
1518extern int drm_sysfs_connector_add(struct drm_connector *connector);
1519extern void drm_sysfs_connector_remove(struct drm_connector *connector);
1520
1521
1522int drm_gem_init(struct drm_device *dev);
1523void drm_gem_destroy(struct drm_device *dev);
1524void drm_gem_object_release(struct drm_gem_object *obj);
1525void drm_gem_object_free(struct kref *kref);
1526int drm_gem_object_init(struct drm_device *dev,
1527 struct drm_gem_object *obj, size_t size);
1528void drm_gem_private_object_init(struct drm_device *dev,
1529 struct drm_gem_object *obj, size_t size);
1530void drm_gem_vm_open(struct vm_area_struct *vma);
1531void drm_gem_vm_close(struct vm_area_struct *vma);
1532int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
1533 struct vm_area_struct *vma);
1534int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma);
1535
1536#include <drm/drm_global.h>
1537
1538static inline void
1539drm_gem_object_reference(struct drm_gem_object *obj)
1540{
1541 kref_get(&obj->refcount);
1542}
1543
1544static inline void
1545drm_gem_object_unreference(struct drm_gem_object *obj)
1546{
1547 if (obj != NULL)
1548 kref_put(&obj->refcount, drm_gem_object_free);
1549}
1550
1551static inline void
1552drm_gem_object_unreference_unlocked(struct drm_gem_object *obj)
1553{
1554 if (obj && !atomic_add_unless(&obj->refcount.refcount, -1, 1)) {
1555 struct drm_device *dev = obj->dev;
1556
1557 mutex_lock(&dev->struct_mutex);
1558 if (likely(atomic_dec_and_test(&obj->refcount.refcount)))
1559 drm_gem_object_free(&obj->refcount);
1560 mutex_unlock(&dev->struct_mutex);
1561 }
1562}
1563
1564int drm_gem_handle_create_tail(struct drm_file *file_priv,
1565 struct drm_gem_object *obj,
1566 u32 *handlep);
1567int drm_gem_handle_create(struct drm_file *file_priv,
1568 struct drm_gem_object *obj,
1569 u32 *handlep);
1570int drm_gem_handle_delete(struct drm_file *filp, u32 handle);
1571
1572
1573void drm_gem_free_mmap_offset(struct drm_gem_object *obj);
1574int drm_gem_create_mmap_offset(struct drm_gem_object *obj);
1575int drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size);
1576
1577struct page **drm_gem_get_pages(struct drm_gem_object *obj, gfp_t gfpmask);
1578void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages,
1579 bool dirty, bool accessed);
1580
1581struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev,
1582 struct drm_file *filp,
1583 u32 handle);
1584int drm_gem_close_ioctl(struct drm_device *dev, void *data,
1585 struct drm_file *file_priv);
1586int drm_gem_flink_ioctl(struct drm_device *dev, void *data,
1587 struct drm_file *file_priv);
1588int drm_gem_open_ioctl(struct drm_device *dev, void *data,
1589 struct drm_file *file_priv);
1590void drm_gem_open(struct drm_device *dev, struct drm_file *file_private);
1591void drm_gem_release(struct drm_device *dev, struct drm_file *file_private);
1592
1593extern void drm_core_ioremap(struct drm_local_map *map, struct drm_device *dev);
1594extern void drm_core_ioremap_wc(struct drm_local_map *map, struct drm_device *dev);
1595extern void drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev);
1596
1597static __inline__ struct drm_local_map *drm_core_findmap(struct drm_device *dev,
1598 unsigned int token)
1599{
1600 struct drm_map_list *_entry;
1601 list_for_each_entry(_entry, &dev->maplist, head)
1602 if (_entry->user_token == token)
1603 return _entry->map;
1604 return NULL;
1605}
1606
1607static __inline__ void drm_core_dropmap(struct drm_local_map *map)
1608{
1609}
1610
1611#include <drm/drm_mem_util.h>
1612
1613struct drm_device *drm_dev_alloc(struct drm_driver *driver,
1614 struct device *parent);
1615void drm_dev_ref(struct drm_device *dev);
1616void drm_dev_unref(struct drm_device *dev);
1617int drm_dev_register(struct drm_device *dev, unsigned long flags);
1618void drm_dev_unregister(struct drm_device *dev);
1619int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...);
1620
1621struct drm_minor *drm_minor_acquire(unsigned int minor_id);
1622void drm_minor_release(struct drm_minor *minor);
1623
1624
1625
1626
1627static __inline__ int drm_pci_device_is_agp(struct drm_device *dev)
1628{
1629 if (dev->driver->device_is_agp != NULL) {
1630 int err = (*dev->driver->device_is_agp) (dev);
1631
1632 if (err != 2) {
1633 return err;
1634 }
1635 }
1636
1637 return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP);
1638}
1639void drm_pci_agp_destroy(struct drm_device *dev);
1640
1641extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
1642extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
1643extern int drm_get_pci_dev(struct pci_dev *pdev,
1644 const struct pci_device_id *ent,
1645 struct drm_driver *driver);
1646
1647#define DRM_PCIE_SPEED_25 1
1648#define DRM_PCIE_SPEED_50 2
1649#define DRM_PCIE_SPEED_80 4
1650
1651extern int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 *speed_mask);
1652
1653
1654extern int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device);
1655
1656
1657static __inline__ bool drm_can_sleep(void)
1658{
1659 if (in_atomic() || in_dbg_master() || irqs_disabled())
1660 return false;
1661 return true;
1662}
1663
1664#endif
1665#endif
1666