cmd: efidebug: add devices command
"devices" command prints all the uefi variables on the system. => efi devices Scanning disk ahci_scsi.id0lun0... Scanning disk ahci_scsi.id1lun0... Found 4 disks Device Device Path ================ ==================== 000000007ef07ea0 /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b) 000000007ef00c10 /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/Scsi(0,0) 000000007ef00dd0 /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/Scsi(1,0) 000000007ef07be0 /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/Scsi(1,0)/HD(1,MBR,0x086246ba,0x800,0x40000) 000000007ef07510 /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/Scsi(1,0)/HD(2,MBR,0x086246ba,0x40800,0x3f800) Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
59df7e7e77
commit
355cdb5a72
@ -15,8 +15,81 @@
|
||||
#include <search.h>
|
||||
#include <linux/ctype.h>
|
||||
|
||||
#define BS systab.boottime
|
||||
#define RT systab.runtime
|
||||
|
||||
/**
|
||||
* efi_get_device_handle_info() - get information of UEFI device
|
||||
*
|
||||
* @handle: Handle of UEFI device
|
||||
* @dev_path_text: Pointer to text of device path
|
||||
* Return: 0 on success, -1 on failure
|
||||
*
|
||||
* Currently return a formatted text of device path.
|
||||
*/
|
||||
static int efi_get_device_handle_info(efi_handle_t handle, u16 **dev_path_text)
|
||||
{
|
||||
struct efi_device_path *dp;
|
||||
efi_status_t ret;
|
||||
|
||||
ret = EFI_CALL(BS->open_protocol(handle, &efi_guid_device_path,
|
||||
(void **)&dp, NULL /* FIXME */, NULL,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL));
|
||||
if (ret == EFI_SUCCESS) {
|
||||
*dev_path_text = efi_dp_str(dp);
|
||||
return 0;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#define EFI_HANDLE_WIDTH ((int)sizeof(efi_handle_t) * 2)
|
||||
|
||||
static const char spc[] = " ";
|
||||
static const char sep[] = "================";
|
||||
|
||||
/**
|
||||
* do_efi_show_devices() - show UEFI devices
|
||||
*
|
||||
* @cmdtp: Command table
|
||||
* @flag: Command flag
|
||||
* @argc: Number of arguments
|
||||
* @argv: Argument array
|
||||
* Return: CMD_RET_SUCCESS on success, CMD_RET_RET_FAILURE on failure
|
||||
*
|
||||
* Implement efidebug "devices" sub-command.
|
||||
* Show all UEFI devices and their information.
|
||||
*/
|
||||
static int do_efi_show_devices(cmd_tbl_t *cmdtp, int flag,
|
||||
int argc, char * const argv[])
|
||||
{
|
||||
efi_handle_t *handles;
|
||||
efi_uintn_t num, i;
|
||||
u16 *dev_path_text;
|
||||
efi_status_t ret;
|
||||
|
||||
ret = EFI_CALL(BS->locate_handle_buffer(ALL_HANDLES, NULL, NULL,
|
||||
&num, &handles));
|
||||
if (ret != EFI_SUCCESS)
|
||||
return CMD_RET_FAILURE;
|
||||
|
||||
if (!num)
|
||||
return CMD_RET_SUCCESS;
|
||||
|
||||
printf("Device%.*s Device Path\n", EFI_HANDLE_WIDTH - 6, spc);
|
||||
printf("%.*s ====================\n", EFI_HANDLE_WIDTH, sep);
|
||||
for (i = 0; i < num; i++) {
|
||||
if (!efi_get_device_handle_info(handles[i], &dev_path_text)) {
|
||||
printf("%p %ls\n", handles[i], dev_path_text);
|
||||
efi_free_pool(dev_path_text);
|
||||
}
|
||||
}
|
||||
|
||||
EFI_CALL(BS->free_pool(handles));
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* do_efi_boot_add() - set UEFI load option
|
||||
*
|
||||
@ -519,6 +592,8 @@ static int do_efi_boot_opt(cmd_tbl_t *cmdtp, int flag,
|
||||
|
||||
static cmd_tbl_t cmd_efidebug_sub[] = {
|
||||
U_BOOT_CMD_MKENT(boot, CONFIG_SYS_MAXARGS, 1, do_efi_boot_opt, "", ""),
|
||||
U_BOOT_CMD_MKENT(devices, CONFIG_SYS_MAXARGS, 1, do_efi_show_devices,
|
||||
"", ""),
|
||||
};
|
||||
|
||||
/**
|
||||
@ -577,7 +652,9 @@ static char efidebug_help_text[] =
|
||||
" - set UEFI BootNext variable\n"
|
||||
"efidebug boot order [<bootid#1> [<bootid#2> [<bootid#3> [...]]]]\n"
|
||||
" - set/show UEFI boot order\n"
|
||||
"\n";
|
||||
"\n"
|
||||
"efidebug devices\n"
|
||||
" - show uefi devices\n";
|
||||
#endif
|
||||
|
||||
U_BOOT_CMD(
|
||||
|
Loading…
Reference in New Issue
Block a user