cmd_usb_mass_storage.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * Copyright (C) 2011 Samsung Electronics
  3. * Lukasz Majewski <l.majewski@samsung.com>
  4. *
  5. * SPDX-License-Identifier: GPL-2.0+
  6. */
  7. #include <common.h>
  8. #include <command.h>
  9. #include <g_dnl.h>
  10. #include <usb_mass_storage.h>
  11. int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
  12. int argc, char * const argv[])
  13. {
  14. char *ep;
  15. unsigned int dev_num = 0, offset = 0, part_size = 0;
  16. int rc;
  17. struct ums_board_info *ums_info;
  18. static char *s = "ums";
  19. if (argc < 2) {
  20. printf("usage: ums <dev> - e.g. ums 0\n");
  21. return 0;
  22. }
  23. dev_num = (int)simple_strtoul(argv[1], &ep, 16);
  24. if (dev_num) {
  25. puts("\nSet eMMC device to 0! - e.g. ums 0\n");
  26. goto fail;
  27. }
  28. board_usb_init();
  29. ums_info = board_ums_init(dev_num, offset, part_size);
  30. if (!ums_info) {
  31. printf("MMC: %d -> NOT available\n", dev_num);
  32. goto fail;
  33. }
  34. rc = fsg_init(ums_info);
  35. if (rc) {
  36. printf("cmd ums: fsg_init failed\n");
  37. goto fail;
  38. }
  39. g_dnl_register(s);
  40. while (1) {
  41. /* Handle control-c and timeouts */
  42. if (ctrlc()) {
  43. printf("The remote end did not respond in time.\n");
  44. goto exit;
  45. }
  46. usb_gadget_handle_interrupts();
  47. /* Check if USB cable has been detached */
  48. if (fsg_main_thread(NULL) == EIO)
  49. goto exit;
  50. }
  51. exit:
  52. g_dnl_unregister();
  53. return 0;
  54. fail:
  55. return -1;
  56. }
  57. U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
  58. "Use the UMS [User Mass Storage]",
  59. "ums - User Mass Storage Gadget"
  60. );