cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

drm_mode.h (37642B)


      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 definition to have a consistent
     40 * and standardized interface with user.
     41 * Userspace can refer to these structure definitions and UAPI formats
     42 * to communicate to driver
     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	__u32 connector_type_id;
    493
    494	/**
    495	 * @connection: Status of the connector.
    496	 *
    497	 * See enum drm_connector_status.
    498	 */
    499	__u32 connection;
    500	/** @mm_width: Width of the connected sink in millimeters. */
    501	__u32 mm_width;
    502	/** @mm_height: Height of the connected sink in millimeters. */
    503	__u32 mm_height;
    504	/**
    505	 * @subpixel: Subpixel order of the connected sink.
    506	 *
    507	 * See enum subpixel_order.
    508	 */
    509	__u32 subpixel;
    510
    511	/** @pad: Padding, must be zero. */
    512	__u32 pad;
    513};
    514
    515#define DRM_MODE_PROP_PENDING	(1<<0) /* deprecated, do not use */
    516#define DRM_MODE_PROP_RANGE	(1<<1)
    517#define DRM_MODE_PROP_IMMUTABLE	(1<<2)
    518#define DRM_MODE_PROP_ENUM	(1<<3) /* enumerated type with text strings */
    519#define DRM_MODE_PROP_BLOB	(1<<4)
    520#define DRM_MODE_PROP_BITMASK	(1<<5) /* bitmask of enumerated types */
    521
    522/* non-extended types: legacy bitmask, one bit per type: */
    523#define DRM_MODE_PROP_LEGACY_TYPE  ( \
    524		DRM_MODE_PROP_RANGE | \
    525		DRM_MODE_PROP_ENUM | \
    526		DRM_MODE_PROP_BLOB | \
    527		DRM_MODE_PROP_BITMASK)
    528
    529/* extended-types: rather than continue to consume a bit per type,
    530 * grab a chunk of the bits to use as integer type id.
    531 */
    532#define DRM_MODE_PROP_EXTENDED_TYPE	0x0000ffc0
    533#define DRM_MODE_PROP_TYPE(n)		((n) << 6)
    534#define DRM_MODE_PROP_OBJECT		DRM_MODE_PROP_TYPE(1)
    535#define DRM_MODE_PROP_SIGNED_RANGE	DRM_MODE_PROP_TYPE(2)
    536
    537/* the PROP_ATOMIC flag is used to hide properties from userspace that
    538 * is not aware of atomic properties.  This is mostly to work around
    539 * older userspace (DDX drivers) that read/write each prop they find,
    540 * witout being aware that this could be triggering a lengthy modeset.
    541 */
    542#define DRM_MODE_PROP_ATOMIC        0x80000000
    543
    544/**
    545 * struct drm_mode_property_enum - Description for an enum/bitfield entry.
    546 * @value: numeric value for this enum entry.
    547 * @name: symbolic name for this enum entry.
    548 *
    549 * See struct drm_property_enum for details.
    550 */
    551struct drm_mode_property_enum {
    552	__u64 value;
    553	char name[DRM_PROP_NAME_LEN];
    554};
    555
    556/**
    557 * struct drm_mode_get_property - Get property metadata.
    558 *
    559 * User-space can perform a GETPROPERTY ioctl to retrieve information about a
    560 * property. The same property may be attached to multiple objects, see
    561 * "Modeset Base Object Abstraction".
    562 *
    563 * The meaning of the @values_ptr field changes depending on the property type.
    564 * See &drm_property.flags for more details.
    565 *
    566 * The @enum_blob_ptr and @count_enum_blobs fields are only meaningful when the
    567 * property has the type &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK. For
    568 * backwards compatibility, the kernel will always set @count_enum_blobs to
    569 * zero when the property has the type &DRM_MODE_PROP_BLOB. User-space must
    570 * ignore these two fields if the property has a different type.
    571 *
    572 * User-space is expected to retrieve values and enums by performing this ioctl
    573 * at least twice: the first time to retrieve the number of elements, the
    574 * second time to retrieve the elements themselves.
    575 *
    576 * To retrieve the number of elements, set @count_values and @count_enum_blobs
    577 * to zero, then call the ioctl. @count_values will be updated with the number
    578 * of elements. If the property has the type &DRM_MODE_PROP_ENUM or
    579 * &DRM_MODE_PROP_BITMASK, @count_enum_blobs will be updated as well.
    580 *
    581 * To retrieve the elements themselves, allocate an array for @values_ptr and
    582 * set @count_values to its capacity. If the property has the type
    583 * &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK, allocate an array for
    584 * @enum_blob_ptr and set @count_enum_blobs to its capacity. Calling the ioctl
    585 * again will fill the arrays.
    586 */
    587struct drm_mode_get_property {
    588	/** @values_ptr: Pointer to a ``__u64`` array. */
    589	__u64 values_ptr;
    590	/** @enum_blob_ptr: Pointer to a struct drm_mode_property_enum array. */
    591	__u64 enum_blob_ptr;
    592
    593	/**
    594	 * @prop_id: Object ID of the property which should be retrieved. Set
    595	 * by the caller.
    596	 */
    597	__u32 prop_id;
    598	/**
    599	 * @flags: ``DRM_MODE_PROP_*`` bitfield. See &drm_property.flags for
    600	 * a definition of the flags.
    601	 */
    602	__u32 flags;
    603	/**
    604	 * @name: Symbolic property name. User-space should use this field to
    605	 * recognize properties.
    606	 */
    607	char name[DRM_PROP_NAME_LEN];
    608
    609	/** @count_values: Number of elements in @values_ptr. */
    610	__u32 count_values;
    611	/** @count_enum_blobs: Number of elements in @enum_blob_ptr. */
    612	__u32 count_enum_blobs;
    613};
    614
    615struct drm_mode_connector_set_property {
    616	__u64 value;
    617	__u32 prop_id;
    618	__u32 connector_id;
    619};
    620
    621#define DRM_MODE_OBJECT_CRTC 0xcccccccc
    622#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
    623#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
    624#define DRM_MODE_OBJECT_MODE 0xdededede
    625#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
    626#define DRM_MODE_OBJECT_FB 0xfbfbfbfb
    627#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
    628#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
    629#define DRM_MODE_OBJECT_ANY 0
    630
    631struct drm_mode_obj_get_properties {
    632	__u64 props_ptr;
    633	__u64 prop_values_ptr;
    634	__u32 count_props;
    635	__u32 obj_id;
    636	__u32 obj_type;
    637};
    638
    639struct drm_mode_obj_set_property {
    640	__u64 value;
    641	__u32 prop_id;
    642	__u32 obj_id;
    643	__u32 obj_type;
    644};
    645
    646struct drm_mode_get_blob {
    647	__u32 blob_id;
    648	__u32 length;
    649	__u64 data;
    650};
    651
    652struct drm_mode_fb_cmd {
    653	__u32 fb_id;
    654	__u32 width;
    655	__u32 height;
    656	__u32 pitch;
    657	__u32 bpp;
    658	__u32 depth;
    659	/* driver specific handle */
    660	__u32 handle;
    661};
    662
    663#define DRM_MODE_FB_INTERLACED	(1<<0) /* for interlaced framebuffers */
    664#define DRM_MODE_FB_MODIFIERS	(1<<1) /* enables ->modifer[] */
    665
    666/**
    667 * struct drm_mode_fb_cmd2 - Frame-buffer metadata.
    668 *
    669 * This struct holds frame-buffer metadata. There are two ways to use it:
    670 *
    671 * - User-space can fill this struct and perform a &DRM_IOCTL_MODE_ADDFB2
    672 *   ioctl to register a new frame-buffer. The new frame-buffer object ID will
    673 *   be set by the kernel in @fb_id.
    674 * - User-space can set @fb_id and perform a &DRM_IOCTL_MODE_GETFB2 ioctl to
    675 *   fetch metadata about an existing frame-buffer.
    676 *
    677 * In case of planar formats, this struct allows up to 4 buffer objects with
    678 * offsets and pitches per plane. The pitch and offset order is dictated by the
    679 * format FourCC as defined by ``drm_fourcc.h``, e.g. NV12 is described as:
    680 *
    681 *     YUV 4:2:0 image with a plane of 8 bit Y samples followed by an
    682 *     interleaved U/V plane containing 8 bit 2x2 subsampled colour difference
    683 *     samples.
    684 *
    685 * So it would consist of a Y plane at ``offsets[0]`` and a UV plane at
    686 * ``offsets[1]``.
    687 *
    688 * To accommodate tiled, compressed, etc formats, a modifier can be specified.
    689 * For more information see the "Format Modifiers" section. Note that even
    690 * though it looks like we have a modifier per-plane, we in fact do not. The
    691 * modifier for each plane must be identical. Thus all combinations of
    692 * different data layouts for multi-plane formats must be enumerated as
    693 * separate modifiers.
    694 *
    695 * All of the entries in @handles, @pitches, @offsets and @modifier must be
    696 * zero when unused. Warning, for @offsets and @modifier zero can't be used to
    697 * figure out whether the entry is used or not since it's a valid value (a zero
    698 * offset is common, and a zero modifier is &DRM_FORMAT_MOD_LINEAR).
    699 */
    700struct drm_mode_fb_cmd2 {
    701	/** @fb_id: Object ID of the frame-buffer. */
    702	__u32 fb_id;
    703	/** @width: Width of the frame-buffer. */
    704	__u32 width;
    705	/** @height: Height of the frame-buffer. */
    706	__u32 height;
    707	/**
    708	 * @pixel_format: FourCC format code, see ``DRM_FORMAT_*`` constants in
    709	 * ``drm_fourcc.h``.
    710	 */
    711	__u32 pixel_format;
    712	/**
    713	 * @flags: Frame-buffer flags (see &DRM_MODE_FB_INTERLACED and
    714	 * &DRM_MODE_FB_MODIFIERS).
    715	 */
    716	__u32 flags;
    717
    718	/**
    719	 * @handles: GEM buffer handle, one per plane. Set to 0 if the plane is
    720	 * unused. The same handle can be used for multiple planes.
    721	 */
    722	__u32 handles[4];
    723	/** @pitches: Pitch (aka. stride) in bytes, one per plane. */
    724	__u32 pitches[4];
    725	/** @offsets: Offset into the buffer in bytes, one per plane. */
    726	__u32 offsets[4];
    727	/**
    728	 * @modifier: Format modifier, one per plane. See ``DRM_FORMAT_MOD_*``
    729	 * constants in ``drm_fourcc.h``. All planes must use the same
    730	 * modifier. Ignored unless &DRM_MODE_FB_MODIFIERS is set in @flags.
    731	 */
    732	__u64 modifier[4];
    733};
    734
    735#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
    736#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
    737#define DRM_MODE_FB_DIRTY_FLAGS         0x03
    738
    739#define DRM_MODE_FB_DIRTY_MAX_CLIPS     256
    740
    741/*
    742 * Mark a region of a framebuffer as dirty.
    743 *
    744 * Some hardware does not automatically update display contents
    745 * as a hardware or software draw to a framebuffer. This ioctl
    746 * allows userspace to tell the kernel and the hardware what
    747 * regions of the framebuffer have changed.
    748 *
    749 * The kernel or hardware is free to update more then just the
    750 * region specified by the clip rects. The kernel or hardware
    751 * may also delay and/or coalesce several calls to dirty into a
    752 * single update.
    753 *
    754 * Userspace may annotate the updates, the annotates are a
    755 * promise made by the caller that the change is either a copy
    756 * of pixels or a fill of a single color in the region specified.
    757 *
    758 * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
    759 * the number of updated regions are half of num_clips given,
    760 * where the clip rects are paired in src and dst. The width and
    761 * height of each one of the pairs must match.
    762 *
    763 * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
    764 * promises that the region specified of the clip rects is filled
    765 * completely with a single color as given in the color argument.
    766 */
    767
    768struct drm_mode_fb_dirty_cmd {
    769	__u32 fb_id;
    770	__u32 flags;
    771	__u32 color;
    772	__u32 num_clips;
    773	__u64 clips_ptr;
    774};
    775
    776struct drm_mode_mode_cmd {
    777	__u32 connector_id;
    778	struct drm_mode_modeinfo mode;
    779};
    780
    781#define DRM_MODE_CURSOR_BO	0x01
    782#define DRM_MODE_CURSOR_MOVE	0x02
    783#define DRM_MODE_CURSOR_FLAGS	0x03
    784
    785/*
    786 * depending on the value in flags different members are used.
    787 *
    788 * CURSOR_BO uses
    789 *    crtc_id
    790 *    width
    791 *    height
    792 *    handle - if 0 turns the cursor off
    793 *
    794 * CURSOR_MOVE uses
    795 *    crtc_id
    796 *    x
    797 *    y
    798 */
    799struct drm_mode_cursor {
    800	__u32 flags;
    801	__u32 crtc_id;
    802	__s32 x;
    803	__s32 y;
    804	__u32 width;
    805	__u32 height;
    806	/* driver specific handle */
    807	__u32 handle;
    808};
    809
    810struct drm_mode_cursor2 {
    811	__u32 flags;
    812	__u32 crtc_id;
    813	__s32 x;
    814	__s32 y;
    815	__u32 width;
    816	__u32 height;
    817	/* driver specific handle */
    818	__u32 handle;
    819	__s32 hot_x;
    820	__s32 hot_y;
    821};
    822
    823struct drm_mode_crtc_lut {
    824	__u32 crtc_id;
    825	__u32 gamma_size;
    826
    827	/* pointers to arrays */
    828	__u64 red;
    829	__u64 green;
    830	__u64 blue;
    831};
    832
    833struct drm_color_ctm {
    834	/*
    835	 * Conversion matrix in S31.32 sign-magnitude
    836	 * (not two's complement!) format.
    837	 */
    838	__u64 matrix[9];
    839};
    840
    841struct drm_color_lut {
    842	/*
    843	 * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and
    844	 * 0xffff == 1.0.
    845	 */
    846	__u16 red;
    847	__u16 green;
    848	__u16 blue;
    849	__u16 reserved;
    850};
    851
    852/**
    853 * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
    854 *
    855 * HDR Metadata Infoframe as per CTA 861.G spec. This is expected
    856 * to match exactly with the spec.
    857 *
    858 * Userspace is expected to pass the metadata information as per
    859 * the format described in this structure.
    860 */
    861struct hdr_metadata_infoframe {
    862	/**
    863	 * @eotf: Electro-Optical Transfer Function (EOTF)
    864	 * used in the stream.
    865	 */
    866	__u8 eotf;
    867	/**
    868	 * @metadata_type: Static_Metadata_Descriptor_ID.
    869	 */
    870	__u8 metadata_type;
    871	/**
    872	 * @display_primaries: Color Primaries of the Data.
    873	 * These are coded as unsigned 16-bit values in units of
    874	 * 0.00002, where 0x0000 represents zero and 0xC350
    875	 * represents 1.0000.
    876	 * @display_primaries.x: X cordinate of color primary.
    877	 * @display_primaries.y: Y cordinate of color primary.
    878	 */
    879	struct {
    880		__u16 x, y;
    881		} display_primaries[3];
    882	/**
    883	 * @white_point: White Point of Colorspace Data.
    884	 * These are coded as unsigned 16-bit values in units of
    885	 * 0.00002, where 0x0000 represents zero and 0xC350
    886	 * represents 1.0000.
    887	 * @white_point.x: X cordinate of whitepoint of color primary.
    888	 * @white_point.y: Y cordinate of whitepoint of color primary.
    889	 */
    890	struct {
    891		__u16 x, y;
    892		} white_point;
    893	/**
    894	 * @max_display_mastering_luminance: Max Mastering Display Luminance.
    895	 * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
    896	 * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
    897	 */
    898	__u16 max_display_mastering_luminance;
    899	/**
    900	 * @min_display_mastering_luminance: Min Mastering Display Luminance.
    901	 * This value is coded as an unsigned 16-bit value in units of
    902	 * 0.0001 cd/m2, where 0x0001 represents 0.0001 cd/m2 and 0xFFFF
    903	 * represents 6.5535 cd/m2.
    904	 */
    905	__u16 min_display_mastering_luminance;
    906	/**
    907	 * @max_cll: Max Content Light Level.
    908	 * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
    909	 * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
    910	 */
    911	__u16 max_cll;
    912	/**
    913	 * @max_fall: Max Frame Average Light Level.
    914	 * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
    915	 * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
    916	 */
    917	__u16 max_fall;
    918};
    919
    920/**
    921 * struct hdr_output_metadata - HDR output metadata
    922 *
    923 * Metadata Information to be passed from userspace
    924 */
    925struct hdr_output_metadata {
    926	/**
    927	 * @metadata_type: Static_Metadata_Descriptor_ID.
    928	 */
    929	__u32 metadata_type;
    930	/**
    931	 * @hdmi_metadata_type1: HDR Metadata Infoframe.
    932	 */
    933	union {
    934		struct hdr_metadata_infoframe hdmi_metadata_type1;
    935	};
    936};
    937
    938#define DRM_MODE_PAGE_FLIP_EVENT 0x01
    939#define DRM_MODE_PAGE_FLIP_ASYNC 0x02
    940#define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4
    941#define DRM_MODE_PAGE_FLIP_TARGET_RELATIVE 0x8
    942#define DRM_MODE_PAGE_FLIP_TARGET (DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE | \
    943				   DRM_MODE_PAGE_FLIP_TARGET_RELATIVE)
    944#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT | \
    945				  DRM_MODE_PAGE_FLIP_ASYNC | \
    946				  DRM_MODE_PAGE_FLIP_TARGET)
    947
    948/*
    949 * Request a page flip on the specified crtc.
    950 *
    951 * This ioctl will ask KMS to schedule a page flip for the specified
    952 * crtc.  Once any pending rendering targeting the specified fb (as of
    953 * ioctl time) has completed, the crtc will be reprogrammed to display
    954 * that fb after the next vertical refresh.  The ioctl returns
    955 * immediately, but subsequent rendering to the current fb will block
    956 * in the execbuffer ioctl until the page flip happens.  If a page
    957 * flip is already pending as the ioctl is called, EBUSY will be
    958 * returned.
    959 *
    960 * Flag DRM_MODE_PAGE_FLIP_EVENT requests that drm sends back a vblank
    961 * event (see drm.h: struct drm_event_vblank) when the page flip is
    962 * done.  The user_data field passed in with this ioctl will be
    963 * returned as the user_data field in the vblank event struct.
    964 *
    965 * Flag DRM_MODE_PAGE_FLIP_ASYNC requests that the flip happen
    966 * 'as soon as possible', meaning that it not delay waiting for vblank.
    967 * This may cause tearing on the screen.
    968 *
    969 * The reserved field must be zero.
    970 */
    971
    972struct drm_mode_crtc_page_flip {
    973	__u32 crtc_id;
    974	__u32 fb_id;
    975	__u32 flags;
    976	__u32 reserved;
    977	__u64 user_data;
    978};
    979
    980/*
    981 * Request a page flip on the specified crtc.
    982 *
    983 * Same as struct drm_mode_crtc_page_flip, but supports new flags and
    984 * re-purposes the reserved field:
    985 *
    986 * The sequence field must be zero unless either of the
    987 * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is specified. When
    988 * the ABSOLUTE flag is specified, the sequence field denotes the absolute
    989 * vblank sequence when the flip should take effect. When the RELATIVE
    990 * flag is specified, the sequence field denotes the relative (to the
    991 * current one when the ioctl is called) vblank sequence when the flip
    992 * should take effect. NOTE: DRM_IOCTL_WAIT_VBLANK must still be used to
    993 * make sure the vblank sequence before the target one has passed before
    994 * calling this ioctl. The purpose of the
    995 * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is merely to clarify
    996 * the target for when code dealing with a page flip runs during a
    997 * vertical blank period.
    998 */
    999
   1000struct drm_mode_crtc_page_flip_target {
   1001	__u32 crtc_id;
   1002	__u32 fb_id;
   1003	__u32 flags;
   1004	__u32 sequence;
   1005	__u64 user_data;
   1006};
   1007
   1008/* create a dumb scanout buffer */
   1009struct drm_mode_create_dumb {
   1010	__u32 height;
   1011	__u32 width;
   1012	__u32 bpp;
   1013	__u32 flags;
   1014	/* handle, pitch, size will be returned */
   1015	__u32 handle;
   1016	__u32 pitch;
   1017	__u64 size;
   1018};
   1019
   1020/* set up for mmap of a dumb scanout buffer */
   1021struct drm_mode_map_dumb {
   1022	/** Handle for the object being mapped. */
   1023	__u32 handle;
   1024	__u32 pad;
   1025	/**
   1026	 * Fake offset to use for subsequent mmap call
   1027	 *
   1028	 * This is a fixed-size type for 32/64 compatibility.
   1029	 */
   1030	__u64 offset;
   1031};
   1032
   1033struct drm_mode_destroy_dumb {
   1034	__u32 handle;
   1035};
   1036
   1037/* page-flip flags are valid, plus: */
   1038#define DRM_MODE_ATOMIC_TEST_ONLY 0x0100
   1039#define DRM_MODE_ATOMIC_NONBLOCK  0x0200
   1040#define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400
   1041
   1042#define DRM_MODE_ATOMIC_FLAGS (\
   1043		DRM_MODE_PAGE_FLIP_EVENT |\
   1044		DRM_MODE_PAGE_FLIP_ASYNC |\
   1045		DRM_MODE_ATOMIC_TEST_ONLY |\
   1046		DRM_MODE_ATOMIC_NONBLOCK |\
   1047		DRM_MODE_ATOMIC_ALLOW_MODESET)
   1048
   1049struct drm_mode_atomic {
   1050	__u32 flags;
   1051	__u32 count_objs;
   1052	__u64 objs_ptr;
   1053	__u64 count_props_ptr;
   1054	__u64 props_ptr;
   1055	__u64 prop_values_ptr;
   1056	__u64 reserved;
   1057	__u64 user_data;
   1058};
   1059
   1060struct drm_format_modifier_blob {
   1061#define FORMAT_BLOB_CURRENT 1
   1062	/* Version of this blob format */
   1063	__u32 version;
   1064
   1065	/* Flags */
   1066	__u32 flags;
   1067
   1068	/* Number of fourcc formats supported */
   1069	__u32 count_formats;
   1070
   1071	/* Where in this blob the formats exist (in bytes) */
   1072	__u32 formats_offset;
   1073
   1074	/* Number of drm_format_modifiers */
   1075	__u32 count_modifiers;
   1076
   1077	/* Where in this blob the modifiers exist (in bytes) */
   1078	__u32 modifiers_offset;
   1079
   1080	/* __u32 formats[] */
   1081	/* struct drm_format_modifier modifiers[] */
   1082};
   1083
   1084struct drm_format_modifier {
   1085	/* Bitmask of formats in get_plane format list this info applies to. The
   1086	 * offset allows a sliding window of which 64 formats (bits).
   1087	 *
   1088	 * Some examples:
   1089	 * In today's world with < 65 formats, and formats 0, and 2 are
   1090	 * supported
   1091	 * 0x0000000000000005
   1092	 *		  ^-offset = 0, formats = 5
   1093	 *
   1094	 * If the number formats grew to 128, and formats 98-102 are
   1095	 * supported with the modifier:
   1096	 *
   1097	 * 0x0000007c00000000 0000000000000000
   1098	 *		  ^
   1099	 *		  |__offset = 64, formats = 0x7c00000000
   1100	 *
   1101	 */
   1102	__u64 formats;
   1103	__u32 offset;
   1104	__u32 pad;
   1105
   1106	/* The modifier that applies to the >get_plane format list bitmask. */
   1107	__u64 modifier;
   1108};
   1109
   1110/**
   1111 * struct drm_mode_create_blob - Create New blob property
   1112 *
   1113 * Create a new 'blob' data property, copying length bytes from data pointer,
   1114 * and returning new blob ID.
   1115 */
   1116struct drm_mode_create_blob {
   1117	/** @data: Pointer to data to copy. */
   1118	__u64 data;
   1119	/** @length: Length of data to copy. */
   1120	__u32 length;
   1121	/** @blob_id: Return: new property ID. */
   1122	__u32 blob_id;
   1123};
   1124
   1125/**
   1126 * struct drm_mode_destroy_blob - Destroy user blob
   1127 * @blob_id: blob_id to destroy
   1128 *
   1129 * Destroy a user-created blob property.
   1130 *
   1131 * User-space can release blobs as soon as they do not need to refer to them by
   1132 * their blob object ID.  For instance, if you are using a MODE_ID blob in an
   1133 * atomic commit and you will not make another commit re-using the same ID, you
   1134 * can destroy the blob as soon as the commit has been issued, without waiting
   1135 * for it to complete.
   1136 */
   1137struct drm_mode_destroy_blob {
   1138	__u32 blob_id;
   1139};
   1140
   1141/**
   1142 * struct drm_mode_create_lease - Create lease
   1143 *
   1144 * Lease mode resources, creating another drm_master.
   1145 *
   1146 * The @object_ids array must reference at least one CRTC, one connector and
   1147 * one plane if &DRM_CLIENT_CAP_UNIVERSAL_PLANES is enabled. Alternatively,
   1148 * the lease can be completely empty.
   1149 */
   1150struct drm_mode_create_lease {
   1151	/** @object_ids: Pointer to array of object ids (__u32) */
   1152	__u64 object_ids;
   1153	/** @object_count: Number of object ids */
   1154	__u32 object_count;
   1155	/** @flags: flags for new FD (O_CLOEXEC, etc) */
   1156	__u32 flags;
   1157
   1158	/** @lessee_id: Return: unique identifier for lessee. */
   1159	__u32 lessee_id;
   1160	/** @fd: Return: file descriptor to new drm_master file */
   1161	__u32 fd;
   1162};
   1163
   1164/**
   1165 * struct drm_mode_list_lessees - List lessees
   1166 *
   1167 * List lesses from a drm_master.
   1168 */
   1169struct drm_mode_list_lessees {
   1170	/**
   1171	 * @count_lessees: Number of lessees.
   1172	 *
   1173	 * On input, provides length of the array.
   1174	 * On output, provides total number. No
   1175	 * more than the input number will be written
   1176	 * back, so two calls can be used to get
   1177	 * the size and then the data.
   1178	 */
   1179	__u32 count_lessees;
   1180	/** @pad: Padding. */
   1181	__u32 pad;
   1182
   1183	/**
   1184	 * @lessees_ptr: Pointer to lessees.
   1185	 *
   1186	 * Pointer to __u64 array of lessee ids
   1187	 */
   1188	__u64 lessees_ptr;
   1189};
   1190
   1191/**
   1192 * struct drm_mode_get_lease - Get Lease
   1193 *
   1194 * Get leased objects.
   1195 */
   1196struct drm_mode_get_lease {
   1197	/**
   1198	 * @count_objects: Number of leased objects.
   1199	 *
   1200	 * On input, provides length of the array.
   1201	 * On output, provides total number. No
   1202	 * more than the input number will be written
   1203	 * back, so two calls can be used to get
   1204	 * the size and then the data.
   1205	 */
   1206	__u32 count_objects;
   1207	/** @pad: Padding. */
   1208	__u32 pad;
   1209
   1210	/**
   1211	 * @objects_ptr: Pointer to objects.
   1212	 *
   1213	 * Pointer to __u32 array of object ids.
   1214	 */
   1215	__u64 objects_ptr;
   1216};
   1217
   1218/**
   1219 * struct drm_mode_revoke_lease - Revoke lease
   1220 */
   1221struct drm_mode_revoke_lease {
   1222	/** @lessee_id: Unique ID of lessee */
   1223	__u32 lessee_id;
   1224};
   1225
   1226/**
   1227 * struct drm_mode_rect - Two dimensional rectangle.
   1228 * @x1: Horizontal starting coordinate (inclusive).
   1229 * @y1: Vertical starting coordinate (inclusive).
   1230 * @x2: Horizontal ending coordinate (exclusive).
   1231 * @y2: Vertical ending coordinate (exclusive).
   1232 *
   1233 * With drm subsystem using struct drm_rect to manage rectangular area this
   1234 * export it to user-space.
   1235 *
   1236 * Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS.
   1237 */
   1238struct drm_mode_rect {
   1239	__s32 x1;
   1240	__s32 y1;
   1241	__s32 x2;
   1242	__s32 y2;
   1243};
   1244
   1245#if defined(__cplusplus)
   1246}
   1247#endif
   1248
   1249#endif