cmd_part.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*
  2. * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
  3. *
  4. * made from cmd_ext2, which was:
  5. *
  6. * (C) Copyright 2004
  7. * esd gmbh <www.esd-electronics.com>
  8. * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
  9. *
  10. * made from cmd_reiserfs by
  11. *
  12. * (C) Copyright 2003 - 2004
  13. * Sysgo Real-Time Solutions, AG <www.elinos.com>
  14. * Pavel Bartusek <pba@sysgo.com>
  15. *
  16. * SPDX-License-Identifier: GPL-2.0+
  17. */
  18. #include <common.h>
  19. #include <config.h>
  20. #include <command.h>
  21. #include <part.h>
  22. #include <vsprintf.h>
  23. #ifndef CONFIG_PARTITION_UUIDS
  24. #error CONFIG_PARTITION_UUIDS must be enabled for CONFIG_CMD_PART to be enabled
  25. #endif
  26. static int do_part_uuid(int argc, char * const argv[])
  27. {
  28. int part;
  29. block_dev_desc_t *dev_desc;
  30. disk_partition_t info;
  31. if (argc < 2)
  32. return CMD_RET_USAGE;
  33. if (argc > 3)
  34. return CMD_RET_USAGE;
  35. part = get_device_and_partition(argv[0], argv[1], &dev_desc, &info, 0);
  36. if (part < 0)
  37. return 1;
  38. if (argc > 2)
  39. setenv(argv[2], info.uuid);
  40. else
  41. printf("%s\n", info.uuid);
  42. return 0;
  43. }
  44. static int do_part_list(int argc, char * const argv[])
  45. {
  46. int ret;
  47. block_dev_desc_t *desc;
  48. if (argc != 2)
  49. return CMD_RET_USAGE;
  50. ret = get_device(argv[0], argv[1], &desc);
  51. if (ret < 0)
  52. return 1;
  53. print_part(desc);
  54. return 0;
  55. }
  56. static int do_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  57. {
  58. if (argc < 2)
  59. return CMD_RET_USAGE;
  60. if (!strcmp(argv[1], "uuid"))
  61. return do_part_uuid(argc - 2, argv + 2);
  62. else if (!strcmp(argv[1], "list"))
  63. return do_part_list(argc - 2, argv + 2);
  64. return CMD_RET_USAGE;
  65. }
  66. U_BOOT_CMD(
  67. part, 5, 1, do_part,
  68. "disk partition related commands",
  69. "part uuid <interface> <dev>:<part>\n"
  70. " - print partition UUID\n"
  71. "part uuid <interface> <dev>:<part> <varname>\n"
  72. " - set environment variable to partition UUID\n"
  73. "part list <interface> <dev>\n"
  74. " - print a device's partition table"
  75. );