]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - common/cmd_usb_mass_storage.c
Merge branch 'master' of git://www.denx.de/git/u-boot-usb
[karo-tx-uboot.git] / common / cmd_usb_mass_storage.c
1 /*
2  * Copyright (C) 2011 Samsung Electronics
3  * Lukasz Majewski <l.majewski@samsung.com>
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #include <errno.h>
9 #include <common.h>
10 #include <command.h>
11 #include <g_dnl.h>
12 #include <usb.h>
13 #include <usb_mass_storage.h>
14
15 int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
16                                int argc, char * const argv[])
17 {
18         if (argc < 3)
19                 return CMD_RET_USAGE;
20
21         const char *usb_controller = argv[1];
22         const char *mmc_devstring  = argv[2];
23
24         unsigned int dev_num = simple_strtoul(mmc_devstring, NULL, 0);
25
26         struct ums *ums = ums_init(dev_num);
27         if (!ums)
28                 return CMD_RET_FAILURE;
29
30         unsigned int controller_index = (unsigned int)(simple_strtoul(
31                                         usb_controller, NULL, 0));
32         if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
33                 error("Couldn't init USB controller.");
34                 return CMD_RET_FAILURE;
35         }
36
37         int rc = fsg_init(ums);
38         if (rc) {
39                 error("fsg_init failed");
40                 return CMD_RET_FAILURE;
41         }
42
43         g_dnl_register("ums");
44
45         while (1) {
46                 usb_gadget_handle_interrupts();
47
48                 rc = fsg_main_thread(NULL);
49                 if (rc) {
50                         /* Check I/O error */
51                         if (rc == -EIO)
52                                 printf("\rCheck USB cable connection\n");
53
54                         /* Check CTRL+C */
55                         if (rc == -EPIPE)
56                                 printf("\rCTRL+C - Operation aborted\n");
57
58                         goto exit;
59                 }
60         }
61 exit:
62         g_dnl_unregister();
63         return CMD_RET_SUCCESS;
64 }
65
66 U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
67         "Use the UMS [User Mass Storage]",
68         "ums <USB_controller> <mmc_dev>  e.g. ums 0 0"
69 );