12b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/*
22b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
32b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com>
42b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright (c) 2008 Red Hat Inc.
52b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
62b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright (c) 2007-2008 Intel Corporation
72b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
82b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Permission is hereby granted, free of charge, to any person obtaining a
92b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * copy of this software and associated documentation files (the "Software"),
102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * to deal in the Software without restriction, including without limitation
112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * and/or sell copies of the Software, and to permit persons to whom the
132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Software is furnished to do so, subject to the following conditions:
142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * The above copyright notice and this permission notice shall be included in
162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * all copies or substantial portions of the Software.
172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * IN THE SOFTWARE.
252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#ifndef _DRM_MODE_H
282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define _DRM_MODE_H
292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_DISPLAY_INFO_LEN	32
312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_CONNECTOR_NAME_LEN	32
322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_DISPLAY_MODE_LEN	32
332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_PROP_NAME_LEN	32
342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_TYPE_BUILTIN	(1<<0)
362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN)
372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN)
382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_TYPE_PREFERRED	(1<<3)
392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_TYPE_DEFAULT	(1<<4)
402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_TYPE_USERDEF	(1<<5)
412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_TYPE_DRIVER	(1<<6)
422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Video mode flags */
442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* bit compatible with the xorg definitions. */
45edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_PHSYNC			(1<<0)
46edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_NHSYNC			(1<<1)
47edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_PVSYNC			(1<<2)
48edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_NVSYNC			(1<<3)
49edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_INTERLACE			(1<<4)
50edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_DBLSCAN			(1<<5)
51edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_CSYNC			(1<<6)
52edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_PCSYNC			(1<<7)
53edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_NCSYNC			(1<<8)
54edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_HSKEW			(1<<9) /* hskew provided */
55edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_BCAST			(1<<10)
56edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_PIXMUX			(1<<11)
57edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_DBLCLK			(1<<12)
58edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_CLKDIV2			(1<<13)
59edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define DRM_MODE_FLAG_3D_MASK			(0x1f<<14)
60edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define  DRM_MODE_FLAG_3D_NONE			(0<<14)
61edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define  DRM_MODE_FLAG_3D_FRAME_PACKING		(1<<14)
62edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE	(2<<14)
63edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE	(3<<14)
64edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL	(4<<14)
65edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define  DRM_MODE_FLAG_3D_L_DEPTH		(5<<14)
66edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH	(6<<14)
67edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)
68edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14)
69edf5c7cde5e10067076cbf79c0cc5d71aa78d7e2Damien Lespiau
702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* DPMS flags */
722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* bit compatible with the xorg definitions. */
732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_DPMS_ON	0
742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_DPMS_STANDBY	1
752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_DPMS_SUSPEND	2
762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_DPMS_OFF	3
772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Scaling mode options */
792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SCALE_NONE		0 /* Unmodified timing (display or
802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg					     software can still scale) */
812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SCALE_FULLSCREEN	1 /* Full screen, ignore aspect */
822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SCALE_CENTER		2 /* Centered, no scaling */
832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SCALE_ASPECT		3 /* Full screen, preserve aspect */
842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Dithering mode options */
862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_DITHERING_OFF	0
872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_DITHERING_ON	1
88431f7f00db844534dbcf9a63da0d2832a3d91bffDave Airlie#define DRM_MODE_DITHERING_AUTO 2
892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
9062731b84114e5dd3310b465921955db14278c256Kristian Høgsberg/* Dirty info options */
9162731b84114e5dd3310b465921955db14278c256Kristian Høgsberg#define DRM_MODE_DIRTY_OFF      0
9262731b84114e5dd3310b465921955db14278c256Kristian Høgsberg#define DRM_MODE_DIRTY_ON       1
9362731b84114e5dd3310b465921955db14278c256Kristian Høgsberg#define DRM_MODE_DIRTY_ANNOTATE 2
9462731b84114e5dd3310b465921955db14278c256Kristian Høgsberg
954f89f3cdc03c71acf0d146bc8c59a3bbf84ece47Sean Paul/* rotation property bits */
964f89f3cdc03c71acf0d146bc8c59a3bbf84ece47Sean Paul#define DRM_ROTATE_0	0
974f89f3cdc03c71acf0d146bc8c59a3bbf84ece47Sean Paul#define DRM_ROTATE_90	1
984f89f3cdc03c71acf0d146bc8c59a3bbf84ece47Sean Paul#define DRM_ROTATE_180	2
994f89f3cdc03c71acf0d146bc8c59a3bbf84ece47Sean Paul#define DRM_ROTATE_270	3
1004f89f3cdc03c71acf0d146bc8c59a3bbf84ece47Sean Paul#define DRM_REFLECT_X	4
1014f89f3cdc03c71acf0d146bc8c59a3bbf84ece47Sean Paul#define DRM_REFLECT_Y	5
1024f89f3cdc03c71acf0d146bc8c59a3bbf84ece47Sean Paul
1032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_modeinfo {
1042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 clock;
1052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u16 hdisplay, hsync_start, hsync_end, htotal, hskew;
1062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u16 vdisplay, vsync_start, vsync_end, vtotal, vscan;
1072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
108431f7f00db844534dbcf9a63da0d2832a3d91bffDave Airlie	__u32 vrefresh;
1092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 flags;
1112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 type;
1122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char name[DRM_DISPLAY_MODE_LEN];
1132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_card_res {
1162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 fb_id_ptr;
1172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 crtc_id_ptr;
1182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 connector_id_ptr;
1192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 encoder_id_ptr;
1202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_fbs;
1212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_crtcs;
1222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_connectors;
1232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_encoders;
1242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 min_width, max_width;
1252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 min_height, max_height;
1262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_crtc {
1292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 set_connectors_ptr;
1302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_connectors;
1312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 crtc_id; /**< Id */
1332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 fb_id; /**< Id of framebuffer */
1342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 x, y; /**< Position on the frameuffer */
1362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 gamma_size;
1382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 mode_valid;
1392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_mode_modeinfo mode;
1402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
142ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_MODE_PRESENT_TOP_FIELD     (1<<0)
143ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_MODE_PRESENT_BOTTOM_FIELD  (1<<1)
144ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
145ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes/* Planes blend with or override other bits on the CRTC */
146ac168bf2a068761b591187e6a0a52083d456280bJesse Barnesstruct drm_mode_set_plane {
147ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 plane_id;
148ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 crtc_id;
149ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 fb_id; /* fb object contains surface format type */
150ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 flags;
151ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
152ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	/* Signed dest location allows it to be partially off screen */
153ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__s32 crtc_x, crtc_y;
154ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 crtc_w, crtc_h;
155ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
156ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	/* Source values are 16.16 fixed point */
157ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 src_x, src_y;
158ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 src_h, src_w;
159ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes};
160ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
161ac168bf2a068761b591187e6a0a52083d456280bJesse Barnesstruct drm_mode_get_plane {
162ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 plane_id;
163ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
164ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 crtc_id;
165ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 fb_id;
166ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
167ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 possible_crtcs;
168ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 gamma_size;
169ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
170ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 count_format_types;
171ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u64 format_type_ptr;
172ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes};
173ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
174ac168bf2a068761b591187e6a0a52083d456280bJesse Barnesstruct drm_mode_get_plane_res {
175ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u64 plane_id_ptr;
176ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 count_planes;
177ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes};
178ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
1792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_NONE	0
1802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_DAC	1
1812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_TMDS	2
1822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_LVDS	3
1832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_TVDAC	4
184566c3ce877a4be72697e15cdfc421ce965f7c37dAdam Cheney#define DRM_MODE_ENCODER_VIRTUAL 5
185566c3ce877a4be72697e15cdfc421ce965f7c37dAdam Cheney#define DRM_MODE_ENCODER_DSI	6
186566c3ce877a4be72697e15cdfc421ce965f7c37dAdam Cheney#define DRM_MODE_ENCODER_DPMST	7
1872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_get_encoder {
1892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 encoder_id;
1902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 encoder_type;
1912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 crtc_id; /**< Id of crtc */
1932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 possible_crtcs;
1952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 possible_clones;
1962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* This is for connectors with multiple signal types. */
1992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
2002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_Automatic	0
2012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_Unknown	0
2022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_DVID	3
2032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_DVIA	4
2042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_Composite	5
2052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_SVIDEO	6
2062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_Component	8
2072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_SCART	9
2082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_Unknown	0
2102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_VGA		1
2112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_DVII		2
2122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_DVID		3
2132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_DVIA		4
2142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_Composite	5
2152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_SVIDEO	6
2162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_LVDS		7
2172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_Component	8
2182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_9PinDIN	9
2192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_DisplayPort	10
2202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_HDMIA	11
2212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_HDMIB	12
2222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_TV		13
223431f7f00db844534dbcf9a63da0d2832a3d91bffDave Airlie#define DRM_MODE_CONNECTOR_eDP		14
224566c3ce877a4be72697e15cdfc421ce965f7c37dAdam Cheney#define DRM_MODE_CONNECTOR_VIRTUAL      15
225566c3ce877a4be72697e15cdfc421ce965f7c37dAdam Cheney#define DRM_MODE_CONNECTOR_DSI		16
2262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_get_connector {
2282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 encoders_ptr;
2302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 modes_ptr;
2312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 props_ptr;
2322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 prop_values_ptr;
2332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_modes;
2352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_props;
2362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_encoders;
2372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 encoder_id; /**< Current Encoder */
2392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_id; /**< Id */
2402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_type;
2412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_type_id;
2422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connection;
2442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 mm_width, mm_height; /**< HxW in millimeters */
2452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 subpixel;
2462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_PENDING	(1<<0)
2492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_RANGE	(1<<1)
2502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_IMMUTABLE	(1<<2)
2512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_ENUM	(1<<3) /* enumerated type with text strings */
2522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_BLOB	(1<<4)
2537b228e900f59cda3cafb60692be9dd7aced6ad96Rob Clark#define DRM_MODE_PROP_BITMASK	(1<<5) /* bitmask of enumerated types */
2542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
255fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark/* non-extended types: legacy bitmask, one bit per type: */
256fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_LEGACY_TYPE  ( \
257fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark		DRM_MODE_PROP_RANGE | \
258fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark		DRM_MODE_PROP_ENUM | \
259fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark		DRM_MODE_PROP_BLOB | \
260fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark		DRM_MODE_PROP_BITMASK)
261fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark
262fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark/* extended-types: rather than continue to consume a bit per type,
263fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark * grab a chunk of the bits to use as integer type id.
264fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark */
265fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_EXTENDED_TYPE	0x0000ffc0
266fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_TYPE(n)		((n) << 6)
267fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_OBJECT		DRM_MODE_PROP_TYPE(1)
268fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_SIGNED_RANGE	DRM_MODE_PROP_TYPE(2)
269fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark
2700f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark/* the PROP_ATOMIC flag is used to hide properties from userspace that
2710f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark * is not aware of atomic properties.  This is mostly to work around
2720f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark * older userspace (DDX drivers) that read/write each prop they find,
2730f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark * witout being aware that this could be triggering a lengthy modeset.
2740f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark */
2750f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark#define DRM_MODE_PROP_ATOMIC        0x80000000
2760f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark
2772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_property_enum {
2782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 value;
2792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char name[DRM_PROP_NAME_LEN];
2802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_get_property {
2832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 values_ptr; /* values and blob lengths */
2842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 enum_blob_ptr; /* enum and blob id ptrs */
2852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 prop_id;
2872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 flags;
2882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char name[DRM_PROP_NAME_LEN];
2892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_values;
2912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_enum_blobs;
2922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_connector_set_property {
2952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 value;
2962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 prop_id;
2972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_id;
2982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3008c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_CRTC 0xcccccccc
3018c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
3028c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
3038c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_MODE 0xdededede
3048c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
3058c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_FB 0xfbfbfbfb
3068c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
3078c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
3088c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni
3098c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanonistruct drm_mode_obj_get_properties {
3108c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u64 props_ptr;
3118c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u64 prop_values_ptr;
3128c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 count_props;
3138c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 obj_id;
3148c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 obj_type;
3158c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni};
3168c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni
3178c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanonistruct drm_mode_obj_set_property {
3188c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u64 value;
3198c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 prop_id;
3208c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 obj_id;
3218c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 obj_type;
3228c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni};
3238c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni
3242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_get_blob {
3252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 blob_id;
3262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 length;
3272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 data;
3282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_fb_cmd {
3312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 fb_id;
3322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 width, height;
3332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 pitch;
3342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 bpp;
3352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 depth;
3362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* driver specific handle */
3372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 handle;
3382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
340ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */
341ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
342ac168bf2a068761b591187e6a0a52083d456280bJesse Barnesstruct drm_mode_fb_cmd2 {
343ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 fb_id;
344ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 width, height;
345ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 pixel_format; /* fourcc code from drm_fourcc.h */
346ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 flags;
347ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
348ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	/*
349ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * In case of planar formats, this ioctl allows up to 4
350ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * buffer objects with offsets and pitches per plane.
351ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * The pitch and offset order is dictated by the fourcc,
352ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * e.g. NV12 (http://fourcc.org/yuv.php#NV12) is described as:
353ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *
354ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *   YUV 4:2:0 image with a plane of 8 bit Y samples
355ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *   followed by an interleaved U/V plane containing
356ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *   8 bit 2x2 subsampled colour difference samples.
357ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *
358ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * So it would consist of Y as offset[0] and UV as
359ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * offset[1].  Note that offset[0] will generally
360ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * be 0.
361ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 */
362ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 handles[4];
363ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 pitches[4]; /* pitch for each plane */
364ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 offsets[4]; /* offset of each plane */
365ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes};
366ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
367019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
368019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
369019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz#define DRM_MODE_FB_DIRTY_FLAGS         0x03
370019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz
371019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz/*
372019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * Mark a region of a framebuffer as dirty.
373019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
374019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * Some hardware does not automatically update display contents
375019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * as a hardware or software draw to a framebuffer. This ioctl
376019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * allows userspace to tell the kernel and the hardware what
377019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * regions of the framebuffer have changed.
378019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
379019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * The kernel or hardware is free to update more then just the
380019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * region specified by the clip rects. The kernel or hardware
381019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * may also delay and/or coalesce several calls to dirty into a
382019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * single update.
383019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
384019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * Userspace may annotate the updates, the annotates are a
385019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * promise made by the caller that the change is either a copy
386019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * of pixels or a fill of a single color in the region specified.
387019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
388019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
389019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * the number of updated regions are half of num_clips given,
390019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * where the clip rects are paired in src and dst. The width and
391019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * height of each one of the pairs must match.
392019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
393019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
394019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * promises that the region specified of the clip rects is filled
395019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * completely with a single color as given in the color argument.
396019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz */
397019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz
3983e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantzstruct drm_mode_fb_dirty_cmd {
3993e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz	__u32 fb_id;
4003e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz	__u32 flags;
401019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz	__u32 color;
4023e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz	__u32 num_clips;
4033e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz	__u64 clips_ptr;
4043e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz};
4053e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz
4062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_mode_cmd {
4072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_id;
4082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_mode_modeinfo mode;
4092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CURSOR_BO	(1<<0)
4122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CURSOR_MOVE	(1<<1)
4132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/*
4152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * depending on the value in flags diffrent members are used.
4162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
4172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * CURSOR_BO uses
4182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    crtc
4192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    width
4202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    height
4212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    handle - if 0 turns the cursor of
4222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
4232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * CURSOR_MOVE uses
4242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    crtc
4252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    x
4262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    y
4272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
4282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_cursor {
4292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 flags;
4302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 crtc_id;
4312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__s32 x;
4322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__s32 y;
4332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 width;
4342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 height;
4352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* driver specific handle */
4362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 handle;
4372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4392e0ab6237697c9754d92689f77c1792c11be881bDave Airliestruct drm_mode_cursor2 {
4402e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 flags;
4412e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 crtc_id;
4422e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__s32 x;
4432e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__s32 y;
4442e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 width;
4452e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 height;
4462e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	/* driver specific handle */
4472e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 handle;
4482e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__s32 hot_x;
4492e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__s32 hot_y;
4502e0ab6237697c9754d92689f77c1792c11be881bDave Airlie};
4512e0ab6237697c9754d92689f77c1792c11be881bDave Airlie
4522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_crtc_lut {
4532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 crtc_id;
4542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 gamma_size;
4552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* pointers to arrays */
4572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 red;
4582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 green;
4592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 blue;
4602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
462b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg#define DRM_MODE_PAGE_FLIP_EVENT 0x01
463ebff7a1e2286781c6fc23e5ed9bcbf177603569cKeith Packard#define DRM_MODE_PAGE_FLIP_ASYNC 0x02
464ebff7a1e2286781c6fc23e5ed9bcbf177603569cKeith Packard#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT|DRM_MODE_PAGE_FLIP_ASYNC)
465b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg
46662731b84114e5dd3310b465921955db14278c256Kristian Høgsberg/*
46762731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * Request a page flip on the specified crtc.
46862731b84114e5dd3310b465921955db14278c256Kristian Høgsberg *
46962731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * This ioctl will ask KMS to schedule a page flip for the specified
47062731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * crtc.  Once any pending rendering targeting the specified fb (as of
47162731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * ioctl time) has completed, the crtc will be reprogrammed to display
47262731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * that fb after the next vertical refresh.  The ioctl returns
47362731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * immediately, but subsequent rendering to the current fb will block
47462731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * in the execbuffer ioctl until the page flip happens.  If a page
47562731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * flip is already pending as the ioctl is called, EBUSY will be
47662731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * returned.
47762731b84114e5dd3310b465921955db14278c256Kristian Høgsberg *
47862731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * The ioctl supports one flag, DRM_MODE_PAGE_FLIP_EVENT, which will
47962731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * request that drm sends back a vblank event (see drm.h: struct
48062731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * drm_event_vblank) when the page flip is done.  The user_data field
48162731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * passed in with this ioctl will be returned as the user_data field
48262731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * in the vblank event struct.
48362731b84114e5dd3310b465921955db14278c256Kristian Høgsberg *
48462731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * The reserved field must be zero until we figure out something
48562731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * clever to use it for.
48662731b84114e5dd3310b465921955db14278c256Kristian Høgsberg */
48762731b84114e5dd3310b465921955db14278c256Kristian Høgsberg
488b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsbergstruct drm_mode_crtc_page_flip {
48962731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u32 crtc_id;
49062731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u32 fb_id;
49162731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u32 flags;
49262731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u32 reserved;
49362731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u64 user_data;
494b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg};
495b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg
4964473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie/* create a dumb scanout buffer */
4974473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airliestruct drm_mode_create_dumb {
4985cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 height;
4995cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 width;
5005cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 bpp;
5015cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 flags;
5024473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        /* handle, pitch, size will be returned */
5035cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 handle;
5045cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 pitch;
5055cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u64 size;
5064473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie};
5074473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie
5084473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie/* set up for mmap of a dumb scanout buffer */
5094473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airliestruct drm_mode_map_dumb {
5104473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        /** Handle for the object being mapped. */
5114473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        __u32 handle;
5124473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        __u32 pad;
5134473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        /**
5144473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie         * Fake offset to use for subsequent mmap call
5154473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie         *
5164473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie         * This is a fixed-size type for 32/64 compatibility.
5174473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie         */
5184473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        __u64 offset;
5194473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie};
5204473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie
5214473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airliestruct drm_mode_destroy_dumb {
5225cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie	__u32 handle;
5234473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie};
5244473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie
525ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä/* page-flip flags are valid, plus: */
526ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä#define DRM_MODE_ATOMIC_TEST_ONLY 0x0100
527ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä#define DRM_MODE_ATOMIC_NONBLOCK  0x0200
5280f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark#define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400
529ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä
530ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä#define DRM_MODE_ATOMIC_FLAGS (\
531ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä		DRM_MODE_PAGE_FLIP_EVENT |\
532ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä		DRM_MODE_PAGE_FLIP_ASYNC |\
533ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä		DRM_MODE_ATOMIC_TEST_ONLY |\
5340f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark		DRM_MODE_ATOMIC_NONBLOCK |\
5350f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark		DRM_MODE_ATOMIC_ALLOW_MODESET)
536ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä
537ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälästruct drm_mode_atomic {
538ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä	__u32 flags;
539ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä	__u32 count_objs;
540ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä	__u64 objs_ptr;
541ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä	__u64 count_props_ptr;
542ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä	__u64 props_ptr;
543ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä	__u64 prop_values_ptr;
5440f45884ffc7a46dd4aef14ae6d227a10d8d24fd7Rob Clark	__u64 reserved;
545ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä	__u64 user_data;
546ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä};
547ba5b0e9d9a3c894673b68b14cc82f53df32bbce8Ville Syrjälä
54830636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul/**
54930636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul * Create a new 'blob' data property, copying length bytes from data pointer,
55030636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul * and returning new blob ID.
55130636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul */
55230636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paulstruct drm_mode_create_blob {
55330636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul	/** Pointer to data to copy. */
55430636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul	__u64 data;
55530636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul	/** Length of data to copy. */
55630636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul	__u32 length;
55730636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul	/** Return: new property ID. */
55830636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul	__u32 blob_id;
55930636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul};
56030636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul
56130636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul/**
56230636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul * Destroy a user-created blob property.
56330636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul */
56430636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paulstruct drm_mode_destroy_blob {
56530636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul	__u32 blob_id;
56630636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul};
56730636ccbcc74ed0aa583e4ea385d78b6d789ae57Sean Paul
5682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#endif
569