]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Make EFI_DEVICE_PATH_TO_TEXT_PROTOCOL optional
authorMichael Brown <mcb30@ipxe.org>
Mon, 19 May 2014 19:24:04 +0000 (20:24 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 19 May 2014 23:31:51 +0000 (00:31 +0100)
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 <pxematt@woodwardcc.com>
Tested-by: Matt Woodward <pxematt@woodwardcc.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/efi/efi_debug.c

index 4ed6660772e45af069ce8e685f609944dd250f58..6d834bc83ae28a399dc2eab2d660991d11f643e1 100644 (file)
@@ -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 ( "<cannot convert>:\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 ( "<cannot convert>:\n" );
+       end = efi_devpath_end ( path );
+       len = ( ( ( void * ) end ) - ( ( void * ) path ) +
+               sizeof ( *end ) );
+       dbg_hex_dump_da ( 0, path, len );
 }