[PATCH v4 7/8] usbgadget: refactor usbgadget_register to accept array
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
Date: 2021-06-22 08:28:28
Subsystem:
the rest · Maintainer:
Linus Torvalds
usbgadget_register currently takes 6 arguments. Instead of increasing them to 8 to support the new usb mass storage gadget, rewrite it to accept a pointer to a struct with all the options instead. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- commands/usbgadget.c | 19 +++++++++---------- common/usbgadget.c | 28 +++++++++++++++++----------- include/usb/gadget-multi.h | 17 +++++++++++++---- 3 files changed, 39 insertions(+), 25 deletions(-)
diff --git a/commands/usbgadget.c b/commands/usbgadget.c
index 3b115f147d80..07094026db71 100644
--- a/commands/usbgadget.c
+++ b/commands/usbgadget.c@@ -18,26 +18,25 @@ static int do_usbgadget(int argc, char *argv[]) { + struct usbgadget_funcs funcs = {}; int opt; - bool acm = false, dfu = false, fastboot = false, export_bbu = false; - const char *fastboot_opts = NULL, *dfu_opts = NULL; while ((opt = getopt(argc, argv, "asdA::D::b")) > 0) { switch (opt) { case 'a': case 's': - acm = true; + funcs.flags |= USBGADGET_ACM; break; case 'D': - dfu = true; - dfu_opts = optarg; + funcs.flags |= USBGADGET_DFU; + funcs.dfu_opts = optarg; break; case 'A': - fastboot = true; - fastboot_opts = optarg; + funcs.flags |= USBGADGET_FASTBOOT; + funcs.fastboot_opts = optarg; break; case 'b': - export_bbu = true; + funcs.flags |= USBGADGET_EXPORT_BBU; break; case 'd': usb_multi_unregister();
@@ -47,8 +46,8 @@ static int do_usbgadget(int argc, char *argv[]) } } - return usbgadget_register(dfu, dfu_opts, fastboot, fastboot_opts, acm, - export_bbu); + + return usbgadget_register(&funcs); } BAREBOX_CMD_HELP_START(usbgadget)
diff --git a/common/usbgadget.c b/common/usbgadget.c
index d4437b51694a..9bbaa4ea1238 100644
--- a/common/usbgadget.c
+++ b/common/usbgadget.c@@ -48,36 +48,35 @@ static inline struct file_list *get_dfu_function(void) return NULL; } -int usbgadget_register(bool dfu, const char *dfu_opts, - bool fastboot, const char *fastboot_opts, - bool acm, bool export_bbu) +int usbgadget_register(const struct usbgadget_funcs *funcs) { int ret; + int flags = funcs->flags; struct device_d *dev; struct f_multi_opts *opts; opts = xzalloc(sizeof(*opts)); opts->release = usb_multi_opts_release; - if (dfu) { - opts->dfu_opts.files = parse(dfu_opts); + if (flags & USBGADGET_DFU) { + opts->dfu_opts.files = parse(funcs->dfu_opts); if (IS_ENABLED(CONFIG_USB_GADGET_DFU) && file_list_empty(opts->dfu_opts.files)) { file_list_free(opts->dfu_opts.files); opts->dfu_opts.files = get_dfu_function(); } } - if (fastboot) { - opts->fastboot_opts.files = parse(fastboot_opts); + if (flags & USBGADGET_FASTBOOT) { + opts->fastboot_opts.files = parse(funcs->fastboot_opts); if (IS_ENABLED(CONFIG_FASTBOOT_BASE) && file_list_empty(opts->fastboot_opts.files)) { file_list_free(opts->fastboot_opts.files); opts->fastboot_opts.files = get_fastboot_partitions(); } - opts->fastboot_opts.export_bbu = export_bbu; + opts->fastboot_opts.export_bbu = flags & USBGADGET_EXPORT_BBU; } - opts->create_acm = acm; + opts->create_acm = flags & USBGADGET_ACM; if (usb_multi_count_functions(opts) == 0) { pr_warn("No functions to register\n");
@@ -111,14 +110,21 @@ err: static int usbgadget_autostart_set(struct param_d *param, void *ctx) { + struct usbgadget_funcs funcs = {}; static bool started; - bool fastboot_bbu = get_fastboot_bbu(); int err; if (!autostart || started) return 0; - err = usbgadget_register(true, NULL, true, NULL, acm, fastboot_bbu); + if (get_fastboot_bbu()) + funcs.flags |= USBGADGET_EXPORT_BBU; + if (acm) + funcs.flags |= USBGADGET_ACM; + + funcs.flags |= USBGADGET_DFU | USBGADGET_FASTBOOT; + + err = usbgadget_register(&funcs); if (!err) started = true;
diff --git a/include/usb/gadget-multi.h b/include/usb/gadget-multi.h
index f30dae5686ae..482aee11d047 100644
--- a/include/usb/gadget-multi.h
+++ b/include/usb/gadget-multi.h@@ -8,7 +8,7 @@ struct f_multi_opts { struct fastboot_opts fastboot_opts; struct f_dfu_opts dfu_opts; - int create_acm; + bool create_acm; void (*release)(struct f_multi_opts *opts); };
@@ -17,8 +17,17 @@ void usb_multi_unregister(void); void usb_multi_opts_release(struct f_multi_opts *opts); unsigned usb_multi_count_functions(struct f_multi_opts *opts); -int usbgadget_register(bool dfu, const char *dfu_opts, - bool fastboot, const char *fastboot_opts, - bool acm, bool export_bbu); +#define USBGADGET_EXPORT_BBU (1 << 0) +#define USBGADGET_ACM (1 << 1) +#define USBGADGET_DFU (1 << 2) +#define USBGADGET_FASTBOOT (1 << 3) + +struct usbgadget_funcs { + int flags; + const char *fastboot_opts; + const char *dfu_opts; +}; + +int usbgadget_register(const struct usbgadget_funcs *funcs); #endif /* __USB_GADGET_MULTI_H */
--
2.29.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox