^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 2008 Red Hat Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (c) 2007-2008 Intel Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Permission is hereby granted, free of charge, to any person obtaining a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * copy of this software and associated documentation files (the "Software"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * to deal in the Software without restriction, including without limitation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * the rights to use, copy, modify, merge, publish, distribute, sublicense,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * and/or sell copies of the Software, and to permit persons to whom the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * Software is furnished to do so, subject to the following conditions:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * The above copyright notice and this permission notice shall be included in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * all copies or substantial portions of the Software.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * IN THE SOFTWARE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #ifndef _DRM_MODE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define _DRM_MODE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #include "drm.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #if defined(__cplusplus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) extern "C" {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * DOC: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * DRM exposes many UAPI and structure definition to have a consistent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * and standardized interface with user.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) * Userspace can refer to these structure definitions and UAPI formats
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * to communicate to driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define DRM_CONNECTOR_NAME_LEN 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define DRM_DISPLAY_MODE_LEN 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define DRM_PROP_NAME_LEN 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define DRM_MODE_TYPE_BUILTIN (1<<0) /* deprecated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define DRM_MODE_TYPE_CLOCK_C ((1<<1) | DRM_MODE_TYPE_BUILTIN) /* deprecated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define DRM_MODE_TYPE_CRTC_C ((1<<2) | DRM_MODE_TYPE_BUILTIN) /* deprecated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define DRM_MODE_TYPE_PREFERRED (1<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define DRM_MODE_TYPE_DEFAULT (1<<4) /* deprecated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define DRM_MODE_TYPE_USERDEF (1<<5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define DRM_MODE_TYPE_DRIVER (1<<6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define DRM_MODE_TYPE_ALL (DRM_MODE_TYPE_PREFERRED | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) DRM_MODE_TYPE_USERDEF | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) DRM_MODE_TYPE_DRIVER)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) /* Video mode flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) /* bit compatible with the xrandr RR_ definitions (bits 0-13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) * ABI warning: Existing userspace really expects
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) * the mode flags to match the xrandr definitions. Any
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) * changes that don't match the xrandr definitions will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) * likely need a new client cap or some other mechanism
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) * to avoid breaking existing userspace. This includes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) * allocating new flags in the previously unused bits!
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define DRM_MODE_FLAG_PHSYNC (1<<0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define DRM_MODE_FLAG_NHSYNC (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define DRM_MODE_FLAG_PVSYNC (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define DRM_MODE_FLAG_NVSYNC (1<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define DRM_MODE_FLAG_INTERLACE (1<<4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define DRM_MODE_FLAG_DBLSCAN (1<<5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define DRM_MODE_FLAG_CSYNC (1<<6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define DRM_MODE_FLAG_PCSYNC (1<<7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define DRM_MODE_FLAG_NCSYNC (1<<8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define DRM_MODE_FLAG_HSKEW (1<<9) /* hskew provided */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define DRM_MODE_FLAG_BCAST (1<<10) /* deprecated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define DRM_MODE_FLAG_PIXMUX (1<<11) /* deprecated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define DRM_MODE_FLAG_DBLCLK (1<<12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define DRM_MODE_FLAG_CLKDIV2 (1<<13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) * (define not exposed to user space).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define DRM_MODE_FLAG_3D_MASK (0x1f<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define DRM_MODE_FLAG_3D_NONE (0<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define DRM_MODE_FLAG_3D_FRAME_PACKING (1<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE (2<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define DRM_MODE_FLAG_3D_LINE_ALTERNATIVE (3<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL (4<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define DRM_MODE_FLAG_3D_L_DEPTH (5<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH (6<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define DRM_MODE_FLAG_3D_TOP_AND_BOTTOM (7<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF (8<<14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) /* Picture aspect ratio options */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define DRM_MODE_PICTURE_ASPECT_NONE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define DRM_MODE_PICTURE_ASPECT_4_3 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define DRM_MODE_PICTURE_ASPECT_16_9 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define DRM_MODE_PICTURE_ASPECT_64_27 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define DRM_MODE_PICTURE_ASPECT_256_135 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) /* Content type options */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define DRM_MODE_CONTENT_TYPE_NO_DATA 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define DRM_MODE_CONTENT_TYPE_GRAPHICS 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define DRM_MODE_CONTENT_TYPE_PHOTO 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define DRM_MODE_CONTENT_TYPE_CINEMA 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define DRM_MODE_CONTENT_TYPE_GAME 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) /* Aspect ratio flag bitmask (4 bits 22:19) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define DRM_MODE_FLAG_PIC_AR_MASK (0x0F<<19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define DRM_MODE_FLAG_PIC_AR_NONE \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) (DRM_MODE_PICTURE_ASPECT_NONE<<19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define DRM_MODE_FLAG_PIC_AR_4_3 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) (DRM_MODE_PICTURE_ASPECT_4_3<<19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define DRM_MODE_FLAG_PIC_AR_16_9 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) (DRM_MODE_PICTURE_ASPECT_16_9<<19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define DRM_MODE_FLAG_PIC_AR_64_27 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) (DRM_MODE_PICTURE_ASPECT_64_27<<19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define DRM_MODE_FLAG_PIC_AR_256_135 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) (DRM_MODE_PICTURE_ASPECT_256_135<<19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) DRM_MODE_FLAG_NHSYNC | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) DRM_MODE_FLAG_PVSYNC | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) DRM_MODE_FLAG_NVSYNC | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) DRM_MODE_FLAG_INTERLACE | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) DRM_MODE_FLAG_DBLSCAN | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) DRM_MODE_FLAG_CSYNC | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) DRM_MODE_FLAG_PCSYNC | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) DRM_MODE_FLAG_NCSYNC | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) DRM_MODE_FLAG_HSKEW | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) DRM_MODE_FLAG_DBLCLK | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) DRM_MODE_FLAG_CLKDIV2 | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) DRM_MODE_FLAG_3D_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) /* DPMS flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) /* bit compatible with the xorg definitions. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define DRM_MODE_DPMS_ON 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define DRM_MODE_DPMS_STANDBY 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define DRM_MODE_DPMS_SUSPEND 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define DRM_MODE_DPMS_OFF 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) /* Scaling mode options */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) software can still scale) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) /* Dithering mode options */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define DRM_MODE_DITHERING_OFF 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define DRM_MODE_DITHERING_ON 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define DRM_MODE_DITHERING_AUTO 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) /* Dirty info options */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define DRM_MODE_DIRTY_OFF 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define DRM_MODE_DIRTY_ON 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define DRM_MODE_DIRTY_ANNOTATE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) /* Link Status options */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define DRM_MODE_LINK_STATUS_GOOD 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define DRM_MODE_LINK_STATUS_BAD 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) * DRM_MODE_ROTATE_<degrees>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) * Signals that a drm plane is been rotated <degrees> degrees in counter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) * clockwise direction.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) * This define is provided as a convenience, looking up the property id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) * using the name->prop id lookup is the preferred method.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #define DRM_MODE_ROTATE_0 (1<<0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define DRM_MODE_ROTATE_90 (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #define DRM_MODE_ROTATE_180 (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #define DRM_MODE_ROTATE_270 (1<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) * DRM_MODE_ROTATE_MASK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) * Bitmask used to look for drm plane rotations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define DRM_MODE_ROTATE_MASK (\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) DRM_MODE_ROTATE_0 | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) DRM_MODE_ROTATE_90 | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) DRM_MODE_ROTATE_180 | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) DRM_MODE_ROTATE_270)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) * DRM_MODE_REFLECT_<axis>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) * Signals that the contents of a drm plane is reflected along the <axis> axis,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) * in the same way as mirroring.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) * See kerneldoc chapter "Plane Composition Properties" for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) * This define is provided as a convenience, looking up the property id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) * using the name->prop id lookup is the preferred method.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define DRM_MODE_REFLECT_X (1<<4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define DRM_MODE_REFLECT_Y (1<<5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) * DRM_MODE_REFLECT_MASK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) * Bitmask used to look for drm plane reflections.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define DRM_MODE_REFLECT_MASK (\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) DRM_MODE_REFLECT_X | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) DRM_MODE_REFLECT_Y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) /* Content Protection Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) #define DRM_MODE_CONTENT_PROTECTION_UNDESIRED 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #define DRM_MODE_CONTENT_PROTECTION_DESIRED 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define DRM_MODE_CONTENT_PROTECTION_ENABLED 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) struct drm_mode_modeinfo {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) __u32 clock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) __u16 hdisplay;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) __u16 hsync_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) __u16 hsync_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) __u16 htotal;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) __u16 hskew;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) __u16 vdisplay;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) __u16 vsync_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) __u16 vsync_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) __u16 vtotal;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) __u16 vscan;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) __u32 vrefresh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) __u32 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) char name[DRM_DISPLAY_MODE_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) struct drm_mode_card_res {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) __u64 fb_id_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) __u64 crtc_id_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) __u64 connector_id_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) __u64 encoder_id_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) __u32 count_fbs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) __u32 count_crtcs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) __u32 count_connectors;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) __u32 count_encoders;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) __u32 min_width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) __u32 max_width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) __u32 min_height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) __u32 max_height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) struct drm_mode_crtc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) __u64 set_connectors_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) __u32 count_connectors;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) __u32 crtc_id; /**< Id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) __u32 fb_id; /**< Id of framebuffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) __u32 x; /**< x Position on the framebuffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) __u32 y; /**< y Position on the framebuffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) __u32 gamma_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) __u32 mode_valid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) struct drm_mode_modeinfo mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #define DRM_MODE_PRESENT_TOP_FIELD (1<<0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define DRM_MODE_PRESENT_BOTTOM_FIELD (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) /* Planes blend with or override other bits on the CRTC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) struct drm_mode_set_plane {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) __u32 plane_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) __u32 crtc_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) __u32 fb_id; /* fb object contains surface format type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) __u32 flags; /* see above flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) /* Signed dest location allows it to be partially off screen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) __s32 crtc_x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) __s32 crtc_y;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) __u32 crtc_w;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) __u32 crtc_h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) /* Source values are 16.16 fixed point */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) __u32 src_x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) __u32 src_y;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) __u32 src_h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) __u32 src_w;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) struct drm_mode_get_plane {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) __u32 plane_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) __u32 crtc_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) __u32 fb_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) __u32 possible_crtcs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) __u32 gamma_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) __u32 count_format_types;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) __u64 format_type_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) struct drm_mode_get_plane_res {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) __u64 plane_id_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) __u32 count_planes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) #define DRM_MODE_ENCODER_NONE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) #define DRM_MODE_ENCODER_DAC 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) #define DRM_MODE_ENCODER_TMDS 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) #define DRM_MODE_ENCODER_LVDS 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) #define DRM_MODE_ENCODER_TVDAC 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) #define DRM_MODE_ENCODER_VIRTUAL 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) #define DRM_MODE_ENCODER_DSI 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) #define DRM_MODE_ENCODER_DPMST 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) #define DRM_MODE_ENCODER_DPI 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) struct drm_mode_get_encoder {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) __u32 encoder_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) __u32 encoder_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) __u32 crtc_id; /**< Id of crtc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) __u32 possible_crtcs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) __u32 possible_clones;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) /* This is for connectors with multiple signal types. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) /* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) enum drm_mode_subconnector {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) DRM_MODE_SUBCONNECTOR_Automatic = 0, /* DVI-I, TV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) DRM_MODE_SUBCONNECTOR_Unknown = 0, /* DVI-I, TV, DP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) DRM_MODE_SUBCONNECTOR_VGA = 1, /* DP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) DRM_MODE_SUBCONNECTOR_DVID = 3, /* DVI-I DP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) DRM_MODE_SUBCONNECTOR_DVIA = 4, /* DVI-I */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) DRM_MODE_SUBCONNECTOR_Composite = 5, /* TV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) DRM_MODE_SUBCONNECTOR_SVIDEO = 6, /* TV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) DRM_MODE_SUBCONNECTOR_Component = 8, /* TV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) DRM_MODE_SUBCONNECTOR_SCART = 9, /* TV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) DRM_MODE_SUBCONNECTOR_DisplayPort = 10, /* DP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) DRM_MODE_SUBCONNECTOR_HDMIA = 11, /* DP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) DRM_MODE_SUBCONNECTOR_Native = 15, /* DP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) DRM_MODE_SUBCONNECTOR_Wireless = 18, /* DP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) #define DRM_MODE_CONNECTOR_Unknown 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) #define DRM_MODE_CONNECTOR_VGA 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) #define DRM_MODE_CONNECTOR_DVII 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) #define DRM_MODE_CONNECTOR_DVID 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) #define DRM_MODE_CONNECTOR_DVIA 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) #define DRM_MODE_CONNECTOR_Composite 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) #define DRM_MODE_CONNECTOR_SVIDEO 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) #define DRM_MODE_CONNECTOR_LVDS 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) #define DRM_MODE_CONNECTOR_Component 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) #define DRM_MODE_CONNECTOR_9PinDIN 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) #define DRM_MODE_CONNECTOR_DisplayPort 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) #define DRM_MODE_CONNECTOR_HDMIA 11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) #define DRM_MODE_CONNECTOR_HDMIB 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) #define DRM_MODE_CONNECTOR_TV 13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) #define DRM_MODE_CONNECTOR_eDP 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) #define DRM_MODE_CONNECTOR_VIRTUAL 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) #define DRM_MODE_CONNECTOR_DSI 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) #define DRM_MODE_CONNECTOR_DPI 17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) #define DRM_MODE_CONNECTOR_WRITEBACK 18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) #define DRM_MODE_CONNECTOR_SPI 19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) struct drm_mode_get_connector {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) __u64 encoders_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) __u64 modes_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) __u64 props_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) __u64 prop_values_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) __u32 count_modes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) __u32 count_props;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) __u32 count_encoders;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) __u32 encoder_id; /**< Current Encoder */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) __u32 connector_id; /**< Id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) __u32 connector_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) __u32 connector_type_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) __u32 connection;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) __u32 mm_width; /**< width in millimeters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) __u32 mm_height; /**< height in millimeters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) __u32 subpixel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) __u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) #define DRM_MODE_PROP_PENDING (1<<0) /* deprecated, do not use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) #define DRM_MODE_PROP_RANGE (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) #define DRM_MODE_PROP_IMMUTABLE (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) #define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) #define DRM_MODE_PROP_BLOB (1<<4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) #define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) /* non-extended types: legacy bitmask, one bit per type: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) #define DRM_MODE_PROP_LEGACY_TYPE ( \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) DRM_MODE_PROP_RANGE | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) DRM_MODE_PROP_ENUM | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) DRM_MODE_PROP_BLOB | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) DRM_MODE_PROP_BITMASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) /* extended-types: rather than continue to consume a bit per type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) * grab a chunk of the bits to use as integer type id.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) #define DRM_MODE_PROP_EXTENDED_TYPE 0x0000ffc0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) #define DRM_MODE_PROP_TYPE(n) ((n) << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) #define DRM_MODE_PROP_OBJECT DRM_MODE_PROP_TYPE(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) #define DRM_MODE_PROP_SIGNED_RANGE DRM_MODE_PROP_TYPE(2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) /* the PROP_ATOMIC flag is used to hide properties from userspace that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) * is not aware of atomic properties. This is mostly to work around
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) * older userspace (DDX drivers) that read/write each prop they find,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) * witout being aware that this could be triggering a lengthy modeset.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) #define DRM_MODE_PROP_ATOMIC 0x80000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) struct drm_mode_property_enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) __u64 value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) char name[DRM_PROP_NAME_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) struct drm_mode_get_property {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) __u64 values_ptr; /* values and blob lengths */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) __u64 enum_blob_ptr; /* enum and blob id ptrs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) __u32 prop_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) char name[DRM_PROP_NAME_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) __u32 count_values;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) /* This is only used to count enum values, not blobs. The _blobs is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) * simply because of a historical reason, i.e. backwards compat. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) __u32 count_enum_blobs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) struct drm_mode_connector_set_property {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) __u64 value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) __u32 prop_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) __u32 connector_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) #define DRM_MODE_OBJECT_CRTC 0xcccccccc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) #define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) #define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) #define DRM_MODE_OBJECT_MODE 0xdededede
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) #define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) #define DRM_MODE_OBJECT_FB 0xfbfbfbfb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) #define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) #define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) #define DRM_MODE_OBJECT_ANY 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) struct drm_mode_obj_get_properties {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) __u64 props_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) __u64 prop_values_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) __u32 count_props;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) __u32 obj_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) __u32 obj_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) struct drm_mode_obj_set_property {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) __u64 value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) __u32 prop_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) __u32 obj_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) __u32 obj_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) struct drm_mode_get_blob {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) __u32 blob_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) __u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) __u64 data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) struct drm_mode_fb_cmd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) __u32 fb_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) __u32 width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) __u32 height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) __u32 pitch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) __u32 bpp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) __u32 depth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) /* driver specific handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) #define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) #define DRM_MODE_FB_MODIFIERS (1<<1) /* enables ->modifer[] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) struct drm_mode_fb_cmd2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) __u32 fb_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) __u32 width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) __u32 height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) __u32 pixel_format; /* fourcc code from drm_fourcc.h */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) __u32 flags; /* see above flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) * In case of planar formats, this ioctl allows up to 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) * buffer objects with offsets and pitches per plane.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) * The pitch and offset order is dictated by the fourcc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) * e.g. NV12 (https://fourcc.org/yuv.php#NV12) is described as:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) * YUV 4:2:0 image with a plane of 8 bit Y samples
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) * followed by an interleaved U/V plane containing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) * 8 bit 2x2 subsampled colour difference samples.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) * So it would consist of Y as offsets[0] and UV as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) * offsets[1]. Note that offsets[0] will generally
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) * be 0 (but this is not required).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) * To accommodate tiled, compressed, etc formats, a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) * modifier can be specified. The default value of zero
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) * indicates "native" format as specified by the fourcc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) * Vendor specific modifier token. Note that even though
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) * it looks like we have a modifier per-plane, we in fact
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) * do not. The modifier for each plane must be identical.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) * Thus all combinations of different data layouts for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) * multi plane formats must be enumerated as separate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) * modifiers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) __u32 handles[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) __u32 pitches[4]; /* pitch for each plane */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) __u32 offsets[4]; /* offset of each plane */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) __u64 modifier[4]; /* ie, tiling, compress */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) #define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) #define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) #define DRM_MODE_FB_DIRTY_FLAGS 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) #define DRM_MODE_FB_DIRTY_MAX_CLIPS 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) * Mark a region of a framebuffer as dirty.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) * Some hardware does not automatically update display contents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) * as a hardware or software draw to a framebuffer. This ioctl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) * allows userspace to tell the kernel and the hardware what
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) * regions of the framebuffer have changed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) * The kernel or hardware is free to update more then just the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) * region specified by the clip rects. The kernel or hardware
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) * may also delay and/or coalesce several calls to dirty into a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) * single update.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) * Userspace may annotate the updates, the annotates are a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) * promise made by the caller that the change is either a copy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) * of pixels or a fill of a single color in the region specified.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) * the number of updated regions are half of num_clips given,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) * where the clip rects are paired in src and dst. The width and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) * height of each one of the pairs must match.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) * promises that the region specified of the clip rects is filled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) * completely with a single color as given in the color argument.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) struct drm_mode_fb_dirty_cmd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) __u32 fb_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) __u32 color;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) __u32 num_clips;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) __u64 clips_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) struct drm_mode_mode_cmd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) __u32 connector_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) struct drm_mode_modeinfo mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) #define DRM_MODE_CURSOR_BO 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) #define DRM_MODE_CURSOR_MOVE 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) #define DRM_MODE_CURSOR_FLAGS 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) * depending on the value in flags different members are used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) * CURSOR_BO uses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) * crtc_id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) * width
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) * height
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) * handle - if 0 turns the cursor off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) * CURSOR_MOVE uses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) * crtc_id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) * x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) * y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) struct drm_mode_cursor {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) __u32 crtc_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) __s32 x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) __s32 y;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) __u32 width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) __u32 height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) /* driver specific handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) struct drm_mode_cursor2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) __u32 crtc_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) __s32 x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) __s32 y;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) __u32 width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) __u32 height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) /* driver specific handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) __s32 hot_x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) __s32 hot_y;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) struct drm_mode_crtc_lut {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) __u32 crtc_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) __u32 gamma_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) /* pointers to arrays */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) __u64 red;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) __u64 green;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) __u64 blue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) struct drm_color_ctm {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) * Conversion matrix in S31.32 sign-magnitude
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) * (not two's complement!) format.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) __u64 matrix[9];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) struct drm_color_lut {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) * 0xffff == 1.0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) __u16 red;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) __u16 green;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) __u16 blue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) __u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) * HDR Metadata Infoframe as per CTA 861.G spec. This is expected
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) * to match exactly with the spec.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) * Userspace is expected to pass the metadata information as per
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) * the format described in this structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) struct hdr_metadata_infoframe {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) * @eotf: Electro-Optical Transfer Function (EOTF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) * used in the stream.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) __u8 eotf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) * @metadata_type: Static_Metadata_Descriptor_ID.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) __u8 metadata_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) * @display_primaries: Color Primaries of the Data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) * These are coded as unsigned 16-bit values in units of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) * 0.00002, where 0x0000 represents zero and 0xC350
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) * represents 1.0000.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) * @display_primaries.x: X cordinate of color primary.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) * @display_primaries.y: Y cordinate of color primary.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) __u16 x, y;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) } display_primaries[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) * @white_point: White Point of Colorspace Data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) * These are coded as unsigned 16-bit values in units of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) * 0.00002, where 0x0000 represents zero and 0xC350
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) * represents 1.0000.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) * @white_point.x: X cordinate of whitepoint of color primary.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) * @white_point.y: Y cordinate of whitepoint of color primary.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) __u16 x, y;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) } white_point;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) * @max_display_mastering_luminance: Max Mastering Display Luminance.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) __u16 max_display_mastering_luminance;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) * @min_display_mastering_luminance: Min Mastering Display Luminance.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) * This value is coded as an unsigned 16-bit value in units of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) * 0.0001 cd/m2, where 0x0001 represents 0.0001 cd/m2 and 0xFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) * represents 6.5535 cd/m2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) __u16 min_display_mastering_luminance;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) * @max_cll: Max Content Light Level.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) __u16 max_cll;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) * @max_fall: Max Frame Average Light Level.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) * This value is coded as an unsigned 16-bit value in units of 1 cd/m2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) __u16 max_fall;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) * struct hdr_output_metadata - HDR output metadata
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) * Metadata Information to be passed from userspace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) struct hdr_output_metadata {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) * @metadata_type: Static_Metadata_Descriptor_ID.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) __u32 metadata_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) * @hdmi_metadata_type1: HDR Metadata Infoframe.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) struct hdr_metadata_infoframe hdmi_metadata_type1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) #define DRM_MODE_PAGE_FLIP_EVENT 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) #define DRM_MODE_PAGE_FLIP_ASYNC 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) #define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) #define DRM_MODE_PAGE_FLIP_TARGET_RELATIVE 0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) #define DRM_MODE_PAGE_FLIP_TARGET (DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) DRM_MODE_PAGE_FLIP_TARGET_RELATIVE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) #define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) DRM_MODE_PAGE_FLIP_ASYNC | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) DRM_MODE_PAGE_FLIP_TARGET)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) * Request a page flip on the specified crtc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) * This ioctl will ask KMS to schedule a page flip for the specified
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) * crtc. Once any pending rendering targeting the specified fb (as of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) * ioctl time) has completed, the crtc will be reprogrammed to display
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) * that fb after the next vertical refresh. The ioctl returns
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) * immediately, but subsequent rendering to the current fb will block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) * in the execbuffer ioctl until the page flip happens. If a page
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) * flip is already pending as the ioctl is called, EBUSY will be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) * returned.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) * Flag DRM_MODE_PAGE_FLIP_EVENT requests that drm sends back a vblank
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) * event (see drm.h: struct drm_event_vblank) when the page flip is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) * done. The user_data field passed in with this ioctl will be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) * returned as the user_data field in the vblank event struct.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) * Flag DRM_MODE_PAGE_FLIP_ASYNC requests that the flip happen
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) * 'as soon as possible', meaning that it not delay waiting for vblank.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) * This may cause tearing on the screen.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) * The reserved field must be zero.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) struct drm_mode_crtc_page_flip {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) __u32 crtc_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) __u32 fb_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) __u32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) __u64 user_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) * Request a page flip on the specified crtc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) * Same as struct drm_mode_crtc_page_flip, but supports new flags and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) * re-purposes the reserved field:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) * The sequence field must be zero unless either of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is specified. When
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) * the ABSOLUTE flag is specified, the sequence field denotes the absolute
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) * vblank sequence when the flip should take effect. When the RELATIVE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) * flag is specified, the sequence field denotes the relative (to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) * current one when the ioctl is called) vblank sequence when the flip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) * should take effect. NOTE: DRM_IOCTL_WAIT_VBLANK must still be used to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) * make sure the vblank sequence before the target one has passed before
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) * calling this ioctl. The purpose of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is merely to clarify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) * the target for when code dealing with a page flip runs during a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) * vertical blank period.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) struct drm_mode_crtc_page_flip_target {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) __u32 crtc_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) __u32 fb_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) __u32 sequence;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) __u64 user_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) /* create a dumb scanout buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) struct drm_mode_create_dumb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) __u32 height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) __u32 width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) __u32 bpp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) /* handle, pitch, size will be returned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) __u32 pitch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) __u64 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) /* set up for mmap of a dumb scanout buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) struct drm_mode_map_dumb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) /** Handle for the object being mapped. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) __u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) * Fake offset to use for subsequent mmap call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) * This is a fixed-size type for 32/64 compatibility.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) __u64 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) struct drm_mode_destroy_dumb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) /* page-flip flags are valid, plus: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) #define DRM_MODE_ATOMIC_TEST_ONLY 0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) #define DRM_MODE_ATOMIC_NONBLOCK 0x0200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) #define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) #define DRM_MODE_ATOMIC_FLAGS (\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) DRM_MODE_PAGE_FLIP_EVENT |\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) DRM_MODE_PAGE_FLIP_ASYNC |\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) DRM_MODE_ATOMIC_TEST_ONLY |\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) DRM_MODE_ATOMIC_NONBLOCK |\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) DRM_MODE_ATOMIC_ALLOW_MODESET)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) struct drm_mode_atomic {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) __u32 count_objs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) __u64 objs_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) __u64 count_props_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) __u64 props_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) __u64 prop_values_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) __u64 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) __u64 user_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) struct drm_format_modifier_blob {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) #define FORMAT_BLOB_CURRENT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) /* Version of this blob format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) __u32 version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) /* Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) /* Number of fourcc formats supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) __u32 count_formats;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) /* Where in this blob the formats exist (in bytes) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) __u32 formats_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) /* Number of drm_format_modifiers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) __u32 count_modifiers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) /* Where in this blob the modifiers exist (in bytes) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) __u32 modifiers_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) /* __u32 formats[] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) /* struct drm_format_modifier modifiers[] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) struct drm_format_modifier {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) /* Bitmask of formats in get_plane format list this info applies to. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) * offset allows a sliding window of which 64 formats (bits).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) * Some examples:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) * In today's world with < 65 formats, and formats 0, and 2 are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) * supported
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) * 0x0000000000000005
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) * ^-offset = 0, formats = 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) * If the number formats grew to 128, and formats 98-102 are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) * supported with the modifier:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) * 0x0000007c00000000 0000000000000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) * ^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) * |__offset = 64, formats = 0x7c00000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) __u64 formats;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) __u32 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) __u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) /* The modifier that applies to the >get_plane format list bitmask. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) __u64 modifier;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) * struct drm_mode_create_blob - Create New block property
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) * @data: Pointer to data to copy.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) * @length: Length of data to copy.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) * @blob_id: new property ID.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) * Create a new 'blob' data property, copying length bytes from data pointer,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) * and returning new blob ID.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) struct drm_mode_create_blob {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) /** Pointer to data to copy. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) __u64 data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) /** Length of data to copy. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) __u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) /** Return: new property ID. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) __u32 blob_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) * struct drm_mode_destroy_blob - Destroy user blob
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) * @blob_id: blob_id to destroy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) * Destroy a user-created blob property.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) struct drm_mode_destroy_blob {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) __u32 blob_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) * struct drm_mode_create_lease - Create lease
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) * @object_ids: Pointer to array of object ids.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) * @object_count: Number of object ids.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936) * @flags: flags for new FD.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) * @lessee_id: unique identifier for lessee.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) * @fd: file descriptor to new drm_master file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) * Lease mode resources, creating another drm_master.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) struct drm_mode_create_lease {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) /** Pointer to array of object ids (__u32) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) __u64 object_ids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) /** Number of object ids */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) __u32 object_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) /** flags for new FD (O_CLOEXEC, etc) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) /** Return: unique identifier for lessee. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) __u32 lessee_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) /** Return: file descriptor to new drm_master file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) __u32 fd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) * struct drm_mode_list_lessees - List lessees
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) * @count_lessees: Number of lessees.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) * @pad: pad.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) * @lessees_ptr: Pointer to lessess.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) * List lesses from a drm_master
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) struct drm_mode_list_lessees {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) /** Number of lessees.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) * On input, provides length of the array.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) * On output, provides total number. No
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) * more than the input number will be written
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) * back, so two calls can be used to get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) * the size and then the data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) __u32 count_lessees;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) __u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) /** Pointer to lessees.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) * pointer to __u64 array of lessee ids
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) __u64 lessees_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) * struct drm_mode_get_lease - Get Lease
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) * @count_objects: Number of leased objects.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) * @pad: pad.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) * @objects_ptr: Pointer to objects.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) * Get leased objects
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) struct drm_mode_get_lease {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) /** Number of leased objects.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) * On input, provides length of the array.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) * On output, provides total number. No
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) * more than the input number will be written
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) * back, so two calls can be used to get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) * the size and then the data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) __u32 count_objects;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) __u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) /** Pointer to objects.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) * pointer to __u32 array of object ids
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) __u64 objects_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) * struct drm_mode_revoke_lease - Revoke lease
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) * @lessee_id: Unique ID of lessee.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) * Revoke lease
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) struct drm_mode_revoke_lease {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) /** Unique ID of lessee
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) __u32 lessee_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) * struct drm_mode_rect - Two dimensional rectangle.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) * @x1: Horizontal starting coordinate (inclusive).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) * @y1: Vertical starting coordinate (inclusive).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) * @x2: Horizontal ending coordinate (exclusive).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) * @y2: Vertical ending coordinate (exclusive).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) * With drm subsystem using struct drm_rect to manage rectangular area this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) * export it to user-space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) * Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) struct drm_mode_rect {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) __s32 x1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) __s32 y1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) __s32 x2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) __s32 y2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) #if defined(__cplusplus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) #endif