Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
drm_crtc.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2006 Keith Packard
3  * Copyright © 2007-2008 Dave Airlie
4  * Copyright © 2007-2008 Intel Corporation
5  * Jesse Barnes <[email protected]>
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation
10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11  * and/or sell copies of the Software, and to permit persons to whom the
12  * Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included in
15  * all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
21  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23  * OTHER DEALINGS IN THE SOFTWARE.
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 
37 struct drm_device;
38 struct drm_mode_set;
39 struct drm_framebuffer;
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 
56 };
57 
58 #define DRM_OBJECT_MAX_PROPERTY 24
60  int count;
63 };
64 
65 /*
66  * Note on terminology: here, for brevity and convenience, we refer to connector
67  * control chips as 'CRTCs'. They can control any type of connector, VGA, LVDS,
68  * DVI, etc. And 'screen' refers to the whole of the visible display, which
69  * may span multiple monitors (and therefore multiple CRTC and connector
70  * structures).
71  */
72 
74  MODE_OK = 0, /* Mode OK */
75  MODE_HSYNC, /* hsync out of range */
76  MODE_VSYNC, /* vsync out of range */
77  MODE_H_ILLEGAL, /* mode has illegal horizontal timings */
78  MODE_V_ILLEGAL, /* mode has illegal horizontal timings */
79  MODE_BAD_WIDTH, /* requires an unsupported linepitch */
80  MODE_NOMODE, /* no mode with a matching name */
81  MODE_NO_INTERLACE, /* interlaced mode not supported */
82  MODE_NO_DBLESCAN, /* doublescan mode not supported */
83  MODE_NO_VSCAN, /* multiscan mode not supported */
84  MODE_MEM, /* insufficient video memory */
85  MODE_VIRTUAL_X, /* mode width too large for specified virtual size */
86  MODE_VIRTUAL_Y, /* mode height too large for specified virtual size */
87  MODE_MEM_VIRT, /* insufficient video memory given virtual size */
88  MODE_NOCLOCK, /* no fixed clock available */
89  MODE_CLOCK_HIGH, /* clock required is too high */
90  MODE_CLOCK_LOW, /* clock required is too low */
91  MODE_CLOCK_RANGE, /* clock/mode isn't in a ClockRange */
92  MODE_BAD_HVALUE, /* horizontal timing was out of range */
93  MODE_BAD_VVALUE, /* vertical timing was out of range */
94  MODE_BAD_VSCAN, /* VScan value out of range */
95  MODE_HSYNC_NARROW, /* horizontal sync too narrow */
96  MODE_HSYNC_WIDE, /* horizontal sync too wide */
97  MODE_HBLANK_NARROW, /* horizontal blanking too narrow */
98  MODE_HBLANK_WIDE, /* horizontal blanking too wide */
99  MODE_VSYNC_NARROW, /* vertical sync too narrow */
100  MODE_VSYNC_WIDE, /* vertical sync too wide */
101  MODE_VBLANK_NARROW, /* vertical blanking too narrow */
102  MODE_VBLANK_WIDE, /* vertical blanking too wide */
103  MODE_PANEL, /* exceeds panel dimensions */
104  MODE_INTERLACE_WIDTH, /* width too large for interlaced mode */
105  MODE_ONE_WIDTH, /* only one width is supported */
106  MODE_ONE_HEIGHT, /* only one height is supported */
107  MODE_ONE_SIZE, /* only one resolution is supported */
108  MODE_NO_REDUCED, /* monitor doesn't accept reduced blanking */
109  MODE_UNVERIFIED = -3, /* mode needs to reverified */
110  MODE_BAD = -2, /* unspecified reason */
111  MODE_ERROR = -1 /* error condition */
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 /* halve V values for interlacing */
126 
128  /* Header */
129  struct list_head head;
131 
133 
135  unsigned int type;
136 
137  /* Proposed mode values */
138  int clock; /* in kHz */
139  int hdisplay;
142  int htotal;
143  int hskew;
144  int vdisplay;
147  int vtotal;
148  int vscan;
149  unsigned int flags;
150 
151  /* Addressable image size (may be 0 for projectors, etc.) */
152  int width_mm;
154 
155  /* Actual mode we give to hw */
171 
172  /* Driver private mode info */
174  int *private;
176 
177  int vrefresh; /* in Hz */
178  int hsync; /* in kHz */
179 };
180 
185 };
186 
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  * Describes a given display (e.g. CRT or flat panel) and its limitations.
201  */
204 
205  /* Physical size */
206  unsigned int width_mm;
207  unsigned int height_mm;
208 
209  /* Clock limits FIXME: storage format */
210  unsigned int min_vfreq, max_vfreq;
211  unsigned int min_hfreq, max_hfreq;
212  unsigned int pixel_clock;
213  unsigned int bpc;
214 
217 
219 };
220 
222  /* note: use drm_framebuffer_remove() */
223  void (*destroy)(struct drm_framebuffer *framebuffer);
225  struct drm_file *file_priv,
226  unsigned int *handle);
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 
246  struct drm_device *dev;
247  /*
248  * Note that the fb is refcounted for the benefit of driver internals,
249  * for example some hw, disabling a CRTC/plane is asynchronous, and
250  * scanout does not actually complete until the next vblank. So some
251  * cleanup (like releasing the reference(s) on the backing GEM bo(s))
252  * should be deferred. In cases like this, the driver would like to
253  * hold a ref to the fb even though it has already been removed from
254  * userspace perspective.
255  */
256  struct kref refcount;
257  struct list_head head;
260  unsigned int pitches[4];
261  unsigned int offsets[4];
262  unsigned int width;
263  unsigned int height;
264  /* depth can be 15 or 16 */
265  unsigned int depth;
267  int flags;
268  uint32_t pixel_format; /* fourcc format */
270  /* if you are using the helper */
272 };
273 
276  struct list_head head;
277  unsigned int length;
278  unsigned char data[];
279 };
280 
283  struct list_head head;
285 };
286 
287 struct drm_property {
288  struct list_head head;
294 
296 };
297 
298 struct drm_crtc;
299 struct drm_connector;
300 struct drm_encoder;
301 struct drm_pending_vblank_event;
302 struct drm_plane;
303 
327  /* Save CRTC state */
328  void (*save)(struct drm_crtc *crtc); /* suspend? */
329  /* Restore CRTC state */
330  void (*restore)(struct drm_crtc *crtc); /* resume? */
331  /* Reset CRTC state */
332  void (*reset)(struct drm_crtc *crtc);
333 
334  /* cursor controls */
335  int (*cursor_set)(struct drm_crtc *crtc, struct drm_file *file_priv,
337  int (*cursor_move)(struct drm_crtc *crtc, int x, int y);
338 
339  /* Set gamma on the CRTC */
340  void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
342  /* Object destroy routine */
343  void (*destroy)(struct drm_crtc *crtc);
344 
345  int (*set_config)(struct drm_mode_set *set);
346 
347  /*
348  * Flip to the given framebuffer. This implements the page
349  * flip ioctl described in drm_mode.h, specifically, the
350  * implementation must return immediately and block all
351  * rendering to the current fb until the flip has completed.
352  * If userspace set the event flag in the ioctl, the event
353  * argument will point to an event to send back when the flip
354  * completes, otherwise it will be NULL.
355  */
357  struct drm_framebuffer *fb,
358  struct drm_pending_vblank_event *event);
359 
361  struct drm_property *property, uint64_t val);
362 };
363 
389 struct drm_crtc {
390  struct drm_device *dev;
391  struct list_head head;
392 
394 
395  /* framebuffer the connector is currently bound to */
397 
398  bool enabled;
399 
400  /* Requested mode from modesetting. */
402 
403  /* Programmed mode in hw, after adjustments for encoders,
404  * crtc, panel scaling etc. Needed for timestamping etc.
405  */
407 
409 
410  int x, y;
411  const struct drm_crtc_funcs *funcs;
412 
413  /* CRTC gamma size for reporting to userspace */
416 
417  /* Constants needed for precise vblank and swap timestamping. */
419 
420  /* if you are using the helper */
422 
424 };
425 
426 
448 
449  /* Check to see if anything is attached to the connector.
450  * @force is set to false whilst polling, true when checking the
451  * connector due to user request. @force can be used by the driver
452  * to avoid expensive, destructive operations during automated
453  * probing.
454  */
456  bool force);
459  uint64_t val);
462 };
463 
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 
495 struct drm_encoder {
496  struct drm_device *dev;
497  struct list_head head;
498 
503 
504  struct drm_crtc *crtc;
505  const struct drm_encoder_funcs *funcs;
507 };
508 
512  DRM_FORCE_ON, /* force on analog part normally */
513  DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */
514 };
515 
516 /* should we poll this connector for connects and disconnects */
517 /* hot plug detectable */
518 #define DRM_CONNECTOR_POLL_HPD (1 << 0)
519 /* poll for connections */
520 #define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
521 /* can cleanly poll for disconnections without flickering the screen */
522 /* DACs should rarely do this without a lot of testing */
523 #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
524 
525 #define MAX_ELD_BYTES 128
526 
566  struct drm_device *dev;
567  struct device kdev;
569  struct list_head head;
570 
572 
577  struct list_head modes; /* list of modes on this connector */
578 
580 
581  /* these are modes added by probing with DDC or the BIOS */
583 
585  const struct drm_connector_funcs *funcs;
586 
590 
591  uint8_t polled; /* DRM_CONNECTOR_POLL_* */
592 
593  /* requested DPMS state */
594  int dpms;
595 
597 
598  /* forced on connector */
601  struct drm_encoder *encoder; /* currently active encoder */
602 
603  /* EDID bits */
605  bool dvi_dual;
606  int max_tmds_clock; /* in MHz */
608  int video_latency[2]; /* [0]: progressive, [1]: interlaced */
610  int null_edid_counter; /* needed to workaround some HW bugs where we get all 0s */
612 };
613 
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);
630 
632  struct drm_property *property, uint64_t val);
633 };
634 
652 struct drm_plane {
653  struct drm_device *dev;
654  struct list_head head;
655 
657 
661 
662  struct drm_crtc *crtc;
664 
665  /* CRTC gamma size for reporting to userspace */
668 
669  bool enabled;
670 
671  const struct drm_plane_funcs *funcs;
673 
675 };
676 
693 struct drm_mode_set {
695  struct drm_crtc *crtc;
697 
700 
703 };
704 
714  struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
715  struct drm_file *file_priv,
716  struct drm_mode_fb_cmd2 *mode_cmd);
718 };
719 
737 
738  /* list of object IDs for this group */
740 };
741 
770  struct mutex mutex; /* protects configuration (mode lists etc.) */
771  struct mutex idr_mutex; /* for IDR management */
772  struct idr crtc_idr; /* use this idr for all IDs, fb, crtc, connector, modes - just makes life easier */
773  /* this is limited to one for now */
774  int num_fb;
782 
783  int num_crtc;
785 
787 
792 
793  /* output poll support */
796 
797  /* pointers to standard properties */
801 
802  /* DVI-I properties */
805 
806  /* TV properties */
820 
821  /* Optional properties */
825 
826  /* dumb ioctl parameters */
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 
840  int type;
841  char *name;
842 };
843 
844 extern int drm_crtc_init(struct drm_device *dev,
845  struct drm_crtc *crtc,
846  const struct drm_crtc_funcs *funcs);
847 extern void drm_crtc_cleanup(struct drm_crtc *crtc);
848 
849 extern 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 
854 extern void drm_connector_cleanup(struct drm_connector *connector);
855 /* helper to unplug all connectors from sysfs for device */
856 extern void drm_connector_unplug_all(struct drm_device *dev);
857 
858 extern 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 
863 extern 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);
869 extern void drm_plane_cleanup(struct drm_plane *plane);
870 
871 extern void drm_encoder_cleanup(struct drm_encoder *encoder);
872 
873 extern char *drm_get_connector_name(struct drm_connector *connector);
874 extern char *drm_get_dpms_name(int val);
875 extern char *drm_get_dvi_i_subconnector_name(int val);
876 extern char *drm_get_dvi_i_select_name(int val);
877 extern char *drm_get_tv_subconnector_name(int val);
878 extern char *drm_get_tv_select_name(int val);
879 extern void drm_fb_release(struct drm_file *file_priv);
881 extern bool drm_probe_ddc(struct i2c_adapter *adapter);
882 extern struct edid *drm_get_edid(struct drm_connector *connector,
883  struct i2c_adapter *adapter);
884 extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid);
885 extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode);
886 extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode);
887 extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src);
888 extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
889  const struct drm_display_mode *mode);
891 extern void drm_mode_config_init(struct drm_device *dev);
892 extern void drm_mode_config_reset(struct drm_device *dev);
893 extern void drm_mode_config_cleanup(struct drm_device *dev);
894 extern void drm_mode_set_name(struct drm_display_mode *mode);
895 extern bool drm_mode_equal(struct drm_display_mode *mode1, struct drm_display_mode *mode2);
896 extern int drm_mode_width(struct drm_display_mode *mode);
897 extern int drm_mode_height(struct drm_display_mode *mode);
898 
899 /* for us by fb module */
900 extern int drm_mode_attachmode_crtc(struct drm_device *dev,
901  struct drm_crtc *crtc,
902  const struct drm_display_mode *mode);
903 extern int drm_mode_detachmode_crtc(struct drm_device *dev, struct drm_display_mode *mode);
904 
905 extern struct drm_display_mode *drm_mode_create(struct drm_device *dev);
906 extern void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode);
907 extern void drm_mode_list_concat(struct list_head *head,
908  struct list_head *new);
909 extern void drm_mode_validate_size(struct drm_device *dev,
910  struct list_head *mode_list,
911  int maxX, int maxY, int maxPitch);
912 extern void drm_mode_prune_invalid(struct drm_device *dev,
913  struct list_head *mode_list, bool verbose);
914 extern void drm_mode_sort(struct list_head *mode_list);
915 extern int drm_mode_hsync(const struct drm_display_mode *mode);
916 extern int drm_mode_vrefresh(const struct drm_display_mode *mode);
917 extern void drm_mode_set_crtcinfo(struct drm_display_mode *p,
918  int adjust_flags);
921  struct edid *edid);
923  struct drm_property *property,
924  uint64_t value);
926  struct drm_property *property,
927  uint64_t *value);
928 extern int drm_object_property_set_value(struct drm_mode_object *obj,
929  struct drm_property *property,
930  uint64_t val);
931 extern int drm_object_property_get_value(struct drm_mode_object *obj,
932  struct drm_property *property,
933  uint64_t *value);
934 extern struct drm_display_mode *drm_crtc_mode_create(struct drm_device *dev);
935 extern void drm_framebuffer_set_object(struct drm_device *dev,
936  unsigned long handle);
937 extern int drm_framebuffer_init(struct drm_device *dev,
938  struct drm_framebuffer *fb,
939  const struct drm_framebuffer_funcs *funcs);
940 extern void drm_framebuffer_unreference(struct drm_framebuffer *fb);
941 extern void drm_framebuffer_reference(struct drm_framebuffer *fb);
942 extern void drm_framebuffer_remove(struct drm_framebuffer *fb);
943 extern void drm_framebuffer_cleanup(struct drm_framebuffer *fb);
944 extern int drmfb_probe(struct drm_device *dev, struct drm_crtc *crtc);
945 extern int drmfb_remove(struct drm_device *dev, struct drm_framebuffer *fb);
946 extern void drm_crtc_probe_connector_modes(struct drm_device *dev, int maxX, int maxY);
947 extern bool drm_crtc_in_use(struct drm_crtc *crtc);
948 
950  struct drm_property *property, uint64_t init_val);
951 extern void drm_object_attach_property(struct drm_mode_object *obj,
952  struct drm_property *property,
953  uint64_t init_val);
954 extern struct drm_property *drm_property_create(struct drm_device *dev, int flags,
955  const char *name, int num_values);
956 extern 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);
961  int flags, const char *name,
962  const struct drm_prop_enum_list *props,
963  int num_values);
965  const char *name,
967 extern void drm_property_destroy(struct drm_device *dev, struct drm_property *property);
968 extern int drm_property_add_enum(struct drm_property *property, int index,
969  uint64_t value, const char *name);
971 extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats,
972  char *formats[]);
976 extern char *drm_get_encoder_name(struct drm_encoder *encoder);
977 
979  struct drm_encoder *encoder);
981  struct drm_encoder *encoder);
982 extern int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
983  int gamma_size);
984 extern struct drm_mode_object *drm_mode_object_find(struct drm_device *dev,
985  uint32_t id, uint32_t type);
986 /* IOCTLs */
987 extern int drm_mode_getresources(struct drm_device *dev,
988  void *data, struct drm_file *file_priv);
989 extern int drm_mode_getplane_res(struct drm_device *dev, void *data,
990  struct drm_file *file_priv);
991 extern int drm_mode_getcrtc(struct drm_device *dev,
992  void *data, struct drm_file *file_priv);
993 extern int drm_mode_getconnector(struct drm_device *dev,
994  void *data, struct drm_file *file_priv);
995 extern int drm_mode_setcrtc(struct drm_device *dev,
996  void *data, struct drm_file *file_priv);
997 extern int drm_mode_getplane(struct drm_device *dev,
998  void *data, struct drm_file *file_priv);
999 extern int drm_mode_setplane(struct drm_device *dev,
1000  void *data, struct drm_file *file_priv);
1001 extern int drm_mode_cursor_ioctl(struct drm_device *dev,
1002  void *data, struct drm_file *file_priv);
1003 extern int drm_mode_addfb(struct drm_device *dev,
1004  void *data, struct drm_file *file_priv);
1005 extern int drm_mode_addfb2(struct drm_device *dev,
1006  void *data, struct drm_file *file_priv);
1008 extern int drm_mode_rmfb(struct drm_device *dev,
1009  void *data, struct drm_file *file_priv);
1010 extern int drm_mode_getfb(struct drm_device *dev,
1011  void *data, struct drm_file *file_priv);
1012 extern int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
1013  void *data, struct drm_file *file_priv);
1014 extern int drm_mode_addmode_ioctl(struct drm_device *dev,
1015  void *data, struct drm_file *file_priv);
1016 extern int drm_mode_rmmode_ioctl(struct drm_device *dev,
1017  void *data, struct drm_file *file_priv);
1018 extern int drm_mode_attachmode_ioctl(struct drm_device *dev,
1019  void *data, struct drm_file *file_priv);
1020 extern int drm_mode_detachmode_ioctl(struct drm_device *dev,
1021  void *data, struct drm_file *file_priv);
1022 
1023 extern int drm_mode_getproperty_ioctl(struct drm_device *dev,
1024  void *data, struct drm_file *file_priv);
1025 extern int drm_mode_getblob_ioctl(struct drm_device *dev,
1026  void *data, struct drm_file *file_priv);
1028  void *data, struct drm_file *file_priv);
1029 extern int drm_mode_hotplug_ioctl(struct drm_device *dev,
1030  void *data, struct drm_file *file_priv);
1031 extern int drm_mode_replacefb(struct drm_device *dev,
1032  void *data, struct drm_file *file_priv);
1033 extern int drm_mode_getencoder(struct drm_device *dev,
1034  void *data, struct drm_file *file_priv);
1035 extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
1036  void *data, struct drm_file *file_priv);
1037 extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
1038  void *data, struct drm_file *file_priv);
1039 extern u8 *drm_find_cea_extension(struct edid *edid);
1040 extern bool drm_detect_hdmi_monitor(struct edid *edid);
1041 extern bool drm_detect_monitor_audio(struct edid *edid);
1042 extern int drm_mode_page_flip_ioctl(struct drm_device *dev,
1043  void *data, struct drm_file *file_priv);
1044 extern 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);
1047 extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev,
1048  int hdisplay, int vdisplay, int vrefresh,
1049  bool interlaced, int margins);
1050 extern 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);
1054 extern int drm_add_modes_noedid(struct drm_connector *connector,
1055  int hdisplay, int vdisplay);
1056 
1057 extern int drm_edid_header_is_valid(const u8 *raw_edid);
1058 extern bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid);
1059 extern bool drm_edid_is_valid(struct edid *edid);
1061  int hsize, int vsize, int fresh,
1062  bool rb);
1063 
1064 extern int drm_mode_create_dumb_ioctl(struct drm_device *dev,
1065  void *data, struct drm_file *file_priv);
1066 extern int drm_mode_mmap_dumb_ioctl(struct drm_device *dev,
1067  void *data, struct drm_file *file_priv);
1068 extern int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
1069  void *data, struct drm_file *file_priv);
1070 extern int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data,
1071  struct drm_file *file_priv);
1072 extern int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data,
1073  struct drm_file *file_priv);
1074 
1075 extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
1076  int *bpp);
1078 extern int drm_format_plane_cpp(uint32_t format, int plane);
1081 
1082 #endif /* __DRM_CRTC_H__ */