lsblk.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2020
  4. * Niel Fourie, DENX Software Engineering, lusus@denx.de.
  5. */
  6. #include <common.h>
  7. #include <blk.h>
  8. #include <command.h>
  9. #include <dm.h>
  10. static int do_lsblk(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
  11. {
  12. struct driver *d = ll_entry_start(struct driver, driver);
  13. const int n_ents = ll_entry_count(struct driver, driver);
  14. struct driver *entry;
  15. struct udevice *udev;
  16. struct uclass *uc;
  17. struct blk_desc *desc;
  18. int ret, i;
  19. ret = uclass_get(UCLASS_BLK, &uc);
  20. if (ret) {
  21. puts("Could not get BLK uclass.\n");
  22. return CMD_RET_FAILURE;
  23. }
  24. puts("Block Driver Devices\n");
  25. puts("-----------------------------\n");
  26. for (entry = d; entry < d + n_ents; entry++) {
  27. if (entry->id != UCLASS_BLK)
  28. continue;
  29. i = 0;
  30. printf("%-20.20s", entry->name);
  31. uclass_foreach_dev(udev, uc) {
  32. if (udev->driver != entry)
  33. continue;
  34. desc = dev_get_uclass_plat(udev);
  35. printf("%c %s %u", i ? ',' : ':',
  36. blk_get_if_type_name(desc->if_type),
  37. desc->devnum);
  38. i++;
  39. }
  40. if (!i)
  41. puts(": <none>");
  42. puts("\n");
  43. }
  44. return CMD_RET_SUCCESS;
  45. }
  46. U_BOOT_CMD(lsblk, 1, 0, do_lsblk, "list block drivers and devices",
  47. "- display list of block device drivers and attached block devices"
  48. );