|
XenevaOS
|
#include <drm_modes.h>

Public Attributes | |
| int | 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 | flags |
| int | crtc_clock |
| u16 | crtc_hdisplay |
| u16 | crtc_hblank_start |
| u16 | crtc_hblank_end |
| u16 | crtc_hsync_start |
| u16 | crtc_hsync_end |
| u16 | crtc_htotal |
| u16 | crtc_hskew |
| u16 | crtc_vdisplay |
| u16 | crtc_vblank_start |
| u16 | crtc_vblank_end |
| u16 | crtc_vsync_start |
| u16 | crtc_vsync_end |
| u16 | crtc_vtotal |
| u16 | width_mm |
| u16 | height_mm |
| u8 | type |
| bool | expose_to_userspace |
| struct list_head | head |
: | |
Human-readable name of the mode, filled out with drm_mode_set_name(). | |
| char | name [DRM_DISPLAY_MODE_LEN] |
| enum drm_mode_status | status |
| enum hdmi_picture_aspect | picture_aspect_ratio |
struct drm_display_mode - DRM kernel-internal display mode structure @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?! @crtc_hdisplay: hardware mode horizontal display size @crtc_hblank_start: hardware mode horizontal blank start @crtc_hblank_end: hardware mode horizontal blank end @crtc_hsync_start: hardware mode horizontal sync start @crtc_hsync_end: hardware mode horizontal sync end @crtc_htotal: hardware mode horizontal total size @crtc_hskew: hardware mode horizontal skew?! @crtc_vdisplay: hardware mode vertical display size @crtc_vblank_start: hardware mode vertical blank start @crtc_vblank_end: hardware mode vertical blank end @crtc_vsync_start: hardware mode vertical sync start @crtc_vsync_end: hardware mode vertical sync end @crtc_vtotal: hardware mode vertical total size
This is the kernel API display mode information structure. For the user-space version see struct drm_mode_modeinfo.
The horizontal and vertical timings are defined per the following diagram.
::
Active Front Sync Back
Region Porch Porch
<-----------------------><----------------><-------------><-------------->
//////////////////////|
////////////////////// |
////////////////////// |.................. ................
_______________
<----- [hv]display ----->
<------------- [hv]sync_start ------------>
<--------------------- [hv]sync_end --------------------->
<-------------------------------- [hv]total ----------------------------->*
This structure contains two copies of timings. First are the plain timings, which specify the logical mode, as it would be for a progressive 1:1 scanout at the refresh rate userspace can observe through vblank timestamps. Then there's the hardware timings, which are corrected for interlacing, double-clocking and similar things. They are provided as a convenience, and can be appropriately computed using drm_mode_set_crtcinfo().
For printing you can use DRM_MODE_FMT and DRM_MODE_ARG().
| int drm_display_mode::clock |
@clock:
Pixel clock in kHz.
| int drm_display_mode::crtc_clock |
@crtc_clock:
Actual pixel or dot clock in the hardware. This differs from the logical @clock when e.g. using interlacing, double-clocking, stereo modes or other fancy stuff that changes the timings and signals actually sent over the wire.
This is again in kHz.
Note that with digital outputs like HDMI or DP there's usually a massive confusion between the dot clock and the signal clock at the bit encoding level. Especially when a 8b/10b encoding is used and the difference is exactly a factor of 10.
| u16 drm_display_mode::crtc_hblank_end |
| u16 drm_display_mode::crtc_hblank_start |
| u16 drm_display_mode::crtc_hdisplay |
| u16 drm_display_mode::crtc_hskew |
| u16 drm_display_mode::crtc_hsync_end |
| u16 drm_display_mode::crtc_hsync_start |
| u16 drm_display_mode::crtc_htotal |
| u16 drm_display_mode::crtc_vblank_end |
| u16 drm_display_mode::crtc_vblank_start |
| u16 drm_display_mode::crtc_vdisplay |
| u16 drm_display_mode::crtc_vsync_end |
| u16 drm_display_mode::crtc_vsync_start |
| u16 drm_display_mode::crtc_vtotal |
| bool drm_display_mode::expose_to_userspace |
@expose_to_userspace:
Indicates whether the mode is to be exposed to the userspace. This is to maintain a set of exposed modes while preparing user-mode's list in drm_mode_getconnector ioctl. The purpose of this only lies in the ioctl function, and is not to be used outside the function.
| u32 drm_display_mode::flags |
@flags:
Sync and timing flags:
Additionally there's flags to specify how 3D modes are packed:
| u16 drm_display_mode::hdisplay |
| u16 drm_display_mode::height_mm |
@height_mm:
Addressable size of the output in mm, projectors should set this to 0.
| u16 drm_display_mode::hskew |
| u16 drm_display_mode::hsync_end |
| u16 drm_display_mode::hsync_start |
| u16 drm_display_mode::htotal |
| char drm_display_mode::name[DRM_DISPLAY_MODE_LEN] |
| enum hdmi_picture_aspect drm_display_mode::picture_aspect_ratio |
@picture_aspect_ratio:
Field for setting the HDMI picture aspect ratio of a mode.
| enum drm_mode_status drm_display_mode::status |
@status:
Status of the mode, used to filter out modes not supported by the hardware. See enum &drm_mode_status.
| u8 drm_display_mode::type |
@type:
A bitmask of flags, mostly about the source of a mode. Possible flags are:
Plus a big list of flags which shouldn't be used at all, but are still around since these flags are also used in the userspace ABI. We no longer accept modes with these types though:
| u16 drm_display_mode::vdisplay |
| u16 drm_display_mode::vscan |
| u16 drm_display_mode::vsync_end |
| u16 drm_display_mode::vsync_start |
| u16 drm_display_mode::vtotal |
| u16 drm_display_mode::width_mm |
@width_mm:
Addressable size of the output in mm, projectors should set this to 0.