mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 23:47:24 +00:00
e369790843
Add a command to print a list of available block device drivers, and for each, the list of known block devices. Signed-off-by: Niel Fourie <lusus@denx.de> Cc: Simon Glass <sjg@chromium.org> Cc: Stefan Roese <sr@denx.de> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Stefan Roese <sr@denx.de>
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* (C) Copyright 2020
|
|
* Niel Fourie, DENX Software Engineering, lusus@denx.de.
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <dm.h>
|
|
|
|
static int do_lsblk(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
|
|
{
|
|
struct driver *d = ll_entry_start(struct driver, driver);
|
|
const int n_ents = ll_entry_count(struct driver, driver);
|
|
struct driver *entry;
|
|
struct udevice *udev;
|
|
struct uclass *uc;
|
|
struct blk_desc *desc;
|
|
int ret, i;
|
|
|
|
ret = uclass_get(UCLASS_BLK, &uc);
|
|
if (ret) {
|
|
puts("Could not get BLK uclass.\n");
|
|
return CMD_RET_FAILURE;
|
|
}
|
|
puts("Block Driver Devices\n");
|
|
puts("-----------------------------\n");
|
|
for (entry = d; entry < d + n_ents; entry++) {
|
|
if (entry->id != UCLASS_BLK)
|
|
continue;
|
|
i = 0;
|
|
printf("%-20.20s", entry->name);
|
|
uclass_foreach_dev(udev, uc) {
|
|
if (udev->driver != entry)
|
|
continue;
|
|
desc = dev_get_uclass_platdata(udev);
|
|
printf("%c %s %u", i ? ',' : ':',
|
|
blk_get_if_type_name(desc->if_type),
|
|
desc->devnum);
|
|
i++;
|
|
}
|
|
if (!i)
|
|
puts(": <none>");
|
|
puts("\n");
|
|
}
|
|
|
|
return CMD_RET_SUCCESS;
|
|
}
|
|
|
|
U_BOOT_CMD(lsblk, 1, 0, do_lsblk, "list block drivers and devices",
|
|
"- display list of block device drivers and attached block devices"
|
|
);
|