diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2009-11-13 20:28:05 -0500 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2009-12-10 16:55:37 -0500 |
| commit | 637e8a60a7aaf4ef7d46cfdf83bcfac9cf6f0fbd (patch) | |
| tree | 5d50aaa8bcdf0b5f9af5c24ff6adcdb9d482cd9c | |
| parent | 3695669cd4f5fb6d569fd4243312c1b4a05bd5ce (diff) | |
usbdevfs: move compat_ioctl handling to devio.c
Half the compat_ioctl handling is in devio.c, the other
half is in fs/compat_ioctl.c. This moves everything into
one place for consistency.
As a positive side-effect, push down the BKL into the
ioctl methods.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Oliver Neukum <oliver@neukum.org>
Cc: Alon Bar-Lev <alon.barlev@gmail.com>
Cc: David Vrabel <david.vrabel@csr.com>
Cc: linux-usb@vger.kernel.org
| -rw-r--r-- | drivers/usb/core/devio.c | 110 | ||||
| -rw-r--r-- | fs/compat_ioctl.c | 112 | ||||
| -rw-r--r-- | include/linux/usbdevice_fs.h | 26 |
3 files changed, 125 insertions, 123 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 181f78c84105..6e8bcdfd23b4 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c | |||
| @@ -1388,6 +1388,46 @@ static int proc_reapurbnonblock(struct dev_state *ps, void __user *arg) | |||
| 1388 | } | 1388 | } |
| 1389 | 1389 | ||
| 1390 | #ifdef CONFIG_COMPAT | 1390 | #ifdef CONFIG_COMPAT |
| 1391 | static int proc_control_compat(struct dev_state *ps, | ||
| 1392 | struct usbdevfs_ctrltransfer32 __user *p32) | ||
| 1393 | { | ||
| 1394 | struct usbdevfs_ctrltransfer __user *p; | ||
| 1395 | __u32 udata; | ||
| 1396 | p = compat_alloc_user_space(sizeof(*p)); | ||
| 1397 | if (copy_in_user(p, p32, (sizeof(*p32) - sizeof(compat_caddr_t))) || | ||
| 1398 | get_user(udata, &p32->data) || | ||
| 1399 | put_user(compat_ptr(udata), &p->data)) | ||
| 1400 | return -EFAULT; | ||
| 1401 | return proc_control(ps, p); | ||
| 1402 | } | ||
| 1403 | |||
| 1404 | static int proc_bulk_compat(struct dev_state *ps, | ||
| 1405 | struct usbdevfs_bulktransfer32 __user *p32) | ||
| 1406 | { | ||
| 1407 | struct usbdevfs_bulktransfer __user *p; | ||
| 1408 | compat_uint_t n; | ||
| 1409 | compat_caddr_t addr; | ||
| 1410 | |||
| 1411 | p = compat_alloc_user_space(sizeof(*p)); | ||
| 1412 | |||
| 1413 | if (get_user(n, &p32->ep) || put_user(n, &p->ep) || | ||
| 1414 | get_user(n, &p32->len) || put_user(n, &p->len) || | ||
| 1415 | get_user(n, &p32->timeout) || put_user(n, &p->timeout) || | ||
| 1416 | get_user(addr, &p32->data) || put_user(compat_ptr(addr), &p->data)) | ||
| 1417 | return -EFAULT; | ||
| 1418 | |||
| 1419 | return proc_bulk(ps, p); | ||
| 1420 | } | ||
| 1421 | static int proc_disconnectsignal_compat(struct dev_state *ps, void __user *arg) | ||
| 1422 | { | ||
| 1423 | struct usbdevfs_disconnectsignal32 ds; | ||
| 1424 | |||
| 1425 | if (copy_from_user(&ds, arg, sizeof(ds))) | ||
| 1426 | return -EFAULT; | ||
| 1427 | ps->discsignr = ds.signr; | ||
| 1428 | ps->disccontext = compat_ptr(ds.context); | ||
| 1429 | return 0; | ||
| 1430 | } | ||
| 1391 | 1431 | ||
| 1392 | static int get_urb32(struct usbdevfs_urb *kurb, | 1432 | static int get_urb32(struct usbdevfs_urb *kurb, |
| 1393 | struct usbdevfs_urb32 __user *uurb) | 1433 | struct usbdevfs_urb32 __user *uurb) |
| @@ -1482,6 +1522,7 @@ static int proc_reapurbnonblock_compat(struct dev_state *ps, void __user *arg) | |||
| 1482 | return processcompl_compat(as, (void __user * __user *)arg); | 1522 | return processcompl_compat(as, (void __user * __user *)arg); |
| 1483 | } | 1523 | } |
| 1484 | 1524 | ||
| 1525 | |||
| 1485 | #endif | 1526 | #endif |
| 1486 | 1527 | ||
| 1487 | static int proc_disconnectsignal(struct dev_state *ps, void __user *arg) | 1528 | static int proc_disconnectsignal(struct dev_state *ps, void __user *arg) |
| @@ -1648,12 +1689,12 @@ static int proc_release_port(struct dev_state *ps, void __user *arg) | |||
| 1648 | * are assuming that somehow the configuration has been prevented from | 1689 | * are assuming that somehow the configuration has been prevented from |
| 1649 | * changing. But there's no mechanism to ensure that... | 1690 | * changing. But there's no mechanism to ensure that... |
| 1650 | */ | 1691 | */ |
| 1651 | static int usbdev_ioctl(struct inode *inode, struct file *file, | 1692 | static long usbdev_do_ioctl(struct file *file, unsigned int cmd, |
| 1652 | unsigned int cmd, unsigned long arg) | 1693 | void __user *p) |
| 1653 | { | 1694 | { |
| 1654 | struct dev_state *ps = file->private_data; | 1695 | struct dev_state *ps = file->private_data; |
| 1696 | struct inode *inode = file->f_path.dentry->d_inode; | ||
| 1655 | struct usb_device *dev = ps->dev; | 1697 | struct usb_device *dev = ps->dev; |
| 1656 | void __user *p = (void __user *)arg; | ||
| 1657 | int ret = -ENOTTY; | 1698 | int ret = -ENOTTY; |
| 1658 | 1699 | ||
| 1659 | if (!(file->f_mode & FMODE_WRITE)) | 1700 | if (!(file->f_mode & FMODE_WRITE)) |
| @@ -1726,6 +1767,24 @@ static int usbdev_ioctl(struct inode *inode, struct file *file, | |||
| 1726 | break; | 1767 | break; |
| 1727 | 1768 | ||
| 1728 | #ifdef CONFIG_COMPAT | 1769 | #ifdef CONFIG_COMPAT |
| 1770 | case USBDEVFS_CONTROL32: | ||
| 1771 | snoop(&dev->dev, "%s: CONTROL32\n", __func__); | ||
| 1772 | ret = proc_control_compat(ps, p); | ||
| 1773 | if (ret >= 0) | ||
| 1774 | inode->i_mtime = CURRENT_TIME; | ||
| 1775 | break; | ||
| 1776 | |||
| 1777 | case USBDEVFS_BULK32: | ||
| 1778 | snoop(&dev->dev, "%s: BULK32\n", __func__); | ||
| 1779 | ret = proc_bulk_compat(ps, p); | ||
| 1780 | if (ret >= 0) | ||
| 1781 | inode->i_mtime = CURRENT_TIME; | ||
| 1782 | break; | ||
| 1783 | |||
| 1784 | case USBDEVFS_DISCSIGNAL32: | ||
| 1785 | snoop(&dev->dev, "%s: DISCSIGNAL32\n", __func__); | ||
| 1786 | ret = proc_disconnectsignal_compat(ps, p); | ||
| 1787 | break; | ||
| 1729 | 1788 | ||
| 1730 | case USBDEVFS_SUBMITURB32: | 1789 | case USBDEVFS_SUBMITURB32: |
| 1731 | snoop(&dev->dev, "%s: SUBMITURB32\n", __func__); | 1790 | snoop(&dev->dev, "%s: SUBMITURB32\n", __func__); |
| @@ -1745,7 +1804,7 @@ static int usbdev_ioctl(struct inode *inode, struct file *file, | |||
| 1745 | break; | 1804 | break; |
| 1746 | 1805 | ||
| 1747 | case USBDEVFS_IOCTL32: | 1806 | case USBDEVFS_IOCTL32: |
| 1748 | snoop(&dev->dev, "%s: IOCTL\n", __func__); | 1807 | snoop(&dev->dev, "%s: IOCTL32\n", __func__); |
| 1749 | ret = proc_ioctl_compat(ps, ptr_to_compat(p)); | 1808 | ret = proc_ioctl_compat(ps, ptr_to_compat(p)); |
| 1750 | break; | 1809 | break; |
| 1751 | #endif | 1810 | #endif |
| @@ -1801,6 +1860,32 @@ static int usbdev_ioctl(struct inode *inode, struct file *file, | |||
| 1801 | return ret; | 1860 | return ret; |
| 1802 | } | 1861 | } |
| 1803 | 1862 | ||
| 1863 | static long usbdev_ioctl(struct file *file, unsigned int cmd, | ||
| 1864 | unsigned long arg) | ||
| 1865 | { | ||
| 1866 | int ret; | ||
| 1867 | |||
| 1868 | lock_kernel(); | ||
| 1869 | ret = usbdev_do_ioctl(file, cmd, (void __user *)arg); | ||
| 1870 | unlock_kernel(); | ||
| 1871 | |||
| 1872 | return ret; | ||
| 1873 | } | ||
| 1874 | |||
| 1875 | #ifdef CONFIG_COMPAT | ||
| 1876 | static long usbdev_compat_ioctl(struct file *file, unsigned int cmd, | ||
| 1877 | unsigned long arg) | ||
| 1878 | { | ||
| 1879 | int ret; | ||
| 1880 | |||
| 1881 | lock_kernel(); | ||
| 1882 | ret = usbdev_do_ioctl(file, cmd, compat_ptr(arg)); | ||
| 1883 | unlock_kernel(); | ||
| 1884 | |||
| 1885 | return ret; | ||
| 1886 | } | ||
| 1887 | #endif | ||
| 1888 | |||
| 1804 | /* No kernel lock - fine */ | 1889 | /* No kernel lock - fine */ |
| 1805 | static unsigned int usbdev_poll(struct file *file, | 1890 | static unsigned int usbdev_poll(struct file *file, |
| 1806 | struct poll_table_struct *wait) | 1891 | struct poll_table_struct *wait) |
| @@ -1817,13 +1902,16 @@ static unsigned int usbdev_poll(struct file *file, | |||
| 1817 | } | 1902 | } |
| 1818 | 1903 | ||
| 1819 | const struct file_operations usbdev_file_operations = { | 1904 | const struct file_operations usbdev_file_operations = { |
| 1820 | .owner = THIS_MODULE, | 1905 | .owner = THIS_MODULE, |
| 1821 | .llseek = usbdev_lseek, | 1906 | .llseek = usbdev_lseek, |
| 1822 | .read = usbdev_read, | 1907 | .read = usbdev_read, |
| 1823 | .poll = usbdev_poll, | 1908 | .poll = usbdev_poll, |
| 1824 | .ioctl = usbdev_ioctl, | 1909 | .unlocked_ioctl = usbdev_ioctl, |
| 1825 | .open = usbdev_open, | 1910 | #ifdef CONFIG_COMPAT |
| 1826 | .release = usbdev_release, | 1911 | .compat_ioctl = usbdev_compat_ioctl, |
| 1912 | #endif | ||
| 1913 | .open = usbdev_open, | ||
| 1914 | .release = usbdev_release, | ||
| 1827 | }; | 1915 | }; |
| 1828 | 1916 | ||
| 1829 | static void usbdev_remove(struct usb_device *udev) | 1917 | static void usbdev_remove(struct usb_device *udev) |
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index 598763fd207f..278020d2449c 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c | |||
| @@ -742,94 +742,6 @@ static int serial_struct_ioctl(unsigned fd, unsigned cmd, | |||
| 742 | return err; | 742 | return err; |
| 743 | } | 743 | } |
| 744 | 744 | ||
| 745 | struct usbdevfs_ctrltransfer32 { | ||
| 746 | u8 bRequestType; | ||
| 747 | u8 bRequest; | ||
| 748 | u16 wValue; | ||
| 749 | u16 wIndex; | ||
| 750 | u16 wLength; | ||
| 751 | u32 timeout; /* in milliseconds */ | ||
| 752 | compat_caddr_t data; | ||
| 753 | }; | ||
| 754 | |||
| 755 | #define USBDEVFS_CONTROL32 _IOWR('U', 0, struct usbdevfs_ctrltransfer32) | ||
| 756 | |||
| 757 | static int do_usbdevfs_control(unsigned int fd, unsigned int cmd, | ||
| 758 | struct usbdevfs_ctrltransfer32 __user *p32) | ||
| 759 | { | ||
| 760 | struct usbdevfs_ctrltransfer __user *p; | ||
| 761 | __u32 udata; | ||
| 762 | p = compat_alloc_user_space(sizeof(*p)); | ||
| 763 | if (copy_in_user(p, p32, (sizeof(*p32) - sizeof(compat_caddr_t))) || | ||
| 764 | get_user(udata, &p32->data) || | ||
| 765 | put_user(compat_ptr(udata), &p->data)) | ||
| 766 | return -EFAULT; | ||
| 767 | return sys_ioctl(fd, USBDEVFS_CONTROL, (unsigned long)p); | ||
| 768 | } | ||
| 769 | |||
| 770 | |||
| 771 | struct usbdevfs_bulktransfer32 { | ||
| 772 | compat_uint_t ep; | ||
| 773 | compat_uint_t len; | ||
| 774 | compat_uint_t timeout; /* in milliseconds */ | ||
| 775 | compat_caddr_t data; | ||
| 776 | }; | ||
| 777 | |||
| 778 | #define USBDEVFS_BULK32 _IOWR('U', 2, struct usbdevfs_bulktransfer32) | ||
| 779 | |||
| 780 | static int do_usbdevfs_bulk(unsigned int fd, unsigned int cmd, | ||
| 781 | struct usbdevfs_bulktransfer32 __user *p32) | ||
| 782 | { | ||
| 783 | struct usbdevfs_bulktransfer __user *p; | ||
| 784 | compat_uint_t n; | ||
| 785 | compat_caddr_t addr; | ||
| 786 | |||
| 787 | p = compat_alloc_user_space(sizeof(*p)); | ||
| 788 | |||
| 789 | if (get_user(n, &p32->ep) || put_user(n, &p->ep) || | ||
| 790 | get_user(n, &p32->len) || put_user(n, &p->len) || | ||
| 791 | get_user(n, &p32->timeout) || put_user(n, &p->timeout) || | ||
| 792 | get_user(addr, &p32->data) || put_user(compat_ptr(addr), &p->data)) | ||
| 793 | return -EFAULT; | ||
| 794 | |||
| 795 | return sys_ioctl(fd, USBDEVFS_BULK, (unsigned long)p); | ||
| 796 | } | ||
| 797 | |||
| 798 | |||
| 799 | /* | ||
| 800 | * USBDEVFS_SUBMITURB, USBDEVFS_REAPURB and USBDEVFS_REAPURBNDELAY | ||
| 801 | * are handled in usbdevfs core. -Christopher Li | ||
| 802 | */ | ||
| 803 | |||
| 804 | struct usbdevfs_disconnectsignal32 { | ||
| 805 | compat_int_t signr; | ||
| 806 | compat_caddr_t context; | ||
| 807 | }; | ||
| 808 | |||
| 809 | #define USBDEVFS_DISCSIGNAL32 _IOR('U', 14, struct usbdevfs_disconnectsignal32) | ||
| 810 | |||
| 811 | static int do_usbdevfs_discsignal(unsigned int fd, unsigned int cmd, | ||
| 812 | struct usbdevfs_disconnectsignal32 __user *udis) | ||
| 813 | { | ||
| 814 | struct usbdevfs_disconnectsignal kdis; | ||
| 815 | mm_segment_t old_fs; | ||
| 816 | u32 uctx; | ||
| 817 | int err; | ||
| 818 | |||
| 819 | if (get_user(kdis.signr, &udis->signr) || | ||
| 820 | __get_user(uctx, &udis->context)) | ||
| 821 | return -EFAULT; | ||
| 822 | |||
| 823 | kdis.context = compat_ptr(uctx); | ||
| 824 | |||
| 825 | old_fs = get_fs(); | ||
| 826 | set_fs(KERNEL_DS); | ||
| 827 | err = sys_ioctl(fd, USBDEVFS_DISCSIGNAL, (unsigned long) &kdis); | ||
| 828 | set_fs(old_fs); | ||
| 829 | |||
| 830 | return err; | ||
| 831 | } | ||
| 832 | |||
| 833 | /* | 745 | /* |
| 834 | * I2C layer ioctls | 746 | * I2C layer ioctls |
| 835 | */ | 747 | */ |
| @@ -1471,21 +1383,6 @@ COMPATIBLE_IOCTL(PCIIOC_CONTROLLER) | |||
| 1471 | COMPATIBLE_IOCTL(PCIIOC_MMAP_IS_IO) | 1383 | COMPATIBLE_IOCTL(PCIIOC_MMAP_IS_IO) |
| 1472 | COMPATIBLE_IOCTL(PCIIOC_MMAP_IS_MEM) | 1384 | COMPATIBLE_IOCTL(PCIIOC_MMAP_IS_MEM) |
| 1473 | COMPATIBLE_IOCTL(PCIIOC_WRITE_COMBINE) | 1385 | COMPATIBLE_IOCTL(PCIIOC_WRITE_COMBINE) |
| 1474 | /* USB */ | ||
| 1475 | COMPATIBLE_IOCTL(USBDEVFS_RESETEP) | ||
| 1476 | COMPATIBLE_IOCTL(USBDEVFS_SETINTERFACE) | ||
| 1477 | COMPATIBLE_IOCTL(USBDEVFS_SETCONFIGURATION) | ||
| 1478 | COMPATIBLE_IOCTL(USBDEVFS_GETDRIVER) | ||
| 1479 | COMPATIBLE_IOCTL(USBDEVFS_DISCARDURB) | ||
| 1480 | COMPATIBLE_IOCTL(USBDEVFS_CLAIMINTERFACE) | ||
| 1481 | COMPATIBLE_IOCTL(USBDEVFS_RELEASEINTERFACE) | ||
| 1482 | COMPATIBLE_IOCTL(USBDEVFS_CONNECTINFO) | ||
| 1483 | COMPATIBLE_IOCTL(USBDEVFS_HUB_PORTINFO) | ||
| 1484 | COMPATIBLE_IOCTL(USBDEVFS_RESET) | ||
| 1485 | COMPATIBLE_IOCTL(USBDEVFS_SUBMITURB32) | ||
| 1486 | COMPATIBLE_IOCTL(USBDEVFS_REAPURB32) | ||
| 1487 | COMPATIBLE_IOCTL(USBDEVFS_REAPURBNDELAY32) | ||
| 1488 | COMPATIBLE_IOCTL(USBDEVFS_CLEAR_HALT) | ||
| 1489 | /* NBD */ | 1386 | /* NBD */ |
| 1490 | COMPATIBLE_IOCTL(NBD_DO_IT) | 1387 | COMPATIBLE_IOCTL(NBD_DO_IT) |
| 1491 | COMPATIBLE_IOCTL(NBD_CLEAR_SOCK) | 1388 | COMPATIBLE_IOCTL(NBD_CLEAR_SOCK) |
| @@ -1604,8 +1501,6 @@ COMPATIBLE_IOCTL(TIOCSLTC) | |||
| 1604 | COMPATIBLE_IOCTL(TIOCSTART) | 1501 | COMPATIBLE_IOCTL(TIOCSTART) |
| 1605 | COMPATIBLE_IOCTL(TIOCSTOP) | 1502 | COMPATIBLE_IOCTL(TIOCSTOP) |
| 1606 | #endif | 1503 | #endif |
| 1607 | /* Usbdevfs */ | ||
| 1608 | COMPATIBLE_IOCTL(USBDEVFS_IOCTL32) | ||
| 1609 | 1504 | ||
| 1610 | /* fat 'r' ioctls. These are handled by fat with ->compat_ioctl, | 1505 | /* fat 'r' ioctls. These are handled by fat with ->compat_ioctl, |
| 1611 | but we don't want warnings on other file systems. So declare | 1506 | but we don't want warnings on other file systems. So declare |
| @@ -1677,13 +1572,6 @@ static long do_ioctl_trans(int fd, unsigned int cmd, | |||
| 1677 | case TIOCGSERIAL: | 1572 | case TIOCGSERIAL: |
| 1678 | case TIOCSSERIAL: | 1573 | case TIOCSSERIAL: |
| 1679 | return serial_struct_ioctl(fd, cmd, argp); | 1574 | return serial_struct_ioctl(fd, cmd, argp); |
| 1680 | /* Usbdevfs */ | ||
| 1681 | case USBDEVFS_CONTROL32: | ||
| 1682 | return do_usbdevfs_control(fd, cmd, argp); | ||
| 1683 | case USBDEVFS_BULK32: | ||
| 1684 | return do_usbdevfs_bulk(fd, cmd, argp); | ||
| 1685 | case USBDEVFS_DISCSIGNAL32: | ||
| 1686 | return do_usbdevfs_discsignal(fd, cmd, argp); | ||
| 1687 | /* i2c */ | 1575 | /* i2c */ |
| 1688 | case I2C_FUNCS: | 1576 | case I2C_FUNCS: |
| 1689 | return w_long(fd, cmd, argp); | 1577 | return w_long(fd, cmd, argp); |
diff --git a/include/linux/usbdevice_fs.h b/include/linux/usbdevice_fs.h index b2a7d8ba6ee3..15591d2ea400 100644 --- a/include/linux/usbdevice_fs.h +++ b/include/linux/usbdevice_fs.h | |||
| @@ -128,6 +128,29 @@ struct usbdevfs_hub_portinfo { | |||
| 128 | #ifdef __KERNEL__ | 128 | #ifdef __KERNEL__ |
| 129 | #ifdef CONFIG_COMPAT | 129 | #ifdef CONFIG_COMPAT |
| 130 | #include <linux/compat.h> | 130 | #include <linux/compat.h> |
| 131 | |||
| 132 | struct usbdevfs_ctrltransfer32 { | ||
| 133 | u8 bRequestType; | ||
| 134 | u8 bRequest; | ||
| 135 | u16 wValue; | ||
| 136 | u16 wIndex; | ||
| 137 | u16 wLength; | ||
| 138 | u32 timeout; /* in milliseconds */ | ||
| 139 | compat_caddr_t data; | ||
| 140 | }; | ||
| 141 | |||
| 142 | struct usbdevfs_bulktransfer32 { | ||
| 143 | compat_uint_t ep; | ||
| 144 | compat_uint_t len; | ||
| 145 | compat_uint_t timeout; /* in milliseconds */ | ||
| 146 | compat_caddr_t data; | ||
| 147 | }; | ||
| 148 | |||
| 149 | struct usbdevfs_disconnectsignal32 { | ||
| 150 | compat_int_t signr; | ||
| 151 | compat_caddr_t context; | ||
| 152 | }; | ||
| 153 | |||
| 131 | struct usbdevfs_urb32 { | 154 | struct usbdevfs_urb32 { |
| 132 | unsigned char type; | 155 | unsigned char type; |
| 133 | unsigned char endpoint; | 156 | unsigned char endpoint; |
| @@ -153,7 +176,9 @@ struct usbdevfs_ioctl32 { | |||
| 153 | #endif /* __KERNEL__ */ | 176 | #endif /* __KERNEL__ */ |
| 154 | 177 | ||
| 155 | #define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer) | 178 | #define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer) |
| 179 | #define USBDEVFS_CONTROL32 _IOWR('U', 0, struct usbdevfs_ctrltransfer32) | ||
| 156 | #define USBDEVFS_BULK _IOWR('U', 2, struct usbdevfs_bulktransfer) | 180 | #define USBDEVFS_BULK _IOWR('U', 2, struct usbdevfs_bulktransfer) |
| 181 | #define USBDEVFS_BULK32 _IOWR('U', 2, struct usbdevfs_bulktransfer32) | ||
| 157 | #define USBDEVFS_RESETEP _IOR('U', 3, unsigned int) | 182 | #define USBDEVFS_RESETEP _IOR('U', 3, unsigned int) |
| 158 | #define USBDEVFS_SETINTERFACE _IOR('U', 4, struct usbdevfs_setinterface) | 183 | #define USBDEVFS_SETINTERFACE _IOR('U', 4, struct usbdevfs_setinterface) |
| 159 | #define USBDEVFS_SETCONFIGURATION _IOR('U', 5, unsigned int) | 184 | #define USBDEVFS_SETCONFIGURATION _IOR('U', 5, unsigned int) |
| @@ -166,6 +191,7 @@ struct usbdevfs_ioctl32 { | |||
| 166 | #define USBDEVFS_REAPURBNDELAY _IOW('U', 13, void *) | 191 | #define USBDEVFS_REAPURBNDELAY _IOW('U', 13, void *) |
| 167 | #define USBDEVFS_REAPURBNDELAY32 _IOW('U', 13, __u32) | 192 | #define USBDEVFS_REAPURBNDELAY32 _IOW('U', 13, __u32) |
| 168 | #define USBDEVFS_DISCSIGNAL _IOR('U', 14, struct usbdevfs_disconnectsignal) | 193 | #define USBDEVFS_DISCSIGNAL _IOR('U', 14, struct usbdevfs_disconnectsignal) |
| 194 | #define USBDEVFS_DISCSIGNAL32 _IOR('U', 14, struct usbdevfs_disconnectsignal32) | ||
| 169 | #define USBDEVFS_CLAIMINTERFACE _IOR('U', 15, unsigned int) | 195 | #define USBDEVFS_CLAIMINTERFACE _IOR('U', 15, unsigned int) |
| 170 | #define USBDEVFS_RELEASEINTERFACE _IOR('U', 16, unsigned int) | 196 | #define USBDEVFS_RELEASEINTERFACE _IOR('U', 16, unsigned int) |
| 171 | #define USBDEVFS_CONNECTINFO _IOW('U', 17, struct usbdevfs_connectinfo) | 197 | #define USBDEVFS_CONNECTINFO _IOW('U', 17, struct usbdevfs_connectinfo) |
