[intel] Quirk away MSI support on 945G/GM.
[platform/upstream/libdrm.git] / linux-core / drm_ioc32.c
index 8087a96..0188154 100644 (file)
@@ -28,7 +28,6 @@
  * IN THE SOFTWARE.
  */
 #include <linux/compat.h>
-#include <linux/ioctl32.h>
 
 #include "drmP.h"
 #include "drm_core.h"
 #define DRM_IOCTL_WAIT_VBLANK32                DRM_IOWR(0x3a, drm_wait_vblank32_t)
 
 typedef struct drm_version_32 {
-       int     version_major;    /**< Major version */
-       int     version_minor;    /**< Minor version */
-       int     version_patchlevel;/**< Patch level */
-       u32     name_len;         /**< Length of name buffer */
-       u32     name;             /**< Name of driver */
-       u32     date_len;         /**< Length of date buffer */
-       u32     date;             /**< User-space buffer to hold date */
-       u32     desc_len;         /**< Length of desc buffer */
-       u32     desc;             /**< User-space buffer to hold desc */
+       int version_major;        /**< Major version */
+       int version_minor;        /**< Minor version */
+       int version_patchlevel;   /**< Patch level */
+       u32 name_len;             /**< Length of name buffer */
+       u32 name;                 /**< Name of driver */
+       u32 date_len;             /**< Length of date buffer */
+       u32 date;                 /**< User-space buffer to hold date */
+       u32 desc_len;             /**< Length of desc buffer */
+       u32 desc;                 /**< User-space buffer to hold desc */
 } drm_version32_t;
 
 static int compat_drm_version(struct file *file, unsigned int cmd,
                              unsigned long arg)
 {
        drm_version32_t v32;
-       drm_version_t __user *version;
+       struct drm_version __user *version;
        int err;
 
-       if (copy_from_user(&v32, (void __user *) arg, sizeof(v32)))
+       if (copy_from_user(&v32, (void __user *)arg, sizeof(v32)))
                return -EFAULT;
 
        version = compat_alloc_user_space(sizeof(*version));
@@ -104,7 +103,7 @@ static int compat_drm_version(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_VERSION, (unsigned long) version);
+                       DRM_IOCTL_VERSION, (unsigned long)version);
        if (err)
                return err;
 
@@ -116,7 +115,7 @@ static int compat_drm_version(struct file *file, unsigned int cmd,
            || __get_user(v32.desc_len, &version->desc_len))
                return -EFAULT;
 
-       if (copy_to_user((void __user *) arg, &v32, sizeof(v32)))
+       if (copy_to_user((void __user *)arg, &v32, sizeof(v32)))
                return -EFAULT;
        return 0;
 }
@@ -130,28 +129,28 @@ static int compat_drm_getunique(struct file *file, unsigned int cmd,
                                unsigned long arg)
 {
        drm_unique32_t uq32;
-       drm_unique_t __user *u;
+       struct drm_unique __user *u;
        int err;
 
-       if (copy_from_user(&uq32, (void __user *) arg, sizeof(uq32)))
+       if (copy_from_user(&uq32, (void __user *)arg, sizeof(uq32)))
                return -EFAULT;
 
        u = compat_alloc_user_space(sizeof(*u));
        if (!access_ok(VERIFY_WRITE, u, sizeof(*u)))
                return -EFAULT;
        if (__put_user(uq32.unique_len, &u->unique_len)
-           || __put_user((void __user *)(unsigned long) uq32.unique,
+           || __put_user((void __user *)(unsigned long)uq32.unique,
                          &u->unique))
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_GET_UNIQUE, (unsigned long) u);
+                       DRM_IOCTL_GET_UNIQUE, (unsigned long)u);
        if (err)
                return err;
 
        if (__get_user(uq32.unique_len, &u->unique_len))
                return -EFAULT;
-       if (copy_to_user((void __user *) arg, &uq32, sizeof(uq32)))
+       if (copy_to_user((void __user *)arg, &uq32, sizeof(uq32)))
                return -EFAULT;
        return 0;
 }
@@ -160,30 +159,30 @@ static int compat_drm_setunique(struct file *file, unsigned int cmd,
                                unsigned long arg)
 {
        drm_unique32_t uq32;
-       drm_unique_t __user *u;
+       struct drm_unique __user *u;
 
-       if (copy_from_user(&uq32, (void __user *) arg, sizeof(uq32)))
+       if (copy_from_user(&uq32, (void __user *)arg, sizeof(uq32)))
                return -EFAULT;
 
        u = compat_alloc_user_space(sizeof(*u));
        if (!access_ok(VERIFY_WRITE, u, sizeof(*u)))
                return -EFAULT;
        if (__put_user(uq32.unique_len, &u->unique_len)
-           || __put_user((void __user *)(unsigned long) uq32.unique,
+           || __put_user((void __user *)(unsigned long)uq32.unique,
                          &u->unique))
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_SET_UNIQUE, (unsigned long) u);
+                        DRM_IOCTL_SET_UNIQUE, (unsigned long)u);
 }
 
 typedef struct drm_map32 {
-       u32     offset;         /**< Requested physical address (0 for SAREA)*/
-       u32     size;           /**< Requested physical size (bytes) */
-       drm_map_type_t  type;   /**< Type of memory to map */
-       drm_map_flags_t flags;  /**< Flags */
-       u32     handle;         /**< User-space: "Handle" to pass to mmap() */
-       int     mtrr;           /**< MTRR slot used */
+       u32 offset;             /**< Requested physical address (0 for SAREA)*/
+       u32 size;               /**< Requested physical size (bytes) */
+       enum drm_map_type type; /**< Type of memory to map */
+       enum drm_map_flags flags;       /**< Flags */
+       u32 handle;             /**< User-space: "Handle" to pass to mmap() */
+       int mtrr;               /**< MTRR slot used */
 } drm_map32_t;
 
 static int compat_drm_getmap(struct file *file, unsigned int cmd,
@@ -191,7 +190,7 @@ static int compat_drm_getmap(struct file *file, unsigned int cmd,
 {
        drm_map32_t __user *argp = (void __user *)arg;
        drm_map32_t m32;
-       drm_map_t __user *map;
+       struct drm_map __user *map;
        int idx, err;
        void *handle;
 
@@ -205,7 +204,7 @@ static int compat_drm_getmap(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_GET_MAP, (unsigned long) map);
+                       DRM_IOCTL_GET_MAP, (unsigned long)map);
        if (err)
                return err;
 
@@ -217,7 +216,7 @@ static int compat_drm_getmap(struct file *file, unsigned int cmd,
            || __get_user(m32.mtrr, &map->mtrr))
                return -EFAULT;
 
-       m32.handle = (unsigned long) handle;
+       m32.handle = (unsigned long)handle;
        if (copy_to_user(argp, &m32, sizeof(m32)))
                return -EFAULT;
        return 0;
@@ -229,7 +228,7 @@ static int compat_drm_addmap(struct file *file, unsigned int cmd,
 {
        drm_map32_t __user *argp = (void __user *)arg;
        drm_map32_t m32;
-       drm_map_t __user *map;
+       struct drm_map __user *map;
        int err;
        void *handle;
 
@@ -246,7 +245,7 @@ static int compat_drm_addmap(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_ADD_MAP, (unsigned long) map);
+                       DRM_IOCTL_ADD_MAP, (unsigned long)map);
        if (err)
                return err;
 
@@ -255,8 +254,8 @@ static int compat_drm_addmap(struct file *file, unsigned int cmd,
            || __get_user(handle, &map->handle))
                return -EFAULT;
 
-       m32.handle = (unsigned long) handle;
-       if (m32.handle != (unsigned long) handle && printk_ratelimit())
+       m32.handle = (unsigned long)handle;
+       if (m32.handle != (unsigned long)handle && printk_ratelimit())
                printk(KERN_ERR "compat_drm_addmap truncated handle"
                       " %p for type %d offset %x\n",
                       handle, m32.type, m32.offset);
@@ -271,7 +270,7 @@ static int compat_drm_rmmap(struct file *file, unsigned int cmd,
                            unsigned long arg)
 {
        drm_map32_t __user *argp = (void __user *)arg;
-       drm_map_t __user *map;
+       struct drm_map __user *map;
        u32 handle;
 
        if (get_user(handle, &argp->handle))
@@ -280,20 +279,20 @@ static int compat_drm_rmmap(struct file *file, unsigned int cmd,
        map = compat_alloc_user_space(sizeof(*map));
        if (!access_ok(VERIFY_WRITE, map, sizeof(*map)))
                return -EFAULT;
-       if (__put_user((void *)(unsigned long) handle, &map->handle))
+       if (__put_user((void *)(unsigned long)handle, &map->handle))
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_RM_MAP, (unsigned long) map);
+                        DRM_IOCTL_RM_MAP, (unsigned long)map);
 }
 
 typedef struct drm_client32 {
-       int     idx;    /**< Which client desired? */
-       int     auth;   /**< Is client authenticated? */
-       u32     pid;    /**< Process ID */
-       u32     uid;    /**< User ID */
-       u32     magic;  /**< Magic */
-       u32     iocs;   /**< Ioctl count */
+       int idx;        /**< Which client desired? */
+       int auth;       /**< Is client authenticated? */
+       u32 pid;        /**< Process ID */
+       u32 uid;        /**< User ID */
+       u32 magic;      /**< Magic */
+       u32 iocs;       /**< Ioctl count */
 } drm_client32_t;
 
 static int compat_drm_getclient(struct file *file, unsigned int cmd,
@@ -301,7 +300,7 @@ static int compat_drm_getclient(struct file *file, unsigned int cmd,
 {
        drm_client32_t c32;
        drm_client32_t __user *argp = (void __user *)arg;
-       drm_client_t __user *client;
+       struct drm_client __user *client;
        int idx, err;
 
        if (get_user(idx, &argp->idx))
@@ -314,7 +313,7 @@ static int compat_drm_getclient(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_GET_CLIENT, (unsigned long) client);
+                       DRM_IOCTL_GET_CLIENT, (unsigned long)client);
        if (err)
                return err;
 
@@ -334,7 +333,7 @@ typedef struct drm_stats32 {
        u32 count;
        struct {
                u32 value;
-               drm_stat_type_t type;
+               enum drm_stat_type type;
        } data[15];
 } drm_stats32_t;
 
@@ -343,7 +342,7 @@ static int compat_drm_getstats(struct file *file, unsigned int cmd,
 {
        drm_stats32_t s32;
        drm_stats32_t __user *argp = (void __user *)arg;
-       drm_stats_t __user *stats;
+       struct drm_stats __user *stats;
        int i, err;
 
        stats = compat_alloc_user_space(sizeof(*stats));
@@ -351,7 +350,7 @@ static int compat_drm_getstats(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_GET_STATS, (unsigned long) stats);
+                       DRM_IOCTL_GET_STATS, (unsigned long)stats);
        if (err)
                return err;
 
@@ -368,19 +367,19 @@ static int compat_drm_getstats(struct file *file, unsigned int cmd,
 }
 
 typedef struct drm_buf_desc32 {
-       int           count;     /**< Number of buffers of this size */
-       int           size;      /**< Size in bytes */
-       int           low_mark;  /**< Low water mark */
-       int           high_mark; /**< High water mark */
-       int           flags;
-       u32           agp_start; /**< Start address in the AGP aperture */
+       int count;               /**< Number of buffers of this size */
+       int size;                /**< Size in bytes */
+       int low_mark;            /**< Low water mark */
+       int high_mark;           /**< High water mark */
+       int flags;
+       u32 agp_start;           /**< Start address in the AGP aperture */
 } drm_buf_desc32_t;
 
 static int compat_drm_addbufs(struct file *file, unsigned int cmd,
                              unsigned long arg)
 {
        drm_buf_desc32_t __user *argp = (void __user *)arg;
-       drm_buf_desc_t __user *buf;
+       struct drm_buf_desc __user *buf;
        int err;
        unsigned long agp_start;
 
@@ -395,7 +394,7 @@ static int compat_drm_addbufs(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_ADD_BUFS, (unsigned long) buf);
+                       DRM_IOCTL_ADD_BUFS, (unsigned long)buf);
        if (err)
                return err;
 
@@ -412,7 +411,7 @@ static int compat_drm_markbufs(struct file *file, unsigned int cmd,
 {
        drm_buf_desc32_t b32;
        drm_buf_desc32_t __user *argp = (void __user *)arg;
-       drm_buf_desc_t __user *buf;
+       struct drm_buf_desc __user *buf;
 
        if (copy_from_user(&b32, argp, sizeof(b32)))
                return -EFAULT;
@@ -427,12 +426,12 @@ static int compat_drm_markbufs(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_MARK_BUFS, (unsigned long) buf);
+                        DRM_IOCTL_MARK_BUFS, (unsigned long)buf);
 }
 
 typedef struct drm_buf_info32 {
-       int            count;   /**< Entries in list */
-       u32            list;
+       int count;              /**< Entries in list */
+       u32 list;
 } drm_buf_info32_t;
 
 static int compat_drm_infobufs(struct file *file, unsigned int cmd,
@@ -441,8 +440,8 @@ static int compat_drm_infobufs(struct file *file, unsigned int cmd,
        drm_buf_info32_t req32;
        drm_buf_info32_t __user *argp = (void __user *)arg;
        drm_buf_desc32_t __user *to;
-       drm_buf_info_t __user *request;
-       drm_buf_desc_t __user *list;
+       struct drm_buf_info __user *request;
+       struct drm_buf_desc __user *list;
        size_t nbytes;
        int i, err;
        int count, actual;
@@ -451,25 +450,25 @@ static int compat_drm_infobufs(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        count = req32.count;
-       to = (drm_buf_desc32_t __user *)(unsigned long) req32.list;
+       to = (drm_buf_desc32_t __user *)(unsigned long)req32.list;
        if (count < 0)
                count = 0;
        if (count > 0
            && !access_ok(VERIFY_WRITE, to, count * sizeof(drm_buf_desc32_t)))
                return -EFAULT;
 
-       nbytes = sizeof(*request) + count * sizeof(drm_buf_desc_t);
+       nbytes = sizeof(*request) + count * sizeof(struct drm_buf_desc);
        request = compat_alloc_user_space(nbytes);
        if (!access_ok(VERIFY_WRITE, request, nbytes))
                return -EFAULT;
-       list = (drm_buf_desc_t *) (request + 1);
+       list = (struct drm_buf_desc *) (request + 1);
 
        if (__put_user(count, &request->count)
            || __put_user(list, &request->list))
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_INFO_BUFS, (unsigned long) request);
+                       DRM_IOCTL_INFO_BUFS, (unsigned long)request);
        if (err)
                return err;
 
@@ -478,7 +477,7 @@ static int compat_drm_infobufs(struct file *file, unsigned int cmd,
        if (count >= actual)
                for (i = 0; i < actual; ++i)
                        if (__copy_in_user(&to[i], &list[i],
-                                          offsetof(drm_buf_desc_t, flags)))
+                                          offsetof(struct drm_buf_desc, flags)))
                                return -EFAULT;
 
        if (__put_user(actual, &argp->count))
@@ -488,16 +487,16 @@ static int compat_drm_infobufs(struct file *file, unsigned int cmd,
 }
 
 typedef struct drm_buf_pub32 {
-       int     idx;            /**< Index into the master buffer list */
-       int     total;          /**< Buffer size */
-       int     used;           /**< Amount of buffer in use (for DMA) */
-       u32     address;        /**< Address of buffer */
+       int idx;                /**< Index into the master buffer list */
+       int total;              /**< Buffer size */
+       int used;               /**< Amount of buffer in use (for DMA) */
+       u32 address;            /**< Address of buffer */
 } drm_buf_pub32_t;
 
 typedef struct drm_buf_map32 {
-       int     count;          /**< Length of the buffer list */
-       u32     virtual;        /**< Mmap'd area in user-virtual */
-       u32     list;           /**< Buffer information */
+       int count;              /**< Length of the buffer list */
+       u32 virtual;            /**< Mmap'd area in user-virtual */
+       u32 list;               /**< Buffer information */
 } drm_buf_map32_t;
 
 static int compat_drm_mapbufs(struct file *file, unsigned int cmd,
@@ -506,8 +505,8 @@ static int compat_drm_mapbufs(struct file *file, unsigned int cmd,
        drm_buf_map32_t __user *argp = (void __user *)arg;
        drm_buf_map32_t req32;
        drm_buf_pub32_t __user *list32;
-       drm_buf_map_t __user *request;
-       drm_buf_pub_t __user *list;
+       struct drm_buf_map __user *request;
+       struct drm_buf_pub __user *list;
        int i, err;
        int count, actual;
        size_t nbytes;
@@ -520,18 +519,18 @@ static int compat_drm_mapbufs(struct file *file, unsigned int cmd,
 
        if (count < 0)
                return -EINVAL;
-       nbytes = sizeof(*request) + count * sizeof(drm_buf_pub_t);
+       nbytes = sizeof(*request) + count * sizeof(struct drm_buf_pub);
        request = compat_alloc_user_space(nbytes);
        if (!access_ok(VERIFY_WRITE, request, nbytes))
                return -EFAULT;
-       list = (drm_buf_pub_t *) (request + 1);
+       list = (struct drm_buf_pub *) (request + 1);
 
        if (__put_user(count, &request->count)
            || __put_user(list, &request->list))
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_MAP_BUFS, (unsigned long) request);
+                       DRM_IOCTL_MAP_BUFS, (unsigned long)request);
        if (err)
                return err;
 
@@ -540,30 +539,30 @@ static int compat_drm_mapbufs(struct file *file, unsigned int cmd,
        if (count >= actual)
                for (i = 0; i < actual; ++i)
                        if (__copy_in_user(&list32[i], &list[i],
-                                          offsetof(drm_buf_pub_t, address))
+                                          offsetof(struct drm_buf_pub, address))
                            || __get_user(addr, &list[i].address)
-                           || __put_user((unsigned long) addr,
+                           || __put_user((unsigned long)addr,
                                          &list32[i].address))
                                return -EFAULT;
 
        if (__put_user(actual, &argp->count)
            || __get_user(addr, &request->virtual)
-           || __put_user((unsigned long) addr, &argp->virtual))
+           || __put_user((unsigned long)addr, &argp->virtual))
                return -EFAULT;
 
        return 0;
 }
 
 typedef struct drm_buf_free32 {
-       int     count;
-       u32     list;
+       int count;
+       u32 list;
 } drm_buf_free32_t;
 
 static int compat_drm_freebufs(struct file *file, unsigned int cmd,
                               unsigned long arg)
 {
        drm_buf_free32_t req32;
-       drm_buf_free_t __user *request;
+       struct drm_buf_free __user *request;
        drm_buf_free32_t __user *argp = (void __user *)arg;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
@@ -573,24 +572,24 @@ static int compat_drm_freebufs(struct file *file, unsigned int cmd,
        if (!access_ok(VERIFY_WRITE, request, sizeof(*request)))
                return -EFAULT;
        if (__put_user(req32.count, &request->count)
-           || __put_user((int __user *)(unsigned long) req32.list,
+           || __put_user((int __user *)(unsigned long)req32.list,
                          &request->list))
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_FREE_BUFS, (unsigned long) request);
+                        DRM_IOCTL_FREE_BUFS, (unsigned long)request);
 }
 
 typedef struct drm_ctx_priv_map32 {
-       unsigned int    ctx_id;  /**< Context requesting private mapping */
-       u32             handle; /**< Handle of map */
+       unsigned int ctx_id;     /**< Context requesting private mapping */
+       u32 handle;             /**< Handle of map */
 } drm_ctx_priv_map32_t;
 
 static int compat_drm_setsareactx(struct file *file, unsigned int cmd,
                                  unsigned long arg)
 {
        drm_ctx_priv_map32_t req32;
-       drm_ctx_priv_map_t __user *request;
+       struct drm_ctx_priv_map __user *request;
        drm_ctx_priv_map32_t __user *argp = (void __user *)arg;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
@@ -600,18 +599,18 @@ static int compat_drm_setsareactx(struct file *file, unsigned int cmd,
        if (!access_ok(VERIFY_WRITE, request, sizeof(*request)))
                return -EFAULT;
        if (__put_user(req32.ctx_id, &request->ctx_id)
-           || __put_user((void *)(unsigned long) req32.handle,
+           || __put_user((void *)(unsigned long)req32.handle,
                          &request->handle))
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_SET_SAREA_CTX, (unsigned long) request);
+                        DRM_IOCTL_SET_SAREA_CTX, (unsigned long)request);
 }
 
 static int compat_drm_getsareactx(struct file *file, unsigned int cmd,
                                  unsigned long arg)
 {
-       drm_ctx_priv_map_t __user *request;
+       struct drm_ctx_priv_map __user *request;
        drm_ctx_priv_map32_t __user *argp = (void __user *)arg;
        int err;
        unsigned int ctx_id;
@@ -628,20 +627,20 @@ static int compat_drm_getsareactx(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_GET_SAREA_CTX, (unsigned long) request);
+                       DRM_IOCTL_GET_SAREA_CTX, (unsigned long)request);
        if (err)
                return err;
 
        if (__get_user(handle, &request->handle)
-           || __put_user((unsigned long) handle, &argp->handle))
+           || __put_user((unsigned long)handle, &argp->handle))
                return -EFAULT;
 
        return 0;
 }
 
 typedef struct drm_ctx_res32 {
-       int     count;
-       u32     contexts;
+       int count;
+       u32 contexts;
 } drm_ctx_res32_t;
 
 static int compat_drm_resctx(struct file *file, unsigned int cmd,
@@ -649,7 +648,7 @@ static int compat_drm_resctx(struct file *file, unsigned int cmd,
 {
        drm_ctx_res32_t __user *argp = (void __user *)arg;
        drm_ctx_res32_t res32;
-       drm_ctx_res_t __user *res;
+       struct drm_ctx_res __user *res;
        int err;
 
        if (copy_from_user(&res32, argp, sizeof(res32)))
@@ -659,12 +658,12 @@ static int compat_drm_resctx(struct file *file, unsigned int cmd,
        if (!access_ok(VERIFY_WRITE, res, sizeof(*res)))
                return -EFAULT;
        if (__put_user(res32.count, &res->count)
-           || __put_user((drm_ctx_t __user *)(unsigned long) res32.contexts,
+           || __put_user((struct drm_ctx __user *) (unsigned long)res32.contexts,
                          &res->contexts))
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_RES_CTX, (unsigned long) res);
+                       DRM_IOCTL_RES_CTX, (unsigned long)res);
        if (err)
                return err;
 
@@ -676,24 +675,24 @@ static int compat_drm_resctx(struct file *file, unsigned int cmd,
 }
 
 typedef struct drm_dma32 {
-       int     context;          /**< Context handle */
-       int     send_count;       /**< Number of buffers to send */
-       u32     send_indices;     /**< List of handles to buffers */
-       u32     send_sizes;       /**< Lengths of data to send */
-       drm_dma_flags_t flags;            /**< Flags */
-       int     request_count;    /**< Number of buffers requested */
-       int     request_size;     /**< Desired size for buffers */
-       u32     request_indices;  /**< Buffer information */
-       u32     request_sizes;
-       int     granted_count;    /**< Number of buffers granted */
+       int context;              /**< Context handle */
+       int send_count;           /**< Number of buffers to send */
+       u32 send_indices;         /**< List of handles to buffers */
+       u32 send_sizes;           /**< Lengths of data to send */
+       enum drm_dma_flags flags;                 /**< Flags */
+       int request_count;        /**< Number of buffers requested */
+       int request_size;         /**< Desired size for buffers */
+       u32 request_indices;      /**< Buffer information */
+       u32 request_sizes;
+       int granted_count;        /**< Number of buffers granted */
 } drm_dma32_t;
 
 static int compat_drm_dma(struct file *file, unsigned int cmd,
                          unsigned long arg)
 {
        drm_dma32_t d32;
-       drm_dma32_t __user *argp = (void __user *) arg;
-       drm_dma_t __user *d;
+       drm_dma32_t __user *argp = (void __user *)arg;
+       struct drm_dma __user *d;
        int err;
 
        if (copy_from_user(&d32, argp, sizeof(d32)))
@@ -705,20 +704,20 @@ static int compat_drm_dma(struct file *file, unsigned int cmd,
 
        if (__put_user(d32.context, &d->context)
            || __put_user(d32.send_count, &d->send_count)
-           || __put_user((int __user *)(unsigned long) d32.send_indices,
+           || __put_user((int __user *)(unsigned long)d32.send_indices,
                          &d->send_indices)
-           || __put_user((int __user *)(unsigned long) d32.send_sizes,
+           || __put_user((int __user *)(unsigned long)d32.send_sizes,
                          &d->send_sizes)
            || __put_user(d32.flags, &d->flags)
            || __put_user(d32.request_count, &d->request_count)
-           || __put_user((int __user *)(unsigned long) d32.request_indices,
+           || __put_user((int __user *)(unsigned long)d32.request_indices,
                          &d->request_indices)
-           || __put_user((int __user *)(unsigned long) d32.request_sizes,
+           || __put_user((int __user *)(unsigned long)d32.request_sizes,
                          &d->request_sizes))
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_DMA, (unsigned long) d);
+                       DRM_IOCTL_DMA, (unsigned long)d);
        if (err)
                return err;
 
@@ -741,7 +740,7 @@ static int compat_drm_agp_enable(struct file *file, unsigned int cmd,
 {
        drm_agp_mode32_t __user *argp = (void __user *)arg;
        drm_agp_mode32_t m32;
-       drm_agp_mode_t __user *mode;
+       struct drm_agp_mode __user *mode;
 
        if (get_user(m32.mode, &argp->mode))
                return -EFAULT;
@@ -751,19 +750,19 @@ static int compat_drm_agp_enable(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_AGP_ENABLE, (unsigned long) mode);
+                        DRM_IOCTL_AGP_ENABLE, (unsigned long)mode);
 }
 
 typedef struct drm_agp_info32 {
-       int       agp_version_major;
-       int       agp_version_minor;
-       u32       mode;
-       u32       aperture_base;  /* physical address */
-       u32       aperture_size;  /* bytes */
-       u32       memory_allowed; /* bytes */
-       u32       memory_used;
-
-                               /* PCI information */
+       int agp_version_major;
+       int agp_version_minor;
+       u32 mode;
+       u32 aperture_base;      /* physical address */
+       u32 aperture_size;      /* bytes */
+       u32 memory_allowed;     /* bytes */
+       u32 memory_used;
+
+       /* PCI information */
        unsigned short id_vendor;
        unsigned short id_device;
 } drm_agp_info32_t;
@@ -773,7 +772,7 @@ static int compat_drm_agp_info(struct file *file, unsigned int cmd,
 {
        drm_agp_info32_t __user *argp = (void __user *)arg;
        drm_agp_info32_t i32;
-       drm_agp_info_t __user *info;
+       struct drm_agp_info __user *info;
        int err;
 
        info = compat_alloc_user_space(sizeof(*info));
@@ -781,7 +780,7 @@ static int compat_drm_agp_info(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_AGP_INFO, (unsigned long) info);
+                       DRM_IOCTL_AGP_INFO, (unsigned long)info);
        if (err)
                return err;
 
@@ -806,7 +805,7 @@ typedef struct drm_agp_buffer32 {
        u32 size;       /**< In bytes -- will round to page boundary */
        u32 handle;     /**< Used for binding / unbinding */
        u32 type;       /**< Type of memory to allocate */
-        u32 physical;  /**< Physical used by i810 */
+       u32 physical;   /**< Physical used by i810 */
 } drm_agp_buffer32_t;
 
 static int compat_drm_agp_alloc(struct file *file, unsigned int cmd,
@@ -814,7 +813,7 @@ static int compat_drm_agp_alloc(struct file *file, unsigned int cmd,
 {
        drm_agp_buffer32_t __user *argp = (void __user *)arg;
        drm_agp_buffer32_t req32;
-       drm_agp_buffer_t __user *request;
+       struct drm_agp_buffer __user *request;
        int err;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
@@ -827,7 +826,7 @@ static int compat_drm_agp_alloc(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_AGP_ALLOC, (unsigned long) request);
+                       DRM_IOCTL_AGP_ALLOC, (unsigned long)request);
        if (err)
                return err;
 
@@ -835,7 +834,7 @@ static int compat_drm_agp_alloc(struct file *file, unsigned int cmd,
            || __get_user(req32.physical, &request->physical)
            || copy_to_user(argp, &req32, sizeof(req32))) {
                drm_ioctl(file->f_dentry->d_inode, file,
-                         DRM_IOCTL_AGP_FREE, (unsigned long) request);
+                         DRM_IOCTL_AGP_FREE, (unsigned long)request);
                return -EFAULT;
        }
 
@@ -846,7 +845,7 @@ static int compat_drm_agp_free(struct file *file, unsigned int cmd,
                               unsigned long arg)
 {
        drm_agp_buffer32_t __user *argp = (void __user *)arg;
-       drm_agp_buffer_t __user *request;
+       struct drm_agp_buffer __user *request;
        u32 handle;
 
        request = compat_alloc_user_space(sizeof(*request));
@@ -856,7 +855,7 @@ static int compat_drm_agp_free(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_AGP_FREE, (unsigned long) request);
+                        DRM_IOCTL_AGP_FREE, (unsigned long)request);
 }
 
 typedef struct drm_agp_binding32 {
@@ -869,7 +868,7 @@ static int compat_drm_agp_bind(struct file *file, unsigned int cmd,
 {
        drm_agp_binding32_t __user *argp = (void __user *)arg;
        drm_agp_binding32_t req32;
-       drm_agp_binding_t __user *request;
+       struct drm_agp_binding __user *request;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
                return -EFAULT;
@@ -881,14 +880,14 @@ static int compat_drm_agp_bind(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_AGP_BIND, (unsigned long) request);
+                        DRM_IOCTL_AGP_BIND, (unsigned long)request);
 }
 
 static int compat_drm_agp_unbind(struct file *file, unsigned int cmd,
                                 unsigned long arg)
 {
        drm_agp_binding32_t __user *argp = (void __user *)arg;
-       drm_agp_binding_t __user *request;
+       struct drm_agp_binding __user *request;
        u32 handle;
 
        request = compat_alloc_user_space(sizeof(*request));
@@ -898,9 +897,9 @@ static int compat_drm_agp_unbind(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_AGP_UNBIND, (unsigned long) request);
+                        DRM_IOCTL_AGP_UNBIND, (unsigned long)request);
 }
-#endif /* __OS_HAS_AGP */
+#endif                         /* __OS_HAS_AGP */
 
 typedef struct drm_scatter_gather32 {
        u32 size;       /**< In bytes -- will round to page boundary */
@@ -911,7 +910,7 @@ static int compat_drm_sg_alloc(struct file *file, unsigned int cmd,
                               unsigned long arg)
 {
        drm_scatter_gather32_t __user *argp = (void __user *)arg;
-       drm_scatter_gather_t __user *request;
+       struct drm_scatter_gather __user *request;
        int err;
        unsigned long x;
 
@@ -923,7 +922,7 @@ static int compat_drm_sg_alloc(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_SG_ALLOC, (unsigned long) request);
+                       DRM_IOCTL_SG_ALLOC, (unsigned long)request);
        if (err)
                return err;
 
@@ -939,7 +938,7 @@ static int compat_drm_sg_free(struct file *file, unsigned int cmd,
                              unsigned long arg)
 {
        drm_scatter_gather32_t __user *argp = (void __user *)arg;
-       drm_scatter_gather_t __user *request;
+       struct drm_scatter_gather __user *request;
        unsigned long x;
 
        request = compat_alloc_user_space(sizeof(*request));
@@ -950,17 +949,17 @@ static int compat_drm_sg_free(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        return drm_ioctl(file->f_dentry->d_inode, file,
-                        DRM_IOCTL_SG_FREE, (unsigned long) request);
+                        DRM_IOCTL_SG_FREE, (unsigned long)request);
 }
 
 struct drm_wait_vblank_request32 {
-       drm_vblank_seq_type_t type;
+       enum drm_vblank_seq_type type;
        unsigned int sequence;
        u32 signal;
 };
 
 struct drm_wait_vblank_reply32 {
-       drm_vblank_seq_type_t type;
+       enum drm_vblank_seq_type type;
        unsigned int sequence;
        s32 tval_sec;
        s32 tval_usec;
@@ -976,7 +975,7 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd,
 {
        drm_wait_vblank32_t __user *argp = (void __user *)arg;
        drm_wait_vblank32_t req32;
-       drm_wait_vblank_t __user *request;
+       union drm_wait_vblank __user *request;
        int err;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
@@ -990,7 +989,7 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd,
                return -EFAULT;
 
        err = drm_ioctl(file->f_dentry->d_inode, file,
-                       DRM_IOCTL_WAIT_VBLANK, (unsigned long) request);
+                       DRM_IOCTL_WAIT_VBLANK, (unsigned long)request);
        if (err)
                return err;
 
@@ -1041,7 +1040,7 @@ drm_ioctl_compat_t *drm_compat_ioctls[] = {
  * Called whenever a 32-bit process running under a 64-bit kernel
  * performs an ioctl on /dev/drm.
  *
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument.
  * \return zero on success or negative number on failure.
@@ -1052,8 +1051,13 @@ long drm_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
        drm_ioctl_compat_t *fn;
        int ret;
 
+
+       /* Assume that ioctls without an explicit compat routine will "just
+        * work".  This may not always be a good assumption, but it's better
+        * than always failing.
+        */
        if (nr >= DRM_ARRAY_SIZE(drm_compat_ioctls))
-               return -ENOTTY;
+               return drm_ioctl(filp->f_dentry->d_inode, filp, cmd, arg);
 
        fn = drm_compat_ioctls[nr];