Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5368 serge 1
/*
2
 * \file xf86drmMode.h
3
 * Header for DRM modesetting interface.
4
 *
5
 * \author Jakob Bornecrantz 
6
 *
7
 * \par Acknowledgements:
8
 * Feb 2007, Dave Airlie 
9
 */
10
 
11
/*
12
 * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas.
13
 * Copyright (c) 2007-2008 Dave Airlie 
14
 * Copyright (c) 2007-2008 Jakob Bornecrantz 
15
 *
16
 * Permission is hereby granted, free of charge, to any person obtaining a
17
 * copy of this software and associated documentation files (the "Software"),
18
 * to deal in the Software without restriction, including without limitation
19
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
20
 * and/or sell copies of the Software, and to permit persons to whom the
21
 * Software is furnished to do so, subject to the following conditions:
22
 *
23
 * The above copyright notice and this permission notice shall be included in
24
 * all copies or substantial portions of the Software.
25
 *
26
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
31
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
32
 * IN THE SOFTWARE.
33
 *
34
 */
35
 
36
#ifndef _XF86DRMMODE_H_
37
#define _XF86DRMMODE_H_
38
 
39
#if defined(__cplusplus) || defined(c_plusplus)
40
extern "C" {
41
#endif
42
 
43
#include 
44
 
45
/*
46
 * This is the interface for modesetting for drm.
47
 *
48
 * In order to use this interface you must include either  or another
49
 * header defining uint32_t, int32_t and uint16_t.
50
 *
51
 * It aims to provide a randr1.2 compatible interface for modesettings in the
52
 * kernel, the interface is also ment to be used by libraries like EGL.
53
 *
54
 * More information can be found in randrproto.txt which can be found here:
55
 * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git
56
 *
57
 * There are some major diffrences to be noted. Unlike the randr1.2 proto you
58
 * need to create the memory object of the framebuffer yourself with the ttm
59
 * buffer object interface. This object needs to be pinned.
60
 */
61
 
62
/*
63
 * If we pickup an old version of drm.h which doesn't include drm_mode.h
64
 * we should redefine defines. This is so that builds doesn't breaks with
65
 * new libdrm on old kernels.
66
 */
67
#ifndef _DRM_MODE_H
68
 
69
#define DRM_DISPLAY_INFO_LEN    32
70
#define DRM_CONNECTOR_NAME_LEN  32
71
#define DRM_DISPLAY_MODE_LEN    32
72
#define DRM_PROP_NAME_LEN       32
73
 
74
#define DRM_MODE_TYPE_BUILTIN   (1<<0)
75
#define DRM_MODE_TYPE_CLOCK_C   ((1<<1) | DRM_MODE_TYPE_BUILTIN)
76
#define DRM_MODE_TYPE_CRTC_C    ((1<<2) | DRM_MODE_TYPE_BUILTIN)
77
#define DRM_MODE_TYPE_PREFERRED (1<<3)
78
#define DRM_MODE_TYPE_DEFAULT   (1<<4)
79
#define DRM_MODE_TYPE_USERDEF   (1<<5)
80
#define DRM_MODE_TYPE_DRIVER    (1<<6)
81
 
82
/* Video mode flags */
83
/* bit compatible with the xorg definitions. */
84
#define DRM_MODE_FLAG_PHSYNC			(1<<0)
85
#define DRM_MODE_FLAG_NHSYNC			(1<<1)
86
#define DRM_MODE_FLAG_PVSYNC			(1<<2)
87
#define DRM_MODE_FLAG_NVSYNC			(1<<3)
88
#define DRM_MODE_FLAG_INTERLACE			(1<<4)
89
#define DRM_MODE_FLAG_DBLSCAN			(1<<5)
90
#define DRM_MODE_FLAG_CSYNC			(1<<6)
91
#define DRM_MODE_FLAG_PCSYNC			(1<<7)
92
#define DRM_MODE_FLAG_NCSYNC			(1<<8)
93
#define DRM_MODE_FLAG_HSKEW			(1<<9) /* hskew provided */
94
#define DRM_MODE_FLAG_BCAST			(1<<10)
95
#define DRM_MODE_FLAG_PIXMUX			(1<<11)
96
#define DRM_MODE_FLAG_DBLCLK			(1<<12)
97
#define DRM_MODE_FLAG_CLKDIV2			(1<<13)
98
#define DRM_MODE_FLAG_3D_MASK			(0x1f<<14)
99
#define  DRM_MODE_FLAG_3D_NONE			(0<<14)
100
#define  DRM_MODE_FLAG_3D_FRAME_PACKING		(1<<14)
101
#define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE	(2<<14)
102
#define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE	(3<<14)
103
#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL	(4<<14)
104
#define  DRM_MODE_FLAG_3D_L_DEPTH		(5<<14)
105
#define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH	(6<<14)
106
#define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)
107
#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14)
108
 
109
/* DPMS flags */
110
/* bit compatible with the xorg definitions. */
111
#define DRM_MODE_DPMS_ON        0
112
#define DRM_MODE_DPMS_STANDBY   1
113
#define DRM_MODE_DPMS_SUSPEND   2
114
#define DRM_MODE_DPMS_OFF       3
115
 
116
/* Scaling mode options */
117
#define DRM_MODE_SCALE_NON_GPU          0
118
#define DRM_MODE_SCALE_FULLSCREEN       1
119
#define DRM_MODE_SCALE_NO_SCALE         2
120
#define DRM_MODE_SCALE_ASPECT           3
121
 
122
/* Dithering mode options */
123
#define DRM_MODE_DITHERING_OFF  0
124
#define DRM_MODE_DITHERING_ON   1
125
 
126
#define DRM_MODE_ENCODER_NONE   0
127
#define DRM_MODE_ENCODER_DAC    1
128
#define DRM_MODE_ENCODER_TMDS   2
129
#define DRM_MODE_ENCODER_LVDS   3
130
#define DRM_MODE_ENCODER_TVDAC  4
131
#define DRM_MODE_ENCODER_VIRTUAL 5
132
#define DRM_MODE_ENCODER_DSI	6
133
 
134
#define DRM_MODE_SUBCONNECTOR_Automatic 0
135
#define DRM_MODE_SUBCONNECTOR_Unknown   0
136
#define DRM_MODE_SUBCONNECTOR_DVID      3
137
#define DRM_MODE_SUBCONNECTOR_DVIA      4
138
#define DRM_MODE_SUBCONNECTOR_Composite 5
139
#define DRM_MODE_SUBCONNECTOR_SVIDEO    6
140
#define DRM_MODE_SUBCONNECTOR_Component 8
141
#define DRM_MODE_SUBCONNECTOR_SCART     9
142
 
143
#define DRM_MODE_CONNECTOR_Unknown      0
144
#define DRM_MODE_CONNECTOR_VGA          1
145
#define DRM_MODE_CONNECTOR_DVII         2
146
#define DRM_MODE_CONNECTOR_DVID         3
147
#define DRM_MODE_CONNECTOR_DVIA         4
148
#define DRM_MODE_CONNECTOR_Composite    5
149
#define DRM_MODE_CONNECTOR_SVIDEO       6
150
#define DRM_MODE_CONNECTOR_LVDS         7
151
#define DRM_MODE_CONNECTOR_Component    8
152
#define DRM_MODE_CONNECTOR_9PinDIN      9
153
#define DRM_MODE_CONNECTOR_DisplayPort  10
154
#define DRM_MODE_CONNECTOR_HDMIA        11
155
#define DRM_MODE_CONNECTOR_HDMIB        12
156
#define DRM_MODE_CONNECTOR_TV		13
157
#define DRM_MODE_CONNECTOR_eDP		14
158
#define DRM_MODE_CONNECTOR_VIRTUAL      15
159
#define DRM_MODE_CONNECTOR_DSI          16
160
 
161
#define DRM_MODE_PROP_PENDING   (1<<0)
162
#define DRM_MODE_PROP_RANGE     (1<<1)
163
#define DRM_MODE_PROP_IMMUTABLE (1<<2)
164
#define DRM_MODE_PROP_ENUM      (1<<3) /* enumerated type with text strings */
165
#define DRM_MODE_PROP_BLOB      (1<<4)
166
 
167
#define DRM_MODE_CURSOR_BO      (1<<0)
168
#define DRM_MODE_CURSOR_MOVE    (1<<1)
169
 
170
#endif /* _DRM_MODE_H */
171
 
172
 
173
/*
174
 * Feature defines
175
 *
176
 * Just because these are defined doesn't mean that the kernel
177
 * can do that feature, its just for new code vs old libdrm.
178
 */
179
#define DRM_MODE_FEATURE_KMS		1
180
#define DRM_MODE_FEATURE_DIRTYFB	1
181
 
182
 
183
typedef struct _drmModeRes {
184
 
185
	int count_fbs;
186
	uint32_t *fbs;
187
 
188
	int count_crtcs;
189
	uint32_t *crtcs;
190
 
191
	int count_connectors;
192
	uint32_t *connectors;
193
 
194
	int count_encoders;
195
	uint32_t *encoders;
196
 
197
	uint32_t min_width, max_width;
198
	uint32_t min_height, max_height;
199
} drmModeRes, *drmModeResPtr;
200
 
201
typedef struct _drmModeModeInfo {
202
	uint32_t clock;
203
	uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew;
204
	uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan;
205
 
206
	uint32_t vrefresh;
207
 
208
	uint32_t flags;
209
	uint32_t type;
210
	char name[DRM_DISPLAY_MODE_LEN];
211
} drmModeModeInfo, *drmModeModeInfoPtr;
212
 
213
typedef struct _drmModeFB {
214
	uint32_t fb_id;
215
	uint32_t width, height;
216
	uint32_t pitch;
217
	uint32_t bpp;
218
	uint32_t depth;
219
	/* driver specific handle */
220
	uint32_t handle;
221
} drmModeFB, *drmModeFBPtr;
222
 
223
typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr;
224
 
225
typedef struct _drmModePropertyBlob {
226
	uint32_t id;
227
	uint32_t length;
228
	void *data;
229
} drmModePropertyBlobRes, *drmModePropertyBlobPtr;
230
 
231
typedef struct _drmModeProperty {
232
	uint32_t prop_id;
233
	uint32_t flags;
234
	char name[DRM_PROP_NAME_LEN];
235
	int count_values;
236
	uint64_t *values; /* store the blob lengths */
237
	int count_enums;
238
	struct drm_mode_property_enum *enums;
239
	int count_blobs;
240
	uint32_t *blob_ids; /* store the blob IDs */
241
} drmModePropertyRes, *drmModePropertyPtr;
242
 
243
typedef struct _drmModeCrtc {
244
	uint32_t crtc_id;
245
	uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */
246
 
247
	uint32_t x, y; /**< Position on the framebuffer */
248
	uint32_t width, height;
249
	int mode_valid;
250
	drmModeModeInfo mode;
251
 
252
	int gamma_size; /**< Number of gamma stops */
253
 
254
} drmModeCrtc, *drmModeCrtcPtr;
255
 
256
typedef struct _drmModeEncoder {
257
	uint32_t encoder_id;
258
	uint32_t encoder_type;
259
	uint32_t crtc_id;
260
	uint32_t possible_crtcs;
261
	uint32_t possible_clones;
262
} drmModeEncoder, *drmModeEncoderPtr;
263
 
264
typedef enum {
265
	DRM_MODE_CONNECTED         = 1,
266
	DRM_MODE_DISCONNECTED      = 2,
267
	DRM_MODE_UNKNOWNCONNECTION = 3
268
} drmModeConnection;
269
 
270
typedef enum {
271
	DRM_MODE_SUBPIXEL_UNKNOWN        = 1,
272
	DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2,
273
	DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3,
274
	DRM_MODE_SUBPIXEL_VERTICAL_RGB   = 4,
275
	DRM_MODE_SUBPIXEL_VERTICAL_BGR   = 5,
276
	DRM_MODE_SUBPIXEL_NONE           = 6
277
} drmModeSubPixel;
278
 
279
typedef struct _drmModeConnector {
280
	uint32_t connector_id;
281
	uint32_t encoder_id; /**< Encoder currently connected to */
282
	uint32_t connector_type;
283
	uint32_t connector_type_id;
284
	drmModeConnection connection;
285
	uint32_t mmWidth, mmHeight; /**< HxW in millimeters */
286
	drmModeSubPixel subpixel;
287
 
288
	int count_modes;
289
	drmModeModeInfoPtr modes;
290
 
291
	int count_props;
292
	uint32_t *props; /**< List of property ids */
293
	uint64_t *prop_values; /**< List of property values */
294
 
295
	int count_encoders;
296
	uint32_t *encoders; /**< List of encoder ids */
297
} drmModeConnector, *drmModeConnectorPtr;
298
 
299
#define DRM_PLANE_TYPE_OVERLAY 0
300
#define DRM_PLANE_TYPE_PRIMARY 1
301
#define DRM_PLANE_TYPE_CURSOR  2
302
 
303
typedef struct _drmModeObjectProperties {
304
	uint32_t count_props;
305
	uint32_t *props;
306
	uint64_t *prop_values;
307
} drmModeObjectProperties, *drmModeObjectPropertiesPtr;
308
 
309
typedef struct _drmModePlane {
310
	uint32_t count_formats;
311
	uint32_t *formats;
312
	uint32_t plane_id;
313
 
314
	uint32_t crtc_id;
315
	uint32_t fb_id;
316
 
317
	uint32_t crtc_x, crtc_y;
318
	uint32_t x, y;
319
 
320
	uint32_t possible_crtcs;
321
	uint32_t gamma_size;
322
} drmModePlane, *drmModePlanePtr;
323
 
324
typedef struct _drmModePlaneRes {
325
	uint32_t count_planes;
326
	uint32_t *planes;
327
} drmModePlaneRes, *drmModePlaneResPtr;
328
 
329
extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr );
330
extern void drmModeFreeResources( drmModeResPtr ptr );
331
extern void drmModeFreeFB( drmModeFBPtr ptr );
332
extern void drmModeFreeCrtc( drmModeCrtcPtr ptr );
333
extern void drmModeFreeConnector( drmModeConnectorPtr ptr );
334
extern void drmModeFreeEncoder( drmModeEncoderPtr ptr );
335
extern void drmModeFreePlane( drmModePlanePtr ptr );
336
extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr);
337
 
338
/**
339
 * Retrives all of the resources associated with a card.
340
 */
341
extern drmModeResPtr drmModeGetResources(int fd);
342
 
343
/*
344
 * FrameBuffer manipulation.
345
 */
346
 
347
/**
348
 * Retrive information about framebuffer bufferId
349
 */
350
extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId);
351
 
352
/**
353
 * Creates a new framebuffer with an buffer object as its scanout buffer.
354
 */
355
extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth,
356
			uint8_t bpp, uint32_t pitch, uint32_t bo_handle,
357
			uint32_t *buf_id);
358
/* ...with a specific pixel format */
359
extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
360
			 uint32_t pixel_format, uint32_t bo_handles[4],
361
			 uint32_t pitches[4], uint32_t offsets[4],
362
			 uint32_t *buf_id, uint32_t flags);
363
/**
364
 * Destroies the given framebuffer.
365
 */
366
extern int drmModeRmFB(int fd, uint32_t bufferId);
367
 
368
/**
369
 * Mark a region of a framebuffer as dirty.
370
 */
371
extern int drmModeDirtyFB(int fd, uint32_t bufferId,
372
			  drmModeClipPtr clips, uint32_t num_clips);
373
 
374
 
375
/*
376
 * Crtc functions
377
 */
378
 
379
/**
380
 * Retrive information about the ctrt crtcId
381
 */
382
extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId);
383
 
384
/**
385
 * Set the mode on a crtc crtcId with the given mode modeId.
386
 */
387
int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId,
388
                   uint32_t x, uint32_t y, uint32_t *connectors, int count,
389
		   drmModeModeInfoPtr mode);
390
 
391
/*
392
 * Cursor functions
393
 */
394
 
395
/**
396
 * Set the cursor on crtc
397
 */
398
int drmModeSetCursor(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height);
399
 
400
int drmModeSetCursor2(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height, int32_t hot_x, int32_t hot_y);
401
/**
402
 * Move the cursor on crtc
403
 */
404
int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y);
405
 
406
/**
407
 * Encoder functions
408
 */
409
drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id);
410
 
411
/*
412
 * Connector manipulation
413
 */
414
 
415
/**
416
 * Retrive information about the connector connectorId.
417
 */
418
extern drmModeConnectorPtr drmModeGetConnector(int fd,
419
		uint32_t connectorId);
420
 
421
/**
422
 * Attaches the given mode to an connector.
423
 */
424
extern int drmModeAttachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info);
425
 
426
/**
427
 * Detaches a mode from the connector
428
 * must be unused, by the given mode.
429
 */
430
extern int drmModeDetachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info);
431
 
432
extern drmModePropertyPtr drmModeGetProperty(int fd, uint32_t propertyId);
433
extern void drmModeFreeProperty(drmModePropertyPtr ptr);
434
 
435
extern drmModePropertyBlobPtr drmModeGetPropertyBlob(int fd, uint32_t blob_id);
436
extern void drmModeFreePropertyBlob(drmModePropertyBlobPtr ptr);
437
extern int drmModeConnectorSetProperty(int fd, uint32_t connector_id, uint32_t property_id,
438
				    uint64_t value);
439
extern int drmCheckModesettingSupported(const char *busid);
440
 
441
extern int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size,
442
			       uint16_t *red, uint16_t *green, uint16_t *blue);
443
extern int drmModeCrtcGetGamma(int fd, uint32_t crtc_id, uint32_t size,
444
			       uint16_t *red, uint16_t *green, uint16_t *blue);
445
extern int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id,
446
			   uint32_t flags, void *user_data);
447
 
448
extern drmModePlaneResPtr drmModeGetPlaneResources(int fd);
449
extern drmModePlanePtr drmModeGetPlane(int fd, uint32_t plane_id);
450
extern int drmModeSetPlane(int fd, uint32_t plane_id, uint32_t crtc_id,
451
			   uint32_t fb_id, uint32_t flags,
452
			   int32_t crtc_x, int32_t crtc_y,
453
			   uint32_t crtc_w, uint32_t crtc_h,
454
			   uint32_t src_x, uint32_t src_y,
455
			   uint32_t src_w, uint32_t src_h);
456
 
457
extern drmModeObjectPropertiesPtr drmModeObjectGetProperties(int fd,
458
							uint32_t object_id,
459
							uint32_t object_type);
460
extern void drmModeFreeObjectProperties(drmModeObjectPropertiesPtr ptr);
461
extern int drmModeObjectSetProperty(int fd, uint32_t object_id,
462
				    uint32_t object_type, uint32_t property_id,
463
				    uint64_t value);
464
 
465
#if defined(__cplusplus) || defined(c_plusplus)
466
}
467
#endif
468
 
469
#endif