1*437bfbebSnyanmisaka /** 2*437bfbebSnyanmisaka * \file drm.h 3*437bfbebSnyanmisaka * Header for the Direct Rendering Manager 4*437bfbebSnyanmisaka * 5*437bfbebSnyanmisaka * \author Rickard E. (Rik) Faith <faith@valinux.com> 6*437bfbebSnyanmisaka * 7*437bfbebSnyanmisaka * \par Acknowledgments: 8*437bfbebSnyanmisaka * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic \c cmpxchg. 9*437bfbebSnyanmisaka */ 10*437bfbebSnyanmisaka 11*437bfbebSnyanmisaka /* 12*437bfbebSnyanmisaka * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 13*437bfbebSnyanmisaka * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 14*437bfbebSnyanmisaka * All rights reserved. 15*437bfbebSnyanmisaka * 16*437bfbebSnyanmisaka * Permission is hereby granted, free of charge, to any person obtaining a 17*437bfbebSnyanmisaka * copy of this software and associated documentation files (the "Software"), 18*437bfbebSnyanmisaka * to deal in the Software without restriction, including without limitation 19*437bfbebSnyanmisaka * the rights to use, copy, modify, merge, publish, distribute, sublicense, 20*437bfbebSnyanmisaka * and/or sell copies of the Software, and to permit persons to whom the 21*437bfbebSnyanmisaka * Software is furnished to do so, subject to the following conditions: 22*437bfbebSnyanmisaka * 23*437bfbebSnyanmisaka * The above copyright notice and this permission notice (including the next 24*437bfbebSnyanmisaka * paragraph) shall be included in all copies or substantial portions of the 25*437bfbebSnyanmisaka * Software. 26*437bfbebSnyanmisaka * 27*437bfbebSnyanmisaka * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 28*437bfbebSnyanmisaka * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 29*437bfbebSnyanmisaka * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 30*437bfbebSnyanmisaka * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 31*437bfbebSnyanmisaka * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 32*437bfbebSnyanmisaka * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 33*437bfbebSnyanmisaka * OTHER DEALINGS IN THE SOFTWARE. 34*437bfbebSnyanmisaka */ 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka #ifndef _DRM_H_ 37*437bfbebSnyanmisaka #define _DRM_H_ 38*437bfbebSnyanmisaka 39*437bfbebSnyanmisaka #if defined(__KERNEL__) 40*437bfbebSnyanmisaka 41*437bfbebSnyanmisaka #include <linux/types.h> 42*437bfbebSnyanmisaka #include <asm/ioctl.h> 43*437bfbebSnyanmisaka typedef unsigned int drm_handle_t; 44*437bfbebSnyanmisaka 45*437bfbebSnyanmisaka #elif defined(__linux__) 46*437bfbebSnyanmisaka 47*437bfbebSnyanmisaka #include <linux/types.h> 48*437bfbebSnyanmisaka #include <asm/ioctl.h> 49*437bfbebSnyanmisaka typedef unsigned int drm_handle_t; 50*437bfbebSnyanmisaka 51*437bfbebSnyanmisaka #else /* One of the BSDs */ 52*437bfbebSnyanmisaka 53*437bfbebSnyanmisaka #include <sys/ioccom.h> 54*437bfbebSnyanmisaka #include <sys/types.h> 55*437bfbebSnyanmisaka typedef int8_t __s8; 56*437bfbebSnyanmisaka typedef uint8_t __u8; 57*437bfbebSnyanmisaka typedef int16_t __s16; 58*437bfbebSnyanmisaka typedef uint16_t __u16; 59*437bfbebSnyanmisaka typedef int32_t __s32; 60*437bfbebSnyanmisaka typedef uint32_t __u32; 61*437bfbebSnyanmisaka typedef int64_t __s64; 62*437bfbebSnyanmisaka typedef uint64_t __u64; 63*437bfbebSnyanmisaka typedef size_t __kernel_size_t; 64*437bfbebSnyanmisaka typedef unsigned long drm_handle_t; 65*437bfbebSnyanmisaka 66*437bfbebSnyanmisaka #endif 67*437bfbebSnyanmisaka 68*437bfbebSnyanmisaka #if defined(__cplusplus) 69*437bfbebSnyanmisaka extern "C" { 70*437bfbebSnyanmisaka #endif 71*437bfbebSnyanmisaka 72*437bfbebSnyanmisaka #define __user 73*437bfbebSnyanmisaka 74*437bfbebSnyanmisaka #define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */ 75*437bfbebSnyanmisaka #define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */ 76*437bfbebSnyanmisaka #define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */ 77*437bfbebSnyanmisaka #define DRM_RAM_PERCENT 10 /**< How much system ram can we lock? */ 78*437bfbebSnyanmisaka 79*437bfbebSnyanmisaka #define _DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ 80*437bfbebSnyanmisaka #define _DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ 81*437bfbebSnyanmisaka #define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD) 82*437bfbebSnyanmisaka #define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT) 83*437bfbebSnyanmisaka #define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT)) 84*437bfbebSnyanmisaka 85*437bfbebSnyanmisaka typedef unsigned int drm_context_t; 86*437bfbebSnyanmisaka typedef unsigned int drm_drawable_t; 87*437bfbebSnyanmisaka typedef unsigned int drm_magic_t; 88*437bfbebSnyanmisaka 89*437bfbebSnyanmisaka /** 90*437bfbebSnyanmisaka * Cliprect. 91*437bfbebSnyanmisaka * 92*437bfbebSnyanmisaka * \warning: If you change this structure, make sure you change 93*437bfbebSnyanmisaka * XF86DRIClipRectRec in the server as well 94*437bfbebSnyanmisaka * 95*437bfbebSnyanmisaka * \note KW: Actually it's illegal to change either for 96*437bfbebSnyanmisaka * backwards-compatibility reasons. 97*437bfbebSnyanmisaka */ 98*437bfbebSnyanmisaka struct drm_clip_rect { 99*437bfbebSnyanmisaka unsigned short x1; 100*437bfbebSnyanmisaka unsigned short y1; 101*437bfbebSnyanmisaka unsigned short x2; 102*437bfbebSnyanmisaka unsigned short y2; 103*437bfbebSnyanmisaka }; 104*437bfbebSnyanmisaka 105*437bfbebSnyanmisaka /** 106*437bfbebSnyanmisaka * Drawable information. 107*437bfbebSnyanmisaka */ 108*437bfbebSnyanmisaka struct drm_drawable_info { 109*437bfbebSnyanmisaka unsigned int num_rects; 110*437bfbebSnyanmisaka struct drm_clip_rect *rects; 111*437bfbebSnyanmisaka }; 112*437bfbebSnyanmisaka 113*437bfbebSnyanmisaka /** 114*437bfbebSnyanmisaka * Texture region, 115*437bfbebSnyanmisaka */ 116*437bfbebSnyanmisaka struct drm_tex_region { 117*437bfbebSnyanmisaka unsigned char next; 118*437bfbebSnyanmisaka unsigned char prev; 119*437bfbebSnyanmisaka unsigned char in_use; 120*437bfbebSnyanmisaka unsigned char padding; 121*437bfbebSnyanmisaka unsigned int age; 122*437bfbebSnyanmisaka }; 123*437bfbebSnyanmisaka 124*437bfbebSnyanmisaka /** 125*437bfbebSnyanmisaka * Hardware lock. 126*437bfbebSnyanmisaka * 127*437bfbebSnyanmisaka * The lock structure is a simple cache-line aligned integer. To avoid 128*437bfbebSnyanmisaka * processor bus contention on a multiprocessor system, there should not be any 129*437bfbebSnyanmisaka * other data stored in the same cache line. 130*437bfbebSnyanmisaka */ 131*437bfbebSnyanmisaka struct drm_hw_lock { 132*437bfbebSnyanmisaka __volatile__ unsigned int lock; /**< lock variable */ 133*437bfbebSnyanmisaka char padding[60]; /**< Pad to cache line */ 134*437bfbebSnyanmisaka }; 135*437bfbebSnyanmisaka 136*437bfbebSnyanmisaka /** 137*437bfbebSnyanmisaka * DRM_IOCTL_VERSION ioctl argument type. 138*437bfbebSnyanmisaka * 139*437bfbebSnyanmisaka * \sa drmGetVersion(). 140*437bfbebSnyanmisaka */ 141*437bfbebSnyanmisaka struct drm_version { 142*437bfbebSnyanmisaka int version_major; /**< Major version */ 143*437bfbebSnyanmisaka int version_minor; /**< Minor version */ 144*437bfbebSnyanmisaka int version_patchlevel; /**< Patch level */ 145*437bfbebSnyanmisaka __kernel_size_t name_len; /**< Length of name buffer */ 146*437bfbebSnyanmisaka char __user *name; /**< Name of driver */ 147*437bfbebSnyanmisaka __kernel_size_t date_len; /**< Length of date buffer */ 148*437bfbebSnyanmisaka char __user *date; /**< User-space buffer to hold date */ 149*437bfbebSnyanmisaka __kernel_size_t desc_len; /**< Length of desc buffer */ 150*437bfbebSnyanmisaka char __user *desc; /**< User-space buffer to hold desc */ 151*437bfbebSnyanmisaka }; 152*437bfbebSnyanmisaka 153*437bfbebSnyanmisaka /** 154*437bfbebSnyanmisaka * DRM_IOCTL_GET_UNIQUE ioctl argument type. 155*437bfbebSnyanmisaka * 156*437bfbebSnyanmisaka * \sa drmGetBusid() and drmSetBusId(). 157*437bfbebSnyanmisaka */ 158*437bfbebSnyanmisaka struct drm_unique { 159*437bfbebSnyanmisaka __kernel_size_t unique_len; /**< Length of unique */ 160*437bfbebSnyanmisaka char __user *unique; /**< Unique name for driver instantiation */ 161*437bfbebSnyanmisaka }; 162*437bfbebSnyanmisaka 163*437bfbebSnyanmisaka struct drm_list { 164*437bfbebSnyanmisaka int count; /**< Length of user-space structures */ 165*437bfbebSnyanmisaka struct drm_version __user *version; 166*437bfbebSnyanmisaka }; 167*437bfbebSnyanmisaka 168*437bfbebSnyanmisaka struct drm_block { 169*437bfbebSnyanmisaka int unused; 170*437bfbebSnyanmisaka }; 171*437bfbebSnyanmisaka 172*437bfbebSnyanmisaka /** 173*437bfbebSnyanmisaka * DRM_IOCTL_CONTROL ioctl argument type. 174*437bfbebSnyanmisaka * 175*437bfbebSnyanmisaka * \sa drmCtlInstHandler() and drmCtlUninstHandler(). 176*437bfbebSnyanmisaka */ 177*437bfbebSnyanmisaka struct drm_control { 178*437bfbebSnyanmisaka enum { 179*437bfbebSnyanmisaka DRM_ADD_COMMAND, 180*437bfbebSnyanmisaka DRM_RM_COMMAND, 181*437bfbebSnyanmisaka DRM_INST_HANDLER, 182*437bfbebSnyanmisaka DRM_UNINST_HANDLER 183*437bfbebSnyanmisaka } func; 184*437bfbebSnyanmisaka int irq; 185*437bfbebSnyanmisaka }; 186*437bfbebSnyanmisaka 187*437bfbebSnyanmisaka /** 188*437bfbebSnyanmisaka * Type of memory to map. 189*437bfbebSnyanmisaka */ 190*437bfbebSnyanmisaka enum drm_map_type { 191*437bfbebSnyanmisaka _DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */ 192*437bfbebSnyanmisaka _DRM_REGISTERS = 1, /**< no caching, no core dump */ 193*437bfbebSnyanmisaka _DRM_SHM = 2, /**< shared, cached */ 194*437bfbebSnyanmisaka _DRM_AGP = 3, /**< AGP/GART */ 195*437bfbebSnyanmisaka _DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */ 196*437bfbebSnyanmisaka _DRM_CONSISTENT = 5 /**< Consistent memory for PCI DMA */ 197*437bfbebSnyanmisaka }; 198*437bfbebSnyanmisaka 199*437bfbebSnyanmisaka /** 200*437bfbebSnyanmisaka * Memory mapping flags. 201*437bfbebSnyanmisaka */ 202*437bfbebSnyanmisaka enum drm_map_flags { 203*437bfbebSnyanmisaka _DRM_RESTRICTED = 0x01, /**< Cannot be mapped to user-virtual */ 204*437bfbebSnyanmisaka _DRM_READ_ONLY = 0x02, 205*437bfbebSnyanmisaka _DRM_LOCKED = 0x04, /**< shared, cached, locked */ 206*437bfbebSnyanmisaka _DRM_KERNEL = 0x08, /**< kernel requires access */ 207*437bfbebSnyanmisaka _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */ 208*437bfbebSnyanmisaka _DRM_CONTAINS_LOCK = 0x20, /**< SHM page that contains lock */ 209*437bfbebSnyanmisaka _DRM_REMOVABLE = 0x40, /**< Removable mapping */ 210*437bfbebSnyanmisaka _DRM_DRIVER = 0x80 /**< Managed by driver */ 211*437bfbebSnyanmisaka }; 212*437bfbebSnyanmisaka 213*437bfbebSnyanmisaka struct drm_ctx_priv_map { 214*437bfbebSnyanmisaka unsigned int ctx_id; /**< Context requesting private mapping */ 215*437bfbebSnyanmisaka void *handle; /**< Handle of map */ 216*437bfbebSnyanmisaka }; 217*437bfbebSnyanmisaka 218*437bfbebSnyanmisaka /** 219*437bfbebSnyanmisaka * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls 220*437bfbebSnyanmisaka * argument type. 221*437bfbebSnyanmisaka * 222*437bfbebSnyanmisaka * \sa drmAddMap(). 223*437bfbebSnyanmisaka */ 224*437bfbebSnyanmisaka struct drm_map { 225*437bfbebSnyanmisaka unsigned long offset; /**< Requested physical address (0 for SAREA)*/ 226*437bfbebSnyanmisaka unsigned long size; /**< Requested physical size (bytes) */ 227*437bfbebSnyanmisaka enum drm_map_type type; /**< Type of memory to map */ 228*437bfbebSnyanmisaka enum drm_map_flags flags; /**< Flags */ 229*437bfbebSnyanmisaka void *handle; /**< User-space: "Handle" to pass to mmap() */ 230*437bfbebSnyanmisaka /**< Kernel-space: kernel-virtual address */ 231*437bfbebSnyanmisaka int mtrr; /**< MTRR slot used */ 232*437bfbebSnyanmisaka /* Private data */ 233*437bfbebSnyanmisaka }; 234*437bfbebSnyanmisaka 235*437bfbebSnyanmisaka /** 236*437bfbebSnyanmisaka * DRM_IOCTL_GET_CLIENT ioctl argument type. 237*437bfbebSnyanmisaka */ 238*437bfbebSnyanmisaka struct drm_client { 239*437bfbebSnyanmisaka int idx; /**< Which client desired? */ 240*437bfbebSnyanmisaka int auth; /**< Is client authenticated? */ 241*437bfbebSnyanmisaka unsigned long pid; /**< Process ID */ 242*437bfbebSnyanmisaka unsigned long uid; /**< User ID */ 243*437bfbebSnyanmisaka unsigned long magic; /**< Magic */ 244*437bfbebSnyanmisaka unsigned long iocs; /**< Ioctl count */ 245*437bfbebSnyanmisaka }; 246*437bfbebSnyanmisaka 247*437bfbebSnyanmisaka enum drm_stat_type { 248*437bfbebSnyanmisaka _DRM_STAT_LOCK, 249*437bfbebSnyanmisaka _DRM_STAT_OPENS, 250*437bfbebSnyanmisaka _DRM_STAT_CLOSES, 251*437bfbebSnyanmisaka _DRM_STAT_IOCTLS, 252*437bfbebSnyanmisaka _DRM_STAT_LOCKS, 253*437bfbebSnyanmisaka _DRM_STAT_UNLOCKS, 254*437bfbebSnyanmisaka _DRM_STAT_VALUE, /**< Generic value */ 255*437bfbebSnyanmisaka _DRM_STAT_BYTE, /**< Generic byte counter (1024bytes/K) */ 256*437bfbebSnyanmisaka _DRM_STAT_COUNT, /**< Generic non-byte counter (1000/k) */ 257*437bfbebSnyanmisaka 258*437bfbebSnyanmisaka _DRM_STAT_IRQ, /**< IRQ */ 259*437bfbebSnyanmisaka _DRM_STAT_PRIMARY, /**< Primary DMA bytes */ 260*437bfbebSnyanmisaka _DRM_STAT_SECONDARY, /**< Secondary DMA bytes */ 261*437bfbebSnyanmisaka _DRM_STAT_DMA, /**< DMA */ 262*437bfbebSnyanmisaka _DRM_STAT_SPECIAL, /**< Special DMA (e.g., priority or polled) */ 263*437bfbebSnyanmisaka _DRM_STAT_MISSED /**< Missed DMA opportunity */ 264*437bfbebSnyanmisaka /* Add to the *END* of the list */ 265*437bfbebSnyanmisaka }; 266*437bfbebSnyanmisaka 267*437bfbebSnyanmisaka /** 268*437bfbebSnyanmisaka * DRM_IOCTL_GET_STATS ioctl argument type. 269*437bfbebSnyanmisaka */ 270*437bfbebSnyanmisaka struct drm_stats { 271*437bfbebSnyanmisaka unsigned long count; 272*437bfbebSnyanmisaka struct { 273*437bfbebSnyanmisaka unsigned long value; 274*437bfbebSnyanmisaka enum drm_stat_type type; 275*437bfbebSnyanmisaka } data[15]; 276*437bfbebSnyanmisaka }; 277*437bfbebSnyanmisaka 278*437bfbebSnyanmisaka /** 279*437bfbebSnyanmisaka * Hardware locking flags. 280*437bfbebSnyanmisaka */ 281*437bfbebSnyanmisaka enum drm_lock_flags { 282*437bfbebSnyanmisaka _DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ 283*437bfbebSnyanmisaka _DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ 284*437bfbebSnyanmisaka _DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ 285*437bfbebSnyanmisaka _DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ 286*437bfbebSnyanmisaka /* These *HALT* flags aren't supported yet 287*437bfbebSnyanmisaka -- they will be used to support the 288*437bfbebSnyanmisaka full-screen DGA-like mode. */ 289*437bfbebSnyanmisaka _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ 290*437bfbebSnyanmisaka _DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ 291*437bfbebSnyanmisaka }; 292*437bfbebSnyanmisaka 293*437bfbebSnyanmisaka /** 294*437bfbebSnyanmisaka * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type. 295*437bfbebSnyanmisaka * 296*437bfbebSnyanmisaka * \sa drmGetLock() and drmUnlock(). 297*437bfbebSnyanmisaka */ 298*437bfbebSnyanmisaka struct drm_lock { 299*437bfbebSnyanmisaka int context; 300*437bfbebSnyanmisaka enum drm_lock_flags flags; 301*437bfbebSnyanmisaka }; 302*437bfbebSnyanmisaka 303*437bfbebSnyanmisaka /** 304*437bfbebSnyanmisaka * DMA flags 305*437bfbebSnyanmisaka * 306*437bfbebSnyanmisaka * \warning 307*437bfbebSnyanmisaka * These values \e must match xf86drm.h. 308*437bfbebSnyanmisaka * 309*437bfbebSnyanmisaka * \sa drm_dma. 310*437bfbebSnyanmisaka */ 311*437bfbebSnyanmisaka enum drm_dma_flags { 312*437bfbebSnyanmisaka /* Flags for DMA buffer dispatch */ 313*437bfbebSnyanmisaka _DRM_DMA_BLOCK = 0x01, /**< 314*437bfbebSnyanmisaka * Block until buffer dispatched. 315*437bfbebSnyanmisaka * 316*437bfbebSnyanmisaka * \note The buffer may not yet have 317*437bfbebSnyanmisaka * been processed by the hardware -- 318*437bfbebSnyanmisaka * getting a hardware lock with the 319*437bfbebSnyanmisaka * hardware quiescent will ensure 320*437bfbebSnyanmisaka * that the buffer has been 321*437bfbebSnyanmisaka * processed. 322*437bfbebSnyanmisaka */ 323*437bfbebSnyanmisaka _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ 324*437bfbebSnyanmisaka _DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ 325*437bfbebSnyanmisaka 326*437bfbebSnyanmisaka /* Flags for DMA buffer request */ 327*437bfbebSnyanmisaka _DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ 328*437bfbebSnyanmisaka _DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ 329*437bfbebSnyanmisaka _DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ 330*437bfbebSnyanmisaka }; 331*437bfbebSnyanmisaka 332*437bfbebSnyanmisaka /** 333*437bfbebSnyanmisaka * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type. 334*437bfbebSnyanmisaka * 335*437bfbebSnyanmisaka * \sa drmAddBufs(). 336*437bfbebSnyanmisaka */ 337*437bfbebSnyanmisaka struct drm_buf_desc { 338*437bfbebSnyanmisaka int count; /**< Number of buffers of this size */ 339*437bfbebSnyanmisaka int size; /**< Size in bytes */ 340*437bfbebSnyanmisaka int low_mark; /**< Low water mark */ 341*437bfbebSnyanmisaka int high_mark; /**< High water mark */ 342*437bfbebSnyanmisaka enum { 343*437bfbebSnyanmisaka _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */ 344*437bfbebSnyanmisaka _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */ 345*437bfbebSnyanmisaka _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */ 346*437bfbebSnyanmisaka _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */ 347*437bfbebSnyanmisaka _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */ 348*437bfbebSnyanmisaka } flags; 349*437bfbebSnyanmisaka unsigned long agp_start; /**< 350*437bfbebSnyanmisaka * Start address of where the AGP buffers are 351*437bfbebSnyanmisaka * in the AGP aperture 352*437bfbebSnyanmisaka */ 353*437bfbebSnyanmisaka }; 354*437bfbebSnyanmisaka 355*437bfbebSnyanmisaka /** 356*437bfbebSnyanmisaka * DRM_IOCTL_INFO_BUFS ioctl argument type. 357*437bfbebSnyanmisaka */ 358*437bfbebSnyanmisaka struct drm_buf_info { 359*437bfbebSnyanmisaka int count; /**< Entries in list */ 360*437bfbebSnyanmisaka struct drm_buf_desc __user *list; 361*437bfbebSnyanmisaka }; 362*437bfbebSnyanmisaka 363*437bfbebSnyanmisaka /** 364*437bfbebSnyanmisaka * DRM_IOCTL_FREE_BUFS ioctl argument type. 365*437bfbebSnyanmisaka */ 366*437bfbebSnyanmisaka struct drm_buf_free { 367*437bfbebSnyanmisaka int count; 368*437bfbebSnyanmisaka int __user *list; 369*437bfbebSnyanmisaka }; 370*437bfbebSnyanmisaka 371*437bfbebSnyanmisaka /** 372*437bfbebSnyanmisaka * Buffer information 373*437bfbebSnyanmisaka * 374*437bfbebSnyanmisaka * \sa drm_buf_map. 375*437bfbebSnyanmisaka */ 376*437bfbebSnyanmisaka struct drm_buf_pub { 377*437bfbebSnyanmisaka int idx; /**< Index into the master buffer list */ 378*437bfbebSnyanmisaka int total; /**< Buffer size */ 379*437bfbebSnyanmisaka int used; /**< Amount of buffer in use (for DMA) */ 380*437bfbebSnyanmisaka void __user *address; /**< Address of buffer */ 381*437bfbebSnyanmisaka }; 382*437bfbebSnyanmisaka 383*437bfbebSnyanmisaka /** 384*437bfbebSnyanmisaka * DRM_IOCTL_MAP_BUFS ioctl argument type. 385*437bfbebSnyanmisaka */ 386*437bfbebSnyanmisaka struct drm_buf_map { 387*437bfbebSnyanmisaka int count; /**< Length of the buffer list */ 388*437bfbebSnyanmisaka #ifdef __cplusplus 389*437bfbebSnyanmisaka void __user *virt; 390*437bfbebSnyanmisaka #else 391*437bfbebSnyanmisaka void __user *virtual; /**< Mmap'd area in user-virtual */ 392*437bfbebSnyanmisaka #endif 393*437bfbebSnyanmisaka struct drm_buf_pub __user *list; /**< Buffer information */ 394*437bfbebSnyanmisaka }; 395*437bfbebSnyanmisaka 396*437bfbebSnyanmisaka /** 397*437bfbebSnyanmisaka * DRM_IOCTL_DMA ioctl argument type. 398*437bfbebSnyanmisaka * 399*437bfbebSnyanmisaka * Indices here refer to the offset into the buffer list in drm_buf_get. 400*437bfbebSnyanmisaka * 401*437bfbebSnyanmisaka * \sa drmDMA(). 402*437bfbebSnyanmisaka */ 403*437bfbebSnyanmisaka struct drm_dma { 404*437bfbebSnyanmisaka int context; /**< Context handle */ 405*437bfbebSnyanmisaka int send_count; /**< Number of buffers to send */ 406*437bfbebSnyanmisaka int __user *send_indices; /**< List of handles to buffers */ 407*437bfbebSnyanmisaka int __user *send_sizes; /**< Lengths of data to send */ 408*437bfbebSnyanmisaka enum drm_dma_flags flags; /**< Flags */ 409*437bfbebSnyanmisaka int request_count; /**< Number of buffers requested */ 410*437bfbebSnyanmisaka int request_size; /**< Desired size for buffers */ 411*437bfbebSnyanmisaka int __user *request_indices; /**< Buffer information */ 412*437bfbebSnyanmisaka int __user *request_sizes; 413*437bfbebSnyanmisaka int granted_count; /**< Number of buffers granted */ 414*437bfbebSnyanmisaka }; 415*437bfbebSnyanmisaka 416*437bfbebSnyanmisaka enum drm_ctx_flags { 417*437bfbebSnyanmisaka _DRM_CONTEXT_PRESERVED = 0x01, 418*437bfbebSnyanmisaka _DRM_CONTEXT_2DONLY = 0x02 419*437bfbebSnyanmisaka }; 420*437bfbebSnyanmisaka 421*437bfbebSnyanmisaka /** 422*437bfbebSnyanmisaka * DRM_IOCTL_ADD_CTX ioctl argument type. 423*437bfbebSnyanmisaka * 424*437bfbebSnyanmisaka * \sa drmCreateContext() and drmDestroyContext(). 425*437bfbebSnyanmisaka */ 426*437bfbebSnyanmisaka struct drm_ctx { 427*437bfbebSnyanmisaka drm_context_t handle; 428*437bfbebSnyanmisaka enum drm_ctx_flags flags; 429*437bfbebSnyanmisaka }; 430*437bfbebSnyanmisaka 431*437bfbebSnyanmisaka /** 432*437bfbebSnyanmisaka * DRM_IOCTL_RES_CTX ioctl argument type. 433*437bfbebSnyanmisaka */ 434*437bfbebSnyanmisaka struct drm_ctx_res { 435*437bfbebSnyanmisaka int count; 436*437bfbebSnyanmisaka struct drm_ctx __user *contexts; 437*437bfbebSnyanmisaka }; 438*437bfbebSnyanmisaka 439*437bfbebSnyanmisaka /** 440*437bfbebSnyanmisaka * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type. 441*437bfbebSnyanmisaka */ 442*437bfbebSnyanmisaka struct drm_draw { 443*437bfbebSnyanmisaka drm_drawable_t handle; 444*437bfbebSnyanmisaka }; 445*437bfbebSnyanmisaka 446*437bfbebSnyanmisaka /** 447*437bfbebSnyanmisaka * DRM_IOCTL_UPDATE_DRAW ioctl argument type. 448*437bfbebSnyanmisaka */ 449*437bfbebSnyanmisaka typedef enum { 450*437bfbebSnyanmisaka DRM_DRAWABLE_CLIPRECTS 451*437bfbebSnyanmisaka } drm_drawable_info_type_t; 452*437bfbebSnyanmisaka 453*437bfbebSnyanmisaka struct drm_update_draw { 454*437bfbebSnyanmisaka drm_drawable_t handle; 455*437bfbebSnyanmisaka unsigned int type; 456*437bfbebSnyanmisaka unsigned int num; 457*437bfbebSnyanmisaka unsigned long long data; 458*437bfbebSnyanmisaka }; 459*437bfbebSnyanmisaka 460*437bfbebSnyanmisaka /** 461*437bfbebSnyanmisaka * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type. 462*437bfbebSnyanmisaka */ 463*437bfbebSnyanmisaka struct drm_auth { 464*437bfbebSnyanmisaka drm_magic_t magic; 465*437bfbebSnyanmisaka }; 466*437bfbebSnyanmisaka 467*437bfbebSnyanmisaka /** 468*437bfbebSnyanmisaka * DRM_IOCTL_IRQ_BUSID ioctl argument type. 469*437bfbebSnyanmisaka * 470*437bfbebSnyanmisaka * \sa drmGetInterruptFromBusID(). 471*437bfbebSnyanmisaka */ 472*437bfbebSnyanmisaka struct drm_irq_busid { 473*437bfbebSnyanmisaka int irq; /**< IRQ number */ 474*437bfbebSnyanmisaka int busnum; /**< bus number */ 475*437bfbebSnyanmisaka int devnum; /**< device number */ 476*437bfbebSnyanmisaka int funcnum; /**< function number */ 477*437bfbebSnyanmisaka }; 478*437bfbebSnyanmisaka 479*437bfbebSnyanmisaka enum drm_vblank_seq_type { 480*437bfbebSnyanmisaka _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ 481*437bfbebSnyanmisaka _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ 482*437bfbebSnyanmisaka /* bits 1-6 are reserved for high crtcs */ 483*437bfbebSnyanmisaka _DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e, 484*437bfbebSnyanmisaka _DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ 485*437bfbebSnyanmisaka _DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ 486*437bfbebSnyanmisaka _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ 487*437bfbebSnyanmisaka _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ 488*437bfbebSnyanmisaka _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking, unsupported */ 489*437bfbebSnyanmisaka }; 490*437bfbebSnyanmisaka #define _DRM_VBLANK_HIGH_CRTC_SHIFT 1 491*437bfbebSnyanmisaka 492*437bfbebSnyanmisaka #define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE) 493*437bfbebSnyanmisaka #define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_EVENT | _DRM_VBLANK_SIGNAL | \ 494*437bfbebSnyanmisaka _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS) 495*437bfbebSnyanmisaka 496*437bfbebSnyanmisaka struct drm_wait_vblank_request { 497*437bfbebSnyanmisaka enum drm_vblank_seq_type type; 498*437bfbebSnyanmisaka unsigned int sequence; 499*437bfbebSnyanmisaka unsigned long signal; 500*437bfbebSnyanmisaka }; 501*437bfbebSnyanmisaka 502*437bfbebSnyanmisaka struct drm_wait_vblank_reply { 503*437bfbebSnyanmisaka enum drm_vblank_seq_type type; 504*437bfbebSnyanmisaka unsigned int sequence; 505*437bfbebSnyanmisaka long tval_sec; 506*437bfbebSnyanmisaka long tval_usec; 507*437bfbebSnyanmisaka }; 508*437bfbebSnyanmisaka 509*437bfbebSnyanmisaka /** 510*437bfbebSnyanmisaka * DRM_IOCTL_WAIT_VBLANK ioctl argument type. 511*437bfbebSnyanmisaka * 512*437bfbebSnyanmisaka * \sa drmWaitVBlank(). 513*437bfbebSnyanmisaka */ 514*437bfbebSnyanmisaka union drm_wait_vblank { 515*437bfbebSnyanmisaka struct drm_wait_vblank_request request; 516*437bfbebSnyanmisaka struct drm_wait_vblank_reply reply; 517*437bfbebSnyanmisaka }; 518*437bfbebSnyanmisaka 519*437bfbebSnyanmisaka #define _DRM_PRE_MODESET 1 520*437bfbebSnyanmisaka #define _DRM_POST_MODESET 2 521*437bfbebSnyanmisaka 522*437bfbebSnyanmisaka /** 523*437bfbebSnyanmisaka * DRM_IOCTL_MODESET_CTL ioctl argument type 524*437bfbebSnyanmisaka * 525*437bfbebSnyanmisaka * \sa drmModesetCtl(). 526*437bfbebSnyanmisaka */ 527*437bfbebSnyanmisaka struct drm_modeset_ctl { 528*437bfbebSnyanmisaka __u32 crtc; 529*437bfbebSnyanmisaka __u32 cmd; 530*437bfbebSnyanmisaka }; 531*437bfbebSnyanmisaka 532*437bfbebSnyanmisaka /** 533*437bfbebSnyanmisaka * DRM_IOCTL_AGP_ENABLE ioctl argument type. 534*437bfbebSnyanmisaka * 535*437bfbebSnyanmisaka * \sa drmAgpEnable(). 536*437bfbebSnyanmisaka */ 537*437bfbebSnyanmisaka struct drm_agp_mode { 538*437bfbebSnyanmisaka unsigned long mode; /**< AGP mode */ 539*437bfbebSnyanmisaka }; 540*437bfbebSnyanmisaka 541*437bfbebSnyanmisaka /** 542*437bfbebSnyanmisaka * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type. 543*437bfbebSnyanmisaka * 544*437bfbebSnyanmisaka * \sa drmAgpAlloc() and drmAgpFree(). 545*437bfbebSnyanmisaka */ 546*437bfbebSnyanmisaka struct drm_agp_buffer { 547*437bfbebSnyanmisaka unsigned long size; /**< In bytes -- will round to page boundary */ 548*437bfbebSnyanmisaka unsigned long handle; /**< Used for binding / unbinding */ 549*437bfbebSnyanmisaka unsigned long type; /**< Type of memory to allocate */ 550*437bfbebSnyanmisaka unsigned long physical; /**< Physical used by i810 */ 551*437bfbebSnyanmisaka }; 552*437bfbebSnyanmisaka 553*437bfbebSnyanmisaka /** 554*437bfbebSnyanmisaka * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type. 555*437bfbebSnyanmisaka * 556*437bfbebSnyanmisaka * \sa drmAgpBind() and drmAgpUnbind(). 557*437bfbebSnyanmisaka */ 558*437bfbebSnyanmisaka struct drm_agp_binding { 559*437bfbebSnyanmisaka unsigned long handle; /**< From drm_agp_buffer */ 560*437bfbebSnyanmisaka unsigned long offset; /**< In bytes -- will round to page boundary */ 561*437bfbebSnyanmisaka }; 562*437bfbebSnyanmisaka 563*437bfbebSnyanmisaka /** 564*437bfbebSnyanmisaka * DRM_IOCTL_AGP_INFO ioctl argument type. 565*437bfbebSnyanmisaka * 566*437bfbebSnyanmisaka * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(), 567*437bfbebSnyanmisaka * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(), 568*437bfbebSnyanmisaka * drmAgpVendorId() and drmAgpDeviceId(). 569*437bfbebSnyanmisaka */ 570*437bfbebSnyanmisaka struct drm_agp_info { 571*437bfbebSnyanmisaka int agp_version_major; 572*437bfbebSnyanmisaka int agp_version_minor; 573*437bfbebSnyanmisaka unsigned long mode; 574*437bfbebSnyanmisaka unsigned long aperture_base; /* physical address */ 575*437bfbebSnyanmisaka unsigned long aperture_size; /* bytes */ 576*437bfbebSnyanmisaka unsigned long memory_allowed; /* bytes */ 577*437bfbebSnyanmisaka unsigned long memory_used; 578*437bfbebSnyanmisaka 579*437bfbebSnyanmisaka /* PCI information */ 580*437bfbebSnyanmisaka unsigned short id_vendor; 581*437bfbebSnyanmisaka unsigned short id_device; 582*437bfbebSnyanmisaka }; 583*437bfbebSnyanmisaka 584*437bfbebSnyanmisaka /** 585*437bfbebSnyanmisaka * DRM_IOCTL_SG_ALLOC ioctl argument type. 586*437bfbebSnyanmisaka */ 587*437bfbebSnyanmisaka struct drm_scatter_gather { 588*437bfbebSnyanmisaka unsigned long size; /**< In bytes -- will round to page boundary */ 589*437bfbebSnyanmisaka unsigned long handle; /**< Used for mapping / unmapping */ 590*437bfbebSnyanmisaka }; 591*437bfbebSnyanmisaka 592*437bfbebSnyanmisaka /** 593*437bfbebSnyanmisaka * DRM_IOCTL_SET_VERSION ioctl argument type. 594*437bfbebSnyanmisaka */ 595*437bfbebSnyanmisaka struct drm_set_version { 596*437bfbebSnyanmisaka int drm_di_major; 597*437bfbebSnyanmisaka int drm_di_minor; 598*437bfbebSnyanmisaka int drm_dd_major; 599*437bfbebSnyanmisaka int drm_dd_minor; 600*437bfbebSnyanmisaka }; 601*437bfbebSnyanmisaka 602*437bfbebSnyanmisaka /** DRM_IOCTL_GEM_CLOSE ioctl argument type */ 603*437bfbebSnyanmisaka struct drm_gem_close { 604*437bfbebSnyanmisaka /** Handle of the object to be closed. */ 605*437bfbebSnyanmisaka __u32 handle; 606*437bfbebSnyanmisaka __u32 pad; 607*437bfbebSnyanmisaka }; 608*437bfbebSnyanmisaka 609*437bfbebSnyanmisaka /** DRM_IOCTL_GEM_FLINK ioctl argument type */ 610*437bfbebSnyanmisaka struct drm_gem_flink { 611*437bfbebSnyanmisaka /** Handle for the object being named */ 612*437bfbebSnyanmisaka __u32 handle; 613*437bfbebSnyanmisaka 614*437bfbebSnyanmisaka /** Returned global name */ 615*437bfbebSnyanmisaka __u32 name; 616*437bfbebSnyanmisaka }; 617*437bfbebSnyanmisaka 618*437bfbebSnyanmisaka /** DRM_IOCTL_GEM_OPEN ioctl argument type */ 619*437bfbebSnyanmisaka struct drm_gem_open { 620*437bfbebSnyanmisaka /** Name of object being opened */ 621*437bfbebSnyanmisaka __u32 name; 622*437bfbebSnyanmisaka 623*437bfbebSnyanmisaka /** Returned handle for the object */ 624*437bfbebSnyanmisaka __u32 handle; 625*437bfbebSnyanmisaka 626*437bfbebSnyanmisaka /** Returned size of the object */ 627*437bfbebSnyanmisaka __u64 size; 628*437bfbebSnyanmisaka }; 629*437bfbebSnyanmisaka 630*437bfbebSnyanmisaka #define DRM_CAP_DUMB_BUFFER 0x1 631*437bfbebSnyanmisaka #define DRM_CAP_VBLANK_HIGH_CRTC 0x2 632*437bfbebSnyanmisaka #define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3 633*437bfbebSnyanmisaka #define DRM_CAP_DUMB_PREFER_SHADOW 0x4 634*437bfbebSnyanmisaka #define DRM_CAP_PRIME 0x5 635*437bfbebSnyanmisaka #define DRM_PRIME_CAP_IMPORT 0x1 636*437bfbebSnyanmisaka #define DRM_PRIME_CAP_EXPORT 0x2 637*437bfbebSnyanmisaka #define DRM_CAP_TIMESTAMP_MONOTONIC 0x6 638*437bfbebSnyanmisaka #define DRM_CAP_ASYNC_PAGE_FLIP 0x7 639*437bfbebSnyanmisaka /* 640*437bfbebSnyanmisaka * The CURSOR_WIDTH and CURSOR_HEIGHT capabilities return a valid widthxheight 641*437bfbebSnyanmisaka * combination for the hardware cursor. The intention is that a hardware 642*437bfbebSnyanmisaka * agnostic userspace can query a cursor plane size to use. 643*437bfbebSnyanmisaka * 644*437bfbebSnyanmisaka * Note that the cross-driver contract is to merely return a valid size; 645*437bfbebSnyanmisaka * drivers are free to attach another meaning on top, eg. i915 returns the 646*437bfbebSnyanmisaka * maximum plane size. 647*437bfbebSnyanmisaka */ 648*437bfbebSnyanmisaka #define DRM_CAP_CURSOR_WIDTH 0x8 649*437bfbebSnyanmisaka #define DRM_CAP_CURSOR_HEIGHT 0x9 650*437bfbebSnyanmisaka #define DRM_CAP_ADDFB2_MODIFIERS 0x10 651*437bfbebSnyanmisaka #define DRM_CAP_PAGE_FLIP_TARGET 0x11 652*437bfbebSnyanmisaka #define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12 653*437bfbebSnyanmisaka #define DRM_CAP_SYNCOBJ 0x13 654*437bfbebSnyanmisaka 655*437bfbebSnyanmisaka /** DRM_IOCTL_GET_CAP ioctl argument type */ 656*437bfbebSnyanmisaka struct drm_get_cap { 657*437bfbebSnyanmisaka __u64 capability; 658*437bfbebSnyanmisaka __u64 value; 659*437bfbebSnyanmisaka }; 660*437bfbebSnyanmisaka 661*437bfbebSnyanmisaka /** 662*437bfbebSnyanmisaka * DRM_CLIENT_CAP_STEREO_3D 663*437bfbebSnyanmisaka * 664*437bfbebSnyanmisaka * if set to 1, the DRM core will expose the stereo 3D capabilities of the 665*437bfbebSnyanmisaka * monitor by advertising the supported 3D layouts in the flags of struct 666*437bfbebSnyanmisaka * drm_mode_modeinfo. 667*437bfbebSnyanmisaka */ 668*437bfbebSnyanmisaka #define DRM_CLIENT_CAP_STEREO_3D 1 669*437bfbebSnyanmisaka 670*437bfbebSnyanmisaka /** 671*437bfbebSnyanmisaka * DRM_CLIENT_CAP_UNIVERSAL_PLANES 672*437bfbebSnyanmisaka * 673*437bfbebSnyanmisaka * If set to 1, the DRM core will expose all planes (overlay, primary, and 674*437bfbebSnyanmisaka * cursor) to userspace. 675*437bfbebSnyanmisaka */ 676*437bfbebSnyanmisaka #define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2 677*437bfbebSnyanmisaka 678*437bfbebSnyanmisaka /** 679*437bfbebSnyanmisaka * DRM_CLIENT_CAP_ATOMIC 680*437bfbebSnyanmisaka * 681*437bfbebSnyanmisaka * If set to 1, the DRM core will expose atomic properties to userspace 682*437bfbebSnyanmisaka */ 683*437bfbebSnyanmisaka #define DRM_CLIENT_CAP_ATOMIC 3 684*437bfbebSnyanmisaka 685*437bfbebSnyanmisaka /** 686*437bfbebSnyanmisaka * DRM_CLIENT_CAP_ASPECT_RATIO 687*437bfbebSnyanmisaka * 688*437bfbebSnyanmisaka * If set to 1, the DRM core will provide aspect ratio information in modes. 689*437bfbebSnyanmisaka */ 690*437bfbebSnyanmisaka #define DRM_CLIENT_CAP_ASPECT_RATIO 4 691*437bfbebSnyanmisaka 692*437bfbebSnyanmisaka /** 693*437bfbebSnyanmisaka * DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 694*437bfbebSnyanmisaka * 695*437bfbebSnyanmisaka * If set to 1, the DRM core will expose special connectors to be used for 696*437bfbebSnyanmisaka * writing back to memory the scene setup in the commit. Depends on client 697*437bfbebSnyanmisaka * also supporting DRM_CLIENT_CAP_ATOMIC 698*437bfbebSnyanmisaka */ 699*437bfbebSnyanmisaka #define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 5 700*437bfbebSnyanmisaka 701*437bfbebSnyanmisaka /* 702*437bfbebSnyanmisaka * DRM_CLIENT_CAP_SHARE_PLANES 703*437bfbebSnyanmisaka * 704*437bfbebSnyanmisaka * If set to 1, the DRM core will expose share planes to userspace. 705*437bfbebSnyanmisaka */ 706*437bfbebSnyanmisaka #define DRM_CLIENT_CAP_SHARE_PLANES 6 707*437bfbebSnyanmisaka 708*437bfbebSnyanmisaka /** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */ 709*437bfbebSnyanmisaka struct drm_set_client_cap { 710*437bfbebSnyanmisaka __u64 capability; 711*437bfbebSnyanmisaka __u64 value; 712*437bfbebSnyanmisaka }; 713*437bfbebSnyanmisaka 714*437bfbebSnyanmisaka #define DRM_RDWR O_RDWR 715*437bfbebSnyanmisaka #define DRM_CLOEXEC O_CLOEXEC 716*437bfbebSnyanmisaka struct drm_prime_handle { 717*437bfbebSnyanmisaka __u32 handle; 718*437bfbebSnyanmisaka 719*437bfbebSnyanmisaka /** Flags.. only applicable for handle->fd */ 720*437bfbebSnyanmisaka __u32 flags; 721*437bfbebSnyanmisaka 722*437bfbebSnyanmisaka /** Returned dmabuf file descriptor */ 723*437bfbebSnyanmisaka __s32 fd; 724*437bfbebSnyanmisaka }; 725*437bfbebSnyanmisaka 726*437bfbebSnyanmisaka struct drm_syncobj_create { 727*437bfbebSnyanmisaka __u32 handle; 728*437bfbebSnyanmisaka #define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0) 729*437bfbebSnyanmisaka __u32 flags; 730*437bfbebSnyanmisaka }; 731*437bfbebSnyanmisaka 732*437bfbebSnyanmisaka struct drm_syncobj_destroy { 733*437bfbebSnyanmisaka __u32 handle; 734*437bfbebSnyanmisaka __u32 pad; 735*437bfbebSnyanmisaka }; 736*437bfbebSnyanmisaka 737*437bfbebSnyanmisaka #define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) 738*437bfbebSnyanmisaka #define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) 739*437bfbebSnyanmisaka struct drm_syncobj_handle { 740*437bfbebSnyanmisaka __u32 handle; 741*437bfbebSnyanmisaka __u32 flags; 742*437bfbebSnyanmisaka 743*437bfbebSnyanmisaka __s32 fd; 744*437bfbebSnyanmisaka __u32 pad; 745*437bfbebSnyanmisaka }; 746*437bfbebSnyanmisaka 747*437bfbebSnyanmisaka #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) 748*437bfbebSnyanmisaka #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) 749*437bfbebSnyanmisaka struct drm_syncobj_wait { 750*437bfbebSnyanmisaka __u64 handles; 751*437bfbebSnyanmisaka /* absolute timeout */ 752*437bfbebSnyanmisaka __s64 timeout_nsec; 753*437bfbebSnyanmisaka __u32 count_handles; 754*437bfbebSnyanmisaka __u32 flags; 755*437bfbebSnyanmisaka __u32 first_signaled; /* only valid when not waiting all */ 756*437bfbebSnyanmisaka __u32 pad; 757*437bfbebSnyanmisaka }; 758*437bfbebSnyanmisaka 759*437bfbebSnyanmisaka struct drm_syncobj_array { 760*437bfbebSnyanmisaka __u64 handles; 761*437bfbebSnyanmisaka __u32 count_handles; 762*437bfbebSnyanmisaka __u32 pad; 763*437bfbebSnyanmisaka }; 764*437bfbebSnyanmisaka 765*437bfbebSnyanmisaka /* Query current scanout sequence number */ 766*437bfbebSnyanmisaka struct drm_crtc_get_sequence { 767*437bfbebSnyanmisaka __u32 crtc_id; /* requested crtc_id */ 768*437bfbebSnyanmisaka __u32 active; /* return: crtc output is active */ 769*437bfbebSnyanmisaka __u64 sequence; /* return: most recent vblank sequence */ 770*437bfbebSnyanmisaka __s64 sequence_ns; /* return: most recent time of first pixel out */ 771*437bfbebSnyanmisaka }; 772*437bfbebSnyanmisaka 773*437bfbebSnyanmisaka /* Queue event to be delivered at specified sequence. Time stamp marks 774*437bfbebSnyanmisaka * when the first pixel of the refresh cycle leaves the display engine 775*437bfbebSnyanmisaka * for the display 776*437bfbebSnyanmisaka */ 777*437bfbebSnyanmisaka #define DRM_CRTC_SEQUENCE_RELATIVE 0x00000001 /* sequence is relative to current */ 778*437bfbebSnyanmisaka #define DRM_CRTC_SEQUENCE_NEXT_ON_MISS 0x00000002 /* Use next sequence if we've missed */ 779*437bfbebSnyanmisaka 780*437bfbebSnyanmisaka struct drm_crtc_queue_sequence { 781*437bfbebSnyanmisaka __u32 crtc_id; 782*437bfbebSnyanmisaka __u32 flags; 783*437bfbebSnyanmisaka __u64 sequence; /* on input, target sequence. on output, actual sequence */ 784*437bfbebSnyanmisaka __u64 user_data; /* user data passed to event */ 785*437bfbebSnyanmisaka }; 786*437bfbebSnyanmisaka 787*437bfbebSnyanmisaka #if defined(__cplusplus) 788*437bfbebSnyanmisaka } 789*437bfbebSnyanmisaka #endif 790*437bfbebSnyanmisaka 791*437bfbebSnyanmisaka #include "drm_mode.h" 792*437bfbebSnyanmisaka 793*437bfbebSnyanmisaka #if defined(__cplusplus) 794*437bfbebSnyanmisaka extern "C" { 795*437bfbebSnyanmisaka #endif 796*437bfbebSnyanmisaka 797*437bfbebSnyanmisaka #define DRM_IOCTL_BASE 'd' 798*437bfbebSnyanmisaka #define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) 799*437bfbebSnyanmisaka #define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) 800*437bfbebSnyanmisaka #define DRM_IOW(nr,type) _IOW(DRM_IOCTL_BASE,nr,type) 801*437bfbebSnyanmisaka #define DRM_IOWR(nr,type) _IOWR(DRM_IOCTL_BASE,nr,type) 802*437bfbebSnyanmisaka 803*437bfbebSnyanmisaka #define DRM_IOCTL_VERSION DRM_IOWR(0x00, struct drm_version) 804*437bfbebSnyanmisaka #define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, struct drm_unique) 805*437bfbebSnyanmisaka #define DRM_IOCTL_GET_MAGIC DRM_IOR( 0x02, struct drm_auth) 806*437bfbebSnyanmisaka #define DRM_IOCTL_IRQ_BUSID DRM_IOWR(0x03, struct drm_irq_busid) 807*437bfbebSnyanmisaka #define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, struct drm_map) 808*437bfbebSnyanmisaka #define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client) 809*437bfbebSnyanmisaka #define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats) 810*437bfbebSnyanmisaka #define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version) 811*437bfbebSnyanmisaka #define DRM_IOCTL_MODESET_CTL DRM_IOW(0x08, struct drm_modeset_ctl) 812*437bfbebSnyanmisaka #define DRM_IOCTL_GEM_CLOSE DRM_IOW (0x09, struct drm_gem_close) 813*437bfbebSnyanmisaka #define DRM_IOCTL_GEM_FLINK DRM_IOWR(0x0a, struct drm_gem_flink) 814*437bfbebSnyanmisaka #define DRM_IOCTL_GEM_OPEN DRM_IOWR(0x0b, struct drm_gem_open) 815*437bfbebSnyanmisaka #define DRM_IOCTL_GET_CAP DRM_IOWR(0x0c, struct drm_get_cap) 816*437bfbebSnyanmisaka #define DRM_IOCTL_SET_CLIENT_CAP DRM_IOW( 0x0d, struct drm_set_client_cap) 817*437bfbebSnyanmisaka 818*437bfbebSnyanmisaka #define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique) 819*437bfbebSnyanmisaka #define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth) 820*437bfbebSnyanmisaka #define DRM_IOCTL_BLOCK DRM_IOWR(0x12, struct drm_block) 821*437bfbebSnyanmisaka #define DRM_IOCTL_UNBLOCK DRM_IOWR(0x13, struct drm_block) 822*437bfbebSnyanmisaka #define DRM_IOCTL_CONTROL DRM_IOW( 0x14, struct drm_control) 823*437bfbebSnyanmisaka #define DRM_IOCTL_ADD_MAP DRM_IOWR(0x15, struct drm_map) 824*437bfbebSnyanmisaka #define DRM_IOCTL_ADD_BUFS DRM_IOWR(0x16, struct drm_buf_desc) 825*437bfbebSnyanmisaka #define DRM_IOCTL_MARK_BUFS DRM_IOW( 0x17, struct drm_buf_desc) 826*437bfbebSnyanmisaka #define DRM_IOCTL_INFO_BUFS DRM_IOWR(0x18, struct drm_buf_info) 827*437bfbebSnyanmisaka #define DRM_IOCTL_MAP_BUFS DRM_IOWR(0x19, struct drm_buf_map) 828*437bfbebSnyanmisaka #define DRM_IOCTL_FREE_BUFS DRM_IOW( 0x1a, struct drm_buf_free) 829*437bfbebSnyanmisaka 830*437bfbebSnyanmisaka #define DRM_IOCTL_RM_MAP DRM_IOW( 0x1b, struct drm_map) 831*437bfbebSnyanmisaka 832*437bfbebSnyanmisaka #define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map) 833*437bfbebSnyanmisaka #define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map) 834*437bfbebSnyanmisaka 835*437bfbebSnyanmisaka #define DRM_IOCTL_SET_MASTER DRM_IO(0x1e) 836*437bfbebSnyanmisaka #define DRM_IOCTL_DROP_MASTER DRM_IO(0x1f) 837*437bfbebSnyanmisaka 838*437bfbebSnyanmisaka #define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx) 839*437bfbebSnyanmisaka #define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx) 840*437bfbebSnyanmisaka #define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx) 841*437bfbebSnyanmisaka #define DRM_IOCTL_GET_CTX DRM_IOWR(0x23, struct drm_ctx) 842*437bfbebSnyanmisaka #define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, struct drm_ctx) 843*437bfbebSnyanmisaka #define DRM_IOCTL_NEW_CTX DRM_IOW( 0x25, struct drm_ctx) 844*437bfbebSnyanmisaka #define DRM_IOCTL_RES_CTX DRM_IOWR(0x26, struct drm_ctx_res) 845*437bfbebSnyanmisaka #define DRM_IOCTL_ADD_DRAW DRM_IOWR(0x27, struct drm_draw) 846*437bfbebSnyanmisaka #define DRM_IOCTL_RM_DRAW DRM_IOWR(0x28, struct drm_draw) 847*437bfbebSnyanmisaka #define DRM_IOCTL_DMA DRM_IOWR(0x29, struct drm_dma) 848*437bfbebSnyanmisaka #define DRM_IOCTL_LOCK DRM_IOW( 0x2a, struct drm_lock) 849*437bfbebSnyanmisaka #define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock) 850*437bfbebSnyanmisaka #define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock) 851*437bfbebSnyanmisaka 852*437bfbebSnyanmisaka #define DRM_IOCTL_PRIME_HANDLE_TO_FD DRM_IOWR(0x2d, struct drm_prime_handle) 853*437bfbebSnyanmisaka #define DRM_IOCTL_PRIME_FD_TO_HANDLE DRM_IOWR(0x2e, struct drm_prime_handle) 854*437bfbebSnyanmisaka 855*437bfbebSnyanmisaka #define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30) 856*437bfbebSnyanmisaka #define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) 857*437bfbebSnyanmisaka #define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) 858*437bfbebSnyanmisaka #define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) 859*437bfbebSnyanmisaka #define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) 860*437bfbebSnyanmisaka #define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) 861*437bfbebSnyanmisaka #define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) 862*437bfbebSnyanmisaka #define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) 863*437bfbebSnyanmisaka 864*437bfbebSnyanmisaka #define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) 865*437bfbebSnyanmisaka #define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) 866*437bfbebSnyanmisaka 867*437bfbebSnyanmisaka #define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) 868*437bfbebSnyanmisaka 869*437bfbebSnyanmisaka #define DRM_IOCTL_CRTC_GET_SEQUENCE DRM_IOWR(0x3b, struct drm_crtc_get_sequence) 870*437bfbebSnyanmisaka #define DRM_IOCTL_CRTC_QUEUE_SEQUENCE DRM_IOWR(0x3c, struct drm_crtc_queue_sequence) 871*437bfbebSnyanmisaka 872*437bfbebSnyanmisaka #define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) 873*437bfbebSnyanmisaka 874*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res) 875*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc) 876*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc) 877*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor) 878*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut) 879*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut) 880*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder) 881*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector) 882*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */ 883*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */ 884*437bfbebSnyanmisaka 885*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETPROPERTY DRM_IOWR(0xAA, struct drm_mode_get_property) 886*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_SETPROPERTY DRM_IOWR(0xAB, struct drm_mode_connector_set_property) 887*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETPROPBLOB DRM_IOWR(0xAC, struct drm_mode_get_blob) 888*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd) 889*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd) 890*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int) 891*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip) 892*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd) 893*437bfbebSnyanmisaka 894*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_CREATE_DUMB DRM_IOWR(0xB2, struct drm_mode_create_dumb) 895*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_MAP_DUMB DRM_IOWR(0xB3, struct drm_mode_map_dumb) 896*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_DESTROY_DUMB DRM_IOWR(0xB4, struct drm_mode_destroy_dumb) 897*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETPLANERESOURCES DRM_IOWR(0xB5, struct drm_mode_get_plane_res) 898*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GETPLANE DRM_IOWR(0xB6, struct drm_mode_get_plane) 899*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) 900*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) 901*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties) 902*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) 903*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2) 904*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic) 905*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) 906*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) 907*437bfbebSnyanmisaka 908*437bfbebSnyanmisaka #define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) 909*437bfbebSnyanmisaka #define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) 910*437bfbebSnyanmisaka #define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) 911*437bfbebSnyanmisaka #define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) 912*437bfbebSnyanmisaka #define DRM_IOCTL_SYNCOBJ_WAIT DRM_IOWR(0xC3, struct drm_syncobj_wait) 913*437bfbebSnyanmisaka #define DRM_IOCTL_SYNCOBJ_RESET DRM_IOWR(0xC4, struct drm_syncobj_array) 914*437bfbebSnyanmisaka #define DRM_IOCTL_SYNCOBJ_SIGNAL DRM_IOWR(0xC5, struct drm_syncobj_array) 915*437bfbebSnyanmisaka 916*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_CREATE_LEASE DRM_IOWR(0xC6, struct drm_mode_create_lease) 917*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_LIST_LESSEES DRM_IOWR(0xC7, struct drm_mode_list_lessees) 918*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_GET_LEASE DRM_IOWR(0xC8, struct drm_mode_get_lease) 919*437bfbebSnyanmisaka #define DRM_IOCTL_MODE_REVOKE_LEASE DRM_IOWR(0xC9, struct drm_mode_revoke_lease) 920*437bfbebSnyanmisaka 921*437bfbebSnyanmisaka /** 922*437bfbebSnyanmisaka * Device specific ioctls should only be in their respective headers 923*437bfbebSnyanmisaka * The device specific ioctl range is from 0x40 to 0x9f. 924*437bfbebSnyanmisaka * Generic IOCTLS restart at 0xA0. 925*437bfbebSnyanmisaka * 926*437bfbebSnyanmisaka * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and 927*437bfbebSnyanmisaka * drmCommandReadWrite(). 928*437bfbebSnyanmisaka */ 929*437bfbebSnyanmisaka #define DRM_COMMAND_BASE 0x40 930*437bfbebSnyanmisaka #define DRM_COMMAND_END 0xA0 931*437bfbebSnyanmisaka 932*437bfbebSnyanmisaka /** 933*437bfbebSnyanmisaka * Header for events written back to userspace on the drm fd. The 934*437bfbebSnyanmisaka * type defines the type of event, the length specifies the total 935*437bfbebSnyanmisaka * length of the event (including the header), and user_data is 936*437bfbebSnyanmisaka * typically a 64 bit value passed with the ioctl that triggered the 937*437bfbebSnyanmisaka * event. A read on the drm fd will always only return complete 938*437bfbebSnyanmisaka * events, that is, if for example the read buffer is 100 bytes, and 939*437bfbebSnyanmisaka * there are two 64 byte events pending, only one will be returned. 940*437bfbebSnyanmisaka * 941*437bfbebSnyanmisaka * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and 942*437bfbebSnyanmisaka * up are chipset specific. 943*437bfbebSnyanmisaka */ 944*437bfbebSnyanmisaka struct drm_event { 945*437bfbebSnyanmisaka __u32 type; 946*437bfbebSnyanmisaka __u32 length; 947*437bfbebSnyanmisaka }; 948*437bfbebSnyanmisaka 949*437bfbebSnyanmisaka #define DRM_EVENT_VBLANK 0x01 950*437bfbebSnyanmisaka #define DRM_EVENT_FLIP_COMPLETE 0x02 951*437bfbebSnyanmisaka #define DRM_EVENT_CRTC_SEQUENCE 0x03 952*437bfbebSnyanmisaka 953*437bfbebSnyanmisaka struct drm_event_vblank { 954*437bfbebSnyanmisaka struct drm_event base; 955*437bfbebSnyanmisaka __u64 user_data; 956*437bfbebSnyanmisaka __u32 tv_sec; 957*437bfbebSnyanmisaka __u32 tv_usec; 958*437bfbebSnyanmisaka __u32 sequence; 959*437bfbebSnyanmisaka __u32 crtc_id; /* 0 on older kernels that do not support this */ 960*437bfbebSnyanmisaka }; 961*437bfbebSnyanmisaka 962*437bfbebSnyanmisaka /* Event delivered at sequence. Time stamp marks when the first pixel 963*437bfbebSnyanmisaka * of the refresh cycle leaves the display engine for the display 964*437bfbebSnyanmisaka */ 965*437bfbebSnyanmisaka struct drm_event_crtc_sequence { 966*437bfbebSnyanmisaka struct drm_event base; 967*437bfbebSnyanmisaka __u64 user_data; 968*437bfbebSnyanmisaka __s64 time_ns; 969*437bfbebSnyanmisaka __u64 sequence; 970*437bfbebSnyanmisaka }; 971*437bfbebSnyanmisaka 972*437bfbebSnyanmisaka /* typedef area */ 973*437bfbebSnyanmisaka #ifndef __KERNEL__ 974*437bfbebSnyanmisaka typedef struct drm_clip_rect drm_clip_rect_t; 975*437bfbebSnyanmisaka typedef struct drm_drawable_info drm_drawable_info_t; 976*437bfbebSnyanmisaka typedef struct drm_tex_region drm_tex_region_t; 977*437bfbebSnyanmisaka typedef struct drm_hw_lock drm_hw_lock_t; 978*437bfbebSnyanmisaka typedef struct drm_version drm_version_t; 979*437bfbebSnyanmisaka typedef struct drm_unique drm_unique_t; 980*437bfbebSnyanmisaka typedef struct drm_list drm_list_t; 981*437bfbebSnyanmisaka typedef struct drm_block drm_block_t; 982*437bfbebSnyanmisaka typedef struct drm_control drm_control_t; 983*437bfbebSnyanmisaka typedef enum drm_map_type drm_map_type_t; 984*437bfbebSnyanmisaka typedef enum drm_map_flags drm_map_flags_t; 985*437bfbebSnyanmisaka typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; 986*437bfbebSnyanmisaka typedef struct drm_map drm_map_t; 987*437bfbebSnyanmisaka typedef struct drm_client drm_client_t; 988*437bfbebSnyanmisaka typedef enum drm_stat_type drm_stat_type_t; 989*437bfbebSnyanmisaka typedef struct drm_stats drm_stats_t; 990*437bfbebSnyanmisaka typedef enum drm_lock_flags drm_lock_flags_t; 991*437bfbebSnyanmisaka typedef struct drm_lock drm_lock_t; 992*437bfbebSnyanmisaka typedef enum drm_dma_flags drm_dma_flags_t; 993*437bfbebSnyanmisaka typedef struct drm_buf_desc drm_buf_desc_t; 994*437bfbebSnyanmisaka typedef struct drm_buf_info drm_buf_info_t; 995*437bfbebSnyanmisaka typedef struct drm_buf_free drm_buf_free_t; 996*437bfbebSnyanmisaka typedef struct drm_buf_pub drm_buf_pub_t; 997*437bfbebSnyanmisaka typedef struct drm_buf_map drm_buf_map_t; 998*437bfbebSnyanmisaka typedef struct drm_dma drm_dma_t; 999*437bfbebSnyanmisaka typedef union drm_wait_vblank drm_wait_vblank_t; 1000*437bfbebSnyanmisaka typedef struct drm_agp_mode drm_agp_mode_t; 1001*437bfbebSnyanmisaka typedef enum drm_ctx_flags drm_ctx_flags_t; 1002*437bfbebSnyanmisaka typedef struct drm_ctx drm_ctx_t; 1003*437bfbebSnyanmisaka typedef struct drm_ctx_res drm_ctx_res_t; 1004*437bfbebSnyanmisaka typedef struct drm_draw drm_draw_t; 1005*437bfbebSnyanmisaka typedef struct drm_update_draw drm_update_draw_t; 1006*437bfbebSnyanmisaka typedef struct drm_auth drm_auth_t; 1007*437bfbebSnyanmisaka typedef struct drm_irq_busid drm_irq_busid_t; 1008*437bfbebSnyanmisaka typedef enum drm_vblank_seq_type drm_vblank_seq_type_t; 1009*437bfbebSnyanmisaka 1010*437bfbebSnyanmisaka typedef struct drm_agp_buffer drm_agp_buffer_t; 1011*437bfbebSnyanmisaka typedef struct drm_agp_binding drm_agp_binding_t; 1012*437bfbebSnyanmisaka typedef struct drm_agp_info drm_agp_info_t; 1013*437bfbebSnyanmisaka typedef struct drm_scatter_gather drm_scatter_gather_t; 1014*437bfbebSnyanmisaka typedef struct drm_set_version drm_set_version_t; 1015*437bfbebSnyanmisaka #endif 1016*437bfbebSnyanmisaka 1017*437bfbebSnyanmisaka #if defined(__cplusplus) 1018*437bfbebSnyanmisaka } 1019*437bfbebSnyanmisaka #endif 1020*437bfbebSnyanmisaka 1021*437bfbebSnyanmisaka #endif 1022