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