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