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