blob: c28995ab632e4a0348440ff65ac1c1d634095cd1 [file] [log] [blame]
Jesse Barnes731cd552008-12-17 10:09:49 -08001/*
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
David Herrmanfd39e612012-03-09 13:40:14 -050036#ifndef _XF86DRMMODE_H_
37#define _XF86DRMMODE_H_
38
Tapani Pälli1c205742015-08-07 10:37:56 +030039#if defined(__cplusplus)
Tapani Pällicfee5212011-09-23 14:17:42 +030040extern "C" {
41#endif
42
Jesse Barnes731cd552008-12-17 10:09:49 -080043#include <drm.h>
Simon Serd5682de2019-10-26 19:36:37 +020044#include <stddef.h>
45#include <stdint.h>
Jesse Barnes731cd552008-12-17 10:09:49 -080046
47/*
48 * This is the interface for modesetting for drm.
49 *
50 * In order to use this interface you must include either <stdint.h> or another
51 * header defining uint32_t, int32_t and uint16_t.
52 *
53 * It aims to provide a randr1.2 compatible interface for modesettings in the
Eric Engestrom360292c2018-12-19 14:55:45 +000054 * kernel, the interface is also meant to be used by libraries like EGL.
Jesse Barnes731cd552008-12-17 10:09:49 -080055 *
56 * More information can be found in randrproto.txt which can be found here:
57 * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git
58 *
Eric Engestrom360292c2018-12-19 14:55:45 +000059 * There are some major differences to be noted. Unlike the randr1.2 proto you
Jesse Barnes731cd552008-12-17 10:09:49 -080060 * need to create the memory object of the framebuffer yourself with the ttm
61 * buffer object interface. This object needs to be pinned.
62 */
63
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +010064/*
65 * If we pickup an old version of drm.h which doesn't include drm_mode.h
66 * we should redefine defines. This is so that builds doesn't breaks with
67 * new libdrm on old kernels.
68 */
69#ifndef _DRM_MODE_H
70
71#define DRM_DISPLAY_INFO_LEN 32
72#define DRM_CONNECTOR_NAME_LEN 32
73#define DRM_DISPLAY_MODE_LEN 32
74#define DRM_PROP_NAME_LEN 32
75
76#define DRM_MODE_TYPE_BUILTIN (1<<0)
77#define DRM_MODE_TYPE_CLOCK_C ((1<<1) | DRM_MODE_TYPE_BUILTIN)
78#define DRM_MODE_TYPE_CRTC_C ((1<<2) | DRM_MODE_TYPE_BUILTIN)
79#define DRM_MODE_TYPE_PREFERRED (1<<3)
80#define DRM_MODE_TYPE_DEFAULT (1<<4)
81#define DRM_MODE_TYPE_USERDEF (1<<5)
82#define DRM_MODE_TYPE_DRIVER (1<<6)
83
84/* Video mode flags */
85/* bit compatible with the xorg definitions. */
Damien Lespiauedf5c7c2013-08-23 15:57:40 +010086#define DRM_MODE_FLAG_PHSYNC (1<<0)
87#define DRM_MODE_FLAG_NHSYNC (1<<1)
88#define DRM_MODE_FLAG_PVSYNC (1<<2)
89#define DRM_MODE_FLAG_NVSYNC (1<<3)
90#define DRM_MODE_FLAG_INTERLACE (1<<4)
91#define DRM_MODE_FLAG_DBLSCAN (1<<5)
92#define DRM_MODE_FLAG_CSYNC (1<<6)
93#define DRM_MODE_FLAG_PCSYNC (1<<7)
94#define DRM_MODE_FLAG_NCSYNC (1<<8)
95#define DRM_MODE_FLAG_HSKEW (1<<9) /* hskew provided */
96#define DRM_MODE_FLAG_BCAST (1<<10)
97#define DRM_MODE_FLAG_PIXMUX (1<<11)
98#define DRM_MODE_FLAG_DBLCLK (1<<12)
99#define DRM_MODE_FLAG_CLKDIV2 (1<<13)
100#define DRM_MODE_FLAG_3D_MASK (0x1f<<14)
101#define DRM_MODE_FLAG_3D_NONE (0<<14)
102#define DRM_MODE_FLAG_3D_FRAME_PACKING (1<<14)
103#define DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE (2<<14)
104#define DRM_MODE_FLAG_3D_LINE_ALTERNATIVE (3<<14)
105#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL (4<<14)
106#define DRM_MODE_FLAG_3D_L_DEPTH (5<<14)
107#define DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH (6<<14)
108#define DRM_MODE_FLAG_3D_TOP_AND_BOTTOM (7<<14)
109#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF (8<<14)
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100110
111/* DPMS flags */
112/* bit compatible with the xorg definitions. */
113#define DRM_MODE_DPMS_ON 0
114#define DRM_MODE_DPMS_STANDBY 1
115#define DRM_MODE_DPMS_SUSPEND 2
116#define DRM_MODE_DPMS_OFF 3
117
118/* Scaling mode options */
119#define DRM_MODE_SCALE_NON_GPU 0
120#define DRM_MODE_SCALE_FULLSCREEN 1
121#define DRM_MODE_SCALE_NO_SCALE 2
122#define DRM_MODE_SCALE_ASPECT 3
123
124/* Dithering mode options */
125#define DRM_MODE_DITHERING_OFF 0
126#define DRM_MODE_DITHERING_ON 1
127
Thierry Redingab50ffb2014-12-17 11:52:40 +0100128#define DRM_MODE_ENCODER_NONE 0
129#define DRM_MODE_ENCODER_DAC 1
130#define DRM_MODE_ENCODER_TMDS 2
131#define DRM_MODE_ENCODER_LVDS 3
132#define DRM_MODE_ENCODER_TVDAC 4
Thomas Hellstromc6014442013-11-19 07:50:11 +0100133#define DRM_MODE_ENCODER_VIRTUAL 5
Thierry Redingab50ffb2014-12-17 11:52:40 +0100134#define DRM_MODE_ENCODER_DSI 6
Thierry Reding4bfbe4c2014-12-17 11:53:31 +0100135#define DRM_MODE_ENCODER_DPMST 7
136#define DRM_MODE_ENCODER_DPI 8
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100137
138#define DRM_MODE_SUBCONNECTOR_Automatic 0
139#define DRM_MODE_SUBCONNECTOR_Unknown 0
140#define DRM_MODE_SUBCONNECTOR_DVID 3
141#define DRM_MODE_SUBCONNECTOR_DVIA 4
142#define DRM_MODE_SUBCONNECTOR_Composite 5
143#define DRM_MODE_SUBCONNECTOR_SVIDEO 6
144#define DRM_MODE_SUBCONNECTOR_Component 8
Thomas Hellstromc6014442013-11-19 07:50:11 +0100145#define DRM_MODE_SUBCONNECTOR_SCART 9
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100146
147#define DRM_MODE_CONNECTOR_Unknown 0
148#define DRM_MODE_CONNECTOR_VGA 1
149#define DRM_MODE_CONNECTOR_DVII 2
150#define DRM_MODE_CONNECTOR_DVID 3
151#define DRM_MODE_CONNECTOR_DVIA 4
152#define DRM_MODE_CONNECTOR_Composite 5
153#define DRM_MODE_CONNECTOR_SVIDEO 6
154#define DRM_MODE_CONNECTOR_LVDS 7
155#define DRM_MODE_CONNECTOR_Component 8
156#define DRM_MODE_CONNECTOR_9PinDIN 9
157#define DRM_MODE_CONNECTOR_DisplayPort 10
158#define DRM_MODE_CONNECTOR_HDMIA 11
159#define DRM_MODE_CONNECTOR_HDMIB 12
Thierry Redingab50ffb2014-12-17 11:52:40 +0100160#define DRM_MODE_CONNECTOR_TV 13
161#define DRM_MODE_CONNECTOR_eDP 14
Thomas Hellstromc6014442013-11-19 07:50:11 +0100162#define DRM_MODE_CONNECTOR_VIRTUAL 15
163#define DRM_MODE_CONNECTOR_DSI 16
Thierry Reding4bfbe4c2014-12-17 11:53:31 +0100164#define DRM_MODE_CONNECTOR_DPI 17
Daniel Stone665c0f72019-11-26 10:41:26 +0000165#define DRM_MODE_CONNECTOR_WRITEBACK 18
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100166
167#define DRM_MODE_PROP_PENDING (1<<0)
168#define DRM_MODE_PROP_RANGE (1<<1)
169#define DRM_MODE_PROP_IMMUTABLE (1<<2)
170#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */
171#define DRM_MODE_PROP_BLOB (1<<4)
172
173#define DRM_MODE_CURSOR_BO (1<<0)
174#define DRM_MODE_CURSOR_MOVE (1<<1)
175
176#endif /* _DRM_MODE_H */
177
Jakob Bornecrantz3e486132009-11-24 18:00:12 +0100178
179/*
180 * Feature defines
181 *
182 * Just because these are defined doesn't mean that the kernel
183 * can do that feature, its just for new code vs old libdrm.
184 */
185#define DRM_MODE_FEATURE_KMS 1
186#define DRM_MODE_FEATURE_DIRTYFB 1
187
188
Jesse Barnes731cd552008-12-17 10:09:49 -0800189typedef struct _drmModeRes {
190
191 int count_fbs;
192 uint32_t *fbs;
193
194 int count_crtcs;
195 uint32_t *crtcs;
196
197 int count_connectors;
198 uint32_t *connectors;
199
200 int count_encoders;
201 uint32_t *encoders;
202
203 uint32_t min_width, max_width;
204 uint32_t min_height, max_height;
205} drmModeRes, *drmModeResPtr;
206
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100207typedef struct _drmModeModeInfo {
208 uint32_t clock;
209 uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew;
210 uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan;
211
Marcin Kościelnicki694ef592010-02-27 15:04:42 +0000212 uint32_t vrefresh;
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100213
214 uint32_t flags;
215 uint32_t type;
216 char name[DRM_DISPLAY_MODE_LEN];
217} drmModeModeInfo, *drmModeModeInfoPtr;
218
219typedef struct _drmModeFB {
220 uint32_t fb_id;
221 uint32_t width, height;
222 uint32_t pitch;
223 uint32_t bpp;
224 uint32_t depth;
225 /* driver specific handle */
226 uint32_t handle;
227} drmModeFB, *drmModeFBPtr;
Jesse Barnes731cd552008-12-17 10:09:49 -0800228
Daniel Stoned8731e92020-02-11 12:19:16 -0800229typedef struct _drmModeFB2 {
230 uint32_t fb_id;
231 uint32_t width, height;
232 uint32_t pixel_format; /* fourcc code from drm_fourcc.h */
233 uint64_t modifier; /* applies to all buffers */
234 uint32_t flags;
235
236 /* per-plane GEM handle; may be duplicate entries for multiple planes */
237 uint32_t handles[4];
238 uint32_t pitches[4]; /* bytes */
239 uint32_t offsets[4]; /* bytes */
240} drmModeFB2, *drmModeFB2Ptr;
241
Jakob Bornecrantz3e486132009-11-24 18:00:12 +0100242typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr;
243
Jesse Barnes731cd552008-12-17 10:09:49 -0800244typedef struct _drmModePropertyBlob {
245 uint32_t id;
246 uint32_t length;
247 void *data;
248} drmModePropertyBlobRes, *drmModePropertyBlobPtr;
249
250typedef struct _drmModeProperty {
251 uint32_t prop_id;
252 uint32_t flags;
253 char name[DRM_PROP_NAME_LEN];
254 int count_values;
Daniel Kurtz0f4452b2013-08-26 23:39:16 +0800255 uint64_t *values; /* store the blob lengths */
Jesse Barnes731cd552008-12-17 10:09:49 -0800256 int count_enums;
257 struct drm_mode_property_enum *enums;
258 int count_blobs;
Daniel Kurtz0f4452b2013-08-26 23:39:16 +0800259 uint32_t *blob_ids; /* store the blob IDs */
Jesse Barnes731cd552008-12-17 10:09:49 -0800260} drmModePropertyRes, *drmModePropertyPtr;
261
Daniel Kurtzd20314d2015-03-24 18:01:02 -0700262static __inline int drm_property_type_is(drmModePropertyPtr property,
Rob Clarkfb417702013-10-12 12:16:44 -0400263 uint32_t type)
264{
265 /* instanceof for props.. handles extended type vs original types: */
266 if (property->flags & DRM_MODE_PROP_EXTENDED_TYPE)
267 return (property->flags & DRM_MODE_PROP_EXTENDED_TYPE) == type;
268 return property->flags & type;
269}
270
Jesse Barnes731cd552008-12-17 10:09:49 -0800271typedef struct _drmModeCrtc {
272 uint32_t crtc_id;
273 uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */
274
275 uint32_t x, y; /**< Position on the framebuffer */
276 uint32_t width, height;
277 int mode_valid;
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100278 drmModeModeInfo mode;
Jesse Barnes731cd552008-12-17 10:09:49 -0800279
280 int gamma_size; /**< Number of gamma stops */
281
282} drmModeCrtc, *drmModeCrtcPtr;
283
284typedef struct _drmModeEncoder {
285 uint32_t encoder_id;
286 uint32_t encoder_type;
287 uint32_t crtc_id;
288 uint32_t possible_crtcs;
289 uint32_t possible_clones;
290} drmModeEncoder, *drmModeEncoderPtr;
291
Simon Serdf373422020-11-18 10:58:59 +0100292/**
293 * Describes the connector status.
294 *
295 * DRM_MODE_CONNECTED means that the connector has a sink plugged in.
296 * DRM_MODE_DISCONNECTED means the contrary. DRM_MODE_UNKNOWNCONNECTION is used
297 * when it could be either.
298 *
299 * User-space should first try to enable DRM_MODE_CONNECTED connectors and
300 * ignore other connectors. If there are no DRM_MODE_CONNECTED connectors,
301 * user-space should then try to probe and enable DRM_MODE_UNKNOWNCONNECTION
302 * connectors.
303 */
Jesse Barnes731cd552008-12-17 10:09:49 -0800304typedef enum {
305 DRM_MODE_CONNECTED = 1,
306 DRM_MODE_DISCONNECTED = 2,
307 DRM_MODE_UNKNOWNCONNECTION = 3
308} drmModeConnection;
309
310typedef enum {
311 DRM_MODE_SUBPIXEL_UNKNOWN = 1,
312 DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2,
313 DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3,
314 DRM_MODE_SUBPIXEL_VERTICAL_RGB = 4,
315 DRM_MODE_SUBPIXEL_VERTICAL_BGR = 5,
316 DRM_MODE_SUBPIXEL_NONE = 6
317} drmModeSubPixel;
318
319typedef struct _drmModeConnector {
320 uint32_t connector_id;
321 uint32_t encoder_id; /**< Encoder currently connected to */
322 uint32_t connector_type;
323 uint32_t connector_type_id;
324 drmModeConnection connection;
325 uint32_t mmWidth, mmHeight; /**< HxW in millimeters */
326 drmModeSubPixel subpixel;
327
328 int count_modes;
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100329 drmModeModeInfoPtr modes;
Jesse Barnes731cd552008-12-17 10:09:49 -0800330
331 int count_props;
332 uint32_t *props; /**< List of property ids */
333 uint64_t *prop_values; /**< List of property values */
334
335 int count_encoders;
336 uint32_t *encoders; /**< List of encoder ids */
337} drmModeConnector, *drmModeConnectorPtr;
338
Matt Roper8fc62ca2014-04-10 14:23:12 -0700339#define DRM_PLANE_TYPE_OVERLAY 0
340#define DRM_PLANE_TYPE_PRIMARY 1
341#define DRM_PLANE_TYPE_CURSOR 2
342
Paulo Zanoni8c757032012-05-15 18:38:28 -0300343typedef struct _drmModeObjectProperties {
344 uint32_t count_props;
345 uint32_t *props;
346 uint64_t *prop_values;
347} drmModeObjectProperties, *drmModeObjectPropertiesPtr;
348
Jesse Barnesac168bf2011-04-29 08:53:53 -0700349typedef struct _drmModePlane {
350 uint32_t count_formats;
351 uint32_t *formats;
352 uint32_t plane_id;
Jesse Barnes731cd552008-12-17 10:09:49 -0800353
Jesse Barnesac168bf2011-04-29 08:53:53 -0700354 uint32_t crtc_id;
355 uint32_t fb_id;
356
357 uint32_t crtc_x, crtc_y;
358 uint32_t x, y;
359
360 uint32_t possible_crtcs;
361 uint32_t gamma_size;
362} drmModePlane, *drmModePlanePtr;
363
364typedef struct _drmModePlaneRes {
365 uint32_t count_planes;
366 uint32_t *planes;
367} drmModePlaneRes, *drmModePlaneResPtr;
Jesse Barnes731cd552008-12-17 10:09:49 -0800368
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100369extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr );
Jesse Barnes731cd552008-12-17 10:09:49 -0800370extern void drmModeFreeResources( drmModeResPtr ptr );
371extern void drmModeFreeFB( drmModeFBPtr ptr );
Daniel Stoned8731e92020-02-11 12:19:16 -0800372extern void drmModeFreeFB2( drmModeFB2Ptr ptr );
Jesse Barnes731cd552008-12-17 10:09:49 -0800373extern void drmModeFreeCrtc( drmModeCrtcPtr ptr );
374extern void drmModeFreeConnector( drmModeConnectorPtr ptr );
375extern void drmModeFreeEncoder( drmModeEncoderPtr ptr );
Jesse Barnesac168bf2011-04-29 08:53:53 -0700376extern void drmModeFreePlane( drmModePlanePtr ptr );
Ville Syrjäläa14c3dd2012-02-02 14:53:41 -0500377extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr);
Jesse Barnes731cd552008-12-17 10:09:49 -0800378
379/**
Eric Engestrom360292c2018-12-19 14:55:45 +0000380 * Retrieves all of the resources associated with a card.
Jesse Barnes731cd552008-12-17 10:09:49 -0800381 */
382extern drmModeResPtr drmModeGetResources(int fd);
383
384/*
385 * FrameBuffer manipulation.
386 */
387
388/**
Eric Engestrom360292c2018-12-19 14:55:45 +0000389 * Retrieve information about framebuffer bufferId
Jesse Barnes731cd552008-12-17 10:09:49 -0800390 */
391extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId);
Daniel Stoned8731e92020-02-11 12:19:16 -0800392extern drmModeFB2Ptr drmModeGetFB2(int fd, uint32_t bufferId);
Jesse Barnes731cd552008-12-17 10:09:49 -0800393
394/**
395 * Creates a new framebuffer with an buffer object as its scanout buffer.
396 */
397extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth,
398 uint8_t bpp, uint32_t pitch, uint32_t bo_handle,
399 uint32_t *buf_id);
Jesse Barnesac168bf2011-04-29 08:53:53 -0700400/* ...with a specific pixel format */
401extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
Tobias Jakobi09be5412017-10-10 12:12:52 +0200402 uint32_t pixel_format, const uint32_t bo_handles[4],
403 const uint32_t pitches[4], const uint32_t offsets[4],
Jesse Barnesac168bf2011-04-29 08:53:53 -0700404 uint32_t *buf_id, uint32_t flags);
Kristian H. Kristensenabfa6802016-09-08 13:08:59 -0700405
406/* ...with format modifiers */
407int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height,
Tobias Jakobi09be5412017-10-10 12:12:52 +0200408 uint32_t pixel_format, const uint32_t bo_handles[4],
409 const uint32_t pitches[4], const uint32_t offsets[4],
410 const uint64_t modifier[4], uint32_t *buf_id,
411 uint32_t flags);
Kristian H. Kristensenabfa6802016-09-08 13:08:59 -0700412
Jesse Barnes731cd552008-12-17 10:09:49 -0800413/**
414 * Destroies the given framebuffer.
415 */
416extern int drmModeRmFB(int fd, uint32_t bufferId);
417
Jakob Bornecrantz3e486132009-11-24 18:00:12 +0100418/**
419 * Mark a region of a framebuffer as dirty.
420 */
421extern int drmModeDirtyFB(int fd, uint32_t bufferId,
422 drmModeClipPtr clips, uint32_t num_clips);
423
424
Jesse Barnes731cd552008-12-17 10:09:49 -0800425/*
426 * Crtc functions
427 */
428
429/**
Eric Engestrom360292c2018-12-19 14:55:45 +0000430 * Retrieve information about the ctrt crtcId
Jesse Barnes731cd552008-12-17 10:09:49 -0800431 */
432extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId);
433
434/**
435 * Set the mode on a crtc crtcId with the given mode modeId.
436 */
437int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId,
438 uint32_t x, uint32_t y, uint32_t *connectors, int count,
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100439 drmModeModeInfoPtr mode);
Jesse Barnes731cd552008-12-17 10:09:49 -0800440
441/*
442 * Cursor functions
443 */
444
445/**
446 * Set the cursor on crtc
447 */
448int drmModeSetCursor(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height);
449
Dave Airlie2e0ab622013-07-02 09:21:06 +0100450int drmModeSetCursor2(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height, int32_t hot_x, int32_t hot_y);
Jesse Barnes731cd552008-12-17 10:09:49 -0800451/**
452 * Move the cursor on crtc
453 */
454int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y);
455
456/**
457 * Encoder functions
458 */
459drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id);
460
461/*
462 * Connector manipulation
463 */
464
465/**
Chris Wilson5ed5fa12015-03-04 10:07:19 +0000466 * Retrieve all information about the connector connectorId. This will do a
467 * forced probe on the connector to retrieve remote information such as EDIDs
468 * from the display device.
Jesse Barnes731cd552008-12-17 10:09:49 -0800469 */
470extern drmModeConnectorPtr drmModeGetConnector(int fd,
Chris Wilson5ed5fa12015-03-04 10:07:19 +0000471 uint32_t connectorId);
472
473/**
474 * Retrieve current information, i.e the currently active mode and encoder,
475 * about the connector connectorId. This will not do any probing on the
476 * connector or remote device, and only reports what is currently known.
477 * For the complete set of modes and encoders associated with the connector
478 * use drmModeGetConnector() which will do a probe to determine any display
479 * link changes first.
480 */
481extern drmModeConnectorPtr drmModeGetConnectorCurrent(int fd,
482 uint32_t connector_id);
Jesse Barnes731cd552008-12-17 10:09:49 -0800483
484/**
485 * Attaches the given mode to an connector.
486 */
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100487extern int drmModeAttachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info);
Jesse Barnes731cd552008-12-17 10:09:49 -0800488
489/**
490 * Detaches a mode from the connector
491 * must be unused, by the given mode.
492 */
Jakob Bornecrantzeb78c532009-02-11 16:43:20 +0100493extern int drmModeDetachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info);
Jesse Barnes731cd552008-12-17 10:09:49 -0800494
495extern drmModePropertyPtr drmModeGetProperty(int fd, uint32_t propertyId);
496extern void drmModeFreeProperty(drmModePropertyPtr ptr);
497
498extern drmModePropertyBlobPtr drmModeGetPropertyBlob(int fd, uint32_t blob_id);
499extern void drmModeFreePropertyBlob(drmModePropertyBlobPtr ptr);
500extern int drmModeConnectorSetProperty(int fd, uint32_t connector_id, uint32_t property_id,
501 uint64_t value);
502extern int drmCheckModesettingSupported(const char *busid);
503
504extern int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size,
505 uint16_t *red, uint16_t *green, uint16_t *blue);
506extern int drmModeCrtcGetGamma(int fd, uint32_t crtc_id, uint32_t size,
507 uint16_t *red, uint16_t *green, uint16_t *blue);
Kristian Høgsbergb80bcff2009-11-12 14:06:45 -0500508extern int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id,
509 uint32_t flags, void *user_data);
Michel Dänzer7dd28472016-06-29 18:07:25 +0900510extern int drmModePageFlipTarget(int fd, uint32_t crtc_id, uint32_t fb_id,
511 uint32_t flags, void *user_data,
512 uint32_t target_vblank);
Tapani Pällicfee5212011-09-23 14:17:42 +0300513
Jesse Barnesac168bf2011-04-29 08:53:53 -0700514extern drmModePlaneResPtr drmModeGetPlaneResources(int fd);
515extern drmModePlanePtr drmModeGetPlane(int fd, uint32_t plane_id);
516extern int drmModeSetPlane(int fd, uint32_t plane_id, uint32_t crtc_id,
517 uint32_t fb_id, uint32_t flags,
Daniel Kurtz828c3e82014-05-01 19:56:43 +0800518 int32_t crtc_x, int32_t crtc_y,
Jesse Barnesac168bf2011-04-29 08:53:53 -0700519 uint32_t crtc_w, uint32_t crtc_h,
520 uint32_t src_x, uint32_t src_y,
521 uint32_t src_w, uint32_t src_h);
522
Paulo Zanoni8c757032012-05-15 18:38:28 -0300523extern drmModeObjectPropertiesPtr drmModeObjectGetProperties(int fd,
524 uint32_t object_id,
525 uint32_t object_type);
526extern void drmModeFreeObjectProperties(drmModeObjectPropertiesPtr ptr);
527extern int drmModeObjectSetProperty(int fd, uint32_t object_id,
528 uint32_t object_type, uint32_t property_id,
529 uint64_t value);
530
Ville Syrjäläed44e0b2015-06-22 17:26:02 +0100531
532typedef struct _drmModeAtomicReq drmModeAtomicReq, *drmModeAtomicReqPtr;
533
534extern drmModeAtomicReqPtr drmModeAtomicAlloc(void);
535extern drmModeAtomicReqPtr drmModeAtomicDuplicate(drmModeAtomicReqPtr req);
536extern int drmModeAtomicMerge(drmModeAtomicReqPtr base,
537 drmModeAtomicReqPtr augment);
538extern void drmModeAtomicFree(drmModeAtomicReqPtr req);
539extern int drmModeAtomicGetCursor(drmModeAtomicReqPtr req);
540extern void drmModeAtomicSetCursor(drmModeAtomicReqPtr req, int cursor);
541extern int drmModeAtomicAddProperty(drmModeAtomicReqPtr req,
542 uint32_t object_id,
543 uint32_t property_id,
544 uint64_t value);
545extern int drmModeAtomicCommit(int fd,
546 drmModeAtomicReqPtr req,
547 uint32_t flags,
548 void *user_data);
549
Daniel Stone32471b22015-06-22 17:26:03 +0100550extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size,
551 uint32_t *id);
552extern int drmModeDestroyPropertyBlob(int fd, uint32_t id);
553
Keith Packardc4171532017-03-16 18:11:05 -0700554/*
555 * DRM mode lease APIs. These create and manage new drm_masters with
556 * access to a subset of the available DRM resources
557 */
558
559extern int drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id);
560
561typedef struct drmModeLesseeList {
562 uint32_t count;
Simon Ser31dc1482020-11-26 17:20:04 +0100563 uint32_t lessees[];
Keith Packardc4171532017-03-16 18:11:05 -0700564} drmModeLesseeListRes, *drmModeLesseeListPtr;
565
566extern drmModeLesseeListPtr drmModeListLessees(int fd);
567
568typedef struct drmModeObjectList {
569 uint32_t count;
Simon Ser31dc1482020-11-26 17:20:04 +0100570 uint32_t objects[];
Keith Packardc4171532017-03-16 18:11:05 -0700571} drmModeObjectListRes, *drmModeObjectListPtr;
572
573extern drmModeObjectListPtr drmModeGetLease(int fd);
574
575extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
Daniel Stone32471b22015-06-22 17:26:03 +0100576
Tapani Pälli1c205742015-08-07 10:37:56 +0300577#if defined(__cplusplus)
Tapani Pällicfee5212011-09-23 14:17:42 +0300578}
579#endif
David Herrmanfd39e612012-03-09 13:40:14 -0500580
581#endif