USB: add usbfs ioctl to retrieve the connection speed
The usbfs interface does not provide any way for the user to learn the speed at which a device is connected. The current API includes a USBDEVFS_CONNECTINFO ioctl, but all it provides is the device's address and a one-bit value indicating whether the connection is low speed. That may have sufficed in the era of USB-1.1, but it isn't good enough today. This patch introduces a new ioctl, USBDEVFS_GET_SPEED, which returns a numeric value indicating the speed of the connection: unknown, low, full, high, wireless, super, or super-plus. Similar information (not exactly the same) is available through sysfs, but it seems reasonable to provide the actual value in usbfs. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Reported-by: Reinhard Huck <reinhard.huck@thesycon.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
81606aea23
commit
c01b244ad8
2 changed files with 9 additions and 0 deletions
|
@ -2537,6 +2537,9 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd,
|
|||
case USBDEVFS_DROP_PRIVILEGES:
|
||||
ret = proc_drop_privileges(ps, p);
|
||||
break;
|
||||
case USBDEVFS_GET_SPEED:
|
||||
ret = ps->dev->speed;
|
||||
break;
|
||||
}
|
||||
|
||||
done:
|
||||
|
|
|
@ -156,6 +156,11 @@ struct usbdevfs_streams {
|
|||
unsigned char eps[0];
|
||||
};
|
||||
|
||||
/*
|
||||
* USB_SPEED_* values returned by USBDEVFS_GET_SPEED are defined in
|
||||
* linux/usb/ch9.h
|
||||
*/
|
||||
|
||||
#define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer)
|
||||
#define USBDEVFS_CONTROL32 _IOWR('U', 0, struct usbdevfs_ctrltransfer32)
|
||||
#define USBDEVFS_BULK _IOWR('U', 2, struct usbdevfs_bulktransfer)
|
||||
|
@ -190,5 +195,6 @@ struct usbdevfs_streams {
|
|||
#define USBDEVFS_ALLOC_STREAMS _IOR('U', 28, struct usbdevfs_streams)
|
||||
#define USBDEVFS_FREE_STREAMS _IOR('U', 29, struct usbdevfs_streams)
|
||||
#define USBDEVFS_DROP_PRIVILEGES _IOW('U', 30, __u32)
|
||||
#define USBDEVFS_GET_SPEED _IO('U', 31)
|
||||
|
||||
#endif /* _UAPI_LINUX_USBDEVICE_FS_H */
|
||||
|
|
Loading…
Reference in a new issue