BSD: simplify drm_ioctl() after other refactoring.
authorvehemens <vehemens@verizon.net>
Wed, 15 Aug 2007 18:12:46 +0000 (11:12 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 15 Aug 2007 18:12:46 +0000 (11:12 -0700)
bsd-core/drm_drv.c

index 208f438..afd9035 100644 (file)
@@ -821,14 +821,7 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
 int drm_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int flags, 
     DRM_STRUCTPROC *p)
 {
-#ifdef __FreeBSD__
-       drm_device_t *dev = kdev->si_drv1;
-#elif defined(__NetBSD__)
-       drm_device_t *dev = device_lookup(&drm_cd, minor(kdev));
-#else
-       drm_device_t *dev = device_lookup(&drm_cd,
-            minor(kdev)))->dv_cfdata->cf_driver->cd_devs[minor(kdev)];
-#endif
+       drm_device_t *dev = drm_get_device_from_kdev(kdev);
        int retcode = 0;
        drm_ioctl_desc_t *ioctl;
        int (*func)(drm_device_t *dev, void *data, struct drm_file *file_priv);
@@ -915,15 +908,13 @@ int drm_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int flags,
            ((ioctl->flags & DRM_MASTER) && !file_priv->master))
                return EACCES;
 
-       if (is_driver_ioctl)
-               DRM_LOCK();
-       retcode = func(dev, data, file_priv);
        if (is_driver_ioctl) {
+               DRM_LOCK();
+               /* shared code returns -errno */
+               retcode = -func(dev, data, file_priv);
                DRM_UNLOCK();
-               /* Driver ioctls in shared code follow the linux convention of
-                * returning -errno instead of errno.
-                */
-               retcode = -retcode;
+       } else {
+               retcode = func(dev, data, file_priv);
        }
 
        if (retcode != 0)