Merge git://git.infradead.org/iommu-2.6
[sfrench/cifs-2.6.git] / drivers / staging / comedi / comedi_compat32.c
index 7d0116bcb9ff1a6acc94d1473e2c335175f64131..1b9c2a7c824fe4ea5c6c5caabc0d66b085419801 100644 (file)
 #include <linux/ioctl32.h>     /* for (un)register_ioctl32_conversion */
 #endif
 
-#define COMEDI32_CHANINFO _IOR(CIO,3,comedi32_chaninfo)
-#define COMEDI32_RANGEINFO _IOR(CIO,8,comedi32_rangeinfo)
+#define COMEDI32_CHANINFO _IOR(CIO, 3, struct comedi32_chaninfo_struct)
+#define COMEDI32_RANGEINFO _IOR(CIO, 8, struct comedi32_rangeinfo_struct)
 /* N.B. COMEDI32_CMD and COMEDI_CMD ought to use _IOWR, not _IOR.
  * It's too late to change it now, but it only affects the command number. */
-#define COMEDI32_CMD _IOR(CIO,9,comedi32_cmd)
+#define COMEDI32_CMD _IOR(CIO, 9, struct comedi32_cmd_struct)
 /* N.B. COMEDI32_CMDTEST and COMEDI_CMDTEST ought to use _IOWR, not _IOR.
  * It's too late to change it now, but it only affects the command number. */
-#define COMEDI32_CMDTEST _IOR(CIO,10,comedi32_cmd)
-#define COMEDI32_INSNLIST _IOR(CIO,11,comedi32_insnlist)
-#define COMEDI32_INSN _IOR(CIO,12,comedi32_insn)
+#define COMEDI32_CMDTEST _IOR(CIO, 10, struct comedi32_cmd_struct)
+#define COMEDI32_INSNLIST _IOR(CIO, 11, struct comedi32_insnlist_struct)
+#define COMEDI32_INSN _IOR(CIO, 12, struct comedi32_insn_struct)
 
-typedef struct comedi32_chaninfo_struct {
+struct comedi32_chaninfo_struct {
        unsigned int subdev;
-       compat_uptr_t maxdata_list;     /* 32-bit 'lsampl_t *' */
+       compat_uptr_t maxdata_list;     /* 32-bit 'unsigned int *' */
        compat_uptr_t flaglist;         /* 32-bit 'unsigned int *' */
        compat_uptr_t rangelist;        /* 32-bit 'unsigned int *' */
        unsigned int unused[4];
-} comedi32_chaninfo;
+};
 
-typedef struct comedi32_rangeinfo_struct {
+struct comedi32_rangeinfo_struct {
        unsigned int range_type;
        compat_uptr_t range_ptr;        /* 32-bit 'void *' */
-} comedi32_rangeinfo;
+};
 
-typedef struct comedi32_cmd_struct {
+struct comedi32_cmd_struct {
        unsigned int subdev;
        unsigned int flags;
        unsigned int start_src;
@@ -76,37 +76,36 @@ typedef struct comedi32_cmd_struct {
        unsigned int stop_arg;
        compat_uptr_t chanlist;         /* 32-bit 'unsigned int *' */
        unsigned int chanlist_len;
-       compat_uptr_t data;             /* 32-bit 'sampl_t *' */
+       compat_uptr_t data;             /* 32-bit 'short *' */
        unsigned int data_len;
-} comedi32_cmd;
+};
 
-typedef struct comedi32_insn_struct {
+struct comedi32_insn_struct {
        unsigned int insn;
        unsigned int n;
-       compat_uptr_t data;             /* 32-bit 'lsampl_t *' */
+       compat_uptr_t data;             /* 32-bit 'unsigned int *' */
        unsigned int subdev;
        unsigned int chanspec;
        unsigned int unused[3];
-} comedi32_insn;
+};
 
-typedef struct comedi32_insnlist_struct {
+struct comedi32_insnlist_struct {
        unsigned int n_insns;
-       compat_uptr_t insns;            /* 32-bit 'comedi_insn *' */
-} comedi32_insnlist;
+       compat_uptr_t insns;            /* 32-bit 'struct comedi_insn *' */
+};
 
 /* Handle translated ioctl. */
 static int translated_ioctl(struct file *file, unsigned int cmd,
                unsigned long arg)
 {
-       if (!file->f_op) {
+       if (!file->f_op)
                return -ENOTTY;
-       }
+
 #ifdef HAVE_UNLOCKED_IOCTL
        if (file->f_op->unlocked_ioctl) {
                int rc = (int)(*file->f_op->unlocked_ioctl)(file, cmd, arg);
-               if (rc == -ENOIOCTLCMD) {
+               if (rc == -ENOIOCTLCMD)
                        rc = -ENOTTY;
-               }
                return rc;
        }
 #endif
@@ -124,8 +123,8 @@ static int translated_ioctl(struct file *file, unsigned int cmd,
 /* Handle 32-bit COMEDI_CHANINFO ioctl. */
 static int compat_chaninfo(struct file *file, unsigned long arg)
 {
-       comedi_chaninfo __user *chaninfo;
-       comedi32_chaninfo __user *chaninfo32;
+       struct comedi_chaninfo __user *chaninfo;
+       struct comedi32_chaninfo_struct __user *chaninfo32;
        int err;
        union {
                unsigned int uint;
@@ -150,9 +149,8 @@ static int compat_chaninfo(struct file *file, unsigned long arg)
        err |= __put_user(compat_ptr(temp.uptr), &chaninfo->flaglist);
        err |= __get_user(temp.uptr, &chaninfo32->rangelist);
        err |= __put_user(compat_ptr(temp.uptr), &chaninfo->rangelist);
-       if (err) {
+       if (err)
                return -EFAULT;
-       }
 
        return translated_ioctl(file, COMEDI_CHANINFO, (unsigned long)chaninfo);
 }
@@ -160,8 +158,8 @@ static int compat_chaninfo(struct file *file, unsigned long arg)
 /* Handle 32-bit COMEDI_RANGEINFO ioctl. */
 static int compat_rangeinfo(struct file *file, unsigned long arg)
 {
-       comedi_rangeinfo __user *rangeinfo;
-       comedi32_rangeinfo __user *rangeinfo32;
+       struct comedi_rangeinfo __user *rangeinfo;
+       struct comedi32_rangeinfo_struct __user *rangeinfo32;
        int err;
        union {
                unsigned int uint;
@@ -182,17 +180,16 @@ static int compat_rangeinfo(struct file *file, unsigned long arg)
        err |= __put_user(temp.uint, &rangeinfo->range_type);
        err |= __get_user(temp.uptr, &rangeinfo32->range_ptr);
        err |= __put_user(compat_ptr(temp.uptr), &rangeinfo->range_ptr);
-       if (err) {
+       if (err)
                return -EFAULT;
-       }
 
        return translated_ioctl(file, COMEDI_RANGEINFO,
                        (unsigned long)rangeinfo);
 }
 
 /* Copy 32-bit cmd structure to native cmd structure. */
-static int get_compat_cmd(comedi_cmd __user *cmd,
-               comedi32_cmd __user *cmd32)
+static int get_compat_cmd(struct comedi_cmd __user *cmd,
+               struct comedi32_cmd_struct __user *cmd32)
 {
        int err;
        union {
@@ -242,7 +239,7 @@ static int get_compat_cmd(comedi_cmd __user *cmd,
 }
 
 /* Copy native cmd structure to 32-bit cmd structure. */
-static int put_compat_cmd(comedi32_cmd __user *cmd32, comedi_cmd __user *cmd)
+static int put_compat_cmd(struct comedi32_cmd_struct __user *cmd32, struct comedi_cmd __user *cmd)
 {
        int err;
        unsigned int temp;
@@ -292,17 +289,16 @@ static int put_compat_cmd(comedi32_cmd __user *cmd32, comedi_cmd __user *cmd)
 /* Handle 32-bit COMEDI_CMD ioctl. */
 static int compat_cmd(struct file *file, unsigned long arg)
 {
-       comedi_cmd __user *cmd;
-       comedi32_cmd __user *cmd32;
+       struct comedi_cmd __user *cmd;
+       struct comedi32_cmd_struct __user *cmd32;
        int rc;
 
        cmd32 = compat_ptr(arg);
        cmd = compat_alloc_user_space(sizeof(*cmd));
 
        rc = get_compat_cmd(cmd, cmd32);
-       if (rc) {
+       if (rc)
                return rc;
-       }
 
        return translated_ioctl(file, COMEDI_CMD, (unsigned long)cmd);
 }
@@ -310,33 +306,31 @@ static int compat_cmd(struct file *file, unsigned long arg)
 /* Handle 32-bit COMEDI_CMDTEST ioctl. */
 static int compat_cmdtest(struct file *file, unsigned long arg)
 {
-       comedi_cmd __user *cmd;
-       comedi32_cmd __user *cmd32;
+       struct comedi_cmd __user *cmd;
+       struct comedi32_cmd_struct __user *cmd32;
        int rc, err;
 
        cmd32 = compat_ptr(arg);
        cmd = compat_alloc_user_space(sizeof(*cmd));
 
        rc = get_compat_cmd(cmd, cmd32);
-       if (rc) {
+       if (rc)
                return rc;
-       }
 
        rc = translated_ioctl(file, COMEDI_CMDTEST, (unsigned long)cmd);
-       if (rc < 0) {
+       if (rc < 0)
                return rc;
-       }
 
        err = put_compat_cmd(cmd32, cmd);
-       if (err) {
+       if (err)
                rc = err;
-       }
+
        return rc;
 }
 
 /* Copy 32-bit insn structure to native insn structure. */
-static int get_compat_insn(comedi_insn __user *insn,
-               comedi32_insn __user *insn32)
+static int get_compat_insn(struct comedi_insn __user *insn,
+               struct comedi32_insn_struct __user *insn32)
 {
        int err;
        union {
@@ -347,9 +341,9 @@ static int get_compat_insn(comedi_insn __user *insn,
        /* Copy insn structure.  Ignore the unused members. */
        err = 0;
        if (!access_ok(VERIFY_READ, insn32, sizeof(*insn32))
-                       || !access_ok(VERIFY_WRITE, insn, sizeof(*insn))) {
+                       || !access_ok(VERIFY_WRITE, insn, sizeof(*insn)))
                return -EFAULT;
-       }
+
        err |= __get_user(temp.uint, &insn32->insn);
        err |= __put_user(temp.uint, &insn->insn);
        err |= __get_user(temp.uint, &insn32->n);
@@ -367,11 +361,11 @@ static int get_compat_insn(comedi_insn __user *insn,
 static int compat_insnlist(struct file *file, unsigned long arg)
 {
        struct combined_insnlist {
-               comedi_insnlist insnlist;
-               comedi_insn insn[1];
+               struct comedi_insnlist insnlist;
+               struct comedi_insn insn[1];
        } __user *s;
-       comedi32_insnlist __user *insnlist32;
-       comedi32_insn __user *insn32;
+       struct comedi32_insnlist_struct __user *insnlist32;
+       struct comedi32_insn_struct __user *insn32;
        compat_uptr_t uptr;
        unsigned int n_insns, n;
        int err, rc;
@@ -386,9 +380,8 @@ static int compat_insnlist(struct file *file, unsigned long arg)
        err |= __get_user(n_insns, &insnlist32->n_insns);
        err |= __get_user(uptr, &insnlist32->insns);
        insn32 = compat_ptr(uptr);
-       if (err) {
+       if (err)
                return -EFAULT;
-       }
 
        /* Allocate user memory to copy insnlist and insns into. */
        s = compat_alloc_user_space(offsetof(struct combined_insnlist,
@@ -400,16 +393,14 @@ static int compat_insnlist(struct file *file, unsigned long arg)
        }
        err |= __put_user(n_insns, &s->insnlist.n_insns);
        err |= __put_user(&s->insn[0], &s->insnlist.insns);
-       if (err) {
+       if (err)
                return -EFAULT;
-       }
 
        /* Copy insn structures. */
        for (n = 0; n < n_insns; n++) {
                rc = get_compat_insn(&s->insn[n], &insn32[n]);
-               if (rc) {
+               if (rc)
                        return rc;
-               }
        }
 
        return translated_ioctl(file, COMEDI_INSNLIST,
@@ -419,17 +410,16 @@ static int compat_insnlist(struct file *file, unsigned long arg)
 /* Handle 32-bit COMEDI_INSN ioctl. */
 static int compat_insn(struct file *file, unsigned long arg)
 {
-       comedi_insn __user *insn;
-       comedi32_insn __user *insn32;
+       struct comedi_insn __user *insn;
+       struct comedi32_insn_struct __user *insn32;
        int rc;
 
        insn32 = compat_ptr(arg);
        insn = compat_alloc_user_space(sizeof(*insn));
 
        rc = get_compat_insn(insn, insn32);
-       if (rc) {
+       if (rc)
                return rc;
-       }
 
        return translated_ioctl(file, COMEDI_INSN, (unsigned long)insn);
 }
@@ -512,14 +502,14 @@ static int mapped_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg,
        int rc;
 
        /* Make sure we are dealing with a Comedi device. */
-       if (imajor(file->f_dentry->d_inode) != COMEDI_MAJOR) {
+       if (imajor(file->f_dentry->d_inode) != COMEDI_MAJOR)
                return -ENOTTY;
-       }
+
        rc = raw_ioctl(file, cmd, arg);
        /* Do not return -ENOIOCTLCMD. */
-       if (rc == -ENOIOCTLCMD) {
+       if (rc == -ENOIOCTLCMD)
                rc = -ENOTTY;
-       }
+
        return rc;
 }