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#ifndef __DRM_CRTC_H__
26#define __DRM_CRTC_H__
27
28#include <linux/i2c.h>
29#include <linux/spinlock.h>
30#include <linux/types.h>
31#include <linux/idr.h>
32#include <linux/fb.h>
33#include <drm/drm_mode.h>
34
35#include <drm/drm_fourcc.h>
36
37struct drm_device;
38struct drm_mode_set;
39struct drm_framebuffer;
40struct drm_object_properties;
41
42
43#define DRM_MODE_OBJECT_CRTC 0xcccccccc
44#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
45#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
46#define DRM_MODE_OBJECT_MODE 0xdededede
47#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
48#define DRM_MODE_OBJECT_FB 0xfbfbfbfb
49#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
50#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
51
52struct drm_mode_object {
53 uint32_t id;
54 uint32_t type;
55 struct drm_object_properties *properties;
56};
57
58#define DRM_OBJECT_MAX_PROPERTY 24
59struct drm_object_properties {
60 int count;
61 uint32_t ids[DRM_OBJECT_MAX_PROPERTY];
62 uint64_t values[DRM_OBJECT_MAX_PROPERTY];
63};
64
65
66
67
68
69
70
71
72
73enum drm_mode_status {
74 MODE_OK = 0,
75 MODE_HSYNC,
76 MODE_VSYNC,
77 MODE_H_ILLEGAL,
78 MODE_V_ILLEGAL,
79 MODE_BAD_WIDTH,
80 MODE_NOMODE,
81 MODE_NO_INTERLACE,
82 MODE_NO_DBLESCAN,
83 MODE_NO_VSCAN,
84 MODE_MEM,
85 MODE_VIRTUAL_X,
86 MODE_VIRTUAL_Y,
87 MODE_MEM_VIRT,
88 MODE_NOCLOCK,
89 MODE_CLOCK_HIGH,
90 MODE_CLOCK_LOW,
91 MODE_CLOCK_RANGE,
92 MODE_BAD_HVALUE,
93 MODE_BAD_VVALUE,
94 MODE_BAD_VSCAN,
95 MODE_HSYNC_NARROW,
96 MODE_HSYNC_WIDE,
97 MODE_HBLANK_NARROW,
98 MODE_HBLANK_WIDE,
99 MODE_VSYNC_NARROW,
100 MODE_VSYNC_WIDE,
101 MODE_VBLANK_NARROW,
102 MODE_VBLANK_WIDE,
103 MODE_PANEL,
104 MODE_INTERLACE_WIDTH,
105 MODE_ONE_WIDTH,
106 MODE_ONE_HEIGHT,
107 MODE_ONE_SIZE,
108 MODE_NO_REDUCED,
109 MODE_UNVERIFIED = -3,
110 MODE_BAD = -2,
111 MODE_ERROR = -1
112};
113
114#define DRM_MODE_TYPE_CLOCK_CRTC_C (DRM_MODE_TYPE_CLOCK_C | \
115 DRM_MODE_TYPE_CRTC_C)
116
117#define DRM_MODE(nm, t, c, hd, hss, hse, ht, hsk, vd, vss, vse, vt, vs, f) \
118 .name = nm, .status = 0, .type = (t), .clock = (c), \
119 .hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), \
120 .htotal = (ht), .hskew = (hsk), .vdisplay = (vd), \
121 .vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), \
122 .vscan = (vs), .flags = (f), .vrefresh = 0, \
123 .base.type = DRM_MODE_OBJECT_MODE
124
125#define CRTC_INTERLACE_HALVE_V 0x1
126
127struct drm_display_mode {
128
129 struct list_head head;
130 struct drm_mode_object base;
131
132 char name[DRM_DISPLAY_MODE_LEN];
133
134 enum drm_mode_status status;
135 unsigned int type;
136
137
138 int clock;
139 int hdisplay;
140 int hsync_start;
141 int hsync_end;
142 int htotal;
143 int hskew;
144 int vdisplay;
145 int vsync_start;
146 int vsync_end;
147 int vtotal;
148 int vscan;
149 unsigned int flags;
150
151
152 int width_mm;
153 int height_mm;
154
155
156 int clock_index;
157 int synth_clock;
158 int crtc_hdisplay;
159 int crtc_hblank_start;
160 int crtc_hblank_end;
161 int crtc_hsync_start;
162 int crtc_hsync_end;
163 int crtc_htotal;
164 int crtc_hskew;
165 int crtc_vdisplay;
166 int crtc_vblank_start;
167 int crtc_vblank_end;
168 int crtc_vsync_start;
169 int crtc_vsync_end;
170 int crtc_vtotal;
171
172
173 int private_size;
174 int *private;
175 int private_flags;
176
177 int vrefresh;
178 int hsync;
179};
180
181enum drm_connector_status {
182 connector_status_connected = 1,
183 connector_status_disconnected = 2,
184 connector_status_unknown = 3,
185};
186
187enum subpixel_order {
188 SubPixelUnknown = 0,
189 SubPixelHorizontalRGB,
190 SubPixelHorizontalBGR,
191 SubPixelVerticalRGB,
192 SubPixelVerticalBGR,
193 SubPixelNone,
194};
195
196#define DRM_COLOR_FORMAT_RGB444 (1<<0)
197#define DRM_COLOR_FORMAT_YCRCB444 (1<<1)
198#define DRM_COLOR_FORMAT_YCRCB422 (1<<2)
199
200
201
202struct drm_display_info {
203 char name[DRM_DISPLAY_INFO_LEN];
204
205
206 unsigned int width_mm;
207 unsigned int height_mm;
208
209
210 unsigned int min_vfreq, max_vfreq;
211 unsigned int min_hfreq, max_hfreq;
212 unsigned int pixel_clock;
213 unsigned int bpc;
214
215 enum subpixel_order subpixel_order;
216 u32 color_formats;
217
218 u8 cea_rev;
219};
220
221struct drm_framebuffer_funcs {
222
223 void (*destroy)(struct drm_framebuffer *framebuffer);
224 int (*create_handle)(struct drm_framebuffer *fb,
225 struct drm_file *file_priv,
226 unsigned int *handle);
227
228
229
230
231
232
233
234
235
236
237
238
239 int (*dirty)(struct drm_framebuffer *framebuffer,
240 struct drm_file *file_priv, unsigned flags,
241 unsigned color, struct drm_clip_rect *clips,
242 unsigned num_clips);
243};
244
245struct drm_framebuffer {
246 struct drm_device *dev;
247
248
249
250
251
252
253
254
255
256 struct kref refcount;
257 struct list_head head;
258 struct drm_mode_object base;
259 const struct drm_framebuffer_funcs *funcs;
260 unsigned int pitches[4];
261 unsigned int offsets[4];
262 unsigned int width;
263 unsigned int height;
264
265 unsigned int depth;
266 int bits_per_pixel;
267 int flags;
268 uint32_t pixel_format;
269 struct list_head filp_head;
270
271 void *helper_private;
272};
273
274struct drm_property_blob {
275 struct drm_mode_object base;
276 struct list_head head;
277 unsigned int length;
278 unsigned char data[];
279};
280
281struct drm_property_enum {
282 uint64_t value;
283 struct list_head head;
284 char name[DRM_PROP_NAME_LEN];
285};
286
287struct drm_property {
288 struct list_head head;
289 struct drm_mode_object base;
290 uint32_t flags;
291 char name[DRM_PROP_NAME_LEN];
292 uint32_t num_values;
293 uint64_t *values;
294
295 struct list_head enum_blob_list;
296};
297
298struct drm_crtc;
299struct drm_connector;
300struct drm_encoder;
301struct drm_pending_vblank_event;
302struct drm_plane;
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326struct drm_crtc_funcs {
327
328 void (*save)(struct drm_crtc *crtc);
329
330 void (*restore)(struct drm_crtc *crtc);
331
332 void (*reset)(struct drm_crtc *crtc);
333
334
335 int (*cursor_set)(struct drm_crtc *crtc, struct drm_file *file_priv,
336 uint32_t handle, uint32_t width, uint32_t height);
337 int (*cursor_move)(struct drm_crtc *crtc, int x, int y);
338
339
340 void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
341 uint32_t start, uint32_t size);
342
343 void (*destroy)(struct drm_crtc *crtc);
344
345 int (*set_config)(struct drm_mode_set *set);
346
347
348
349
350
351
352
353
354
355
356 int (*page_flip)(struct drm_crtc *crtc,
357 struct drm_framebuffer *fb,
358 struct drm_pending_vblank_event *event);
359
360 int (*set_property)(struct drm_crtc *crtc,
361 struct drm_property *property, uint64_t val);
362};
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389struct drm_crtc {
390 struct drm_device *dev;
391 struct list_head head;
392
393 struct drm_mode_object base;
394
395
396 struct drm_framebuffer *fb;
397
398 bool enabled;
399
400
401 struct drm_display_mode mode;
402
403
404
405
406 struct drm_display_mode hwmode;
407
408 bool invert_dimensions;
409
410 int x, y;
411 const struct drm_crtc_funcs *funcs;
412
413
414 uint32_t gamma_size;
415 uint16_t *gamma_store;
416
417
418 s64 framedur_ns, linedur_ns, pixeldur_ns;
419
420
421 void *helper_private;
422
423 struct drm_object_properties properties;
424};
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443struct drm_connector_funcs {
444 void (*dpms)(struct drm_connector *connector, int mode);
445 void (*save)(struct drm_connector *connector);
446 void (*restore)(struct drm_connector *connector);
447 void (*reset)(struct drm_connector *connector);
448
449
450
451
452
453
454
455 enum drm_connector_status (*detect)(struct drm_connector *connector,
456 bool force);
457 int (*fill_modes)(struct drm_connector *connector, uint32_t max_width, uint32_t max_height);
458 int (*set_property)(struct drm_connector *connector, struct drm_property *property,
459 uint64_t val);
460 void (*destroy)(struct drm_connector *connector);
461 void (*force)(struct drm_connector *connector);
462};
463
464
465
466
467
468
469
470
471struct drm_encoder_funcs {
472 void (*reset)(struct drm_encoder *encoder);
473 void (*destroy)(struct drm_encoder *encoder);
474};
475
476#define DRM_CONNECTOR_MAX_UMODES 16
477#define DRM_CONNECTOR_LEN 32
478#define DRM_CONNECTOR_MAX_ENCODER 3
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495struct drm_encoder {
496 struct drm_device *dev;
497 struct list_head head;
498
499 struct drm_mode_object base;
500 int encoder_type;
501 uint32_t possible_crtcs;
502 uint32_t possible_clones;
503
504 struct drm_crtc *crtc;
505 const struct drm_encoder_funcs *funcs;
506 void *helper_private;
507};
508
509enum drm_connector_force {
510 DRM_FORCE_UNSPECIFIED,
511 DRM_FORCE_OFF,
512 DRM_FORCE_ON,
513 DRM_FORCE_ON_DIGITAL,
514};
515
516
517
518#define DRM_CONNECTOR_POLL_HPD (1 << 0)
519
520#define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
521
522
523#define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
524
525#define MAX_ELD_BYTES 128
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
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565struct drm_connector {
566 struct drm_device *dev;
567 struct device kdev;
568 struct device_attribute *attr;
569 struct list_head head;
570
571 struct drm_mode_object base;
572
573 int connector_type;
574 int connector_type_id;
575 bool interlace_allowed;
576 bool doublescan_allowed;
577 struct list_head modes;
578
579 enum drm_connector_status status;
580
581
582 struct list_head probed_modes;
583
584 struct drm_display_info display_info;
585 const struct drm_connector_funcs *funcs;
586
587 struct list_head user_modes;
588 struct drm_property_blob *edid_blob_ptr;
589 struct drm_object_properties properties;
590
591 uint8_t polled;
592
593
594 int dpms;
595
596 void *helper_private;
597
598
599 enum drm_connector_force force;
600 uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER];
601 struct drm_encoder *encoder;
602
603
604 uint8_t eld[MAX_ELD_BYTES];
605 bool dvi_dual;
606 int max_tmds_clock;
607 bool latency_present[2];
608 int video_latency[2];
609 int audio_latency[2];
610 int null_edid_counter;
611 unsigned bad_edid_counter;
612};
613
614
615
616
617
618
619
620
621struct drm_plane_funcs {
622 int (*update_plane)(struct drm_plane *plane,
623 struct drm_crtc *crtc, struct drm_framebuffer *fb,
624 int crtc_x, int crtc_y,
625 unsigned int crtc_w, unsigned int crtc_h,
626 uint32_t src_x, uint32_t src_y,
627 uint32_t src_w, uint32_t src_h);
628 int (*disable_plane)(struct drm_plane *plane);
629 void (*destroy)(struct drm_plane *plane);
630
631 int (*set_property)(struct drm_plane *plane,
632 struct drm_property *property, uint64_t val);
633};
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652struct drm_plane {
653 struct drm_device *dev;
654 struct list_head head;
655
656 struct drm_mode_object base;
657
658 uint32_t possible_crtcs;
659 uint32_t *format_types;
660 uint32_t format_count;
661
662 struct drm_crtc *crtc;
663 struct drm_framebuffer *fb;
664
665
666 uint32_t gamma_size;
667 uint16_t *gamma_store;
668
669 bool enabled;
670
671 const struct drm_plane_funcs *funcs;
672 void *helper_private;
673
674 struct drm_object_properties properties;
675};
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693struct drm_mode_set {
694 struct drm_framebuffer *fb;
695 struct drm_crtc *crtc;
696 struct drm_display_mode *mode;
697
698 uint32_t x;
699 uint32_t y;
700
701 struct drm_connector **connectors;
702 size_t num_connectors;
703};
704
705
706
707
708
709
710
711
712
713struct drm_mode_config_funcs {
714 struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
715 struct drm_file *file_priv,
716 struct drm_mode_fb_cmd2 *mode_cmd);
717 void (*output_poll_changed)(struct drm_device *dev);
718};
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733struct drm_mode_group {
734 uint32_t num_crtcs;
735 uint32_t num_encoders;
736 uint32_t num_connectors;
737
738
739 uint32_t *id_list;
740};
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769struct drm_mode_config {
770 struct mutex mutex;
771 struct mutex idr_mutex;
772 struct idr crtc_idr;
773
774 int num_fb;
775 struct list_head fb_list;
776 int num_connector;
777 struct list_head connector_list;
778 int num_encoder;
779 struct list_head encoder_list;
780 int num_plane;
781 struct list_head plane_list;
782
783 int num_crtc;
784 struct list_head crtc_list;
785
786 struct list_head property_list;
787
788 int min_width, min_height;
789 int max_width, max_height;
790 const struct drm_mode_config_funcs *funcs;
791 resource_size_t fb_base;
792
793
794 bool poll_enabled;
795 struct delayed_work output_poll_work;
796
797
798 struct list_head property_blob_list;
799 struct drm_property *edid_property;
800 struct drm_property *dpms_property;
801
802
803 struct drm_property *dvi_i_subconnector_property;
804 struct drm_property *dvi_i_select_subconnector_property;
805
806
807 struct drm_property *tv_subconnector_property;
808 struct drm_property *tv_select_subconnector_property;
809 struct drm_property *tv_mode_property;
810 struct drm_property *tv_left_margin_property;
811 struct drm_property *tv_right_margin_property;
812 struct drm_property *tv_top_margin_property;
813 struct drm_property *tv_bottom_margin_property;
814 struct drm_property *tv_brightness_property;
815 struct drm_property *tv_contrast_property;
816 struct drm_property *tv_flicker_reduction_property;
817 struct drm_property *tv_overscan_property;
818 struct drm_property *tv_saturation_property;
819 struct drm_property *tv_hue_property;
820
821
822 struct drm_property *scaling_mode_property;
823 struct drm_property *dithering_mode_property;
824 struct drm_property *dirty_info_property;
825
826
827 uint32_t preferred_depth, prefer_shadow;
828};
829
830#define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
831#define obj_to_connector(x) container_of(x, struct drm_connector, base)
832#define obj_to_encoder(x) container_of(x, struct drm_encoder, base)
833#define obj_to_mode(x) container_of(x, struct drm_display_mode, base)
834#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
835#define obj_to_property(x) container_of(x, struct drm_property, base)
836#define obj_to_blob(x) container_of(x, struct drm_property_blob, base)
837#define obj_to_plane(x) container_of(x, struct drm_plane, base)
838
839struct drm_prop_enum_list {
840 int type;
841 char *name;
842};
843
844extern int drm_crtc_init(struct drm_device *dev,
845 struct drm_crtc *crtc,
846 const struct drm_crtc_funcs *funcs);
847extern void drm_crtc_cleanup(struct drm_crtc *crtc);
848
849extern int drm_connector_init(struct drm_device *dev,
850 struct drm_connector *connector,
851 const struct drm_connector_funcs *funcs,
852 int connector_type);
853
854extern void drm_connector_cleanup(struct drm_connector *connector);
855
856extern void drm_connector_unplug_all(struct drm_device *dev);
857
858extern int drm_encoder_init(struct drm_device *dev,
859 struct drm_encoder *encoder,
860 const struct drm_encoder_funcs *funcs,
861 int encoder_type);
862
863extern int drm_plane_init(struct drm_device *dev,
864 struct drm_plane *plane,
865 unsigned long possible_crtcs,
866 const struct drm_plane_funcs *funcs,
867 const uint32_t *formats, uint32_t format_count,
868 bool priv);
869extern void drm_plane_cleanup(struct drm_plane *plane);
870
871extern void drm_encoder_cleanup(struct drm_encoder *encoder);
872
873extern char *drm_get_connector_name(struct drm_connector *connector);
874extern char *drm_get_dpms_name(int val);
875extern char *drm_get_dvi_i_subconnector_name(int val);
876extern char *drm_get_dvi_i_select_name(int val);
877extern char *drm_get_tv_subconnector_name(int val);
878extern char *drm_get_tv_select_name(int val);
879extern void drm_fb_release(struct drm_file *file_priv);
880extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group);
881extern bool drm_probe_ddc(struct i2c_adapter *adapter);
882extern struct edid *drm_get_edid(struct drm_connector *connector,
883 struct i2c_adapter *adapter);
884extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid);
885extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode);
886extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode);
887extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src);
888extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
889 const struct drm_display_mode *mode);
890extern void drm_mode_debug_printmodeline(struct drm_display_mode *mode);
891extern void drm_mode_config_init(struct drm_device *dev);
892extern void drm_mode_config_reset(struct drm_device *dev);
893extern void drm_mode_config_cleanup(struct drm_device *dev);
894extern void drm_mode_set_name(struct drm_display_mode *mode);
895extern bool drm_mode_equal(struct drm_display_mode *mode1, struct drm_display_mode *mode2);
896extern int drm_mode_width(struct drm_display_mode *mode);
897extern int drm_mode_height(struct drm_display_mode *mode);
898
899
900extern int drm_mode_attachmode_crtc(struct drm_device *dev,
901 struct drm_crtc *crtc,
902 const struct drm_display_mode *mode);
903extern int drm_mode_detachmode_crtc(struct drm_device *dev, struct drm_display_mode *mode);
904
905extern struct drm_display_mode *drm_mode_create(struct drm_device *dev);
906extern void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode);
907extern void drm_mode_list_concat(struct list_head *head,
908 struct list_head *new);
909extern void drm_mode_validate_size(struct drm_device *dev,
910 struct list_head *mode_list,
911 int maxX, int maxY, int maxPitch);
912extern void drm_mode_prune_invalid(struct drm_device *dev,
913 struct list_head *mode_list, bool verbose);
914extern void drm_mode_sort(struct list_head *mode_list);
915extern int drm_mode_hsync(const struct drm_display_mode *mode);
916extern int drm_mode_vrefresh(const struct drm_display_mode *mode);
917extern void drm_mode_set_crtcinfo(struct drm_display_mode *p,
918 int adjust_flags);
919extern void drm_mode_connector_list_update(struct drm_connector *connector);
920extern int drm_mode_connector_update_edid_property(struct drm_connector *connector,
921 struct edid *edid);
922extern int drm_connector_property_set_value(struct drm_connector *connector,
923 struct drm_property *property,
924 uint64_t value);
925extern int drm_connector_property_get_value(struct drm_connector *connector,
926 struct drm_property *property,
927 uint64_t *value);
928extern int drm_object_property_set_value(struct drm_mode_object *obj,
929 struct drm_property *property,
930 uint64_t val);
931extern int drm_object_property_get_value(struct drm_mode_object *obj,
932 struct drm_property *property,
933 uint64_t *value);
934extern struct drm_display_mode *drm_crtc_mode_create(struct drm_device *dev);
935extern void drm_framebuffer_set_object(struct drm_device *dev,
936 unsigned long handle);
937extern int drm_framebuffer_init(struct drm_device *dev,
938 struct drm_framebuffer *fb,
939 const struct drm_framebuffer_funcs *funcs);
940extern void drm_framebuffer_unreference(struct drm_framebuffer *fb);
941extern void drm_framebuffer_reference(struct drm_framebuffer *fb);
942extern void drm_framebuffer_remove(struct drm_framebuffer *fb);
943extern void drm_framebuffer_cleanup(struct drm_framebuffer *fb);
944extern int drmfb_probe(struct drm_device *dev, struct drm_crtc *crtc);
945extern int drmfb_remove(struct drm_device *dev, struct drm_framebuffer *fb);
946extern void drm_crtc_probe_connector_modes(struct drm_device *dev, int maxX, int maxY);
947extern bool drm_crtc_in_use(struct drm_crtc *crtc);
948
949extern void drm_connector_attach_property(struct drm_connector *connector,
950 struct drm_property *property, uint64_t init_val);
951extern void drm_object_attach_property(struct drm_mode_object *obj,
952 struct drm_property *property,
953 uint64_t init_val);
954extern struct drm_property *drm_property_create(struct drm_device *dev, int flags,
955 const char *name, int num_values);
956extern struct drm_property *drm_property_create_enum(struct drm_device *dev, int flags,
957 const char *name,
958 const struct drm_prop_enum_list *props,
959 int num_values);
960struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
961 int flags, const char *name,
962 const struct drm_prop_enum_list *props,
963 int num_values);
964struct drm_property *drm_property_create_range(struct drm_device *dev, int flags,
965 const char *name,
966 uint64_t min, uint64_t max);
967extern void drm_property_destroy(struct drm_device *dev, struct drm_property *property);
968extern int drm_property_add_enum(struct drm_property *property, int index,
969 uint64_t value, const char *name);
970extern int drm_mode_create_dvi_i_properties(struct drm_device *dev);
971extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats,
972 char *formats[]);
973extern int drm_mode_create_scaling_mode_property(struct drm_device *dev);
974extern int drm_mode_create_dithering_property(struct drm_device *dev);
975extern int drm_mode_create_dirty_info_property(struct drm_device *dev);
976extern char *drm_get_encoder_name(struct drm_encoder *encoder);
977
978extern int drm_mode_connector_attach_encoder(struct drm_connector *connector,
979 struct drm_encoder *encoder);
980extern void drm_mode_connector_detach_encoder(struct drm_connector *connector,
981 struct drm_encoder *encoder);
982extern int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
983 int gamma_size);
984extern struct drm_mode_object *drm_mode_object_find(struct drm_device *dev,
985 uint32_t id, uint32_t type);
986
987extern int drm_mode_getresources(struct drm_device *dev,
988 void *data, struct drm_file *file_priv);
989extern int drm_mode_getplane_res(struct drm_device *dev, void *data,
990 struct drm_file *file_priv);
991extern int drm_mode_getcrtc(struct drm_device *dev,
992 void *data, struct drm_file *file_priv);
993extern int drm_mode_getconnector(struct drm_device *dev,
994 void *data, struct drm_file *file_priv);
995extern int drm_mode_setcrtc(struct drm_device *dev,
996 void *data, struct drm_file *file_priv);
997extern int drm_mode_getplane(struct drm_device *dev,
998 void *data, struct drm_file *file_priv);
999extern int drm_mode_setplane(struct drm_device *dev,
1000 void *data, struct drm_file *file_priv);
1001extern int drm_mode_cursor_ioctl(struct drm_device *dev,
1002 void *data, struct drm_file *file_priv);
1003extern int drm_mode_addfb(struct drm_device *dev,
1004 void *data, struct drm_file *file_priv);
1005extern int drm_mode_addfb2(struct drm_device *dev,
1006 void *data, struct drm_file *file_priv);
1007extern uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth);
1008extern int drm_mode_rmfb(struct drm_device *dev,
1009 void *data, struct drm_file *file_priv);
1010extern int drm_mode_getfb(struct drm_device *dev,
1011 void *data, struct drm_file *file_priv);
1012extern int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
1013 void *data, struct drm_file *file_priv);
1014extern int drm_mode_addmode_ioctl(struct drm_device *dev,
1015 void *data, struct drm_file *file_priv);
1016extern int drm_mode_rmmode_ioctl(struct drm_device *dev,
1017 void *data, struct drm_file *file_priv);
1018extern int drm_mode_attachmode_ioctl(struct drm_device *dev,
1019 void *data, struct drm_file *file_priv);
1020extern int drm_mode_detachmode_ioctl(struct drm_device *dev,
1021 void *data, struct drm_file *file_priv);
1022
1023extern int drm_mode_getproperty_ioctl(struct drm_device *dev,
1024 void *data, struct drm_file *file_priv);
1025extern int drm_mode_getblob_ioctl(struct drm_device *dev,
1026 void *data, struct drm_file *file_priv);
1027extern int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
1028 void *data, struct drm_file *file_priv);
1029extern int drm_mode_hotplug_ioctl(struct drm_device *dev,
1030 void *data, struct drm_file *file_priv);
1031extern int drm_mode_replacefb(struct drm_device *dev,
1032 void *data, struct drm_file *file_priv);
1033extern int drm_mode_getencoder(struct drm_device *dev,
1034 void *data, struct drm_file *file_priv);
1035extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
1036 void *data, struct drm_file *file_priv);
1037extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
1038 void *data, struct drm_file *file_priv);
1039extern u8 *drm_find_cea_extension(struct edid *edid);
1040extern bool drm_detect_hdmi_monitor(struct edid *edid);
1041extern bool drm_detect_monitor_audio(struct edid *edid);
1042extern int drm_mode_page_flip_ioctl(struct drm_device *dev,
1043 void *data, struct drm_file *file_priv);
1044extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
1045 int hdisplay, int vdisplay, int vrefresh,
1046 bool reduced, bool interlaced, bool margins);
1047extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev,
1048 int hdisplay, int vdisplay, int vrefresh,
1049 bool interlaced, int margins);
1050extern struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev,
1051 int hdisplay, int vdisplay, int vrefresh,
1052 bool interlaced, int margins, int GTF_M,
1053 int GTF_2C, int GTF_K, int GTF_2J);
1054extern int drm_add_modes_noedid(struct drm_connector *connector,
1055 int hdisplay, int vdisplay);
1056
1057extern int drm_edid_header_is_valid(const u8 *raw_edid);
1058extern bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid);
1059extern bool drm_edid_is_valid(struct edid *edid);
1060struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev,
1061 int hsize, int vsize, int fresh,
1062 bool rb);
1063
1064extern int drm_mode_create_dumb_ioctl(struct drm_device *dev,
1065 void *data, struct drm_file *file_priv);
1066extern int drm_mode_mmap_dumb_ioctl(struct drm_device *dev,
1067 void *data, struct drm_file *file_priv);
1068extern int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
1069 void *data, struct drm_file *file_priv);
1070extern int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data,
1071 struct drm_file *file_priv);
1072extern int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data,
1073 struct drm_file *file_priv);
1074
1075extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
1076 int *bpp);
1077extern int drm_format_num_planes(uint32_t format);
1078extern int drm_format_plane_cpp(uint32_t format, int plane);
1079extern int drm_format_horz_chroma_subsampling(uint32_t format);
1080extern int drm_format_vert_chroma_subsampling(uint32_t format);
1081
1082#endif
1083