drm_mode.h 10.1 KB
Newer Older
Dave Airlie's avatar
Dave Airlie committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*
 * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
 * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com>
 * Copyright (c) 2008 Red Hat Inc.
 * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
 * Copyright (c) 2007-2008 Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 */

#ifndef _DRM_MODE_H
#define _DRM_MODE_H

30
31
32
33
#define DRM_DISPLAY_INFO_LEN	32
#define DRM_CONNECTOR_NAME_LEN	32
#define DRM_DISPLAY_MODE_LEN	32
#define DRM_PROP_NAME_LEN	32
Dave Airlie's avatar
Dave Airlie committed
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

#define DRM_MODE_TYPE_BUILTIN	(1<<0)
#define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN)
#define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN)
#define DRM_MODE_TYPE_PREFERRED	(1<<3)
#define DRM_MODE_TYPE_DEFAULT	(1<<4)
#define DRM_MODE_TYPE_USERDEF	(1<<5)
#define DRM_MODE_TYPE_DRIVER	(1<<6)

/* Video mode flags */
/* bit compatible with the xorg definitions. */
#define DRM_MODE_FLAG_PHSYNC	(1<<0)
#define DRM_MODE_FLAG_NHSYNC	(1<<1)
#define DRM_MODE_FLAG_PVSYNC	(1<<2)
#define DRM_MODE_FLAG_NVSYNC	(1<<3)
#define DRM_MODE_FLAG_INTERLACE	(1<<4)
#define DRM_MODE_FLAG_DBLSCAN	(1<<5)
#define DRM_MODE_FLAG_CSYNC	(1<<6)
#define DRM_MODE_FLAG_PCSYNC	(1<<7)
#define DRM_MODE_FLAG_NCSYNC	(1<<8)
#define DRM_MODE_FLAG_HSKEW	(1<<9) /* hskew provided */
#define DRM_MODE_FLAG_BCAST	(1<<10)
#define DRM_MODE_FLAG_PIXMUX	(1<<11)
#define DRM_MODE_FLAG_DBLCLK	(1<<12)
#define DRM_MODE_FLAG_CLKDIV2	(1<<13)

/* DPMS flags */
/* bit compatible with the xorg definitions. */
62
63
64
65
#define DRM_MODE_DPMS_ON	0
#define DRM_MODE_DPMS_STANDBY	1
#define DRM_MODE_DPMS_SUSPEND	2
#define DRM_MODE_DPMS_OFF	3
Dave Airlie's avatar
Dave Airlie committed
66
67

/* Scaling mode options */
68
69
70
71
72
#define DRM_MODE_SCALE_NONE		0 /* Unmodified timing (display or
					     software can still scale) */
#define DRM_MODE_SCALE_FULLSCREEN	1 /* Full screen, ignore aspect */
#define DRM_MODE_SCALE_CENTER		2 /* Centered, no scaling */
#define DRM_MODE_SCALE_ASPECT		3 /* Full screen, preserve aspect */
Dave Airlie's avatar
Dave Airlie committed
73
74

/* Dithering mode options */
75
76
#define DRM_MODE_DITHERING_OFF	0
#define DRM_MODE_DITHERING_ON	1
Ben Skeggs's avatar
Ben Skeggs committed
77
#define DRM_MODE_DITHERING_AUTO 2
Dave Airlie's avatar
Dave Airlie committed
78

79
80
81
82
83
/* Dirty info options */
#define DRM_MODE_DIRTY_OFF      0
#define DRM_MODE_DIRTY_ON       1
#define DRM_MODE_DIRTY_ANNOTATE 2

Dave Airlie's avatar
Dave Airlie committed
84
struct drm_mode_modeinfo {
85
86
87
	__u32 clock;
	__u16 hdisplay, hsync_start, hsync_end, htotal, hskew;
	__u16 vdisplay, vsync_start, vsync_end, vtotal, vscan;
Dave Airlie's avatar
Dave Airlie committed
88

89
	__u32 vrefresh;
Dave Airlie's avatar
Dave Airlie committed
90

91
92
	__u32 flags;
	__u32 type;
Dave Airlie's avatar
Dave Airlie committed
93
94
95
96
	char name[DRM_DISPLAY_MODE_LEN];
};

struct drm_mode_card_res {
97
98
99
100
101
102
103
104
105
106
	__u64 fb_id_ptr;
	__u64 crtc_id_ptr;
	__u64 connector_id_ptr;
	__u64 encoder_id_ptr;
	__u32 count_fbs;
	__u32 count_crtcs;
	__u32 count_connectors;
	__u32 count_encoders;
	__u32 min_width, max_width;
	__u32 min_height, max_height;
Dave Airlie's avatar
Dave Airlie committed
107
108
109
};

struct drm_mode_crtc {
110
111
	__u64 set_connectors_ptr;
	__u32 count_connectors;
Dave Airlie's avatar
Dave Airlie committed
112

113
114
	__u32 crtc_id; /**< Id */
	__u32 fb_id; /**< Id of framebuffer */
Dave Airlie's avatar
Dave Airlie committed
115

116
	__u32 x, y; /**< Position on the frameuffer */
Dave Airlie's avatar
Dave Airlie committed
117

118
119
	__u32 gamma_size;
	__u32 mode_valid;
Dave Airlie's avatar
Dave Airlie committed
120
121
122
	struct drm_mode_modeinfo mode;
};

123
124
125
126
127
128
#define DRM_MODE_ENCODER_NONE	 0
#define DRM_MODE_ENCODER_DAC	 1
#define DRM_MODE_ENCODER_TMDS	 2
#define DRM_MODE_ENCODER_LVDS	 3
#define DRM_MODE_ENCODER_TVDAC	 4
#define DRM_MODE_ENCODER_VIRTUAL 5
Dave Airlie's avatar
Dave Airlie committed
129
130

struct drm_mode_get_encoder {
131
132
	__u32 encoder_id;
	__u32 encoder_type;
Dave Airlie's avatar
Dave Airlie committed
133

134
	__u32 crtc_id; /**< Id of crtc */
Dave Airlie's avatar
Dave Airlie committed
135

136
137
	__u32 possible_crtcs;
	__u32 possible_clones;
Dave Airlie's avatar
Dave Airlie committed
138
139
140
141
};

/* This is for connectors with multiple signal types. */
/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
142
143
144
145
146
147
148
#define DRM_MODE_SUBCONNECTOR_Automatic	0
#define DRM_MODE_SUBCONNECTOR_Unknown	0
#define DRM_MODE_SUBCONNECTOR_DVID	3
#define DRM_MODE_SUBCONNECTOR_DVIA	4
#define DRM_MODE_SUBCONNECTOR_Composite	5
#define DRM_MODE_SUBCONNECTOR_SVIDEO	6
#define DRM_MODE_SUBCONNECTOR_Component	8
149
#define DRM_MODE_SUBCONNECTOR_SCART	9
150
151
152
153
154
155
156
157
158
159
160
161
162
163

#define DRM_MODE_CONNECTOR_Unknown	0
#define DRM_MODE_CONNECTOR_VGA		1
#define DRM_MODE_CONNECTOR_DVII		2
#define DRM_MODE_CONNECTOR_DVID		3
#define DRM_MODE_CONNECTOR_DVIA		4
#define DRM_MODE_CONNECTOR_Composite	5
#define DRM_MODE_CONNECTOR_SVIDEO	6
#define DRM_MODE_CONNECTOR_LVDS		7
#define DRM_MODE_CONNECTOR_Component	8
#define DRM_MODE_CONNECTOR_9PinDIN	9
#define DRM_MODE_CONNECTOR_DisplayPort	10
#define DRM_MODE_CONNECTOR_HDMIA	11
#define DRM_MODE_CONNECTOR_HDMIB	12
164
#define DRM_MODE_CONNECTOR_TV		13
Alex Deucher's avatar
Alex Deucher committed
165
#define DRM_MODE_CONNECTOR_eDP		14
166
#define DRM_MODE_CONNECTOR_VIRTUAL      15
Dave Airlie's avatar
Dave Airlie committed
167
168
169

struct drm_mode_get_connector {

170
171
172
173
	__u64 encoders_ptr;
	__u64 modes_ptr;
	__u64 props_ptr;
	__u64 prop_values_ptr;
Dave Airlie's avatar
Dave Airlie committed
174

175
176
177
	__u32 count_modes;
	__u32 count_props;
	__u32 count_encoders;
Dave Airlie's avatar
Dave Airlie committed
178

179
180
181
182
	__u32 encoder_id; /**< Current Encoder */
	__u32 connector_id; /**< Id */
	__u32 connector_type;
	__u32 connector_type_id;
Dave Airlie's avatar
Dave Airlie committed
183

184
185
186
	__u32 connection;
	__u32 mm_width, mm_height; /**< HxW in millimeters */
	__u32 subpixel;
Dave Airlie's avatar
Dave Airlie committed
187
188
};

189
190
191
192
193
#define DRM_MODE_PROP_PENDING	(1<<0)
#define DRM_MODE_PROP_RANGE	(1<<1)
#define DRM_MODE_PROP_IMMUTABLE	(1<<2)
#define DRM_MODE_PROP_ENUM	(1<<3) /* enumerated type with text strings */
#define DRM_MODE_PROP_BLOB	(1<<4)
Dave Airlie's avatar
Dave Airlie committed
194
195

struct drm_mode_property_enum {
196
	__u64 value;
197
	char name[DRM_PROP_NAME_LEN];
Dave Airlie's avatar
Dave Airlie committed
198
199
200
};

struct drm_mode_get_property {
201
202
	__u64 values_ptr; /* values and blob lengths */
	__u64 enum_blob_ptr; /* enum and blob id ptrs */
Dave Airlie's avatar
Dave Airlie committed
203

204
205
	__u32 prop_id;
	__u32 flags;
206
	char name[DRM_PROP_NAME_LEN];
Dave Airlie's avatar
Dave Airlie committed
207

208
209
	__u32 count_values;
	__u32 count_enum_blobs;
Dave Airlie's avatar
Dave Airlie committed
210
211
212
};

struct drm_mode_connector_set_property {
213
214
215
	__u64 value;
	__u32 prop_id;
	__u32 connector_id;
Dave Airlie's avatar
Dave Airlie committed
216
217
218
};

struct drm_mode_get_blob {
219
220
221
	__u32 blob_id;
	__u32 length;
	__u64 data;
Dave Airlie's avatar
Dave Airlie committed
222
223
224
};

struct drm_mode_fb_cmd {
225
226
227
228
229
	__u32 fb_id;
	__u32 width, height;
	__u32 pitch;
	__u32 bpp;
	__u32 depth;
230
	/* driver specific handle */
231
	__u32 handle;
Dave Airlie's avatar
Dave Airlie committed
232
233
};

234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
#define DRM_MODE_FB_DIRTY_FLAGS         0x03

/*
 * Mark a region of a framebuffer as dirty.
 *
 * Some hardware does not automatically update display contents
 * as a hardware or software draw to a framebuffer. This ioctl
 * allows userspace to tell the kernel and the hardware what
 * regions of the framebuffer have changed.
 *
 * The kernel or hardware is free to update more then just the
 * region specified by the clip rects. The kernel or hardware
 * may also delay and/or coalesce several calls to dirty into a
 * single update.
 *
 * Userspace may annotate the updates, the annotates are a
 * promise made by the caller that the change is either a copy
 * of pixels or a fill of a single color in the region specified.
 *
 * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
 * the number of updated regions are half of num_clips given,
 * where the clip rects are paired in src and dst. The width and
 * height of each one of the pairs must match.
 *
 * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
 * promises that the region specified of the clip rects is filled
 * completely with a single color as given in the color argument.
 */

struct drm_mode_fb_dirty_cmd {
	__u32 fb_id;
	__u32 flags;
	__u32 color;
	__u32 num_clips;
	__u64 clips_ptr;
};

Dave Airlie's avatar
Dave Airlie committed
273
struct drm_mode_mode_cmd {
274
	__u32 connector_id;
Dave Airlie's avatar
Dave Airlie committed
275
276
277
	struct drm_mode_modeinfo mode;
};

278
279
#define DRM_MODE_CURSOR_BO	(1<<0)
#define DRM_MODE_CURSOR_MOVE	(1<<1)
Dave Airlie's avatar
Dave Airlie committed
280
281

/*
Lucas De Marchi's avatar
Lucas De Marchi committed
282
 * depending on the value in flags different members are used.
Dave Airlie's avatar
Dave Airlie committed
283
284
285
286
287
288
289
290
291
292
293
294
295
 *
 * CURSOR_BO uses
 *    crtc
 *    width
 *    height
 *    handle - if 0 turns the cursor of
 *
 * CURSOR_MOVE uses
 *    crtc
 *    x
 *    y
 */
struct drm_mode_cursor {
296
297
298
299
300
301
	__u32 flags;
	__u32 crtc_id;
	__s32 x;
	__s32 y;
	__u32 width;
	__u32 height;
302
	/* driver specific handle */
303
	__u32 handle;
Dave Airlie's avatar
Dave Airlie committed
304
305
306
};

struct drm_mode_crtc_lut {
307
308
	__u32 crtc_id;
	__u32 gamma_size;
Dave Airlie's avatar
Dave Airlie committed
309
310

	/* pointers to arrays */
311
312
313
	__u64 red;
	__u64 green;
	__u64 blue;
Dave Airlie's avatar
Dave Airlie committed
314
315
};

316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
#define DRM_MODE_PAGE_FLIP_EVENT 0x01
#define DRM_MODE_PAGE_FLIP_FLAGS DRM_MODE_PAGE_FLIP_EVENT

/*
 * Request a page flip on the specified crtc.
 *
 * This ioctl will ask KMS to schedule a page flip for the specified
 * crtc.  Once any pending rendering targeting the specified fb (as of
 * ioctl time) has completed, the crtc will be reprogrammed to display
 * that fb after the next vertical refresh.  The ioctl returns
 * immediately, but subsequent rendering to the current fb will block
 * in the execbuffer ioctl until the page flip happens.  If a page
 * flip is already pending as the ioctl is called, EBUSY will be
 * returned.
 *
 * The ioctl supports one flag, DRM_MODE_PAGE_FLIP_EVENT, which will
 * request that drm sends back a vblank event (see drm.h: struct
 * drm_event_vblank) when the page flip is done.  The user_data field
 * passed in with this ioctl will be returned as the user_data field
 * in the vblank event struct.
 *
 * The reserved field must be zero until we figure out something
 * clever to use it for.
 */

struct drm_mode_crtc_page_flip {
	__u32 crtc_id;
	__u32 fb_id;
	__u32 flags;
	__u32 reserved;
	__u64 user_data;
};

349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
/* create a dumb scanout buffer */
struct drm_mode_create_dumb {
	uint32_t height;
	uint32_t width;
	uint32_t bpp;
	uint32_t flags;
	/* handle, pitch, size will be returned */
	uint32_t handle;
	uint32_t pitch;
	uint64_t size;
};

/* set up for mmap of a dumb scanout buffer */
struct drm_mode_map_dumb {
	/** Handle for the object being mapped. */
	__u32 handle;
	__u32 pad;
	/**
	 * Fake offset to use for subsequent mmap call
	 *
	 * This is a fixed-size type for 32/64 compatibility.
	 */
	__u64 offset;
};

struct drm_mode_destroy_dumb {
	uint32_t handle;
};

Dave Airlie's avatar
Dave Airlie committed
378
#endif