-
-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge "Merge android-4.19-stable.113 (2b82910) into msm-4.19"
- Loading branch information
Showing
227 changed files
with
69,772 additions
and
67,408 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
============== | ||
USB Raw Gadget | ||
============== | ||
|
||
USB Raw Gadget is a kernel module that provides a userspace interface for | ||
the USB Gadget subsystem. Essentially it allows to emulate USB devices | ||
from userspace. Enabled with CONFIG_USB_RAW_GADGET. Raw Gadget is | ||
currently a strictly debugging feature and shouldn't be used in | ||
production, use GadgetFS instead. | ||
|
||
Comparison to GadgetFS | ||
~~~~~~~~~~~~~~~~~~~~~~ | ||
|
||
Raw Gadget is similar to GadgetFS, but provides a more low-level and | ||
direct access to the USB Gadget layer for the userspace. The key | ||
differences are: | ||
|
||
1. Every USB request is passed to the userspace to get a response, while | ||
GadgetFS responds to some USB requests internally based on the provided | ||
descriptors. However note, that the UDC driver might respond to some | ||
requests on its own and never forward them to the Gadget layer. | ||
|
||
2. GadgetFS performs some sanity checks on the provided USB descriptors, | ||
while Raw Gadget allows you to provide arbitrary data as responses to | ||
USB requests. | ||
|
||
3. Raw Gadget provides a way to select a UDC device/driver to bind to, | ||
while GadgetFS currently binds to the first available UDC. | ||
|
||
4. Raw Gadget uses predictable endpoint names (handles) across different | ||
UDCs (as long as UDCs have enough endpoints of each required transfer | ||
type). | ||
|
||
5. Raw Gadget has ioctl-based interface instead of a filesystem-based one. | ||
|
||
Userspace interface | ||
~~~~~~~~~~~~~~~~~~~ | ||
|
||
To create a Raw Gadget instance open /dev/raw-gadget. Multiple raw-gadget | ||
instances (bound to different UDCs) can be used at the same time. The | ||
interaction with the opened file happens through the ioctl() calls, see | ||
comments in include/uapi/linux/usb/raw_gadget.h for details. | ||
|
||
The typical usage of Raw Gadget looks like: | ||
|
||
1. Open Raw Gadget instance via /dev/raw-gadget. | ||
2. Initialize the instance via USB_RAW_IOCTL_INIT. | ||
3. Launch the instance with USB_RAW_IOCTL_RUN. | ||
4. In a loop issue USB_RAW_IOCTL_EVENT_FETCH calls to receive events from | ||
Raw Gadget and react to those depending on what kind of USB device | ||
needs to be emulated. | ||
|
||
Potential future improvements | ||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
||
- Implement ioctl's for setting/clearing halt status on endpoints. | ||
|
||
- Reporting more events (suspend, resume, etc.) through | ||
USB_RAW_IOCTL_EVENT_FETCH. | ||
|
||
- Support O_NONBLOCK I/O. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.