File Index
Files and directories
Sign in
FILE

drm_mode.h

File preview with syntax highlighting.

linux-6.19.14/include/uapi/drm/drm_mode.h C
   1/*
   2 * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
   3 * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com>
   4 * Copyright (c) 2008 Red Hat Inc.
   5 * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
   6 * Copyright (c) 2007-2008 Intel Corporation
   7 *
   8 * Permission is hereby granted, free of charge, to any person obtaining a
   9 * copy of this software and associated documentation files (the "Software"),
  10 * to deal in the Software without restriction, including without limitation
  11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  12 * and/or sell copies of the Software, and to permit persons to whom the
  13 * Software is furnished to do so, subject to the following conditions:
  14 *
  15 * The above copyright notice and this permission notice shall be included in
  16 * all copies or substantial portions of the Software.
  17 *
  18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  24 * IN THE SOFTWARE.
  25 */
  26
  27#ifndef _DRM_MODE_H
  28#define _DRM_MODE_H
  29
  30#include "drm.h"
  31
  32#if defined(__cplusplus)
  33extern "C" {
  34#endif
  35
  36/**
  37 * DOC: overview
  38 *
  39 * DRM exposes many UAPI and structure definitions to have a consistent
  40 * and standardized interface with users.
  41 * Userspace can refer to these structure definitions and UAPI formats
  42 * to communicate to drivers.
  43 */
  44
  45#define DRM_CONNECTOR_NAME_LEN	32
  46#define DRM_DISPLAY_MODE_LEN	32
  47#define DRM_PROP_NAME_LEN	32
  48
  49#define DRM_MODE_TYPE_BUILTIN	(1<<0) /* deprecated */
  50#define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN) /* deprecated */
  51#define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN) /* deprecated */
  52#define DRM_MODE_TYPE_PREFERRED	(1<<3)
  53#define DRM_MODE_TYPE_DEFAULT	(1<<4) /* deprecated */
  54#define DRM_MODE_TYPE_USERDEF	(1<<5)
  55#define DRM_MODE_TYPE_DRIVER	(1<<6)
  56
  57#define DRM_MODE_TYPE_ALL	(DRM_MODE_TYPE_PREFERRED |	\
  58				 DRM_MODE_TYPE_USERDEF |	\
  59				 DRM_MODE_TYPE_DRIVER)
  60
  61/* Video mode flags */
  62/* bit compatible with the xrandr RR_ definitions (bits 0-13)
  63 *
  64 * ABI warning: Existing userspace really expects
  65 * the mode flags to match the xrandr definitions. Any
  66 * changes that don't match the xrandr definitions will
  67 * likely need a new client cap or some other mechanism
  68 * to avoid breaking existing userspace. This includes
  69 * allocating new flags in the previously unused bits!
  70 */
  71#define DRM_MODE_FLAG_PHSYNC			(1<<0)
  72#define DRM_MODE_FLAG_NHSYNC			(1<<1)
  73#define DRM_MODE_FLAG_PVSYNC			(1<<2)
  74#define DRM_MODE_FLAG_NVSYNC			(1<<3)
  75#define DRM_MODE_FLAG_INTERLACE			(1<<4)
  76#define DRM_MODE_FLAG_DBLSCAN			(1<<5)
  77#define DRM_MODE_FLAG_CSYNC			(1<<6)
  78#define DRM_MODE_FLAG_PCSYNC			(1<<7)
  79#define DRM_MODE_FLAG_NCSYNC			(1<<8)
  80#define DRM_MODE_FLAG_HSKEW			(1<<9) /* hskew provided */
  81#define DRM_MODE_FLAG_BCAST			(1<<10) /* deprecated */
  82#define DRM_MODE_FLAG_PIXMUX			(1<<11) /* deprecated */
  83#define DRM_MODE_FLAG_DBLCLK			(1<<12)
  84#define DRM_MODE_FLAG_CLKDIV2			(1<<13)
  85 /*
  86  * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX
  87  * (define not exposed to user space).
  88  */
  89#define DRM_MODE_FLAG_3D_MASK			(0x1f<<14)
  90#define  DRM_MODE_FLAG_3D_NONE		(0<<14)
  91#define  DRM_MODE_FLAG_3D_FRAME_PACKING		(1<<14)
  92#define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE	(2<<14)
  93#define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE	(3<<14)
  94#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL	(4<<14)
  95#define  DRM_MODE_FLAG_3D_L_DEPTH		(5<<14)
  96#define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH	(6<<14)
  97#define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)
  98#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14)
  99
 100/* Picture aspect ratio options */
 101#define DRM_MODE_PICTURE_ASPECT_NONE		0
 102#define DRM_MODE_PICTURE_ASPECT_4_3		1
 103#define DRM_MODE_PICTURE_ASPECT_16_9		2
 104#define DRM_MODE_PICTURE_ASPECT_64_27		3
 105#define DRM_MODE_PICTURE_ASPECT_256_135		4
 106
 107/* Content type options */
 108#define DRM_MODE_CONTENT_TYPE_NO_DATA		0
 109#define DRM_MODE_CONTENT_TYPE_GRAPHICS		1
 110#define DRM_MODE_CONTENT_TYPE_PHOTO		2
 111#define DRM_MODE_CONTENT_TYPE_CINEMA		3
 112#define DRM_MODE_CONTENT_TYPE_GAME		4
 113
 114/* Aspect ratio flag bitmask (4 bits 22:19) */
 115#define DRM_MODE_FLAG_PIC_AR_MASK		(0x0F<<19)
 116#define  DRM_MODE_FLAG_PIC_AR_NONE \
 117			(DRM_MODE_PICTURE_ASPECT_NONE<<19)
 118#define  DRM_MODE_FLAG_PIC_AR_4_3 \
 119			(DRM_MODE_PICTURE_ASPECT_4_3<<19)
 120#define  DRM_MODE_FLAG_PIC_AR_16_9 \
 121			(DRM_MODE_PICTURE_ASPECT_16_9<<19)
 122#define  DRM_MODE_FLAG_PIC_AR_64_27 \
 123			(DRM_MODE_PICTURE_ASPECT_64_27<<19)
 124#define  DRM_MODE_FLAG_PIC_AR_256_135 \
 125			(DRM_MODE_PICTURE_ASPECT_256_135<<19)
 126
 127#define  DRM_MODE_FLAG_ALL	(DRM_MODE_FLAG_PHSYNC |		\
 128				 DRM_MODE_FLAG_NHSYNC |		\
 129				 DRM_MODE_FLAG_PVSYNC |		\
 130				 DRM_MODE_FLAG_NVSYNC |		\
 131				 DRM_MODE_FLAG_INTERLACE |	\
 132				 DRM_MODE_FLAG_DBLSCAN |	\
 133				 DRM_MODE_FLAG_CSYNC |		\
 134				 DRM_MODE_FLAG_PCSYNC |		\
 135				 DRM_MODE_FLAG_NCSYNC |		\
 136				 DRM_MODE_FLAG_HSKEW |		\
 137				 DRM_MODE_FLAG_DBLCLK |		\
 138				 DRM_MODE_FLAG_CLKDIV2 |	\
 139				 DRM_MODE_FLAG_3D_MASK)
 140
 141/* DPMS flags */
 142/* bit compatible with the xorg definitions. */
 143#define DRM_MODE_DPMS_ON	0
 144#define DRM_MODE_DPMS_STANDBY	1
 145#define DRM_MODE_DPMS_SUSPEND	2
 146#define DRM_MODE_DPMS_OFF	3
 147
 148/* Scaling mode options */
 149#define DRM_MODE_SCALE_NONE		0 /* Unmodified timing (display or
 150					     software can still scale) */
 151#define DRM_MODE_SCALE_FULLSCREEN	1 /* Full screen, ignore aspect */
 152#define DRM_MODE_SCALE_CENTER		2 /* Centered, no scaling */
 153#define DRM_MODE_SCALE_ASPECT		3 /* Full screen, preserve aspect */
 154
 155/* Dithering mode options */
 156#define DRM_MODE_DITHERING_OFF	0
 157#define DRM_MODE_DITHERING_ON	1
 158#define DRM_MODE_DITHERING_AUTO 2
 159
 160/* Dirty info options */
 161#define DRM_MODE_DIRTY_OFF      0
 162#define DRM_MODE_DIRTY_ON       1
 163#define DRM_MODE_DIRTY_ANNOTATE 2
 164
 165/* Link Status options */
 166#define DRM_MODE_LINK_STATUS_GOOD	0
 167#define DRM_MODE_LINK_STATUS_BAD	1
 168
 169/*
 170 * DRM_MODE_ROTATE_<degrees>
 171 *
 172 * Signals that a drm plane is been rotated <degrees> degrees in counter
 173 * clockwise direction.
 174 *
 175 * This define is provided as a convenience, looking up the property id
 176 * using the name->prop id lookup is the preferred method.
 177 */
 178#define DRM_MODE_ROTATE_0       (1<<0)
 179#define DRM_MODE_ROTATE_90      (1<<1)
 180#define DRM_MODE_ROTATE_180     (1<<2)
 181#define DRM_MODE_ROTATE_270     (1<<3)
 182
 183/*
 184 * DRM_MODE_ROTATE_MASK
 185 *
 186 * Bitmask used to look for drm plane rotations.
 187 */
 188#define DRM_MODE_ROTATE_MASK (\
 189		DRM_MODE_ROTATE_0  | \
 190		DRM_MODE_ROTATE_90  | \
 191		DRM_MODE_ROTATE_180 | \
 192		DRM_MODE_ROTATE_270)
 193
 194/*
 195 * DRM_MODE_REFLECT_<axis>
 196 *
 197 * Signals that the contents of a drm plane is reflected along the <axis> axis,
 198 * in the same way as mirroring.
 199 * See kerneldoc chapter "Plane Composition Properties" for more details.
 200 *
 201 * This define is provided as a convenience, looking up the property id
 202 * using the name->prop id lookup is the preferred method.
 203 */
 204#define DRM_MODE_REFLECT_X      (1<<4)
 205#define DRM_MODE_REFLECT_Y      (1<<5)
 206
 207/*
 208 * DRM_MODE_REFLECT_MASK
 209 *
 210 * Bitmask used to look for drm plane reflections.
 211 */
 212#define DRM_MODE_REFLECT_MASK (\
 213		DRM_MODE_REFLECT_X | \
 214		DRM_MODE_REFLECT_Y)
 215
 216/* Content Protection Flags */
 217#define DRM_MODE_CONTENT_PROTECTION_UNDESIRED	0
 218#define DRM_MODE_CONTENT_PROTECTION_DESIRED     1
 219#define DRM_MODE_CONTENT_PROTECTION_ENABLED     2
 220
 221/**
 222 * struct drm_mode_modeinfo - Display mode information.
 223 * @clock: pixel clock in kHz
 224 * @hdisplay: horizontal display size
 225 * @hsync_start: horizontal sync start
 226 * @hsync_end: horizontal sync end
 227 * @htotal: horizontal total size
 228 * @hskew: horizontal skew
 229 * @vdisplay: vertical display size
 230 * @vsync_start: vertical sync start
 231 * @vsync_end: vertical sync end
 232 * @vtotal: vertical total size
 233 * @vscan: vertical scan
 234 * @vrefresh: approximate vertical refresh rate in Hz
 235 * @flags: bitmask of misc. flags, see DRM_MODE_FLAG_* defines
 236 * @type: bitmask of type flags, see DRM_MODE_TYPE_* defines
 237 * @name: string describing the mode resolution
 238 *
 239 * This is the user-space API display mode information structure. For the
 240 * kernel version see struct drm_display_mode.
 241 */
 242struct drm_mode_modeinfo {
 243	__u32 clock;
 244	__u16 hdisplay;
 245	__u16 hsync_start;
 246	__u16 hsync_end;
 247	__u16 htotal;
 248	__u16 hskew;
 249	__u16 vdisplay;
 250	__u16 vsync_start;
 251	__u16 vsync_end;
 252	__u16 vtotal;
 253	__u16 vscan;
 254
 255	__u32 vrefresh;
 256
 257	__u32 flags;
 258	__u32 type;
 259	char name[DRM_DISPLAY_MODE_LEN];
 260};
 261
 262struct drm_mode_card_res {
 263	__u64 fb_id_ptr;
 264	__u64 crtc_id_ptr;
 265	__u64 connector_id_ptr;
 266	__u64 encoder_id_ptr;
 267	__u32 count_fbs;
 268	__u32 count_crtcs;
 269	__u32 count_connectors;
 270	__u32 count_encoders;
 271	__u32 min_width;
 272	__u32 max_width;
 273	__u32 min_height;
 274	__u32 max_height;
 275};
 276
 277struct drm_mode_crtc {
 278	__u64 set_connectors_ptr;
 279	__u32 count_connectors;
 280
 281	__u32 crtc_id; /**< Id */
 282	__u32 fb_id; /**< Id of framebuffer */
 283
 284	__u32 x; /**< x Position on the framebuffer */
 285	__u32 y; /**< y Position on the framebuffer */
 286
 287	__u32 gamma_size;
 288	__u32 mode_valid;
 289	struct drm_mode_modeinfo mode;
 290};
 291
 292#define DRM_MODE_PRESENT_TOP_FIELD	(1<<0)
 293#define DRM_MODE_PRESENT_BOTTOM_FIELD	(1<<1)
 294
 295/* Planes blend with or override other bits on the CRTC */
 296struct drm_mode_set_plane {
 297	__u32 plane_id;
 298	__u32 crtc_id;
 299	__u32 fb_id; /* fb object contains surface format type */
 300	__u32 flags; /* see above flags */
 301
 302	/* Signed dest location allows it to be partially off screen */
 303	__s32 crtc_x;
 304	__s32 crtc_y;
 305	__u32 crtc_w;
 306	__u32 crtc_h;
 307
 308	/* Source values are 16.16 fixed point */
 309	__u32 src_x;
 310	__u32 src_y;
 311	__u32 src_h;
 312	__u32 src_w;
 313};
 314
 315/**
 316 * struct drm_mode_get_plane - Get plane metadata.
 317 *
 318 * Userspace can perform a GETPLANE ioctl to retrieve information about a
 319 * plane.
 320 *
 321 * To retrieve the number of formats supported, set @count_format_types to zero
 322 * and call the ioctl. @count_format_types will be updated with the value.
 323 *
 324 * To retrieve these formats, allocate an array with the memory needed to store
 325 * @count_format_types formats. Point @format_type_ptr to this array and call
 326 * the ioctl again (with @count_format_types still set to the value returned in
 327 * the first ioctl call).
 328 */
 329struct drm_mode_get_plane {
 330	/**
 331	 * @plane_id: Object ID of the plane whose information should be
 332	 * retrieved. Set by caller.
 333	 */
 334	__u32 plane_id;
 335
 336	/** @crtc_id: Object ID of the current CRTC. */
 337	__u32 crtc_id;
 338	/** @fb_id: Object ID of the current fb. */
 339	__u32 fb_id;
 340
 341	/**
 342	 * @possible_crtcs: Bitmask of CRTC's compatible with the plane. CRTC's
 343	 * are created and they receive an index, which corresponds to their
 344	 * position in the bitmask. Bit N corresponds to
 345	 * :ref:`CRTC index<crtc_index>` N.
 346	 */
 347	__u32 possible_crtcs;
 348	/** @gamma_size: Never used. */
 349	__u32 gamma_size;
 350
 351	/** @count_format_types: Number of formats. */
 352	__u32 count_format_types;
 353	/**
 354	 * @format_type_ptr: Pointer to ``__u32`` array of formats that are
 355	 * supported by the plane. These formats do not require modifiers.
 356	 */
 357	__u64 format_type_ptr;
 358};
 359
 360struct drm_mode_get_plane_res {
 361	__u64 plane_id_ptr;
 362	__u32 count_planes;
 363};
 364
 365#define DRM_MODE_ENCODER_NONE	0
 366#define DRM_MODE_ENCODER_DAC	1
 367#define DRM_MODE_ENCODER_TMDS	2
 368#define DRM_MODE_ENCODER_LVDS	3
 369#define DRM_MODE_ENCODER_TVDAC	4
 370#define DRM_MODE_ENCODER_VIRTUAL 5
 371#define DRM_MODE_ENCODER_DSI	6
 372#define DRM_MODE_ENCODER_DPMST	7
 373#define DRM_MODE_ENCODER_DPI	8
 374
 375struct drm_mode_get_encoder {
 376	__u32 encoder_id;
 377	__u32 encoder_type;
 378
 379	__u32 crtc_id; /**< Id of crtc */
 380
 381	__u32 possible_crtcs;
 382	__u32 possible_clones;
 383};
 384
 385/* This is for connectors with multiple signal types. */
 386/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
 387enum drm_mode_subconnector {
 388	DRM_MODE_SUBCONNECTOR_Automatic   = 0,  /* DVI-I, TV     */
 389	DRM_MODE_SUBCONNECTOR_Unknown     = 0,  /* DVI-I, TV, DP */
 390	DRM_MODE_SUBCONNECTOR_VGA	  = 1,  /*            DP */
 391	DRM_MODE_SUBCONNECTOR_DVID	  = 3,  /* DVI-I      DP */
 392	DRM_MODE_SUBCONNECTOR_DVIA	  = 4,  /* DVI-I         */
 393	DRM_MODE_SUBCONNECTOR_Composite   = 5,  /*        TV     */
 394	DRM_MODE_SUBCONNECTOR_SVIDEO	  = 6,  /*        TV     */
 395	DRM_MODE_SUBCONNECTOR_Component   = 8,  /*        TV     */
 396	DRM_MODE_SUBCONNECTOR_SCART	  = 9,  /*        TV     */
 397	DRM_MODE_SUBCONNECTOR_DisplayPort = 10, /*            DP */
 398	DRM_MODE_SUBCONNECTOR_HDMIA       = 11, /*            DP */
 399	DRM_MODE_SUBCONNECTOR_Native      = 15, /*            DP */
 400	DRM_MODE_SUBCONNECTOR_Wireless    = 18, /*            DP */
 401};
 402
 403#define DRM_MODE_CONNECTOR_Unknown	0
 404#define DRM_MODE_CONNECTOR_VGA		1
 405#define DRM_MODE_CONNECTOR_DVII		2
 406#define DRM_MODE_CONNECTOR_DVID		3
 407#define DRM_MODE_CONNECTOR_DVIA		4
 408#define DRM_MODE_CONNECTOR_Composite	5
 409#define DRM_MODE_CONNECTOR_SVIDEO	6
 410#define DRM_MODE_CONNECTOR_LVDS		7
 411#define DRM_MODE_CONNECTOR_Component	8
 412#define DRM_MODE_CONNECTOR_9PinDIN	9
 413#define DRM_MODE_CONNECTOR_DisplayPort	10
 414#define DRM_MODE_CONNECTOR_HDMIA	11
 415#define DRM_MODE_CONNECTOR_HDMIB	12
 416#define DRM_MODE_CONNECTOR_TV		13
 417#define DRM_MODE_CONNECTOR_eDP		14
 418#define DRM_MODE_CONNECTOR_VIRTUAL      15
 419#define DRM_MODE_CONNECTOR_DSI		16
 420#define DRM_MODE_CONNECTOR_DPI		17
 421#define DRM_MODE_CONNECTOR_WRITEBACK	18
 422#define DRM_MODE_CONNECTOR_SPI		19
 423#define DRM_MODE_CONNECTOR_USB		20
 424
 425/**
 426 * struct drm_mode_get_connector - Get connector metadata.
 427 *
 428 * User-space can perform a GETCONNECTOR ioctl to retrieve information about a
 429 * connector. User-space is expected to retrieve encoders, modes and properties
 430 * by performing this ioctl at least twice: the first time to retrieve the
 431 * number of elements, the second time to retrieve the elements themselves.
 432 *
 433 * To retrieve the number of elements, set @count_props and @count_encoders to
 434 * zero, set @count_modes to 1, and set @modes_ptr to a temporary struct
 435 * drm_mode_modeinfo element.
 436 *
 437 * To retrieve the elements, allocate arrays for @encoders_ptr, @modes_ptr,
 438 * @props_ptr and @prop_values_ptr, then set @count_modes, @count_props and
 439 * @count_encoders to their capacity.
 440 *
 441 * Performing the ioctl only twice may be racy: the number of elements may have
 442 * changed with a hotplug event in-between the two ioctls. User-space is
 443 * expected to retry the last ioctl until the number of elements stabilizes.
 444 * The kernel won't fill any array which doesn't have the expected length.
 445 *
 446 * **Force-probing a connector**
 447 *
 448 * If the @count_modes field is set to zero and the DRM client is the current
 449 * DRM master, the kernel will perform a forced probe on the connector to
 450 * refresh the connector status, modes and EDID. A forced-probe can be slow,
 451 * might cause flickering and the ioctl will block.
 452 *
 453 * User-space needs to force-probe connectors to ensure their metadata is
 454 * up-to-date at startup and after receiving a hot-plug event. User-space
 455 * may perform a forced-probe when the user explicitly requests it. User-space
 456 * shouldn't perform a forced-probe in other situations.
 457 */
 458struct drm_mode_get_connector {
 459	/** @encoders_ptr: Pointer to ``__u32`` array of object IDs. */
 460	__u64 encoders_ptr;
 461	/** @modes_ptr: Pointer to struct drm_mode_modeinfo array. */
 462	__u64 modes_ptr;
 463	/** @props_ptr: Pointer to ``__u32`` array of property IDs. */
 464	__u64 props_ptr;
 465	/** @prop_values_ptr: Pointer to ``__u64`` array of property values. */
 466	__u64 prop_values_ptr;
 467
 468	/** @count_modes: Number of modes. */
 469	__u32 count_modes;
 470	/** @count_props: Number of properties. */
 471	__u32 count_props;
 472	/** @count_encoders: Number of encoders. */
 473	__u32 count_encoders;
 474
 475	/** @encoder_id: Object ID of the current encoder. */
 476	__u32 encoder_id;
 477	/** @connector_id: Object ID of the connector. */
 478	__u32 connector_id;
 479	/**
 480	 * @connector_type: Type of the connector.
 481	 *
 482	 * See DRM_MODE_CONNECTOR_* defines.
 483	 */
 484	__u32 connector_type;
 485	/**
 486	 * @connector_type_id: Type-specific connector number.
 487	 *
 488	 * This is not an object ID. This is a per-type connector number. Each
 489	 * (type, type_id) combination is unique across all connectors of a DRM
 490	 * device.
 491	 *
 492	 * The (type, type_id) combination is not a stable identifier: the
 493	 * type_id can change depending on the driver probe order.
 494	 */
 495	__u32 connector_type_id;
 496
 497	/**
 498	 * @connection: Status of the connector.
 499	 *
 500	 * See enum drm_connector_status.
 501	 */
 502	__u32 connection;
 503	/** @mm_width: Width of the connected sink in millimeters. */
 504	__u32 mm_width;
 505	/** @mm_height: Height of the connected sink in millimeters. */
 506	__u32 mm_height;
 507	/**
 508	 * @subpixel: Subpixel order of the connected sink.
 509	 *
 510	 * See enum subpixel_order.
 511	 */
 512	__u32 subpixel;
 513
 514	/** @pad: Padding, must be zero. */
 515	__u32 pad;
 516};
 517
 518#define DRM_MODE_PROP_PENDING	(1<<0) /* deprecated, do not use */
 519#define DRM_MODE_PROP_RANGE	(1<<1)
 520#define DRM_MODE_PROP_IMMUTABLE	(1<<2)
 521#define DRM_MODE_PROP_ENUM	(1<<3) /* enumerated type with text strings */
 522#define DRM_MODE_PROP_BLOB	(1<<4)
 523#define DRM_MODE_PROP_BITMASK	(1<<5) /* bitmask of enumerated types */
 524
 525/* non-extended types: legacy bitmask, one bit per type: */
 526#define DRM_MODE_PROP_LEGACY_TYPE  ( \
 527		DRM_MODE_PROP_RANGE | \
 528		DRM_MODE_PROP_ENUM | \
 529		DRM_MODE_PROP_BLOB | \
 530		DRM_MODE_PROP_BITMASK)
 531
 532/* extended-types: rather than continue to consume a bit per type,
 533 * grab a chunk of the bits to use as integer type id.
 534 */
 535#define DRM_MODE_PROP_EXTENDED_TYPE	0x0000ffc0
 536#define DRM_MODE_PROP_TYPE(n)		((n) << 6)
 537#define DRM_MODE_PROP_OBJECT		DRM_MODE_PROP_TYPE(1)
 538#define DRM_MODE_PROP_SIGNED_RANGE	DRM_MODE_PROP_TYPE(2)
 539
 540/* the PROP_ATOMIC flag is used to hide properties from userspace that
 541 * is not aware of atomic properties.  This is mostly to work around
 542 * older userspace (DDX drivers) that read/write each prop they find,
 543 * without being aware that this could be triggering a lengthy modeset.
 544 */
 545#define DRM_MODE_PROP_ATOMIC        0x80000000
 546
 547/**
 548 * struct drm_mode_property_enum - Description for an enum/bitfield entry.
 549 * @value: numeric value for this enum entry.
 550 * @name: symbolic name for this enum entry.
 551 *
 552 * See struct drm_property_enum for details.
 553 */
 554struct drm_mode_property_enum {
 555	__u64 value;
 556	char name[DRM_PROP_NAME_LEN];
 557};
 558
 559/**
 560 * struct drm_mode_get_property - Get property metadata.
 561 *
 562 * User-space can perform a GETPROPERTY ioctl to retrieve information about a
 563 * property. The same property may be attached to multiple objects, see
 564 * "Modeset Base Object Abstraction".
 565 *
 566 * The meaning of the @values_ptr field changes depending on the property type.
 567 * See &drm_property.flags for more details.
 568 *
 569 * The @enum_blob_ptr and @count_enum_blobs fields are only meaningful when the
 570 * property has the type &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK. For
 571 * backwards compatibility, the kernel will always set @count_enum_blobs to
 572 * zero when the property has the type &DRM_MODE_PROP_BLOB. User-space must
 573 * ignore these two fields if the property has a different type.
 574 *
 575 * User-space is expected to retrieve values and enums by performing this ioctl
 576 * at least twice: the first time to retrieve the number of elements, the
 577 * second time to retrieve the elements themselves.
 578 *
 579 * To retrieve the number of elements, set @count_values and @count_enum_blobs
 580 * to zero, then call the ioctl. @count_values will be updated with the number
 581 * of elements. If the property has the type &DRM_MODE_PROP_ENUM or
 582 * &DRM_MODE_PROP_BITMASK, @count_enum_blobs will be updated as well.
 583 *
 584 * To retrieve the elements themselves, allocate an array for @values_ptr and
 585 * set @count_values to its capacity. If the property has the type
 586 * &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK, allocate an array for
 587 * @enum_blob_ptr and set @count_enum_blobs to its capacity. Calling the ioctl
 588 * again will fill the arrays.
 589 */
 590struct drm_mode_get_property {
 591	/** @values_ptr: Pointer to a ``__u64`` array. */
 592	__u64 values_ptr;
 593	/** @enum_blob_ptr: Pointer to a struct drm_mode_property_enum array. */
 594	__u64 enum_blob_ptr;
 595
 596	/**
 597	 * @prop_id: Object ID of the property which should be retrieved. Set
 598	 * by the caller.
 599	 */
 600	__u32 prop_id;
 601	/**
 602	 * @flags: ``DRM_MODE_PROP_*`` bitfield. See &drm_property.flags for
 603	 * a definition of the flags.
 604	 */
 605	__u32 flags;
 606	/**
 607	 * @name: Symbolic property name. User-space should use this field to
 608	 * recognize properties.
 609	 */
 610	char name[DRM_PROP_NAME_LEN];
 611
 612	/** @count_values: Number of elements in @values_ptr. */
 613	__u32 count_values;
 614	/** @count_enum_blobs: Number of elements in @enum_blob_ptr. */
 615	__u32 count_enum_blobs;
 616};
 617
 618struct drm_mode_connector_set_property {
 619	__u64 value;
 620	__u32 prop_id;
 621	__u32 connector_id;
 622};
 623
 624#define DRM_MODE_OBJECT_CRTC 0xcccccccc
 625#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
 626#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
 627#define DRM_MODE_OBJECT_MODE 0xdededede
 628#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
 629#define DRM_MODE_OBJECT_FB 0xfbfbfbfb
 630#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
 631#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
 632#define DRM_MODE_OBJECT_COLOROP 0xfafafafa
 633#define DRM_MODE_OBJECT_ANY 0
 634
 635struct drm_mode_obj_get_properties {
 636	__u64 props_ptr;
 637	__u64 prop_values_ptr;
 638	__u32 count_props;
 639	__u32 obj_id;
 640	__u32 obj_type;
 641};
 642
 643struct drm_mode_obj_set_property {
 644	__u64 value;
 645	__u32 prop_id;
 646	__u32 obj_id;
 647	__u32 obj_type;
 648};
 649
 650struct drm_mode_get_blob {
 651	__u32 blob_id;
 652	__u32 length;
 653	__u64 data;
 654};
 655
 656struct drm_mode_fb_cmd {
 657	__u32 fb_id;
 658	__u32 width;
 659	__u32 height;
 660	__u32 pitch;
 661	__u32 bpp;
 662	__u32 depth;
 663	/* driver specific handle */
 664	__u32 handle;
 665};
 666
 667#define DRM_MODE_FB_INTERLACED	(1<<0) /* for interlaced framebuffers */
 668#define DRM_MODE_FB_MODIFIERS	(1<<1) /* enables ->modifier[] */
 669
 670/**
 671 * struct drm_mode_fb_cmd2 - Frame-buffer metadata.
 672 *
 673 * This struct holds frame-buffer metadata. There are two ways to use it:
 674 *
 675 * - User-space can fill this struct and perform a &DRM_IOCTL_MODE_ADDFB2
 676 *   ioctl to register a new frame-buffer. The new frame-buffer object ID will
 677 *   be set by the kernel in @fb_id.
 678 * - User-space can set @fb_id and perform a &DRM_IOCTL_MODE_GETFB2 ioctl to
 679 *   fetch metadata about an existing frame-buffer.
 680 *
 681 * In case of planar formats, this struct allows up to 4 buffer objects with
 682 * offsets and pitches per plane. The pitch and offset order are dictated by
 683 * the format FourCC as defined by ``drm_fourcc.h``, e.g. NV12 is described as:
 684 *
 685 *     YUV 4:2:0 image with a plane of 8-bit Y samples followed by an
 686 *     interleaved U/V plane containing 8-bit 2x2 subsampled colour difference
 687 *     samples.
 688 *
 689 * So it would consist of a Y plane at ``offsets[0]`` and a UV plane at
 690 * ``offsets[1]``.
 691 *
 692 * To accommodate tiled, compressed, etc formats, a modifier can be specified.
 693 * For more information see the "Format Modifiers" section. Note that even
 694 * though it looks like we have a modifier per-plane, we in fact do not. The
 695 * modifier for each plane must be identical. Thus all combinations of
 696 * different data layouts for multi-plane formats must be enumerated as
 697 * separate modifiers.
 698 *
 699 * All of the entries in @handles, @pitches, @offsets and @modifier must be
 700 * zero when unused. Warning, for @offsets and @modifier zero can't be used to
 701 * figure out whether the entry is used or not since it's a valid value (a zero
 702 * offset is common, and a zero modifier is &DRM_FORMAT_MOD_LINEAR).
 703 */
 704struct drm_mode_fb_cmd2 {
 705	/** @fb_id: Object ID of the frame-buffer. */
 706	__u32 fb_id;
 707	/** @width: Width of the frame-buffer. */
 708	__u32 width;
 709	/** @height: Height of the frame-buffer. */
 710	__u32 height;
 711	/**
 712	 * @pixel_format: FourCC format code, see ``DRM_FORMAT_*`` constants in
 713	 * ``drm_fourcc.h``.
 714	 */
 715	__u32 pixel_format;
 716	/**
 717	 * @flags: Frame-buffer flags (see &DRM_MODE_FB_INTERLACED and
 718	 * &DRM_MODE_FB_MODIFIERS).
 719	 */
 720	__u32 flags;
 721
 722	/**
 723	 * @handles: GEM buffer handle, one per plane. Set to 0 if the plane is
 724	 * unused. The same handle can be used for multiple planes.
 725	 */
 726	__u32 handles[4];
 727	/** @pitches: Pitch (aka. stride) in bytes, one per plane. */
 728	__u32 pitches[4];
 729	/** @offsets: Offset into the buffer in bytes, one per plane. */
 730	__u32 offsets[4];
 731	/**
 732	 * @modifier: Format modifier, one per plane. See ``DRM_FORMAT_MOD_*``
 733	 * constants in ``drm_fourcc.h``. All planes must use the same
 734	 * modifier. Ignored unless &DRM_MODE_FB_MODIFIERS is set in @flags.
 735	 */
 736	__u64 modifier[4];
 737};
 738
 739#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
 740#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
 741#define DRM_MODE_FB_DIRTY_FLAGS         0x03
 742
 743#define DRM_MODE_FB_DIRTY_MAX_CLIPS     256
 744
 745/*
 746 * Mark a region of a framebuffer as dirty.
 747 *
 748 * Some hardware does not automatically update display contents
 749 * as a hardware or software draw to a framebuffer. This ioctl
 750 * allows userspace to tell the kernel and the hardware what
 751 * regions of the framebuffer have changed.
 752 *
 753 * The kernel or hardware is free to update more then just the
 754 * region specified by the clip rects. The kernel or hardware
 755 * may also delay and/or coalesce several calls to dirty into a
 756 * single update.
 757 *
 758 * Userspace may annotate the updates, the annotates are a
 759 * promise made by the caller that the change is either a copy
 760 * of pixels or a fill of a single color in the region specified.
 761 *
 762 * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
 763 * the number of updated regions are half of num_clips given,
 764 * where the clip rects are paired in src and dst. The width and
 765 * height of each one of the pairs must match.
 766 *
 767 * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
 768 * promises that the region specified of the clip rects is filled
 769 * completely with a single color as given in the color argument.
 770 */
 771
 772struct drm_mode_fb_dirty_cmd {
 773	__u32 fb_id;
 774	__u32 flags;
 775	__u32 color;
 776	__u32 num_clips;
 777	__u64 clips_ptr;
 778};
 779
 780struct drm_mode_mode_cmd {
 781	__u32 connector_id;
 782	struct drm_mode_modeinfo mode;
 783};
 784
 785#define DRM_MODE_CURSOR_BO	0x01
 786#define DRM_MODE_CURSOR_MOVE	0x02
 787#define DRM_MODE_CURSOR_FLAGS	0x03
 788
 789/*
 790 * depending on the value in flags different members are used.
 791 *
 792 * CURSOR_BO uses
 793 *    crtc_id
 794 *    width
 795 *    height
 796 *    handle - if 0 turns the cursor off
 797 *
 798 * CURSOR_MOVE uses
 799 *    crtc_id
 800 *    x
 801 *    y
 802 */
 803struct drm_mode_cursor {
 804	__u32 flags;
 805	__u32 crtc_id;
 806	__s32 x;
 807	__s32 y;
 808	__u32 width;
 809	__u32 height;
 810	/* driver specific handle */
 811	__u32 handle;
 812};
 813
 814struct drm_mode_cursor2 {
 815	__u32 flags;
 816	__u32 crtc_id;
 817	__s32 x;
 818	__s32 y;
 819	__u32 width;
 820	__u32 height;
 821	/* driver specific handle */
 822	__u32 handle;
 823	__s32 hot_x;
 824	__s32 hot_y;
 825};
 826
 827struct drm_mode_crtc_lut {
 828	__u32 crtc_id;
 829	__u32 gamma_size;
 830
 831	/* pointers to arrays */
 832	__u64 red;
 833	__u64 green;
 834	__u64 blue;
 835};
 836
 837struct drm_color_ctm {
 838	/*
 839	 * Conversion matrix in S31.32 sign-magnitude
 840	 * (not two's complement!) format.
 841	 *
 842	 * out   matrix    in
 843	 * |R|   |0 1 2|   |R|
 844	 * |G| = |3 4 5| x |G|
 845	 * |B|   |6 7 8|   |B|
 846	 */
 847	__u64 matrix[9];
 848};
 849
 850struct drm_color_ctm_3x4 {
 851	/*
 852	 * Conversion matrix with 3x4 dimensions in S31.32 sign-magnitude
 853	 * (not two's complement!) format.
 854	 *
 855	 * out   matrix          in
 856	 * |R|   |0  1  2  3 |   | R |
 857	 * |G| = |4  5  6  7 | x | G |
 858	 * |B|   |8  9  10 11|   | B |
 859	 *                       |1.0|
 860	 */
 861	__u64 matrix[12];
 862};
 863
 864struct drm_color_lut {
 865	/*
 866	 * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and
 867	 * 0xffff == 1.0.
 868	 */
 869	__u16 red;
 870	__u16 green;
 871	__u16 blue;
 872	__u16 reserved;
 873};
 874
 875/*
 876 * struct drm_color_lut32
 877 *
 878 * 32-bit per channel color LUT entry, similar to drm_color_lut.
 879 */
 880struct drm_color_lut32 {
 881	__u32 red;
 882	__u32 green;
 883	__u32 blue;
 884	__u32 reserved;
 885};
 886
 887/**
 888 * enum drm_colorop_type - Type of color operation
 889 *
 890 * drm_colorops can be of many different types. Each type behaves differently
 891 * and defines a different set of properties. This enum defines all types and
 892 * gives a high-level description.
 893 */
 894enum drm_colorop_type {
 895	/**
 896	 * @DRM_COLOROP_1D_CURVE:
 897	 *
 898	 * enum string "1D Curve"
 899	 *
 900	 * A 1D curve that is being applied to all color channels. The
 901	 * curve is specified via the CURVE_1D_TYPE colorop property.
 902	 */
 903	DRM_COLOROP_1D_CURVE,
 904
 905	/**
 906	 * @DRM_COLOROP_1D_LUT:
 907	 *
 908	 * enum string "1D LUT"
 909	 *
 910	 * A simple 1D LUT of uniformly spaced &drm_color_lut32 entries,
 911	 * packed into a blob via the DATA property. The driver's
 912	 * expected LUT size is advertised via the SIZE property.
 913	 *
 914	 * The DATA blob is an array of struct drm_color_lut32 with size
 915	 * of "size".
 916	 */
 917	DRM_COLOROP_1D_LUT,
 918
 919	/**
 920	 * @DRM_COLOROP_CTM_3X4:
 921	 *
 922	 * enum string "3x4 Matrix"
 923	 *
 924	 * A 3x4 matrix. Its values are specified via the
 925	 * &drm_color_ctm_3x4 struct provided via the DATA property.
 926	 *
 927	 * The DATA blob is a float[12]:
 928	 * out   matrix          in
 929	 * | R |   | 0  1  2  3  |   | R |
 930	 * | G | = | 4  5  6  7  | x | G |
 931	 * | B |   | 8  9  10 12 |   | B |
 932	 */
 933	DRM_COLOROP_CTM_3X4,
 934
 935	/**
 936	 * @DRM_COLOROP_MULTIPLIER:
 937	 *
 938	 * enum string "Multiplier"
 939	 *
 940	 * A simple multiplier, applied to all color values. The
 941	 * multiplier is specified as a S31.32 via the MULTIPLIER
 942	 * property.
 943	 */
 944	DRM_COLOROP_MULTIPLIER,
 945
 946	/**
 947	 * @DRM_COLOROP_3D_LUT:
 948	 *
 949	 * enum string "3D LUT"
 950	 *
 951	 * A 3D LUT of &drm_color_lut32 entries,
 952	 * packed into a blob via the DATA property. The driver's expected
 953	 * LUT size is advertised via the SIZE property, i.e., a 3D LUT with
 954	 * 17x17x17 entries will have SIZE set to 17.
 955	 *
 956	 * The DATA blob is a 3D array of struct drm_color_lut32 with dimension
 957	 * length of "size".
 958	 * The LUT elements are traversed like so:
 959	 *
 960	 *   for B in range 0..n
 961	 *     for G in range 0..n
 962	 *       for R in range 0..n
 963	 *        index = R + n * (G + n * B)
 964	 *         color = lut3d[index]
 965	 */
 966	DRM_COLOROP_3D_LUT,
 967};
 968
 969/**
 970 * enum drm_colorop_lut3d_interpolation_type - type of 3DLUT interpolation
 971 */
 972enum drm_colorop_lut3d_interpolation_type {
 973	/**
 974	 * @DRM_COLOROP_LUT3D_INTERPOLATION_TETRAHEDRAL:
 975	 *
 976	 * Tetrahedral 3DLUT interpolation
 977	 */
 978	DRM_COLOROP_LUT3D_INTERPOLATION_TETRAHEDRAL,
 979};
 980
 981/**
 982 * enum drm_colorop_lut1d_interpolation_type - type of interpolation for 1D LUTs
 983 */
 984enum drm_colorop_lut1d_interpolation_type {
 985	/**
 986	 * @DRM_COLOROP_LUT1D_INTERPOLATION_LINEAR:
 987	 *
 988	 * Linear interpolation. Values between points of the LUT will be
 989	 * linearly interpolated.
 990	 */
 991	DRM_COLOROP_LUT1D_INTERPOLATION_LINEAR,
 992};
 993
 994/**
 995 * struct drm_plane_size_hint - Plane size hints
 996 * @width: The width of the plane in pixel
 997 * @height: The height of the plane in pixel
 998 *
 999 * The plane SIZE_HINTS property blob contains an
1000 * array of struct drm_plane_size_hint.
1001 */
1002struct drm_plane_size_hint {
1003	__u16 width;
1004	__u16 height;
1005};
1006
1007/**
1008 * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
1009 *
1010 * HDR Metadata Infoframe as per CTA 861.G spec. This is expected
1011 * to match exactly with the spec.
1012 *
1013 * Userspace is expected to pass the metadata information as per
1014 * the format described in this structure.
1015 */
1016struct hdr_metadata_infoframe {
1017	/**
1018	 * @eotf: Electro-Optical Transfer Function (EOTF)
1019	 * used in the stream.
1020	 */
1021	__u8 eotf;
1022	/**
1023	 * @metadata_type: Static_Metadata_Descriptor_ID.
1024	 */
1025	__u8 metadata_type;
1026	/**
1027	 * @display_primaries: Color Primaries of the Data.
1028	 * These are coded as unsigned 16-bit values in units of
1029	 * 0.00002, where 0x0000 represents zero and 0xC350
1030	 * represents 1.0000.
1031	 * @display_primaries.x: X coordinate of color primary.
1032	 * @display_primaries.y: Y coordinate of color primary.
1033	 */
1034	struct {
1035		__u16 x, y;
1036	} display_primaries[3];
1037	/**
1038	 * @white_point: White Point of Colorspace Data.
1039	 * These are coded as unsigned 16-bit values in units of
1040	 * 0.00002, where 0x0000 represents zero and 0xC350
1041	 * represents 1.0000.
1042	 * @white_point.x: X coordinate of whitepoint of color primary.
1043	 * @white_point.y: Y coordinate of whitepoint of color primary.
1044	 */
1045	struct {
1046		__u16 x, y;
1047	} white_point;
1048	/**
1049	 * @max_display_mastering_luminance: Max Mastering Display Luminance.
1050	 * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
1051	 * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
1052	 */
1053	__u16 max_display_mastering_luminance;
1054	/**
1055	 * @min_display_mastering_luminance: Min Mastering Display Luminance.
1056	 * This value is coded as an unsigned 16-bit value in units of
1057	 * 0.0001 cd/m2, where 0x0001 represents 0.0001 cd/m2 and 0xFFFF
1058	 * represents 6.5535 cd/m2.
1059	 */
1060	__u16 min_display_mastering_luminance;
1061	/**
1062	 * @max_cll: Max Content Light Level.
1063	 * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
1064	 * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
1065	 */
1066	__u16 max_cll;
1067	/**
1068	 * @max_fall: Max Frame Average Light Level.
1069	 * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
1070	 * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
1071	 */
1072	__u16 max_fall;
1073};
1074
1075/**
1076 * struct hdr_output_metadata - HDR output metadata
1077 *
1078 * Metadata Information to be passed from userspace
1079 */
1080struct hdr_output_metadata {
1081	/**
1082	 * @metadata_type: Static_Metadata_Descriptor_ID.
1083	 */
1084	__u32 metadata_type;
1085	/**
1086	 * @hdmi_metadata_type1: HDR Metadata Infoframe.
1087	 */
1088	union {
1089		struct hdr_metadata_infoframe hdmi_metadata_type1;
1090	};
1091};
1092
1093/**
1094 * DRM_MODE_PAGE_FLIP_EVENT
1095 *
1096 * Request that the kernel sends back a vblank event (see
1097 * struct drm_event_vblank) with the &DRM_EVENT_FLIP_COMPLETE type when the
1098 * page-flip is done.
1099 *
1100 * When used with atomic uAPI, one event will be delivered per CRTC included in
1101 * the atomic commit. A CRTC is included in an atomic commit if one of its
1102 * properties is set, or if a property is set on a connector or plane linked
1103 * via the CRTC_ID property to the CRTC. At least one CRTC must be included,
1104 * and all pulled in CRTCs must be either previously or newly powered on (in
1105 * other words, a powered off CRTC which stays off cannot be included in the
1106 * atomic commit).
1107 */
1108#define DRM_MODE_PAGE_FLIP_EVENT 0x01
1109/**
1110 * DRM_MODE_PAGE_FLIP_ASYNC
1111 *
1112 * Request that the page-flip is performed as soon as possible, ie. with no
1113 * delay due to waiting for vblank. This may cause tearing to be visible on
1114 * the screen.
1115 *
1116 * When used with atomic uAPI, the driver will return an error if the hardware
1117 * doesn't support performing an asynchronous page-flip for this update.
1118 * User-space should handle this, e.g. by falling back to a regular page-flip.
1119 *
1120 * Note, some hardware might need to perform one last synchronous page-flip
1121 * before being able to switch to asynchronous page-flips. As an exception,
1122 * the driver will return success even though that first page-flip is not
1123 * asynchronous.
1124 */
1125#define DRM_MODE_PAGE_FLIP_ASYNC 0x02
1126#define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4
1127#define DRM_MODE_PAGE_FLIP_TARGET_RELATIVE 0x8
1128#define DRM_MODE_PAGE_FLIP_TARGET (DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE | \
1129				   DRM_MODE_PAGE_FLIP_TARGET_RELATIVE)
1130/**
1131 * DRM_MODE_PAGE_FLIP_FLAGS
1132 *
1133 * Bitmask of flags suitable for &drm_mode_crtc_page_flip_target.flags.
1134 */
1135#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT | \
1136				  DRM_MODE_PAGE_FLIP_ASYNC | \
1137				  DRM_MODE_PAGE_FLIP_TARGET)
1138
1139/*
1140 * Request a page flip on the specified crtc.
1141 *
1142 * This ioctl will ask KMS to schedule a page flip for the specified
1143 * crtc.  Once any pending rendering targeting the specified fb (as of
1144 * ioctl time) has completed, the crtc will be reprogrammed to display
1145 * that fb after the next vertical refresh.  The ioctl returns
1146 * immediately, but subsequent rendering to the current fb will block
1147 * in the execbuffer ioctl until the page flip happens.  If a page
1148 * flip is already pending as the ioctl is called, EBUSY will be
1149 * returned.
1150 *
1151 * Flag DRM_MODE_PAGE_FLIP_EVENT requests that drm sends back a vblank
1152 * event (see drm.h: struct drm_event_vblank) when the page flip is
1153 * done.  The user_data field passed in with this ioctl will be
1154 * returned as the user_data field in the vblank event struct.
1155 *
1156 * Flag DRM_MODE_PAGE_FLIP_ASYNC requests that the flip happen
1157 * 'as soon as possible', meaning that it not delay waiting for vblank.
1158 * This may cause tearing on the screen.
1159 *
1160 * The reserved field must be zero.
1161 */
1162
1163struct drm_mode_crtc_page_flip {
1164	__u32 crtc_id;
1165	__u32 fb_id;
1166	__u32 flags;
1167	__u32 reserved;
1168	__u64 user_data;
1169};
1170
1171/*
1172 * Request a page flip on the specified crtc.
1173 *
1174 * Same as struct drm_mode_crtc_page_flip, but supports new flags and
1175 * re-purposes the reserved field:
1176 *
1177 * The sequence field must be zero unless either of the
1178 * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is specified. When
1179 * the ABSOLUTE flag is specified, the sequence field denotes the absolute
1180 * vblank sequence when the flip should take effect. When the RELATIVE
1181 * flag is specified, the sequence field denotes the relative (to the
1182 * current one when the ioctl is called) vblank sequence when the flip
1183 * should take effect. NOTE: DRM_IOCTL_WAIT_VBLANK must still be used to
1184 * make sure the vblank sequence before the target one has passed before
1185 * calling this ioctl. The purpose of the
1186 * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is merely to clarify
1187 * the target for when code dealing with a page flip runs during a
1188 * vertical blank period.
1189 */
1190
1191struct drm_mode_crtc_page_flip_target {
1192	__u32 crtc_id;
1193	__u32 fb_id;
1194	__u32 flags;
1195	__u32 sequence;
1196	__u64 user_data;
1197};
1198
1199/**
1200 * struct drm_mode_create_dumb - Create a KMS dumb buffer for scanout.
1201 * @height: buffer height in pixels
1202 * @width: buffer width in pixels
1203 * @bpp: color mode
1204 * @flags: must be zero
1205 * @handle: buffer object handle
1206 * @pitch: number of bytes between two consecutive lines
1207 * @size: size of the whole buffer in bytes
1208 *
1209 * User-space fills @height, @width, @bpp and @flags. If the IOCTL succeeds,
1210 * the kernel fills @handle, @pitch and @size.
1211 *
1212 * The value of @bpp is a color-mode number describing a specific format
1213 * or a variant thereof. The value often corresponds to the number of bits
1214 * per pixel for most modes, although there are exceptions. Each color mode
1215 * maps to a DRM format plus a number of modes with similar pixel layout.
1216 * Framebuffer layout is always linear.
1217 *
1218 * Support for all modes and formats is optional. Even if dumb-buffer
1219 * creation with a certain color mode succeeds, it is not guaranteed that
1220 * the DRM driver supports any of the related formats. Most drivers support
1221 * a color mode of 32 with a format of DRM_FORMAT_XRGB8888 on their primary
1222 * plane.
1223 *
1224 * +------------+------------------------+------------------------+
1225 * | Color mode | Framebuffer format     | Compatible formats     |
1226 * +============+========================+========================+
1227 * |     32     |  * DRM_FORMAT_XRGB8888 |  * DRM_FORMAT_BGRX8888 |
1228 * |            |                        |  * DRM_FORMAT_RGBX8888 |
1229 * |            |                        |  * DRM_FORMAT_XBGR8888 |
1230 * +------------+------------------------+------------------------+
1231 * |     24     |  * DRM_FORMAT_RGB888   |  * DRM_FORMAT_BGR888   |
1232 * +------------+------------------------+------------------------+
1233 * |     16     |  * DRM_FORMAT_RGB565   |  * DRM_FORMAT_BGR565   |
1234 * +------------+------------------------+------------------------+
1235 * |     15     |  * DRM_FORMAT_XRGB1555 |  * DRM_FORMAT_BGRX1555 |
1236 * |            |                        |  * DRM_FORMAT_RGBX1555 |
1237 * |            |                        |  * DRM_FORMAT_XBGR1555 |
1238 * +------------+------------------------+------------------------+
1239 * |      8     |  * DRM_FORMAT_C8       |  * DRM_FORMAT_D8       |
1240 * |            |                        |  * DRM_FORMAT_R8       |
1241 * +------------+------------------------+------------------------+
1242 * |      4     |  * DRM_FORMAT_C4       |  * DRM_FORMAT_D4       |
1243 * |            |                        |  * DRM_FORMAT_R4       |
1244 * +------------+------------------------+------------------------+
1245 * |      2     |  * DRM_FORMAT_C2       |  * DRM_FORMAT_D2       |
1246 * |            |                        |  * DRM_FORMAT_R2       |
1247 * +------------+------------------------+------------------------+
1248 * |      1     |  * DRM_FORMAT_C1       |  * DRM_FORMAT_D1       |
1249 * |            |                        |  * DRM_FORMAT_R1       |
1250 * +------------+------------------------+------------------------+
1251 *
1252 * Color modes of 10, 12, 15, 30 and 64 are only supported for use by
1253 * legacy user space. Please don't use them in new code. Other modes
1254 * are not support.
1255 *
1256 * Do not attempt to allocate anything but linear framebuffer memory
1257 * with single-plane RGB data. Allocation of other framebuffer
1258 * layouts requires dedicated ioctls in the respective DRM driver.
1259 */
1260struct drm_mode_create_dumb {
1261	__u32 height;
1262	__u32 width;
1263	__u32 bpp;
1264	__u32 flags;
1265
1266	__u32 handle;
1267	__u32 pitch;
1268	__u64 size;
1269};
1270
1271/* set up for mmap of a dumb scanout buffer */
1272struct drm_mode_map_dumb {
1273	/** Handle for the object being mapped. */
1274	__u32 handle;
1275	__u32 pad;
1276	/**
1277	 * Fake offset to use for subsequent mmap call
1278	 *
1279	 * This is a fixed-size type for 32/64 compatibility.
1280	 */
1281	__u64 offset;
1282};
1283
1284struct drm_mode_destroy_dumb {
1285	__u32 handle;
1286};
1287
1288/**
1289 * DRM_MODE_ATOMIC_TEST_ONLY
1290 *
1291 * Do not apply the atomic commit, instead check whether the hardware supports
1292 * this configuration.
1293 *
1294 * See &drm_mode_config_funcs.atomic_check for more details on test-only
1295 * commits.
1296 */
1297#define DRM_MODE_ATOMIC_TEST_ONLY 0x0100
1298/**
1299 * DRM_MODE_ATOMIC_NONBLOCK
1300 *
1301 * Do not block while applying the atomic commit. The &DRM_IOCTL_MODE_ATOMIC
1302 * IOCTL returns immediately instead of waiting for the changes to be applied
1303 * in hardware. Note, the driver will still check that the update can be
1304 * applied before retuning.
1305 */
1306#define DRM_MODE_ATOMIC_NONBLOCK  0x0200
1307/**
1308 * DRM_MODE_ATOMIC_ALLOW_MODESET
1309 *
1310 * Allow the update to result in temporary or transient visible artifacts while
1311 * the update is being applied. Applying the update may also take significantly
1312 * more time than a page flip. All visual artifacts will disappear by the time
1313 * the update is completed, as signalled through the vblank event's timestamp
1314 * (see struct drm_event_vblank).
1315 *
1316 * This flag must be set when the KMS update might cause visible artifacts.
1317 * Without this flag such KMS update will return a EINVAL error. What kind of
1318 * update may cause visible artifacts depends on the driver and the hardware.
1319 * User-space that needs to know beforehand if an update might cause visible
1320 * artifacts can use &DRM_MODE_ATOMIC_TEST_ONLY without
1321 * &DRM_MODE_ATOMIC_ALLOW_MODESET to see if it fails.
1322 *
1323 * To the best of the driver's knowledge, visual artifacts are guaranteed to
1324 * not appear when this flag is not set. Some sinks might display visual
1325 * artifacts outside of the driver's control.
1326 */
1327#define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400
1328
1329/**
1330 * DRM_MODE_ATOMIC_FLAGS
1331 *
1332 * Bitfield of flags accepted by the &DRM_IOCTL_MODE_ATOMIC IOCTL in
1333 * &drm_mode_atomic.flags.
1334 */
1335#define DRM_MODE_ATOMIC_FLAGS (\
1336		DRM_MODE_PAGE_FLIP_EVENT |\
1337		DRM_MODE_PAGE_FLIP_ASYNC |\
1338		DRM_MODE_ATOMIC_TEST_ONLY |\
1339		DRM_MODE_ATOMIC_NONBLOCK |\
1340		DRM_MODE_ATOMIC_ALLOW_MODESET)
1341
1342struct drm_mode_atomic {
1343	__u32 flags;
1344	__u32 count_objs;
1345	__u64 objs_ptr;
1346	__u64 count_props_ptr;
1347	__u64 props_ptr;
1348	__u64 prop_values_ptr;
1349	__u64 reserved;
1350	__u64 user_data;
1351};
1352
1353struct drm_format_modifier_blob {
1354#define FORMAT_BLOB_CURRENT 1
1355	/* Version of this blob format */
1356	__u32 version;
1357
1358	/* Flags */
1359	__u32 flags;
1360
1361	/* Number of fourcc formats supported */
1362	__u32 count_formats;
1363
1364	/* Where in this blob the formats exist (in bytes) */
1365	__u32 formats_offset;
1366
1367	/* Number of drm_format_modifiers */
1368	__u32 count_modifiers;
1369
1370	/* Where in this blob the modifiers exist (in bytes) */
1371	__u32 modifiers_offset;
1372
1373	/* __u32 formats[] */
1374	/* struct drm_format_modifier modifiers[] */
1375};
1376
1377struct drm_format_modifier {
1378	/* Bitmask of formats in get_plane format list this info applies to. The
1379	 * offset allows a sliding window of which 64 formats (bits).
1380	 *
1381	 * Some examples:
1382	 * In today's world with < 65 formats, and formats 0, and 2 are
1383	 * supported
1384	 * 0x0000000000000005
1385	 *		  ^-offset = 0, formats = 5
1386	 *
1387	 * If the number formats grew to 128, and formats 98-102 are
1388	 * supported with the modifier:
1389	 *
1390	 * 0x0000007c00000000 0000000000000000
1391	 *		  ^
1392	 *		  |__offset = 64, formats = 0x7c00000000
1393	 *
1394	 */
1395	__u64 formats;
1396	__u32 offset;
1397	__u32 pad;
1398
1399	/* The modifier that applies to the >get_plane format list bitmask. */
1400	__u64 modifier;
1401};
1402
1403/**
1404 * struct drm_mode_create_blob - Create New blob property
1405 *
1406 * Create a new 'blob' data property, copying length bytes from data pointer,
1407 * and returning new blob ID.
1408 */
1409struct drm_mode_create_blob {
1410	/** @data: Pointer to data to copy. */
1411	__u64 data;
1412	/** @length: Length of data to copy. */
1413	__u32 length;
1414	/** @blob_id: Return: new property ID. */
1415	__u32 blob_id;
1416};
1417
1418/**
1419 * struct drm_mode_destroy_blob - Destroy user blob
1420 * @blob_id: blob_id to destroy
1421 *
1422 * Destroy a user-created blob property.
1423 *
1424 * User-space can release blobs as soon as they do not need to refer to them by
1425 * their blob object ID.  For instance, if you are using a MODE_ID blob in an
1426 * atomic commit and you will not make another commit re-using the same ID, you
1427 * can destroy the blob as soon as the commit has been issued, without waiting
1428 * for it to complete.
1429 */
1430struct drm_mode_destroy_blob {
1431	__u32 blob_id;
1432};
1433
1434/**
1435 * struct drm_mode_create_lease - Create lease
1436 *
1437 * Lease mode resources, creating another drm_master.
1438 *
1439 * The @object_ids array must reference at least one CRTC, one connector and
1440 * one plane if &DRM_CLIENT_CAP_UNIVERSAL_PLANES is enabled. Alternatively,
1441 * the lease can be completely empty.
1442 */
1443struct drm_mode_create_lease {
1444	/** @object_ids: Pointer to array of object ids (__u32) */
1445	__u64 object_ids;
1446	/** @object_count: Number of object ids */
1447	__u32 object_count;
1448	/** @flags: flags for new FD (O_CLOEXEC, etc) */
1449	__u32 flags;
1450
1451	/** @lessee_id: Return: unique identifier for lessee. */
1452	__u32 lessee_id;
1453	/** @fd: Return: file descriptor to new drm_master file */
1454	__u32 fd;
1455};
1456
1457/**
1458 * struct drm_mode_list_lessees - List lessees
1459 *
1460 * List lesses from a drm_master.
1461 */
1462struct drm_mode_list_lessees {
1463	/**
1464	 * @count_lessees: Number of lessees.
1465	 *
1466	 * On input, provides length of the array.
1467	 * On output, provides total number. No
1468	 * more than the input number will be written
1469	 * back, so two calls can be used to get
1470	 * the size and then the data.
1471	 */
1472	__u32 count_lessees;
1473	/** @pad: Padding. */
1474	__u32 pad;
1475
1476	/**
1477	 * @lessees_ptr: Pointer to lessees.
1478	 *
1479	 * Pointer to __u64 array of lessee ids
1480	 */
1481	__u64 lessees_ptr;
1482};
1483
1484/**
1485 * struct drm_mode_get_lease - Get Lease
1486 *
1487 * Get leased objects.
1488 */
1489struct drm_mode_get_lease {
1490	/**
1491	 * @count_objects: Number of leased objects.
1492	 *
1493	 * On input, provides length of the array.
1494	 * On output, provides total number. No
1495	 * more than the input number will be written
1496	 * back, so two calls can be used to get
1497	 * the size and then the data.
1498	 */
1499	__u32 count_objects;
1500	/** @pad: Padding. */
1501	__u32 pad;
1502
1503	/**
1504	 * @objects_ptr: Pointer to objects.
1505	 *
1506	 * Pointer to __u32 array of object ids.
1507	 */
1508	__u64 objects_ptr;
1509};
1510
1511/**
1512 * struct drm_mode_revoke_lease - Revoke lease
1513 */
1514struct drm_mode_revoke_lease {
1515	/** @lessee_id: Unique ID of lessee */
1516	__u32 lessee_id;
1517};
1518
1519/**
1520 * struct drm_mode_rect - Two dimensional rectangle.
1521 * @x1: Horizontal starting coordinate (inclusive).
1522 * @y1: Vertical starting coordinate (inclusive).
1523 * @x2: Horizontal ending coordinate (exclusive).
1524 * @y2: Vertical ending coordinate (exclusive).
1525 *
1526 * With drm subsystem using struct drm_rect to manage rectangular area this
1527 * export it to user-space.
1528 *
1529 * Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS.
1530 */
1531struct drm_mode_rect {
1532	__s32 x1;
1533	__s32 y1;
1534	__s32 x2;
1535	__s32 y2;
1536};
1537
1538/**
1539 * struct drm_mode_closefb
1540 * @fb_id: Framebuffer ID.
1541 * @pad: Must be zero.
1542 */
1543struct drm_mode_closefb {
1544	__u32 fb_id;
1545	__u32 pad;
1546};
1547
1548#if defined(__cplusplus)
1549}
1550#endif
1551
1552#endif
~/ Read-only file preview.