root/include/uapi/drm/drm_mode.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */