1f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/*
2f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
3f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com>
4f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * Copyright (c) 2008 Red Hat Inc.
5f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
6f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * Copyright (c) 2007-2008 Intel Corporation
7f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *
8f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * Permission is hereby granted, free of charge, to any person obtaining a
9f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * copy of this software and associated documentation files (the "Software"),
10f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * to deal in the Software without restriction, including without limitation
11f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * and/or sell copies of the Software, and to permit persons to whom the
13f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * Software is furnished to do so, subject to the following conditions:
14f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *
15f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * The above copyright notice and this permission notice shall be included in
16f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * all copies or substantial portions of the Software.
17f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *
18f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * IN THE SOFTWARE.
25f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu */
26f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
27f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#ifndef _DRM_MODE_H
28f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define _DRM_MODE_H
29f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
30f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_DISPLAY_INFO_LEN	32
31f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_CONNECTOR_NAME_LEN	32
32f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_DISPLAY_MODE_LEN	32
33f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_PROP_NAME_LEN	32
34f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
35f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_TYPE_BUILTIN	(1<<0)
36f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN)
37f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN)
38f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_TYPE_PREFERRED	(1<<3)
39f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_TYPE_DEFAULT	(1<<4)
40f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_TYPE_USERDEF	(1<<5)
41f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_TYPE_DRIVER	(1<<6)
42f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
43f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/* Video mode flags */
44f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/* bit compatible with the xorg definitions. */
45f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_PHSYNC	(1<<0)
46f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_NHSYNC	(1<<1)
47f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_PVSYNC	(1<<2)
48f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_NVSYNC	(1<<3)
49f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_INTERLACE	(1<<4)
50f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_DBLSCAN	(1<<5)
51f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_CSYNC	(1<<6)
52f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_PCSYNC	(1<<7)
53f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_NCSYNC	(1<<8)
54f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_HSKEW	(1<<9) /* hskew provided */
55f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_BCAST	(1<<10)
56f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_PIXMUX	(1<<11)
57f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_DBLCLK	(1<<12)
58f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_FLAG_CLKDIV2	(1<<13)
5944dcf9e392e11e586c6423fc5531d5359e5c3918Arun Kannan#define DRM_MODE_FLAG_PAR16_9	(1<<14)
6044dcf9e392e11e586c6423fc5531d5359e5c3918Arun Kannan#define DRM_MODE_FLAG_PAR4_3	(1<<15)
61f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
62f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/* DPMS flags */
63f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/* bit compatible with the xorg definitions. */
64f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_DPMS_ON	0
65f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_DPMS_STANDBY	1
66f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_DPMS_SUSPEND	2
67f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_DPMS_OFF	3
68f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
69f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/* Scaling mode options */
70e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_SCALE_NONE		0 /* Unmodified timing (display or
71e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare					     software can still scale) */
72e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_SCALE_FULLSCREEN	1 /* Full screen, ignore aspect */
73e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_SCALE_CENTER		2 /* Centered, no scaling */
74e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_SCALE_ASPECT		3 /* Full screen, preserve aspect */
75f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
76f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/* Dithering mode options */
77f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_DITHERING_OFF	0
78f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_DITHERING_ON	1
79e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_DITHERING_AUTO 2
80e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
81e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare/* Dirty info options */
82e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_DIRTY_OFF      0
83e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_DIRTY_ON       1
84e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_DIRTY_ANNOTATE 2
85f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
86f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_modeinfo {
87e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 clock;
88e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u16 hdisplay, hsync_start, hsync_end, htotal, hskew;
89e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u16 vdisplay, vsync_start, vsync_end, vtotal, vscan;
90f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
91e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 vrefresh;
92f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
93e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 flags;
94e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 type;
95f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu	char name[DRM_DISPLAY_MODE_LEN];
96f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
97f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
98f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_card_res {
99e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 fb_id_ptr;
100e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 crtc_id_ptr;
101e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 connector_id_ptr;
102e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 encoder_id_ptr;
103e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_fbs;
104e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_crtcs;
105e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_connectors;
106e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_encoders;
107e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 min_width, max_width;
108e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 min_height, max_height;
109f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
110f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
111f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_crtc {
112e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 set_connectors_ptr;
113e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_connectors;
114f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
115e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 crtc_id; /**< Id */
116e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 fb_id; /**< Id of framebuffer */
117f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
118e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 x, y; /**< Position on the frameuffer */
119f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
120e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 gamma_size;
121e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 mode_valid;
122f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu	struct drm_mode_modeinfo mode;
123f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
124f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
125f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_ENCODER_NONE	0
126f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_ENCODER_DAC	1
127f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_ENCODER_TMDS	2
128f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_ENCODER_LVDS	3
129f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_ENCODER_TVDAC	4
130e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_ENCODER_MIPI   5
131f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
132f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_get_encoder {
133e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 encoder_id;
134e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 encoder_type;
135f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
136e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 crtc_id; /**< Id of crtc */
137f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
138e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 possible_crtcs;
139e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 possible_clones;
140f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
141f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
142f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/* This is for connectors with multiple signal types. */
143f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
144f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_SUBCONNECTOR_Automatic	0
145f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_SUBCONNECTOR_Unknown	0
146f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_SUBCONNECTOR_DVID	3
147f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_SUBCONNECTOR_DVIA	4
148f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_SUBCONNECTOR_Composite	5
149f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_SUBCONNECTOR_SVIDEO	6
150f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_SUBCONNECTOR_Component	8
151e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_SUBCONNECTOR_SCART	9
152f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
153f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_Unknown	0
154f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_VGA		1
155f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_DVII		2
156f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_DVID		3
157f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_DVIA		4
158f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_Composite	5
159f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_SVIDEO	6
160f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_LVDS		7
161f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_Component	8
162f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_9PinDIN	9
163f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_DisplayPort	10
164f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_HDMIA	11
165f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CONNECTOR_HDMIB	12
166e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_CONNECTOR_TV		13
167e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_CONNECTOR_eDP		14
168e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_CONNECTOR_MIPI         15
169f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
170f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_get_connector {
171f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
172e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 encoders_ptr;
173e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 modes_ptr;
174e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 props_ptr;
175e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 prop_values_ptr;
176f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
177e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_modes;
178e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_props;
179e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_encoders;
180f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
181e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 encoder_id; /**< Current Encoder */
182e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 connector_id; /**< Id */
183e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 connector_type;
184e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 connector_type_id;
185f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
186e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 connection;
187e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 mm_width, mm_height; /**< HxW in millimeters */
188e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 subpixel;
189d1553599089a69df838154ed769c3fd4456b33b7Rajat S Gupta
190d1553599089a69df838154ed769c3fd4456b33b7Rajat S Gupta	__u32 pad;
191f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
192f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
193f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_PROP_PENDING	(1<<0)
194f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_PROP_RANGE	(1<<1)
195f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_PROP_IMMUTABLE	(1<<2)
196f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_PROP_ENUM	(1<<3) /* enumerated type with text strings */
197f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_PROP_BLOB	(1<<4)
198f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
199f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_property_enum {
200e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 value;
201f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu	char name[DRM_PROP_NAME_LEN];
202f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
203f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
204f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_get_property {
205e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 values_ptr; /* values and blob lengths */
206e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 enum_blob_ptr; /* enum and blob id ptrs */
207f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
208e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 prop_id;
209e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 flags;
210f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu	char name[DRM_PROP_NAME_LEN];
211f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
212e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_values;
213e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 count_enum_blobs;
214f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
215f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
216f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_connector_set_property {
217e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 value;
218e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 prop_id;
219e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 connector_id;
220f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
221f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
222f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_get_blob {
223e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 blob_id;
224e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 length;
225e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 data;
226f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
227f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
228f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_fb_cmd {
229e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 fb_id;
230e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 width, height;
231e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 pitch;
232e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 bpp;
233e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 depth;
234f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu	/* driver specific handle */
235e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 handle;
236e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare};
237e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
238e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
239e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
240e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_FB_DIRTY_FLAGS         0x03
241e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
242e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_FB_DIRTY_MAX_CLIPS     256
243e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
244e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare/*
245e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * Mark a region of a framebuffer as dirty.
246e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare *
247e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * Some hardware does not automatically update display contents
248e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * as a hardware or software draw to a framebuffer. This ioctl
249e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * allows userspace to tell the kernel and the hardware what
250e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * regions of the framebuffer have changed.
251e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare *
252e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * The kernel or hardware is free to update more then just the
253e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * region specified by the clip rects. The kernel or hardware
254e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * may also delay and/or coalesce several calls to dirty into a
255e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * single update.
256e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare *
257e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * Userspace may annotate the updates, the annotates are a
258e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * promise made by the caller that the change is either a copy
259e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * of pixels or a fill of a single color in the region specified.
260e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare *
261e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
262e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * the number of updated regions are half of num_clips given,
263e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * where the clip rects are paired in src and dst. The width and
264e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * height of each one of the pairs must match.
265e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare *
266e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
267e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * promises that the region specified of the clip rects is filled
268e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * completely with a single color as given in the color argument.
269e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare */
270e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
271e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Bearestruct drm_mode_fb_dirty_cmd {
272e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 fb_id;
273e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 flags;
274e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 color;
275e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 num_clips;
276e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 clips_ptr;
277f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
278f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
279f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_mode_cmd {
280e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 connector_id;
281f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu	struct drm_mode_modeinfo mode;
282f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
283f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
284f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CURSOR_BO	(1<<0)
285f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#define DRM_MODE_CURSOR_MOVE	(1<<1)
286f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
287f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu/*
288e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * depending on the value in flags different members are used.
289f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *
290f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * CURSOR_BO uses
291f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *    crtc
292f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *    width
293f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *    height
294f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *    handle - if 0 turns the cursor of
295f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *
296f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu * CURSOR_MOVE uses
297f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *    crtc
298f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *    x
299f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu *    y
300f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu */
301f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_cursor {
302e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 flags;
303e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 crtc_id;
304e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__s32 x;
305e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__s32 y;
306e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 width;
307e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 height;
308f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu	/* driver specific handle */
309e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 handle;
310f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
311f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
312f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryustruct drm_mode_crtc_lut {
313e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 crtc_id;
314e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 gamma_size;
315f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
316f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu	/* pointers to arrays */
317e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 red;
318e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 green;
319e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 blue;
320e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare};
321e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
322e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_PAGE_FLIP_EVENT 0x01
323e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare#define DRM_MODE_PAGE_FLIP_FLAGS DRM_MODE_PAGE_FLIP_EVENT
324e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
325e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare/*
326e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * Request a page flip on the specified crtc.
327e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare *
328e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * This ioctl will ask KMS to schedule a page flip for the specified
329e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * crtc.  Once any pending rendering targeting the specified fb (as of
330e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * ioctl time) has completed, the crtc will be reprogrammed to display
331e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * that fb after the next vertical refresh.  The ioctl returns
332e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * immediately, but subsequent rendering to the current fb will block
333e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * in the execbuffer ioctl until the page flip happens.  If a page
334e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * flip is already pending as the ioctl is called, EBUSY will be
335e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * returned.
336e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare *
337e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * The ioctl supports one flag, DRM_MODE_PAGE_FLIP_EVENT, which will
338e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * request that drm sends back a vblank event (see drm.h: struct
339e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * drm_event_vblank) when the page flip is done.  The user_data field
340e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * passed in with this ioctl will be returned as the user_data field
341e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * in the vblank event struct.
342e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare *
343e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * The reserved field must be zero until we figure out something
344e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare * clever to use it for.
345e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare */
346e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
347e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Bearestruct drm_mode_crtc_page_flip {
348e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 crtc_id;
349e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 fb_id;
350e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 flags;
351e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 reserved;
352e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 user_data;
353e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare};
354e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
355e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare/* create a dumb scanout buffer */
356e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Bearestruct drm_mode_create_dumb {
357e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	uint32_t height;
358e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	uint32_t width;
359e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	uint32_t bpp;
360e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	uint32_t flags;
361e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	/* handle, pitch, size will be returned */
362e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	uint32_t handle;
363e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	uint32_t pitch;
364e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	uint64_t size;
365e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare};
366e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
367e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare/* set up for mmap of a dumb scanout buffer */
368e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Bearestruct drm_mode_map_dumb {
369e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	/** Handle for the object being mapped. */
370e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 handle;
371e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u32 pad;
372e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	/**
373e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	 * Fake offset to use for subsequent mmap call
374e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	 *
375e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	 * This is a fixed-size type for 32/64 compatibility.
376e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	 */
377e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	__u64 offset;
378e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare};
379e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare
380e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Bearestruct drm_mode_destroy_dumb {
381e1495ec1ca3e740a1e20d6ce705499502bac7824Bruce Beare	uint32_t handle;
382f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu};
383f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu
384f0352d4fde4ec179ffe04c3f834199d3bad36087Ho-Eun Ryu#endif
385