1 1.1 mrg /** 2 1.1 mrg * \file drm.h 3 1.1 mrg * Header for the Direct Rendering Manager 4 1.1 mrg * 5 1.1 mrg * \author Rickard E. (Rik) Faith <faith (at) valinux.com> 6 1.1 mrg * 7 1.1 mrg * \par Acknowledgments: 8 1.1 mrg * Dec 1999, Richard Henderson <rth (at) twiddle.net>, move to generic \c cmpxchg. 9 1.1 mrg */ 10 1.1 mrg 11 1.1 mrg /* 12 1.1 mrg * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 13 1.1 mrg * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 14 1.1 mrg * All rights reserved. 15 1.1 mrg * 16 1.1 mrg * Permission is hereby granted, free of charge, to any person obtaining a 17 1.1 mrg * copy of this software and associated documentation files (the "Software"), 18 1.1 mrg * to deal in the Software without restriction, including without limitation 19 1.1 mrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 20 1.1 mrg * and/or sell copies of the Software, and to permit persons to whom the 21 1.1 mrg * Software is furnished to do so, subject to the following conditions: 22 1.1 mrg * 23 1.1 mrg * The above copyright notice and this permission notice (including the next 24 1.1 mrg * paragraph) shall be included in all copies or substantial portions of the 25 1.1 mrg * Software. 26 1.1 mrg * 27 1.1 mrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 28 1.1 mrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 29 1.1 mrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 30 1.1 mrg * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 31 1.1 mrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 32 1.1 mrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 33 1.1 mrg * OTHER DEALINGS IN THE SOFTWARE. 34 1.1 mrg */ 35 1.1 mrg 36 1.1 mrg /** 37 1.1 mrg * \mainpage 38 1.1 mrg * 39 1.1 mrg * The Direct Rendering Manager (DRM) is a device-independent kernel-level 40 1.1 mrg * device driver that provides support for the XFree86 Direct Rendering 41 1.1 mrg * Infrastructure (DRI). 42 1.1 mrg * 43 1.1 mrg * The DRM supports the Direct Rendering Infrastructure (DRI) in four major 44 1.1 mrg * ways: 45 1.1 mrg * -# The DRM provides synchronized access to the graphics hardware via 46 1.1 mrg * the use of an optimized two-tiered lock. 47 1.1 mrg * -# The DRM enforces the DRI security policy for access to the graphics 48 1.1 mrg * hardware by only allowing authenticated X11 clients access to 49 1.1 mrg * restricted regions of memory. 50 1.1 mrg * -# The DRM provides a generic DMA engine, complete with multiple 51 1.1 mrg * queues and the ability to detect the need for an OpenGL context 52 1.1 mrg * switch. 53 1.1 mrg * -# The DRM is extensible via the use of small device-specific modules 54 1.1 mrg * that rely extensively on the API exported by the DRM module. 55 1.1 mrg * 56 1.1 mrg */ 57 1.1 mrg 58 1.1 mrg #ifndef _DRM_H_ 59 1.1 mrg #define _DRM_H_ 60 1.1 mrg 61 1.1 mrg #ifndef __user 62 1.1 mrg #define __user 63 1.1 mrg #endif 64 1.1 mrg #ifndef __iomem 65 1.1 mrg #define __iomem 66 1.1 mrg #endif 67 1.1 mrg 68 1.1 mrg #ifdef __GNUC__ 69 1.1 mrg # define DEPRECATED __attribute__ ((deprecated)) 70 1.1 mrg #else 71 1.1 mrg # define DEPRECATED 72 1.2 mrg # ifndef __FUNCTION__ 73 1.2 mrg # define __FUNCTION__ __func__ /* C99 */ 74 1.2 mrg # endif 75 1.2 mrg # ifndef __volatile__ 76 1.2 mrg # define __volatile__ volatile 77 1.2 mrg # endif 78 1.1 mrg #endif 79 1.1 mrg 80 1.1 mrg #if defined(__linux__) 81 1.1 mrg #include <asm/ioctl.h> /* For _IO* macros */ 82 1.1 mrg #define DRM_IOCTL_NR(n) _IOC_NR(n) 83 1.1 mrg #define DRM_IOC_VOID _IOC_NONE 84 1.1 mrg #define DRM_IOC_READ _IOC_READ 85 1.1 mrg #define DRM_IOC_WRITE _IOC_WRITE 86 1.1 mrg #define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE 87 1.1 mrg #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) 88 1.1 mrg #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) 89 1.1 mrg #include <sys/ioccom.h> 90 1.1 mrg #define DRM_IOCTL_NR(n) ((n) & 0xff) 91 1.1 mrg #define DRM_IOC_VOID IOC_VOID 92 1.1 mrg #define DRM_IOC_READ IOC_OUT 93 1.1 mrg #define DRM_IOC_WRITE IOC_IN 94 1.1 mrg #define DRM_IOC_READWRITE IOC_INOUT 95 1.1 mrg #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) 96 1.1 mrg #endif 97 1.1 mrg 98 1.1 mrg #ifdef __OpenBSD__ 99 1.1 mrg #define DRM_MAJOR 81 100 1.1 mrg #endif 101 1.2 mrg #if defined(__NetBSD__) 102 1.2 mrg #define DRM_MAJOR 180 103 1.2 mrg #endif 104 1.2 mrg #if defined(__linux__) 105 1.1 mrg #define DRM_MAJOR 226 106 1.1 mrg #endif 107 1.1 mrg #define DRM_MAX_MINOR 15 108 1.1 mrg 109 1.1 mrg #define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */ 110 1.1 mrg #define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */ 111 1.1 mrg #define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */ 112 1.1 mrg #define DRM_RAM_PERCENT 10 /**< How much system ram can we lock? */ 113 1.1 mrg 114 1.1 mrg #define _DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ 115 1.1 mrg #define _DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ 116 1.1 mrg #define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD) 117 1.1 mrg #define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT) 118 1.1 mrg #define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT)) 119 1.1 mrg 120 1.1 mrg #if defined(__linux__) 121 1.1 mrg typedef unsigned int drm_handle_t; 122 1.1 mrg #else 123 1.1 mrg #include <sys/types.h> 124 1.1 mrg typedef unsigned long drm_handle_t; /**< To mapped regions */ 125 1.1 mrg #endif 126 1.1 mrg typedef unsigned int drm_context_t; /**< GLXContext handle */ 127 1.1 mrg typedef unsigned int drm_drawable_t; 128 1.1 mrg typedef unsigned int drm_magic_t; /**< Magic for authentication */ 129 1.1 mrg 130 1.1 mrg /** 131 1.1 mrg * Cliprect. 132 1.1 mrg * 133 1.1 mrg * \warning If you change this structure, make sure you change 134 1.1 mrg * XF86DRIClipRectRec in the server as well 135 1.1 mrg * 136 1.1 mrg * \note KW: Actually it's illegal to change either for 137 1.1 mrg * backwards-compatibility reasons. 138 1.1 mrg */ 139 1.1 mrg struct drm_clip_rect { 140 1.1 mrg unsigned short x1; 141 1.1 mrg unsigned short y1; 142 1.1 mrg unsigned short x2; 143 1.1 mrg unsigned short y2; 144 1.1 mrg }; 145 1.1 mrg 146 1.1 mrg /** 147 1.1 mrg * Texture region, 148 1.1 mrg */ 149 1.1 mrg struct drm_tex_region { 150 1.1 mrg unsigned char next; 151 1.1 mrg unsigned char prev; 152 1.1 mrg unsigned char in_use; 153 1.1 mrg unsigned char padding; 154 1.1 mrg unsigned int age; 155 1.1 mrg }; 156 1.1 mrg 157 1.1 mrg /** 158 1.1 mrg * Hardware lock. 159 1.1 mrg * 160 1.1 mrg * The lock structure is a simple cache-line aligned integer. To avoid 161 1.1 mrg * processor bus contention on a multiprocessor system, there should not be any 162 1.1 mrg * other data stored in the same cache line. 163 1.1 mrg */ 164 1.1 mrg struct drm_hw_lock { 165 1.1 mrg __volatile__ unsigned int lock; /**< lock variable */ 166 1.1 mrg char padding[60]; /**< Pad to cache line */ 167 1.1 mrg }; 168 1.1 mrg 169 1.1 mrg /* This is beyond ugly, and only works on GCC. However, it allows me to use 170 1.1 mrg * drm.h in places (i.e., in the X-server) where I can't use size_t. The real 171 1.1 mrg * fix is to use uint32_t instead of size_t, but that fix will break existing 172 1.1 mrg * LP64 (i.e., PowerPC64, SPARC64, IA-64, Alpha, etc.) systems. That *will* 173 1.1 mrg * eventually happen, though. I chose 'unsigned long' to be the fallback type 174 1.1 mrg * because that works on all the platforms I know about. Hopefully, the 175 1.1 mrg * real fix will happen before that bites us. 176 1.1 mrg */ 177 1.1 mrg 178 1.1 mrg #ifdef __SIZE_TYPE__ 179 1.1 mrg # define DRM_SIZE_T __SIZE_TYPE__ 180 1.1 mrg #else 181 1.1 mrg # warning "__SIZE_TYPE__ not defined. Assuming sizeof(size_t) == sizeof(unsigned long)!" 182 1.1 mrg # define DRM_SIZE_T unsigned long 183 1.1 mrg #endif 184 1.1 mrg 185 1.1 mrg /** 186 1.1 mrg * DRM_IOCTL_VERSION ioctl argument type. 187 1.1 mrg * 188 1.1 mrg * \sa drmGetVersion(). 189 1.1 mrg */ 190 1.1 mrg struct drm_version { 191 1.1 mrg int version_major; /**< Major version */ 192 1.1 mrg int version_minor; /**< Minor version */ 193 1.1 mrg int version_patchlevel; /**< Patch level */ 194 1.1 mrg DRM_SIZE_T name_len; /**< Length of name buffer */ 195 1.1 mrg char __user *name; /**< Name of driver */ 196 1.1 mrg DRM_SIZE_T date_len; /**< Length of date buffer */ 197 1.1 mrg char __user *date; /**< User-space buffer to hold date */ 198 1.1 mrg DRM_SIZE_T desc_len; /**< Length of desc buffer */ 199 1.1 mrg char __user *desc; /**< User-space buffer to hold desc */ 200 1.1 mrg }; 201 1.1 mrg 202 1.1 mrg /** 203 1.1 mrg * DRM_IOCTL_GET_UNIQUE ioctl argument type. 204 1.1 mrg * 205 1.1 mrg * \sa drmGetBusid() and drmSetBusId(). 206 1.1 mrg */ 207 1.1 mrg struct drm_unique { 208 1.1 mrg DRM_SIZE_T unique_len; /**< Length of unique */ 209 1.1 mrg char __user *unique; /**< Unique name for driver instantiation */ 210 1.1 mrg }; 211 1.1 mrg 212 1.1 mrg #undef DRM_SIZE_T 213 1.1 mrg 214 1.1 mrg struct drm_list { 215 1.1 mrg int count; /**< Length of user-space structures */ 216 1.1 mrg struct drm_version __user *version; 217 1.1 mrg }; 218 1.1 mrg 219 1.1 mrg struct drm_block { 220 1.1 mrg int unused; 221 1.1 mrg }; 222 1.1 mrg 223 1.1 mrg /** 224 1.1 mrg * DRM_IOCTL_CONTROL ioctl argument type. 225 1.1 mrg * 226 1.1 mrg * \sa drmCtlInstHandler() and drmCtlUninstHandler(). 227 1.1 mrg */ 228 1.1 mrg struct drm_control { 229 1.1 mrg enum { 230 1.1 mrg DRM_ADD_COMMAND, 231 1.1 mrg DRM_RM_COMMAND, 232 1.1 mrg DRM_INST_HANDLER, 233 1.1 mrg DRM_UNINST_HANDLER 234 1.1 mrg } func; 235 1.1 mrg int irq; 236 1.1 mrg }; 237 1.1 mrg 238 1.1 mrg /** 239 1.1 mrg * Type of memory to map. 240 1.1 mrg */ 241 1.1 mrg enum drm_map_type { 242 1.1 mrg _DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */ 243 1.1 mrg _DRM_REGISTERS = 1, /**< no caching, no core dump */ 244 1.1 mrg _DRM_SHM = 2, /**< shared, cached */ 245 1.1 mrg _DRM_AGP = 3, /**< AGP/GART */ 246 1.1 mrg _DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */ 247 1.1 mrg _DRM_CONSISTENT = 5, /**< Consistent memory for PCI DMA */ 248 1.2 mrg _DRM_GEM = 6, 249 1.2 mrg _DRM_TTM = 7, 250 1.1 mrg }; 251 1.1 mrg 252 1.1 mrg /** 253 1.1 mrg * Memory mapping flags. 254 1.1 mrg */ 255 1.1 mrg enum drm_map_flags { 256 1.1 mrg _DRM_RESTRICTED = 0x01, /**< Cannot be mapped to user-virtual */ 257 1.1 mrg _DRM_READ_ONLY = 0x02, 258 1.1 mrg _DRM_LOCKED = 0x04, /**< shared, cached, locked */ 259 1.1 mrg _DRM_KERNEL = 0x08, /**< kernel requires access */ 260 1.1 mrg _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */ 261 1.1 mrg _DRM_CONTAINS_LOCK = 0x20, /**< SHM page that contains lock */ 262 1.1 mrg _DRM_REMOVABLE = 0x40, /**< Removable mapping */ 263 1.1 mrg _DRM_DRIVER = 0x80 /**< Managed by driver */ 264 1.1 mrg }; 265 1.1 mrg 266 1.1 mrg struct drm_ctx_priv_map { 267 1.1 mrg unsigned int ctx_id; /**< Context requesting private mapping */ 268 1.1 mrg void *handle; /**< Handle of map */ 269 1.1 mrg }; 270 1.1 mrg 271 1.1 mrg /** 272 1.1 mrg * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls 273 1.1 mrg * argument type. 274 1.1 mrg * 275 1.1 mrg * \sa drmAddMap(). 276 1.1 mrg */ 277 1.1 mrg struct drm_map { 278 1.1 mrg unsigned long offset; /**< Requested physical address (0 for SAREA)*/ 279 1.1 mrg unsigned long size; /**< Requested physical size (bytes) */ 280 1.1 mrg enum drm_map_type type; /**< Type of memory to map */ 281 1.1 mrg enum drm_map_flags flags; /**< Flags */ 282 1.1 mrg void *handle; /**< User-space: "Handle" to pass to mmap() */ 283 1.1 mrg /**< Kernel-space: kernel-virtual address */ 284 1.1 mrg int mtrr; /**< MTRR slot used */ 285 1.1 mrg /* Private data */ 286 1.1 mrg }; 287 1.1 mrg 288 1.1 mrg /** 289 1.1 mrg * DRM_IOCTL_GET_CLIENT ioctl argument type. 290 1.1 mrg */ 291 1.1 mrg struct drm_client { 292 1.1 mrg int idx; /**< Which client desired? */ 293 1.1 mrg int auth; /**< Is client authenticated? */ 294 1.1 mrg unsigned long pid; /**< Process ID */ 295 1.1 mrg unsigned long uid; /**< User ID */ 296 1.1 mrg unsigned long magic; /**< Magic */ 297 1.1 mrg unsigned long iocs; /**< Ioctl count */ 298 1.1 mrg }; 299 1.1 mrg 300 1.1 mrg enum drm_stat_type { 301 1.1 mrg _DRM_STAT_LOCK, 302 1.1 mrg _DRM_STAT_OPENS, 303 1.1 mrg _DRM_STAT_CLOSES, 304 1.1 mrg _DRM_STAT_IOCTLS, 305 1.1 mrg _DRM_STAT_LOCKS, 306 1.1 mrg _DRM_STAT_UNLOCKS, 307 1.1 mrg _DRM_STAT_VALUE, /**< Generic value */ 308 1.1 mrg _DRM_STAT_BYTE, /**< Generic byte counter (1024bytes/K) */ 309 1.1 mrg _DRM_STAT_COUNT, /**< Generic non-byte counter (1000/k) */ 310 1.1 mrg 311 1.1 mrg _DRM_STAT_IRQ, /**< IRQ */ 312 1.1 mrg _DRM_STAT_PRIMARY, /**< Primary DMA bytes */ 313 1.1 mrg _DRM_STAT_SECONDARY, /**< Secondary DMA bytes */ 314 1.1 mrg _DRM_STAT_DMA, /**< DMA */ 315 1.1 mrg _DRM_STAT_SPECIAL, /**< Special DMA (e.g., priority or polled) */ 316 1.1 mrg _DRM_STAT_MISSED /**< Missed DMA opportunity */ 317 1.1 mrg /* Add to the *END* of the list */ 318 1.1 mrg }; 319 1.1 mrg 320 1.1 mrg /** 321 1.1 mrg * DRM_IOCTL_GET_STATS ioctl argument type. 322 1.1 mrg */ 323 1.1 mrg struct drm_stats { 324 1.1 mrg unsigned long count; 325 1.1 mrg struct { 326 1.1 mrg unsigned long value; 327 1.1 mrg enum drm_stat_type type; 328 1.1 mrg } data[15]; 329 1.1 mrg }; 330 1.1 mrg 331 1.1 mrg /** 332 1.1 mrg * Hardware locking flags. 333 1.1 mrg */ 334 1.1 mrg enum drm_lock_flags { 335 1.1 mrg _DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ 336 1.1 mrg _DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ 337 1.1 mrg _DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ 338 1.1 mrg _DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ 339 1.1 mrg /* These *HALT* flags aren't supported yet 340 1.1 mrg -- they will be used to support the 341 1.1 mrg full-screen DGA-like mode. */ 342 1.1 mrg _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ 343 1.1 mrg _DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ 344 1.1 mrg }; 345 1.1 mrg 346 1.1 mrg /** 347 1.1 mrg * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type. 348 1.1 mrg * 349 1.1 mrg * \sa drmGetLock() and drmUnlock(). 350 1.1 mrg */ 351 1.1 mrg struct drm_lock { 352 1.1 mrg int context; 353 1.1 mrg enum drm_lock_flags flags; 354 1.1 mrg }; 355 1.1 mrg 356 1.1 mrg /** 357 1.1 mrg * DMA flags 358 1.1 mrg * 359 1.1 mrg * \warning 360 1.1 mrg * These values \e must match xf86drm.h. 361 1.1 mrg * 362 1.1 mrg * \sa drm_dma. 363 1.1 mrg */ 364 1.1 mrg enum drm_dma_flags { 365 1.1 mrg /* Flags for DMA buffer dispatch */ 366 1.1 mrg _DRM_DMA_BLOCK = 0x01, /**< 367 1.1 mrg * Block until buffer dispatched. 368 1.1 mrg * 369 1.1 mrg * \note The buffer may not yet have 370 1.1 mrg * been processed by the hardware -- 371 1.1 mrg * getting a hardware lock with the 372 1.1 mrg * hardware quiescent will ensure 373 1.1 mrg * that the buffer has been 374 1.1 mrg * processed. 375 1.1 mrg */ 376 1.1 mrg _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ 377 1.1 mrg _DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ 378 1.1 mrg 379 1.1 mrg /* Flags for DMA buffer request */ 380 1.1 mrg _DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ 381 1.1 mrg _DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ 382 1.1 mrg _DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ 383 1.1 mrg }; 384 1.1 mrg 385 1.1 mrg /** 386 1.1 mrg * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type. 387 1.1 mrg * 388 1.1 mrg * \sa drmAddBufs(). 389 1.1 mrg */ 390 1.1 mrg struct drm_buf_desc { 391 1.1 mrg int count; /**< Number of buffers of this size */ 392 1.1 mrg int size; /**< Size in bytes */ 393 1.1 mrg int low_mark; /**< Low water mark */ 394 1.1 mrg int high_mark; /**< High water mark */ 395 1.1 mrg enum { 396 1.1 mrg _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */ 397 1.1 mrg _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */ 398 1.1 mrg _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */ 399 1.1 mrg _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */ 400 1.1 mrg _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */ 401 1.1 mrg } flags; 402 1.1 mrg unsigned long agp_start; /**< 403 1.1 mrg * Start address of where the AGP buffers are 404 1.1 mrg * in the AGP aperture 405 1.1 mrg */ 406 1.1 mrg }; 407 1.1 mrg 408 1.1 mrg /** 409 1.1 mrg * DRM_IOCTL_INFO_BUFS ioctl argument type. 410 1.1 mrg */ 411 1.1 mrg struct drm_buf_info { 412 1.1 mrg int count; /**< Number of buffers described in list */ 413 1.1 mrg struct drm_buf_desc __user *list; /**< List of buffer descriptions */ 414 1.1 mrg }; 415 1.1 mrg 416 1.1 mrg /** 417 1.1 mrg * DRM_IOCTL_FREE_BUFS ioctl argument type. 418 1.1 mrg */ 419 1.1 mrg struct drm_buf_free { 420 1.1 mrg int count; 421 1.1 mrg int __user *list; 422 1.1 mrg }; 423 1.1 mrg 424 1.1 mrg /** 425 1.1 mrg * Buffer information 426 1.1 mrg * 427 1.1 mrg * \sa drm_buf_map. 428 1.1 mrg */ 429 1.1 mrg struct drm_buf_pub { 430 1.1 mrg int idx; /**< Index into the master buffer list */ 431 1.1 mrg int total; /**< Buffer size */ 432 1.1 mrg int used; /**< Amount of buffer in use (for DMA) */ 433 1.1 mrg void __user *address; /**< Address of buffer */ 434 1.1 mrg }; 435 1.1 mrg 436 1.1 mrg /** 437 1.1 mrg * DRM_IOCTL_MAP_BUFS ioctl argument type. 438 1.1 mrg */ 439 1.1 mrg struct drm_buf_map { 440 1.1 mrg int count; /**< Length of the buffer list */ 441 1.1 mrg #if defined(__cplusplus) 442 1.1 mrg void __user *c_virtual; 443 1.1 mrg #else 444 1.1 mrg void __user *virtual; /**< Mmap'd area in user-virtual */ 445 1.1 mrg #endif 446 1.1 mrg struct drm_buf_pub __user *list; /**< Buffer information */ 447 1.1 mrg }; 448 1.1 mrg 449 1.1 mrg /** 450 1.1 mrg * DRM_IOCTL_DMA ioctl argument type. 451 1.1 mrg * 452 1.1 mrg * Indices here refer to the offset into the buffer list in drm_buf_get. 453 1.1 mrg * 454 1.1 mrg * \sa drmDMA(). 455 1.1 mrg */ 456 1.1 mrg struct drm_dma { 457 1.1 mrg int context; /**< Context handle */ 458 1.1 mrg int send_count; /**< Number of buffers to send */ 459 1.1 mrg int __user *send_indices; /**< List of handles to buffers */ 460 1.1 mrg int __user *send_sizes; /**< Lengths of data to send */ 461 1.1 mrg enum drm_dma_flags flags; /**< Flags */ 462 1.1 mrg int request_count; /**< Number of buffers requested */ 463 1.1 mrg int request_size; /**< Desired size for buffers */ 464 1.1 mrg int __user *request_indices; /**< Buffer information */ 465 1.1 mrg int __user *request_sizes; 466 1.1 mrg int granted_count; /**< Number of buffers granted */ 467 1.1 mrg }; 468 1.1 mrg 469 1.1 mrg enum drm_ctx_flags { 470 1.1 mrg _DRM_CONTEXT_PRESERVED = 0x01, 471 1.1 mrg _DRM_CONTEXT_2DONLY = 0x02 472 1.1 mrg }; 473 1.1 mrg 474 1.1 mrg /** 475 1.1 mrg * DRM_IOCTL_ADD_CTX ioctl argument type. 476 1.1 mrg * 477 1.1 mrg * \sa drmCreateContext() and drmDestroyContext(). 478 1.1 mrg */ 479 1.1 mrg struct drm_ctx { 480 1.1 mrg drm_context_t handle; 481 1.1 mrg enum drm_ctx_flags flags; 482 1.1 mrg }; 483 1.1 mrg 484 1.1 mrg /** 485 1.1 mrg * DRM_IOCTL_RES_CTX ioctl argument type. 486 1.1 mrg */ 487 1.1 mrg struct drm_ctx_res { 488 1.1 mrg int count; 489 1.1 mrg struct drm_ctx __user *contexts; 490 1.1 mrg }; 491 1.1 mrg 492 1.1 mrg /** 493 1.1 mrg * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type. 494 1.1 mrg */ 495 1.1 mrg struct drm_draw { 496 1.1 mrg drm_drawable_t handle; 497 1.1 mrg }; 498 1.1 mrg 499 1.1 mrg /** 500 1.1 mrg * DRM_IOCTL_UPDATE_DRAW ioctl argument type. 501 1.1 mrg */ 502 1.1 mrg typedef enum { 503 1.1 mrg DRM_DRAWABLE_CLIPRECTS, 504 1.1 mrg } drm_drawable_info_type_t; 505 1.1 mrg 506 1.1 mrg struct drm_update_draw { 507 1.1 mrg drm_drawable_t handle; 508 1.1 mrg unsigned int type; 509 1.1 mrg unsigned int num; 510 1.1 mrg unsigned long long data; 511 1.1 mrg }; 512 1.1 mrg 513 1.1 mrg /** 514 1.1 mrg * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type. 515 1.1 mrg */ 516 1.1 mrg struct drm_auth { 517 1.1 mrg drm_magic_t magic; 518 1.1 mrg }; 519 1.1 mrg 520 1.1 mrg /** 521 1.1 mrg * DRM_IOCTL_IRQ_BUSID ioctl argument type. 522 1.1 mrg * 523 1.1 mrg * \sa drmGetInterruptFromBusID(). 524 1.1 mrg */ 525 1.1 mrg struct drm_irq_busid { 526 1.1 mrg int irq; /**< IRQ number */ 527 1.1 mrg int busnum; /**< bus number */ 528 1.1 mrg int devnum; /**< device number */ 529 1.1 mrg int funcnum; /**< function number */ 530 1.1 mrg }; 531 1.1 mrg 532 1.1 mrg enum drm_vblank_seq_type { 533 1.1 mrg _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ 534 1.1 mrg _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ 535 1.1 mrg _DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ 536 1.1 mrg _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ 537 1.1 mrg _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ 538 1.1 mrg _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking */ 539 1.1 mrg }; 540 1.1 mrg 541 1.1 mrg #define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE) 542 1.1 mrg #define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_SIGNAL | _DRM_VBLANK_SECONDARY | \ 543 1.1 mrg _DRM_VBLANK_NEXTONMISS) 544 1.1 mrg 545 1.1 mrg struct drm_wait_vblank_request { 546 1.1 mrg enum drm_vblank_seq_type type; 547 1.1 mrg unsigned int sequence; 548 1.1 mrg unsigned long signal; 549 1.1 mrg }; 550 1.1 mrg 551 1.1 mrg struct drm_wait_vblank_reply { 552 1.1 mrg enum drm_vblank_seq_type type; 553 1.1 mrg unsigned int sequence; 554 1.1 mrg long tval_sec; 555 1.1 mrg long tval_usec; 556 1.1 mrg }; 557 1.1 mrg 558 1.1 mrg /** 559 1.1 mrg * DRM_IOCTL_WAIT_VBLANK ioctl argument type. 560 1.1 mrg * 561 1.1 mrg * \sa drmWaitVBlank(). 562 1.1 mrg */ 563 1.1 mrg union drm_wait_vblank { 564 1.1 mrg struct drm_wait_vblank_request request; 565 1.1 mrg struct drm_wait_vblank_reply reply; 566 1.1 mrg }; 567 1.1 mrg 568 1.1 mrg 569 1.1 mrg #define _DRM_PRE_MODESET 1 570 1.1 mrg #define _DRM_POST_MODESET 2 571 1.1 mrg 572 1.1 mrg /** 573 1.1 mrg * DRM_IOCTL_MODESET_CTL ioctl argument type 574 1.1 mrg * 575 1.1 mrg * \sa drmModesetCtl(). 576 1.1 mrg */ 577 1.1 mrg struct drm_modeset_ctl { 578 1.1 mrg uint32_t crtc; 579 1.1 mrg uint32_t cmd; 580 1.1 mrg }; 581 1.1 mrg 582 1.1 mrg /** 583 1.1 mrg * DRM_IOCTL_AGP_ENABLE ioctl argument type. 584 1.1 mrg * 585 1.1 mrg * \sa drmAgpEnable(). 586 1.1 mrg */ 587 1.1 mrg struct drm_agp_mode { 588 1.1 mrg unsigned long mode; /**< AGP mode */ 589 1.1 mrg }; 590 1.1 mrg 591 1.1 mrg /** 592 1.1 mrg * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type. 593 1.1 mrg * 594 1.1 mrg * \sa drmAgpAlloc() and drmAgpFree(). 595 1.1 mrg */ 596 1.1 mrg struct drm_agp_buffer { 597 1.1 mrg unsigned long size; /**< In bytes -- will round to page boundary */ 598 1.1 mrg unsigned long handle; /**< Used for binding / unbinding */ 599 1.1 mrg unsigned long type; /**< Type of memory to allocate */ 600 1.1 mrg unsigned long physical; /**< Physical used by i810 */ 601 1.1 mrg }; 602 1.1 mrg 603 1.1 mrg /** 604 1.1 mrg * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type. 605 1.1 mrg * 606 1.1 mrg * \sa drmAgpBind() and drmAgpUnbind(). 607 1.1 mrg */ 608 1.1 mrg struct drm_agp_binding { 609 1.1 mrg unsigned long handle; /**< From drm_agp_buffer */ 610 1.1 mrg unsigned long offset; /**< In bytes -- will round to page boundary */ 611 1.1 mrg }; 612 1.1 mrg 613 1.1 mrg /** 614 1.1 mrg * DRM_IOCTL_AGP_INFO ioctl argument type. 615 1.1 mrg * 616 1.1 mrg * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(), 617 1.1 mrg * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(), 618 1.1 mrg * drmAgpVendorId() and drmAgpDeviceId(). 619 1.1 mrg */ 620 1.1 mrg struct drm_agp_info { 621 1.1 mrg int agp_version_major; 622 1.1 mrg int agp_version_minor; 623 1.1 mrg unsigned long mode; 624 1.1 mrg unsigned long aperture_base; /**< physical address */ 625 1.1 mrg unsigned long aperture_size; /**< bytes */ 626 1.1 mrg unsigned long memory_allowed; /**< bytes */ 627 1.1 mrg unsigned long memory_used; 628 1.1 mrg 629 1.1 mrg /** \name PCI information */ 630 1.1 mrg /*@{ */ 631 1.1 mrg unsigned short id_vendor; 632 1.1 mrg unsigned short id_device; 633 1.1 mrg /*@} */ 634 1.1 mrg }; 635 1.1 mrg 636 1.1 mrg /** 637 1.1 mrg * DRM_IOCTL_SG_ALLOC ioctl argument type. 638 1.1 mrg */ 639 1.1 mrg struct drm_scatter_gather { 640 1.1 mrg unsigned long size; /**< In bytes -- will round to page boundary */ 641 1.1 mrg unsigned long handle; /**< Used for mapping / unmapping */ 642 1.1 mrg }; 643 1.1 mrg 644 1.1 mrg /** 645 1.1 mrg * DRM_IOCTL_SET_VERSION ioctl argument type. 646 1.1 mrg */ 647 1.1 mrg struct drm_set_version { 648 1.1 mrg int drm_di_major; 649 1.1 mrg int drm_di_minor; 650 1.1 mrg int drm_dd_major; 651 1.1 mrg int drm_dd_minor; 652 1.1 mrg }; 653 1.1 mrg 654 1.1 mrg 655 1.1 mrg #define DRM_FENCE_FLAG_EMIT 0x00000001 656 1.1 mrg #define DRM_FENCE_FLAG_SHAREABLE 0x00000002 657 1.1 mrg /** 658 1.1 mrg * On hardware with no interrupt events for operation completion, 659 1.1 mrg * indicates that the kernel should sleep while waiting for any blocking 660 1.1 mrg * operation to complete rather than spinning. 661 1.1 mrg * 662 1.1 mrg * Has no effect otherwise. 663 1.1 mrg */ 664 1.1 mrg #define DRM_FENCE_FLAG_WAIT_LAZY 0x00000004 665 1.1 mrg #define DRM_FENCE_FLAG_NO_USER 0x00000010 666 1.1 mrg 667 1.1 mrg /* Reserved for driver use */ 668 1.1 mrg #define DRM_FENCE_MASK_DRIVER 0xFF000000 669 1.1 mrg 670 1.1 mrg #define DRM_FENCE_TYPE_EXE 0x00000001 671 1.1 mrg 672 1.1 mrg struct drm_fence_arg { 673 1.1 mrg unsigned int handle; 674 1.1 mrg unsigned int fence_class; 675 1.1 mrg unsigned int type; 676 1.1 mrg unsigned int flags; 677 1.1 mrg unsigned int signaled; 678 1.1 mrg unsigned int error; 679 1.1 mrg unsigned int sequence; 680 1.1 mrg unsigned int pad64; 681 1.1 mrg uint64_t expand_pad[2]; /*Future expansion */ 682 1.1 mrg }; 683 1.1 mrg 684 1.1 mrg /* Buffer permissions, referring to how the GPU uses the buffers. 685 1.1 mrg * these translate to fence types used for the buffers. 686 1.1 mrg * Typically a texture buffer is read, A destination buffer is write and 687 1.1 mrg * a command (batch-) buffer is exe. Can be or-ed together. 688 1.1 mrg */ 689 1.1 mrg 690 1.1 mrg #define DRM_BO_FLAG_READ (1ULL << 0) 691 1.1 mrg #define DRM_BO_FLAG_WRITE (1ULL << 1) 692 1.1 mrg #define DRM_BO_FLAG_EXE (1ULL << 2) 693 1.1 mrg 694 1.1 mrg /* 695 1.1 mrg * All of the bits related to access mode 696 1.1 mrg */ 697 1.1 mrg #define DRM_BO_MASK_ACCESS (DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE | DRM_BO_FLAG_EXE) 698 1.1 mrg /* 699 1.1 mrg * Status flags. Can be read to determine the actual state of a buffer. 700 1.1 mrg * Can also be set in the buffer mask before validation. 701 1.1 mrg */ 702 1.1 mrg 703 1.1 mrg /* 704 1.1 mrg * Mask: Never evict this buffer. Not even with force. This type of buffer is only 705 1.1 mrg * available to root and must be manually removed before buffer manager shutdown 706 1.1 mrg * or lock. 707 1.1 mrg * Flags: Acknowledge 708 1.1 mrg */ 709 1.1 mrg #define DRM_BO_FLAG_NO_EVICT (1ULL << 4) 710 1.1 mrg 711 1.1 mrg /* 712 1.1 mrg * Mask: Require that the buffer is placed in mappable memory when validated. 713 1.1 mrg * If not set the buffer may or may not be in mappable memory when validated. 714 1.1 mrg * Flags: If set, the buffer is in mappable memory. 715 1.1 mrg */ 716 1.1 mrg #define DRM_BO_FLAG_MAPPABLE (1ULL << 5) 717 1.1 mrg 718 1.1 mrg /* Mask: The buffer should be shareable with other processes. 719 1.1 mrg * Flags: The buffer is shareable with other processes. 720 1.1 mrg */ 721 1.1 mrg #define DRM_BO_FLAG_SHAREABLE (1ULL << 6) 722 1.1 mrg 723 1.1 mrg /* Mask: If set, place the buffer in cache-coherent memory if available. 724 1.1 mrg * If clear, never place the buffer in cache coherent memory if validated. 725 1.1 mrg * Flags: The buffer is currently in cache-coherent memory. 726 1.1 mrg */ 727 1.1 mrg #define DRM_BO_FLAG_CACHED (1ULL << 7) 728 1.1 mrg 729 1.1 mrg /* Mask: Make sure that every time this buffer is validated, 730 1.1 mrg * it ends up on the same location provided that the memory mask is the same. 731 1.1 mrg * The buffer will also not be evicted when claiming space for 732 1.1 mrg * other buffers. Basically a pinned buffer but it may be thrown out as 733 1.1 mrg * part of buffer manager shutdown or locking. 734 1.1 mrg * Flags: Acknowledge. 735 1.1 mrg */ 736 1.1 mrg #define DRM_BO_FLAG_NO_MOVE (1ULL << 8) 737 1.1 mrg 738 1.1 mrg /* Mask: Make sure the buffer is in cached memory when mapped. In conjunction 739 1.1 mrg * with DRM_BO_FLAG_CACHED it also allows the buffer to be bound into the GART 740 1.1 mrg * with unsnooped PTEs instead of snooped, by using chipset-specific cache 741 1.1 mrg * flushing at bind time. A better name might be DRM_BO_FLAG_TT_UNSNOOPED, 742 1.1 mrg * as the eviction to local memory (TTM unbind) on map is just a side effect 743 1.1 mrg * to prevent aggressive cache prefetch from the GPU disturbing the cache 744 1.1 mrg * management that the DRM is doing. 745 1.1 mrg * 746 1.1 mrg * Flags: Acknowledge. 747 1.1 mrg * Buffers allocated with this flag should not be used for suballocators 748 1.1 mrg * This type may have issues on CPUs with over-aggressive caching 749 1.1 mrg * http://marc.info/?l=linux-kernel&m=102376926732464&w=2 750 1.1 mrg */ 751 1.1 mrg #define DRM_BO_FLAG_CACHED_MAPPED (1ULL << 19) 752 1.1 mrg 753 1.1 mrg 754 1.1 mrg /* Mask: Force DRM_BO_FLAG_CACHED flag strictly also if it is set. 755 1.1 mrg * Flags: Acknowledge. 756 1.1 mrg */ 757 1.1 mrg #define DRM_BO_FLAG_FORCE_CACHING (1ULL << 13) 758 1.1 mrg 759 1.1 mrg /* 760 1.1 mrg * Mask: Force DRM_BO_FLAG_MAPPABLE flag strictly also if it is clear. 761 1.1 mrg * Flags: Acknowledge. 762 1.1 mrg */ 763 1.1 mrg #define DRM_BO_FLAG_FORCE_MAPPABLE (1ULL << 14) 764 1.1 mrg #define DRM_BO_FLAG_TILE (1ULL << 15) 765 1.1 mrg 766 1.1 mrg /* 767 1.1 mrg * Memory type flags that can be or'ed together in the mask, but only 768 1.1 mrg * one appears in flags. 769 1.1 mrg */ 770 1.1 mrg 771 1.1 mrg /* System memory */ 772 1.1 mrg #define DRM_BO_FLAG_MEM_LOCAL (1ULL << 24) 773 1.1 mrg /* Translation table memory */ 774 1.1 mrg #define DRM_BO_FLAG_MEM_TT (1ULL << 25) 775 1.1 mrg /* Vram memory */ 776 1.1 mrg #define DRM_BO_FLAG_MEM_VRAM (1ULL << 26) 777 1.1 mrg /* Up to the driver to define. */ 778 1.1 mrg #define DRM_BO_FLAG_MEM_PRIV0 (1ULL << 27) 779 1.1 mrg #define DRM_BO_FLAG_MEM_PRIV1 (1ULL << 28) 780 1.1 mrg #define DRM_BO_FLAG_MEM_PRIV2 (1ULL << 29) 781 1.1 mrg #define DRM_BO_FLAG_MEM_PRIV3 (1ULL << 30) 782 1.1 mrg #define DRM_BO_FLAG_MEM_PRIV4 (1ULL << 31) 783 1.1 mrg /* We can add more of these now with a 64-bit flag type */ 784 1.1 mrg 785 1.1 mrg /* 786 1.1 mrg * This is a mask covering all of the memory type flags; easier to just 787 1.1 mrg * use a single constant than a bunch of | values. It covers 788 1.1 mrg * DRM_BO_FLAG_MEM_LOCAL through DRM_BO_FLAG_MEM_PRIV4 789 1.1 mrg */ 790 1.1 mrg #define DRM_BO_MASK_MEM 0x00000000FF000000ULL 791 1.1 mrg /* 792 1.1 mrg * This adds all of the CPU-mapping options in with the memory 793 1.1 mrg * type to label all bits which change how the page gets mapped 794 1.1 mrg */ 795 1.1 mrg #define DRM_BO_MASK_MEMTYPE (DRM_BO_MASK_MEM | \ 796 1.1 mrg DRM_BO_FLAG_CACHED_MAPPED | \ 797 1.1 mrg DRM_BO_FLAG_CACHED | \ 798 1.1 mrg DRM_BO_FLAG_MAPPABLE) 799 1.1 mrg 800 1.1 mrg /* Driver-private flags */ 801 1.1 mrg #define DRM_BO_MASK_DRIVER 0xFFFF000000000000ULL 802 1.1 mrg 803 1.1 mrg /* 804 1.1 mrg * Don't block on validate and map. Instead, return EBUSY. 805 1.1 mrg */ 806 1.1 mrg #define DRM_BO_HINT_DONT_BLOCK 0x00000002 807 1.1 mrg /* 808 1.1 mrg * Don't place this buffer on the unfenced list. This means 809 1.1 mrg * that the buffer will not end up having a fence associated 810 1.1 mrg * with it as a result of this operation 811 1.1 mrg */ 812 1.1 mrg #define DRM_BO_HINT_DONT_FENCE 0x00000004 813 1.1 mrg /** 814 1.1 mrg * On hardware with no interrupt events for operation completion, 815 1.1 mrg * indicates that the kernel should sleep while waiting for any blocking 816 1.1 mrg * operation to complete rather than spinning. 817 1.1 mrg * 818 1.1 mrg * Has no effect otherwise. 819 1.1 mrg */ 820 1.1 mrg #define DRM_BO_HINT_WAIT_LAZY 0x00000008 821 1.1 mrg /* 822 1.1 mrg * The client has compute relocations refering to this buffer using the 823 1.1 mrg * offset in the presumed_offset field. If that offset ends up matching 824 1.1 mrg * where this buffer lands, the kernel is free to skip executing those 825 1.1 mrg * relocations 826 1.1 mrg */ 827 1.1 mrg #define DRM_BO_HINT_PRESUMED_OFFSET 0x00000010 828 1.1 mrg 829 1.1 mrg #define DRM_BO_INIT_MAGIC 0xfe769812 830 1.1 mrg #define DRM_BO_INIT_MAJOR 1 831 1.1 mrg #define DRM_BO_INIT_MINOR 0 832 1.1 mrg #define DRM_BO_INIT_PATCH 0 833 1.1 mrg 834 1.1 mrg 835 1.1 mrg struct drm_bo_info_req { 836 1.1 mrg uint64_t mask; 837 1.1 mrg uint64_t flags; 838 1.1 mrg unsigned int handle; 839 1.1 mrg unsigned int hint; 840 1.1 mrg unsigned int fence_class; 841 1.1 mrg unsigned int desired_tile_stride; 842 1.1 mrg unsigned int tile_info; 843 1.1 mrg unsigned int pad64; 844 1.1 mrg uint64_t presumed_offset; 845 1.1 mrg }; 846 1.1 mrg 847 1.1 mrg struct drm_bo_create_req { 848 1.1 mrg uint64_t flags; 849 1.1 mrg uint64_t size; 850 1.1 mrg uint64_t buffer_start; 851 1.1 mrg unsigned int hint; 852 1.1 mrg unsigned int page_alignment; 853 1.1 mrg }; 854 1.1 mrg 855 1.1 mrg 856 1.1 mrg /* 857 1.1 mrg * Reply flags 858 1.1 mrg */ 859 1.1 mrg 860 1.1 mrg #define DRM_BO_REP_BUSY 0x00000001 861 1.1 mrg 862 1.1 mrg struct drm_bo_info_rep { 863 1.1 mrg uint64_t flags; 864 1.1 mrg uint64_t proposed_flags; 865 1.1 mrg uint64_t size; 866 1.1 mrg uint64_t offset; 867 1.1 mrg uint64_t arg_handle; 868 1.1 mrg uint64_t buffer_start; 869 1.1 mrg unsigned int handle; 870 1.1 mrg unsigned int fence_flags; 871 1.1 mrg unsigned int rep_flags; 872 1.1 mrg unsigned int page_alignment; 873 1.1 mrg unsigned int desired_tile_stride; 874 1.1 mrg unsigned int hw_tile_stride; 875 1.1 mrg unsigned int tile_info; 876 1.1 mrg unsigned int pad64; 877 1.1 mrg uint64_t expand_pad[4]; /*Future expansion */ 878 1.1 mrg }; 879 1.1 mrg 880 1.1 mrg struct drm_bo_arg_rep { 881 1.1 mrg struct drm_bo_info_rep bo_info; 882 1.1 mrg int ret; 883 1.1 mrg unsigned int pad64; 884 1.1 mrg }; 885 1.1 mrg 886 1.1 mrg struct drm_bo_create_arg { 887 1.1 mrg union { 888 1.1 mrg struct drm_bo_create_req req; 889 1.1 mrg struct drm_bo_info_rep rep; 890 1.1 mrg } d; 891 1.1 mrg }; 892 1.1 mrg 893 1.1 mrg struct drm_bo_handle_arg { 894 1.1 mrg unsigned int handle; 895 1.1 mrg }; 896 1.1 mrg 897 1.1 mrg struct drm_bo_reference_info_arg { 898 1.1 mrg union { 899 1.1 mrg struct drm_bo_handle_arg req; 900 1.1 mrg struct drm_bo_info_rep rep; 901 1.1 mrg } d; 902 1.1 mrg }; 903 1.1 mrg 904 1.1 mrg struct drm_bo_map_wait_idle_arg { 905 1.1 mrg union { 906 1.1 mrg struct drm_bo_info_req req; 907 1.1 mrg struct drm_bo_info_rep rep; 908 1.1 mrg } d; 909 1.1 mrg }; 910 1.1 mrg 911 1.1 mrg struct drm_bo_op_req { 912 1.1 mrg enum { 913 1.1 mrg drm_bo_validate, 914 1.1 mrg drm_bo_fence, 915 1.1 mrg drm_bo_ref_fence, 916 1.1 mrg } op; 917 1.1 mrg unsigned int arg_handle; 918 1.1 mrg struct drm_bo_info_req bo_req; 919 1.1 mrg }; 920 1.1 mrg 921 1.1 mrg 922 1.1 mrg struct drm_bo_op_arg { 923 1.1 mrg uint64_t next; 924 1.1 mrg union { 925 1.1 mrg struct drm_bo_op_req req; 926 1.1 mrg struct drm_bo_arg_rep rep; 927 1.1 mrg } d; 928 1.1 mrg int handled; 929 1.1 mrg unsigned int pad64; 930 1.1 mrg }; 931 1.1 mrg 932 1.1 mrg 933 1.1 mrg #define DRM_BO_MEM_LOCAL 0 934 1.1 mrg #define DRM_BO_MEM_TT 1 935 1.1 mrg #define DRM_BO_MEM_VRAM 2 936 1.1 mrg #define DRM_BO_MEM_PRIV0 3 937 1.1 mrg #define DRM_BO_MEM_PRIV1 4 938 1.1 mrg #define DRM_BO_MEM_PRIV2 5 939 1.1 mrg #define DRM_BO_MEM_PRIV3 6 940 1.1 mrg #define DRM_BO_MEM_PRIV4 7 941 1.1 mrg 942 1.1 mrg #define DRM_BO_MEM_TYPES 8 /* For now. */ 943 1.1 mrg 944 1.1 mrg #define DRM_BO_LOCK_UNLOCK_BM (1 << 0) 945 1.1 mrg #define DRM_BO_LOCK_IGNORE_NO_EVICT (1 << 1) 946 1.1 mrg 947 1.1 mrg struct drm_bo_version_arg { 948 1.1 mrg uint32_t major; 949 1.1 mrg uint32_t minor; 950 1.1 mrg uint32_t patchlevel; 951 1.1 mrg }; 952 1.1 mrg 953 1.1 mrg struct drm_mm_type_arg { 954 1.1 mrg unsigned int mem_type; 955 1.1 mrg unsigned int lock_flags; 956 1.1 mrg }; 957 1.1 mrg 958 1.1 mrg struct drm_mm_init_arg { 959 1.1 mrg unsigned int magic; 960 1.1 mrg unsigned int major; 961 1.1 mrg unsigned int minor; 962 1.1 mrg unsigned int mem_type; 963 1.1 mrg uint64_t p_offset; 964 1.1 mrg uint64_t p_size; 965 1.1 mrg }; 966 1.1 mrg 967 1.1 mrg struct drm_mm_info_arg { 968 1.1 mrg unsigned int mem_type; 969 1.1 mrg uint64_t p_size; 970 1.1 mrg }; 971 1.1 mrg 972 1.2 mrg struct drm_gem_close { 973 1.2 mrg /** Handle of the object to be closed. */ 974 1.2 mrg uint32_t handle; 975 1.2 mrg uint32_t pad; 976 1.2 mrg }; 977 1.2 mrg 978 1.2 mrg struct drm_gem_flink { 979 1.2 mrg /** Handle for the object being named */ 980 1.2 mrg uint32_t handle; 981 1.2 mrg 982 1.2 mrg /** Returned global name */ 983 1.2 mrg uint32_t name; 984 1.2 mrg }; 985 1.2 mrg 986 1.2 mrg struct drm_gem_open { 987 1.2 mrg /** Name of object being opened */ 988 1.2 mrg uint32_t name; 989 1.2 mrg 990 1.2 mrg /** Returned handle for the object */ 991 1.2 mrg uint32_t handle; 992 1.2 mrg 993 1.2 mrg /** Returned size of the object */ 994 1.2 mrg uint64_t size; 995 1.2 mrg }; 996 1.2 mrg 997 1.2 mrg #include "drm_mode.h" 998 1.2 mrg 999 1.1 mrg /** 1000 1.1 mrg * \name Ioctls Definitions 1001 1.1 mrg */ 1002 1.1 mrg /*@{*/ 1003 1.1 mrg 1004 1.1 mrg #define DRM_IOCTL_BASE 'd' 1005 1.1 mrg #define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) 1006 1.1 mrg #define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) 1007 1.1 mrg #define DRM_IOW(nr,type) _IOW(DRM_IOCTL_BASE,nr,type) 1008 1.1 mrg #define DRM_IOWR(nr,type) _IOWR(DRM_IOCTL_BASE,nr,type) 1009 1.1 mrg 1010 1.1 mrg #define DRM_IOCTL_VERSION DRM_IOWR(0x00, struct drm_version) 1011 1.1 mrg #define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, struct drm_unique) 1012 1.1 mrg #define DRM_IOCTL_GET_MAGIC DRM_IOR( 0x02, struct drm_auth) 1013 1.1 mrg #define DRM_IOCTL_IRQ_BUSID DRM_IOWR(0x03, struct drm_irq_busid) 1014 1.1 mrg #define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, struct drm_map) 1015 1.1 mrg #define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client) 1016 1.1 mrg #define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats) 1017 1.1 mrg #define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version) 1018 1.2 mrg #define DRM_IOCTL_MODESET_CTL DRM_IOW(0x08, struct drm_modeset_ctl) 1019 1.2 mrg 1020 1.2 mrg #define DRM_IOCTL_GEM_CLOSE DRM_IOW (0x09, struct drm_gem_close) 1021 1.2 mrg #define DRM_IOCTL_GEM_FLINK DRM_IOWR(0x0a, struct drm_gem_flink) 1022 1.2 mrg #define DRM_IOCTL_GEM_OPEN DRM_IOWR(0x0b, struct drm_gem_open) 1023 1.1 mrg 1024 1.1 mrg #define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique) 1025 1.1 mrg #define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth) 1026 1.1 mrg #define DRM_IOCTL_BLOCK DRM_IOWR(0x12, struct drm_block) 1027 1.1 mrg #define DRM_IOCTL_UNBLOCK DRM_IOWR(0x13, struct drm_block) 1028 1.1 mrg #define DRM_IOCTL_CONTROL DRM_IOW( 0x14, struct drm_control) 1029 1.1 mrg #define DRM_IOCTL_ADD_MAP DRM_IOWR(0x15, struct drm_map) 1030 1.1 mrg #define DRM_IOCTL_ADD_BUFS DRM_IOWR(0x16, struct drm_buf_desc) 1031 1.1 mrg #define DRM_IOCTL_MARK_BUFS DRM_IOW( 0x17, struct drm_buf_desc) 1032 1.1 mrg #define DRM_IOCTL_INFO_BUFS DRM_IOWR(0x18, struct drm_buf_info) 1033 1.1 mrg #define DRM_IOCTL_MAP_BUFS DRM_IOWR(0x19, struct drm_buf_map) 1034 1.1 mrg #define DRM_IOCTL_FREE_BUFS DRM_IOW( 0x1a, struct drm_buf_free) 1035 1.1 mrg 1036 1.1 mrg #define DRM_IOCTL_RM_MAP DRM_IOW( 0x1b, struct drm_map) 1037 1.1 mrg 1038 1.1 mrg #define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map) 1039 1.1 mrg #define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map) 1040 1.1 mrg 1041 1.2 mrg #define DRM_IOCTL_SET_MASTER DRM_IO(0x1e) 1042 1.2 mrg #define DRM_IOCTL_DROP_MASTER DRM_IO(0x1f) 1043 1.2 mrg 1044 1.1 mrg #define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx) 1045 1.1 mrg #define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx) 1046 1.1 mrg #define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx) 1047 1.1 mrg #define DRM_IOCTL_GET_CTX DRM_IOWR(0x23, struct drm_ctx) 1048 1.1 mrg #define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, struct drm_ctx) 1049 1.1 mrg #define DRM_IOCTL_NEW_CTX DRM_IOW( 0x25, struct drm_ctx) 1050 1.1 mrg #define DRM_IOCTL_RES_CTX DRM_IOWR(0x26, struct drm_ctx_res) 1051 1.1 mrg #define DRM_IOCTL_ADD_DRAW DRM_IOWR(0x27, struct drm_draw) 1052 1.1 mrg #define DRM_IOCTL_RM_DRAW DRM_IOWR(0x28, struct drm_draw) 1053 1.1 mrg #define DRM_IOCTL_DMA DRM_IOWR(0x29, struct drm_dma) 1054 1.1 mrg #define DRM_IOCTL_LOCK DRM_IOW( 0x2a, struct drm_lock) 1055 1.1 mrg #define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock) 1056 1.1 mrg #define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock) 1057 1.1 mrg 1058 1.1 mrg #define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30) 1059 1.1 mrg #define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) 1060 1.1 mrg #define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) 1061 1.1 mrg #define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) 1062 1.1 mrg #define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) 1063 1.1 mrg #define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) 1064 1.1 mrg #define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) 1065 1.1 mrg #define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) 1066 1.1 mrg 1067 1.1 mrg #define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) 1068 1.1 mrg #define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) 1069 1.1 mrg 1070 1.1 mrg #define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) 1071 1.1 mrg 1072 1.1 mrg #define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) 1073 1.1 mrg 1074 1.1 mrg #define DRM_IOCTL_MM_INIT DRM_IOWR(0xc0, struct drm_mm_init_arg) 1075 1.1 mrg #define DRM_IOCTL_MM_TAKEDOWN DRM_IOWR(0xc1, struct drm_mm_type_arg) 1076 1.1 mrg #define DRM_IOCTL_MM_LOCK DRM_IOWR(0xc2, struct drm_mm_type_arg) 1077 1.1 mrg #define DRM_IOCTL_MM_UNLOCK DRM_IOWR(0xc3, struct drm_mm_type_arg) 1078 1.1 mrg 1079 1.1 mrg #define DRM_IOCTL_FENCE_CREATE DRM_IOWR(0xc4, struct drm_fence_arg) 1080 1.1 mrg #define DRM_IOCTL_FENCE_REFERENCE DRM_IOWR(0xc6, struct drm_fence_arg) 1081 1.1 mrg #define DRM_IOCTL_FENCE_UNREFERENCE DRM_IOWR(0xc7, struct drm_fence_arg) 1082 1.1 mrg #define DRM_IOCTL_FENCE_SIGNALED DRM_IOWR(0xc8, struct drm_fence_arg) 1083 1.1 mrg #define DRM_IOCTL_FENCE_FLUSH DRM_IOWR(0xc9, struct drm_fence_arg) 1084 1.1 mrg #define DRM_IOCTL_FENCE_WAIT DRM_IOWR(0xca, struct drm_fence_arg) 1085 1.1 mrg #define DRM_IOCTL_FENCE_EMIT DRM_IOWR(0xcb, struct drm_fence_arg) 1086 1.1 mrg #define DRM_IOCTL_FENCE_BUFFERS DRM_IOWR(0xcc, struct drm_fence_arg) 1087 1.1 mrg 1088 1.1 mrg #define DRM_IOCTL_BO_CREATE DRM_IOWR(0xcd, struct drm_bo_create_arg) 1089 1.1 mrg #define DRM_IOCTL_BO_MAP DRM_IOWR(0xcf, struct drm_bo_map_wait_idle_arg) 1090 1.1 mrg #define DRM_IOCTL_BO_UNMAP DRM_IOWR(0xd0, struct drm_bo_handle_arg) 1091 1.1 mrg #define DRM_IOCTL_BO_REFERENCE DRM_IOWR(0xd1, struct drm_bo_reference_info_arg) 1092 1.1 mrg #define DRM_IOCTL_BO_UNREFERENCE DRM_IOWR(0xd2, struct drm_bo_handle_arg) 1093 1.1 mrg #define DRM_IOCTL_BO_SETSTATUS DRM_IOWR(0xd3, struct drm_bo_map_wait_idle_arg) 1094 1.1 mrg #define DRM_IOCTL_BO_INFO DRM_IOWR(0xd4, struct drm_bo_reference_info_arg) 1095 1.1 mrg #define DRM_IOCTL_BO_WAIT_IDLE DRM_IOWR(0xd5, struct drm_bo_map_wait_idle_arg) 1096 1.1 mrg #define DRM_IOCTL_BO_VERSION DRM_IOR(0xd6, struct drm_bo_version_arg) 1097 1.1 mrg #define DRM_IOCTL_MM_INFO DRM_IOWR(0xd7, struct drm_mm_info_arg) 1098 1.1 mrg 1099 1.2 mrg #define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res) 1100 1.2 mrg 1101 1.2 mrg #define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc) 1102 1.2 mrg #define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc) 1103 1.2 mrg #define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor) 1104 1.2 mrg #define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut) 1105 1.2 mrg #define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut) 1106 1.2 mrg 1107 1.2 mrg #define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder) 1108 1.2 mrg 1109 1.2 mrg #define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector) 1110 1.2 mrg #define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) 1111 1.2 mrg #define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) 1112 1.2 mrg #define DRM_IOCTL_MODE_GETPROPERTY DRM_IOWR(0xAA, struct drm_mode_get_property) 1113 1.2 mrg #define DRM_IOCTL_MODE_SETPROPERTY DRM_IOWR(0xAB, struct drm_mode_connector_set_property) 1114 1.2 mrg #define DRM_IOCTL_MODE_GETPROPBLOB DRM_IOWR(0xAC, struct drm_mode_get_blob) 1115 1.2 mrg 1116 1.2 mrg #define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd) 1117 1.2 mrg #define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd) 1118 1.2 mrg #define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, uint32_t) 1119 1.2 mrg #define DRM_IOCTL_MODE_REPLACEFB DRM_IOWR(0xB0, struct drm_mode_fb_cmd) 1120 1.2 mrg 1121 1.1 mrg /*@}*/ 1122 1.1 mrg 1123 1.1 mrg /** 1124 1.1 mrg * Device specific ioctls should only be in their respective headers 1125 1.1 mrg * The device specific ioctl range is from 0x40 to 0x99. 1126 1.1 mrg * Generic IOCTLS restart at 0xA0. 1127 1.1 mrg * 1128 1.1 mrg * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and 1129 1.1 mrg * drmCommandReadWrite(). 1130 1.1 mrg */ 1131 1.1 mrg #define DRM_COMMAND_BASE 0x40 1132 1.1 mrg #define DRM_COMMAND_END 0xA0 1133 1.1 mrg 1134 1.1 mrg /* typedef area */ 1135 1.2 mrg #ifndef __KERNEL__ 1136 1.1 mrg typedef struct drm_clip_rect drm_clip_rect_t; 1137 1.1 mrg typedef struct drm_tex_region drm_tex_region_t; 1138 1.1 mrg typedef struct drm_hw_lock drm_hw_lock_t; 1139 1.1 mrg typedef struct drm_version drm_version_t; 1140 1.1 mrg typedef struct drm_unique drm_unique_t; 1141 1.1 mrg typedef struct drm_list drm_list_t; 1142 1.1 mrg typedef struct drm_block drm_block_t; 1143 1.1 mrg typedef struct drm_control drm_control_t; 1144 1.1 mrg typedef enum drm_map_type drm_map_type_t; 1145 1.1 mrg typedef enum drm_map_flags drm_map_flags_t; 1146 1.1 mrg typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; 1147 1.1 mrg typedef struct drm_map drm_map_t; 1148 1.1 mrg typedef struct drm_client drm_client_t; 1149 1.1 mrg typedef enum drm_stat_type drm_stat_type_t; 1150 1.1 mrg typedef struct drm_stats drm_stats_t; 1151 1.1 mrg typedef enum drm_lock_flags drm_lock_flags_t; 1152 1.1 mrg typedef struct drm_lock drm_lock_t; 1153 1.1 mrg typedef enum drm_dma_flags drm_dma_flags_t; 1154 1.1 mrg typedef struct drm_buf_desc drm_buf_desc_t; 1155 1.1 mrg typedef struct drm_buf_info drm_buf_info_t; 1156 1.1 mrg typedef struct drm_buf_free drm_buf_free_t; 1157 1.1 mrg typedef struct drm_buf_pub drm_buf_pub_t; 1158 1.1 mrg typedef struct drm_buf_map drm_buf_map_t; 1159 1.1 mrg typedef struct drm_dma drm_dma_t; 1160 1.1 mrg typedef union drm_wait_vblank drm_wait_vblank_t; 1161 1.1 mrg typedef struct drm_agp_mode drm_agp_mode_t; 1162 1.1 mrg typedef enum drm_ctx_flags drm_ctx_flags_t; 1163 1.1 mrg typedef struct drm_ctx drm_ctx_t; 1164 1.1 mrg typedef struct drm_ctx_res drm_ctx_res_t; 1165 1.1 mrg typedef struct drm_draw drm_draw_t; 1166 1.1 mrg typedef struct drm_update_draw drm_update_draw_t; 1167 1.1 mrg typedef struct drm_auth drm_auth_t; 1168 1.1 mrg typedef struct drm_irq_busid drm_irq_busid_t; 1169 1.1 mrg typedef enum drm_vblank_seq_type drm_vblank_seq_type_t; 1170 1.1 mrg typedef struct drm_agp_buffer drm_agp_buffer_t; 1171 1.1 mrg typedef struct drm_agp_binding drm_agp_binding_t; 1172 1.1 mrg typedef struct drm_agp_info drm_agp_info_t; 1173 1.1 mrg typedef struct drm_scatter_gather drm_scatter_gather_t; 1174 1.1 mrg typedef struct drm_set_version drm_set_version_t; 1175 1.1 mrg 1176 1.1 mrg typedef struct drm_fence_arg drm_fence_arg_t; 1177 1.1 mrg typedef struct drm_mm_type_arg drm_mm_type_arg_t; 1178 1.1 mrg typedef struct drm_mm_init_arg drm_mm_init_arg_t; 1179 1.1 mrg typedef enum drm_bo_type drm_bo_type_t; 1180 1.1 mrg #endif 1181 1.1 mrg 1182 1.1 mrg #endif 1183