]> err.no Git - linux-2.6/commitdiff
drm: allow for more generic drm ioctls
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Sun, 18 Mar 2007 21:52:17 +0000 (08:52 +1100)
committerDave Airlie <airlied@linux.ie>
Sun, 18 Mar 2007 21:52:17 +0000 (08:52 +1100)
Signed-off-by: Dave Airlie <airlied@linux.ie>
drivers/char/drm/drm.h
drivers/char/drm/drm_drv.c

index 8db9041e306c03a53e6d07231a623a5756decc20..089198491f16757906bf3bb9235c798341034fdf 100644 (file)
@@ -654,11 +654,13 @@ typedef struct drm_set_version {
 
 /**
  * Device specific ioctls should only be in their respective headers
- * The device specific ioctl range is from 0x40 to 0x79.
+ * The device specific ioctl range is from 0x40 to 0x99.
+ * Generic IOCTLS restart at 0xA0.
  *
  * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and
  * drmCommandReadWrite().
  */
 #define DRM_COMMAND_BASE                0x40
+#define DRM_COMMAND_END                        0xA0
 
 #endif
index f5b9b2480c149a9d62641f7dcd4ccc0c2d56db1a..26bec30ee86e1d75899789e837ef1af3d41ccbe1 100644 (file)
@@ -496,11 +496,14 @@ int drm_ioctl(struct inode *inode, struct file *filp,
                  (long)old_encode_dev(priv->head->device),
                  priv->authenticated);
 
-       if (nr < DRIVER_IOCTL_COUNT)
-               ioctl = &drm_ioctls[nr];
-       else if ((nr >= DRM_COMMAND_BASE)
+       if ((nr >= DRIVER_IOCTL_COUNT) &&
+           ((nr < DRM_COMMAND_BASE) || (nr >= DRM_COMMAND_END)))
+               goto err_i1;
+       if ((nr >= DRM_COMMAND_BASE) && (nr < DRM_COMMAND_END)
                 && (nr < DRM_COMMAND_BASE + dev->driver->num_ioctls))
                ioctl = &dev->driver->ioctls[nr - DRM_COMMAND_BASE];
+       else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE))
+               ioctl = &drm_ioctls[nr];
        else
                goto err_i1;