root/include/drm/drm_ioctl.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Internal Header for the Direct Rendering Manager
   3  *
   4  * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
   5  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
   6  * Copyright (c) 2009-2010, Code Aurora Forum.
   7  * All rights reserved.
   8  *
   9  * Author: Rickard E. (Rik) Faith <faith@valinux.com>
  10  * Author: Gareth Hughes <gareth@valinux.com>
  11  *
  12  * Permission is hereby granted, free of charge, to any person obtaining a
  13  * copy of this software and associated documentation files (the "Software"),
  14  * to deal in the Software without restriction, including without limitation
  15  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  16  * and/or sell copies of the Software, and to permit persons to whom the
  17  * Software is furnished to do so, subject to the following conditions:
  18  *
  19  * The above copyright notice and this permission notice (including the next
  20  * paragraph) shall be included in all copies or substantial portions of the
  21  * Software.
  22  *
  23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  24  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  25  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  26  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  27  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  28  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  29  * OTHER DEALINGS IN THE SOFTWARE.
  30  */
  31 
  32 #ifndef _DRM_IOCTL_H_
  33 #define _DRM_IOCTL_H_
  34 
  35 #include <linux/types.h>
  36 #include <linux/bitops.h>
  37 
  38 #include <asm/ioctl.h>
  39 
  40 struct drm_device;
  41 struct drm_file;
  42 struct file;
  43 
  44 /**
  45  * drm_ioctl_t - DRM ioctl function type.
  46  * @dev: DRM device inode
  47  * @data: private pointer of the ioctl call
  48  * @file_priv: DRM file this ioctl was made on
  49  *
  50  * This is the DRM ioctl typedef. Note that drm_ioctl() has alrady copied @data
  51  * into kernel-space, and will also copy it back, depending upon the read/write
  52  * settings in the ioctl command code.
  53  */
  54 typedef int drm_ioctl_t(struct drm_device *dev, void *data,
  55                         struct drm_file *file_priv);
  56 
  57 /**
  58  * drm_ioctl_compat_t - compatibility DRM ioctl function type.
  59  * @filp: file pointer
  60  * @cmd: ioctl command code
  61  * @arg: DRM file this ioctl was made on
  62  *
  63  * Just a typedef to make declaring an array of compatibility handlers easier.
  64  * New drivers shouldn't screw up the structure layout for their ioctl
  65  * structures and hence never need this.
  66  */
  67 typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
  68                                unsigned long arg);
  69 
  70 #define DRM_IOCTL_NR(n)                _IOC_NR(n)
  71 #define DRM_MAJOR       226
  72 
  73 /**
  74  * enum drm_ioctl_flags - DRM ioctl flags
  75  *
  76  * Various flags that can be set in &drm_ioctl_desc.flags to control how
  77  * userspace can use a given ioctl.
  78  */
  79 enum drm_ioctl_flags {
  80         /**
  81          * @DRM_AUTH:
  82          *
  83          * This is for ioctl which are used for rendering, and require that the
  84          * file descriptor is either for a render node, or if it's a
  85          * legacy/primary node, then it must be authenticated.
  86          */
  87         DRM_AUTH                = BIT(0),
  88         /**
  89          * @DRM_MASTER:
  90          *
  91          * This must be set for any ioctl which can change the modeset or
  92          * display state. Userspace must call the ioctl through a primary node,
  93          * while it is the active master.
  94          *
  95          * Note that read-only modeset ioctl can also be called by
  96          * unauthenticated clients, or when a master is not the currently active
  97          * one.
  98          */
  99         DRM_MASTER              = BIT(1),
 100         /**
 101          * @DRM_ROOT_ONLY:
 102          *
 103          * Anything that could potentially wreak a master file descriptor needs
 104          * to have this flag set. Current that's only for the SETMASTER and
 105          * DROPMASTER ioctl, which e.g. logind can call to force a non-behaving
 106          * master (display compositor) into compliance.
 107          *
 108          * This is equivalent to callers with the SYSADMIN capability.
 109          */
 110         DRM_ROOT_ONLY           = BIT(2),
 111         /**
 112          * @DRM_UNLOCKED:
 113          *
 114          * Whether &drm_ioctl_desc.func should be called with the DRM BKL held
 115          * or not. Enforced as the default for all modern drivers, hence there
 116          * should never be a need to set this flag.
 117          *
 118          * Do not use anywhere else than for the VBLANK_WAIT IOCTL, which is the
 119          * only legacy IOCTL which needs this.
 120          */
 121         DRM_UNLOCKED            = BIT(4),
 122         /**
 123          * @DRM_RENDER_ALLOW:
 124          *
 125          * This is used for all ioctl needed for rendering only, for drivers
 126          * which support render nodes. This should be all new render drivers,
 127          * and hence it should be always set for any ioctl with DRM_AUTH set.
 128          * Note though that read-only query ioctl might have this set, but have
 129          * not set DRM_AUTH because they do not require authentication.
 130          */
 131         DRM_RENDER_ALLOW        = BIT(5),
 132 };
 133 
 134 /**
 135  * struct drm_ioctl_desc - DRM driver ioctl entry
 136  * @cmd: ioctl command number, without flags
 137  * @flags: a bitmask of &enum drm_ioctl_flags
 138  * @func: handler for this ioctl
 139  * @name: user-readable name for debug output
 140  *
 141  * For convenience it's easier to create these using the DRM_IOCTL_DEF_DRV()
 142  * macro.
 143  */
 144 struct drm_ioctl_desc {
 145         unsigned int cmd;
 146         enum drm_ioctl_flags flags;
 147         drm_ioctl_t *func;
 148         const char *name;
 149 };
 150 
 151 /**
 152  * DRM_IOCTL_DEF_DRV() - helper macro to fill out a &struct drm_ioctl_desc
 153  * @ioctl: ioctl command suffix
 154  * @_func: handler for the ioctl
 155  * @_flags: a bitmask of &enum drm_ioctl_flags
 156  *
 157  * Small helper macro to create a &struct drm_ioctl_desc entry. The ioctl
 158  * command number is constructed by prepending ``DRM_IOCTL\_`` and passing that
 159  * to DRM_IOCTL_NR().
 160  */
 161 #define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags)                         \
 162         [DRM_IOCTL_NR(DRM_IOCTL_##ioctl) - DRM_COMMAND_BASE] = {        \
 163                 .cmd = DRM_IOCTL_##ioctl,                               \
 164                 .func = _func,                                          \
 165                 .flags = _flags,                                        \
 166                 .name = #ioctl                                          \
 167         }
 168 
 169 int drm_ioctl_permit(u32 flags, struct drm_file *file_priv);
 170 long drm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
 171 long drm_ioctl_kernel(struct file *, drm_ioctl_t, void *, u32);
 172 #ifdef CONFIG_COMPAT
 173 long drm_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
 174 #else
 175 /* Let drm_compat_ioctl be assigned to .compat_ioctl unconditionally */
 176 #define drm_compat_ioctl NULL
 177 #endif
 178 bool drm_ioctl_flags(unsigned int nr, unsigned int *flags);
 179 
 180 int drm_noop(struct drm_device *dev, void *data,
 181              struct drm_file *file_priv);
 182 int drm_invalid_op(struct drm_device *dev, void *data,
 183                    struct drm_file *file_priv);
 184 
 185 #endif /* _DRM_IOCTL_H_ */

/* [<][>][^][v][top][bottom][index][help] */