]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Provide efi_guid_ntoa() for printing EFI GUIDs
authorMichael Brown <mcb30@ipxe.org>
Wed, 20 Mar 2013 15:25:16 +0000 (15:25 +0000)
committerMichael Brown <mcb30@ipxe.org>
Wed, 20 Mar 2013 15:25:16 +0000 (15:25 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/include/ipxe/efi/efi.h
src/interface/efi/efi_debug.c
src/interface/efi/efi_file.c
src/interface/efi/efi_init.c

index 880872aacc8924532261017a6ba973f5dfb52659..46b66690dc607216385efa0aab525baf3080146a 100644 (file)
 /** An EFI protocol used by iPXE */
 struct efi_protocol {
        /** GUID */
-       union {
-               /** EFI protocol GUID */
-               EFI_GUID guid;
-               /** UUID structure understood by iPXE */
-               union uuid uuid;
-       } u;
+       EFI_GUID guid;
        /** Variable containing pointer to protocol structure */
        void **protocol;
 };
@@ -77,7 +72,7 @@ struct efi_protocol {
  */
 #define EFI_REQUIRE_PROTOCOL( _protocol, _ptr )                                     \
        struct efi_protocol __ ## _protocol __efi_protocol = {               \
-               .u.guid = _protocol ## _GUID,                                \
+               .guid = _protocol ## _GUID,                                  \
                .protocol = ( ( void ** ) ( void * )                         \
                              ( ( (_ptr) == ( ( _protocol ** ) (_ptr) ) ) ?  \
                                (_ptr) : (_ptr) ) ),                         \
@@ -86,12 +81,7 @@ struct efi_protocol {
 /** An EFI configuration table used by iPXE */
 struct efi_config_table {
        /** GUID */
-       union {
-               /** EFI configuration table GUID */
-               EFI_GUID guid;
-               /** UUID structure understood by iPXE */
-               union uuid uuid;
-       } u;
+       EFI_GUID guid;
        /** Variable containing pointer to configuration table */
        void **table;
        /** Table is required for operation */
@@ -113,7 +103,7 @@ struct efi_config_table {
  */
 #define EFI_USE_TABLE( _table, _ptr, _required )                            \
        struct efi_config_table __ ## _table __efi_config_table = {          \
-               .u.guid = _table ## _GUID,                                   \
+               .guid = _table ## _GUID,                                     \
                .table = ( ( void ** ) ( void * ) (_ptr) ),                  \
                .required = (_required),                                     \
        }
@@ -140,6 +130,7 @@ extern EFI_LOADED_IMAGE_PROTOCOL *efi_loaded_image;
 extern EFI_SYSTEM_TABLE *efi_systab;
 
 extern const char * efi_strerror ( EFI_STATUS efirc );
+extern const char * efi_guid_ntoa ( EFI_GUID *guid );
 
 extern void dbg_efi_protocols ( EFI_HANDLE handle );
 extern void dbg_efi_devpath ( EFI_DEVICE_PATH_PROTOCOL *path );
index 7f3c115d5d1c1b875c8bd30bb766e08af95eca2d..a7ba7e2edd4f2ede8324d87a74fe8a2aadac6c5e 100644 (file)
@@ -27,6 +27,8 @@ FILE_LICENCE ( GPL2_OR_LATER );
  */
 
 #include <stdio.h>
+#include <string.h>
+#include <ipxe/uuid.h>
 #include <ipxe/efi/efi.h>
 #include <ipxe/efi/efi_driver.h>
 #include <ipxe/efi/Protocol/DevicePath.h>
@@ -36,6 +38,24 @@ FILE_LICENCE ( GPL2_OR_LATER );
 static EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *efidpt;
 EFI_REQUIRE_PROTOCOL ( EFI_DEVICE_PATH_TO_TEXT_PROTOCOL, &efidpt );
 
+/**
+ * Convert GUID to a printable string
+ *
+ * @v guid             GUID
+ * @ret string         Printable string
+ */
+const char * efi_guid_ntoa ( EFI_GUID *guid ) {
+       union {
+               union uuid uuid;
+               EFI_GUID guid;
+       } u;
+
+       /* Convert GUID to standard endianness */
+       memcpy ( &u.guid, guid, sizeof ( u.guid ) );
+       uuid_mangle ( &u.uuid );
+       return uuid_ntoa ( &u.uuid );
+}
+
 /**
  * Print list of protocol handlers attached to a handle
  *
@@ -57,9 +77,8 @@ void dbg_efi_protocols ( EFI_HANDLE handle ) {
        }
 
        /* Dump list of protocols */
-       for ( i = 0 ; i < count ; i++ ) {
-               printf ( "%s\n", uuid_ntoa ( ( union uuid * ) protocols[i] ) );
-       }
+       for ( i = 0 ; i < count ; i++ )
+               printf ( "%s\n", efi_guid_ntoa ( protocols[i] ) );
 
        /* Free list */
        bs->FreePool ( protocols );
index ffe25fd668be2b616b8aa7cbcfa5c7f8ba279927..6f9d44f83e39357b1d07f8c736091354de7e13ec 100644 (file)
@@ -414,8 +414,7 @@ static EFI_STATUS EFIAPI efi_file_get_info ( EFI_FILE_PROTOCOL *this,
        } else {
 
                DBGC ( file, "EFIFILE %s cannot get information of type %s\n",
-                      efi_file_name ( file ),
-                      uuid_ntoa ( ( union uuid * ) type ) );
+                      efi_file_name ( file ), efi_guid_ntoa ( type ) );
                return EFI_UNSUPPORTED;
        }
 }
@@ -435,7 +434,7 @@ efi_file_set_info ( EFI_FILE_PROTOCOL *this, EFI_GUID *type,
        struct efi_file *file = container_of ( this, struct efi_file, file );
 
        DBGC ( file, "EFIFILE %s cannot set information of type %s\n",
-              efi_file_name ( file ), uuid_ntoa ( ( union uuid * ) type ) );
+              efi_file_name ( file ), efi_guid_ntoa ( type ) );
        return EFI_WRITE_PROTECTED;
 }
 
index aaf894718e1bbfcb09175c74a68ff69e5dcd9fc0..48cac538f4f7990223deffb5f6919f8b9731ca38 100644 (file)
@@ -121,13 +121,14 @@ EFI_STATUS efi_init ( EFI_HANDLE image_handle,
 
        /* Look up used protocols */
        for_each_table_entry ( prot, EFI_PROTOCOLS ) {
-               if ( ( efirc = bs->LocateProtocol ( &prot->u.guid, NULL,
+               if ( ( efirc = bs->LocateProtocol ( &prot->guid, NULL,
                                                    prot->protocol ) ) == 0 ) {
                        DBGC ( systab, "EFI protocol %s is at %p\n",
-                              uuid_ntoa ( &prot->u.uuid ), *(prot->protocol));
+                              efi_guid_ntoa ( &prot->guid ),
+                              *(prot->protocol) );
                } else {
                        DBGC ( systab, "EFI does not provide protocol %s\n",
-                              uuid_ntoa ( &prot->u.uuid ) );
+                              efi_guid_ntoa ( &prot->guid ) );
                        /* All protocols are required */
                        return efirc;
                }
@@ -135,12 +136,12 @@ EFI_STATUS efi_init ( EFI_HANDLE image_handle,
 
        /* Look up used configuration tables */
        for_each_table_entry ( tab, EFI_CONFIG_TABLES ) {
-               if ( ( *(tab->table) = efi_find_table ( &tab->u.guid ) ) ) {
+               if ( ( *(tab->table) = efi_find_table ( &tab->guid ) ) ) {
                        DBGC ( systab, "EFI configuration table %s is at %p\n",
-                              uuid_ntoa ( &tab->u.uuid ), *(tab->table) );
+                              efi_guid_ntoa ( &tab->guid ), *(tab->table) );
                } else {
                        DBGC ( systab, "EFI does not provide configuration "
-                              "table %s\n", uuid_ntoa ( &tab->u.uuid ) );
+                              "table %s\n", efi_guid_ntoa ( &tab->guid ) );
                        if ( tab->required )
                                return EFI_NOT_AVAILABLE_YET;
                }