b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* BEGIN CSTYLED */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Header for the Direct Rendering Manager
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * \author Rickard E. (Rik) Faith <faith@valinux.com>
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * \par Acknowledgments:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic \c cmpxchg.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * All rights reserved.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Permission is hereby granted, free of charge, to any person obtaining a
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * copy of this software and associated documentation files (the "Software"),
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * to deal in the Software without restriction, including without limitation
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * the rights to use, copy, modify, merge, publish, distribute, sublicense,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * and/or sell copies of the Software, and to permit persons to whom the
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Software is furnished to do so, subject to the following conditions:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * The above copyright notice and this permission notice (including the next
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * paragraph) shall be included in all copies or substantial portions of the
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Software.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * OTHER DEALINGS IN THE SOFTWARE.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * \mainpage
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * The Direct Rendering Manager (DRM) is a device-independent kernel-level
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * device driver that provides support for the XFree86 Direct Rendering
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Infrastructure (DRI).
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * The DRM supports the Direct Rendering Infrastructure (DRI) in four major
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * -# The DRM provides synchronized access to the graphics hardware via
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * the use of an optimized two-tiered lock.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * -# The DRM enforces the DRI security policy for access to the graphics
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * hardware by only allowing authenticated X11 clients access to
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * restricted regions of memory.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * -# The DRM provides a generic DMA engine, complete with multiple
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * queues and the ability to detect the need for an OpenGL context
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * -# The DRM is extensible via the use of small device-specific modules
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * that rely extensively on the API exported by the DRM module.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Copyright 2009-2010 Oracle Corporation
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * All rights reserved.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Use is subject to license terms.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if (defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && defined(IN_MODULE)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Prevent name collision when including sys/ioccom.h */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* __FreeBSD__ && xf86ioctl */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Solaris-specific. */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* used for X server compile */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if !defined(_KERNEL)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IO(type, nr) _IOC(_IOC_NONE, (type), (nr), 0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOR(type, nr, size) _IOC(_IOC_READ, (type), (nr), sizeof (size))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOW(type, nr, size) _IOC(_IOC_WRITE, (type), (nr), sizeof (size))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOWR(type, nr, size) _IOC(_IOC_READ|_IOC_WRITE, \
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* _KERNEL */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* __Solaris__ or sun */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define CONFIG_XFREE86_VERSION XFREE86_VERSION(4,1,0,0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if CONFIG_XFREE86_VERSION < XFREE86_VERSION(4,1,0,0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if CONFIG_XFREE86_VERSION >= XFREE86_VERSION(4,1,0,0)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define DRM_RAM_PERCENT 10 /**< How much system ram can we lock? */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef unsigned long long drm_handle_t; /**< To mapped regions */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef unsigned int drm_context_t; /**< GLXContext handle */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef unsigned int drm_magic_t; /**< Magic for authentication */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Cliprect.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * \warning If you change this structure, make sure you change
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * XF86DRIClipRectRec in the server as well
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * \note KW: Actually it's illegal to change either for
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * backwards-compatibility reasons.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Drawable information.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Texture region,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Hardware lock.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * The lock structure is a simple cache-line aligned integer. To avoid
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * processor bus contention on a multiprocessor system, there should not be any
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * other data stored in the same cache line.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync __volatile__ unsigned int lock; /**< lock variable */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* This is beyond ugly, and only works on GCC. However, it allows me to use
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * drm.h in places (i.e., in the X-server) where I can't use size_t. The real
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * fix is to use uint32_t instead of size_t, but that fix will break existing
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * LP64 (i.e., PowerPC64, SPARC64, IA-64, Alpha, etc.) systems. That *will*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * eventually happen, though. I chose 'unsigned long' to be the fallback type
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * because that works on all the platforms I know about. Hopefully, the
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * real fix will happen before that bites us.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# warning "__SIZE_TYPE__ not defined. Assuming sizeof(size_t) == sizeof(unsigned long)!"
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * DRM_IOCTL_VERSION ioctl argument type.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * \sa drmGetVersion().
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char __user *date; /**< User-space buffer to hold date */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char __user *desc; /**< User-space buffer to hold desc */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * DRM_IOCTL_GET_UNIQUE ioctl argument type.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * \sa drmGetBusid() and drmSetBusId().
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char __user *unique; /**< Unique name for driver instantiation */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * DRM_IOCTL_CONTROL ioctl argument type.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * \sa drmCtlInstHandler() and drmCtlUninstHandler().
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Type of memory to map.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync _DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync _DRM_REGISTERS = 1, /**< no caching, no core dump */
* These values \e must match xf86drm.h.
#if defined(__cplusplus)