fixup numerous issues with adding framebuffer support
[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 width;
81         uint32_t height;
82         uint32_t pitch;
83         uint8_t bpp;
84
85 } drmModeFrameBuffer, *drmModeFrameBufferPtr;
86
87 typedef struct _drmModeCrtc {
88
89         unsigned int bufferId; /**< Buffer currently connected to */
90
91         uint32_t x, y; /**< Position on the frameuffer */
92         uint32_t width, height;
93         uint32_t mode; /**< Current mode used */
94
95         int count_outputs;
96         uint32_t outputs; /**< Outputs that are connected */
97
98         int count_possibles;
99         uint32_t possibles; /**< Outputs that can be connected */
100
101         int gamma_size; /**< Number of gamma stops */
102
103 } drmModeCrtc, *drmModeCrtcPtr;
104
105 typedef enum {
106         DRM_MODE_CONNECTED         = 1,
107         DRM_MODE_DISCONNECTED      = 2,
108         DRM_MODE_UNKNOWNCONNECTION = 3
109 } drmModeConnection;
110
111 typedef enum {
112         DRM_MODE_SUBPIXEL_UNKNOWN        = 1,
113         DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2,
114         DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3,
115         DRM_MODE_SUBPIXEL_VERTICAL_RGB   = 4,
116         DRM_MODE_SUBPIXEL_VERTICAL_BGR   = 5,
117         DRM_MODE_SUBPIXEL_NONE           = 6
118 } drmModeSubPixel;
119
120 typedef struct _drmModeOutput {
121
122         unsigned int crtc; /**< Crtc currently connected to */
123
124         drmModeConnection connection;
125         uint32_t mmWidth, mmHeight; /**< HxW in millimeters */
126         drmModeSubPixel subpixel;
127
128         int count_crtcs;
129         uint32_t crtcs; /**< Possible crtc to connect to */
130
131         int count_clones;
132         uint32_t clones; /**< Mask of clones */
133
134         int count_modes;
135         uint32_t *modes; /**< List of modes ids */
136
137 } drmModeOutput, *drmModeOutputPtr;
138
139 /*
140  * RRSetScreenConfig o
141  * RRGetScreenInfo o
142  *
143  * RRGetScreenSizeRange - see frameBuffer info
144  * RRSetScreenSize
145  * RRGetScreenResources
146  *
147  * RRGetOutputInfo
148  *
149  * RRListOutputProperties *
150  * RRQueryOutputProperty *
151  * RRConfigureOutputProperty *
152  * RRChangeOutputProperty *
153  * RRDeleteOutputProperty *
154  * RRGetOutputProperty *
155  *
156  * RRCreateMode
157  * RRDestroyMode
158  * RRAddOutputMode
159  * RRDeleteOutputMode
160  *
161  * RRGetCrtcInfo
162  * RRSetCrtcConfig
163  *
164  * RRGetCrtcGammaSize - see crtc info
165  * RRGetCrtcGamma
166  * RRSetCrtcGamma
167  *
168  * drmModeGetResources
169  * drmModeForceProbe
170  *
171  * drmModeGetFrameBufferInfo
172  * drmModeSetFrameBufferSize
173  *
174  * drmModeGetCrtcInfo
175  * drmModeSetCrtcConfig
176  * drmModeGetCrtcGamma
177  * drmModeSetCrtcGamma
178  *
179  * drmModeGetOutputInfo
180  *
181  * drmModeAddMode
182  * drmModeDestroyMode
183  * drmModeAddOutputMode
184  * drmModeDeleteOutputMode
185  */
186
187 extern void drmModeFreeModeInfo( struct drm_mode_modeinfo *ptr );
188 extern void drmModeFreeResources( drmModeResPtr ptr );
189 extern void drmModeFreeFrameBuffer( drmModeFrameBufferPtr ptr );
190 extern void drmModeFreeCrtc( drmModeCrtcPtr ptr );
191 extern void drmModeFreeOutput( drmModeOutputPtr ptr );
192
193 /**
194  * Retrives all of the resources associated with a card.
195  */
196 extern drmModeResPtr drmModeGetResources(int fd);
197
198 /**
199  * Forces a probe of the give output outputId, on 0 all will be probed.
200  */
201 extern int drmModeForceProbe(int fd, uint32_t outputId);
202
203
204 /*
205  * FrameBuffer manipulation.
206  */
207
208 /**
209  * Retrive information about framebuffer bufferId
210  */
211 extern drmModeFrameBufferPtr drmModeGetFramebuffer(int fd,
212                 uint32_t bufferId);
213
214 /**
215  * Creates a new framebuffer with an buffer object as its scanout buffer.
216  */
217 extern int drmModeAddFB(int fd, uint32_t width, uint32_t height,
218                         uint8_t bpp, uint32_t pitch, drmBO *bo, uint32_t *buf_id);
219 /**
220  * Destroies the given framebuffer.
221  */
222 extern int drmModeRmFB(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