diff options
author | Ahmad Fatoum <a.fatoum@pengutronix.de> | 2021-06-22 10:26:17 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-06-25 09:31:03 +0200 |
commit | 57313f83e83e1fac87c1a9088175f12ebd3577a0 (patch) | |
tree | 482524b18f1763b804cc039fd433420f85ce2264 /commands | |
parent | a62e5d2f3350bffb7be52397066f9900e1908348 (diff) | |
download | barebox-57313f83e83e1fac87c1a9088175f12ebd3577a0.tar.gz barebox-57313f83e83e1fac87c1a9088175f12ebd3577a0.tar.xz |
usbgadget: add support for USB mass storage gadget
This driver is based on the f_mass_storage drivers in Linux v5.11 and
U-Boot v2021.01.
Unlike the U-Boot version, it runs asynchronously without blocking the
bootloader from doing other tasks, like exporting other USB gadgets at
the same time or enabling shell access.
With pollers and workqueues, enabling this would need a large rework
of the code to be completely callback based, whenever the original
Linux code sleeps waiting for events. With the new bthread support,
we can actually sleep and handover control to other bthreads until
there is actual work to do.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Link: https://lore.barebox.org/20210622082617.18011-9-a.fatoum@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'commands')
-rw-r--r-- | commands/usbgadget.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/commands/usbgadget.c b/commands/usbgadget.c index 07094026db..290f33eff3 100644 --- a/commands/usbgadget.c +++ b/commands/usbgadget.c @@ -21,7 +21,7 @@ static int do_usbgadget(int argc, char *argv[]) struct usbgadget_funcs funcs = {}; int opt; - while ((opt = getopt(argc, argv, "asdA::D::b")) > 0) { + while ((opt = getopt(argc, argv, "asdA::D::S::b")) > 0) { switch (opt) { case 'a': case 's': @@ -35,6 +35,10 @@ static int do_usbgadget(int argc, char *argv[]) funcs.flags |= USBGADGET_FASTBOOT; funcs.fastboot_opts = optarg; break; + case 'S': + funcs.flags |= USBGADGET_MASS_STORAGE; + funcs.ums_opts = optarg; + break; case 'b': funcs.flags |= USBGADGET_EXPORT_BBU; break; @@ -60,13 +64,15 @@ BAREBOX_CMD_HELP_OPT ("-A <desc>", "Create Android Fastboot function. If 'desc' BAREBOX_CMD_HELP_OPT ("-b\t", "include registered barebox update handlers (fastboot specific)") BAREBOX_CMD_HELP_OPT ("-D <desc>", "Create DFU function. If 'desc' is not provided, " "try to use 'global.usbgadget.dfu_function' variable.") +BAREBOX_CMD_HELP_OPT ("-S <desc>", "Create USB Mass Storage function. If 'desc' is not provided," + "fallback directly to 'global.system.partitions' variable.") BAREBOX_CMD_HELP_OPT ("-d\t", "Disable the currently running gadget") BAREBOX_CMD_HELP_END BAREBOX_CMD_START(usbgadget) .cmd = do_usbgadget, BAREBOX_CMD_DESC("Create USB Gadget multifunction device") - BAREBOX_CMD_OPTS("[-adAD]") + BAREBOX_CMD_OPTS("[-adADS]") BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP) BAREBOX_CMD_HELP(cmd_usbgadget_help) BAREBOX_CMD_END |