1620 lines · 48.8 KB · C
RawDownload
/* SPDX-License-Identifier: MIT *//* * Copyright (c) 2007 Dave Airlie <airlied@linux.ie> * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com> * Copyright (c) 2008 Red Hat Inc. * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA * Copyright (c) 2007-2008 Intel Corporation */ #ifndef _DRM_MODE_H#define _DRM_MODE_H #include <linux/bits.h>#include <linux/const.h> #include "drm.h" #if defined(__cplusplus)extern "C" {#endif /** * DOC: overview * * DRM exposes many UAPI and structure definitions to have a consistent * and standardized interface with users. * Userspace can refer to these structure definitions and UAPI formats * to communicate to drivers. */ #define DRM_CONNECTOR_NAME_LEN	32#define DRM_DISPLAY_MODE_LEN	32#define DRM_PROP_NAME_LEN	32 #define DRM_MODE_TYPE_BUILTIN	(1<<0) /* deprecated */#define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN) /* deprecated */#define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN) /* deprecated */#define DRM_MODE_TYPE_PREFERRED	(1<<3)#define DRM_MODE_TYPE_DEFAULT	(1<<4) /* deprecated */#define DRM_MODE_TYPE_USERDEF	(1<<5)#define DRM_MODE_TYPE_DRIVER	(1<<6) #define DRM_MODE_TYPE_ALL	(DRM_MODE_TYPE_PREFERRED |	\				 DRM_MODE_TYPE_USERDEF |	\				 DRM_MODE_TYPE_DRIVER) /* Video mode flags *//* bit compatible with the xrandr RR_ definitions (bits 0-13) * * ABI warning: Existing userspace really expects * the mode flags to match the xrandr definitions. Any * changes that don't match the xrandr definitions will * likely need a new client cap or some other mechanism * to avoid breaking existing userspace. This includes * allocating new flags in the previously unused bits! */#define DRM_MODE_FLAG_PHSYNC			(1<<0)#define DRM_MODE_FLAG_NHSYNC			(1<<1)#define DRM_MODE_FLAG_PVSYNC			(1<<2)#define DRM_MODE_FLAG_NVSYNC			(1<<3)#define DRM_MODE_FLAG_INTERLACE			(1<<4)#define DRM_MODE_FLAG_DBLSCAN			(1<<5)#define DRM_MODE_FLAG_CSYNC			(1<<6)#define DRM_MODE_FLAG_PCSYNC			(1<<7)#define DRM_MODE_FLAG_NCSYNC			(1<<8)#define DRM_MODE_FLAG_HSKEW			(1<<9) /* hskew provided */#define DRM_MODE_FLAG_BCAST			(1<<10) /* deprecated */#define DRM_MODE_FLAG_PIXMUX			(1<<11) /* deprecated */#define DRM_MODE_FLAG_DBLCLK			(1<<12)#define DRM_MODE_FLAG_CLKDIV2			(1<<13) /*  * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX  * (define not exposed to user space).  */#define DRM_MODE_FLAG_3D_MASK			(0x1f<<14)#define  DRM_MODE_FLAG_3D_NONE		(0<<14)#define  DRM_MODE_FLAG_3D_FRAME_PACKING		(1<<14)#define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE	(2<<14)#define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE	(3<<14)#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL	(4<<14)#define  DRM_MODE_FLAG_3D_L_DEPTH		(5<<14)#define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH	(6<<14)#define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14) /* Picture aspect ratio options */#define DRM_MODE_PICTURE_ASPECT_NONE		0#define DRM_MODE_PICTURE_ASPECT_4_3		1#define DRM_MODE_PICTURE_ASPECT_16_9		2#define DRM_MODE_PICTURE_ASPECT_64_27		3#define DRM_MODE_PICTURE_ASPECT_256_135		4 /* Content type options */#define DRM_MODE_CONTENT_TYPE_NO_DATA		0#define DRM_MODE_CONTENT_TYPE_GRAPHICS		1#define DRM_MODE_CONTENT_TYPE_PHOTO		2#define DRM_MODE_CONTENT_TYPE_CINEMA		3#define DRM_MODE_CONTENT_TYPE_GAME		4 /* Aspect ratio flag bitmask (4 bits 22:19) */#define DRM_MODE_FLAG_PIC_AR_MASK		(0x0F<<19)#define  DRM_MODE_FLAG_PIC_AR_NONE \			(DRM_MODE_PICTURE_ASPECT_NONE<<19)#define  DRM_MODE_FLAG_PIC_AR_4_3 \			(DRM_MODE_PICTURE_ASPECT_4_3<<19)#define  DRM_MODE_FLAG_PIC_AR_16_9 \			(DRM_MODE_PICTURE_ASPECT_16_9<<19)#define  DRM_MODE_FLAG_PIC_AR_64_27 \			(DRM_MODE_PICTURE_ASPECT_64_27<<19)#define  DRM_MODE_FLAG_PIC_AR_256_135 \			(DRM_MODE_PICTURE_ASPECT_256_135<<19) #define  DRM_MODE_FLAG_ALL	(DRM_MODE_FLAG_PHSYNC |		\				 DRM_MODE_FLAG_NHSYNC |		\				 DRM_MODE_FLAG_PVSYNC |		\				 DRM_MODE_FLAG_NVSYNC |		\				 DRM_MODE_FLAG_INTERLACE |	\				 DRM_MODE_FLAG_DBLSCAN |	\				 DRM_MODE_FLAG_CSYNC |		\				 DRM_MODE_FLAG_PCSYNC |		\				 DRM_MODE_FLAG_NCSYNC |		\				 DRM_MODE_FLAG_HSKEW |		\				 DRM_MODE_FLAG_DBLCLK |		\				 DRM_MODE_FLAG_CLKDIV2 |	\				 DRM_MODE_FLAG_3D_MASK) /* DPMS flags *//* bit compatible with the xorg definitions. */#define DRM_MODE_DPMS_ON	0#define DRM_MODE_DPMS_STANDBY	1#define DRM_MODE_DPMS_SUSPEND	2#define DRM_MODE_DPMS_OFF	3 /* Scaling mode options */#define DRM_MODE_SCALE_NONE		0 /* Unmodified timing (display or					     software can still scale) */#define DRM_MODE_SCALE_FULLSCREEN	1 /* Full screen, ignore aspect */#define DRM_MODE_SCALE_CENTER		2 /* Centered, no scaling */#define DRM_MODE_SCALE_ASPECT		3 /* Full screen, preserve aspect */ /* Dithering mode options */#define DRM_MODE_DITHERING_OFF	0#define DRM_MODE_DITHERING_ON	1#define DRM_MODE_DITHERING_AUTO 2 /* Dirty info options */#define DRM_MODE_DIRTY_OFF      0#define DRM_MODE_DIRTY_ON       1#define DRM_MODE_DIRTY_ANNOTATE 2 /* Link Status options */#define DRM_MODE_LINK_STATUS_GOOD	0#define DRM_MODE_LINK_STATUS_BAD	1 /* Panel type property */#define DRM_MODE_PANEL_TYPE_UNKNOWN	0#define DRM_MODE_PANEL_TYPE_OLED	1#define DRM_MODE_PANEL_TYPE_LCD		2 /* * DRM_MODE_ROTATE_<degrees> * * Signals that a drm plane is been rotated <degrees> degrees in counter * clockwise direction. * * This define is provided as a convenience, looking up the property id * using the name->prop id lookup is the preferred method. */#define DRM_MODE_ROTATE_0       (1<<0)#define DRM_MODE_ROTATE_90      (1<<1)#define DRM_MODE_ROTATE_180     (1<<2)#define DRM_MODE_ROTATE_270     (1<<3) /* * DRM_MODE_ROTATE_MASK * * Bitmask used to look for drm plane rotations. */#define DRM_MODE_ROTATE_MASK (\		DRM_MODE_ROTATE_0  | \		DRM_MODE_ROTATE_90  | \		DRM_MODE_ROTATE_180 | \		DRM_MODE_ROTATE_270) /* * DRM_MODE_REFLECT_<axis> * * Signals that the contents of a drm plane is reflected along the <axis> axis, * in the same way as mirroring. * See kerneldoc chapter "Plane Composition Properties" for more details. * * This define is provided as a convenience, looking up the property id * using the name->prop id lookup is the preferred method. */#define DRM_MODE_REFLECT_X      (1<<4)#define DRM_MODE_REFLECT_Y      (1<<5) /* * DRM_MODE_REFLECT_MASK * * Bitmask used to look for drm plane reflections. */#define DRM_MODE_REFLECT_MASK (\		DRM_MODE_REFLECT_X | \		DRM_MODE_REFLECT_Y) /* Content Protection Flags */#define DRM_MODE_CONTENT_PROTECTION_UNDESIRED	0#define DRM_MODE_CONTENT_PROTECTION_DESIRED     1#define DRM_MODE_CONTENT_PROTECTION_ENABLED     2 /** * struct drm_mode_modeinfo - Display mode information. * @clock: pixel clock in kHz * @hdisplay: horizontal display size * @hsync_start: horizontal sync start * @hsync_end: horizontal sync end * @htotal: horizontal total size * @hskew: horizontal skew * @vdisplay: vertical display size * @vsync_start: vertical sync start * @vsync_end: vertical sync end * @vtotal: vertical total size * @vscan: vertical scan * @vrefresh: approximate vertical refresh rate in Hz * @flags: bitmask of misc. flags, see DRM_MODE_FLAG_* defines * @type: bitmask of type flags, see DRM_MODE_TYPE_* defines * @name: string describing the mode resolution * * This is the user-space API display mode information structure. For the * kernel version see struct drm_display_mode. */struct drm_mode_modeinfo {	__u32 clock;	__u16 hdisplay;	__u16 hsync_start;	__u16 hsync_end;	__u16 htotal;	__u16 hskew;	__u16 vdisplay;	__u16 vsync_start;	__u16 vsync_end;	__u16 vtotal;	__u16 vscan; 	__u32 vrefresh; 	__u32 flags;	__u32 type;	char name[DRM_DISPLAY_MODE_LEN];}; struct drm_mode_card_res {	__u64 fb_id_ptr;	__u64 crtc_id_ptr;	__u64 connector_id_ptr;	__u64 encoder_id_ptr;	__u32 count_fbs;	__u32 count_crtcs;	__u32 count_connectors;	__u32 count_encoders;	__u32 min_width;	__u32 max_width;	__u32 min_height;	__u32 max_height;}; struct drm_mode_crtc {	__u64 set_connectors_ptr;	__u32 count_connectors; 	__u32 crtc_id; /**< Id */	__u32 fb_id; /**< Id of framebuffer */ 	__u32 x; /**< x Position on the framebuffer */	__u32 y; /**< y Position on the framebuffer */ 	__u32 gamma_size;	__u32 mode_valid;	struct drm_mode_modeinfo mode;}; #define DRM_MODE_PRESENT_TOP_FIELD	(1<<0)#define DRM_MODE_PRESENT_BOTTOM_FIELD	(1<<1) /* Planes blend with or override other bits on the CRTC */struct drm_mode_set_plane {	__u32 plane_id;	__u32 crtc_id;	__u32 fb_id; /* fb object contains surface format type */	__u32 flags; /* see above flags */ 	/* Signed dest location allows it to be partially off screen */	__s32 crtc_x;	__s32 crtc_y;	__u32 crtc_w;	__u32 crtc_h; 	/* Source values are 16.16 fixed point */	__u32 src_x;	__u32 src_y;	__u32 src_h;	__u32 src_w;}; /** * struct drm_mode_get_plane - Get plane metadata. * * Userspace can perform a GETPLANE ioctl to retrieve information about a * plane. * * To retrieve the number of formats supported, set @count_format_types to zero * and call the ioctl. @count_format_types will be updated with the value. * * To retrieve these formats, allocate an array with the memory needed to store * @count_format_types formats. Point @format_type_ptr to this array and call * the ioctl again (with @count_format_types still set to the value returned in * the first ioctl call). */struct drm_mode_get_plane {	/**	 * @plane_id: Object ID of the plane whose information should be	 * retrieved. Set by caller.	 */	__u32 plane_id; 	/** @crtc_id: Object ID of the current CRTC. */	__u32 crtc_id;	/** @fb_id: Object ID of the current fb. */	__u32 fb_id; 	/**	 * @possible_crtcs: Bitmask of CRTC's compatible with the plane. CRTC's	 * are created and they receive an index, which corresponds to their	 * position in the bitmask. Bit N corresponds to	 * :ref:`CRTC index<crtc_index>` N.	 */	__u32 possible_crtcs;	/** @gamma_size: Never used. */	__u32 gamma_size; 	/** @count_format_types: Number of formats. */	__u32 count_format_types;	/**	 * @format_type_ptr: Pointer to ``__u32`` array of formats that are	 * supported by the plane. These formats do not require modifiers.	 */	__u64 format_type_ptr;}; struct drm_mode_get_plane_res {	__u64 plane_id_ptr;	__u32 count_planes;}; #define DRM_MODE_ENCODER_NONE	0#define DRM_MODE_ENCODER_DAC	1#define DRM_MODE_ENCODER_TMDS	2#define DRM_MODE_ENCODER_LVDS	3#define DRM_MODE_ENCODER_TVDAC	4#define DRM_MODE_ENCODER_VIRTUAL 5#define DRM_MODE_ENCODER_DSI	6#define DRM_MODE_ENCODER_DPMST	7#define DRM_MODE_ENCODER_DPI	8 struct drm_mode_get_encoder {	__u32 encoder_id;	__u32 encoder_type; 	__u32 crtc_id; /**< Id of crtc */ 	__u32 possible_crtcs;	__u32 possible_clones;}; /* This is for connectors with multiple signal types. *//* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */enum drm_mode_subconnector {	DRM_MODE_SUBCONNECTOR_Automatic   = 0,  /* DVI-I, TV     */	DRM_MODE_SUBCONNECTOR_Unknown     = 0,  /* DVI-I, TV, DP */	DRM_MODE_SUBCONNECTOR_VGA	  = 1,  /*            DP */	DRM_MODE_SUBCONNECTOR_DVID	  = 3,  /* DVI-I      DP */	DRM_MODE_SUBCONNECTOR_DVIA	  = 4,  /* DVI-I         */	DRM_MODE_SUBCONNECTOR_Composite   = 5,  /*        TV     */	DRM_MODE_SUBCONNECTOR_SVIDEO	  = 6,  /*        TV     */	DRM_MODE_SUBCONNECTOR_Component   = 8,  /*        TV     */	DRM_MODE_SUBCONNECTOR_SCART	  = 9,  /*        TV     */	DRM_MODE_SUBCONNECTOR_DisplayPort = 10, /*            DP */	DRM_MODE_SUBCONNECTOR_HDMIA       = 11, /*            DP */	DRM_MODE_SUBCONNECTOR_Native      = 15, /*            DP */	DRM_MODE_SUBCONNECTOR_Wireless    = 18, /*            DP */}; #define DRM_MODE_CONNECTOR_Unknown	0#define DRM_MODE_CONNECTOR_VGA		1#define DRM_MODE_CONNECTOR_DVII		2#define DRM_MODE_CONNECTOR_DVID		3#define DRM_MODE_CONNECTOR_DVIA		4#define DRM_MODE_CONNECTOR_Composite	5#define DRM_MODE_CONNECTOR_SVIDEO	6#define DRM_MODE_CONNECTOR_LVDS		7#define DRM_MODE_CONNECTOR_Component	8#define DRM_MODE_CONNECTOR_9PinDIN	9#define DRM_MODE_CONNECTOR_DisplayPort	10#define DRM_MODE_CONNECTOR_HDMIA	11#define DRM_MODE_CONNECTOR_HDMIB	12#define DRM_MODE_CONNECTOR_TV		13#define DRM_MODE_CONNECTOR_eDP		14#define DRM_MODE_CONNECTOR_VIRTUAL      15#define DRM_MODE_CONNECTOR_DSI		16#define DRM_MODE_CONNECTOR_DPI		17#define DRM_MODE_CONNECTOR_WRITEBACK	18#define DRM_MODE_CONNECTOR_SPI		19#define DRM_MODE_CONNECTOR_USB		20 /** * struct drm_mode_get_connector - Get connector metadata. * * User-space can perform a GETCONNECTOR ioctl to retrieve information about a * connector. User-space is expected to retrieve encoders, modes and properties * by performing this ioctl at least twice: the first time to retrieve the * number of elements, the second time to retrieve the elements themselves. * * To retrieve the number of elements, set @count_props and @count_encoders to * zero, set @count_modes to 1, and set @modes_ptr to a temporary struct * drm_mode_modeinfo element. * * To retrieve the elements, allocate arrays for @encoders_ptr, @modes_ptr, * @props_ptr and @prop_values_ptr, then set @count_modes, @count_props and * @count_encoders to their capacity. * * Performing the ioctl only twice may be racy: the number of elements may have * changed with a hotplug event in-between the two ioctls. User-space is * expected to retry the last ioctl until the number of elements stabilizes. * The kernel won't fill any array which doesn't have the expected length. * * **Force-probing a connector** * * If the @count_modes field is set to zero and the DRM client is the current * DRM master, the kernel will perform a forced probe on the connector to * refresh the connector status, modes and EDID. A forced-probe can be slow, * might cause flickering and the ioctl will block. * * User-space needs to force-probe connectors to ensure their metadata is * up-to-date at startup and after receiving a hot-plug event. User-space * may perform a forced-probe when the user explicitly requests it. User-space * shouldn't perform a forced-probe in other situations. */struct drm_mode_get_connector {	/** @encoders_ptr: Pointer to ``__u32`` array of object IDs. */	__u64 encoders_ptr;	/** @modes_ptr: Pointer to struct drm_mode_modeinfo array. */	__u64 modes_ptr;	/** @props_ptr: Pointer to ``__u32`` array of property IDs. */	__u64 props_ptr;	/** @prop_values_ptr: Pointer to ``__u64`` array of property values. */	__u64 prop_values_ptr; 	/** @count_modes: Number of modes. */	__u32 count_modes;	/** @count_props: Number of properties. */	__u32 count_props;	/** @count_encoders: Number of encoders. */	__u32 count_encoders; 	/** @encoder_id: Object ID of the current encoder. */	__u32 encoder_id;	/** @connector_id: Object ID of the connector. */	__u32 connector_id;	/**	 * @connector_type: Type of the connector.	 *	 * See DRM_MODE_CONNECTOR_* defines.	 */	__u32 connector_type;	/**	 * @connector_type_id: Type-specific connector number.	 *	 * This is not an object ID. This is a per-type connector number. Each	 * (type, type_id) combination is unique across all connectors of a DRM	 * device.	 *	 * The (type, type_id) combination is not a stable identifier: the	 * type_id can change depending on the driver probe order.	 */	__u32 connector_type_id; 	/**	 * @connection: Status of the connector.	 *	 * See enum drm_connector_status.	 */	__u32 connection;	/** @mm_width: Width of the connected sink in millimeters. */	__u32 mm_width;	/** @mm_height: Height of the connected sink in millimeters. */	__u32 mm_height;	/**	 * @subpixel: Subpixel order of the connected sink.	 *

Lines 1–500 of 1620.