xref: /aosp_15_r20/external/libdrm/include/drm/drm_mode.h (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
1*7688df22SAndroid Build Coastguard Worker /*
2*7688df22SAndroid Build Coastguard Worker  * Copyright (c) 2007 Dave Airlie <[email protected]>
3*7688df22SAndroid Build Coastguard Worker  * Copyright (c) 2007 Jakob Bornecrantz <[email protected]>
4*7688df22SAndroid Build Coastguard Worker  * Copyright (c) 2008 Red Hat Inc.
5*7688df22SAndroid Build Coastguard Worker  * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
6*7688df22SAndroid Build Coastguard Worker  * Copyright (c) 2007-2008 Intel Corporation
7*7688df22SAndroid Build Coastguard Worker  *
8*7688df22SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
9*7688df22SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
10*7688df22SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
11*7688df22SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12*7688df22SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
13*7688df22SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
14*7688df22SAndroid Build Coastguard Worker  *
15*7688df22SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included in
16*7688df22SAndroid Build Coastguard Worker  * all copies or substantial portions of the Software.
17*7688df22SAndroid Build Coastguard Worker  *
18*7688df22SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19*7688df22SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20*7688df22SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21*7688df22SAndroid Build Coastguard Worker  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22*7688df22SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23*7688df22SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24*7688df22SAndroid Build Coastguard Worker  * IN THE SOFTWARE.
25*7688df22SAndroid Build Coastguard Worker  */
26*7688df22SAndroid Build Coastguard Worker 
27*7688df22SAndroid Build Coastguard Worker #ifndef _DRM_MODE_H
28*7688df22SAndroid Build Coastguard Worker #define _DRM_MODE_H
29*7688df22SAndroid Build Coastguard Worker 
30*7688df22SAndroid Build Coastguard Worker #include "drm.h"
31*7688df22SAndroid Build Coastguard Worker 
32*7688df22SAndroid Build Coastguard Worker #if defined(__cplusplus)
33*7688df22SAndroid Build Coastguard Worker extern "C" {
34*7688df22SAndroid Build Coastguard Worker #endif
35*7688df22SAndroid Build Coastguard Worker 
36*7688df22SAndroid Build Coastguard Worker /**
37*7688df22SAndroid Build Coastguard Worker  * DOC: overview
38*7688df22SAndroid Build Coastguard Worker  *
39*7688df22SAndroid Build Coastguard Worker  * DRM exposes many UAPI and structure definitions to have a consistent
40*7688df22SAndroid Build Coastguard Worker  * and standardized interface with users.
41*7688df22SAndroid Build Coastguard Worker  * Userspace can refer to these structure definitions and UAPI formats
42*7688df22SAndroid Build Coastguard Worker  * to communicate to drivers.
43*7688df22SAndroid Build Coastguard Worker  */
44*7688df22SAndroid Build Coastguard Worker 
45*7688df22SAndroid Build Coastguard Worker #define DRM_CONNECTOR_NAME_LEN	32
46*7688df22SAndroid Build Coastguard Worker #define DRM_DISPLAY_MODE_LEN	32
47*7688df22SAndroid Build Coastguard Worker #define DRM_PROP_NAME_LEN	32
48*7688df22SAndroid Build Coastguard Worker 
49*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_TYPE_BUILTIN	(1<<0) /* deprecated */
50*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN) /* deprecated */
51*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN) /* deprecated */
52*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_TYPE_PREFERRED	(1<<3)
53*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_TYPE_DEFAULT	(1<<4) /* deprecated */
54*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_TYPE_USERDEF	(1<<5)
55*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_TYPE_DRIVER	(1<<6)
56*7688df22SAndroid Build Coastguard Worker 
57*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_TYPE_ALL	(DRM_MODE_TYPE_PREFERRED |	\
58*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_TYPE_USERDEF |	\
59*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_TYPE_DRIVER)
60*7688df22SAndroid Build Coastguard Worker 
61*7688df22SAndroid Build Coastguard Worker /* Video mode flags */
62*7688df22SAndroid Build Coastguard Worker /* bit compatible with the xrandr RR_ definitions (bits 0-13)
63*7688df22SAndroid Build Coastguard Worker  *
64*7688df22SAndroid Build Coastguard Worker  * ABI warning: Existing userspace really expects
65*7688df22SAndroid Build Coastguard Worker  * the mode flags to match the xrandr definitions. Any
66*7688df22SAndroid Build Coastguard Worker  * changes that don't match the xrandr definitions will
67*7688df22SAndroid Build Coastguard Worker  * likely need a new client cap or some other mechanism
68*7688df22SAndroid Build Coastguard Worker  * to avoid breaking existing userspace. This includes
69*7688df22SAndroid Build Coastguard Worker  * allocating new flags in the previously unused bits!
70*7688df22SAndroid Build Coastguard Worker  */
71*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_PHSYNC			(1<<0)
72*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_NHSYNC			(1<<1)
73*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_PVSYNC			(1<<2)
74*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_NVSYNC			(1<<3)
75*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_INTERLACE			(1<<4)
76*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_DBLSCAN			(1<<5)
77*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_CSYNC			(1<<6)
78*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_PCSYNC			(1<<7)
79*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_NCSYNC			(1<<8)
80*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_HSKEW			(1<<9) /* hskew provided */
81*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_BCAST			(1<<10) /* deprecated */
82*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_PIXMUX			(1<<11) /* deprecated */
83*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_DBLCLK			(1<<12)
84*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_CLKDIV2			(1<<13)
85*7688df22SAndroid Build Coastguard Worker  /*
86*7688df22SAndroid Build Coastguard Worker   * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX
87*7688df22SAndroid Build Coastguard Worker   * (define not exposed to user space).
88*7688df22SAndroid Build Coastguard Worker   */
89*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_3D_MASK			(0x1f<<14)
90*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_3D_NONE		(0<<14)
91*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_3D_FRAME_PACKING		(1<<14)
92*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE	(2<<14)
93*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE	(3<<14)
94*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL	(4<<14)
95*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_3D_L_DEPTH		(5<<14)
96*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH	(6<<14)
97*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)
98*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14)
99*7688df22SAndroid Build Coastguard Worker 
100*7688df22SAndroid Build Coastguard Worker /* Picture aspect ratio options */
101*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PICTURE_ASPECT_NONE		0
102*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PICTURE_ASPECT_4_3		1
103*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PICTURE_ASPECT_16_9		2
104*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PICTURE_ASPECT_64_27		3
105*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PICTURE_ASPECT_256_135		4
106*7688df22SAndroid Build Coastguard Worker 
107*7688df22SAndroid Build Coastguard Worker /* Content type options */
108*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONTENT_TYPE_NO_DATA		0
109*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONTENT_TYPE_GRAPHICS		1
110*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONTENT_TYPE_PHOTO		2
111*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONTENT_TYPE_CINEMA		3
112*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONTENT_TYPE_GAME		4
113*7688df22SAndroid Build Coastguard Worker 
114*7688df22SAndroid Build Coastguard Worker /* Aspect ratio flag bitmask (4 bits 22:19) */
115*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FLAG_PIC_AR_MASK		(0x0F<<19)
116*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_PIC_AR_NONE \
117*7688df22SAndroid Build Coastguard Worker 			(DRM_MODE_PICTURE_ASPECT_NONE<<19)
118*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_PIC_AR_4_3 \
119*7688df22SAndroid Build Coastguard Worker 			(DRM_MODE_PICTURE_ASPECT_4_3<<19)
120*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_PIC_AR_16_9 \
121*7688df22SAndroid Build Coastguard Worker 			(DRM_MODE_PICTURE_ASPECT_16_9<<19)
122*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_PIC_AR_64_27 \
123*7688df22SAndroid Build Coastguard Worker 			(DRM_MODE_PICTURE_ASPECT_64_27<<19)
124*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_PIC_AR_256_135 \
125*7688df22SAndroid Build Coastguard Worker 			(DRM_MODE_PICTURE_ASPECT_256_135<<19)
126*7688df22SAndroid Build Coastguard Worker 
127*7688df22SAndroid Build Coastguard Worker #define  DRM_MODE_FLAG_ALL	(DRM_MODE_FLAG_PHSYNC |		\
128*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_NHSYNC |		\
129*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_PVSYNC |		\
130*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_NVSYNC |		\
131*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_INTERLACE |	\
132*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_DBLSCAN |	\
133*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_CSYNC |		\
134*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_PCSYNC |		\
135*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_NCSYNC |		\
136*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_HSKEW |		\
137*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_DBLCLK |		\
138*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_CLKDIV2 |	\
139*7688df22SAndroid Build Coastguard Worker 				 DRM_MODE_FLAG_3D_MASK)
140*7688df22SAndroid Build Coastguard Worker 
141*7688df22SAndroid Build Coastguard Worker /* DPMS flags */
142*7688df22SAndroid Build Coastguard Worker /* bit compatible with the xorg definitions. */
143*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DPMS_ON	0
144*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DPMS_STANDBY	1
145*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DPMS_SUSPEND	2
146*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DPMS_OFF	3
147*7688df22SAndroid Build Coastguard Worker 
148*7688df22SAndroid Build Coastguard Worker /* Scaling mode options */
149*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_SCALE_NONE		0 /* Unmodified timing (display or
150*7688df22SAndroid Build Coastguard Worker 					     software can still scale) */
151*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_SCALE_FULLSCREEN	1 /* Full screen, ignore aspect */
152*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_SCALE_CENTER		2 /* Centered, no scaling */
153*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_SCALE_ASPECT		3 /* Full screen, preserve aspect */
154*7688df22SAndroid Build Coastguard Worker 
155*7688df22SAndroid Build Coastguard Worker /* Dithering mode options */
156*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DITHERING_OFF	0
157*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DITHERING_ON	1
158*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DITHERING_AUTO 2
159*7688df22SAndroid Build Coastguard Worker 
160*7688df22SAndroid Build Coastguard Worker /* Dirty info options */
161*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DIRTY_OFF      0
162*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DIRTY_ON       1
163*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_DIRTY_ANNOTATE 2
164*7688df22SAndroid Build Coastguard Worker 
165*7688df22SAndroid Build Coastguard Worker /* Link Status options */
166*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_LINK_STATUS_GOOD	0
167*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_LINK_STATUS_BAD	1
168*7688df22SAndroid Build Coastguard Worker 
169*7688df22SAndroid Build Coastguard Worker /*
170*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_ROTATE_<degrees>
171*7688df22SAndroid Build Coastguard Worker  *
172*7688df22SAndroid Build Coastguard Worker  * Signals that a drm plane is been rotated <degrees> degrees in counter
173*7688df22SAndroid Build Coastguard Worker  * clockwise direction.
174*7688df22SAndroid Build Coastguard Worker  *
175*7688df22SAndroid Build Coastguard Worker  * This define is provided as a convenience, looking up the property id
176*7688df22SAndroid Build Coastguard Worker  * using the name->prop id lookup is the preferred method.
177*7688df22SAndroid Build Coastguard Worker  */
178*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ROTATE_0       (1<<0)
179*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ROTATE_90      (1<<1)
180*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ROTATE_180     (1<<2)
181*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ROTATE_270     (1<<3)
182*7688df22SAndroid Build Coastguard Worker 
183*7688df22SAndroid Build Coastguard Worker /*
184*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_ROTATE_MASK
185*7688df22SAndroid Build Coastguard Worker  *
186*7688df22SAndroid Build Coastguard Worker  * Bitmask used to look for drm plane rotations.
187*7688df22SAndroid Build Coastguard Worker  */
188*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ROTATE_MASK (\
189*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_ROTATE_0  | \
190*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_ROTATE_90  | \
191*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_ROTATE_180 | \
192*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_ROTATE_270)
193*7688df22SAndroid Build Coastguard Worker 
194*7688df22SAndroid Build Coastguard Worker /*
195*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_REFLECT_<axis>
196*7688df22SAndroid Build Coastguard Worker  *
197*7688df22SAndroid Build Coastguard Worker  * Signals that the contents of a drm plane is reflected along the <axis> axis,
198*7688df22SAndroid Build Coastguard Worker  * in the same way as mirroring.
199*7688df22SAndroid Build Coastguard Worker  * See kerneldoc chapter "Plane Composition Properties" for more details.
200*7688df22SAndroid Build Coastguard Worker  *
201*7688df22SAndroid Build Coastguard Worker  * This define is provided as a convenience, looking up the property id
202*7688df22SAndroid Build Coastguard Worker  * using the name->prop id lookup is the preferred method.
203*7688df22SAndroid Build Coastguard Worker  */
204*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_REFLECT_X      (1<<4)
205*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_REFLECT_Y      (1<<5)
206*7688df22SAndroid Build Coastguard Worker 
207*7688df22SAndroid Build Coastguard Worker /*
208*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_REFLECT_MASK
209*7688df22SAndroid Build Coastguard Worker  *
210*7688df22SAndroid Build Coastguard Worker  * Bitmask used to look for drm plane reflections.
211*7688df22SAndroid Build Coastguard Worker  */
212*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_REFLECT_MASK (\
213*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_REFLECT_X | \
214*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_REFLECT_Y)
215*7688df22SAndroid Build Coastguard Worker 
216*7688df22SAndroid Build Coastguard Worker /* Content Protection Flags */
217*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONTENT_PROTECTION_UNDESIRED	0
218*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONTENT_PROTECTION_DESIRED     1
219*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONTENT_PROTECTION_ENABLED     2
220*7688df22SAndroid Build Coastguard Worker 
221*7688df22SAndroid Build Coastguard Worker /**
222*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_modeinfo - Display mode information.
223*7688df22SAndroid Build Coastguard Worker  * @clock: pixel clock in kHz
224*7688df22SAndroid Build Coastguard Worker  * @hdisplay: horizontal display size
225*7688df22SAndroid Build Coastguard Worker  * @hsync_start: horizontal sync start
226*7688df22SAndroid Build Coastguard Worker  * @hsync_end: horizontal sync end
227*7688df22SAndroid Build Coastguard Worker  * @htotal: horizontal total size
228*7688df22SAndroid Build Coastguard Worker  * @hskew: horizontal skew
229*7688df22SAndroid Build Coastguard Worker  * @vdisplay: vertical display size
230*7688df22SAndroid Build Coastguard Worker  * @vsync_start: vertical sync start
231*7688df22SAndroid Build Coastguard Worker  * @vsync_end: vertical sync end
232*7688df22SAndroid Build Coastguard Worker  * @vtotal: vertical total size
233*7688df22SAndroid Build Coastguard Worker  * @vscan: vertical scan
234*7688df22SAndroid Build Coastguard Worker  * @vrefresh: approximate vertical refresh rate in Hz
235*7688df22SAndroid Build Coastguard Worker  * @flags: bitmask of misc. flags, see DRM_MODE_FLAG_* defines
236*7688df22SAndroid Build Coastguard Worker  * @type: bitmask of type flags, see DRM_MODE_TYPE_* defines
237*7688df22SAndroid Build Coastguard Worker  * @name: string describing the mode resolution
238*7688df22SAndroid Build Coastguard Worker  *
239*7688df22SAndroid Build Coastguard Worker  * This is the user-space API display mode information structure. For the
240*7688df22SAndroid Build Coastguard Worker  * kernel version see struct drm_display_mode.
241*7688df22SAndroid Build Coastguard Worker  */
242*7688df22SAndroid Build Coastguard Worker struct drm_mode_modeinfo {
243*7688df22SAndroid Build Coastguard Worker 	__u32 clock;
244*7688df22SAndroid Build Coastguard Worker 	__u16 hdisplay;
245*7688df22SAndroid Build Coastguard Worker 	__u16 hsync_start;
246*7688df22SAndroid Build Coastguard Worker 	__u16 hsync_end;
247*7688df22SAndroid Build Coastguard Worker 	__u16 htotal;
248*7688df22SAndroid Build Coastguard Worker 	__u16 hskew;
249*7688df22SAndroid Build Coastguard Worker 	__u16 vdisplay;
250*7688df22SAndroid Build Coastguard Worker 	__u16 vsync_start;
251*7688df22SAndroid Build Coastguard Worker 	__u16 vsync_end;
252*7688df22SAndroid Build Coastguard Worker 	__u16 vtotal;
253*7688df22SAndroid Build Coastguard Worker 	__u16 vscan;
254*7688df22SAndroid Build Coastguard Worker 
255*7688df22SAndroid Build Coastguard Worker 	__u32 vrefresh;
256*7688df22SAndroid Build Coastguard Worker 
257*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
258*7688df22SAndroid Build Coastguard Worker 	__u32 type;
259*7688df22SAndroid Build Coastguard Worker 	char name[DRM_DISPLAY_MODE_LEN];
260*7688df22SAndroid Build Coastguard Worker };
261*7688df22SAndroid Build Coastguard Worker 
262*7688df22SAndroid Build Coastguard Worker struct drm_mode_card_res {
263*7688df22SAndroid Build Coastguard Worker 	__u64 fb_id_ptr;
264*7688df22SAndroid Build Coastguard Worker 	__u64 crtc_id_ptr;
265*7688df22SAndroid Build Coastguard Worker 	__u64 connector_id_ptr;
266*7688df22SAndroid Build Coastguard Worker 	__u64 encoder_id_ptr;
267*7688df22SAndroid Build Coastguard Worker 	__u32 count_fbs;
268*7688df22SAndroid Build Coastguard Worker 	__u32 count_crtcs;
269*7688df22SAndroid Build Coastguard Worker 	__u32 count_connectors;
270*7688df22SAndroid Build Coastguard Worker 	__u32 count_encoders;
271*7688df22SAndroid Build Coastguard Worker 	__u32 min_width;
272*7688df22SAndroid Build Coastguard Worker 	__u32 max_width;
273*7688df22SAndroid Build Coastguard Worker 	__u32 min_height;
274*7688df22SAndroid Build Coastguard Worker 	__u32 max_height;
275*7688df22SAndroid Build Coastguard Worker };
276*7688df22SAndroid Build Coastguard Worker 
277*7688df22SAndroid Build Coastguard Worker struct drm_mode_crtc {
278*7688df22SAndroid Build Coastguard Worker 	__u64 set_connectors_ptr;
279*7688df22SAndroid Build Coastguard Worker 	__u32 count_connectors;
280*7688df22SAndroid Build Coastguard Worker 
281*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id; /**< Id */
282*7688df22SAndroid Build Coastguard Worker 	__u32 fb_id; /**< Id of framebuffer */
283*7688df22SAndroid Build Coastguard Worker 
284*7688df22SAndroid Build Coastguard Worker 	__u32 x; /**< x Position on the framebuffer */
285*7688df22SAndroid Build Coastguard Worker 	__u32 y; /**< y Position on the framebuffer */
286*7688df22SAndroid Build Coastguard Worker 
287*7688df22SAndroid Build Coastguard Worker 	__u32 gamma_size;
288*7688df22SAndroid Build Coastguard Worker 	__u32 mode_valid;
289*7688df22SAndroid Build Coastguard Worker 	struct drm_mode_modeinfo mode;
290*7688df22SAndroid Build Coastguard Worker };
291*7688df22SAndroid Build Coastguard Worker 
292*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PRESENT_TOP_FIELD	(1<<0)
293*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PRESENT_BOTTOM_FIELD	(1<<1)
294*7688df22SAndroid Build Coastguard Worker 
295*7688df22SAndroid Build Coastguard Worker /* Planes blend with or override other bits on the CRTC */
296*7688df22SAndroid Build Coastguard Worker struct drm_mode_set_plane {
297*7688df22SAndroid Build Coastguard Worker 	__u32 plane_id;
298*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id;
299*7688df22SAndroid Build Coastguard Worker 	__u32 fb_id; /* fb object contains surface format type */
300*7688df22SAndroid Build Coastguard Worker 	__u32 flags; /* see above flags */
301*7688df22SAndroid Build Coastguard Worker 
302*7688df22SAndroid Build Coastguard Worker 	/* Signed dest location allows it to be partially off screen */
303*7688df22SAndroid Build Coastguard Worker 	__s32 crtc_x;
304*7688df22SAndroid Build Coastguard Worker 	__s32 crtc_y;
305*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_w;
306*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_h;
307*7688df22SAndroid Build Coastguard Worker 
308*7688df22SAndroid Build Coastguard Worker 	/* Source values are 16.16 fixed point */
309*7688df22SAndroid Build Coastguard Worker 	__u32 src_x;
310*7688df22SAndroid Build Coastguard Worker 	__u32 src_y;
311*7688df22SAndroid Build Coastguard Worker 	__u32 src_h;
312*7688df22SAndroid Build Coastguard Worker 	__u32 src_w;
313*7688df22SAndroid Build Coastguard Worker };
314*7688df22SAndroid Build Coastguard Worker 
315*7688df22SAndroid Build Coastguard Worker /**
316*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_get_plane - Get plane metadata.
317*7688df22SAndroid Build Coastguard Worker  *
318*7688df22SAndroid Build Coastguard Worker  * Userspace can perform a GETPLANE ioctl to retrieve information about a
319*7688df22SAndroid Build Coastguard Worker  * plane.
320*7688df22SAndroid Build Coastguard Worker  *
321*7688df22SAndroid Build Coastguard Worker  * To retrieve the number of formats supported, set @count_format_types to zero
322*7688df22SAndroid Build Coastguard Worker  * and call the ioctl. @count_format_types will be updated with the value.
323*7688df22SAndroid Build Coastguard Worker  *
324*7688df22SAndroid Build Coastguard Worker  * To retrieve these formats, allocate an array with the memory needed to store
325*7688df22SAndroid Build Coastguard Worker  * @count_format_types formats. Point @format_type_ptr to this array and call
326*7688df22SAndroid Build Coastguard Worker  * the ioctl again (with @count_format_types still set to the value returned in
327*7688df22SAndroid Build Coastguard Worker  * the first ioctl call).
328*7688df22SAndroid Build Coastguard Worker  */
329*7688df22SAndroid Build Coastguard Worker struct drm_mode_get_plane {
330*7688df22SAndroid Build Coastguard Worker 	/**
331*7688df22SAndroid Build Coastguard Worker 	 * @plane_id: Object ID of the plane whose information should be
332*7688df22SAndroid Build Coastguard Worker 	 * retrieved. Set by caller.
333*7688df22SAndroid Build Coastguard Worker 	 */
334*7688df22SAndroid Build Coastguard Worker 	__u32 plane_id;
335*7688df22SAndroid Build Coastguard Worker 
336*7688df22SAndroid Build Coastguard Worker 	/** @crtc_id: Object ID of the current CRTC. */
337*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id;
338*7688df22SAndroid Build Coastguard Worker 	/** @fb_id: Object ID of the current fb. */
339*7688df22SAndroid Build Coastguard Worker 	__u32 fb_id;
340*7688df22SAndroid Build Coastguard Worker 
341*7688df22SAndroid Build Coastguard Worker 	/**
342*7688df22SAndroid Build Coastguard Worker 	 * @possible_crtcs: Bitmask of CRTC's compatible with the plane. CRTC's
343*7688df22SAndroid Build Coastguard Worker 	 * are created and they receive an index, which corresponds to their
344*7688df22SAndroid Build Coastguard Worker 	 * position in the bitmask. Bit N corresponds to
345*7688df22SAndroid Build Coastguard Worker 	 * :ref:`CRTC index<crtc_index>` N.
346*7688df22SAndroid Build Coastguard Worker 	 */
347*7688df22SAndroid Build Coastguard Worker 	__u32 possible_crtcs;
348*7688df22SAndroid Build Coastguard Worker 	/** @gamma_size: Never used. */
349*7688df22SAndroid Build Coastguard Worker 	__u32 gamma_size;
350*7688df22SAndroid Build Coastguard Worker 
351*7688df22SAndroid Build Coastguard Worker 	/** @count_format_types: Number of formats. */
352*7688df22SAndroid Build Coastguard Worker 	__u32 count_format_types;
353*7688df22SAndroid Build Coastguard Worker 	/**
354*7688df22SAndroid Build Coastguard Worker 	 * @format_type_ptr: Pointer to ``__u32`` array of formats that are
355*7688df22SAndroid Build Coastguard Worker 	 * supported by the plane. These formats do not require modifiers.
356*7688df22SAndroid Build Coastguard Worker 	 */
357*7688df22SAndroid Build Coastguard Worker 	__u64 format_type_ptr;
358*7688df22SAndroid Build Coastguard Worker };
359*7688df22SAndroid Build Coastguard Worker 
360*7688df22SAndroid Build Coastguard Worker struct drm_mode_get_plane_res {
361*7688df22SAndroid Build Coastguard Worker 	__u64 plane_id_ptr;
362*7688df22SAndroid Build Coastguard Worker 	__u32 count_planes;
363*7688df22SAndroid Build Coastguard Worker };
364*7688df22SAndroid Build Coastguard Worker 
365*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ENCODER_NONE	0
366*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ENCODER_DAC	1
367*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ENCODER_TMDS	2
368*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ENCODER_LVDS	3
369*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ENCODER_TVDAC	4
370*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ENCODER_VIRTUAL 5
371*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ENCODER_DSI	6
372*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ENCODER_DPMST	7
373*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ENCODER_DPI	8
374*7688df22SAndroid Build Coastguard Worker 
375*7688df22SAndroid Build Coastguard Worker struct drm_mode_get_encoder {
376*7688df22SAndroid Build Coastguard Worker 	__u32 encoder_id;
377*7688df22SAndroid Build Coastguard Worker 	__u32 encoder_type;
378*7688df22SAndroid Build Coastguard Worker 
379*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id; /**< Id of crtc */
380*7688df22SAndroid Build Coastguard Worker 
381*7688df22SAndroid Build Coastguard Worker 	__u32 possible_crtcs;
382*7688df22SAndroid Build Coastguard Worker 	__u32 possible_clones;
383*7688df22SAndroid Build Coastguard Worker };
384*7688df22SAndroid Build Coastguard Worker 
385*7688df22SAndroid Build Coastguard Worker /* This is for connectors with multiple signal types. */
386*7688df22SAndroid Build Coastguard Worker /* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
387*7688df22SAndroid Build Coastguard Worker enum drm_mode_subconnector {
388*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_Automatic   = 0,  /* DVI-I, TV     */
389*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_Unknown     = 0,  /* DVI-I, TV, DP */
390*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_VGA	  = 1,  /*            DP */
391*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_DVID	  = 3,  /* DVI-I      DP */
392*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_DVIA	  = 4,  /* DVI-I         */
393*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_Composite   = 5,  /*        TV     */
394*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_SVIDEO	  = 6,  /*        TV     */
395*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_Component   = 8,  /*        TV     */
396*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_SCART	  = 9,  /*        TV     */
397*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_DisplayPort = 10, /*            DP */
398*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_HDMIA       = 11, /*            DP */
399*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_Native      = 15, /*            DP */
400*7688df22SAndroid Build Coastguard Worker 	DRM_MODE_SUBCONNECTOR_Wireless    = 18, /*            DP */
401*7688df22SAndroid Build Coastguard Worker };
402*7688df22SAndroid Build Coastguard Worker 
403*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_Unknown	0
404*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_VGA		1
405*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_DVII		2
406*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_DVID		3
407*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_DVIA		4
408*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_Composite	5
409*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_SVIDEO	6
410*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_LVDS		7
411*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_Component	8
412*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_9PinDIN	9
413*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_DisplayPort	10
414*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_HDMIA	11
415*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_HDMIB	12
416*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_TV		13
417*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_eDP		14
418*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_VIRTUAL      15
419*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_DSI		16
420*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_DPI		17
421*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_WRITEBACK	18
422*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_SPI		19
423*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CONNECTOR_USB		20
424*7688df22SAndroid Build Coastguard Worker 
425*7688df22SAndroid Build Coastguard Worker /**
426*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_get_connector - Get connector metadata.
427*7688df22SAndroid Build Coastguard Worker  *
428*7688df22SAndroid Build Coastguard Worker  * User-space can perform a GETCONNECTOR ioctl to retrieve information about a
429*7688df22SAndroid Build Coastguard Worker  * connector. User-space is expected to retrieve encoders, modes and properties
430*7688df22SAndroid Build Coastguard Worker  * by performing this ioctl at least twice: the first time to retrieve the
431*7688df22SAndroid Build Coastguard Worker  * number of elements, the second time to retrieve the elements themselves.
432*7688df22SAndroid Build Coastguard Worker  *
433*7688df22SAndroid Build Coastguard Worker  * To retrieve the number of elements, set @count_props and @count_encoders to
434*7688df22SAndroid Build Coastguard Worker  * zero, set @count_modes to 1, and set @modes_ptr to a temporary struct
435*7688df22SAndroid Build Coastguard Worker  * drm_mode_modeinfo element.
436*7688df22SAndroid Build Coastguard Worker  *
437*7688df22SAndroid Build Coastguard Worker  * To retrieve the elements, allocate arrays for @encoders_ptr, @modes_ptr,
438*7688df22SAndroid Build Coastguard Worker  * @props_ptr and @prop_values_ptr, then set @count_modes, @count_props and
439*7688df22SAndroid Build Coastguard Worker  * @count_encoders to their capacity.
440*7688df22SAndroid Build Coastguard Worker  *
441*7688df22SAndroid Build Coastguard Worker  * Performing the ioctl only twice may be racy: the number of elements may have
442*7688df22SAndroid Build Coastguard Worker  * changed with a hotplug event in-between the two ioctls. User-space is
443*7688df22SAndroid Build Coastguard Worker  * expected to retry the last ioctl until the number of elements stabilizes.
444*7688df22SAndroid Build Coastguard Worker  * The kernel won't fill any array which doesn't have the expected length.
445*7688df22SAndroid Build Coastguard Worker  *
446*7688df22SAndroid Build Coastguard Worker  * **Force-probing a connector**
447*7688df22SAndroid Build Coastguard Worker  *
448*7688df22SAndroid Build Coastguard Worker  * If the @count_modes field is set to zero and the DRM client is the current
449*7688df22SAndroid Build Coastguard Worker  * DRM master, the kernel will perform a forced probe on the connector to
450*7688df22SAndroid Build Coastguard Worker  * refresh the connector status, modes and EDID. A forced-probe can be slow,
451*7688df22SAndroid Build Coastguard Worker  * might cause flickering and the ioctl will block.
452*7688df22SAndroid Build Coastguard Worker  *
453*7688df22SAndroid Build Coastguard Worker  * User-space needs to force-probe connectors to ensure their metadata is
454*7688df22SAndroid Build Coastguard Worker  * up-to-date at startup and after receiving a hot-plug event. User-space
455*7688df22SAndroid Build Coastguard Worker  * may perform a forced-probe when the user explicitly requests it. User-space
456*7688df22SAndroid Build Coastguard Worker  * shouldn't perform a forced-probe in other situations.
457*7688df22SAndroid Build Coastguard Worker  */
458*7688df22SAndroid Build Coastguard Worker struct drm_mode_get_connector {
459*7688df22SAndroid Build Coastguard Worker 	/** @encoders_ptr: Pointer to ``__u32`` array of object IDs. */
460*7688df22SAndroid Build Coastguard Worker 	__u64 encoders_ptr;
461*7688df22SAndroid Build Coastguard Worker 	/** @modes_ptr: Pointer to struct drm_mode_modeinfo array. */
462*7688df22SAndroid Build Coastguard Worker 	__u64 modes_ptr;
463*7688df22SAndroid Build Coastguard Worker 	/** @props_ptr: Pointer to ``__u32`` array of property IDs. */
464*7688df22SAndroid Build Coastguard Worker 	__u64 props_ptr;
465*7688df22SAndroid Build Coastguard Worker 	/** @prop_values_ptr: Pointer to ``__u64`` array of property values. */
466*7688df22SAndroid Build Coastguard Worker 	__u64 prop_values_ptr;
467*7688df22SAndroid Build Coastguard Worker 
468*7688df22SAndroid Build Coastguard Worker 	/** @count_modes: Number of modes. */
469*7688df22SAndroid Build Coastguard Worker 	__u32 count_modes;
470*7688df22SAndroid Build Coastguard Worker 	/** @count_props: Number of properties. */
471*7688df22SAndroid Build Coastguard Worker 	__u32 count_props;
472*7688df22SAndroid Build Coastguard Worker 	/** @count_encoders: Number of encoders. */
473*7688df22SAndroid Build Coastguard Worker 	__u32 count_encoders;
474*7688df22SAndroid Build Coastguard Worker 
475*7688df22SAndroid Build Coastguard Worker 	/** @encoder_id: Object ID of the current encoder. */
476*7688df22SAndroid Build Coastguard Worker 	__u32 encoder_id;
477*7688df22SAndroid Build Coastguard Worker 	/** @connector_id: Object ID of the connector. */
478*7688df22SAndroid Build Coastguard Worker 	__u32 connector_id;
479*7688df22SAndroid Build Coastguard Worker 	/**
480*7688df22SAndroid Build Coastguard Worker 	 * @connector_type: Type of the connector.
481*7688df22SAndroid Build Coastguard Worker 	 *
482*7688df22SAndroid Build Coastguard Worker 	 * See DRM_MODE_CONNECTOR_* defines.
483*7688df22SAndroid Build Coastguard Worker 	 */
484*7688df22SAndroid Build Coastguard Worker 	__u32 connector_type;
485*7688df22SAndroid Build Coastguard Worker 	/**
486*7688df22SAndroid Build Coastguard Worker 	 * @connector_type_id: Type-specific connector number.
487*7688df22SAndroid Build Coastguard Worker 	 *
488*7688df22SAndroid Build Coastguard Worker 	 * This is not an object ID. This is a per-type connector number. Each
489*7688df22SAndroid Build Coastguard Worker 	 * (type, type_id) combination is unique across all connectors of a DRM
490*7688df22SAndroid Build Coastguard Worker 	 * device.
491*7688df22SAndroid Build Coastguard Worker 	 *
492*7688df22SAndroid Build Coastguard Worker 	 * The (type, type_id) combination is not a stable identifier: the
493*7688df22SAndroid Build Coastguard Worker 	 * type_id can change depending on the driver probe order.
494*7688df22SAndroid Build Coastguard Worker 	 */
495*7688df22SAndroid Build Coastguard Worker 	__u32 connector_type_id;
496*7688df22SAndroid Build Coastguard Worker 
497*7688df22SAndroid Build Coastguard Worker 	/**
498*7688df22SAndroid Build Coastguard Worker 	 * @connection: Status of the connector.
499*7688df22SAndroid Build Coastguard Worker 	 *
500*7688df22SAndroid Build Coastguard Worker 	 * See enum drm_connector_status.
501*7688df22SAndroid Build Coastguard Worker 	 */
502*7688df22SAndroid Build Coastguard Worker 	__u32 connection;
503*7688df22SAndroid Build Coastguard Worker 	/** @mm_width: Width of the connected sink in millimeters. */
504*7688df22SAndroid Build Coastguard Worker 	__u32 mm_width;
505*7688df22SAndroid Build Coastguard Worker 	/** @mm_height: Height of the connected sink in millimeters. */
506*7688df22SAndroid Build Coastguard Worker 	__u32 mm_height;
507*7688df22SAndroid Build Coastguard Worker 	/**
508*7688df22SAndroid Build Coastguard Worker 	 * @subpixel: Subpixel order of the connected sink.
509*7688df22SAndroid Build Coastguard Worker 	 *
510*7688df22SAndroid Build Coastguard Worker 	 * See enum subpixel_order.
511*7688df22SAndroid Build Coastguard Worker 	 */
512*7688df22SAndroid Build Coastguard Worker 	__u32 subpixel;
513*7688df22SAndroid Build Coastguard Worker 
514*7688df22SAndroid Build Coastguard Worker 	/** @pad: Padding, must be zero. */
515*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
516*7688df22SAndroid Build Coastguard Worker };
517*7688df22SAndroid Build Coastguard Worker 
518*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_PENDING	(1<<0) /* deprecated, do not use */
519*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_RANGE	(1<<1)
520*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_IMMUTABLE	(1<<2)
521*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_ENUM	(1<<3) /* enumerated type with text strings */
522*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_BLOB	(1<<4)
523*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_BITMASK	(1<<5) /* bitmask of enumerated types */
524*7688df22SAndroid Build Coastguard Worker 
525*7688df22SAndroid Build Coastguard Worker /* non-extended types: legacy bitmask, one bit per type: */
526*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_LEGACY_TYPE  ( \
527*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_PROP_RANGE | \
528*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_PROP_ENUM | \
529*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_PROP_BLOB | \
530*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_PROP_BITMASK)
531*7688df22SAndroid Build Coastguard Worker 
532*7688df22SAndroid Build Coastguard Worker /* extended-types: rather than continue to consume a bit per type,
533*7688df22SAndroid Build Coastguard Worker  * grab a chunk of the bits to use as integer type id.
534*7688df22SAndroid Build Coastguard Worker  */
535*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_EXTENDED_TYPE	0x0000ffc0
536*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_TYPE(n)		((n) << 6)
537*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_OBJECT		DRM_MODE_PROP_TYPE(1)
538*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_SIGNED_RANGE	DRM_MODE_PROP_TYPE(2)
539*7688df22SAndroid Build Coastguard Worker 
540*7688df22SAndroid Build Coastguard Worker /* the PROP_ATOMIC flag is used to hide properties from userspace that
541*7688df22SAndroid Build Coastguard Worker  * is not aware of atomic properties.  This is mostly to work around
542*7688df22SAndroid Build Coastguard Worker  * older userspace (DDX drivers) that read/write each prop they find,
543*7688df22SAndroid Build Coastguard Worker  * without being aware that this could be triggering a lengthy modeset.
544*7688df22SAndroid Build Coastguard Worker  */
545*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PROP_ATOMIC        0x80000000
546*7688df22SAndroid Build Coastguard Worker 
547*7688df22SAndroid Build Coastguard Worker /**
548*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_property_enum - Description for an enum/bitfield entry.
549*7688df22SAndroid Build Coastguard Worker  * @value: numeric value for this enum entry.
550*7688df22SAndroid Build Coastguard Worker  * @name: symbolic name for this enum entry.
551*7688df22SAndroid Build Coastguard Worker  *
552*7688df22SAndroid Build Coastguard Worker  * See struct drm_property_enum for details.
553*7688df22SAndroid Build Coastguard Worker  */
554*7688df22SAndroid Build Coastguard Worker struct drm_mode_property_enum {
555*7688df22SAndroid Build Coastguard Worker 	__u64 value;
556*7688df22SAndroid Build Coastguard Worker 	char name[DRM_PROP_NAME_LEN];
557*7688df22SAndroid Build Coastguard Worker };
558*7688df22SAndroid Build Coastguard Worker 
559*7688df22SAndroid Build Coastguard Worker /**
560*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_get_property - Get property metadata.
561*7688df22SAndroid Build Coastguard Worker  *
562*7688df22SAndroid Build Coastguard Worker  * User-space can perform a GETPROPERTY ioctl to retrieve information about a
563*7688df22SAndroid Build Coastguard Worker  * property. The same property may be attached to multiple objects, see
564*7688df22SAndroid Build Coastguard Worker  * "Modeset Base Object Abstraction".
565*7688df22SAndroid Build Coastguard Worker  *
566*7688df22SAndroid Build Coastguard Worker  * The meaning of the @values_ptr field changes depending on the property type.
567*7688df22SAndroid Build Coastguard Worker  * See &drm_property.flags for more details.
568*7688df22SAndroid Build Coastguard Worker  *
569*7688df22SAndroid Build Coastguard Worker  * The @enum_blob_ptr and @count_enum_blobs fields are only meaningful when the
570*7688df22SAndroid Build Coastguard Worker  * property has the type &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK. For
571*7688df22SAndroid Build Coastguard Worker  * backwards compatibility, the kernel will always set @count_enum_blobs to
572*7688df22SAndroid Build Coastguard Worker  * zero when the property has the type &DRM_MODE_PROP_BLOB. User-space must
573*7688df22SAndroid Build Coastguard Worker  * ignore these two fields if the property has a different type.
574*7688df22SAndroid Build Coastguard Worker  *
575*7688df22SAndroid Build Coastguard Worker  * User-space is expected to retrieve values and enums by performing this ioctl
576*7688df22SAndroid Build Coastguard Worker  * at least twice: the first time to retrieve the number of elements, the
577*7688df22SAndroid Build Coastguard Worker  * second time to retrieve the elements themselves.
578*7688df22SAndroid Build Coastguard Worker  *
579*7688df22SAndroid Build Coastguard Worker  * To retrieve the number of elements, set @count_values and @count_enum_blobs
580*7688df22SAndroid Build Coastguard Worker  * to zero, then call the ioctl. @count_values will be updated with the number
581*7688df22SAndroid Build Coastguard Worker  * of elements. If the property has the type &DRM_MODE_PROP_ENUM or
582*7688df22SAndroid Build Coastguard Worker  * &DRM_MODE_PROP_BITMASK, @count_enum_blobs will be updated as well.
583*7688df22SAndroid Build Coastguard Worker  *
584*7688df22SAndroid Build Coastguard Worker  * To retrieve the elements themselves, allocate an array for @values_ptr and
585*7688df22SAndroid Build Coastguard Worker  * set @count_values to its capacity. If the property has the type
586*7688df22SAndroid Build Coastguard Worker  * &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK, allocate an array for
587*7688df22SAndroid Build Coastguard Worker  * @enum_blob_ptr and set @count_enum_blobs to its capacity. Calling the ioctl
588*7688df22SAndroid Build Coastguard Worker  * again will fill the arrays.
589*7688df22SAndroid Build Coastguard Worker  */
590*7688df22SAndroid Build Coastguard Worker struct drm_mode_get_property {
591*7688df22SAndroid Build Coastguard Worker 	/** @values_ptr: Pointer to a ``__u64`` array. */
592*7688df22SAndroid Build Coastguard Worker 	__u64 values_ptr;
593*7688df22SAndroid Build Coastguard Worker 	/** @enum_blob_ptr: Pointer to a struct drm_mode_property_enum array. */
594*7688df22SAndroid Build Coastguard Worker 	__u64 enum_blob_ptr;
595*7688df22SAndroid Build Coastguard Worker 
596*7688df22SAndroid Build Coastguard Worker 	/**
597*7688df22SAndroid Build Coastguard Worker 	 * @prop_id: Object ID of the property which should be retrieved. Set
598*7688df22SAndroid Build Coastguard Worker 	 * by the caller.
599*7688df22SAndroid Build Coastguard Worker 	 */
600*7688df22SAndroid Build Coastguard Worker 	__u32 prop_id;
601*7688df22SAndroid Build Coastguard Worker 	/**
602*7688df22SAndroid Build Coastguard Worker 	 * @flags: ``DRM_MODE_PROP_*`` bitfield. See &drm_property.flags for
603*7688df22SAndroid Build Coastguard Worker 	 * a definition of the flags.
604*7688df22SAndroid Build Coastguard Worker 	 */
605*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
606*7688df22SAndroid Build Coastguard Worker 	/**
607*7688df22SAndroid Build Coastguard Worker 	 * @name: Symbolic property name. User-space should use this field to
608*7688df22SAndroid Build Coastguard Worker 	 * recognize properties.
609*7688df22SAndroid Build Coastguard Worker 	 */
610*7688df22SAndroid Build Coastguard Worker 	char name[DRM_PROP_NAME_LEN];
611*7688df22SAndroid Build Coastguard Worker 
612*7688df22SAndroid Build Coastguard Worker 	/** @count_values: Number of elements in @values_ptr. */
613*7688df22SAndroid Build Coastguard Worker 	__u32 count_values;
614*7688df22SAndroid Build Coastguard Worker 	/** @count_enum_blobs: Number of elements in @enum_blob_ptr. */
615*7688df22SAndroid Build Coastguard Worker 	__u32 count_enum_blobs;
616*7688df22SAndroid Build Coastguard Worker };
617*7688df22SAndroid Build Coastguard Worker 
618*7688df22SAndroid Build Coastguard Worker struct drm_mode_connector_set_property {
619*7688df22SAndroid Build Coastguard Worker 	__u64 value;
620*7688df22SAndroid Build Coastguard Worker 	__u32 prop_id;
621*7688df22SAndroid Build Coastguard Worker 	__u32 connector_id;
622*7688df22SAndroid Build Coastguard Worker };
623*7688df22SAndroid Build Coastguard Worker 
624*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_OBJECT_CRTC 0xcccccccc
625*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
626*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
627*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_OBJECT_MODE 0xdededede
628*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
629*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_OBJECT_FB 0xfbfbfbfb
630*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
631*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
632*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_OBJECT_ANY 0
633*7688df22SAndroid Build Coastguard Worker 
634*7688df22SAndroid Build Coastguard Worker struct drm_mode_obj_get_properties {
635*7688df22SAndroid Build Coastguard Worker 	__u64 props_ptr;
636*7688df22SAndroid Build Coastguard Worker 	__u64 prop_values_ptr;
637*7688df22SAndroid Build Coastguard Worker 	__u32 count_props;
638*7688df22SAndroid Build Coastguard Worker 	__u32 obj_id;
639*7688df22SAndroid Build Coastguard Worker 	__u32 obj_type;
640*7688df22SAndroid Build Coastguard Worker };
641*7688df22SAndroid Build Coastguard Worker 
642*7688df22SAndroid Build Coastguard Worker struct drm_mode_obj_set_property {
643*7688df22SAndroid Build Coastguard Worker 	__u64 value;
644*7688df22SAndroid Build Coastguard Worker 	__u32 prop_id;
645*7688df22SAndroid Build Coastguard Worker 	__u32 obj_id;
646*7688df22SAndroid Build Coastguard Worker 	__u32 obj_type;
647*7688df22SAndroid Build Coastguard Worker };
648*7688df22SAndroid Build Coastguard Worker 
649*7688df22SAndroid Build Coastguard Worker struct drm_mode_get_blob {
650*7688df22SAndroid Build Coastguard Worker 	__u32 blob_id;
651*7688df22SAndroid Build Coastguard Worker 	__u32 length;
652*7688df22SAndroid Build Coastguard Worker 	__u64 data;
653*7688df22SAndroid Build Coastguard Worker };
654*7688df22SAndroid Build Coastguard Worker 
655*7688df22SAndroid Build Coastguard Worker struct drm_mode_fb_cmd {
656*7688df22SAndroid Build Coastguard Worker 	__u32 fb_id;
657*7688df22SAndroid Build Coastguard Worker 	__u32 width;
658*7688df22SAndroid Build Coastguard Worker 	__u32 height;
659*7688df22SAndroid Build Coastguard Worker 	__u32 pitch;
660*7688df22SAndroid Build Coastguard Worker 	__u32 bpp;
661*7688df22SAndroid Build Coastguard Worker 	__u32 depth;
662*7688df22SAndroid Build Coastguard Worker 	/* driver specific handle */
663*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
664*7688df22SAndroid Build Coastguard Worker };
665*7688df22SAndroid Build Coastguard Worker 
666*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FB_INTERLACED	(1<<0) /* for interlaced framebuffers */
667*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FB_MODIFIERS	(1<<1) /* enables ->modifier[] */
668*7688df22SAndroid Build Coastguard Worker 
669*7688df22SAndroid Build Coastguard Worker /**
670*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_fb_cmd2 - Frame-buffer metadata.
671*7688df22SAndroid Build Coastguard Worker  *
672*7688df22SAndroid Build Coastguard Worker  * This struct holds frame-buffer metadata. There are two ways to use it:
673*7688df22SAndroid Build Coastguard Worker  *
674*7688df22SAndroid Build Coastguard Worker  * - User-space can fill this struct and perform a &DRM_IOCTL_MODE_ADDFB2
675*7688df22SAndroid Build Coastguard Worker  *   ioctl to register a new frame-buffer. The new frame-buffer object ID will
676*7688df22SAndroid Build Coastguard Worker  *   be set by the kernel in @fb_id.
677*7688df22SAndroid Build Coastguard Worker  * - User-space can set @fb_id and perform a &DRM_IOCTL_MODE_GETFB2 ioctl to
678*7688df22SAndroid Build Coastguard Worker  *   fetch metadata about an existing frame-buffer.
679*7688df22SAndroid Build Coastguard Worker  *
680*7688df22SAndroid Build Coastguard Worker  * In case of planar formats, this struct allows up to 4 buffer objects with
681*7688df22SAndroid Build Coastguard Worker  * offsets and pitches per plane. The pitch and offset order are dictated by
682*7688df22SAndroid Build Coastguard Worker  * the format FourCC as defined by ``drm_fourcc.h``, e.g. NV12 is described as:
683*7688df22SAndroid Build Coastguard Worker  *
684*7688df22SAndroid Build Coastguard Worker  *     YUV 4:2:0 image with a plane of 8-bit Y samples followed by an
685*7688df22SAndroid Build Coastguard Worker  *     interleaved U/V plane containing 8-bit 2x2 subsampled colour difference
686*7688df22SAndroid Build Coastguard Worker  *     samples.
687*7688df22SAndroid Build Coastguard Worker  *
688*7688df22SAndroid Build Coastguard Worker  * So it would consist of a Y plane at ``offsets[0]`` and a UV plane at
689*7688df22SAndroid Build Coastguard Worker  * ``offsets[1]``.
690*7688df22SAndroid Build Coastguard Worker  *
691*7688df22SAndroid Build Coastguard Worker  * To accommodate tiled, compressed, etc formats, a modifier can be specified.
692*7688df22SAndroid Build Coastguard Worker  * For more information see the "Format Modifiers" section. Note that even
693*7688df22SAndroid Build Coastguard Worker  * though it looks like we have a modifier per-plane, we in fact do not. The
694*7688df22SAndroid Build Coastguard Worker  * modifier for each plane must be identical. Thus all combinations of
695*7688df22SAndroid Build Coastguard Worker  * different data layouts for multi-plane formats must be enumerated as
696*7688df22SAndroid Build Coastguard Worker  * separate modifiers.
697*7688df22SAndroid Build Coastguard Worker  *
698*7688df22SAndroid Build Coastguard Worker  * All of the entries in @handles, @pitches, @offsets and @modifier must be
699*7688df22SAndroid Build Coastguard Worker  * zero when unused. Warning, for @offsets and @modifier zero can't be used to
700*7688df22SAndroid Build Coastguard Worker  * figure out whether the entry is used or not since it's a valid value (a zero
701*7688df22SAndroid Build Coastguard Worker  * offset is common, and a zero modifier is &DRM_FORMAT_MOD_LINEAR).
702*7688df22SAndroid Build Coastguard Worker  */
703*7688df22SAndroid Build Coastguard Worker struct drm_mode_fb_cmd2 {
704*7688df22SAndroid Build Coastguard Worker 	/** @fb_id: Object ID of the frame-buffer. */
705*7688df22SAndroid Build Coastguard Worker 	__u32 fb_id;
706*7688df22SAndroid Build Coastguard Worker 	/** @width: Width of the frame-buffer. */
707*7688df22SAndroid Build Coastguard Worker 	__u32 width;
708*7688df22SAndroid Build Coastguard Worker 	/** @height: Height of the frame-buffer. */
709*7688df22SAndroid Build Coastguard Worker 	__u32 height;
710*7688df22SAndroid Build Coastguard Worker 	/**
711*7688df22SAndroid Build Coastguard Worker 	 * @pixel_format: FourCC format code, see ``DRM_FORMAT_*`` constants in
712*7688df22SAndroid Build Coastguard Worker 	 * ``drm_fourcc.h``.
713*7688df22SAndroid Build Coastguard Worker 	 */
714*7688df22SAndroid Build Coastguard Worker 	__u32 pixel_format;
715*7688df22SAndroid Build Coastguard Worker 	/**
716*7688df22SAndroid Build Coastguard Worker 	 * @flags: Frame-buffer flags (see &DRM_MODE_FB_INTERLACED and
717*7688df22SAndroid Build Coastguard Worker 	 * &DRM_MODE_FB_MODIFIERS).
718*7688df22SAndroid Build Coastguard Worker 	 */
719*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
720*7688df22SAndroid Build Coastguard Worker 
721*7688df22SAndroid Build Coastguard Worker 	/**
722*7688df22SAndroid Build Coastguard Worker 	 * @handles: GEM buffer handle, one per plane. Set to 0 if the plane is
723*7688df22SAndroid Build Coastguard Worker 	 * unused. The same handle can be used for multiple planes.
724*7688df22SAndroid Build Coastguard Worker 	 */
725*7688df22SAndroid Build Coastguard Worker 	__u32 handles[4];
726*7688df22SAndroid Build Coastguard Worker 	/** @pitches: Pitch (aka. stride) in bytes, one per plane. */
727*7688df22SAndroid Build Coastguard Worker 	__u32 pitches[4];
728*7688df22SAndroid Build Coastguard Worker 	/** @offsets: Offset into the buffer in bytes, one per plane. */
729*7688df22SAndroid Build Coastguard Worker 	__u32 offsets[4];
730*7688df22SAndroid Build Coastguard Worker 	/**
731*7688df22SAndroid Build Coastguard Worker 	 * @modifier: Format modifier, one per plane. See ``DRM_FORMAT_MOD_*``
732*7688df22SAndroid Build Coastguard Worker 	 * constants in ``drm_fourcc.h``. All planes must use the same
733*7688df22SAndroid Build Coastguard Worker 	 * modifier. Ignored unless &DRM_MODE_FB_MODIFIERS is set in @flags.
734*7688df22SAndroid Build Coastguard Worker 	 */
735*7688df22SAndroid Build Coastguard Worker 	__u64 modifier[4];
736*7688df22SAndroid Build Coastguard Worker };
737*7688df22SAndroid Build Coastguard Worker 
738*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
739*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
740*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FB_DIRTY_FLAGS         0x03
741*7688df22SAndroid Build Coastguard Worker 
742*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_FB_DIRTY_MAX_CLIPS     256
743*7688df22SAndroid Build Coastguard Worker 
744*7688df22SAndroid Build Coastguard Worker /*
745*7688df22SAndroid Build Coastguard Worker  * Mark a region of a framebuffer as dirty.
746*7688df22SAndroid Build Coastguard Worker  *
747*7688df22SAndroid Build Coastguard Worker  * Some hardware does not automatically update display contents
748*7688df22SAndroid Build Coastguard Worker  * as a hardware or software draw to a framebuffer. This ioctl
749*7688df22SAndroid Build Coastguard Worker  * allows userspace to tell the kernel and the hardware what
750*7688df22SAndroid Build Coastguard Worker  * regions of the framebuffer have changed.
751*7688df22SAndroid Build Coastguard Worker  *
752*7688df22SAndroid Build Coastguard Worker  * The kernel or hardware is free to update more then just the
753*7688df22SAndroid Build Coastguard Worker  * region specified by the clip rects. The kernel or hardware
754*7688df22SAndroid Build Coastguard Worker  * may also delay and/or coalesce several calls to dirty into a
755*7688df22SAndroid Build Coastguard Worker  * single update.
756*7688df22SAndroid Build Coastguard Worker  *
757*7688df22SAndroid Build Coastguard Worker  * Userspace may annotate the updates, the annotates are a
758*7688df22SAndroid Build Coastguard Worker  * promise made by the caller that the change is either a copy
759*7688df22SAndroid Build Coastguard Worker  * of pixels or a fill of a single color in the region specified.
760*7688df22SAndroid Build Coastguard Worker  *
761*7688df22SAndroid Build Coastguard Worker  * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
762*7688df22SAndroid Build Coastguard Worker  * the number of updated regions are half of num_clips given,
763*7688df22SAndroid Build Coastguard Worker  * where the clip rects are paired in src and dst. The width and
764*7688df22SAndroid Build Coastguard Worker  * height of each one of the pairs must match.
765*7688df22SAndroid Build Coastguard Worker  *
766*7688df22SAndroid Build Coastguard Worker  * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
767*7688df22SAndroid Build Coastguard Worker  * promises that the region specified of the clip rects is filled
768*7688df22SAndroid Build Coastguard Worker  * completely with a single color as given in the color argument.
769*7688df22SAndroid Build Coastguard Worker  */
770*7688df22SAndroid Build Coastguard Worker 
771*7688df22SAndroid Build Coastguard Worker struct drm_mode_fb_dirty_cmd {
772*7688df22SAndroid Build Coastguard Worker 	__u32 fb_id;
773*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
774*7688df22SAndroid Build Coastguard Worker 	__u32 color;
775*7688df22SAndroid Build Coastguard Worker 	__u32 num_clips;
776*7688df22SAndroid Build Coastguard Worker 	__u64 clips_ptr;
777*7688df22SAndroid Build Coastguard Worker };
778*7688df22SAndroid Build Coastguard Worker 
779*7688df22SAndroid Build Coastguard Worker struct drm_mode_mode_cmd {
780*7688df22SAndroid Build Coastguard Worker 	__u32 connector_id;
781*7688df22SAndroid Build Coastguard Worker 	struct drm_mode_modeinfo mode;
782*7688df22SAndroid Build Coastguard Worker };
783*7688df22SAndroid Build Coastguard Worker 
784*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CURSOR_BO	0x01
785*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CURSOR_MOVE	0x02
786*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_CURSOR_FLAGS	0x03
787*7688df22SAndroid Build Coastguard Worker 
788*7688df22SAndroid Build Coastguard Worker /*
789*7688df22SAndroid Build Coastguard Worker  * depending on the value in flags different members are used.
790*7688df22SAndroid Build Coastguard Worker  *
791*7688df22SAndroid Build Coastguard Worker  * CURSOR_BO uses
792*7688df22SAndroid Build Coastguard Worker  *    crtc_id
793*7688df22SAndroid Build Coastguard Worker  *    width
794*7688df22SAndroid Build Coastguard Worker  *    height
795*7688df22SAndroid Build Coastguard Worker  *    handle - if 0 turns the cursor off
796*7688df22SAndroid Build Coastguard Worker  *
797*7688df22SAndroid Build Coastguard Worker  * CURSOR_MOVE uses
798*7688df22SAndroid Build Coastguard Worker  *    crtc_id
799*7688df22SAndroid Build Coastguard Worker  *    x
800*7688df22SAndroid Build Coastguard Worker  *    y
801*7688df22SAndroid Build Coastguard Worker  */
802*7688df22SAndroid Build Coastguard Worker struct drm_mode_cursor {
803*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
804*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id;
805*7688df22SAndroid Build Coastguard Worker 	__s32 x;
806*7688df22SAndroid Build Coastguard Worker 	__s32 y;
807*7688df22SAndroid Build Coastguard Worker 	__u32 width;
808*7688df22SAndroid Build Coastguard Worker 	__u32 height;
809*7688df22SAndroid Build Coastguard Worker 	/* driver specific handle */
810*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
811*7688df22SAndroid Build Coastguard Worker };
812*7688df22SAndroid Build Coastguard Worker 
813*7688df22SAndroid Build Coastguard Worker struct drm_mode_cursor2 {
814*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
815*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id;
816*7688df22SAndroid Build Coastguard Worker 	__s32 x;
817*7688df22SAndroid Build Coastguard Worker 	__s32 y;
818*7688df22SAndroid Build Coastguard Worker 	__u32 width;
819*7688df22SAndroid Build Coastguard Worker 	__u32 height;
820*7688df22SAndroid Build Coastguard Worker 	/* driver specific handle */
821*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
822*7688df22SAndroid Build Coastguard Worker 	__s32 hot_x;
823*7688df22SAndroid Build Coastguard Worker 	__s32 hot_y;
824*7688df22SAndroid Build Coastguard Worker };
825*7688df22SAndroid Build Coastguard Worker 
826*7688df22SAndroid Build Coastguard Worker struct drm_mode_crtc_lut {
827*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id;
828*7688df22SAndroid Build Coastguard Worker 	__u32 gamma_size;
829*7688df22SAndroid Build Coastguard Worker 
830*7688df22SAndroid Build Coastguard Worker 	/* pointers to arrays */
831*7688df22SAndroid Build Coastguard Worker 	__u64 red;
832*7688df22SAndroid Build Coastguard Worker 	__u64 green;
833*7688df22SAndroid Build Coastguard Worker 	__u64 blue;
834*7688df22SAndroid Build Coastguard Worker };
835*7688df22SAndroid Build Coastguard Worker 
836*7688df22SAndroid Build Coastguard Worker struct drm_color_ctm {
837*7688df22SAndroid Build Coastguard Worker 	/*
838*7688df22SAndroid Build Coastguard Worker 	 * Conversion matrix in S31.32 sign-magnitude
839*7688df22SAndroid Build Coastguard Worker 	 * (not two's complement!) format.
840*7688df22SAndroid Build Coastguard Worker 	 *
841*7688df22SAndroid Build Coastguard Worker 	 * out   matrix    in
842*7688df22SAndroid Build Coastguard Worker 	 * |R|   |0 1 2|   |R|
843*7688df22SAndroid Build Coastguard Worker 	 * |G| = |3 4 5| x |G|
844*7688df22SAndroid Build Coastguard Worker 	 * |B|   |6 7 8|   |B|
845*7688df22SAndroid Build Coastguard Worker 	 */
846*7688df22SAndroid Build Coastguard Worker 	__u64 matrix[9];
847*7688df22SAndroid Build Coastguard Worker };
848*7688df22SAndroid Build Coastguard Worker 
849*7688df22SAndroid Build Coastguard Worker struct drm_color_lut {
850*7688df22SAndroid Build Coastguard Worker 	/*
851*7688df22SAndroid Build Coastguard Worker 	 * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and
852*7688df22SAndroid Build Coastguard Worker 	 * 0xffff == 1.0.
853*7688df22SAndroid Build Coastguard Worker 	 */
854*7688df22SAndroid Build Coastguard Worker 	__u16 red;
855*7688df22SAndroid Build Coastguard Worker 	__u16 green;
856*7688df22SAndroid Build Coastguard Worker 	__u16 blue;
857*7688df22SAndroid Build Coastguard Worker 	__u16 reserved;
858*7688df22SAndroid Build Coastguard Worker };
859*7688df22SAndroid Build Coastguard Worker 
860*7688df22SAndroid Build Coastguard Worker /**
861*7688df22SAndroid Build Coastguard Worker  * struct drm_plane_size_hint - Plane size hints
862*7688df22SAndroid Build Coastguard Worker  *
863*7688df22SAndroid Build Coastguard Worker  * The plane SIZE_HINTS property blob contains an
864*7688df22SAndroid Build Coastguard Worker  * array of struct drm_plane_size_hint.
865*7688df22SAndroid Build Coastguard Worker  */
866*7688df22SAndroid Build Coastguard Worker struct drm_plane_size_hint {
867*7688df22SAndroid Build Coastguard Worker 	__u16 width;
868*7688df22SAndroid Build Coastguard Worker 	__u16 height;
869*7688df22SAndroid Build Coastguard Worker };
870*7688df22SAndroid Build Coastguard Worker 
871*7688df22SAndroid Build Coastguard Worker /**
872*7688df22SAndroid Build Coastguard Worker  * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
873*7688df22SAndroid Build Coastguard Worker  *
874*7688df22SAndroid Build Coastguard Worker  * HDR Metadata Infoframe as per CTA 861.G spec. This is expected
875*7688df22SAndroid Build Coastguard Worker  * to match exactly with the spec.
876*7688df22SAndroid Build Coastguard Worker  *
877*7688df22SAndroid Build Coastguard Worker  * Userspace is expected to pass the metadata information as per
878*7688df22SAndroid Build Coastguard Worker  * the format described in this structure.
879*7688df22SAndroid Build Coastguard Worker  */
880*7688df22SAndroid Build Coastguard Worker struct hdr_metadata_infoframe {
881*7688df22SAndroid Build Coastguard Worker 	/**
882*7688df22SAndroid Build Coastguard Worker 	 * @eotf: Electro-Optical Transfer Function (EOTF)
883*7688df22SAndroid Build Coastguard Worker 	 * used in the stream.
884*7688df22SAndroid Build Coastguard Worker 	 */
885*7688df22SAndroid Build Coastguard Worker 	__u8 eotf;
886*7688df22SAndroid Build Coastguard Worker 	/**
887*7688df22SAndroid Build Coastguard Worker 	 * @metadata_type: Static_Metadata_Descriptor_ID.
888*7688df22SAndroid Build Coastguard Worker 	 */
889*7688df22SAndroid Build Coastguard Worker 	__u8 metadata_type;
890*7688df22SAndroid Build Coastguard Worker 	/**
891*7688df22SAndroid Build Coastguard Worker 	 * @display_primaries: Color Primaries of the Data.
892*7688df22SAndroid Build Coastguard Worker 	 * These are coded as unsigned 16-bit values in units of
893*7688df22SAndroid Build Coastguard Worker 	 * 0.00002, where 0x0000 represents zero and 0xC350
894*7688df22SAndroid Build Coastguard Worker 	 * represents 1.0000.
895*7688df22SAndroid Build Coastguard Worker 	 * @display_primaries.x: X coordinate of color primary.
896*7688df22SAndroid Build Coastguard Worker 	 * @display_primaries.y: Y coordinate of color primary.
897*7688df22SAndroid Build Coastguard Worker 	 */
898*7688df22SAndroid Build Coastguard Worker 	struct {
899*7688df22SAndroid Build Coastguard Worker 		__u16 x, y;
900*7688df22SAndroid Build Coastguard Worker 	} display_primaries[3];
901*7688df22SAndroid Build Coastguard Worker 	/**
902*7688df22SAndroid Build Coastguard Worker 	 * @white_point: White Point of Colorspace Data.
903*7688df22SAndroid Build Coastguard Worker 	 * These are coded as unsigned 16-bit values in units of
904*7688df22SAndroid Build Coastguard Worker 	 * 0.00002, where 0x0000 represents zero and 0xC350
905*7688df22SAndroid Build Coastguard Worker 	 * represents 1.0000.
906*7688df22SAndroid Build Coastguard Worker 	 * @white_point.x: X coordinate of whitepoint of color primary.
907*7688df22SAndroid Build Coastguard Worker 	 * @white_point.y: Y coordinate of whitepoint of color primary.
908*7688df22SAndroid Build Coastguard Worker 	 */
909*7688df22SAndroid Build Coastguard Worker 	struct {
910*7688df22SAndroid Build Coastguard Worker 		__u16 x, y;
911*7688df22SAndroid Build Coastguard Worker 	} white_point;
912*7688df22SAndroid Build Coastguard Worker 	/**
913*7688df22SAndroid Build Coastguard Worker 	 * @max_display_mastering_luminance: Max Mastering Display Luminance.
914*7688df22SAndroid Build Coastguard Worker 	 * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
915*7688df22SAndroid Build Coastguard Worker 	 * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
916*7688df22SAndroid Build Coastguard Worker 	 */
917*7688df22SAndroid Build Coastguard Worker 	__u16 max_display_mastering_luminance;
918*7688df22SAndroid Build Coastguard Worker 	/**
919*7688df22SAndroid Build Coastguard Worker 	 * @min_display_mastering_luminance: Min Mastering Display Luminance.
920*7688df22SAndroid Build Coastguard Worker 	 * This value is coded as an unsigned 16-bit value in units of
921*7688df22SAndroid Build Coastguard Worker 	 * 0.0001 cd/m2, where 0x0001 represents 0.0001 cd/m2 and 0xFFFF
922*7688df22SAndroid Build Coastguard Worker 	 * represents 6.5535 cd/m2.
923*7688df22SAndroid Build Coastguard Worker 	 */
924*7688df22SAndroid Build Coastguard Worker 	__u16 min_display_mastering_luminance;
925*7688df22SAndroid Build Coastguard Worker 	/**
926*7688df22SAndroid Build Coastguard Worker 	 * @max_cll: Max Content Light Level.
927*7688df22SAndroid Build Coastguard Worker 	 * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
928*7688df22SAndroid Build Coastguard Worker 	 * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
929*7688df22SAndroid Build Coastguard Worker 	 */
930*7688df22SAndroid Build Coastguard Worker 	__u16 max_cll;
931*7688df22SAndroid Build Coastguard Worker 	/**
932*7688df22SAndroid Build Coastguard Worker 	 * @max_fall: Max Frame Average Light Level.
933*7688df22SAndroid Build Coastguard Worker 	 * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
934*7688df22SAndroid Build Coastguard Worker 	 * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
935*7688df22SAndroid Build Coastguard Worker 	 */
936*7688df22SAndroid Build Coastguard Worker 	__u16 max_fall;
937*7688df22SAndroid Build Coastguard Worker };
938*7688df22SAndroid Build Coastguard Worker 
939*7688df22SAndroid Build Coastguard Worker /**
940*7688df22SAndroid Build Coastguard Worker  * struct hdr_output_metadata - HDR output metadata
941*7688df22SAndroid Build Coastguard Worker  *
942*7688df22SAndroid Build Coastguard Worker  * Metadata Information to be passed from userspace
943*7688df22SAndroid Build Coastguard Worker  */
944*7688df22SAndroid Build Coastguard Worker struct hdr_output_metadata {
945*7688df22SAndroid Build Coastguard Worker 	/**
946*7688df22SAndroid Build Coastguard Worker 	 * @metadata_type: Static_Metadata_Descriptor_ID.
947*7688df22SAndroid Build Coastguard Worker 	 */
948*7688df22SAndroid Build Coastguard Worker 	__u32 metadata_type;
949*7688df22SAndroid Build Coastguard Worker 	/**
950*7688df22SAndroid Build Coastguard Worker 	 * @hdmi_metadata_type1: HDR Metadata Infoframe.
951*7688df22SAndroid Build Coastguard Worker 	 */
952*7688df22SAndroid Build Coastguard Worker 	union {
953*7688df22SAndroid Build Coastguard Worker 		struct hdr_metadata_infoframe hdmi_metadata_type1;
954*7688df22SAndroid Build Coastguard Worker 	};
955*7688df22SAndroid Build Coastguard Worker };
956*7688df22SAndroid Build Coastguard Worker 
957*7688df22SAndroid Build Coastguard Worker /**
958*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_PAGE_FLIP_EVENT
959*7688df22SAndroid Build Coastguard Worker  *
960*7688df22SAndroid Build Coastguard Worker  * Request that the kernel sends back a vblank event (see
961*7688df22SAndroid Build Coastguard Worker  * struct drm_event_vblank) with the &DRM_EVENT_FLIP_COMPLETE type when the
962*7688df22SAndroid Build Coastguard Worker  * page-flip is done.
963*7688df22SAndroid Build Coastguard Worker  */
964*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PAGE_FLIP_EVENT 0x01
965*7688df22SAndroid Build Coastguard Worker /**
966*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_PAGE_FLIP_ASYNC
967*7688df22SAndroid Build Coastguard Worker  *
968*7688df22SAndroid Build Coastguard Worker  * Request that the page-flip is performed as soon as possible, ie. with no
969*7688df22SAndroid Build Coastguard Worker  * delay due to waiting for vblank. This may cause tearing to be visible on
970*7688df22SAndroid Build Coastguard Worker  * the screen.
971*7688df22SAndroid Build Coastguard Worker  *
972*7688df22SAndroid Build Coastguard Worker  * When used with atomic uAPI, the driver will return an error if the hardware
973*7688df22SAndroid Build Coastguard Worker  * doesn't support performing an asynchronous page-flip for this update.
974*7688df22SAndroid Build Coastguard Worker  * User-space should handle this, e.g. by falling back to a regular page-flip.
975*7688df22SAndroid Build Coastguard Worker  *
976*7688df22SAndroid Build Coastguard Worker  * Note, some hardware might need to perform one last synchronous page-flip
977*7688df22SAndroid Build Coastguard Worker  * before being able to switch to asynchronous page-flips. As an exception,
978*7688df22SAndroid Build Coastguard Worker  * the driver will return success even though that first page-flip is not
979*7688df22SAndroid Build Coastguard Worker  * asynchronous.
980*7688df22SAndroid Build Coastguard Worker  */
981*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PAGE_FLIP_ASYNC 0x02
982*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4
983*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PAGE_FLIP_TARGET_RELATIVE 0x8
984*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PAGE_FLIP_TARGET (DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE | \
985*7688df22SAndroid Build Coastguard Worker 				   DRM_MODE_PAGE_FLIP_TARGET_RELATIVE)
986*7688df22SAndroid Build Coastguard Worker /**
987*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_PAGE_FLIP_FLAGS
988*7688df22SAndroid Build Coastguard Worker  *
989*7688df22SAndroid Build Coastguard Worker  * Bitmask of flags suitable for &drm_mode_crtc_page_flip_target.flags.
990*7688df22SAndroid Build Coastguard Worker  */
991*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT | \
992*7688df22SAndroid Build Coastguard Worker 				  DRM_MODE_PAGE_FLIP_ASYNC | \
993*7688df22SAndroid Build Coastguard Worker 				  DRM_MODE_PAGE_FLIP_TARGET)
994*7688df22SAndroid Build Coastguard Worker 
995*7688df22SAndroid Build Coastguard Worker /*
996*7688df22SAndroid Build Coastguard Worker  * Request a page flip on the specified crtc.
997*7688df22SAndroid Build Coastguard Worker  *
998*7688df22SAndroid Build Coastguard Worker  * This ioctl will ask KMS to schedule a page flip for the specified
999*7688df22SAndroid Build Coastguard Worker  * crtc.  Once any pending rendering targeting the specified fb (as of
1000*7688df22SAndroid Build Coastguard Worker  * ioctl time) has completed, the crtc will be reprogrammed to display
1001*7688df22SAndroid Build Coastguard Worker  * that fb after the next vertical refresh.  The ioctl returns
1002*7688df22SAndroid Build Coastguard Worker  * immediately, but subsequent rendering to the current fb will block
1003*7688df22SAndroid Build Coastguard Worker  * in the execbuffer ioctl until the page flip happens.  If a page
1004*7688df22SAndroid Build Coastguard Worker  * flip is already pending as the ioctl is called, EBUSY will be
1005*7688df22SAndroid Build Coastguard Worker  * returned.
1006*7688df22SAndroid Build Coastguard Worker  *
1007*7688df22SAndroid Build Coastguard Worker  * Flag DRM_MODE_PAGE_FLIP_EVENT requests that drm sends back a vblank
1008*7688df22SAndroid Build Coastguard Worker  * event (see drm.h: struct drm_event_vblank) when the page flip is
1009*7688df22SAndroid Build Coastguard Worker  * done.  The user_data field passed in with this ioctl will be
1010*7688df22SAndroid Build Coastguard Worker  * returned as the user_data field in the vblank event struct.
1011*7688df22SAndroid Build Coastguard Worker  *
1012*7688df22SAndroid Build Coastguard Worker  * Flag DRM_MODE_PAGE_FLIP_ASYNC requests that the flip happen
1013*7688df22SAndroid Build Coastguard Worker  * 'as soon as possible', meaning that it not delay waiting for vblank.
1014*7688df22SAndroid Build Coastguard Worker  * This may cause tearing on the screen.
1015*7688df22SAndroid Build Coastguard Worker  *
1016*7688df22SAndroid Build Coastguard Worker  * The reserved field must be zero.
1017*7688df22SAndroid Build Coastguard Worker  */
1018*7688df22SAndroid Build Coastguard Worker 
1019*7688df22SAndroid Build Coastguard Worker struct drm_mode_crtc_page_flip {
1020*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id;
1021*7688df22SAndroid Build Coastguard Worker 	__u32 fb_id;
1022*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1023*7688df22SAndroid Build Coastguard Worker 	__u32 reserved;
1024*7688df22SAndroid Build Coastguard Worker 	__u64 user_data;
1025*7688df22SAndroid Build Coastguard Worker };
1026*7688df22SAndroid Build Coastguard Worker 
1027*7688df22SAndroid Build Coastguard Worker /*
1028*7688df22SAndroid Build Coastguard Worker  * Request a page flip on the specified crtc.
1029*7688df22SAndroid Build Coastguard Worker  *
1030*7688df22SAndroid Build Coastguard Worker  * Same as struct drm_mode_crtc_page_flip, but supports new flags and
1031*7688df22SAndroid Build Coastguard Worker  * re-purposes the reserved field:
1032*7688df22SAndroid Build Coastguard Worker  *
1033*7688df22SAndroid Build Coastguard Worker  * The sequence field must be zero unless either of the
1034*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is specified. When
1035*7688df22SAndroid Build Coastguard Worker  * the ABSOLUTE flag is specified, the sequence field denotes the absolute
1036*7688df22SAndroid Build Coastguard Worker  * vblank sequence when the flip should take effect. When the RELATIVE
1037*7688df22SAndroid Build Coastguard Worker  * flag is specified, the sequence field denotes the relative (to the
1038*7688df22SAndroid Build Coastguard Worker  * current one when the ioctl is called) vblank sequence when the flip
1039*7688df22SAndroid Build Coastguard Worker  * should take effect. NOTE: DRM_IOCTL_WAIT_VBLANK must still be used to
1040*7688df22SAndroid Build Coastguard Worker  * make sure the vblank sequence before the target one has passed before
1041*7688df22SAndroid Build Coastguard Worker  * calling this ioctl. The purpose of the
1042*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is merely to clarify
1043*7688df22SAndroid Build Coastguard Worker  * the target for when code dealing with a page flip runs during a
1044*7688df22SAndroid Build Coastguard Worker  * vertical blank period.
1045*7688df22SAndroid Build Coastguard Worker  */
1046*7688df22SAndroid Build Coastguard Worker 
1047*7688df22SAndroid Build Coastguard Worker struct drm_mode_crtc_page_flip_target {
1048*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id;
1049*7688df22SAndroid Build Coastguard Worker 	__u32 fb_id;
1050*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1051*7688df22SAndroid Build Coastguard Worker 	__u32 sequence;
1052*7688df22SAndroid Build Coastguard Worker 	__u64 user_data;
1053*7688df22SAndroid Build Coastguard Worker };
1054*7688df22SAndroid Build Coastguard Worker 
1055*7688df22SAndroid Build Coastguard Worker /**
1056*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_create_dumb - Create a KMS dumb buffer for scanout.
1057*7688df22SAndroid Build Coastguard Worker  * @height: buffer height in pixels
1058*7688df22SAndroid Build Coastguard Worker  * @width: buffer width in pixels
1059*7688df22SAndroid Build Coastguard Worker  * @bpp: bits per pixel
1060*7688df22SAndroid Build Coastguard Worker  * @flags: must be zero
1061*7688df22SAndroid Build Coastguard Worker  * @handle: buffer object handle
1062*7688df22SAndroid Build Coastguard Worker  * @pitch: number of bytes between two consecutive lines
1063*7688df22SAndroid Build Coastguard Worker  * @size: size of the whole buffer in bytes
1064*7688df22SAndroid Build Coastguard Worker  *
1065*7688df22SAndroid Build Coastguard Worker  * User-space fills @height, @width, @bpp and @flags. If the IOCTL succeeds,
1066*7688df22SAndroid Build Coastguard Worker  * the kernel fills @handle, @pitch and @size.
1067*7688df22SAndroid Build Coastguard Worker  */
1068*7688df22SAndroid Build Coastguard Worker struct drm_mode_create_dumb {
1069*7688df22SAndroid Build Coastguard Worker 	__u32 height;
1070*7688df22SAndroid Build Coastguard Worker 	__u32 width;
1071*7688df22SAndroid Build Coastguard Worker 	__u32 bpp;
1072*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1073*7688df22SAndroid Build Coastguard Worker 
1074*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1075*7688df22SAndroid Build Coastguard Worker 	__u32 pitch;
1076*7688df22SAndroid Build Coastguard Worker 	__u64 size;
1077*7688df22SAndroid Build Coastguard Worker };
1078*7688df22SAndroid Build Coastguard Worker 
1079*7688df22SAndroid Build Coastguard Worker /* set up for mmap of a dumb scanout buffer */
1080*7688df22SAndroid Build Coastguard Worker struct drm_mode_map_dumb {
1081*7688df22SAndroid Build Coastguard Worker 	/** Handle for the object being mapped. */
1082*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1083*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
1084*7688df22SAndroid Build Coastguard Worker 	/**
1085*7688df22SAndroid Build Coastguard Worker 	 * Fake offset to use for subsequent mmap call
1086*7688df22SAndroid Build Coastguard Worker 	 *
1087*7688df22SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
1088*7688df22SAndroid Build Coastguard Worker 	 */
1089*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
1090*7688df22SAndroid Build Coastguard Worker };
1091*7688df22SAndroid Build Coastguard Worker 
1092*7688df22SAndroid Build Coastguard Worker struct drm_mode_destroy_dumb {
1093*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1094*7688df22SAndroid Build Coastguard Worker };
1095*7688df22SAndroid Build Coastguard Worker 
1096*7688df22SAndroid Build Coastguard Worker /**
1097*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_ATOMIC_TEST_ONLY
1098*7688df22SAndroid Build Coastguard Worker  *
1099*7688df22SAndroid Build Coastguard Worker  * Do not apply the atomic commit, instead check whether the hardware supports
1100*7688df22SAndroid Build Coastguard Worker  * this configuration.
1101*7688df22SAndroid Build Coastguard Worker  *
1102*7688df22SAndroid Build Coastguard Worker  * See &drm_mode_config_funcs.atomic_check for more details on test-only
1103*7688df22SAndroid Build Coastguard Worker  * commits.
1104*7688df22SAndroid Build Coastguard Worker  */
1105*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ATOMIC_TEST_ONLY 0x0100
1106*7688df22SAndroid Build Coastguard Worker /**
1107*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_ATOMIC_NONBLOCK
1108*7688df22SAndroid Build Coastguard Worker  *
1109*7688df22SAndroid Build Coastguard Worker  * Do not block while applying the atomic commit. The &DRM_IOCTL_MODE_ATOMIC
1110*7688df22SAndroid Build Coastguard Worker  * IOCTL returns immediately instead of waiting for the changes to be applied
1111*7688df22SAndroid Build Coastguard Worker  * in hardware. Note, the driver will still check that the update can be
1112*7688df22SAndroid Build Coastguard Worker  * applied before retuning.
1113*7688df22SAndroid Build Coastguard Worker  */
1114*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ATOMIC_NONBLOCK  0x0200
1115*7688df22SAndroid Build Coastguard Worker /**
1116*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_ATOMIC_ALLOW_MODESET
1117*7688df22SAndroid Build Coastguard Worker  *
1118*7688df22SAndroid Build Coastguard Worker  * Allow the update to result in temporary or transient visible artifacts while
1119*7688df22SAndroid Build Coastguard Worker  * the update is being applied. Applying the update may also take significantly
1120*7688df22SAndroid Build Coastguard Worker  * more time than a page flip. All visual artifacts will disappear by the time
1121*7688df22SAndroid Build Coastguard Worker  * the update is completed, as signalled through the vblank event's timestamp
1122*7688df22SAndroid Build Coastguard Worker  * (see struct drm_event_vblank).
1123*7688df22SAndroid Build Coastguard Worker  *
1124*7688df22SAndroid Build Coastguard Worker  * This flag must be set when the KMS update might cause visible artifacts.
1125*7688df22SAndroid Build Coastguard Worker  * Without this flag such KMS update will return a EINVAL error. What kind of
1126*7688df22SAndroid Build Coastguard Worker  * update may cause visible artifacts depends on the driver and the hardware.
1127*7688df22SAndroid Build Coastguard Worker  * User-space that needs to know beforehand if an update might cause visible
1128*7688df22SAndroid Build Coastguard Worker  * artifacts can use &DRM_MODE_ATOMIC_TEST_ONLY without
1129*7688df22SAndroid Build Coastguard Worker  * &DRM_MODE_ATOMIC_ALLOW_MODESET to see if it fails.
1130*7688df22SAndroid Build Coastguard Worker  *
1131*7688df22SAndroid Build Coastguard Worker  * To the best of the driver's knowledge, visual artifacts are guaranteed to
1132*7688df22SAndroid Build Coastguard Worker  * not appear when this flag is not set. Some sinks might display visual
1133*7688df22SAndroid Build Coastguard Worker  * artifacts outside of the driver's control.
1134*7688df22SAndroid Build Coastguard Worker  */
1135*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400
1136*7688df22SAndroid Build Coastguard Worker 
1137*7688df22SAndroid Build Coastguard Worker /**
1138*7688df22SAndroid Build Coastguard Worker  * DRM_MODE_ATOMIC_FLAGS
1139*7688df22SAndroid Build Coastguard Worker  *
1140*7688df22SAndroid Build Coastguard Worker  * Bitfield of flags accepted by the &DRM_IOCTL_MODE_ATOMIC IOCTL in
1141*7688df22SAndroid Build Coastguard Worker  * &drm_mode_atomic.flags.
1142*7688df22SAndroid Build Coastguard Worker  */
1143*7688df22SAndroid Build Coastguard Worker #define DRM_MODE_ATOMIC_FLAGS (\
1144*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_PAGE_FLIP_EVENT |\
1145*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_PAGE_FLIP_ASYNC |\
1146*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_ATOMIC_TEST_ONLY |\
1147*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_ATOMIC_NONBLOCK |\
1148*7688df22SAndroid Build Coastguard Worker 		DRM_MODE_ATOMIC_ALLOW_MODESET)
1149*7688df22SAndroid Build Coastguard Worker 
1150*7688df22SAndroid Build Coastguard Worker struct drm_mode_atomic {
1151*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1152*7688df22SAndroid Build Coastguard Worker 	__u32 count_objs;
1153*7688df22SAndroid Build Coastguard Worker 	__u64 objs_ptr;
1154*7688df22SAndroid Build Coastguard Worker 	__u64 count_props_ptr;
1155*7688df22SAndroid Build Coastguard Worker 	__u64 props_ptr;
1156*7688df22SAndroid Build Coastguard Worker 	__u64 prop_values_ptr;
1157*7688df22SAndroid Build Coastguard Worker 	__u64 reserved;
1158*7688df22SAndroid Build Coastguard Worker 	__u64 user_data;
1159*7688df22SAndroid Build Coastguard Worker };
1160*7688df22SAndroid Build Coastguard Worker 
1161*7688df22SAndroid Build Coastguard Worker struct drm_format_modifier_blob {
1162*7688df22SAndroid Build Coastguard Worker #define FORMAT_BLOB_CURRENT 1
1163*7688df22SAndroid Build Coastguard Worker 	/* Version of this blob format */
1164*7688df22SAndroid Build Coastguard Worker 	__u32 version;
1165*7688df22SAndroid Build Coastguard Worker 
1166*7688df22SAndroid Build Coastguard Worker 	/* Flags */
1167*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1168*7688df22SAndroid Build Coastguard Worker 
1169*7688df22SAndroid Build Coastguard Worker 	/* Number of fourcc formats supported */
1170*7688df22SAndroid Build Coastguard Worker 	__u32 count_formats;
1171*7688df22SAndroid Build Coastguard Worker 
1172*7688df22SAndroid Build Coastguard Worker 	/* Where in this blob the formats exist (in bytes) */
1173*7688df22SAndroid Build Coastguard Worker 	__u32 formats_offset;
1174*7688df22SAndroid Build Coastguard Worker 
1175*7688df22SAndroid Build Coastguard Worker 	/* Number of drm_format_modifiers */
1176*7688df22SAndroid Build Coastguard Worker 	__u32 count_modifiers;
1177*7688df22SAndroid Build Coastguard Worker 
1178*7688df22SAndroid Build Coastguard Worker 	/* Where in this blob the modifiers exist (in bytes) */
1179*7688df22SAndroid Build Coastguard Worker 	__u32 modifiers_offset;
1180*7688df22SAndroid Build Coastguard Worker 
1181*7688df22SAndroid Build Coastguard Worker 	/* __u32 formats[] */
1182*7688df22SAndroid Build Coastguard Worker 	/* struct drm_format_modifier modifiers[] */
1183*7688df22SAndroid Build Coastguard Worker };
1184*7688df22SAndroid Build Coastguard Worker 
1185*7688df22SAndroid Build Coastguard Worker struct drm_format_modifier {
1186*7688df22SAndroid Build Coastguard Worker 	/* Bitmask of formats in get_plane format list this info applies to. The
1187*7688df22SAndroid Build Coastguard Worker 	 * offset allows a sliding window of which 64 formats (bits).
1188*7688df22SAndroid Build Coastguard Worker 	 *
1189*7688df22SAndroid Build Coastguard Worker 	 * Some examples:
1190*7688df22SAndroid Build Coastguard Worker 	 * In today's world with < 65 formats, and formats 0, and 2 are
1191*7688df22SAndroid Build Coastguard Worker 	 * supported
1192*7688df22SAndroid Build Coastguard Worker 	 * 0x0000000000000005
1193*7688df22SAndroid Build Coastguard Worker 	 *		  ^-offset = 0, formats = 5
1194*7688df22SAndroid Build Coastguard Worker 	 *
1195*7688df22SAndroid Build Coastguard Worker 	 * If the number formats grew to 128, and formats 98-102 are
1196*7688df22SAndroid Build Coastguard Worker 	 * supported with the modifier:
1197*7688df22SAndroid Build Coastguard Worker 	 *
1198*7688df22SAndroid Build Coastguard Worker 	 * 0x0000007c00000000 0000000000000000
1199*7688df22SAndroid Build Coastguard Worker 	 *		  ^
1200*7688df22SAndroid Build Coastguard Worker 	 *		  |__offset = 64, formats = 0x7c00000000
1201*7688df22SAndroid Build Coastguard Worker 	 *
1202*7688df22SAndroid Build Coastguard Worker 	 */
1203*7688df22SAndroid Build Coastguard Worker 	__u64 formats;
1204*7688df22SAndroid Build Coastguard Worker 	__u32 offset;
1205*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
1206*7688df22SAndroid Build Coastguard Worker 
1207*7688df22SAndroid Build Coastguard Worker 	/* The modifier that applies to the >get_plane format list bitmask. */
1208*7688df22SAndroid Build Coastguard Worker 	__u64 modifier;
1209*7688df22SAndroid Build Coastguard Worker };
1210*7688df22SAndroid Build Coastguard Worker 
1211*7688df22SAndroid Build Coastguard Worker /**
1212*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_create_blob - Create New blob property
1213*7688df22SAndroid Build Coastguard Worker  *
1214*7688df22SAndroid Build Coastguard Worker  * Create a new 'blob' data property, copying length bytes from data pointer,
1215*7688df22SAndroid Build Coastguard Worker  * and returning new blob ID.
1216*7688df22SAndroid Build Coastguard Worker  */
1217*7688df22SAndroid Build Coastguard Worker struct drm_mode_create_blob {
1218*7688df22SAndroid Build Coastguard Worker 	/** @data: Pointer to data to copy. */
1219*7688df22SAndroid Build Coastguard Worker 	__u64 data;
1220*7688df22SAndroid Build Coastguard Worker 	/** @length: Length of data to copy. */
1221*7688df22SAndroid Build Coastguard Worker 	__u32 length;
1222*7688df22SAndroid Build Coastguard Worker 	/** @blob_id: Return: new property ID. */
1223*7688df22SAndroid Build Coastguard Worker 	__u32 blob_id;
1224*7688df22SAndroid Build Coastguard Worker };
1225*7688df22SAndroid Build Coastguard Worker 
1226*7688df22SAndroid Build Coastguard Worker /**
1227*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_destroy_blob - Destroy user blob
1228*7688df22SAndroid Build Coastguard Worker  * @blob_id: blob_id to destroy
1229*7688df22SAndroid Build Coastguard Worker  *
1230*7688df22SAndroid Build Coastguard Worker  * Destroy a user-created blob property.
1231*7688df22SAndroid Build Coastguard Worker  *
1232*7688df22SAndroid Build Coastguard Worker  * User-space can release blobs as soon as they do not need to refer to them by
1233*7688df22SAndroid Build Coastguard Worker  * their blob object ID.  For instance, if you are using a MODE_ID blob in an
1234*7688df22SAndroid Build Coastguard Worker  * atomic commit and you will not make another commit re-using the same ID, you
1235*7688df22SAndroid Build Coastguard Worker  * can destroy the blob as soon as the commit has been issued, without waiting
1236*7688df22SAndroid Build Coastguard Worker  * for it to complete.
1237*7688df22SAndroid Build Coastguard Worker  */
1238*7688df22SAndroid Build Coastguard Worker struct drm_mode_destroy_blob {
1239*7688df22SAndroid Build Coastguard Worker 	__u32 blob_id;
1240*7688df22SAndroid Build Coastguard Worker };
1241*7688df22SAndroid Build Coastguard Worker 
1242*7688df22SAndroid Build Coastguard Worker /**
1243*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_create_lease - Create lease
1244*7688df22SAndroid Build Coastguard Worker  *
1245*7688df22SAndroid Build Coastguard Worker  * Lease mode resources, creating another drm_master.
1246*7688df22SAndroid Build Coastguard Worker  *
1247*7688df22SAndroid Build Coastguard Worker  * The @object_ids array must reference at least one CRTC, one connector and
1248*7688df22SAndroid Build Coastguard Worker  * one plane if &DRM_CLIENT_CAP_UNIVERSAL_PLANES is enabled. Alternatively,
1249*7688df22SAndroid Build Coastguard Worker  * the lease can be completely empty.
1250*7688df22SAndroid Build Coastguard Worker  */
1251*7688df22SAndroid Build Coastguard Worker struct drm_mode_create_lease {
1252*7688df22SAndroid Build Coastguard Worker 	/** @object_ids: Pointer to array of object ids (__u32) */
1253*7688df22SAndroid Build Coastguard Worker 	__u64 object_ids;
1254*7688df22SAndroid Build Coastguard Worker 	/** @object_count: Number of object ids */
1255*7688df22SAndroid Build Coastguard Worker 	__u32 object_count;
1256*7688df22SAndroid Build Coastguard Worker 	/** @flags: flags for new FD (O_CLOEXEC, etc) */
1257*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1258*7688df22SAndroid Build Coastguard Worker 
1259*7688df22SAndroid Build Coastguard Worker 	/** @lessee_id: Return: unique identifier for lessee. */
1260*7688df22SAndroid Build Coastguard Worker 	__u32 lessee_id;
1261*7688df22SAndroid Build Coastguard Worker 	/** @fd: Return: file descriptor to new drm_master file */
1262*7688df22SAndroid Build Coastguard Worker 	__u32 fd;
1263*7688df22SAndroid Build Coastguard Worker };
1264*7688df22SAndroid Build Coastguard Worker 
1265*7688df22SAndroid Build Coastguard Worker /**
1266*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_list_lessees - List lessees
1267*7688df22SAndroid Build Coastguard Worker  *
1268*7688df22SAndroid Build Coastguard Worker  * List lesses from a drm_master.
1269*7688df22SAndroid Build Coastguard Worker  */
1270*7688df22SAndroid Build Coastguard Worker struct drm_mode_list_lessees {
1271*7688df22SAndroid Build Coastguard Worker 	/**
1272*7688df22SAndroid Build Coastguard Worker 	 * @count_lessees: Number of lessees.
1273*7688df22SAndroid Build Coastguard Worker 	 *
1274*7688df22SAndroid Build Coastguard Worker 	 * On input, provides length of the array.
1275*7688df22SAndroid Build Coastguard Worker 	 * On output, provides total number. No
1276*7688df22SAndroid Build Coastguard Worker 	 * more than the input number will be written
1277*7688df22SAndroid Build Coastguard Worker 	 * back, so two calls can be used to get
1278*7688df22SAndroid Build Coastguard Worker 	 * the size and then the data.
1279*7688df22SAndroid Build Coastguard Worker 	 */
1280*7688df22SAndroid Build Coastguard Worker 	__u32 count_lessees;
1281*7688df22SAndroid Build Coastguard Worker 	/** @pad: Padding. */
1282*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
1283*7688df22SAndroid Build Coastguard Worker 
1284*7688df22SAndroid Build Coastguard Worker 	/**
1285*7688df22SAndroid Build Coastguard Worker 	 * @lessees_ptr: Pointer to lessees.
1286*7688df22SAndroid Build Coastguard Worker 	 *
1287*7688df22SAndroid Build Coastguard Worker 	 * Pointer to __u64 array of lessee ids
1288*7688df22SAndroid Build Coastguard Worker 	 */
1289*7688df22SAndroid Build Coastguard Worker 	__u64 lessees_ptr;
1290*7688df22SAndroid Build Coastguard Worker };
1291*7688df22SAndroid Build Coastguard Worker 
1292*7688df22SAndroid Build Coastguard Worker /**
1293*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_get_lease - Get Lease
1294*7688df22SAndroid Build Coastguard Worker  *
1295*7688df22SAndroid Build Coastguard Worker  * Get leased objects.
1296*7688df22SAndroid Build Coastguard Worker  */
1297*7688df22SAndroid Build Coastguard Worker struct drm_mode_get_lease {
1298*7688df22SAndroid Build Coastguard Worker 	/**
1299*7688df22SAndroid Build Coastguard Worker 	 * @count_objects: Number of leased objects.
1300*7688df22SAndroid Build Coastguard Worker 	 *
1301*7688df22SAndroid Build Coastguard Worker 	 * On input, provides length of the array.
1302*7688df22SAndroid Build Coastguard Worker 	 * On output, provides total number. No
1303*7688df22SAndroid Build Coastguard Worker 	 * more than the input number will be written
1304*7688df22SAndroid Build Coastguard Worker 	 * back, so two calls can be used to get
1305*7688df22SAndroid Build Coastguard Worker 	 * the size and then the data.
1306*7688df22SAndroid Build Coastguard Worker 	 */
1307*7688df22SAndroid Build Coastguard Worker 	__u32 count_objects;
1308*7688df22SAndroid Build Coastguard Worker 	/** @pad: Padding. */
1309*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
1310*7688df22SAndroid Build Coastguard Worker 
1311*7688df22SAndroid Build Coastguard Worker 	/**
1312*7688df22SAndroid Build Coastguard Worker 	 * @objects_ptr: Pointer to objects.
1313*7688df22SAndroid Build Coastguard Worker 	 *
1314*7688df22SAndroid Build Coastguard Worker 	 * Pointer to __u32 array of object ids.
1315*7688df22SAndroid Build Coastguard Worker 	 */
1316*7688df22SAndroid Build Coastguard Worker 	__u64 objects_ptr;
1317*7688df22SAndroid Build Coastguard Worker };
1318*7688df22SAndroid Build Coastguard Worker 
1319*7688df22SAndroid Build Coastguard Worker /**
1320*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_revoke_lease - Revoke lease
1321*7688df22SAndroid Build Coastguard Worker  */
1322*7688df22SAndroid Build Coastguard Worker struct drm_mode_revoke_lease {
1323*7688df22SAndroid Build Coastguard Worker 	/** @lessee_id: Unique ID of lessee */
1324*7688df22SAndroid Build Coastguard Worker 	__u32 lessee_id;
1325*7688df22SAndroid Build Coastguard Worker };
1326*7688df22SAndroid Build Coastguard Worker 
1327*7688df22SAndroid Build Coastguard Worker /**
1328*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_rect - Two dimensional rectangle.
1329*7688df22SAndroid Build Coastguard Worker  * @x1: Horizontal starting coordinate (inclusive).
1330*7688df22SAndroid Build Coastguard Worker  * @y1: Vertical starting coordinate (inclusive).
1331*7688df22SAndroid Build Coastguard Worker  * @x2: Horizontal ending coordinate (exclusive).
1332*7688df22SAndroid Build Coastguard Worker  * @y2: Vertical ending coordinate (exclusive).
1333*7688df22SAndroid Build Coastguard Worker  *
1334*7688df22SAndroid Build Coastguard Worker  * With drm subsystem using struct drm_rect to manage rectangular area this
1335*7688df22SAndroid Build Coastguard Worker  * export it to user-space.
1336*7688df22SAndroid Build Coastguard Worker  *
1337*7688df22SAndroid Build Coastguard Worker  * Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS.
1338*7688df22SAndroid Build Coastguard Worker  */
1339*7688df22SAndroid Build Coastguard Worker struct drm_mode_rect {
1340*7688df22SAndroid Build Coastguard Worker 	__s32 x1;
1341*7688df22SAndroid Build Coastguard Worker 	__s32 y1;
1342*7688df22SAndroid Build Coastguard Worker 	__s32 x2;
1343*7688df22SAndroid Build Coastguard Worker 	__s32 y2;
1344*7688df22SAndroid Build Coastguard Worker };
1345*7688df22SAndroid Build Coastguard Worker 
1346*7688df22SAndroid Build Coastguard Worker /**
1347*7688df22SAndroid Build Coastguard Worker  * struct drm_mode_closefb
1348*7688df22SAndroid Build Coastguard Worker  * @fb_id: Framebuffer ID.
1349*7688df22SAndroid Build Coastguard Worker  * @pad: Must be zero.
1350*7688df22SAndroid Build Coastguard Worker  */
1351*7688df22SAndroid Build Coastguard Worker struct drm_mode_closefb {
1352*7688df22SAndroid Build Coastguard Worker 	__u32 fb_id;
1353*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
1354*7688df22SAndroid Build Coastguard Worker };
1355*7688df22SAndroid Build Coastguard Worker 
1356*7688df22SAndroid Build Coastguard Worker #if defined(__cplusplus)
1357*7688df22SAndroid Build Coastguard Worker }
1358*7688df22SAndroid Build Coastguard Worker #endif
1359*7688df22SAndroid Build Coastguard Worker 
1360*7688df22SAndroid Build Coastguard Worker #endif
1361