drm_mode.h revision fb4177046de19730a784c3c16e4b73aab0ec6e41
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
952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_modeinfo {
962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 clock;
972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u16 hdisplay, hsync_start, hsync_end, htotal, hskew;
982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u16 vdisplay, vsync_start, vsync_end, vtotal, vscan;
992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
100431f7f00db844534dbcf9a63da0d2832a3d91bffDave Airlie	__u32 vrefresh;
1012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 flags;
1032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 type;
1042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char name[DRM_DISPLAY_MODE_LEN];
1052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_card_res {
1082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 fb_id_ptr;
1092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 crtc_id_ptr;
1102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 connector_id_ptr;
1112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 encoder_id_ptr;
1122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_fbs;
1132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_crtcs;
1142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_connectors;
1152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_encoders;
1162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 min_width, max_width;
1172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 min_height, max_height;
1182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_crtc {
1212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 set_connectors_ptr;
1222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_connectors;
1232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 crtc_id; /**< Id */
1252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 fb_id; /**< Id of framebuffer */
1262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 x, y; /**< Position on the frameuffer */
1282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 gamma_size;
1302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 mode_valid;
1312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_mode_modeinfo mode;
1322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
134ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_MODE_PRESENT_TOP_FIELD     (1<<0)
135ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_MODE_PRESENT_BOTTOM_FIELD  (1<<1)
136ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
137ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes/* Planes blend with or override other bits on the CRTC */
138ac168bf2a068761b591187e6a0a52083d456280bJesse Barnesstruct drm_mode_set_plane {
139ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 plane_id;
140ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 crtc_id;
141ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 fb_id; /* fb object contains surface format type */
142ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 flags;
143ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
144ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	/* Signed dest location allows it to be partially off screen */
145ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__s32 crtc_x, crtc_y;
146ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 crtc_w, crtc_h;
147ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
148ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	/* Source values are 16.16 fixed point */
149ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 src_x, src_y;
150ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 src_h, src_w;
151ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes};
152ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
153ac168bf2a068761b591187e6a0a52083d456280bJesse Barnesstruct drm_mode_get_plane {
154ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 plane_id;
155ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
156ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 crtc_id;
157ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 fb_id;
158ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
159ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 possible_crtcs;
160ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 gamma_size;
161ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
162ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 count_format_types;
163ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u64 format_type_ptr;
164ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes};
165ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
166ac168bf2a068761b591187e6a0a52083d456280bJesse Barnesstruct drm_mode_get_plane_res {
167ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u64 plane_id_ptr;
168ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 count_planes;
169ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes};
170ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
1712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_NONE	0
1722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_DAC	1
1732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_TMDS	2
1742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_LVDS	3
1752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_ENCODER_TVDAC	4
1762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_get_encoder {
1782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 encoder_id;
1792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 encoder_type;
1802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 crtc_id; /**< Id of crtc */
1822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 possible_crtcs;
1842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 possible_clones;
1852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
1862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* This is for connectors with multiple signal types. */
1882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
1892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_Automatic	0
1902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_Unknown	0
1912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_DVID	3
1922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_DVIA	4
1932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_Composite	5
1942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_SVIDEO	6
1952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_Component	8
1962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_SUBCONNECTOR_SCART	9
1972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_Unknown	0
1992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_VGA		1
2002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_DVII		2
2012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_DVID		3
2022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_DVIA		4
2032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_Composite	5
2042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_SVIDEO	6
2052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_LVDS		7
2062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_Component	8
2072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_9PinDIN	9
2082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_DisplayPort	10
2092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_HDMIA	11
2102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_HDMIB	12
2112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CONNECTOR_TV		13
212431f7f00db844534dbcf9a63da0d2832a3d91bffDave Airlie#define DRM_MODE_CONNECTOR_eDP		14
2132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_get_connector {
2152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 encoders_ptr;
2172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 modes_ptr;
2182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 props_ptr;
2192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 prop_values_ptr;
2202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_modes;
2222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_props;
2232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_encoders;
2242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 encoder_id; /**< Current Encoder */
2262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_id; /**< Id */
2272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_type;
2282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_type_id;
2292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connection;
2312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 mm_width, mm_height; /**< HxW in millimeters */
2322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 subpixel;
2332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_PENDING	(1<<0)
2362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_RANGE	(1<<1)
2372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_IMMUTABLE	(1<<2)
2382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_ENUM	(1<<3) /* enumerated type with text strings */
2392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_PROP_BLOB	(1<<4)
2407b228e900f59cda3cafb60692be9dd7aced6ad96Rob Clark#define DRM_MODE_PROP_BITMASK	(1<<5) /* bitmask of enumerated types */
2412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
242fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark/* non-extended types: legacy bitmask, one bit per type: */
243fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_LEGACY_TYPE  ( \
244fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark		DRM_MODE_PROP_RANGE | \
245fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark		DRM_MODE_PROP_ENUM | \
246fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark		DRM_MODE_PROP_BLOB | \
247fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark		DRM_MODE_PROP_BITMASK)
248fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark
249fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark/* extended-types: rather than continue to consume a bit per type,
250fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark * grab a chunk of the bits to use as integer type id.
251fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark */
252fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_EXTENDED_TYPE	0x0000ffc0
253fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_TYPE(n)		((n) << 6)
254fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_OBJECT		DRM_MODE_PROP_TYPE(1)
255fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark#define DRM_MODE_PROP_SIGNED_RANGE	DRM_MODE_PROP_TYPE(2)
256fb4177046de19730a784c3c16e4b73aab0ec6e41Rob Clark
2572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_property_enum {
2582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 value;
2592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char name[DRM_PROP_NAME_LEN];
2602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_get_property {
2632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 values_ptr; /* values and blob lengths */
2642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 enum_blob_ptr; /* enum and blob id ptrs */
2652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 prop_id;
2672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 flags;
2682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	char name[DRM_PROP_NAME_LEN];
2692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_values;
2712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 count_enum_blobs;
2722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_connector_set_property {
2752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 value;
2762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 prop_id;
2772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_id;
2782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
2792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2808c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_CRTC 0xcccccccc
2818c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
2828c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
2838c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_MODE 0xdededede
2848c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
2858c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_FB 0xfbfbfbfb
2868c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
2878c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
2888c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni
2898c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanonistruct drm_mode_obj_get_properties {
2908c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u64 props_ptr;
2918c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u64 prop_values_ptr;
2928c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 count_props;
2938c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 obj_id;
2948c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 obj_type;
2958c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni};
2968c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni
2978c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanonistruct drm_mode_obj_set_property {
2988c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u64 value;
2998c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 prop_id;
3008c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 obj_id;
3018c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni	__u32 obj_type;
3028c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni};
3038c75703df0fdf65b3851f8eb5822705638decff3Paulo Zanoni
3042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_get_blob {
3052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 blob_id;
3062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 length;
3072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 data;
3082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_fb_cmd {
3112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 fb_id;
3122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 width, height;
3132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 pitch;
3142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 bpp;
3152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 depth;
3162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* driver specific handle */
3172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 handle;
3182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
320ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes#define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */
321ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
322ac168bf2a068761b591187e6a0a52083d456280bJesse Barnesstruct drm_mode_fb_cmd2 {
323ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 fb_id;
324ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 width, height;
325ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 pixel_format; /* fourcc code from drm_fourcc.h */
326ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 flags;
327ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
328ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	/*
329ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * In case of planar formats, this ioctl allows up to 4
330ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * buffer objects with offsets and pitches per plane.
331ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * The pitch and offset order is dictated by the fourcc,
332ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * e.g. NV12 (http://fourcc.org/yuv.php#NV12) is described as:
333ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *
334ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *   YUV 4:2:0 image with a plane of 8 bit Y samples
335ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *   followed by an interleaved U/V plane containing
336ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *   8 bit 2x2 subsampled colour difference samples.
337ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 *
338ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * So it would consist of Y as offset[0] and UV as
339ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * offset[1].  Note that offset[0] will generally
340ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 * be 0.
341ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	 */
342ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 handles[4];
343ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 pitches[4]; /* pitch for each plane */
344ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes	__u32 offsets[4]; /* offset of each plane */
345ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes};
346ac168bf2a068761b591187e6a0a52083d456280bJesse Barnes
347019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
348019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
349019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz#define DRM_MODE_FB_DIRTY_FLAGS         0x03
350019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz
351019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz/*
352019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * Mark a region of a framebuffer as dirty.
353019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
354019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * Some hardware does not automatically update display contents
355019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * as a hardware or software draw to a framebuffer. This ioctl
356019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * allows userspace to tell the kernel and the hardware what
357019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * regions of the framebuffer have changed.
358019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
359019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * The kernel or hardware is free to update more then just the
360019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * region specified by the clip rects. The kernel or hardware
361019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * may also delay and/or coalesce several calls to dirty into a
362019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * single update.
363019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
364019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * Userspace may annotate the updates, the annotates are a
365019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * promise made by the caller that the change is either a copy
366019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * of pixels or a fill of a single color in the region specified.
367019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
368019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
369019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * the number of updated regions are half of num_clips given,
370019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * where the clip rects are paired in src and dst. The width and
371019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * height of each one of the pairs must match.
372019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz *
373019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
374019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * promises that the region specified of the clip rects is filled
375019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz * completely with a single color as given in the color argument.
376019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz */
377019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz
3783e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantzstruct drm_mode_fb_dirty_cmd {
3793e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz	__u32 fb_id;
3803e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz	__u32 flags;
381019a408a69896497ca728b703c349306efd1a225Jakob Bornecrantz	__u32 color;
3823e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz	__u32 num_clips;
3833e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz	__u64 clips_ptr;
3843e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz};
3853e48613b482a8ca01ea5719e9cc342a9d4b28db0Jakob Bornecrantz
3862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_mode_cmd {
3872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 connector_id;
3882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_mode_modeinfo mode;
3892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
3902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CURSOR_BO	(1<<0)
3922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_MODE_CURSOR_MOVE	(1<<1)
3932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/*
3952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * depending on the value in flags diffrent members are used.
3962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
3972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * CURSOR_BO uses
3982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    crtc
3992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    width
4002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    height
4012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    handle - if 0 turns the cursor of
4022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
4032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * CURSOR_MOVE uses
4042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    crtc
4052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    x
4062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    y
4072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
4082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_cursor {
4092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 flags;
4102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 crtc_id;
4112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__s32 x;
4122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__s32 y;
4132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 width;
4142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 height;
4152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* driver specific handle */
4162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 handle;
4172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4192e0ab6237697c9754d92689f77c1792c11be881bDave Airliestruct drm_mode_cursor2 {
4202e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 flags;
4212e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 crtc_id;
4222e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__s32 x;
4232e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__s32 y;
4242e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 width;
4252e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 height;
4262e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	/* driver specific handle */
4272e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__u32 handle;
4282e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__s32 hot_x;
4292e0ab6237697c9754d92689f77c1792c11be881bDave Airlie	__s32 hot_y;
4302e0ab6237697c9754d92689f77c1792c11be881bDave Airlie};
4312e0ab6237697c9754d92689f77c1792c11be881bDave Airlie
4322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergstruct drm_mode_crtc_lut {
4332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 crtc_id;
4342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u32 gamma_size;
4352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
4362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* pointers to arrays */
4372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 red;
4382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 green;
4392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	__u64 blue;
4402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg};
4412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
442b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg#define DRM_MODE_PAGE_FLIP_EVENT 0x01
443ebff7a1e2286781c6fc23e5ed9bcbf177603569cKeith Packard#define DRM_MODE_PAGE_FLIP_ASYNC 0x02
444ebff7a1e2286781c6fc23e5ed9bcbf177603569cKeith Packard#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT|DRM_MODE_PAGE_FLIP_ASYNC)
445b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg
44662731b84114e5dd3310b465921955db14278c256Kristian Høgsberg/*
44762731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * Request a page flip on the specified crtc.
44862731b84114e5dd3310b465921955db14278c256Kristian Høgsberg *
44962731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * This ioctl will ask KMS to schedule a page flip for the specified
45062731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * crtc.  Once any pending rendering targeting the specified fb (as of
45162731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * ioctl time) has completed, the crtc will be reprogrammed to display
45262731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * that fb after the next vertical refresh.  The ioctl returns
45362731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * immediately, but subsequent rendering to the current fb will block
45462731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * in the execbuffer ioctl until the page flip happens.  If a page
45562731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * flip is already pending as the ioctl is called, EBUSY will be
45662731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * returned.
45762731b84114e5dd3310b465921955db14278c256Kristian Høgsberg *
45862731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * The ioctl supports one flag, DRM_MODE_PAGE_FLIP_EVENT, which will
45962731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * request that drm sends back a vblank event (see drm.h: struct
46062731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * drm_event_vblank) when the page flip is done.  The user_data field
46162731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * passed in with this ioctl will be returned as the user_data field
46262731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * in the vblank event struct.
46362731b84114e5dd3310b465921955db14278c256Kristian Høgsberg *
46462731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * The reserved field must be zero until we figure out something
46562731b84114e5dd3310b465921955db14278c256Kristian Høgsberg * clever to use it for.
46662731b84114e5dd3310b465921955db14278c256Kristian Høgsberg */
46762731b84114e5dd3310b465921955db14278c256Kristian Høgsberg
468b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsbergstruct drm_mode_crtc_page_flip {
46962731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u32 crtc_id;
47062731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u32 fb_id;
47162731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u32 flags;
47262731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u32 reserved;
47362731b84114e5dd3310b465921955db14278c256Kristian Høgsberg	__u64 user_data;
474b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg};
475b80bcffba6175c53ebe1f1bd02730de0338cc039Kristian Høgsberg
4764473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie/* create a dumb scanout buffer */
4774473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airliestruct drm_mode_create_dumb {
4785cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 height;
4795cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 width;
4805cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 bpp;
4815cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 flags;
4824473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        /* handle, pitch, size will be returned */
4835cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 handle;
4845cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u32 pitch;
4855cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie        __u64 size;
4864473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie};
4874473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie
4884473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie/* set up for mmap of a dumb scanout buffer */
4894473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airliestruct drm_mode_map_dumb {
4904473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        /** Handle for the object being mapped. */
4914473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        __u32 handle;
4924473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        __u32 pad;
4934473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        /**
4944473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie         * Fake offset to use for subsequent mmap call
4954473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie         *
4964473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie         * This is a fixed-size type for 32/64 compatibility.
4974473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie         */
4984473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie        __u64 offset;
4994473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie};
5004473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie
5014473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airliestruct drm_mode_destroy_dumb {
5025cb554a0d6e986f2d7300a91d95983fa09b17f65Dave Airlie	__u32 handle;
5034473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie};
5044473a7e8234da6d16f4ccfa660fbd72ff1b7dd95Dave Airlie
5052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#endif
506