This allows userspace to use bulk-streams, just like in kernel drivers, see Documentation/usb/bulk-streams.txt for details on the in kernel API. This is exported pretty much one on one to userspace. To use streams an app must first make a USBDEVFS_ALLOC_STREAMS ioctl, on success this will return the number of streams available (which may be less then requested). If there are n streams the app can then submit usbdevfs_urb-s with their stream_id member set to 1-n to use a specific stream. IE if USBDEVFS_ALLOC_STREAMS returns 4 then stream_id 1-4 can be used. When the app is done using streams it should call USBDEVFS_FREE_STREAMS Note applications are advised to use libusb rather then using the usbdevfs api directly. The latest version of libusb has support for streams.
Showing the changes to include/uapi/linux (1 of 2 files). Show all
Unified · Split
| @@ -147,6 +147,11 @@ struct usbdevfs_disconnect_claim { · 146 unmodified lines | |||
| 147 | char driver[USBDEVFS_MAXDRIVERNAME + 1]; | 147 | char driver[USBDEVFS_MAXDRIVERNAME + 1]; |
| 148 | }; | 148 | }; |
| 149 | 149 | ||
| 150 | struct usbdevfs_streams { | ||
| 151 | unsigned int num_streams; /* Not used by USBDEVFS_FREE_STREAMS */ | ||
| 152 | unsigned int num_eps; | ||
| 153 | unsigned char eps[0]; | ||
| 154 | }; | ||
| 150 | 155 | ||
| 151 | #define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer) | 156 | #define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer) |
| 152 | #define USBDEVFS_CONTROL32 _IOWR('U', 0, struct usbdevfs_ctrltransfer32) | 157 | #define USBDEVFS_CONTROL32 _IOWR('U', 0, struct usbdevfs_ctrltransfer32) |
| @@ -179,5 +184,7 @@ struct usbdevfs_disconnect_claim { · 26 unmodified lines | |||
| 179 | #define USBDEVFS_RELEASE_PORT _IOR('U', 25, unsigned int) | 184 | #define USBDEVFS_RELEASE_PORT _IOR('U', 25, unsigned int) |
| 180 | #define USBDEVFS_GET_CAPABILITIES _IOR('U', 26, __u32) | 185 | #define USBDEVFS_GET_CAPABILITIES _IOR('U', 26, __u32) |
| 181 | #define USBDEVFS_DISCONNECT_CLAIM _IOR('U', 27, struct usbdevfs_disconnect_claim) | 186 | #define USBDEVFS_DISCONNECT_CLAIM _IOR('U', 27, struct usbdevfs_disconnect_claim) |
| 187 | #define USBDEVFS_ALLOC_STREAMS _IOR('U', 28, struct usbdevfs_streams) | ||
| 188 | #define USBDEVFS_FREE_STREAMS _IOR('U', 29, struct usbdevfs_streams) | ||
| 182 | 189 | ||
| 183 | #endif /* _UAPI_LINUX_USBDEVICE_FS_H */ | 190 | #endif /* _UAPI_LINUX_USBDEVICE_FS_H */ |