1*592ffb21SWarner Losh /* 2*592ffb21SWarner Losh * Copyright (c) 2007 Dave Airlie <airlied@linux.ie> 3*592ffb21SWarner Losh * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com> 4*592ffb21SWarner Losh * Copyright (c) 2008 Red Hat Inc. 5*592ffb21SWarner Losh * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA 6*592ffb21SWarner Losh * Copyright (c) 2007-2008 Intel Corporation 7*592ffb21SWarner Losh * 8*592ffb21SWarner Losh * Permission is hereby granted, free of charge, to any person obtaining a 9*592ffb21SWarner Losh * copy of this software and associated documentation files (the "Software"), 10*592ffb21SWarner Losh * to deal in the Software without restriction, including without limitation 11*592ffb21SWarner Losh * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12*592ffb21SWarner Losh * and/or sell copies of the Software, and to permit persons to whom the 13*592ffb21SWarner Losh * Software is furnished to do so, subject to the following conditions: 14*592ffb21SWarner Losh * 15*592ffb21SWarner Losh * The above copyright notice and this permission notice shall be included in 16*592ffb21SWarner Losh * all copies or substantial portions of the Software. 17*592ffb21SWarner Losh * 18*592ffb21SWarner Losh * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19*592ffb21SWarner Losh * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20*592ffb21SWarner Losh * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21*592ffb21SWarner Losh * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22*592ffb21SWarner Losh * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23*592ffb21SWarner Losh * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 24*592ffb21SWarner Losh * IN THE SOFTWARE. 25*592ffb21SWarner Losh */ 26*592ffb21SWarner Losh 27*592ffb21SWarner Losh #ifndef _DRM_MODE_H 28*592ffb21SWarner Losh #define _DRM_MODE_H 29*592ffb21SWarner Losh 30*592ffb21SWarner Losh #include <dev/drm2/drm_os_freebsd.h> 31*592ffb21SWarner Losh 32*592ffb21SWarner Losh #define DRM_DISPLAY_INFO_LEN 32 33*592ffb21SWarner Losh #define DRM_CONNECTOR_NAME_LEN 32 34*592ffb21SWarner Losh #define DRM_DISPLAY_MODE_LEN 32 35*592ffb21SWarner Losh #define DRM_PROP_NAME_LEN 32 36*592ffb21SWarner Losh 37*592ffb21SWarner Losh #define DRM_MODE_TYPE_BUILTIN (1<<0) 38*592ffb21SWarner Losh #define DRM_MODE_TYPE_CLOCK_C ((1<<1) | DRM_MODE_TYPE_BUILTIN) 39*592ffb21SWarner Losh #define DRM_MODE_TYPE_CRTC_C ((1<<2) | DRM_MODE_TYPE_BUILTIN) 40*592ffb21SWarner Losh #define DRM_MODE_TYPE_PREFERRED (1<<3) 41*592ffb21SWarner Losh #define DRM_MODE_TYPE_DEFAULT (1<<4) 42*592ffb21SWarner Losh #define DRM_MODE_TYPE_USERDEF (1<<5) 43*592ffb21SWarner Losh #define DRM_MODE_TYPE_DRIVER (1<<6) 44*592ffb21SWarner Losh 45*592ffb21SWarner Losh /* Video mode flags */ 46*592ffb21SWarner Losh /* bit compatible with the xorg definitions. */ 47*592ffb21SWarner Losh #define DRM_MODE_FLAG_PHSYNC (1<<0) 48*592ffb21SWarner Losh #define DRM_MODE_FLAG_NHSYNC (1<<1) 49*592ffb21SWarner Losh #define DRM_MODE_FLAG_PVSYNC (1<<2) 50*592ffb21SWarner Losh #define DRM_MODE_FLAG_NVSYNC (1<<3) 51*592ffb21SWarner Losh #define DRM_MODE_FLAG_INTERLACE (1<<4) 52*592ffb21SWarner Losh #define DRM_MODE_FLAG_DBLSCAN (1<<5) 53*592ffb21SWarner Losh #define DRM_MODE_FLAG_CSYNC (1<<6) 54*592ffb21SWarner Losh #define DRM_MODE_FLAG_PCSYNC (1<<7) 55*592ffb21SWarner Losh #define DRM_MODE_FLAG_NCSYNC (1<<8) 56*592ffb21SWarner Losh #define DRM_MODE_FLAG_HSKEW (1<<9) /* hskew provided */ 57*592ffb21SWarner Losh #define DRM_MODE_FLAG_BCAST (1<<10) 58*592ffb21SWarner Losh #define DRM_MODE_FLAG_PIXMUX (1<<11) 59*592ffb21SWarner Losh #define DRM_MODE_FLAG_DBLCLK (1<<12) 60*592ffb21SWarner Losh #define DRM_MODE_FLAG_CLKDIV2 (1<<13) 61*592ffb21SWarner Losh 62*592ffb21SWarner Losh /* DPMS flags */ 63*592ffb21SWarner Losh /* bit compatible with the xorg definitions. */ 64*592ffb21SWarner Losh #define DRM_MODE_DPMS_ON 0 65*592ffb21SWarner Losh #define DRM_MODE_DPMS_STANDBY 1 66*592ffb21SWarner Losh #define DRM_MODE_DPMS_SUSPEND 2 67*592ffb21SWarner Losh #define DRM_MODE_DPMS_OFF 3 68*592ffb21SWarner Losh 69*592ffb21SWarner Losh /* Scaling mode options */ 70*592ffb21SWarner Losh #define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or 71*592ffb21SWarner Losh software can still scale) */ 72*592ffb21SWarner Losh #define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */ 73*592ffb21SWarner Losh #define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */ 74*592ffb21SWarner Losh #define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */ 75*592ffb21SWarner Losh 76*592ffb21SWarner Losh /* Dithering mode options */ 77*592ffb21SWarner Losh #define DRM_MODE_DITHERING_OFF 0 78*592ffb21SWarner Losh #define DRM_MODE_DITHERING_ON 1 79*592ffb21SWarner Losh #define DRM_MODE_DITHERING_AUTO 2 80*592ffb21SWarner Losh 81*592ffb21SWarner Losh /* Dirty info options */ 82*592ffb21SWarner Losh #define DRM_MODE_DIRTY_OFF 0 83*592ffb21SWarner Losh #define DRM_MODE_DIRTY_ON 1 84*592ffb21SWarner Losh #define DRM_MODE_DIRTY_ANNOTATE 2 85*592ffb21SWarner Losh 86*592ffb21SWarner Losh struct drm_mode_modeinfo { 87*592ffb21SWarner Losh __u32 clock; 88*592ffb21SWarner Losh __u16 hdisplay, hsync_start, hsync_end, htotal, hskew; 89*592ffb21SWarner Losh __u16 vdisplay, vsync_start, vsync_end, vtotal, vscan; 90*592ffb21SWarner Losh 91*592ffb21SWarner Losh __u32 vrefresh; 92*592ffb21SWarner Losh 93*592ffb21SWarner Losh __u32 flags; 94*592ffb21SWarner Losh __u32 type; 95*592ffb21SWarner Losh char name[DRM_DISPLAY_MODE_LEN]; 96*592ffb21SWarner Losh }; 97*592ffb21SWarner Losh 98*592ffb21SWarner Losh struct drm_mode_card_res { 99*592ffb21SWarner Losh __u64 fb_id_ptr; 100*592ffb21SWarner Losh __u64 crtc_id_ptr; 101*592ffb21SWarner Losh __u64 connector_id_ptr; 102*592ffb21SWarner Losh __u64 encoder_id_ptr; 103*592ffb21SWarner Losh __u32 count_fbs; 104*592ffb21SWarner Losh __u32 count_crtcs; 105*592ffb21SWarner Losh __u32 count_connectors; 106*592ffb21SWarner Losh __u32 count_encoders; 107*592ffb21SWarner Losh __u32 min_width, max_width; 108*592ffb21SWarner Losh __u32 min_height, max_height; 109*592ffb21SWarner Losh }; 110*592ffb21SWarner Losh 111*592ffb21SWarner Losh struct drm_mode_crtc { 112*592ffb21SWarner Losh __u64 set_connectors_ptr; 113*592ffb21SWarner Losh __u32 count_connectors; 114*592ffb21SWarner Losh 115*592ffb21SWarner Losh __u32 crtc_id; /**< Id */ 116*592ffb21SWarner Losh __u32 fb_id; /**< Id of framebuffer */ 117*592ffb21SWarner Losh 118*592ffb21SWarner Losh __u32 x, y; /**< Position on the frameuffer */ 119*592ffb21SWarner Losh 120*592ffb21SWarner Losh __u32 gamma_size; 121*592ffb21SWarner Losh __u32 mode_valid; 122*592ffb21SWarner Losh struct drm_mode_modeinfo mode; 123*592ffb21SWarner Losh }; 124*592ffb21SWarner Losh 125*592ffb21SWarner Losh #define DRM_MODE_PRESENT_TOP_FIELD (1<<0) 126*592ffb21SWarner Losh #define DRM_MODE_PRESENT_BOTTOM_FIELD (1<<1) 127*592ffb21SWarner Losh 128*592ffb21SWarner Losh /* Planes blend with or override other bits on the CRTC */ 129*592ffb21SWarner Losh struct drm_mode_set_plane { 130*592ffb21SWarner Losh __u32 plane_id; 131*592ffb21SWarner Losh __u32 crtc_id; 132*592ffb21SWarner Losh __u32 fb_id; /* fb object contains surface format type */ 133*592ffb21SWarner Losh __u32 flags; /* see above flags */ 134*592ffb21SWarner Losh 135*592ffb21SWarner Losh /* Signed dest location allows it to be partially off screen */ 136*592ffb21SWarner Losh __s32 crtc_x, crtc_y; 137*592ffb21SWarner Losh __u32 crtc_w, crtc_h; 138*592ffb21SWarner Losh 139*592ffb21SWarner Losh /* Source values are 16.16 fixed point */ 140*592ffb21SWarner Losh __u32 src_x, src_y; 141*592ffb21SWarner Losh __u32 src_h, src_w; 142*592ffb21SWarner Losh }; 143*592ffb21SWarner Losh 144*592ffb21SWarner Losh struct drm_mode_get_plane { 145*592ffb21SWarner Losh __u32 plane_id; 146*592ffb21SWarner Losh 147*592ffb21SWarner Losh __u32 crtc_id; 148*592ffb21SWarner Losh __u32 fb_id; 149*592ffb21SWarner Losh 150*592ffb21SWarner Losh __u32 possible_crtcs; 151*592ffb21SWarner Losh __u32 gamma_size; 152*592ffb21SWarner Losh 153*592ffb21SWarner Losh __u32 count_format_types; 154*592ffb21SWarner Losh __u64 format_type_ptr; 155*592ffb21SWarner Losh }; 156*592ffb21SWarner Losh 157*592ffb21SWarner Losh struct drm_mode_get_plane_res { 158*592ffb21SWarner Losh __u64 plane_id_ptr; 159*592ffb21SWarner Losh __u32 count_planes; 160*592ffb21SWarner Losh }; 161*592ffb21SWarner Losh 162*592ffb21SWarner Losh #define DRM_MODE_ENCODER_NONE 0 163*592ffb21SWarner Losh #define DRM_MODE_ENCODER_DAC 1 164*592ffb21SWarner Losh #define DRM_MODE_ENCODER_TMDS 2 165*592ffb21SWarner Losh #define DRM_MODE_ENCODER_LVDS 3 166*592ffb21SWarner Losh #define DRM_MODE_ENCODER_TVDAC 4 167*592ffb21SWarner Losh #define DRM_MODE_ENCODER_VIRTUAL 5 168*592ffb21SWarner Losh 169*592ffb21SWarner Losh struct drm_mode_get_encoder { 170*592ffb21SWarner Losh __u32 encoder_id; 171*592ffb21SWarner Losh __u32 encoder_type; 172*592ffb21SWarner Losh 173*592ffb21SWarner Losh __u32 crtc_id; /**< Id of crtc */ 174*592ffb21SWarner Losh 175*592ffb21SWarner Losh __u32 possible_crtcs; 176*592ffb21SWarner Losh __u32 possible_clones; 177*592ffb21SWarner Losh }; 178*592ffb21SWarner Losh 179*592ffb21SWarner Losh /* This is for connectors with multiple signal types. */ 180*592ffb21SWarner Losh /* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */ 181*592ffb21SWarner Losh #define DRM_MODE_SUBCONNECTOR_Automatic 0 182*592ffb21SWarner Losh #define DRM_MODE_SUBCONNECTOR_Unknown 0 183*592ffb21SWarner Losh #define DRM_MODE_SUBCONNECTOR_DVID 3 184*592ffb21SWarner Losh #define DRM_MODE_SUBCONNECTOR_DVIA 4 185*592ffb21SWarner Losh #define DRM_MODE_SUBCONNECTOR_Composite 5 186*592ffb21SWarner Losh #define DRM_MODE_SUBCONNECTOR_SVIDEO 6 187*592ffb21SWarner Losh #define DRM_MODE_SUBCONNECTOR_Component 8 188*592ffb21SWarner Losh #define DRM_MODE_SUBCONNECTOR_SCART 9 189*592ffb21SWarner Losh 190*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_Unknown 0 191*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_VGA 1 192*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_DVII 2 193*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_DVID 3 194*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_DVIA 4 195*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_Composite 5 196*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_SVIDEO 6 197*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_LVDS 7 198*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_Component 8 199*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_9PinDIN 9 200*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_DisplayPort 10 201*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_HDMIA 11 202*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_HDMIB 12 203*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_TV 13 204*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_eDP 14 205*592ffb21SWarner Losh #define DRM_MODE_CONNECTOR_VIRTUAL 15 206*592ffb21SWarner Losh 207*592ffb21SWarner Losh struct drm_mode_get_connector { 208*592ffb21SWarner Losh 209*592ffb21SWarner Losh __u64 encoders_ptr; 210*592ffb21SWarner Losh __u64 modes_ptr; 211*592ffb21SWarner Losh __u64 props_ptr; 212*592ffb21SWarner Losh __u64 prop_values_ptr; 213*592ffb21SWarner Losh 214*592ffb21SWarner Losh __u32 count_modes; 215*592ffb21SWarner Losh __u32 count_props; 216*592ffb21SWarner Losh __u32 count_encoders; 217*592ffb21SWarner Losh 218*592ffb21SWarner Losh __u32 encoder_id; /**< Current Encoder */ 219*592ffb21SWarner Losh __u32 connector_id; /**< Id */ 220*592ffb21SWarner Losh __u32 connector_type; 221*592ffb21SWarner Losh __u32 connector_type_id; 222*592ffb21SWarner Losh 223*592ffb21SWarner Losh __u32 connection; 224*592ffb21SWarner Losh __u32 mm_width, mm_height; /**< HxW in millimeters */ 225*592ffb21SWarner Losh __u32 subpixel; 226*592ffb21SWarner Losh }; 227*592ffb21SWarner Losh 228*592ffb21SWarner Losh #define DRM_MODE_PROP_PENDING (1<<0) 229*592ffb21SWarner Losh #define DRM_MODE_PROP_RANGE (1<<1) 230*592ffb21SWarner Losh #define DRM_MODE_PROP_IMMUTABLE (1<<2) 231*592ffb21SWarner Losh #define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */ 232*592ffb21SWarner Losh #define DRM_MODE_PROP_BLOB (1<<4) 233*592ffb21SWarner Losh #define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */ 234*592ffb21SWarner Losh 235*592ffb21SWarner Losh struct drm_mode_property_enum { 236*592ffb21SWarner Losh __u64 value; 237*592ffb21SWarner Losh char name[DRM_PROP_NAME_LEN]; 238*592ffb21SWarner Losh }; 239*592ffb21SWarner Losh 240*592ffb21SWarner Losh struct drm_mode_get_property { 241*592ffb21SWarner Losh __u64 values_ptr; /* values and blob lengths */ 242*592ffb21SWarner Losh __u64 enum_blob_ptr; /* enum and blob id ptrs */ 243*592ffb21SWarner Losh 244*592ffb21SWarner Losh __u32 prop_id; 245*592ffb21SWarner Losh __u32 flags; 246*592ffb21SWarner Losh char name[DRM_PROP_NAME_LEN]; 247*592ffb21SWarner Losh 248*592ffb21SWarner Losh __u32 count_values; 249*592ffb21SWarner Losh __u32 count_enum_blobs; 250*592ffb21SWarner Losh }; 251*592ffb21SWarner Losh 252*592ffb21SWarner Losh struct drm_mode_connector_set_property { 253*592ffb21SWarner Losh __u64 value; 254*592ffb21SWarner Losh __u32 prop_id; 255*592ffb21SWarner Losh __u32 connector_id; 256*592ffb21SWarner Losh }; 257*592ffb21SWarner Losh 258*592ffb21SWarner Losh struct drm_mode_obj_get_properties { 259*592ffb21SWarner Losh __u64 props_ptr; 260*592ffb21SWarner Losh __u64 prop_values_ptr; 261*592ffb21SWarner Losh __u32 count_props; 262*592ffb21SWarner Losh __u32 obj_id; 263*592ffb21SWarner Losh __u32 obj_type; 264*592ffb21SWarner Losh }; 265*592ffb21SWarner Losh 266*592ffb21SWarner Losh struct drm_mode_obj_set_property { 267*592ffb21SWarner Losh __u64 value; 268*592ffb21SWarner Losh __u32 prop_id; 269*592ffb21SWarner Losh __u32 obj_id; 270*592ffb21SWarner Losh __u32 obj_type; 271*592ffb21SWarner Losh }; 272*592ffb21SWarner Losh 273*592ffb21SWarner Losh struct drm_mode_get_blob { 274*592ffb21SWarner Losh __u32 blob_id; 275*592ffb21SWarner Losh __u32 length; 276*592ffb21SWarner Losh __u64 data; 277*592ffb21SWarner Losh }; 278*592ffb21SWarner Losh 279*592ffb21SWarner Losh struct drm_mode_fb_cmd { 280*592ffb21SWarner Losh __u32 fb_id; 281*592ffb21SWarner Losh __u32 width, height; 282*592ffb21SWarner Losh __u32 pitch; 283*592ffb21SWarner Losh __u32 bpp; 284*592ffb21SWarner Losh __u32 depth; 285*592ffb21SWarner Losh /* driver specific handle */ 286*592ffb21SWarner Losh __u32 handle; 287*592ffb21SWarner Losh }; 288*592ffb21SWarner Losh 289*592ffb21SWarner Losh #define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */ 290*592ffb21SWarner Losh 291*592ffb21SWarner Losh struct drm_mode_fb_cmd2 { 292*592ffb21SWarner Losh __u32 fb_id; 293*592ffb21SWarner Losh __u32 width, height; 294*592ffb21SWarner Losh __u32 pixel_format; /* fourcc code from drm_fourcc.h */ 295*592ffb21SWarner Losh __u32 flags; /* see above flags */ 296*592ffb21SWarner Losh 297*592ffb21SWarner Losh /* 298*592ffb21SWarner Losh * In case of planar formats, this ioctl allows up to 4 299*592ffb21SWarner Losh * buffer objects with offets and pitches per plane. 300*592ffb21SWarner Losh * The pitch and offset order is dictated by the fourcc, 301*592ffb21SWarner Losh * e.g. NV12 (http://fourcc.org/yuv.php#NV12) is described as: 302*592ffb21SWarner Losh * 303*592ffb21SWarner Losh * YUV 4:2:0 image with a plane of 8 bit Y samples 304*592ffb21SWarner Losh * followed by an interleaved U/V plane containing 305*592ffb21SWarner Losh * 8 bit 2x2 subsampled colour difference samples. 306*592ffb21SWarner Losh * 307*592ffb21SWarner Losh * So it would consist of Y as offset[0] and UV as 308*592ffb21SWarner Losh * offeset[1]. Note that offset[0] will generally 309*592ffb21SWarner Losh * be 0. 310*592ffb21SWarner Losh */ 311*592ffb21SWarner Losh __u32 handles[4]; 312*592ffb21SWarner Losh __u32 pitches[4]; /* pitch for each plane */ 313*592ffb21SWarner Losh __u32 offsets[4]; /* offset of each plane */ 314*592ffb21SWarner Losh }; 315*592ffb21SWarner Losh 316*592ffb21SWarner Losh #define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01 317*592ffb21SWarner Losh #define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02 318*592ffb21SWarner Losh #define DRM_MODE_FB_DIRTY_FLAGS 0x03 319*592ffb21SWarner Losh 320*592ffb21SWarner Losh #define DRM_MODE_FB_DIRTY_MAX_CLIPS 256 321*592ffb21SWarner Losh 322*592ffb21SWarner Losh /* 323*592ffb21SWarner Losh * Mark a region of a framebuffer as dirty. 324*592ffb21SWarner Losh * 325*592ffb21SWarner Losh * Some hardware does not automatically update display contents 326*592ffb21SWarner Losh * as a hardware or software draw to a framebuffer. This ioctl 327*592ffb21SWarner Losh * allows userspace to tell the kernel and the hardware what 328*592ffb21SWarner Losh * regions of the framebuffer have changed. 329*592ffb21SWarner Losh * 330*592ffb21SWarner Losh * The kernel or hardware is free to update more then just the 331*592ffb21SWarner Losh * region specified by the clip rects. The kernel or hardware 332*592ffb21SWarner Losh * may also delay and/or coalesce several calls to dirty into a 333*592ffb21SWarner Losh * single update. 334*592ffb21SWarner Losh * 335*592ffb21SWarner Losh * Userspace may annotate the updates, the annotates are a 336*592ffb21SWarner Losh * promise made by the caller that the change is either a copy 337*592ffb21SWarner Losh * of pixels or a fill of a single color in the region specified. 338*592ffb21SWarner Losh * 339*592ffb21SWarner Losh * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then 340*592ffb21SWarner Losh * the number of updated regions are half of num_clips given, 341*592ffb21SWarner Losh * where the clip rects are paired in src and dst. The width and 342*592ffb21SWarner Losh * height of each one of the pairs must match. 343*592ffb21SWarner Losh * 344*592ffb21SWarner Losh * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller 345*592ffb21SWarner Losh * promises that the region specified of the clip rects is filled 346*592ffb21SWarner Losh * completely with a single color as given in the color argument. 347*592ffb21SWarner Losh */ 348*592ffb21SWarner Losh 349*592ffb21SWarner Losh struct drm_mode_fb_dirty_cmd { 350*592ffb21SWarner Losh __u32 fb_id; 351*592ffb21SWarner Losh __u32 flags; 352*592ffb21SWarner Losh __u32 color; 353*592ffb21SWarner Losh __u32 num_clips; 354*592ffb21SWarner Losh __u64 clips_ptr; 355*592ffb21SWarner Losh }; 356*592ffb21SWarner Losh 357*592ffb21SWarner Losh struct drm_mode_mode_cmd { 358*592ffb21SWarner Losh __u32 connector_id; 359*592ffb21SWarner Losh struct drm_mode_modeinfo mode; 360*592ffb21SWarner Losh }; 361*592ffb21SWarner Losh 362*592ffb21SWarner Losh #define DRM_MODE_CURSOR_BO 0x01 363*592ffb21SWarner Losh #define DRM_MODE_CURSOR_MOVE 0x02 364*592ffb21SWarner Losh #define DRM_MODE_CURSOR_FLAGS 0x03 365*592ffb21SWarner Losh 366*592ffb21SWarner Losh /* 367*592ffb21SWarner Losh * depending on the value in flags different members are used. 368*592ffb21SWarner Losh * 369*592ffb21SWarner Losh * CURSOR_BO uses 370*592ffb21SWarner Losh * crtc 371*592ffb21SWarner Losh * width 372*592ffb21SWarner Losh * height 373*592ffb21SWarner Losh * handle - if 0 turns the cursor of 374*592ffb21SWarner Losh * 375*592ffb21SWarner Losh * CURSOR_MOVE uses 376*592ffb21SWarner Losh * crtc 377*592ffb21SWarner Losh * x 378*592ffb21SWarner Losh * y 379*592ffb21SWarner Losh */ 380*592ffb21SWarner Losh struct drm_mode_cursor { 381*592ffb21SWarner Losh __u32 flags; 382*592ffb21SWarner Losh __u32 crtc_id; 383*592ffb21SWarner Losh __s32 x; 384*592ffb21SWarner Losh __s32 y; 385*592ffb21SWarner Losh __u32 width; 386*592ffb21SWarner Losh __u32 height; 387*592ffb21SWarner Losh /* driver specific handle */ 388*592ffb21SWarner Losh __u32 handle; 389*592ffb21SWarner Losh }; 390*592ffb21SWarner Losh 391*592ffb21SWarner Losh struct drm_mode_crtc_lut { 392*592ffb21SWarner Losh __u32 crtc_id; 393*592ffb21SWarner Losh __u32 gamma_size; 394*592ffb21SWarner Losh 395*592ffb21SWarner Losh /* pointers to arrays */ 396*592ffb21SWarner Losh __u64 red; 397*592ffb21SWarner Losh __u64 green; 398*592ffb21SWarner Losh __u64 blue; 399*592ffb21SWarner Losh }; 400*592ffb21SWarner Losh 401*592ffb21SWarner Losh #define DRM_MODE_PAGE_FLIP_EVENT 0x01 402*592ffb21SWarner Losh #define DRM_MODE_PAGE_FLIP_FLAGS DRM_MODE_PAGE_FLIP_EVENT 403*592ffb21SWarner Losh 404*592ffb21SWarner Losh /* 405*592ffb21SWarner Losh * Request a page flip on the specified crtc. 406*592ffb21SWarner Losh * 407*592ffb21SWarner Losh * This ioctl will ask KMS to schedule a page flip for the specified 408*592ffb21SWarner Losh * crtc. Once any pending rendering targeting the specified fb (as of 409*592ffb21SWarner Losh * ioctl time) has completed, the crtc will be reprogrammed to display 410*592ffb21SWarner Losh * that fb after the next vertical refresh. The ioctl returns 411*592ffb21SWarner Losh * immediately, but subsequent rendering to the current fb will block 412*592ffb21SWarner Losh * in the execbuffer ioctl until the page flip happens. If a page 413*592ffb21SWarner Losh * flip is already pending as the ioctl is called, EBUSY will be 414*592ffb21SWarner Losh * returned. 415*592ffb21SWarner Losh * 416*592ffb21SWarner Losh * The ioctl supports one flag, DRM_MODE_PAGE_FLIP_EVENT, which will 417*592ffb21SWarner Losh * request that drm sends back a vblank event (see drm.h: struct 418*592ffb21SWarner Losh * drm_event_vblank) when the page flip is done. The user_data field 419*592ffb21SWarner Losh * passed in with this ioctl will be returned as the user_data field 420*592ffb21SWarner Losh * in the vblank event struct. 421*592ffb21SWarner Losh * 422*592ffb21SWarner Losh * The reserved field must be zero until we figure out something 423*592ffb21SWarner Losh * clever to use it for. 424*592ffb21SWarner Losh */ 425*592ffb21SWarner Losh 426*592ffb21SWarner Losh struct drm_mode_crtc_page_flip { 427*592ffb21SWarner Losh __u32 crtc_id; 428*592ffb21SWarner Losh __u32 fb_id; 429*592ffb21SWarner Losh __u32 flags; 430*592ffb21SWarner Losh __u32 reserved; 431*592ffb21SWarner Losh __u64 user_data; 432*592ffb21SWarner Losh }; 433*592ffb21SWarner Losh 434*592ffb21SWarner Losh /* create a dumb scanout buffer */ 435*592ffb21SWarner Losh struct drm_mode_create_dumb { 436*592ffb21SWarner Losh uint32_t height; 437*592ffb21SWarner Losh uint32_t width; 438*592ffb21SWarner Losh uint32_t bpp; 439*592ffb21SWarner Losh uint32_t flags; 440*592ffb21SWarner Losh /* handle, pitch, size will be returned */ 441*592ffb21SWarner Losh uint32_t handle; 442*592ffb21SWarner Losh uint32_t pitch; 443*592ffb21SWarner Losh uint64_t size; 444*592ffb21SWarner Losh }; 445*592ffb21SWarner Losh 446*592ffb21SWarner Losh /* set up for mmap of a dumb scanout buffer */ 447*592ffb21SWarner Losh struct drm_mode_map_dumb { 448*592ffb21SWarner Losh /** Handle for the object being mapped. */ 449*592ffb21SWarner Losh __u32 handle; 450*592ffb21SWarner Losh __u32 pad; 451*592ffb21SWarner Losh /** 452*592ffb21SWarner Losh * Fake offset to use for subsequent mmap call 453*592ffb21SWarner Losh * 454*592ffb21SWarner Losh * This is a fixed-size type for 32/64 compatibility. 455*592ffb21SWarner Losh */ 456*592ffb21SWarner Losh __u64 offset; 457*592ffb21SWarner Losh }; 458*592ffb21SWarner Losh 459*592ffb21SWarner Losh struct drm_mode_destroy_dumb { 460*592ffb21SWarner Losh uint32_t handle; 461*592ffb21SWarner Losh }; 462*592ffb21SWarner Losh 463*592ffb21SWarner Losh #endif 464