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