The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/drm/drm.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /**
    2  * \file drm.h
    3  * Header for the Direct Rendering Manager
    4  *
    5  * \author Rickard E. (Rik) Faith <faith@valinux.com>
    6  *
    7  * \par Acknowledgments:
    8  * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic \c cmpxchg.
    9  */
   10 
   11 /*-
   12  * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
   13  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
   14  * All rights reserved.
   15  *
   16  * Permission is hereby granted, free of charge, to any person obtaining a
   17  * copy of this software and associated documentation files (the "Software"),
   18  * to deal in the Software without restriction, including without limitation
   19  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   20  * and/or sell copies of the Software, and to permit persons to whom the
   21  * Software is furnished to do so, subject to the following conditions:
   22  *
   23  * The above copyright notice and this permission notice (including the next
   24  * paragraph) shall be included in all copies or substantial portions of the
   25  * Software.
   26  *
   27  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   28  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   29  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
   30  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
   31  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
   32  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
   33  * OTHER DEALINGS IN THE SOFTWARE.
   34  */
   35 
   36 #include <sys/cdefs.h>
   37 __FBSDID("$FreeBSD: releng/6.4/sys/dev/drm/drm.h 158686 2006-05-17 07:40:12Z anholt $");
   38 
   39 /**
   40  * \mainpage
   41  *
   42  * The Direct Rendering Manager (DRM) is a device-independent kernel-level
   43  * device driver that provides support for the XFree86 Direct Rendering
   44  * Infrastructure (DRI).
   45  *
   46  * The DRM supports the Direct Rendering Infrastructure (DRI) in four major
   47  * ways:
   48  *     -# The DRM provides synchronized access to the graphics hardware via
   49  *        the use of an optimized two-tiered lock.
   50  *     -# The DRM enforces the DRI security policy for access to the graphics
   51  *        hardware by only allowing authenticated X11 clients access to
   52  *        restricted regions of memory.
   53  *     -# The DRM provides a generic DMA engine, complete with multiple
   54  *        queues and the ability to detect the need for an OpenGL context
   55  *        switch.
   56  *     -# The DRM is extensible via the use of small device-specific modules
   57  *        that rely extensively on the API exported by the DRM module.
   58  *
   59  */
   60 
   61 #ifndef _DRM_H_
   62 #define _DRM_H_
   63 
   64 #ifndef __user
   65 #define __user
   66 #endif
   67 
   68 #ifdef __GNUC__
   69 # define DEPRECATED  __attribute__ ((deprecated))
   70 #else
   71 # define DEPRECATED
   72 #endif
   73 
   74 #if defined(__linux__)
   75 #if defined(__KERNEL__)
   76 #include <linux/config.h>
   77 #endif
   78 #include <asm/ioctl.h>          /* For _IO* macros */
   79 #define DRM_IOCTL_NR(n)         _IOC_NR(n)
   80 #define DRM_IOC_VOID            _IOC_NONE
   81 #define DRM_IOC_READ            _IOC_READ
   82 #define DRM_IOC_WRITE           _IOC_WRITE
   83 #define DRM_IOC_READWRITE       _IOC_READ|_IOC_WRITE
   84 #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
   85 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
   86 #if (defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && defined(IN_MODULE)
   87 /* Prevent name collision when including sys/ioccom.h */
   88 #undef ioctl
   89 #include <sys/ioccom.h>
   90 #define ioctl(a,b,c)            xf86ioctl(a,b,c)
   91 #else
   92 #include <sys/ioccom.h>
   93 #endif                          /* __FreeBSD__ && xf86ioctl */
   94 #define DRM_IOCTL_NR(n)         ((n) & 0xff)
   95 #define DRM_IOC_VOID            IOC_VOID
   96 #define DRM_IOC_READ            IOC_OUT
   97 #define DRM_IOC_WRITE           IOC_IN
   98 #define DRM_IOC_READWRITE       IOC_INOUT
   99 #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
  100 #endif
  101 
  102 #define XFREE86_VERSION(major,minor,patch,snap) \
  103                 ((major << 16) | (minor << 8) | patch)
  104 
  105 #ifndef CONFIG_XFREE86_VERSION
  106 #define CONFIG_XFREE86_VERSION XFREE86_VERSION(4,1,0,0)
  107 #endif
  108 
  109 #if CONFIG_XFREE86_VERSION < XFREE86_VERSION(4,1,0,0)
  110 #define DRM_PROC_DEVICES "/proc/devices"
  111 #define DRM_PROC_MISC    "/proc/misc"
  112 #define DRM_PROC_DRM     "/proc/drm"
  113 #define DRM_DEV_DRM      "/dev/drm"
  114 #define DRM_DEV_MODE     (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
  115 #define DRM_DEV_UID      0
  116 #define DRM_DEV_GID      0
  117 #endif
  118 
  119 #if CONFIG_XFREE86_VERSION >= XFREE86_VERSION(4,1,0,0)
  120 #ifdef __OpenBSD__
  121 #define DRM_MAJOR       81
  122 #endif
  123 #if defined(__linux__) || defined(__NetBSD__)
  124 #define DRM_MAJOR       226
  125 #endif
  126 #define DRM_MAX_MINOR   15
  127 #endif
  128 #define DRM_NAME        "drm"     /**< Name in kernel, /dev, and /proc */
  129 #define DRM_MIN_ORDER   5         /**< At least 2^5 bytes = 32 bytes */
  130 #define DRM_MAX_ORDER   22        /**< Up to 2^22 bytes = 4MB */
  131 #define DRM_RAM_PERCENT 10        /**< How much system ram can we lock? */
  132 
  133 #define _DRM_LOCK_HELD  0x80000000U /**< Hardware lock is held */
  134 #define _DRM_LOCK_CONT  0x40000000U /**< Hardware lock is contended */
  135 #define _DRM_LOCK_IS_HELD(lock)    ((lock) & _DRM_LOCK_HELD)
  136 #define _DRM_LOCK_IS_CONT(lock)    ((lock) & _DRM_LOCK_CONT)
  137 #define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
  138 
  139 #if defined(__linux__)
  140 typedef unsigned int drm_handle_t;
  141 #else
  142 typedef unsigned long drm_handle_t;     /**< To mapped regions */
  143 #endif
  144 typedef unsigned int drm_context_t;     /**< GLXContext handle */
  145 typedef unsigned int drm_drawable_t;
  146 typedef unsigned int drm_magic_t;       /**< Magic for authentication */
  147 
  148 /**
  149  * Cliprect.
  150  *
  151  * \warning If you change this structure, make sure you change
  152  * XF86DRIClipRectRec in the server as well
  153  *
  154  * \note KW: Actually it's illegal to change either for
  155  * backwards-compatibility reasons.
  156  */
  157 typedef struct drm_clip_rect {
  158         unsigned short x1;
  159         unsigned short y1;
  160         unsigned short x2;
  161         unsigned short y2;
  162 } drm_clip_rect_t;
  163 
  164 /**
  165  * Texture region,
  166  */
  167 typedef struct drm_tex_region {
  168         unsigned char next;
  169         unsigned char prev;
  170         unsigned char in_use;
  171         unsigned char padding;
  172         unsigned int age;
  173 } drm_tex_region_t;
  174 
  175 /**
  176  * Hardware lock.
  177  *
  178  * The lock structure is a simple cache-line aligned integer.  To avoid
  179  * processor bus contention on a multiprocessor system, there should not be any
  180  * other data stored in the same cache line.
  181  */
  182 typedef struct drm_hw_lock {
  183         __volatile__ unsigned int lock;         /**< lock variable */
  184         char padding[60];                       /**< Pad to cache line */
  185 } drm_hw_lock_t;
  186 
  187 /* This is beyond ugly, and only works on GCC.  However, it allows me to use
  188  * drm.h in places (i.e., in the X-server) where I can't use size_t.  The real
  189  * fix is to use uint32_t instead of size_t, but that fix will break existing
  190  * LP64 (i.e., PowerPC64, SPARC64, IA-64, Alpha, etc.) systems.  That *will*
  191  * eventually happen, though.  I chose 'unsigned long' to be the fallback type
  192  * because that works on all the platforms I know about.  Hopefully, the
  193  * real fix will happen before that bites us.
  194  */
  195 
  196 #ifdef __SIZE_TYPE__
  197 # define DRM_SIZE_T __SIZE_TYPE__
  198 #else
  199 # warning "__SIZE_TYPE__ not defined.  Assuming sizeof(size_t) == sizeof(unsigned long)!"
  200 # define DRM_SIZE_T unsigned long
  201 #endif
  202 
  203 /**
  204  * DRM_IOCTL_VERSION ioctl argument type.
  205  *
  206  * \sa drmGetVersion().
  207  */
  208 typedef struct drm_version {
  209         int version_major;        /**< Major version */
  210         int version_minor;        /**< Minor version */
  211         int version_patchlevel;   /**< Patch level */
  212         DRM_SIZE_T name_len;      /**< Length of name buffer */
  213         char __user *name;                /**< Name of driver */
  214         DRM_SIZE_T date_len;      /**< Length of date buffer */
  215         char __user *date;                /**< User-space buffer to hold date */
  216         DRM_SIZE_T desc_len;      /**< Length of desc buffer */
  217         char __user *desc;                /**< User-space buffer to hold desc */
  218 } drm_version_t;
  219 
  220 /**
  221  * DRM_IOCTL_GET_UNIQUE ioctl argument type.
  222  *
  223  * \sa drmGetBusid() and drmSetBusId().
  224  */
  225 typedef struct drm_unique {
  226         DRM_SIZE_T unique_len;    /**< Length of unique */
  227         char __user *unique;              /**< Unique name for driver instantiation */
  228 } drm_unique_t;
  229 
  230 #undef DRM_SIZE_T
  231 
  232 typedef struct drm_list {
  233         int count;                /**< Length of user-space structures */
  234         drm_version_t __user *version;
  235 } drm_list_t;
  236 
  237 typedef struct drm_block {
  238         int unused;
  239 } drm_block_t;
  240 
  241 /**
  242  * DRM_IOCTL_CONTROL ioctl argument type.
  243  *
  244  * \sa drmCtlInstHandler() and drmCtlUninstHandler().
  245  */
  246 typedef struct drm_control {
  247         enum {
  248                 DRM_ADD_COMMAND,
  249                 DRM_RM_COMMAND,
  250                 DRM_INST_HANDLER,
  251                 DRM_UNINST_HANDLER
  252         } func;
  253         int irq;
  254 } drm_control_t;
  255 
  256 /**
  257  * Type of memory to map.
  258  */
  259 typedef enum drm_map_type {
  260         _DRM_FRAME_BUFFER = 0,    /**< WC (no caching), no core dump */
  261         _DRM_REGISTERS = 1,       /**< no caching, no core dump */
  262         _DRM_SHM = 2,             /**< shared, cached */
  263         _DRM_AGP = 3,             /**< AGP/GART */
  264         _DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */
  265         _DRM_CONSISTENT = 5       /**< Consistent memory for PCI DMA */
  266 } drm_map_type_t;
  267 
  268 /**
  269  * Memory mapping flags.
  270  */
  271 typedef enum drm_map_flags {
  272         _DRM_RESTRICTED = 0x01,      /**< Cannot be mapped to user-virtual */
  273         _DRM_READ_ONLY = 0x02,
  274         _DRM_LOCKED = 0x04,          /**< shared, cached, locked */
  275         _DRM_KERNEL = 0x08,          /**< kernel requires access */
  276         _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
  277         _DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
  278         _DRM_REMOVABLE = 0x40        /**< Removable mapping */
  279 } drm_map_flags_t;
  280 
  281 typedef struct drm_ctx_priv_map {
  282         unsigned int ctx_id;     /**< Context requesting private mapping */
  283         void *handle;            /**< Handle of map */
  284 } drm_ctx_priv_map_t;
  285 
  286 /**
  287  * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
  288  * argument type.
  289  *
  290  * \sa drmAddMap().
  291  */
  292 typedef struct drm_map {
  293         unsigned long offset;    /**< Requested physical address (0 for SAREA)*/
  294         unsigned long size;      /**< Requested physical size (bytes) */
  295         drm_map_type_t type;     /**< Type of memory to map */
  296         drm_map_flags_t flags;   /**< Flags */
  297         void *handle;            /**< User-space: "Handle" to pass to mmap() */
  298                                  /**< Kernel-space: kernel-virtual address */
  299         int mtrr;                /**< MTRR slot used */
  300         /*   Private data */
  301 } drm_map_t;
  302 
  303 /**
  304  * DRM_IOCTL_GET_CLIENT ioctl argument type.
  305  */
  306 typedef struct drm_client {
  307         int idx;                /**< Which client desired? */
  308         int auth;               /**< Is client authenticated? */
  309         unsigned long pid;      /**< Process ID */
  310         unsigned long uid;      /**< User ID */
  311         unsigned long magic;    /**< Magic */
  312         unsigned long iocs;     /**< Ioctl count */
  313 } drm_client_t;
  314 
  315 typedef enum {
  316         _DRM_STAT_LOCK,
  317         _DRM_STAT_OPENS,
  318         _DRM_STAT_CLOSES,
  319         _DRM_STAT_IOCTLS,
  320         _DRM_STAT_LOCKS,
  321         _DRM_STAT_UNLOCKS,
  322         _DRM_STAT_VALUE,        /**< Generic value */
  323         _DRM_STAT_BYTE,         /**< Generic byte counter (1024bytes/K) */
  324         _DRM_STAT_COUNT,        /**< Generic non-byte counter (1000/k) */
  325 
  326         _DRM_STAT_IRQ,          /**< IRQ */
  327         _DRM_STAT_PRIMARY,      /**< Primary DMA bytes */
  328         _DRM_STAT_SECONDARY,    /**< Secondary DMA bytes */
  329         _DRM_STAT_DMA,          /**< DMA */
  330         _DRM_STAT_SPECIAL,      /**< Special DMA (e.g., priority or polled) */
  331         _DRM_STAT_MISSED        /**< Missed DMA opportunity */
  332             /* Add to the *END* of the list */
  333 } drm_stat_type_t;
  334 
  335 /**
  336  * DRM_IOCTL_GET_STATS ioctl argument type.
  337  */
  338 typedef struct drm_stats {
  339         unsigned long count;
  340         struct {
  341                 unsigned long value;
  342                 drm_stat_type_t type;
  343         } data[15];
  344 } drm_stats_t;
  345 
  346 /**
  347  * Hardware locking flags.
  348  */
  349 typedef enum drm_lock_flags {
  350         _DRM_LOCK_READY = 0x01,      /**< Wait until hardware is ready for DMA */
  351         _DRM_LOCK_QUIESCENT = 0x02,  /**< Wait until hardware quiescent */
  352         _DRM_LOCK_FLUSH = 0x04,      /**< Flush this context's DMA queue first */
  353         _DRM_LOCK_FLUSH_ALL = 0x08,  /**< Flush all DMA queues first */
  354         /* These *HALT* flags aren't supported yet
  355            -- they will be used to support the
  356            full-screen DGA-like mode. */
  357         _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */
  358         _DRM_HALT_CUR_QUEUES = 0x20  /**< Halt all current queues */
  359 } drm_lock_flags_t;
  360 
  361 /**
  362  * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type.
  363  *
  364  * \sa drmGetLock() and drmUnlock().
  365  */
  366 typedef struct drm_lock {
  367         int context;
  368         drm_lock_flags_t flags;
  369 } drm_lock_t;
  370 
  371 /**
  372  * DMA flags
  373  *
  374  * \warning
  375  * These values \e must match xf86drm.h.
  376  *
  377  * \sa drm_dma.
  378  */
  379 typedef enum drm_dma_flags {
  380         /* Flags for DMA buffer dispatch */
  381         _DRM_DMA_BLOCK = 0x01,        /**<
  382                                        * Block until buffer dispatched.
  383                                        *
  384                                        * \note The buffer may not yet have
  385                                        * been processed by the hardware --
  386                                        * getting a hardware lock with the
  387                                        * hardware quiescent will ensure
  388                                        * that the buffer has been
  389                                        * processed.
  390                                        */
  391         _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */
  392         _DRM_DMA_PRIORITY = 0x04,     /**< High priority dispatch */
  393 
  394         /* Flags for DMA buffer request */
  395         _DRM_DMA_WAIT = 0x10,         /**< Wait for free buffers */
  396         _DRM_DMA_SMALLER_OK = 0x20,   /**< Smaller-than-requested buffers OK */
  397         _DRM_DMA_LARGER_OK = 0x40     /**< Larger-than-requested buffers OK */
  398 } drm_dma_flags_t;
  399 
  400 /**
  401  * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type.
  402  *
  403  * \sa drmAddBufs().
  404  */
  405 typedef struct drm_buf_desc {
  406         int count;               /**< Number of buffers of this size */
  407         int size;                /**< Size in bytes */
  408         int low_mark;            /**< Low water mark */
  409         int high_mark;           /**< High water mark */
  410         enum {
  411                 _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */
  412                 _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */
  413                 _DRM_SG_BUFFER  = 0x04, /**< Scatter/gather memory buffer */
  414                 _DRM_FB_BUFFER  = 0x08  /**< Buffer is in frame buffer */
  415         } flags;
  416         unsigned long agp_start; /**<
  417                                   * Start address of where the AGP buffers are
  418                                   * in the AGP aperture
  419                                   */
  420 } drm_buf_desc_t;
  421 
  422 /**
  423  * DRM_IOCTL_INFO_BUFS ioctl argument type.
  424  */
  425 typedef struct drm_buf_info {
  426         int count;                /**< Number of buffers described in list */
  427         drm_buf_desc_t __user *list;      /**< List of buffer descriptions */
  428 } drm_buf_info_t;
  429 
  430 /**
  431  * DRM_IOCTL_FREE_BUFS ioctl argument type.
  432  */
  433 typedef struct drm_buf_free {
  434         int count;
  435         int __user *list;
  436 } drm_buf_free_t;
  437 
  438 /**
  439  * Buffer information
  440  *
  441  * \sa drm_buf_map.
  442  */
  443 typedef struct drm_buf_pub {
  444         int idx;                       /**< Index into the master buffer list */
  445         int total;                     /**< Buffer size */
  446         int used;                      /**< Amount of buffer in use (for DMA) */
  447         void __user *address;          /**< Address of buffer */
  448 } drm_buf_pub_t;
  449 
  450 /**
  451  * DRM_IOCTL_MAP_BUFS ioctl argument type.
  452  */
  453 typedef struct drm_buf_map {
  454         int count;              /**< Length of the buffer list */
  455 #if defined(__cplusplus)
  456         void __user *c_virtual;
  457 #else
  458         void __user *virtual;           /**< Mmap'd area in user-virtual */
  459 #endif
  460         drm_buf_pub_t __user *list;     /**< Buffer information */
  461 } drm_buf_map_t;
  462 
  463 /**
  464  * DRM_IOCTL_DMA ioctl argument type.
  465  *
  466  * Indices here refer to the offset into the buffer list in drm_buf_get.
  467  *
  468  * \sa drmDMA().
  469  */
  470 typedef struct drm_dma {
  471         int context;                      /**< Context handle */
  472         int send_count;                   /**< Number of buffers to send */
  473         int __user *send_indices;         /**< List of handles to buffers */
  474         int __user *send_sizes;           /**< Lengths of data to send */
  475         drm_dma_flags_t flags;            /**< Flags */
  476         int request_count;                /**< Number of buffers requested */
  477         int request_size;                 /**< Desired size for buffers */
  478         int __user *request_indices;     /**< Buffer information */
  479         int __user *request_sizes;
  480         int granted_count;                /**< Number of buffers granted */
  481 } drm_dma_t;
  482 
  483 typedef enum {
  484         _DRM_CONTEXT_PRESERVED = 0x01,
  485         _DRM_CONTEXT_2DONLY = 0x02
  486 } drm_ctx_flags_t;
  487 
  488 /**
  489  * DRM_IOCTL_ADD_CTX ioctl argument type.
  490  *
  491  * \sa drmCreateContext() and drmDestroyContext().
  492  */
  493 typedef struct drm_ctx {
  494         drm_context_t handle;
  495         drm_ctx_flags_t flags;
  496 } drm_ctx_t;
  497 
  498 /**
  499  * DRM_IOCTL_RES_CTX ioctl argument type.
  500  */
  501 typedef struct drm_ctx_res {
  502         int count;
  503         drm_ctx_t __user *contexts;
  504 } drm_ctx_res_t;
  505 
  506 /**
  507  * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type.
  508  */
  509 typedef struct drm_draw {
  510         drm_drawable_t handle;
  511 } drm_draw_t;
  512 
  513 /**
  514  * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type.
  515  */
  516 typedef struct drm_auth {
  517         drm_magic_t magic;
  518 } drm_auth_t;
  519 
  520 /**
  521  * DRM_IOCTL_IRQ_BUSID ioctl argument type.
  522  *
  523  * \sa drmGetInterruptFromBusID().
  524  */
  525 typedef struct drm_irq_busid {
  526         int irq;        /**< IRQ number */
  527         int busnum;     /**< bus number */
  528         int devnum;     /**< device number */
  529         int funcnum;    /**< function number */
  530 } drm_irq_busid_t;
  531 
  532 typedef enum {
  533         _DRM_VBLANK_ABSOLUTE = 0x0,     /**< Wait for specific vblank sequence number */
  534         _DRM_VBLANK_RELATIVE = 0x1,     /**< Wait for given number of vblanks */
  535         _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking */
  536 } drm_vblank_seq_type_t;
  537 
  538 #define _DRM_VBLANK_FLAGS_MASK _DRM_VBLANK_SIGNAL
  539 
  540 struct drm_wait_vblank_request {
  541         drm_vblank_seq_type_t type;
  542         unsigned int sequence;
  543         unsigned long signal;
  544 };
  545 
  546 struct drm_wait_vblank_reply {
  547         drm_vblank_seq_type_t type;
  548         unsigned int sequence;
  549         long tval_sec;
  550         long tval_usec;
  551 };
  552 
  553 /**
  554  * DRM_IOCTL_WAIT_VBLANK ioctl argument type.
  555  *
  556  * \sa drmWaitVBlank().
  557  */
  558 typedef union drm_wait_vblank {
  559         struct drm_wait_vblank_request request;
  560         struct drm_wait_vblank_reply reply;
  561 } drm_wait_vblank_t;
  562 
  563 /**
  564  * DRM_IOCTL_AGP_ENABLE ioctl argument type.
  565  *
  566  * \sa drmAgpEnable().
  567  */
  568 typedef struct drm_agp_mode {
  569         unsigned long mode;     /**< AGP mode */
  570 } drm_agp_mode_t;
  571 
  572 /**
  573  * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type.
  574  *
  575  * \sa drmAgpAlloc() and drmAgpFree().
  576  */
  577 typedef struct drm_agp_buffer {
  578         unsigned long size;     /**< In bytes -- will round to page boundary */
  579         unsigned long handle;   /**< Used for binding / unbinding */
  580         unsigned long type;     /**< Type of memory to allocate */
  581         unsigned long physical; /**< Physical used by i810 */
  582 } drm_agp_buffer_t;
  583 
  584 /**
  585  * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type.
  586  *
  587  * \sa drmAgpBind() and drmAgpUnbind().
  588  */
  589 typedef struct drm_agp_binding {
  590         unsigned long handle;   /**< From drm_agp_buffer */
  591         unsigned long offset;   /**< In bytes -- will round to page boundary */
  592 } drm_agp_binding_t;
  593 
  594 /**
  595  * DRM_IOCTL_AGP_INFO ioctl argument type.
  596  *
  597  * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(),
  598  * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(),
  599  * drmAgpVendorId() and drmAgpDeviceId().
  600  */
  601 typedef struct drm_agp_info {
  602         int agp_version_major;
  603         int agp_version_minor;
  604         unsigned long mode;
  605         unsigned long aperture_base;   /**< physical address */
  606         unsigned long aperture_size;   /**< bytes */
  607         unsigned long memory_allowed;  /**< bytes */
  608         unsigned long memory_used;
  609 
  610         /** \name PCI information */
  611         /*@{ */
  612         unsigned short id_vendor;
  613         unsigned short id_device;
  614         /*@} */
  615 } drm_agp_info_t;
  616 
  617 /**
  618  * DRM_IOCTL_SG_ALLOC ioctl argument type.
  619  */
  620 typedef struct drm_scatter_gather {
  621         unsigned long size;     /**< In bytes -- will round to page boundary */
  622         unsigned long handle;   /**< Used for mapping / unmapping */
  623 } drm_scatter_gather_t;
  624 
  625 /**
  626  * DRM_IOCTL_SET_VERSION ioctl argument type.
  627  */
  628 typedef struct drm_set_version {
  629         int drm_di_major;
  630         int drm_di_minor;
  631         int drm_dd_major;
  632         int drm_dd_minor;
  633 } drm_set_version_t;
  634 
  635 /**
  636  * \name Ioctls Definitions
  637  */
  638 /*@{*/
  639 
  640 #define DRM_IOCTL_BASE                  'd'
  641 #define DRM_IO(nr)                      _IO(DRM_IOCTL_BASE,nr)
  642 #define DRM_IOR(nr,type)                _IOR(DRM_IOCTL_BASE,nr,type)
  643 #define DRM_IOW(nr,type)                _IOW(DRM_IOCTL_BASE,nr,type)
  644 #define DRM_IOWR(nr,type)               _IOWR(DRM_IOCTL_BASE,nr,type)
  645 
  646 #define DRM_IOCTL_VERSION               DRM_IOWR(0x00, drm_version_t)
  647 #define DRM_IOCTL_GET_UNIQUE            DRM_IOWR(0x01, drm_unique_t)
  648 #define DRM_IOCTL_GET_MAGIC             DRM_IOR( 0x02, drm_auth_t)
  649 #define DRM_IOCTL_IRQ_BUSID             DRM_IOWR(0x03, drm_irq_busid_t)
  650 #define DRM_IOCTL_GET_MAP               DRM_IOWR(0x04, drm_map_t)
  651 #define DRM_IOCTL_GET_CLIENT            DRM_IOWR(0x05, drm_client_t)
  652 #define DRM_IOCTL_GET_STATS             DRM_IOR( 0x06, drm_stats_t)
  653 #define DRM_IOCTL_SET_VERSION           DRM_IOWR(0x07, drm_set_version_t)
  654 
  655 #define DRM_IOCTL_SET_UNIQUE            DRM_IOW( 0x10, drm_unique_t)
  656 #define DRM_IOCTL_AUTH_MAGIC            DRM_IOW( 0x11, drm_auth_t)
  657 #define DRM_IOCTL_BLOCK                 DRM_IOWR(0x12, drm_block_t)
  658 #define DRM_IOCTL_UNBLOCK               DRM_IOWR(0x13, drm_block_t)
  659 #define DRM_IOCTL_CONTROL               DRM_IOW( 0x14, drm_control_t)
  660 #define DRM_IOCTL_ADD_MAP               DRM_IOWR(0x15, drm_map_t)
  661 #define DRM_IOCTL_ADD_BUFS              DRM_IOWR(0x16, drm_buf_desc_t)
  662 #define DRM_IOCTL_MARK_BUFS             DRM_IOW( 0x17, drm_buf_desc_t)
  663 #define DRM_IOCTL_INFO_BUFS             DRM_IOWR(0x18, drm_buf_info_t)
  664 #define DRM_IOCTL_MAP_BUFS              DRM_IOWR(0x19, drm_buf_map_t)
  665 #define DRM_IOCTL_FREE_BUFS             DRM_IOW( 0x1a, drm_buf_free_t)
  666 
  667 #define DRM_IOCTL_RM_MAP                DRM_IOW( 0x1b, drm_map_t)
  668 
  669 #define DRM_IOCTL_SET_SAREA_CTX         DRM_IOW( 0x1c, drm_ctx_priv_map_t)
  670 #define DRM_IOCTL_GET_SAREA_CTX         DRM_IOWR(0x1d, drm_ctx_priv_map_t)
  671 
  672 #define DRM_IOCTL_ADD_CTX               DRM_IOWR(0x20, drm_ctx_t)
  673 #define DRM_IOCTL_RM_CTX                DRM_IOWR(0x21, drm_ctx_t)
  674 #define DRM_IOCTL_MOD_CTX               DRM_IOW( 0x22, drm_ctx_t)
  675 #define DRM_IOCTL_GET_CTX               DRM_IOWR(0x23, drm_ctx_t)
  676 #define DRM_IOCTL_SWITCH_CTX            DRM_IOW( 0x24, drm_ctx_t)
  677 #define DRM_IOCTL_NEW_CTX               DRM_IOW( 0x25, drm_ctx_t)
  678 #define DRM_IOCTL_RES_CTX               DRM_IOWR(0x26, drm_ctx_res_t)
  679 #define DRM_IOCTL_ADD_DRAW              DRM_IOWR(0x27, drm_draw_t)
  680 #define DRM_IOCTL_RM_DRAW               DRM_IOWR(0x28, drm_draw_t)
  681 #define DRM_IOCTL_DMA                   DRM_IOWR(0x29, drm_dma_t)
  682 #define DRM_IOCTL_LOCK                  DRM_IOW( 0x2a, drm_lock_t)
  683 #define DRM_IOCTL_UNLOCK                DRM_IOW( 0x2b, drm_lock_t)
  684 #define DRM_IOCTL_FINISH                DRM_IOW( 0x2c, drm_lock_t)
  685 
  686 #define DRM_IOCTL_AGP_ACQUIRE           DRM_IO(  0x30)
  687 #define DRM_IOCTL_AGP_RELEASE           DRM_IO(  0x31)
  688 #define DRM_IOCTL_AGP_ENABLE            DRM_IOW( 0x32, drm_agp_mode_t)
  689 #define DRM_IOCTL_AGP_INFO              DRM_IOR( 0x33, drm_agp_info_t)
  690 #define DRM_IOCTL_AGP_ALLOC             DRM_IOWR(0x34, drm_agp_buffer_t)
  691 #define DRM_IOCTL_AGP_FREE              DRM_IOW( 0x35, drm_agp_buffer_t)
  692 #define DRM_IOCTL_AGP_BIND              DRM_IOW( 0x36, drm_agp_binding_t)
  693 #define DRM_IOCTL_AGP_UNBIND            DRM_IOW( 0x37, drm_agp_binding_t)
  694 
  695 #define DRM_IOCTL_SG_ALLOC              DRM_IOW( 0x38, drm_scatter_gather_t)
  696 #define DRM_IOCTL_SG_FREE               DRM_IOW( 0x39, drm_scatter_gather_t)
  697 
  698 #define DRM_IOCTL_WAIT_VBLANK           DRM_IOWR(0x3a, drm_wait_vblank_t)
  699 
  700 /*@}*/
  701 
  702 /**
  703  * Device specific ioctls should only be in their respective headers
  704  * The device specific ioctl range is from 0x40 to 0x79.
  705  *
  706  * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and
  707  * drmCommandReadWrite().
  708  */
  709 #define DRM_COMMAND_BASE                0x40
  710 
  711 #endif

Cache object: b493ef2d8037736e96dbb74b84d67865


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.