[RFC PATCH 0/4] rust: usb: add usb request block abstractions and a user
From: Colin Braun
Date: Sun Jul 12 2026 - 17:09:21 EST
This series introduces initial abstractions to allow for the
implementation of USB drivers in Rust.
This is an RFC to demonstrate a rough idea on how the USB abstractions
needed to create drivers in Rust could be implemented.
The series is broken up into 4 parts:
1. USB chapter 9 standard descriptors and constants - Exposes the
necessary structs and constants from include/uapi/linux/usb/ch9.h as
a new ch9 submodule.
2. Interface and endpoint abstractions - Wraps the relevant C structs
and functions defined in include/linux/usb.h, allowing drivers to
safely query and configure interfaces and their endpoints.
3. USB Request Block (URB) abstractions - Creates a safe wrapper around
the C `struct urb` to allow Rust drivers to communicate with devices.
4. An initial user of the new abstractions - A driver for the GV-USB2
composite-usb video capture device.
Patch 3 is the bulk and core of this series. By their asynchronous
nature, creating a safe URB abstraction for drivers to use is tricky.
The goals of the URB abstraction are:
1. No `unsafe` needed in driver code. This means providing a way for a
driver to safely access private data sent with the URB.
2. Drivers are forced to handle the URB status in their completion
callback before accessing the URB data.
3. Dropping an URB ensures it is not in-flight and frees its resources.
4. The URB can be safely resubmitted from the completion callback.
The patch elaborates on how these goals are achieved in more detail.
Although the URB abstractions do not include immediate support for bulk
or interrupt URBs, I believe it creates a foundation conducive to
future, safe abstractions for them.
Patch 4 is first user of these USB abstractions. The initial
implementation is very much bare-bones, only exposing audio data via
debugfs. It is based on the in-tree STK1160 driver and an old,
out-of-tree driver written by Isaac Lozano [1].
[1] https://github.com/Isaac-Lozano/GV-USB2-Driver
Signed-off-by: Colin Braun <colin.braun.cl@xxxxxxxxx>
---
Colin Braun (4):
rust: usb: add USB ch9 standard descriptors and constants
rust: usb: add usb host interface and endpoint abstractions
rust: usb: add urb abstraction with control and isochronous support
media: add gv-usb2 audio capture driver
drivers/media/usb/Kconfig | 1 +
drivers/media/usb/Makefile | 1 +
drivers/media/usb/gv-usb2/Kconfig | 9 +
drivers/media/usb/gv-usb2/Makefile | 1 +
drivers/media/usb/gv-usb2/driver.rs | 361 ++++++++++++++
drivers/media/usb/gv-usb2/gv_usb2.rs | 16 +
drivers/media/usb/gv-usb2/regs.rs | 25 +
include/linux/usb.h | 4 +
rust/kernel/usb.rs | 905 ++++++++++++++++++++++++++++++++++-
rust/kernel/usb/ch9.rs | 295 ++++++++++++
10 files changed, 1613 insertions(+), 5 deletions(-)
---
base-commit: 30e873dd61b044092dbc657c7c67a5d19adfd933
change-id: 20260712-urb-abstraction-v1-020a67f16cff
Best regards,
--
Colin Braun <colin.braun.cl@xxxxxxxxx>