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