Prechádzať zdrojové kódy

drm: allow for more generic drm ioctls

Signed-off-by: Dave Airlie <airlied@linux.ie>
Thomas Hellstrom 18 rokov pred
rodič
commit
99da6d861c
2 zmenil súbory, kde vykonal 9 pridanie a 4 odobranie
  1. 3 1
      drivers/char/drm/drm.h
  2. 6 3
      drivers/char/drm/drm_drv.c

+ 3 - 1
drivers/char/drm/drm.h

@@ -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

+ 6 - 3
drivers/char/drm/drm_drv.c

@@ -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;