Pull new drm.h and drm_mode.h definitions for client caps and atomic
ioctl.

Signed-off-by: Daniel Stone <daniels at collabora.com>
---
 include/drm/drm.h      | 23 ++++++++++++++++++++++-
 include/drm/drm_mode.h | 43 ++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 62 insertions(+), 4 deletions(-)

diff --git a/include/drm/drm.h b/include/drm/drm.h
index 229a29f..44ef685 100644
--- a/include/drm/drm.h
+++ b/include/drm/drm.h
@@ -635,6 +635,13 @@ struct drm_get_cap {
  */
 #define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2

+/**
+ * DRM_CLIENT_CAP_ATOMIC
+ *
+ * If set to 1, the DRM core will expose atomic properties to userspace
+*/
+ #define DRM_CLIENT_CAP_ATOMIC  3
+
 /** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
 struct drm_set_client_cap {
        __u64 capability;
@@ -758,10 +765,11 @@ struct drm_prime_handle {
 #define DRM_IOCTL_MODE_OBJ_GETPROPERTIES       DRM_IOWR(0xB9, struct 
drm_mode_obj_get_properties)
 #define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct 
drm_mode_obj_set_property)
 #define DRM_IOCTL_MODE_CURSOR2         DRM_IOWR(0xBB, struct drm_mode_cursor2)
+#define DRM_IOCTL_MODE_ATOMIC          DRM_IOWR(0xBC, struct drm_mode_atomic)

 /**
  * Device specific ioctls should only be in their respective headers
- * The device specific ioctl range is from 0x40 to 0x99.
+ * The device specific ioctl range is from 0x40 to 0x9f.
  * Generic IOCTLS restart at 0xA0.
  *
  * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and
@@ -807,6 +815,19 @@ struct drm_event_vblank {
 #define DRM_CAP_TIMESTAMP_MONOTONIC 0x6
 #define DRM_CAP_ASYNC_PAGE_FLIP 0x7

+/*
+ * The CURSOR_WIDTH and CURSOR_HEIGHT capabilities return a valid widthxheight
+ * combination for the hardware cursor. The intention is that a hardware
+ * agnostic userspace can query a cursor plane size to use.
+ *
+ * Note that the cross-driver contract is to merely return a valid size;
+ * drivers are free to attach another meaning on top, eg. i915 returns the
+ * maximum plane size.
+ */
+#define DRM_CAP_CURSOR_WIDTH           0x8
+#define DRM_CAP_CURSOR_HEIGHT          0x9
+#define DRM_CAP_ADDFB2_MODIFIERS       0x10
+
 #define DRM_PRIME_CAP_IMPORT 0x1
 #define DRM_PRIME_CAP_EXPORT 0x2

diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
index a2ab88a..b333102 100644
--- a/include/drm/drm_mode.h
+++ b/include/drm/drm_mode.h
@@ -82,6 +82,11 @@
 #define DRM_MODE_SCALE_CENTER          2 /* Centered, no scaling */
 #define DRM_MODE_SCALE_ASPECT          3 /* Full screen, preserve aspect */

+/* Picture aspect ratio options */
+#define DRM_MODE_PICTURE_ASPECT_NONE   0
+#define DRM_MODE_PICTURE_ASPECT_4_3    1
+#define DRM_MODE_PICTURE_ASPECT_16_9   2
+
 /* Dithering mode options */
 #define DRM_MODE_DITHERING_OFF 0
 #define DRM_MODE_DITHERING_ON  1
@@ -340,18 +345,27 @@ struct drm_mode_fb_cmd2 {
         *   followed by an interleaved U/V plane containing
         *   8 bit 2x2 subsampled colour difference samples.
         *
-        * So it would consist of Y as offset[0] and UV as
-        * offset[1].  Note that offset[0] will generally
-        * be 0.
+        * So it would consist of Y as offsets[0] and UV as
+        * offsets[1].  Note that offsets[0] will generally
+        * be 0 (but this is not required).
+        *
+        * To accommodate tiled, compressed, etc formats, a per-plane
+        * 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.
         */
        __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) */
 };

 #define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
 #define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
 #define DRM_MODE_FB_DIRTY_FLAGS         0x03
+#define DRM_MODE_FB_DIRTY_MAX_CLIPS     256

 /*
  * Mark a region of a framebuffer as dirty.
@@ -507,4 +521,27 @@ struct drm_mode_destroy_dumb {
        __u32 handle;
 };

+/* page-flip flags are valid, plus: */
+#define DRM_MODE_ATOMIC_TEST_ONLY 0x0100
+#define DRM_MODE_ATOMIC_NONBLOCK  0x0200
+#define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400
+
+#define DRM_MODE_ATOMIC_FLAGS (\
+               DRM_MODE_PAGE_FLIP_EVENT |\
+               DRM_MODE_PAGE_FLIP_ASYNC |\
+               DRM_MODE_ATOMIC_TEST_ONLY |\
+               DRM_MODE_ATOMIC_NONBLOCK |\
+               DRM_MODE_ATOMIC_ALLOW_MODESET)
+
+struct drm_mode_atomic {
+       __u32 flags;
+       __u32 count_objs;
+       __u64 objs_ptr;
+       __u64 count_props_ptr;
+       __u64 props_ptr;
+       __u64 prop_values_ptr;
+       __u64 reserved;
+       __u64 user_data;
+};
+
 #endif
-- 
2.4.0

Reply via email to