1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com>
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (c) 2008 Red Hat Inc.
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (c) 2007-2008 Intel Corporation
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Permission is hereby granted, free of charge, to any person obtaining a
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * copy of this software and associated documentation files (the "Software"),
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * to deal in the Software without restriction, including without limitation
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * and/or sell copies of the Software, and to permit persons to whom the
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Software is furnished to do so, subject to the following conditions:
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * The above copyright notice and this permission notice shall be included in
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * all copies or substantial portions of the Software.
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * IN THE SOFTWARE.
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _DRM_MODE_H
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _DRM_MODE_H
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_DISPLAY_INFO_LEN	32
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_CONNECTOR_NAME_LEN	32
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_DISPLAY_MODE_LEN	32
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_PROP_NAME_LEN	32
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_TYPE_BUILTIN	(1<<0)
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN)
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN)
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_TYPE_PREFERRED	(1<<3)
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_TYPE_DEFAULT	(1<<4)
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_TYPE_USERDEF	(1<<5)
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_TYPE_DRIVER	(1<<6)
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Video mode flags */
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* bit compatible with the xorg definitions. */
47e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_PHSYNC			(1<<0)
48e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_NHSYNC			(1<<1)
49e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_PVSYNC			(1<<2)
50e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_NVSYNC			(1<<3)
51e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_INTERLACE			(1<<4)
52e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_DBLSCAN			(1<<5)
53e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_CSYNC			(1<<6)
54e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_PCSYNC			(1<<7)
55e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_NCSYNC			(1<<8)
56e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_HSKEW			(1<<9) /* hskew provided */
57e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_BCAST			(1<<10)
58e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_PIXMUX			(1<<11)
59e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_DBLCLK			(1<<12)
60e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_CLKDIV2			(1<<13)
61e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris /*
62e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris  * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX
63e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris  * (define not exposed to user space).
64e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris  */
65e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_FLAG_3D_MASK			(0x1f<<14)
66e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define  DRM_MODE_FLAG_3D_NONE			(0<<14)
67e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define  DRM_MODE_FLAG_3D_FRAME_PACKING		(1<<14)
68e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE	(2<<14)
69e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE	(3<<14)
70e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL	(4<<14)
71e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define  DRM_MODE_FLAG_3D_L_DEPTH		(5<<14)
72e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH	(6<<14)
73e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)
74e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14)
75e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* DPMS flags */
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* bit compatible with the xorg definitions. */
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DPMS_ON	0
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DPMS_STANDBY	1
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DPMS_SUSPEND	2
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DPMS_OFF	3
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Scaling mode options */
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SCALE_NONE		0 /* Unmodified timing (display or
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng					     software can still scale) */
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SCALE_FULLSCREEN	1 /* Full screen, ignore aspect */
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SCALE_CENTER		2 /* Centered, no scaling */
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SCALE_ASPECT		3 /* Full screen, preserve aspect */
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
917c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris/* Picture aspect ratio options */
927c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris#define DRM_MODE_PICTURE_ASPECT_NONE	0
937c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris#define DRM_MODE_PICTURE_ASPECT_4_3	1
947c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris#define DRM_MODE_PICTURE_ASPECT_16_9	2
957c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Dithering mode options */
97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DITHERING_OFF	0
98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DITHERING_ON	1
99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DITHERING_AUTO 2
100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Dirty info options */
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DIRTY_OFF      0
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DIRTY_ON       1
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_DIRTY_ANNOTATE 2
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_modeinfo {
107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 clock;
108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16 hdisplay, hsync_start, hsync_end, htotal, hskew;
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16 vdisplay, vsync_start, vsync_end, vtotal, vscan;
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 vrefresh;
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 flags;
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 type;
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char name[DRM_DISPLAY_MODE_LEN];
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_card_res {
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 fb_id_ptr;
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 crtc_id_ptr;
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 connector_id_ptr;
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 encoder_id_ptr;
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_fbs;
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_crtcs;
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_connectors;
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_encoders;
127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 min_width, max_width;
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 min_height, max_height;
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_crtc {
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 set_connectors_ptr;
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_connectors;
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 crtc_id; /**< Id */
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 fb_id; /**< Id of framebuffer */
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 x, y; /**< Position on the frameuffer */
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 gamma_size;
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 mode_valid;
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct drm_mode_modeinfo mode;
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_PRESENT_TOP_FIELD	(1<<0)
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_PRESENT_BOTTOM_FIELD	(1<<1)
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Planes blend with or override other bits on the CRTC */
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_set_plane {
150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 plane_id;
151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 crtc_id;
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 fb_id; /* fb object contains surface format type */
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 flags; /* see above flags */
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* Signed dest location allows it to be partially off screen */
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__s32 crtc_x, crtc_y;
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 crtc_w, crtc_h;
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* Source values are 16.16 fixed point */
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 src_x, src_y;
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 src_h, src_w;
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_get_plane {
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 plane_id;
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 crtc_id;
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 fb_id;
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 possible_crtcs;
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 gamma_size;
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_format_types;
174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 format_type_ptr;
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_get_plane_res {
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 plane_id_ptr;
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_planes;
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_ENCODER_NONE	0
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_ENCODER_DAC	1
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_ENCODER_TMDS	2
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_ENCODER_LVDS	3
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_ENCODER_TVDAC	4
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_ENCODER_VIRTUAL 5
188e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_ENCODER_DSI	6
189314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define DRM_MODE_ENCODER_DPMST	7
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_get_encoder {
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 encoder_id;
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 encoder_type;
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 crtc_id; /**< Id of crtc */
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 possible_crtcs;
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 possible_clones;
199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* This is for connectors with multiple signal types. */
202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SUBCONNECTOR_Automatic	0
204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SUBCONNECTOR_Unknown	0
205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SUBCONNECTOR_DVID	3
206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SUBCONNECTOR_DVIA	4
207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SUBCONNECTOR_Composite	5
208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SUBCONNECTOR_SVIDEO	6
209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SUBCONNECTOR_Component	8
210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_SUBCONNECTOR_SCART	9
211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_Unknown	0
213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_VGA		1
214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_DVII		2
215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_DVID		3
216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_DVIA		4
217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_Composite	5
218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_SVIDEO	6
219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_LVDS		7
220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_Component	8
221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_9PinDIN	9
222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_DisplayPort	10
223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_HDMIA	11
224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_HDMIB	12
225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_TV		13
226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_eDP		14
227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CONNECTOR_VIRTUAL      15
228e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_CONNECTOR_DSI		16
229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_get_connector {
231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 encoders_ptr;
233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 modes_ptr;
234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 props_ptr;
235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 prop_values_ptr;
236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_modes;
238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_props;
239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_encoders;
240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 encoder_id; /**< Current Encoder */
242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 connector_id; /**< Id */
243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 connector_type;
244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 connector_type_id;
245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 connection;
247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 mm_width, mm_height; /**< HxW in millimeters */
248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 subpixel;
249e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
250e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__u32 pad;
251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_PROP_PENDING	(1<<0)
254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_PROP_RANGE	(1<<1)
255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_PROP_IMMUTABLE	(1<<2)
256224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_PROP_ENUM	(1<<3) /* enumerated type with text strings */
257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_PROP_BLOB	(1<<4)
258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_PROP_BITMASK	(1<<5) /* bitmask of enumerated types */
259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
260314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris/* non-extended types: legacy bitmask, one bit per type: */
261314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define DRM_MODE_PROP_LEGACY_TYPE  ( \
262314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris		DRM_MODE_PROP_RANGE | \
263314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris		DRM_MODE_PROP_ENUM | \
264314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris		DRM_MODE_PROP_BLOB | \
265314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris		DRM_MODE_PROP_BITMASK)
266314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris
267314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris/* extended-types: rather than continue to consume a bit per type,
268314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * grab a chunk of the bits to use as integer type id.
269314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris */
270314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define DRM_MODE_PROP_EXTENDED_TYPE	0x0000ffc0
271314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define DRM_MODE_PROP_TYPE(n)		((n) << 6)
272314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define DRM_MODE_PROP_OBJECT		DRM_MODE_PROP_TYPE(1)
273314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define DRM_MODE_PROP_SIGNED_RANGE	DRM_MODE_PROP_TYPE(2)
274314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris
275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_property_enum {
276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 value;
277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char name[DRM_PROP_NAME_LEN];
278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_get_property {
281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 values_ptr; /* values and blob lengths */
282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 enum_blob_ptr; /* enum and blob id ptrs */
283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
284224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 prop_id;
285224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 flags;
286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char name[DRM_PROP_NAME_LEN];
287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_values;
289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_enum_blobs;
290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_connector_set_property {
293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 value;
294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 prop_id;
295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 connector_id;
296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_obj_get_properties {
299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 props_ptr;
300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 prop_values_ptr;
301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count_props;
302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 obj_id;
303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 obj_type;
304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_obj_set_property {
307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 value;
308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 prop_id;
309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 obj_id;
310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 obj_type;
311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_get_blob {
314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 blob_id;
315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 length;
316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 data;
317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_fb_cmd {
320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 fb_id;
321224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 width, height;
322224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 pitch;
323224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 bpp;
324224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 depth;
325224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* driver specific handle */
326224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 handle;
327224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
328224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
329224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_FB_INTERLACED	(1<<0) /* for interlaced framebuffers */
330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_fb_cmd2 {
332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 fb_id;
333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 width, height;
334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 pixel_format; /* fourcc code from drm_fourcc.h */
335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 flags; /* see above flags */
336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/*
338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * In case of planar formats, this ioctl allows up to 4
339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * buffer objects with offets and pitches per plane.
340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * The pitch and offset order is dictated by the fourcc,
341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * e.g. NV12 (http://fourcc.org/yuv.php#NV12) is described as:
342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *
343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *   YUV 4:2:0 image with a plane of 8 bit Y samples
344224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *   followed by an interleaved U/V plane containing
345224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *   8 bit 2x2 subsampled colour difference samples.
346224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *
347224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * So it would consist of Y as offset[0] and UV as
348224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * offeset[1].  Note that offset[0] will generally
349224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * be 0.
350224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 */
351224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 handles[4];
352224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 pitches[4]; /* pitch for each plane */
353224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 offsets[4]; /* offset of each plane */
354224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
356224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
357224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
358224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_FB_DIRTY_FLAGS         0x03
359224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
360224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_FB_DIRTY_MAX_CLIPS     256
361224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
362224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
363224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Mark a region of a framebuffer as dirty.
364224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
365224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Some hardware does not automatically update display contents
366224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * as a hardware or software draw to a framebuffer. This ioctl
367224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * allows userspace to tell the kernel and the hardware what
368224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * regions of the framebuffer have changed.
369224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
370224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * The kernel or hardware is free to update more then just the
371224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * region specified by the clip rects. The kernel or hardware
372224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * may also delay and/or coalesce several calls to dirty into a
373224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * single update.
374224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
375224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Userspace may annotate the updates, the annotates are a
376224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * promise made by the caller that the change is either a copy
377224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * of pixels or a fill of a single color in the region specified.
378224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
379224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
380224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the number of updated regions are half of num_clips given,
381224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * where the clip rects are paired in src and dst. The width and
382224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * height of each one of the pairs must match.
383224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
384224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
385224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * promises that the region specified of the clip rects is filled
386224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * completely with a single color as given in the color argument.
387224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
388224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
389224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_fb_dirty_cmd {
390224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 fb_id;
391224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 flags;
392224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 color;
393224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 num_clips;
394224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 clips_ptr;
395224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
396224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
397224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_mode_cmd {
398224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 connector_id;
399224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct drm_mode_modeinfo mode;
400224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
401224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
402224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CURSOR_BO	0x01
403224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CURSOR_MOVE	0x02
404224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_CURSOR_FLAGS	0x03
405224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
406224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
407224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * depending on the value in flags different members are used.
408224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
409224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * CURSOR_BO uses
410224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    crtc_id
411224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    width
412224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    height
413224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    handle - if 0 turns the cursor off
414224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
415224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * CURSOR_MOVE uses
416224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    crtc_id
417224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    x
418224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    y
419224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
420224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_cursor {
421224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 flags;
422224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 crtc_id;
423224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__s32 x;
424224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__s32 y;
425224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 width;
426224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 height;
427224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* driver specific handle */
428224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 handle;
429224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
430224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
431e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferrisstruct drm_mode_cursor2 {
432e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__u32 flags;
433e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__u32 crtc_id;
434e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__s32 x;
435e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__s32 y;
436e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__u32 width;
437e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__u32 height;
438e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	/* driver specific handle */
439e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__u32 handle;
440e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__s32 hot_x;
441e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__s32 hot_y;
442e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris};
443e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
444224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_crtc_lut {
445224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 crtc_id;
446224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 gamma_size;
447224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
448224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* pointers to arrays */
449224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 red;
450224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 green;
451224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 blue;
452224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
453224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
454224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DRM_MODE_PAGE_FLIP_EVENT 0x01
455e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_PAGE_FLIP_ASYNC 0x02
456e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT|DRM_MODE_PAGE_FLIP_ASYNC)
457224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
458224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
459224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Request a page flip on the specified crtc.
460224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
461224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This ioctl will ask KMS to schedule a page flip for the specified
462224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * crtc.  Once any pending rendering targeting the specified fb (as of
463224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * ioctl time) has completed, the crtc will be reprogrammed to display
464224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * that fb after the next vertical refresh.  The ioctl returns
465224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * immediately, but subsequent rendering to the current fb will block
466224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * in the execbuffer ioctl until the page flip happens.  If a page
467224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * flip is already pending as the ioctl is called, EBUSY will be
468224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * returned.
469224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
470e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * Flag DRM_MODE_PAGE_FLIP_EVENT requests that drm sends back a vblank
471e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * event (see drm.h: struct drm_event_vblank) when the page flip is
472e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * done.  The user_data field passed in with this ioctl will be
473e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * returned as the user_data field in the vblank event struct.
474e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris *
475e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * Flag DRM_MODE_PAGE_FLIP_ASYNC requests that the flip happen
476e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * 'as soon as possible', meaning that it not delay waiting for vblank.
477e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * This may cause tearing on the screen.
478224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
479224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * The reserved field must be zero until we figure out something
480224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * clever to use it for.
481224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
482224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
483224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_crtc_page_flip {
484224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 crtc_id;
485224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 fb_id;
486224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 flags;
487224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 reserved;
488224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 user_data;
489224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
490224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
491224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* create a dumb scanout buffer */
492224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_create_dumb {
493224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t height;
494224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t width;
495224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t bpp;
496224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t flags;
497224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* handle, pitch, size will be returned */
498224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t handle;
499224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t pitch;
500224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t size;
501224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
502224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
503224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* set up for mmap of a dumb scanout buffer */
504224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_map_dumb {
505224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/** Handle for the object being mapped. */
506224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 handle;
507224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 pad;
508224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/**
509224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * Fake offset to use for subsequent mmap call
510224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *
511224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * This is a fixed-size type for 32/64 compatibility.
512224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 */
513224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 offset;
514224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
515224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
516224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct drm_mode_destroy_dumb {
517224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t handle;
518224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
519224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
520224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
521