~ubuntu-branches/ubuntu/maverick/libdrm/maverick-proposed

« back to all changes in this revision

Viewing changes to libdrm/xf86drmMode.h

  • Committer: Bazaar Package Importer
  • Author(s): Timo Aaltonen
  • Date: 2010-01-09 00:00:29 UTC
  • mfrom: (1.3.3 upstream)
  • mto: (2.2.9 experimental)
  • mto: This revision was merged to the branch mainline in revision 39.
  • Revision ID: james.westby@ubuntu.com-20100109000029-yhmol07llcxuzk0c
Tags: upstream-2.4.17
ImportĀ upstreamĀ versionĀ 2.4.17

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * \file xf86drmMode.h
3
 
 * Header for DRM modesetting interface.
4
 
 *
5
 
 * \author Jakob Bornecrantz <wallbraker@gmail.com>
6
 
 *
7
 
 * \par Acknowledgements:
8
 
 * Feb 2007, Dave Airlie <airlied@linux.ie>
9
 
 */
10
 
 
11
 
/*
12
 
 * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas.
13
 
 * Copyright (c) 2007-2008 Dave Airlie <airlied@linux.ie>
14
 
 * Copyright (c) 2007-2008 Jakob Bornecrantz <wallbraker@gmail.com>
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
 
#include <drm.h>
37
 
 
38
 
/*
39
 
 * This is the interface for modesetting for drm.
40
 
 *
41
 
 * In order to use this interface you must include either <stdint.h> or another
42
 
 * header defining uint32_t, int32_t and uint16_t.
43
 
 *
44
 
 * It aims to provide a randr1.2 compatible interface for modesettings in the
45
 
 * kernel, the interface is also ment to be used by libraries like EGL.
46
 
 *
47
 
 * More information can be found in randrproto.txt which can be found here:
48
 
 * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git
49
 
 *
50
 
 * There are some major diffrences to be noted. Unlike the randr1.2 proto you
51
 
 * need to create the memory object of the framebuffer yourself with the ttm
52
 
 * buffer object interface. This object needs to be pinned.
53
 
 */
54
 
 
55
 
/*
56
 
 * If we pickup an old version of drm.h which doesn't include drm_mode.h
57
 
 * we should redefine defines. This is so that builds doesn't breaks with
58
 
 * new libdrm on old kernels.
59
 
 */
60
 
#ifndef _DRM_MODE_H
61
 
 
62
 
#define DRM_DISPLAY_INFO_LEN    32
63
 
#define DRM_CONNECTOR_NAME_LEN  32
64
 
#define DRM_DISPLAY_MODE_LEN    32
65
 
#define DRM_PROP_NAME_LEN       32
66
 
 
67
 
#define DRM_MODE_TYPE_BUILTIN   (1<<0)
68
 
#define DRM_MODE_TYPE_CLOCK_C   ((1<<1) | DRM_MODE_TYPE_BUILTIN)
69
 
#define DRM_MODE_TYPE_CRTC_C    ((1<<2) | DRM_MODE_TYPE_BUILTIN)
70
 
#define DRM_MODE_TYPE_PREFERRED (1<<3)
71
 
#define DRM_MODE_TYPE_DEFAULT   (1<<4)
72
 
#define DRM_MODE_TYPE_USERDEF   (1<<5)
73
 
#define DRM_MODE_TYPE_DRIVER    (1<<6)
74
 
 
75
 
/* Video mode flags */
76
 
/* bit compatible with the xorg definitions. */
77
 
#define DRM_MODE_FLAG_PHSYNC    (1<<0)
78
 
#define DRM_MODE_FLAG_NHSYNC    (1<<1)
79
 
#define DRM_MODE_FLAG_PVSYNC    (1<<2)
80
 
#define DRM_MODE_FLAG_NVSYNC    (1<<3)
81
 
#define DRM_MODE_FLAG_INTERLACE (1<<4)
82
 
#define DRM_MODE_FLAG_DBLSCAN   (1<<5)
83
 
#define DRM_MODE_FLAG_CSYNC     (1<<6)
84
 
#define DRM_MODE_FLAG_PCSYNC    (1<<7)
85
 
#define DRM_MODE_FLAG_NCSYNC    (1<<8)
86
 
#define DRM_MODE_FLAG_HSKEW     (1<<9) /* hskew provided */
87
 
#define DRM_MODE_FLAG_BCAST     (1<<10)
88
 
#define DRM_MODE_FLAG_PIXMUX    (1<<11)
89
 
#define DRM_MODE_FLAG_DBLCLK    (1<<12)
90
 
#define DRM_MODE_FLAG_CLKDIV2   (1<<13)
91
 
 
92
 
/* DPMS flags */
93
 
/* bit compatible with the xorg definitions. */
94
 
#define DRM_MODE_DPMS_ON        0
95
 
#define DRM_MODE_DPMS_STANDBY   1
96
 
#define DRM_MODE_DPMS_SUSPEND   2
97
 
#define DRM_MODE_DPMS_OFF       3
98
 
 
99
 
/* Scaling mode options */
100
 
#define DRM_MODE_SCALE_NON_GPU          0
101
 
#define DRM_MODE_SCALE_FULLSCREEN       1
102
 
#define DRM_MODE_SCALE_NO_SCALE         2
103
 
#define DRM_MODE_SCALE_ASPECT           3
104
 
 
105
 
/* Dithering mode options */
106
 
#define DRM_MODE_DITHERING_OFF  0
107
 
#define DRM_MODE_DITHERING_ON   1
108
 
 
109
 
#define DRM_MODE_ENCODER_NONE   0
110
 
#define DRM_MODE_ENCODER_DAC    1
111
 
#define DRM_MODE_ENCODER_TMDS   2
112
 
#define DRM_MODE_ENCODER_LVDS   3
113
 
#define DRM_MODE_ENCODER_TVDAC  4
114
 
 
115
 
#define DRM_MODE_SUBCONNECTOR_Automatic 0
116
 
#define DRM_MODE_SUBCONNECTOR_Unknown   0
117
 
#define DRM_MODE_SUBCONNECTOR_DVID      3
118
 
#define DRM_MODE_SUBCONNECTOR_DVIA      4
119
 
#define DRM_MODE_SUBCONNECTOR_Composite 5
120
 
#define DRM_MODE_SUBCONNECTOR_SVIDEO    6
121
 
#define DRM_MODE_SUBCONNECTOR_Component 8
122
 
 
123
 
#define DRM_MODE_CONNECTOR_Unknown      0
124
 
#define DRM_MODE_CONNECTOR_VGA          1
125
 
#define DRM_MODE_CONNECTOR_DVII         2
126
 
#define DRM_MODE_CONNECTOR_DVID         3
127
 
#define DRM_MODE_CONNECTOR_DVIA         4
128
 
#define DRM_MODE_CONNECTOR_Composite    5
129
 
#define DRM_MODE_CONNECTOR_SVIDEO       6
130
 
#define DRM_MODE_CONNECTOR_LVDS         7
131
 
#define DRM_MODE_CONNECTOR_Component    8
132
 
#define DRM_MODE_CONNECTOR_9PinDIN      9
133
 
#define DRM_MODE_CONNECTOR_DisplayPort  10
134
 
#define DRM_MODE_CONNECTOR_HDMIA        11
135
 
#define DRM_MODE_CONNECTOR_HDMIB        12
136
 
 
137
 
#define DRM_MODE_PROP_PENDING   (1<<0)
138
 
#define DRM_MODE_PROP_RANGE     (1<<1)
139
 
#define DRM_MODE_PROP_IMMUTABLE (1<<2)
140
 
#define DRM_MODE_PROP_ENUM      (1<<3) /* enumerated type with text strings */
141
 
#define DRM_MODE_PROP_BLOB      (1<<4)
142
 
 
143
 
#define DRM_MODE_CURSOR_BO      (1<<0)
144
 
#define DRM_MODE_CURSOR_MOVE    (1<<1)
145
 
 
146
 
#endif /* _DRM_MODE_H */
147
 
 
148
 
typedef struct _drmModeRes {
149
 
 
150
 
        int count_fbs;
151
 
        uint32_t *fbs;
152
 
 
153
 
        int count_crtcs;
154
 
        uint32_t *crtcs;
155
 
 
156
 
        int count_connectors;
157
 
        uint32_t *connectors;
158
 
 
159
 
        int count_encoders;
160
 
        uint32_t *encoders;
161
 
 
162
 
        uint32_t min_width, max_width;
163
 
        uint32_t min_height, max_height;
164
 
} drmModeRes, *drmModeResPtr;
165
 
 
166
 
typedef struct _drmModeModeInfo {
167
 
        uint32_t clock;
168
 
        uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew;
169
 
        uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan;
170
 
 
171
 
        uint32_t vrefresh; /* vertical refresh * 1000 */
172
 
 
173
 
        uint32_t flags;
174
 
        uint32_t type;
175
 
        char name[DRM_DISPLAY_MODE_LEN];
176
 
} drmModeModeInfo, *drmModeModeInfoPtr;
177
 
 
178
 
typedef struct _drmModeFB {
179
 
        uint32_t fb_id;
180
 
        uint32_t width, height;
181
 
        uint32_t pitch;
182
 
        uint32_t bpp;
183
 
        uint32_t depth;
184
 
        /* driver specific handle */
185
 
        uint32_t handle;
186
 
} drmModeFB, *drmModeFBPtr;
187
 
 
188
 
typedef struct _drmModePropertyBlob {
189
 
        uint32_t id;
190
 
        uint32_t length;
191
 
        void *data;
192
 
} drmModePropertyBlobRes, *drmModePropertyBlobPtr;
193
 
 
194
 
typedef struct _drmModeProperty {
195
 
        uint32_t prop_id;
196
 
        uint32_t flags;
197
 
        char name[DRM_PROP_NAME_LEN];
198
 
        int count_values;
199
 
        uint64_t *values; // store the blob lengths
200
 
        int count_enums;
201
 
        struct drm_mode_property_enum *enums;
202
 
        int count_blobs;
203
 
        uint32_t *blob_ids; // store the blob IDs
204
 
} drmModePropertyRes, *drmModePropertyPtr;
205
 
 
206
 
typedef struct _drmModeCrtc {
207
 
        uint32_t crtc_id;
208
 
        uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */
209
 
 
210
 
        uint32_t x, y; /**< Position on the framebuffer */
211
 
        uint32_t width, height;
212
 
        int mode_valid;
213
 
        drmModeModeInfo mode;
214
 
 
215
 
        int gamma_size; /**< Number of gamma stops */
216
 
 
217
 
} drmModeCrtc, *drmModeCrtcPtr;
218
 
 
219
 
typedef struct _drmModeEncoder {
220
 
        uint32_t encoder_id;
221
 
        uint32_t encoder_type;
222
 
        uint32_t crtc_id;
223
 
        uint32_t possible_crtcs;
224
 
        uint32_t possible_clones;
225
 
} drmModeEncoder, *drmModeEncoderPtr;
226
 
 
227
 
typedef enum {
228
 
        DRM_MODE_CONNECTED         = 1,
229
 
        DRM_MODE_DISCONNECTED      = 2,
230
 
        DRM_MODE_UNKNOWNCONNECTION = 3
231
 
} drmModeConnection;
232
 
 
233
 
typedef enum {
234
 
        DRM_MODE_SUBPIXEL_UNKNOWN        = 1,
235
 
        DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2,
236
 
        DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3,
237
 
        DRM_MODE_SUBPIXEL_VERTICAL_RGB   = 4,
238
 
        DRM_MODE_SUBPIXEL_VERTICAL_BGR   = 5,
239
 
        DRM_MODE_SUBPIXEL_NONE           = 6
240
 
} drmModeSubPixel;
241
 
 
242
 
typedef struct _drmModeConnector {
243
 
        uint32_t connector_id;
244
 
        uint32_t encoder_id; /**< Encoder currently connected to */
245
 
        uint32_t connector_type;
246
 
        uint32_t connector_type_id;
247
 
        drmModeConnection connection;
248
 
        uint32_t mmWidth, mmHeight; /**< HxW in millimeters */
249
 
        drmModeSubPixel subpixel;
250
 
 
251
 
        int count_modes;
252
 
        drmModeModeInfoPtr modes;
253
 
 
254
 
        int count_props;
255
 
        uint32_t *props; /**< List of property ids */
256
 
        uint64_t *prop_values; /**< List of property values */
257
 
 
258
 
        int count_encoders;
259
 
        uint32_t *encoders; /**< List of encoder ids */
260
 
} drmModeConnector, *drmModeConnectorPtr;
261
 
 
262
 
 
263
 
 
264
 
extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr );
265
 
extern void drmModeFreeResources( drmModeResPtr ptr );
266
 
extern void drmModeFreeFB( drmModeFBPtr ptr );
267
 
extern void drmModeFreeCrtc( drmModeCrtcPtr ptr );
268
 
extern void drmModeFreeConnector( drmModeConnectorPtr ptr );
269
 
extern void drmModeFreeEncoder( drmModeEncoderPtr ptr );
270
 
 
271
 
/**
272
 
 * Retrives all of the resources associated with a card.
273
 
 */
274
 
extern drmModeResPtr drmModeGetResources(int fd);
275
 
 
276
 
/*
277
 
 * FrameBuffer manipulation.
278
 
 */
279
 
 
280
 
/**
281
 
 * Retrive information about framebuffer bufferId
282
 
 */
283
 
extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId);
284
 
 
285
 
/**
286
 
 * Creates a new framebuffer with an buffer object as its scanout buffer.
287
 
 */
288
 
extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth,
289
 
                        uint8_t bpp, uint32_t pitch, uint32_t bo_handle,
290
 
                        uint32_t *buf_id);
291
 
/**
292
 
 * Destroies the given framebuffer.
293
 
 */
294
 
extern int drmModeRmFB(int fd, uint32_t bufferId);
295
 
 
296
 
/*
297
 
 * Crtc functions
298
 
 */
299
 
 
300
 
/**
301
 
 * Retrive information about the ctrt crtcId
302
 
 */
303
 
extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId);
304
 
 
305
 
/**
306
 
 * Set the mode on a crtc crtcId with the given mode modeId.
307
 
 */
308
 
int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId,
309
 
                   uint32_t x, uint32_t y, uint32_t *connectors, int count,
310
 
                   drmModeModeInfoPtr mode);
311
 
 
312
 
/*
313
 
 * Cursor functions
314
 
 */
315
 
 
316
 
/**
317
 
 * Set the cursor on crtc
318
 
 */
319
 
int drmModeSetCursor(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height);
320
 
 
321
 
/**
322
 
 * Move the cursor on crtc
323
 
 */
324
 
int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y);
325
 
 
326
 
/**
327
 
 * Encoder functions
328
 
 */
329
 
drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id);
330
 
 
331
 
/*
332
 
 * Connector manipulation
333
 
 */
334
 
 
335
 
/**
336
 
 * Retrive information about the connector connectorId.
337
 
 */
338
 
extern drmModeConnectorPtr drmModeGetConnector(int fd,
339
 
                uint32_t connectorId);
340
 
 
341
 
/**
342
 
 * Attaches the given mode to an connector.
343
 
 */
344
 
extern int drmModeAttachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info);
345
 
 
346
 
/**
347
 
 * Detaches a mode from the connector
348
 
 * must be unused, by the given mode.
349
 
 */
350
 
extern int drmModeDetachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info);
351
 
 
352
 
extern drmModePropertyPtr drmModeGetProperty(int fd, uint32_t propertyId);
353
 
extern void drmModeFreeProperty(drmModePropertyPtr ptr);
354
 
 
355
 
extern drmModePropertyBlobPtr drmModeGetPropertyBlob(int fd, uint32_t blob_id);
356
 
extern void drmModeFreePropertyBlob(drmModePropertyBlobPtr ptr);
357
 
extern int drmModeConnectorSetProperty(int fd, uint32_t connector_id, uint32_t property_id,
358
 
                                    uint64_t value);
359
 
extern int drmCheckModesettingSupported(const char *busid);
360
 
 
361
 
extern int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size,
362
 
                               uint16_t *red, uint16_t *green, uint16_t *blue);
363
 
extern int drmModeCrtcGetGamma(int fd, uint32_t crtc_id, uint32_t size,
364
 
                               uint16_t *red, uint16_t *green, uint16_t *blue);