mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
cmd: efidebug: add dh command
"dh" command prints all the uefi handles used in the system. => efi dh 7ef3bfa0: Device Path, Device Path To Text, Device Path Utilities, Unicode Collation 2 7ef31d30: Driver Binding 7ef31da0: Simple Text Output 7ef31e10: Simple Text Input, Simple Text Input Ex 7ef3cca0: Block IO, Device Path 7ef3d070: Block IO, Device Path 7ef3d1b0: Block IO, Device Path, Simple File System 7ef3d3e0: Block IO, Device Path, Simple File System Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
66eaf56648
commit
a80146205d
1 changed files with 141 additions and 1 deletions
142
cmd/efidebug.c
142
cmd/efidebug.c
|
@ -179,6 +179,142 @@ static int do_efi_show_drivers(cmd_tbl_t *cmdtp, int flag,
|
|||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
static const struct {
|
||||
const char *text;
|
||||
const efi_guid_t guid;
|
||||
} guid_list[] = {
|
||||
{
|
||||
"Device Path",
|
||||
DEVICE_PATH_GUID,
|
||||
},
|
||||
{
|
||||
"Device Path To Text",
|
||||
EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID,
|
||||
},
|
||||
{
|
||||
"Device Path Utilities",
|
||||
EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID,
|
||||
},
|
||||
{
|
||||
"Unicode Collation 2",
|
||||
EFI_UNICODE_COLLATION_PROTOCOL2_GUID,
|
||||
},
|
||||
{
|
||||
"Driver Binding",
|
||||
EFI_DRIVER_BINDING_PROTOCOL_GUID,
|
||||
},
|
||||
{
|
||||
"Simple Text Input",
|
||||
EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID,
|
||||
},
|
||||
{
|
||||
"Simple Text Input Ex",
|
||||
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID,
|
||||
},
|
||||
{
|
||||
"Simple Text Output",
|
||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID,
|
||||
},
|
||||
{
|
||||
"Block IO",
|
||||
BLOCK_IO_GUID,
|
||||
},
|
||||
{
|
||||
"Simple File System",
|
||||
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID,
|
||||
},
|
||||
{
|
||||
"Loaded Image",
|
||||
LOADED_IMAGE_PROTOCOL_GUID,
|
||||
},
|
||||
{
|
||||
"GOP",
|
||||
EFI_GOP_GUID,
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* get_guid_text - get string of protocol guid
|
||||
* @guid: Protocol guid
|
||||
* Return: String
|
||||
*
|
||||
* Return string for display to represent the protocol.
|
||||
*/
|
||||
static const char *get_guid_text(const efi_guid_t *guid)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(guid_list); i++)
|
||||
if (!guidcmp(&guid_list[i].guid, guid))
|
||||
break;
|
||||
|
||||
if (i != ARRAY_SIZE(guid_list))
|
||||
return guid_list[i].text;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* do_efi_show_handles() - show UEFI handles
|
||||
*
|
||||
* @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 "dh" sub-command.
|
||||
* Show all UEFI handles and their information, currently all protocols
|
||||
* added to handle.
|
||||
*/
|
||||
static int do_efi_show_handles(cmd_tbl_t *cmdtp, int flag,
|
||||
int argc, char * const argv[])
|
||||
{
|
||||
efi_handle_t *handles;
|
||||
efi_guid_t **guid;
|
||||
efi_uintn_t num, count, i, j;
|
||||
const char *guid_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("Handle%.*s Protocols\n", EFI_HANDLE_WIDTH - 6, spc);
|
||||
printf("%.*s ====================\n", EFI_HANDLE_WIDTH, sep);
|
||||
for (i = 0; i < num; i++) {
|
||||
printf("%p", handles[i]);
|
||||
ret = EFI_CALL(BS->protocols_per_handle(handles[i], &guid,
|
||||
&count));
|
||||
if (ret || !count) {
|
||||
putc('\n');
|
||||
continue;
|
||||
}
|
||||
|
||||
for (j = 0; j < count; j++) {
|
||||
if (j)
|
||||
printf(", ");
|
||||
else
|
||||
putc(' ');
|
||||
|
||||
guid_text = get_guid_text(guid[j]);
|
||||
if (guid_text)
|
||||
puts(guid_text);
|
||||
else
|
||||
printf("%pUl", guid[j]);
|
||||
}
|
||||
putc('\n');
|
||||
}
|
||||
|
||||
EFI_CALL(BS->free_pool(handles));
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* do_efi_boot_add() - set UEFI load option
|
||||
*
|
||||
|
@ -685,6 +821,8 @@ static cmd_tbl_t cmd_efidebug_sub[] = {
|
|||
"", ""),
|
||||
U_BOOT_CMD_MKENT(drivers, CONFIG_SYS_MAXARGS, 1, do_efi_show_drivers,
|
||||
"", ""),
|
||||
U_BOOT_CMD_MKENT(dh, CONFIG_SYS_MAXARGS, 1, do_efi_show_handles,
|
||||
"", ""),
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -747,7 +885,9 @@ static char efidebug_help_text[] =
|
|||
"efidebug devices\n"
|
||||
" - show uefi devices\n"
|
||||
"efidebug drivers\n"
|
||||
" - show uefi drivers\n";
|
||||
" - show uefi drivers\n"
|
||||
"efidebug dh\n"
|
||||
" - show uefi handles\n";
|
||||
#endif
|
||||
|
||||
U_BOOT_CMD(
|
||||
|
|
Loading…
Reference in a new issue