loader: lsefi: Print more information

Printing the EFI_HANDLE pointer isn't very useful.
If the handle have a IMAGE_DEVICE_PATH or a DEVICE_PATH protocol print it.
This makes it easier to see which devices are present and what protocol they
expose.

Reviewed by:	imp, tsoome
Differential Revision:	https://reviews.freebsd.org/D32991
Sponsored by: Beckhoff Automation GmbH & Co. KG
This commit is contained in:
Emmanuel Vadot 2021-11-15 12:12:50 +01:00
parent 2bbaed4d7f
commit 2e0d67c3ed

View File

@ -1402,6 +1402,30 @@ command_mode(int argc, char *argv[])
COMMAND_SET(lsefi, "lsefi", "list EFI handles", command_lsefi);
static void
lsefi_print_handle_info(EFI_HANDLE handle)
{
EFI_DEVICE_PATH *devpath;
EFI_DEVICE_PATH *imagepath;
CHAR16 *dp_name;
imagepath = efi_lookup_image_devpath(handle);
if (imagepath != NULL) {
dp_name = efi_devpath_name(imagepath);
printf("Handle for image %S", dp_name);
efi_free_devpath_name(dp_name);
return;
}
devpath = efi_lookup_devpath(handle);
if (devpath != NULL) {
dp_name = efi_devpath_name(devpath);
printf("Handle for device %S", dp_name);
efi_free_devpath_name(dp_name);
return;
}
printf("Handle %p", handle);
}
static int
command_lsefi(int argc __unused, char *argv[] __unused)
{
@ -1437,7 +1461,7 @@ command_lsefi(int argc __unused, char *argv[] __unused)
EFI_GUID **protocols = NULL;
handle = buffer[i];
printf("Handle %p", handle);
lsefi_print_handle_info(handle);
if (pager_output("\n"))
break;
/* device path */