OSDN Git Service

Headers: Sync drm{,_mode}.h with the kernel
authorDaniel Stone <daniels@collabora.com>
Tue, 4 Apr 2017 20:38:56 +0000 (21:38 +0100)
committerDaniel Stone <daniels@collabora.com>
Thu, 6 Apr 2017 19:32:43 +0000 (20:32 +0100)
Generated using make headers_install, based on drm-misc-next commit
5db06a8a98f515f67446a69c57577c4c363ec65d.

This clarifies the comments around modifiers such that they are
per-framebuffer rather than per-plane, adds the beginnings of aspect
ratio mode flags, link status properties, and updates the 'reserved'
field from vblank events to include the CRTC ID.

v2: Split into separate patch, pull in full kernel changes.
v3: Undo revert of connector-type enums, since it is not actually
    harmful.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
include/drm/drm.h
include/drm/drm_mode.h

index f6fd5c2..1e7a4bc 100644 (file)
@@ -641,6 +641,7 @@ struct drm_gem_open {
 #define DRM_CAP_CURSOR_HEIGHT          0x9
 #define DRM_CAP_ADDFB2_MODIFIERS       0x10
 #define DRM_CAP_PAGE_FLIP_TARGET       0x11
+#define DRM_CAP_CRTC_IN_VBLANK_EVENT   0x12
 
 /** DRM_IOCTL_GET_CAP ioctl argument type */
 struct drm_get_cap {
@@ -845,7 +846,7 @@ struct drm_event_vblank {
        __u32 tv_sec;
        __u32 tv_usec;
        __u32 sequence;
-       __u32 reserved;
+       __u32 crtc_id; /* 0 on older kernels that do not support this */
 };
 
 /* typedef area */
index df0e350..70571af 100644 (file)
@@ -47,7 +47,15 @@ extern "C" {
 #define DRM_MODE_TYPE_DRIVER   (1<<6)
 
 /* Video mode flags */
-/* bit compatible with the xorg definitions. */
+/* bit compatible with the xrandr RR_ definitions (bits 0-13)
+ *
+ * ABI warning: Existing userspace really expects
+ * the mode flags to match the xrandr definitions. Any
+ * changes that don't match the xrandr definitions will
+ * likely need a new client cap or some other mechanism
+ * to avoid breaking existing userspace. This includes
+ * allocating new flags in the previously unused bits!
+ */
 #define DRM_MODE_FLAG_PHSYNC                   (1<<0)
 #define DRM_MODE_FLAG_NHSYNC                   (1<<1)
 #define DRM_MODE_FLAG_PVSYNC                   (1<<2)
@@ -107,6 +115,10 @@ extern "C" {
 #define DRM_MODE_DIRTY_ON       1
 #define DRM_MODE_DIRTY_ANNOTATE 2
 
+/* Link Status options */
+#define DRM_MODE_LINK_STATUS_GOOD      0
+#define DRM_MODE_LINK_STATUS_BAD       1
+
 struct drm_mode_modeinfo {
        __u32 clock;
        __u16 hdisplay;
@@ -220,14 +232,16 @@ struct drm_mode_get_encoder {
 
 /* This is for connectors with multiple signal types. */
 /* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
-#define DRM_MODE_SUBCONNECTOR_Automatic        0
-#define DRM_MODE_SUBCONNECTOR_Unknown  0
-#define DRM_MODE_SUBCONNECTOR_DVID     3
-#define DRM_MODE_SUBCONNECTOR_DVIA     4
-#define DRM_MODE_SUBCONNECTOR_Composite        5
-#define DRM_MODE_SUBCONNECTOR_SVIDEO   6
-#define DRM_MODE_SUBCONNECTOR_Component        8
-#define DRM_MODE_SUBCONNECTOR_SCART    9
+enum drm_mode_subconnector {
+       DRM_MODE_SUBCONNECTOR_Automatic = 0,
+       DRM_MODE_SUBCONNECTOR_Unknown = 0,
+       DRM_MODE_SUBCONNECTOR_DVID = 3,
+       DRM_MODE_SUBCONNECTOR_DVIA = 4,
+       DRM_MODE_SUBCONNECTOR_Composite = 5,
+       DRM_MODE_SUBCONNECTOR_SVIDEO = 6,
+       DRM_MODE_SUBCONNECTOR_Component = 8,
+       DRM_MODE_SUBCONNECTOR_SCART = 9,
+};
 
 #define DRM_MODE_CONNECTOR_Unknown     0
 #define DRM_MODE_CONNECTOR_VGA         1
@@ -392,17 +406,20 @@ struct drm_mode_fb_cmd2 {
         * offsets[1].  Note that offsets[0] will generally
         * be 0 (but this is not required).
         *
-        * To accommodate tiled, compressed, etc formats, a per-plane
+        * To accommodate tiled, compressed, etc formats, a
         * modifier can be specified.  The default value of zero
         * indicates "native" format as specified by the fourcc.
-        * Vendor specific modifier token.  This allows, for example,
-        * different tiling/swizzling pattern on different planes.
-        * See discussion above of DRM_FORMAT_MOD_xxx.
+        * Vendor specific modifier token.  Note that even though
+        * it looks like we have a modifier per-plane, we in fact
+        * do not. The modifier for each plane must be identical.
+        * Thus all combinations of different data layouts for
+        * multi plane formats must be enumerated as separate
+        * modifiers.
         */
        __u32 handles[4];
        __u32 pitches[4]; /* pitch for each plane */
        __u32 offsets[4]; /* offset of each plane */
-       __u64 modifier[4]; /* ie, tiling, compressed (per plane) */
+       __u64 modifier[4]; /* ie, tiling, compress */
 };
 
 #define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01