Merge branch 'modesetting-101' of git+ssh://git.freedesktop.org/git/mesa/drm into...
[profile/ivi/libdrm.git] / libdrm / xf86drmMode.h
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) <year> <copyright holders>
13  *
14  * Permission is hereby granted, free of charge, to any person obtaining a
15  * copy of this software and associated documentation files (the "Software"),
16  * to deal in the Software without restriction, including without limitation
17  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
18  * and/or sell copies of the Software, and to permit persons to whom the
19  * Software is furnished to do so, subject to the following conditions:
20  *
21  * The above copyright notice and this permission notice shall be included in
22  * all copies or substantial portions of the Software.
23  *
24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
30  * IN THE SOFTWARE.
31  *
32  */
33
34 #include <drm.h>
35 #include "xf86mm.h"
36
37 /*
38  * This is the interface for modesetting for drm.
39  *
40  * In order to use this interface you must include either <stdint.h> or another
41  * header defining uint32_t, int32_t and uint16_t.
42  *
43  * It aims to provide a randr compatible interface for modesettings in the
44  * kernel, the interface is also ment to be used by libraries like EGL.
45  *
46  * More information can be found in randrproto.txt which can be found here:
47  * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git
48  *
49  * All framebuffer, crtc and output ids start at 1 while 0 is either an invalid
50  * parameter or used to indicate that the command should disconnect from the
51  * currently bound target, as with drmModeMapOutput.
52  *
53  * Currently only one framebuffer exist and has a id of 1, which is also the
54  * default framebuffer and should allways be avaible to the client, unless
55  * it is locked/used or any other limiting state is applied on it.
56  *
57  */
58
59 typedef struct _drmModeGammaTriple {
60         uint16_t r, g, b;
61 } drmModeGammaTriple, *drmModeGammaTriplePtr;
62
63 typedef struct _drmModeRes {
64
65         uint32_t frameBufferId;
66
67         int count_crtcs;
68         uint32_t *crtcs;
69
70         int count_outputs;
71         uint32_t *outputs;
72
73         int count_modes;
74         struct drm_mode_modeinfo *modes;
75
76 } drmModeRes, *drmModeResPtr;
77
78 typedef struct _drmModeFrameBuffer {
79
80         uint32_t minWidth, maxWidth;
81         uint32_t minHeight, maxHeight;
82
83 } drmModeFrameBuffer, *drmModeFrameBufferPtr;
84
85 typedef struct _drmModeCrtc {
86
87         unsigned int bufferId; /**< Buffer currently connected to */
88
89         uint32_t x, y; /**< Position on the frameuffer */
90         uint32_t width, height;
91         uint32_t mode; /**< Current mode used */
92
93         int count_outputs;
94         uint32_t outputs; /**< Outputs that are connected */
95
96         int count_possibles;
97         uint32_t possibles; /**< Outputs that can be connected */
98
99         int gamma_size; /**< Number of gamma stops */
100
101 } drmModeCrtc, *drmModeCrtcPtr;
102
103 typedef enum {
104         DRM_MODE_CONNECTED         = 1,
105         DRM_MODE_DISCONNECTED      = 2,
106         DRM_MODE_UNKNOWNCONNECTION = 3
107 } drmModeConnection;
108
109 typedef enum {
110         DRM_MODE_SUBPIXEL_UNKNOWN        = 1,
111         DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2,
112         DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3,
113         DRM_MODE_SUBPIXEL_VERTICAL_RGB   = 4,
114         DRM_MODE_SUBPIXEL_VERTICAL_BGR   = 5,
115         DRM_MODE_SUBPIXEL_NONE           = 6
116 } drmModeSubPixel;
117
118 typedef struct _drmModeOutput {
119
120         unsigned int crtc; /**< Crtc currently connected to */
121
122         drmModeConnection connection;
123         uint32_t mmWidth, mmHeight; /**< HxW in millimeters */
124         drmModeSubPixel subpixel;
125
126         int count_crtcs;
127         uint32_t crtcs; /**< Possible crtc to connect to */
128
129         int count_clones;
130         uint32_t clones; /**< Mask of clones */
131
132         int count_modes;
133         uint32_t *modes; /**< List of modes ids */
134
135 } drmModeOutput, *drmModeOutputPtr;
136
137 /*
138  * RRSetScreenConfig o
139  * RRGetScreenInfo o
140  *
141  * RRGetScreenSizeRange - see frameBuffer info
142  * RRSetScreenSize
143  * RRGetScreenResources
144  *
145  * RRGetOutputInfo
146  *
147  * RRListOutputProperties *
148  * RRQueryOutputProperty *
149  * RRConfigureOutputProperty *
150  * RRChangeOutputProperty *
151  * RRDeleteOutputProperty *
152  * RRGetOutputProperty *
153  *
154  * RRCreateMode
155  * RRDestroyMode
156  * RRAddOutputMode
157  * RRDeleteOutputMode
158  *
159  * RRGetCrtcInfo
160  * RRSetCrtcConfig
161  *
162  * RRGetCrtcGammaSize - see crtc info
163  * RRGetCrtcGamma
164  * RRSetCrtcGamma
165  *
166  * drmModeGetResources
167  * drmModeForceProbe
168  *
169  * drmModeGetFrameBufferInfo
170  * drmModeSetFrameBufferSize
171  *
172  * drmModeGetCrtcInfo
173  * drmModeSetCrtcConfig
174  * drmModeGetCrtcGamma
175  * drmModeSetCrtcGamma
176  *
177  * drmModeGetOutputInfo
178  *
179  * drmModeAddMode
180  * drmModeDestroyMode
181  * drmModeAddOutputMode
182  * drmModeDeleteOutputMode
183  */
184
185 extern void drmModeFreeModeInfo( struct drm_mode_modeinfo *ptr );
186 extern void drmModeFreeResources( drmModeResPtr ptr );
187 extern void drmModeFreeFrameBuffer( drmModeFrameBufferPtr ptr );
188 extern void drmModeFreeCrtc( drmModeCrtcPtr ptr );
189 extern void drmModeFreeOutput( drmModeOutputPtr ptr );
190
191 /**
192  * Retrives all of the resources associated with a card.
193  */
194 extern drmModeResPtr drmModeGetResources(int fd);
195
196 /**
197  * Forces a probe of the give output outputId, on 0 all will be probed.
198  */
199 extern int drmModeForceProbe(int fd, uint32_t outputId);
200
201
202 /*
203  * FrameBuffer manipulation.
204  */
205
206 /**
207  * Retrive information about framebuffer bufferId
208  */
209 extern drmModeFrameBufferPtr drmModeGetFramebuffer(int fd,
210                 uint32_t bufferId);
211
212 /**
213  * Creates a new framebuffer with an buffer object as its scanout buffer.
214  */
215 extern uint32_t drmModeNewFrameBuffer(int fd,
216                 uint32_t width, uint32_t height,
217                 uint8_t bbp, uint32_t pitch, drmBO *bo);
218
219 /**
220  * Destroies the given framebuffer.
221  */
222 extern int drmModeDesFrameBuffer(int fd, uint32_t bufferId);
223
224 /**
225  * Changes the scanout buffer to the given buffer object.
226  */
227 extern int drmModeFlipFrameBuffer(int fd, uint32_t bufferId, drmBO *bo);
228
229 /*
230  * Crtc function.
231  */
232
233 /**
234  * Retrive information about the ctrt crtcId
235  */
236 extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId);
237
238 /**
239  * Set the mode on a crtc crtcId with the given mode modeId.
240  */
241 extern int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId,
242                 uint32_t x, uint32_t y, uint32_t modeId,
243                 uint32_t *outputs, int count);
244
245 /**
246  * Gets the gamma from a crtc
247  */
248 extern drmModeGammaTriplePtr drmModeGetCrtcGamma(int fd, uint32_t crtcId,
249                 int *count);
250
251 /**
252  * Sets the gamma on a crtc
253  */
254 extern int drmModeSetCrtcGamma(int fd, uint32_t crtcId,
255                 drmModeGammaTriplePtr ptr, int count);
256
257
258
259 /*
260  * Output manipulation
261  */
262
263 /**
264  * Retrive information about the output outputId.
265  */
266 extern drmModeOutputPtr drmModeGetOutput(int fd,
267                 uint32_t outputId);
268
269 /**
270  * Creates a new mode from the given mode info.
271  * Name must be unique.
272  */
273 extern uint32_t drmModeNewMode(int fd, struct drm_mode_modeinfo *modeInfo);
274
275 /**
276  * Destroys a mode created with CreateMode, must be unused.
277  */
278 extern int drmModeDesMode(int fd, uint32_t modeId);
279
280 /**
281  * Adds the given mode to an output.
282  */
283 extern int drmModeAddMode(int fd, uint32_t outputId, uint32_t modeId);
284
285 /**
286  * Deletes a mode Added with AddOutputMode from the output,
287  * must be unused, by the given mode.
288  */
289 extern int drmModeDelMode(int fd, uint32_t outputId, uint32_t modeId);
290