52 lines
1.2 KiB
C
52 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"
|
||
|
);
|