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 | 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 | 156 | #define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer) |
| 152 | 157 | #define USBDEVFS_CONTROL32 _IOWR('U', 0, struct usbdevfs_ctrltransfer32) |
| @@ -179,5 +184,7 @@ struct usbdevfs_disconnect_claim { · 26 unmodified lines | ||
| 179 | 184 | #define USBDEVFS_RELEASE_PORT _IOR('U', 25, unsigned int) |
| 180 | 185 | #define USBDEVFS_GET_CAPABILITIES _IOR('U', 26, __u32) |
| 181 | 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 | 190 | #endif /* _UAPI_LINUX_USBDEVICE_FS_H */ |