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 wait_queue_head_t event_wait;
330 struct list_head event_list;
331 int event_space;
332
333 struct drm_prime_file_private prime;
334};
335
336
337
338
339struct drm_lock_data {
340 struct drm_hw_lock *hw_lock;
341
342 struct drm_file *file_priv;
343 wait_queue_head_t lock_queue;
344 unsigned long lock_time;
345 spinlock_t spinlock;
346 uint32_t kernel_waiters;
347 uint32_t user_waiters;
348 int idle_has_lock;
349};
350
351
352
353
354
355
356
357
358
359
360
361
362
363struct drm_master {
364 struct kref refcount;
365 struct drm_minor *minor;
366 char *unique;
367 int unique_len;
368 struct drm_open_hash magiclist;
369 struct list_head magicfree;
370 struct drm_lock_data lock;
371 void *driver_priv;
372};
373
374
375
376
377#define DRM_VBLANKTIME_RBSIZE 2
378
379
380#define DRM_CALLED_FROM_VBLIRQ 1
381#define DRM_VBLANKTIME_SCANOUTPOS_METHOD (1 << 0)
382#define DRM_VBLANKTIME_IN_VBLANK (1 << 1)
383
384
385#define DRM_SCANOUTPOS_VALID (1 << 0)
386#define DRM_SCANOUTPOS_IN_VBLANK (1 << 1)
387#define DRM_SCANOUTPOS_ACCURATE (1 << 2)
388
389
390
391
392
393
394struct drm_driver {
395 int (*load) (struct drm_device *, unsigned long flags);
396 int (*firstopen) (struct drm_device *);
397 int (*open) (struct drm_device *, struct drm_file *);
398 void (*preclose) (struct drm_device *, struct drm_file *file_priv);
399 void (*postclose) (struct drm_device *, struct drm_file *);
400 void (*lastclose) (struct drm_device *);
401 int (*unload) (struct drm_device *);
402 int (*suspend) (struct drm_device *, pm_message_t state);
403 int (*resume) (struct drm_device *);
404 int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
405 int (*dma_quiescent) (struct drm_device *);
406 int (*context_dtor) (struct drm_device *dev, int context);
407 int (*set_busid)(struct drm_device *dev, struct drm_master *master);
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426 u32 (*get_vblank_counter) (struct drm_device *dev, int crtc);
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441 int (*enable_vblank) (struct drm_device *dev, int crtc);
442
443
444
445
446
447
448
449
450
451
452 void (*disable_vblank) (struct drm_device *dev, int crtc);
453
454
455
456
457
458
459
460
461
462
463
464
465 int (*device_is_agp) (struct drm_device *dev);
466
467
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 int (*get_scanout_position) (struct drm_device *dev, int crtc,
498 unsigned int flags,
499 int *vpos, int *hpos, ktime_t *stime,
500 ktime_t *etime);
501
502
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 int (*get_vblank_timestamp) (struct drm_device *dev, int crtc,
533 int *max_error,
534 struct timeval *vblank_time,
535 unsigned flags);
536
537
538
539 irqreturn_t(*irq_handler) (int irq, void *arg);
540 void (*irq_preinstall) (struct drm_device *dev);
541 int (*irq_postinstall) (struct drm_device *dev);
542 void (*irq_uninstall) (struct drm_device *dev);
543
544
545 int (*master_create)(struct drm_device *dev, struct drm_master *master);
546 void (*master_destroy)(struct drm_device *dev, struct drm_master *master);
547
548
549
550
551
552 int (*master_set)(struct drm_device *dev, struct drm_file *file_priv,
553 bool from_open);
554 void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv,
555 bool from_release);
556
557 int (*debugfs_init)(struct drm_minor *minor);
558 void (*debugfs_cleanup)(struct drm_minor *minor);
559
560
561
562
563
564
565
566 void (*gem_free_object) (struct drm_gem_object *obj);
567 int (*gem_open_object) (struct drm_gem_object *, struct drm_file *);
568 void (*gem_close_object) (struct drm_gem_object *, struct drm_file *);
569
570
571
572 int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv,
573 uint32_t handle, uint32_t flags, int *prime_fd);
574
575 int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv,
576 int prime_fd, uint32_t *handle);
577
578 struct dma_buf * (*gem_prime_export)(struct drm_device *dev,
579 struct drm_gem_object *obj, int flags);
580
581 struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
582 struct dma_buf *dma_buf);
583
584 int (*gem_prime_pin)(struct drm_gem_object *obj);
585 void (*gem_prime_unpin)(struct drm_gem_object *obj);
586 struct reservation_object * (*gem_prime_res_obj)(
587 struct drm_gem_object *obj);
588 struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj);
589 struct drm_gem_object *(*gem_prime_import_sg_table)(
590 struct drm_device *dev,
591 struct dma_buf_attachment *attach,
592 struct sg_table *sgt);
593 void *(*gem_prime_vmap)(struct drm_gem_object *obj);
594 void (*gem_prime_vunmap)(struct drm_gem_object *obj, void *vaddr);
595 int (*gem_prime_mmap)(struct drm_gem_object *obj,
596 struct vm_area_struct *vma);
597
598
599 void (*vgaarb_irq)(struct drm_device *dev, bool state);
600
601
602 int (*dumb_create)(struct drm_file *file_priv,
603 struct drm_device *dev,
604 struct drm_mode_create_dumb *args);
605 int (*dumb_map_offset)(struct drm_file *file_priv,
606 struct drm_device *dev, uint32_t handle,
607 uint64_t *offset);
608 int (*dumb_destroy)(struct drm_file *file_priv,
609 struct drm_device *dev,
610 uint32_t handle);
611
612
613 const struct vm_operations_struct *gem_vm_ops;
614
615 int major;
616 int minor;
617 int patchlevel;
618 char *name;
619 char *desc;
620 char *date;
621
622 u32 driver_features;
623 int dev_priv_size;
624 const struct drm_ioctl_desc *ioctls;
625 int num_ioctls;
626 const struct file_operations *fops;
627
628
629 struct list_head legacy_dev_list;
630};
631
632enum drm_minor_type {
633 DRM_MINOR_LEGACY,
634 DRM_MINOR_CONTROL,
635 DRM_MINOR_RENDER,
636 DRM_MINOR_CNT,
637};
638
639
640
641
642
643struct drm_info_list {
644 const char *name;
645 int (*show)(struct seq_file*, void*);
646 u32 driver_features;
647 void *data;
648};
649
650
651
652
653struct drm_info_node {
654 struct list_head list;
655 struct drm_minor *minor;
656 const struct drm_info_list *info_ent;
657 struct dentry *dent;
658};
659
660
661
662
663struct drm_minor {
664 int index;
665 int type;
666 struct device *kdev;
667 struct drm_device *dev;
668
669 struct dentry *debugfs_root;
670
671 struct list_head debugfs_list;
672 struct mutex debugfs_lock;
673
674
675 struct drm_master *master;
676 struct drm_mode_group mode_group;
677};
678
679
680struct drm_pending_vblank_event {
681 struct drm_pending_event base;
682 int pipe;
683 struct drm_event_vblank event;
684};
685
686struct drm_vblank_crtc {
687 struct drm_device *dev;
688 wait_queue_head_t queue;
689 struct timeval time[DRM_VBLANKTIME_RBSIZE];
690 struct timer_list disable_timer;
691 atomic_t count;
692 atomic_t refcount;
693 u32 last;
694
695 u32 last_wait;
696 unsigned int inmodeset;
697 int crtc;
698 bool enabled;
699
700};
701
702
703
704
705
706struct drm_device {
707 struct list_head legacy_dev_list;
708 int if_version;
709
710
711
712 struct kref ref;
713 struct device *dev;
714 struct drm_driver *driver;
715 void *dev_private;
716 struct drm_minor *control;
717 struct drm_minor *primary;
718 struct drm_minor *render;
719 atomic_t unplugged;
720 struct inode *anon_inode;
721 char *unique;
722
723
724
725
726 struct mutex struct_mutex;
727 struct mutex master_mutex;
728
729
730
731
732 int open_count;
733 spinlock_t buf_lock;
734 int buf_use;
735 atomic_t buf_alloc;
736
737
738 struct list_head filelist;
739
740
741
742 struct list_head maplist;
743 struct drm_open_hash map_hash;
744
745
746
747 struct list_head ctxlist;
748 struct mutex ctxlist_mutex;
749
750 struct idr ctx_idr;
751
752 struct list_head vmalist;
753
754
755
756
757
758 struct drm_device_dma *dma;
759
760
761
762
763
764 __volatile__ long context_flag;
765 int last_context;
766
767
768
769
770 bool irq_enabled;
771 int irq;
772
773
774
775
776
777
778
779 bool vblank_disable_allowed;
780
781
782
783
784
785
786
787
788
789 bool vblank_disable_immediate;
790
791
792 struct drm_vblank_crtc *vblank;
793
794 spinlock_t vblank_time_lock;
795 spinlock_t vbl_lock;
796
797 u32 max_vblank_count;
798
799
800
801
802 struct list_head vblank_event_list;
803 spinlock_t event_lock;
804
805
806
807 struct drm_agp_head *agp;
808
809 struct pci_dev *pdev;
810#ifdef __alpha__
811 struct pci_controller *hose;
812#endif
813
814 struct platform_device *platformdev;
815
816 struct drm_sg_mem *sg;
817 unsigned int num_crtcs;
818 sigset_t sigmask;
819
820 struct {
821 int context;
822 struct drm_hw_lock *lock;
823 } sigdata;
824
825 struct drm_local_map *agp_buffer_map;
826 unsigned int agp_buffer_token;
827
828 struct drm_mode_config mode_config;
829
830
831
832 struct mutex object_name_lock;
833 struct idr object_name_idr;
834 struct drm_vma_offset_manager *vma_offset_manager;
835
836 int switch_power_state;
837};
838
839#define DRM_SWITCH_POWER_ON 0
840#define DRM_SWITCH_POWER_OFF 1
841#define DRM_SWITCH_POWER_CHANGING 2
842#define DRM_SWITCH_POWER_DYNAMIC_OFF 3
843
844static __inline__ int drm_core_check_feature(struct drm_device *dev,
845 int feature)
846{
847 return ((dev->driver->driver_features & feature) ? 1 : 0);
848}
849
850static inline void drm_device_set_unplugged(struct drm_device *dev)
851{
852 smp_wmb();
853 atomic_set(&dev->unplugged, 1);
854}
855
856static inline int drm_device_is_unplugged(struct drm_device *dev)
857{
858 int ret = atomic_read(&dev->unplugged);
859 smp_rmb();
860 return ret;
861}
862
863static inline bool drm_is_render_client(const struct drm_file *file_priv)
864{
865 return file_priv->minor->type == DRM_MINOR_RENDER;
866}
867
868static inline bool drm_is_control_client(const struct drm_file *file_priv)
869{
870 return file_priv->minor->type == DRM_MINOR_CONTROL;
871}
872
873static inline bool drm_is_primary_client(const struct drm_file *file_priv)
874{
875 return file_priv->minor->type == DRM_MINOR_LEGACY;
876}
877
878
879
880
881
882
883extern long drm_ioctl(struct file *filp,
884 unsigned int cmd, unsigned long arg);
885extern long drm_compat_ioctl(struct file *filp,
886 unsigned int cmd, unsigned long arg);
887extern bool drm_ioctl_flags(unsigned int nr, unsigned int *flags);
888
889
890extern int drm_open(struct inode *inode, struct file *filp);
891extern ssize_t drm_read(struct file *filp, char __user *buffer,
892 size_t count, loff_t *offset);
893extern int drm_release(struct inode *inode, struct file *filp);
894
895
896extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
897
898
899int drm_noop(struct drm_device *dev, void *data,
900 struct drm_file *file_priv);
901
902
903void drm_clflush_pages(struct page *pages[], unsigned long num_pages);
904void drm_clflush_sg(struct sg_table *st);
905void drm_clflush_virt_range(void *addr, unsigned long length);
906
907
908
909
910
911
912
913extern int drm_irq_install(struct drm_device *dev, int irq);
914extern int drm_irq_uninstall(struct drm_device *dev);
915
916extern int drm_vblank_init(struct drm_device *dev, int num_crtcs);
917extern int drm_wait_vblank(struct drm_device *dev, void *data,
918 struct drm_file *filp);
919extern u32 drm_vblank_count(struct drm_device *dev, int crtc);
920extern u32 drm_crtc_vblank_count(struct drm_crtc *crtc);
921extern u32 drm_vblank_count_and_time(struct drm_device *dev, int crtc,
922 struct timeval *vblanktime);
923extern void drm_send_vblank_event(struct drm_device *dev, int crtc,
924 struct drm_pending_vblank_event *e);
925extern void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
926 struct drm_pending_vblank_event *e);
927extern bool drm_handle_vblank(struct drm_device *dev, int crtc);
928extern bool drm_crtc_handle_vblank(struct drm_crtc *crtc);
929extern int drm_vblank_get(struct drm_device *dev, int crtc);
930extern void drm_vblank_put(struct drm_device *dev, int crtc);
931extern int drm_crtc_vblank_get(struct drm_crtc *crtc);
932extern void drm_crtc_vblank_put(struct drm_crtc *crtc);
933extern void drm_wait_one_vblank(struct drm_device *dev, int crtc);
934extern void drm_crtc_wait_one_vblank(struct drm_crtc *crtc);
935extern void drm_vblank_off(struct drm_device *dev, int crtc);
936extern void drm_vblank_on(struct drm_device *dev, int crtc);
937extern void drm_crtc_vblank_off(struct drm_crtc *crtc);
938extern void drm_crtc_vblank_reset(struct drm_crtc *crtc);
939extern void drm_crtc_vblank_on(struct drm_crtc *crtc);
940extern void drm_vblank_cleanup(struct drm_device *dev);
941
942extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
943 int crtc, int *max_error,
944 struct timeval *vblank_time,
945 unsigned flags,
946 const struct drm_crtc *refcrtc,
947 const struct drm_display_mode *mode);
948extern void drm_calc_timestamping_constants(struct drm_crtc *crtc,
949 const struct drm_display_mode *mode);
950
951
952
953
954
955
956
957
958static inline wait_queue_head_t *drm_crtc_vblank_waitqueue(struct drm_crtc *crtc)
959{
960 return &crtc->dev->vblank[drm_crtc_index(crtc)].queue;
961}
962
963
964extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
965extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
966
967
968extern struct drm_master *drm_master_get(struct drm_master *master);
969extern void drm_master_put(struct drm_master **master);
970
971extern void drm_put_dev(struct drm_device *dev);
972extern void drm_unplug_dev(struct drm_device *dev);
973extern unsigned int drm_debug;
974extern bool drm_atomic;
975
976
977#if defined(CONFIG_DEBUG_FS)
978extern int drm_debugfs_create_files(const struct drm_info_list *files,
979 int count, struct dentry *root,
980 struct drm_minor *minor);
981extern int drm_debugfs_remove_files(const struct drm_info_list *files,
982 int count, struct drm_minor *minor);
983#else
984static inline int drm_debugfs_create_files(const struct drm_info_list *files,
985 int count, struct dentry *root,
986 struct drm_minor *minor)
987{
988 return 0;
989}
990
991static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
992 int count, struct drm_minor *minor)
993{
994 return 0;
995}
996#endif
997
998extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
999 struct drm_gem_object *obj, int flags);
1000extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
1001 struct drm_file *file_priv, uint32_t handle, uint32_t flags,
1002 int *prime_fd);
1003extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
1004 struct dma_buf *dma_buf);
1005extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
1006 struct drm_file *file_priv, int prime_fd, uint32_t *handle);
1007extern void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
1008
1009extern int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages,
1010 dma_addr_t *addrs, int max_pages);
1011extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, unsigned int nr_pages);
1012extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg);
1013
1014
1015extern struct drm_dma_handle *drm_pci_alloc(struct drm_device *dev, size_t size,
1016 size_t align);
1017extern void drm_pci_free(struct drm_device *dev, struct drm_dma_handle * dmah);
1018
1019
1020extern void drm_sysfs_hotplug_event(struct drm_device *dev);
1021
1022
1023struct drm_device *drm_dev_alloc(struct drm_driver *driver,
1024 struct device *parent);
1025void drm_dev_ref(struct drm_device *dev);
1026void drm_dev_unref(struct drm_device *dev);
1027int drm_dev_register(struct drm_device *dev, unsigned long flags);
1028void drm_dev_unregister(struct drm_device *dev);
1029int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...);
1030
1031struct drm_minor *drm_minor_acquire(unsigned int minor_id);
1032void drm_minor_release(struct drm_minor *minor);
1033
1034
1035
1036
1037static __inline__ int drm_pci_device_is_agp(struct drm_device *dev)
1038{
1039 if (dev->driver->device_is_agp != NULL) {
1040 int err = (*dev->driver->device_is_agp) (dev);
1041
1042 if (err != 2) {
1043 return err;
1044 }
1045 }
1046
1047 return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP);
1048}
1049void drm_pci_agp_destroy(struct drm_device *dev);
1050
1051extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
1052extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
1053#ifdef CONFIG_PCI
1054extern int drm_get_pci_dev(struct pci_dev *pdev,
1055 const struct pci_device_id *ent,
1056 struct drm_driver *driver);
1057extern int drm_pci_set_busid(struct drm_device *dev, struct drm_master *master);
1058#else
1059static inline int drm_get_pci_dev(struct pci_dev *pdev,
1060 const struct pci_device_id *ent,
1061 struct drm_driver *driver)
1062{
1063 return -ENOSYS;
1064}
1065
1066static inline int drm_pci_set_busid(struct drm_device *dev,
1067 struct drm_master *master)
1068{
1069 return -ENOSYS;
1070}
1071#endif
1072
1073#define DRM_PCIE_SPEED_25 1
1074#define DRM_PCIE_SPEED_50 2
1075#define DRM_PCIE_SPEED_80 4
1076
1077extern int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 *speed_mask);
1078
1079
1080extern int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device);
1081extern int drm_platform_set_busid(struct drm_device *d, struct drm_master *m);
1082
1083
1084static __inline__ bool drm_can_sleep(void)
1085{
1086 if (in_atomic() || in_dbg_master() || irqs_disabled())
1087 return false;
1088 return true;
1089}
1090
1091#endif
1092