aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2013-03-20 15:25:16 +0000
committerMichael Brown <mcb30@ipxe.org>2013-03-20 15:25:16 +0000
commit1920aa43764981597da57616cdb75c040d730712 (patch)
tree51e112a4bd77c304a6cbd5747d1a814ebd6cbb52 /src
parentd938e50136b0bd7dbc56b250cd4363646e59c9fc (diff)
downloadipxe-1920aa43764981597da57616cdb75c040d730712.tar.gz
[efi] Provide efi_guid_ntoa() for printing EFI GUIDs
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src')
-rw-r--r--src/include/ipxe/efi/efi.h19
-rw-r--r--src/interface/efi/efi_debug.c25
-rw-r--r--src/interface/efi/efi_file.c5
-rw-r--r--src/interface/efi/efi_init.c13
4 files changed, 36 insertions, 26 deletions
diff --git a/src/include/ipxe/efi/efi.h b/src/include/ipxe/efi/efi.h
index 880872aac..46b66690d 100644
--- a/src/include/ipxe/efi/efi.h
+++ b/src/include/ipxe/efi/efi.h
@@ -54,12 +54,7 @@
/** 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 );
diff --git a/src/interface/efi/efi_debug.c b/src/interface/efi/efi_debug.c
index 7f3c115d5..a7ba7e2ed 100644
--- a/src/interface/efi/efi_debug.c
+++ b/src/interface/efi/efi_debug.c
@@ -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>
@@ -37,6 +39,24 @@ 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
*
* @v handle EFI 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 );
diff --git a/src/interface/efi/efi_file.c b/src/interface/efi/efi_file.c
index ffe25fd66..6f9d44f83 100644
--- a/src/interface/efi/efi_file.c
+++ b/src/interface/efi/efi_file.c
@@ -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;
}
diff --git a/src/interface/efi/efi_init.c b/src/interface/efi/efi_init.c
index aaf894718..48cac538f 100644
--- a/src/interface/efi/efi_init.c
+++ b/src/interface/efi/efi_init.c
@@ -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;
}