mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
cmd: efidebug: add drivers command
"drivers" command prints all the uefi drivers on the system. => efi drivers Driver Name Image Path ================ ==================== ==================== 000000007ef003d0 <NULL> <built-in> Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
355cdb5a72
commit
66eaf56648
1 changed files with 94 additions and 1 deletions
|
@ -90,6 +90,95 @@ static int do_efi_show_devices(cmd_tbl_t *cmdtp, int flag,
|
||||||
return CMD_RET_SUCCESS;
|
return CMD_RET_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* efi_get_driver_handle_info() - get information of UEFI driver
|
||||||
|
*
|
||||||
|
* @handle: Handle of UEFI device
|
||||||
|
* @driver_name: Driver name
|
||||||
|
* @image_path: Pointer to text of device path
|
||||||
|
* Return: 0 on success, -1 on failure
|
||||||
|
*
|
||||||
|
* Currently return no useful information as all UEFI drivers are
|
||||||
|
* built-in..
|
||||||
|
*/
|
||||||
|
static int efi_get_driver_handle_info(efi_handle_t handle, u16 **driver_name,
|
||||||
|
u16 **image_path)
|
||||||
|
{
|
||||||
|
struct efi_handler *handler;
|
||||||
|
struct efi_loaded_image *image;
|
||||||
|
efi_status_t ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* driver name
|
||||||
|
* TODO: support EFI_COMPONENT_NAME2_PROTOCOL
|
||||||
|
*/
|
||||||
|
*driver_name = NULL;
|
||||||
|
|
||||||
|
/* image name */
|
||||||
|
ret = efi_search_protocol(handle, &efi_guid_loaded_image, &handler);
|
||||||
|
if (ret != EFI_SUCCESS) {
|
||||||
|
*image_path = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
image = handler->protocol_interface;
|
||||||
|
*image_path = efi_dp_str(image->file_path);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* do_efi_show_drivers() - show UEFI drivers
|
||||||
|
*
|
||||||
|
* @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 "drivers" sub-command.
|
||||||
|
* Show all UEFI drivers and their information.
|
||||||
|
*/
|
||||||
|
static int do_efi_show_drivers(cmd_tbl_t *cmdtp, int flag,
|
||||||
|
int argc, char * const argv[])
|
||||||
|
{
|
||||||
|
efi_handle_t *handles;
|
||||||
|
efi_uintn_t num, i;
|
||||||
|
u16 *driver_name, *image_path_text;
|
||||||
|
efi_status_t ret;
|
||||||
|
|
||||||
|
ret = EFI_CALL(BS->locate_handle_buffer(
|
||||||
|
BY_PROTOCOL, &efi_guid_driver_binding_protocol,
|
||||||
|
NULL, &num, &handles));
|
||||||
|
if (ret != EFI_SUCCESS)
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
if (!num)
|
||||||
|
return CMD_RET_SUCCESS;
|
||||||
|
|
||||||
|
printf("Driver%.*s Name Image Path\n",
|
||||||
|
EFI_HANDLE_WIDTH - 6, spc);
|
||||||
|
printf("%.*s ==================== ====================\n",
|
||||||
|
EFI_HANDLE_WIDTH, sep);
|
||||||
|
for (i = 0; i < num; i++) {
|
||||||
|
if (!efi_get_driver_handle_info(handles[i], &driver_name,
|
||||||
|
&image_path_text)) {
|
||||||
|
if (image_path_text)
|
||||||
|
printf("%p %-20ls %ls\n", handles[i],
|
||||||
|
driver_name, image_path_text);
|
||||||
|
else
|
||||||
|
printf("%p %-20ls <built-in>\n",
|
||||||
|
handles[i], driver_name);
|
||||||
|
EFI_CALL(BS->free_pool(driver_name));
|
||||||
|
EFI_CALL(BS->free_pool(image_path_text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EFI_CALL(BS->free_pool(handles));
|
||||||
|
|
||||||
|
return CMD_RET_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* do_efi_boot_add() - set UEFI load option
|
* do_efi_boot_add() - set UEFI load option
|
||||||
*
|
*
|
||||||
|
@ -594,6 +683,8 @@ static cmd_tbl_t cmd_efidebug_sub[] = {
|
||||||
U_BOOT_CMD_MKENT(boot, CONFIG_SYS_MAXARGS, 1, do_efi_boot_opt, "", ""),
|
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,
|
U_BOOT_CMD_MKENT(devices, CONFIG_SYS_MAXARGS, 1, do_efi_show_devices,
|
||||||
"", ""),
|
"", ""),
|
||||||
|
U_BOOT_CMD_MKENT(drivers, CONFIG_SYS_MAXARGS, 1, do_efi_show_drivers,
|
||||||
|
"", ""),
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -654,7 +745,9 @@ static char efidebug_help_text[] =
|
||||||
" - set/show UEFI boot order\n"
|
" - set/show UEFI boot order\n"
|
||||||
"\n"
|
"\n"
|
||||||
"efidebug devices\n"
|
"efidebug devices\n"
|
||||||
" - show uefi devices\n";
|
" - show uefi devices\n"
|
||||||
|
"efidebug drivers\n"
|
||||||
|
" - show uefi drivers\n";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue