From 21c43e44cbee8e582abdc9cded06ab012873f176 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 19 May 2014 20:24:04 +0100 Subject: [PATCH] [efi] Make EFI_DEVICE_PATH_TO_TEXT_PROTOCOL optional Some UEFI systems (observed with a Mac Pro) do not provide EFI_DEVICE_PATH_TO_TEXT_PROTOCOL. Since we use this protocol only for debug messages, make it optional and fall back to printing the raw device path bytes. Reported-by: Matt Woodward Tested-by: Matt Woodward Signed-off-by: Michael Brown --- src/interface/efi/efi_debug.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/interface/efi/efi_debug.c b/src/interface/efi/efi_debug.c index 4ed66607..6d834bc8 100644 --- a/src/interface/efi/efi_debug.c +++ b/src/interface/efi/efi_debug.c @@ -37,7 +37,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); /** Device path to text protocol */ static EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *efidpt; -EFI_REQUIRE_PROTOCOL ( EFI_DEVICE_PATH_TO_TEXT_PROTOCOL, &efidpt ); +EFI_REQUEST_PROTOCOL ( EFI_DEVICE_PATH_TO_TEXT_PROTOCOL, &efidpt ); /** * Convert GUID to a printable string @@ -99,19 +99,25 @@ void dbg_efi_devpath ( EFI_DEVICE_PATH_PROTOCOL *path ) { size_t len; /* Convert path to a textual representation */ + if ( ! efidpt ) + goto err_no_efidpt; text = efidpt->ConvertDevicePathToText ( path, TRUE, FALSE ); - if ( ! text ) { - printf ( ":\n" ); - end = efi_devpath_end ( path ); - len = ( ( ( void * ) end ) - ( ( void * ) path ) + - sizeof ( *end ) ); - dbg_hex_dump_da ( 0, path, len ); - return; - } + if ( ! text ) + goto err_convert; /* Print path */ printf ( "%ls", text ); /* Free path */ bs->FreePool ( text ); + + return; + + err_convert: + err_no_efidpt: + printf ( ":\n" ); + end = efi_devpath_end ( path ); + len = ( ( ( void * ) end ) - ( ( void * ) path ) + + sizeof ( *end ) ); + dbg_hex_dump_da ( 0, path, len ); }