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