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#ifndef _DRM_P_H_
33#define _DRM_P_H_
34
35#include <linux/agp_backend.h>
36#include <linux/cdev.h>
37#include <linux/dma-mapping.h>
38#include <linux/file.h>
39#include <linux/fs.h>
40#include <linux/highmem.h>
41#include <linux/idr.h>
42#include <linux/init.h>
43#include <linux/io.h>
44#include <linux/jiffies.h>
45#include <linux/kernel.h>
46#include <linux/kref.h>
47#include <linux/miscdevice.h>
48#include <linux/mm.h>
49#include <linux/mutex.h>
50#include <linux/pci.h>
51#include <linux/platform_device.h>
52#include <linux/poll.h>
53#include <linux/ratelimit.h>
54#include <linux/sched.h>
55#include <linux/slab.h>
56#include <linux/types.h>
57#include <linux/vmalloc.h>
58#include <linux/workqueue.h>
59
60#include <asm/mman.h>
61#include <asm/pgalloc.h>
62#include <asm/uaccess.h>
63
64#include <uapi/drm/drm.h>
65#include <uapi/drm/drm_mode.h>
66
67#include <drm/drm_agpsupport.h>
68#include <drm/drm_crtc.h>
69#include <drm/drm_global.h>
70#include <drm/drm_hashtab.h>
71#include <drm/drm_mem_util.h>
72#include <drm/drm_mm.h>
73#include <drm/drm_os_linux.h>
74#include <drm/drm_sarea.h>
75#include <drm/drm_vma_manager.h>
76
77struct module;
78
79struct drm_file;
80struct drm_device;
81struct drm_agp_head;
82struct drm_local_map;
83struct drm_device_dma;
84struct drm_dma_handle;
85struct drm_gem_object;
86
87struct device_node;
88struct videomode;
89struct reservation_object;
90struct dma_buf_attachment;
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126#define DRM_UT_CORE 0x01
127#define DRM_UT_DRIVER 0x02
128#define DRM_UT_KMS 0x04
129#define DRM_UT_PRIME 0x08
130#define DRM_UT_ATOMIC 0x10
131#define DRM_UT_VBL 0x20
132
133extern __printf(2, 3)
134void drm_ut_debug_printk(const char *function_name,
135 const char *format, ...);
136extern __printf(1, 2)
137void drm_err(const char *format, ...);
138
139
140
141
142
143
144#define DRIVER_USE_AGP 0x1
145#define DRIVER_PCI_DMA 0x8
146#define DRIVER_SG 0x10
147#define DRIVER_HAVE_DMA 0x20
148#define DRIVER_HAVE_IRQ 0x40
149#define DRIVER_IRQ_SHARED 0x80
150#define DRIVER_GEM 0x1000
151#define DRIVER_MODESET 0x2000
152#define DRIVER_PRIME 0x4000
153#define DRIVER_RENDER 0x8000
154#define DRIVER_ATOMIC 0x10000
155#define DRIVER_KMS_LEGACY_CONTEXT 0x20000
156
157
158
159
160
161
162
163
164
165
166
167#define DRM_ERROR(fmt, ...) \
168 drm_err(fmt, ##__VA_ARGS__)
169
170
171
172
173
174
175
176#define DRM_ERROR_RATELIMITED(fmt, ...) \
177({ \
178 static DEFINE_RATELIMIT_STATE(_rs, \
179 DEFAULT_RATELIMIT_INTERVAL, \
180 DEFAULT_RATELIMIT_BURST); \
181 \
182 if (__ratelimit(&_rs)) \
183 drm_err(fmt, ##__VA_ARGS__); \
184})
185
186#define DRM_INFO(fmt, ...) \
187 printk(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__)
188
189#define DRM_INFO_ONCE(fmt, ...) \
190 printk_once(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__)
191
192
193
194
195
196
197
198#define DRM_DEBUG(fmt, args...) \
199 do { \
200 if (unlikely(drm_debug & DRM_UT_CORE)) \
201 drm_ut_debug_printk(__func__, fmt, ##args); \
202 } while (0)
203
204#define DRM_DEBUG_DRIVER(fmt, args...) \
205 do { \
206 if (unlikely(drm_debug & DRM_UT_DRIVER)) \
207 drm_ut_debug_printk(__func__, fmt, ##args); \
208 } while (0)
209#define DRM_DEBUG_KMS(fmt, args...) \
210 do { \
211 if (unlikely(drm_debug & DRM_UT_KMS)) \
212 drm_ut_debug_printk(__func__, fmt, ##args); \
213 } while (0)
214#define DRM_DEBUG_PRIME(fmt, args...) \
215 do { \
216 if (unlikely(drm_debug & DRM_UT_PRIME)) \
217 drm_ut_debug_printk(__func__, fmt, ##args); \
218 } while (0)
219#define DRM_DEBUG_ATOMIC(fmt, args...) \
220 do { \
221 if (unlikely(drm_debug & DRM_UT_ATOMIC)) \
222 drm_ut_debug_printk(__func__, fmt, ##args); \
223 } while (0)
224#define DRM_DEBUG_VBL(fmt, args...) \
225 do { \
226 if (unlikely(drm_debug & DRM_UT_VBL)) \
227 drm_ut_debug_printk(__func__, fmt, ##args); \
228 } while (0)
229
230
231
232
233
234
235
236#define DRM_IF_VERSION(maj, min) (maj << 16 | min)
237
238
239
240
241
242
243
244
245
246typedef int drm_ioctl_t(struct drm_device *dev, void *data,
247 struct drm_file *file_priv);
248
249typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
250 unsigned long arg);
251
252#define DRM_IOCTL_NR(n) _IOC_NR(n)
253#define DRM_MAJOR 226
254
255#define DRM_AUTH 0x1
256#define DRM_MASTER 0x2
257#define DRM_ROOT_ONLY 0x4
258#define DRM_CONTROL_ALLOW 0x8
259#define DRM_UNLOCKED 0x10
260#define DRM_RENDER_ALLOW 0x20
261
262struct drm_ioctl_desc {
263 unsigned int cmd;
264 int flags;
265 drm_ioctl_t *func;
266 const char *name;
267};
268
269
270
271
272
273
274#define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags) \
275 [DRM_IOCTL_NR(DRM_IOCTL_##ioctl) - DRM_COMMAND_BASE] = { \
276 .cmd = DRM_IOCTL_##ioctl, \
277 .func = _func, \
278 .flags = _flags, \
279 .name = #ioctl \
280 }
281
282
283struct drm_pending_event {
284 struct drm_event *event;
285 struct list_head link;
286 struct drm_file *file_priv;
287 pid_t pid;
288
289 void (*destroy)(struct drm_pending_event *event);
290};
291
292
293struct drm_prime_file_private {
294 struct list_head head;
295 struct mutex lock;
296};
297
298
299struct drm_file {
300 unsigned authenticated :1;
301
302 unsigned is_master :1;
303
304 unsigned stereo_allowed :1;
305
306
307
308
309 unsigned universal_planes:1;
310
311 unsigned atomic:1;
312
313
314
315
316 unsigned allowed_master:1;
317
318 struct pid *pid;
319 kuid_t uid;
320 drm_magic_t magic;
321 struct list_head lhead;
322 struct drm_minor *minor;
323 unsigned long lock_count;
324
325
326 struct idr object_idr;
327
328 spinlock_t table_lock;
329
330 struct file *filp;
331 void *driver_priv;
332
333 struct drm_master *master;
334
335
336
337
338
339
340
341 struct list_head fbs;
342 struct mutex fbs_lock;
343
344
345
346 struct list_head blobs;
347
348 wait_queue_head_t event_wait;
349 struct list_head event_list;
350 int event_space;
351
352 struct drm_prime_file_private prime;
353};
354
355
356
357
358struct drm_lock_data {
359 struct drm_hw_lock *hw_lock;
360
361 struct drm_file *file_priv;
362 wait_queue_head_t lock_queue;
363 unsigned long lock_time;
364 spinlock_t spinlock;
365 uint32_t kernel_waiters;
366 uint32_t user_waiters;
367 int idle_has_lock;
368};
369
370
371
372
373
374
375
376
377
378
379
380
381struct drm_master {
382 struct kref refcount;
383 struct drm_minor *minor;
384 char *unique;
385 int unique_len;
386 struct idr magic_map;
387 struct drm_lock_data lock;
388 void *driver_priv;
389};
390
391
392
393
394#define DRM_VBLANKTIME_RBSIZE 2
395
396
397#define DRM_CALLED_FROM_VBLIRQ 1
398#define DRM_VBLANKTIME_SCANOUTPOS_METHOD (1 << 0)
399#define DRM_VBLANKTIME_IN_VBLANK (1 << 1)
400
401
402#define DRM_SCANOUTPOS_VALID (1 << 0)
403#define DRM_SCANOUTPOS_IN_VBLANK (1 << 1)
404#define DRM_SCANOUTPOS_ACCURATE (1 << 2)
405
406
407
408
409
410
411struct drm_driver {
412 int (*load) (struct drm_device *, unsigned long flags);
413 int (*firstopen) (struct drm_device *);
414 int (*open) (struct drm_device *, struct drm_file *);
415 void (*preclose) (struct drm_device *, struct drm_file *file_priv);
416 void (*postclose) (struct drm_device *, struct drm_file *);
417 void (*lastclose) (struct drm_device *);
418 int (*unload) (struct drm_device *);
419 int (*suspend) (struct drm_device *, pm_message_t state);
420 int (*resume) (struct drm_device *);
421 int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
422 int (*dma_quiescent) (struct drm_device *);
423 int (*context_dtor) (struct drm_device *dev, int context);
424 int (*set_busid)(struct drm_device *dev, struct drm_master *master);
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443 u32 (*get_vblank_counter) (struct drm_device *dev, unsigned int pipe);
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458 int (*enable_vblank) (struct drm_device *dev, unsigned int pipe);
459
460
461
462
463
464
465
466
467
468
469 void (*disable_vblank) (struct drm_device *dev, unsigned int pipe);
470
471
472
473
474
475
476
477
478
479
480
481
482 int (*device_is_agp) (struct drm_device *dev);
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515 int (*get_scanout_position) (struct drm_device *dev, unsigned int pipe,
516 unsigned int flags, int *vpos, int *hpos,
517 ktime_t *stime, ktime_t *etime,
518 const struct drm_display_mode *mode);
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550 int (*get_vblank_timestamp) (struct drm_device *dev, unsigned int pipe,
551 int *max_error,
552 struct timeval *vblank_time,
553 unsigned flags);
554
555
556
557 irqreturn_t(*irq_handler) (int irq, void *arg);
558 void (*irq_preinstall) (struct drm_device *dev);
559 int (*irq_postinstall) (struct drm_device *dev);
560 void (*irq_uninstall) (struct drm_device *dev);
561
562
563 int (*master_create)(struct drm_device *dev, struct drm_master *master);
564 void (*master_destroy)(struct drm_device *dev, struct drm_master *master);
565
566
567
568
569
570 int (*master_set)(struct drm_device *dev, struct drm_file *file_priv,
571 bool from_open);
572 void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv,
573 bool from_release);
574
575 int (*debugfs_init)(struct drm_minor *minor);
576 void (*debugfs_cleanup)(struct drm_minor *minor);
577
578
579
580
581
582
583
584 void (*gem_free_object) (struct drm_gem_object *obj);
585 int (*gem_open_object) (struct drm_gem_object *, struct drm_file *);
586 void (*gem_close_object) (struct drm_gem_object *, struct drm_file *);
587
588
589
590 int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv,
591 uint32_t handle, uint32_t flags, int *prime_fd);
592
593 int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv,
594 int prime_fd, uint32_t *handle);
595
596 struct dma_buf * (*gem_prime_export)(struct drm_device *dev,
597 struct drm_gem_object *obj, int flags);
598
599 struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
600 struct dma_buf *dma_buf);
601
602 int (*gem_prime_pin)(struct drm_gem_object *obj);
603 void (*gem_prime_unpin)(struct drm_gem_object *obj);
604 struct reservation_object * (*gem_prime_res_obj)(
605 struct drm_gem_object *obj);
606 struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj);
607 struct drm_gem_object *(*gem_prime_import_sg_table)(
608 struct drm_device *dev,
609 struct dma_buf_attachment *attach,
610 struct sg_table *sgt);
611 void *(*gem_prime_vmap)(struct drm_gem_object *obj);
612 void (*gem_prime_vunmap)(struct drm_gem_object *obj, void *vaddr);
613 int (*gem_prime_mmap)(struct drm_gem_object *obj,
614 struct vm_area_struct *vma);
615
616
617 void (*vgaarb_irq)(struct drm_device *dev, bool state);
618
619
620 int (*dumb_create)(struct drm_file *file_priv,
621 struct drm_device *dev,
622 struct drm_mode_create_dumb *args);
623 int (*dumb_map_offset)(struct drm_file *file_priv,
624 struct drm_device *dev, uint32_t handle,
625 uint64_t *offset);
626 int (*dumb_destroy)(struct drm_file *file_priv,
627 struct drm_device *dev,
628 uint32_t handle);
629
630
631 const struct vm_operations_struct *gem_vm_ops;
632
633 int major;
634 int minor;
635 int patchlevel;
636 char *name;
637 char *desc;
638 char *date;
639
640 u32 driver_features;
641 int dev_priv_size;
642 const struct drm_ioctl_desc *ioctls;
643 int num_ioctls;
644 const struct file_operations *fops;
645
646
647 struct list_head legacy_dev_list;
648};
649
650enum drm_minor_type {
651 DRM_MINOR_LEGACY,
652 DRM_MINOR_CONTROL,
653 DRM_MINOR_RENDER,
654 DRM_MINOR_CNT,
655};
656
657
658
659
660
661struct drm_info_list {
662 const char *name;
663 int (*show)(struct seq_file*, void*);
664 u32 driver_features;
665 void *data;
666};
667
668
669
670
671struct drm_info_node {
672 struct list_head list;
673 struct drm_minor *minor;
674 const struct drm_info_list *info_ent;
675 struct dentry *dent;
676};
677
678
679
680
681struct drm_minor {
682 int index;
683 int type;
684 struct device *kdev;
685 struct drm_device *dev;
686
687 struct dentry *debugfs_root;
688
689 struct list_head debugfs_list;
690 struct mutex debugfs_lock;
691
692
693 struct drm_master *master;
694};
695
696
697struct drm_pending_vblank_event {
698 struct drm_pending_event base;
699 unsigned int pipe;
700 struct drm_event_vblank event;
701};
702
703struct drm_vblank_crtc {
704 struct drm_device *dev;
705 wait_queue_head_t queue;
706 struct timer_list disable_timer;
707
708
709 u32 count;
710
711 struct timeval time[DRM_VBLANKTIME_RBSIZE];
712
713 atomic_t refcount;
714 u32 last;
715
716 u32 last_wait;
717 unsigned int inmodeset;
718 unsigned int pipe;
719 int framedur_ns;
720 int linedur_ns;
721 bool enabled;
722
723};
724
725
726
727
728
729struct drm_device {
730 struct list_head legacy_dev_list;
731 int if_version;
732
733
734
735 struct kref ref;
736 struct device *dev;
737 struct drm_driver *driver;
738 void *dev_private;
739 struct drm_minor *control;
740 struct drm_minor *primary;
741 struct drm_minor *render;
742 atomic_t unplugged;
743 struct inode *anon_inode;
744 char *unique;
745
746
747
748
749 struct mutex struct_mutex;
750 struct mutex master_mutex;
751
752
753
754
755 int open_count;
756 spinlock_t buf_lock;
757 int buf_use;
758 atomic_t buf_alloc;
759
760
761 struct list_head filelist;
762
763
764
765 struct list_head maplist;
766 struct drm_open_hash map_hash;
767
768
769
770 struct list_head ctxlist;
771 struct mutex ctxlist_mutex;
772
773 struct idr ctx_idr;
774
775 struct list_head vmalist;
776
777
778
779
780
781 struct drm_device_dma *dma;
782
783
784
785
786
787 __volatile__ long context_flag;
788 int last_context;
789
790
791
792
793 bool irq_enabled;
794 int irq;
795
796
797
798
799
800
801
802 bool vblank_disable_allowed;
803
804
805
806
807
808
809
810
811
812 bool vblank_disable_immediate;
813
814
815 struct drm_vblank_crtc *vblank;
816
817 spinlock_t vblank_time_lock;
818 spinlock_t vbl_lock;
819
820 u32 max_vblank_count;
821
822
823
824
825 struct list_head vblank_event_list;
826 spinlock_t event_lock;
827
828
829
830 struct drm_agp_head *agp;
831
832 struct pci_dev *pdev;
833#ifdef __alpha__
834 struct pci_controller *hose;
835#endif
836
837 struct platform_device *platformdev;
838 struct virtio_device *virtdev;
839
840 struct drm_sg_mem *sg;
841 unsigned int num_crtcs;
842
843 struct {
844 int context;
845 struct drm_hw_lock *lock;
846 } sigdata;
847
848 struct drm_local_map *agp_buffer_map;
849 unsigned int agp_buffer_token;
850
851 struct drm_mode_config mode_config;
852
853
854
855 struct mutex object_name_lock;
856 struct idr object_name_idr;
857 struct drm_vma_offset_manager *vma_offset_manager;
858
859 int switch_power_state;
860};
861
862#define DRM_SWITCH_POWER_ON 0
863#define DRM_SWITCH_POWER_OFF 1
864#define DRM_SWITCH_POWER_CHANGING 2
865#define DRM_SWITCH_POWER_DYNAMIC_OFF 3
866
867static __inline__ int drm_core_check_feature(struct drm_device *dev,
868 int feature)
869{
870 return ((dev->driver->driver_features & feature) ? 1 : 0);
871}
872
873static inline void drm_device_set_unplugged(struct drm_device *dev)
874{
875 smp_wmb();
876 atomic_set(&dev->unplugged, 1);
877}
878
879static inline int drm_device_is_unplugged(struct drm_device *dev)
880{
881 int ret = atomic_read(&dev->unplugged);
882 smp_rmb();
883 return ret;
884}
885
886static inline bool drm_is_render_client(const struct drm_file *file_priv)
887{
888 return file_priv->minor->type == DRM_MINOR_RENDER;
889}
890
891static inline bool drm_is_control_client(const struct drm_file *file_priv)
892{
893 return file_priv->minor->type == DRM_MINOR_CONTROL;
894}
895
896static inline bool drm_is_primary_client(const struct drm_file *file_priv)
897{
898 return file_priv->minor->type == DRM_MINOR_LEGACY;
899}
900
901
902
903
904
905
906extern int drm_ioctl_permit(u32 flags, struct drm_file *file_priv);
907extern long drm_ioctl(struct file *filp,
908 unsigned int cmd, unsigned long arg);
909extern long drm_compat_ioctl(struct file *filp,
910 unsigned int cmd, unsigned long arg);
911extern bool drm_ioctl_flags(unsigned int nr, unsigned int *flags);
912
913
914extern int drm_open(struct inode *inode, struct file *filp);
915extern ssize_t drm_read(struct file *filp, char __user *buffer,
916 size_t count, loff_t *offset);
917extern int drm_release(struct inode *inode, struct file *filp);
918extern int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv);
919
920
921extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
922
923
924int drm_noop(struct drm_device *dev, void *data,
925 struct drm_file *file_priv);
926int drm_invalid_op(struct drm_device *dev, void *data,
927 struct drm_file *file_priv);
928
929
930void drm_clflush_pages(struct page *pages[], unsigned long num_pages);
931void drm_clflush_sg(struct sg_table *st);
932void drm_clflush_virt_range(void *addr, unsigned long length);
933
934
935
936
937
938
939
940extern int drm_irq_install(struct drm_device *dev, int irq);
941extern int drm_irq_uninstall(struct drm_device *dev);
942
943extern int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs);
944extern int drm_wait_vblank(struct drm_device *dev, void *data,
945 struct drm_file *filp);
946extern u32 drm_vblank_count(struct drm_device *dev, unsigned int pipe);
947extern u32 drm_crtc_vblank_count(struct drm_crtc *crtc);
948extern u32 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
949 struct timeval *vblanktime);
950extern u32 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc,
951 struct timeval *vblanktime);
952extern void drm_send_vblank_event(struct drm_device *dev, unsigned int pipe,
953 struct drm_pending_vblank_event *e);
954extern void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
955 struct drm_pending_vblank_event *e);
956extern void drm_arm_vblank_event(struct drm_device *dev, unsigned int pipe,
957 struct drm_pending_vblank_event *e);
958extern void drm_crtc_arm_vblank_event(struct drm_crtc *crtc,
959 struct drm_pending_vblank_event *e);
960extern bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe);
961extern bool drm_crtc_handle_vblank(struct drm_crtc *crtc);
962extern int drm_vblank_get(struct drm_device *dev, unsigned int pipe);
963extern void drm_vblank_put(struct drm_device *dev, unsigned int pipe);
964extern int drm_crtc_vblank_get(struct drm_crtc *crtc);
965extern void drm_crtc_vblank_put(struct drm_crtc *crtc);
966extern void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe);
967extern void drm_crtc_wait_one_vblank(struct drm_crtc *crtc);
968extern void drm_vblank_off(struct drm_device *dev, unsigned int pipe);
969extern void drm_vblank_on(struct drm_device *dev, unsigned int pipe);
970extern void drm_crtc_vblank_off(struct drm_crtc *crtc);
971extern void drm_crtc_vblank_reset(struct drm_crtc *crtc);
972extern void drm_crtc_vblank_on(struct drm_crtc *crtc);
973extern void drm_vblank_cleanup(struct drm_device *dev);
974extern u32 drm_vblank_no_hw_counter(struct drm_device *dev, unsigned int pipe);
975
976extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
977 unsigned int pipe, int *max_error,
978 struct timeval *vblank_time,
979 unsigned flags,
980 const struct drm_display_mode *mode);
981extern void drm_calc_timestamping_constants(struct drm_crtc *crtc,
982 const struct drm_display_mode *mode);
983
984
985
986
987
988
989
990
991static inline wait_queue_head_t *drm_crtc_vblank_waitqueue(struct drm_crtc *crtc)
992{
993 return &crtc->dev->vblank[drm_crtc_index(crtc)].queue;
994}
995
996
997extern void drm_vblank_pre_modeset(struct drm_device *dev, unsigned int pipe);
998extern void drm_vblank_post_modeset(struct drm_device *dev, unsigned int pipe);
999
1000
1001extern struct drm_master *drm_master_get(struct drm_master *master);
1002extern void drm_master_put(struct drm_master **master);
1003
1004extern void drm_put_dev(struct drm_device *dev);
1005extern void drm_unplug_dev(struct drm_device *dev);
1006extern unsigned int drm_debug;
1007extern bool drm_atomic;
1008
1009
1010#if defined(CONFIG_DEBUG_FS)
1011extern int drm_debugfs_create_files(const struct drm_info_list *files,
1012 int count, struct dentry *root,
1013 struct drm_minor *minor);
1014extern int drm_debugfs_remove_files(const struct drm_info_list *files,
1015 int count, struct drm_minor *minor);
1016#else
1017static inline int drm_debugfs_create_files(const struct drm_info_list *files,
1018 int count, struct dentry *root,
1019 struct drm_minor *minor)
1020{
1021 return 0;
1022}
1023
1024static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
1025 int count, struct drm_minor *minor)
1026{
1027 return 0;
1028}
1029#endif
1030
1031extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
1032 struct drm_gem_object *obj, int flags);
1033extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
1034 struct drm_file *file_priv, uint32_t handle, uint32_t flags,
1035 int *prime_fd);
1036extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
1037 struct dma_buf *dma_buf);
1038extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
1039 struct drm_file *file_priv, int prime_fd, uint32_t *handle);
1040extern void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
1041
1042extern int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages,
1043 dma_addr_t *addrs, int max_pages);
1044extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, unsigned int nr_pages);
1045extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg);
1046
1047
1048extern struct drm_dma_handle *drm_pci_alloc(struct drm_device *dev, size_t size,
1049 size_t align);
1050extern void drm_pci_free(struct drm_device *dev, struct drm_dma_handle * dmah);
1051
1052
1053extern void drm_sysfs_hotplug_event(struct drm_device *dev);
1054
1055
1056struct drm_device *drm_dev_alloc(struct drm_driver *driver,
1057 struct device *parent);
1058void drm_dev_ref(struct drm_device *dev);
1059void drm_dev_unref(struct drm_device *dev);
1060int drm_dev_register(struct drm_device *dev, unsigned long flags);
1061void drm_dev_unregister(struct drm_device *dev);
1062int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...);
1063
1064struct drm_minor *drm_minor_acquire(unsigned int minor_id);
1065void drm_minor_release(struct drm_minor *minor);
1066
1067
1068
1069
1070static __inline__ int drm_pci_device_is_agp(struct drm_device *dev)
1071{
1072 if (dev->driver->device_is_agp != NULL) {
1073 int err = (*dev->driver->device_is_agp) (dev);
1074
1075 if (err != 2) {
1076 return err;
1077 }
1078 }
1079
1080 return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP);
1081}
1082void drm_pci_agp_destroy(struct drm_device *dev);
1083
1084extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
1085extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
1086#ifdef CONFIG_PCI
1087extern int drm_get_pci_dev(struct pci_dev *pdev,
1088 const struct pci_device_id *ent,
1089 struct drm_driver *driver);
1090extern int drm_pci_set_busid(struct drm_device *dev, struct drm_master *master);
1091#else
1092static inline int drm_get_pci_dev(struct pci_dev *pdev,
1093 const struct pci_device_id *ent,
1094 struct drm_driver *driver)
1095{
1096 return -ENOSYS;
1097}
1098
1099static inline int drm_pci_set_busid(struct drm_device *dev,
1100 struct drm_master *master)
1101{
1102 return -ENOSYS;
1103}
1104#endif
1105
1106#define DRM_PCIE_SPEED_25 1
1107#define DRM_PCIE_SPEED_50 2
1108#define DRM_PCIE_SPEED_80 4
1109
1110extern int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 *speed_mask);
1111
1112
1113extern int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device);
1114extern int drm_platform_set_busid(struct drm_device *d, struct drm_master *m);
1115
1116
1117static __inline__ bool drm_can_sleep(void)
1118{
1119 if (in_atomic() || in_dbg_master() || irqs_disabled())
1120 return false;
1121 return true;
1122}
1123
1124#endif
1125