david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[efi] Include installed protocol list in unknown handle names

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2015-08-27 15:37:46 +01:00
parent 9501eaf68d
commit e08d7ccc95
1 changed files with 19 additions and 3 deletions

View File

@ -35,6 +35,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <errno.h> #include <errno.h>
#include <ipxe/uuid.h> #include <ipxe/uuid.h>
#include <ipxe/base16.h> #include <ipxe/base16.h>
#include <ipxe/vsprintf.h>
#include <ipxe/efi/efi.h> #include <ipxe/efi/efi.h>
#include <ipxe/efi/efi_utils.h> #include <ipxe/efi/efi_utils.h>
#include <ipxe/efi/Protocol/ComponentName.h> #include <ipxe/efi/Protocol/ComponentName.h>
@ -632,7 +633,10 @@ static struct efi_handle_name_type efi_handle_name_types[] = {
const __attribute__ (( pure )) char * efi_handle_name ( EFI_HANDLE handle ) { const __attribute__ (( pure )) char * efi_handle_name ( EFI_HANDLE handle ) {
EFI_BOOT_SERVICES *bs = efi_systab->BootServices; EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
struct efi_handle_name_type *type; struct efi_handle_name_type *type;
static char buf[32]; static char buf[256];
size_t used = 0;
EFI_GUID **protocols;
UINTN count;
unsigned int i; unsigned int i;
void *interface; void *interface;
const char *name; const char *name;
@ -672,7 +676,19 @@ const __attribute__ (( pure )) char * efi_handle_name ( EFI_HANDLE handle ) {
return name; return name;
} }
/* Use raw handle value if no name found */ /* If no name is found, then use the raw handle value and a
snprintf ( buf, sizeof ( buf ), "UNKNOWN<%p>", handle ); * list of installed protocols.
*/
used = ssnprintf ( buf, sizeof ( buf ), "UNKNOWN<%p", handle );
if ( ( efirc = bs->ProtocolsPerHandle ( handle, &protocols,
&count ) ) == 0 ) {
for ( i = 0 ; i < count ; i++ ) {
used += ssnprintf ( ( buf + used ),
( sizeof ( buf ) - used ), ",%s",
efi_guid_ntoa ( protocols[i] ) );
}
bs->FreePool ( protocols );
}
used += ssnprintf ( ( buf + used ), ( sizeof ( buf ) - used ), ">" );
return buf; return buf;
} }