mirror of
https://github.com/ipxe/ipxe
synced 2025-12-29 02:52:36 +03:00
[efi] Perform meaningful error code conversions
Exploit the redefinition of iPXE error codes to include a "platform error code" to allow for meaningful conversion of EFI_STATUS values to iPXE errors and vice versa. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
FILE_LICENCE ( GPL2_OR_LATER );
|
||||
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <ipxe/efi/efi.h>
|
||||
#include <ipxe/efi/Protocol/LoadedImage.h>
|
||||
#include <ipxe/efi/Protocol/DevicePath.h>
|
||||
@@ -94,6 +95,7 @@ EFI_STATUS efi_init ( EFI_HANDLE image_handle,
|
||||
void *loaded_image;
|
||||
void *loaded_image_path;
|
||||
EFI_STATUS efirc;
|
||||
int rc;
|
||||
|
||||
/* Store image handle and system table pointer for future use */
|
||||
efi_image_handle = image_handle;
|
||||
@@ -149,8 +151,9 @@ EFI_STATUS efi_init ( EFI_HANDLE image_handle,
|
||||
&efi_loaded_image_protocol_guid,
|
||||
&loaded_image, image_handle, NULL,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL ) ) != 0 ) {
|
||||
rc = -EEFI ( efirc );
|
||||
DBGC ( systab, "EFI could not get loaded image protocol: %s",
|
||||
efi_strerror ( efirc ) );
|
||||
strerror ( rc ) );
|
||||
return efirc;
|
||||
}
|
||||
efi_loaded_image = loaded_image;
|
||||
@@ -162,8 +165,9 @@ EFI_STATUS efi_init ( EFI_HANDLE image_handle,
|
||||
&efi_loaded_image_device_path_protocol_guid,
|
||||
&loaded_image_path, image_handle, NULL,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL ) ) != 0 ) {
|
||||
rc = -EEFI ( efirc );
|
||||
DBGC ( systab, "EFI could not get loaded image device path "
|
||||
"protocol: %s", efi_strerror ( efirc ) );
|
||||
"protocol: %s", strerror ( rc ) );
|
||||
return efirc;
|
||||
}
|
||||
efi_loaded_image_path = loaded_image_path;
|
||||
@@ -179,8 +183,9 @@ EFI_STATUS efi_init ( EFI_HANDLE image_handle,
|
||||
if ( ( efirc = bs->CreateEvent ( EVT_SIGNAL_EXIT_BOOT_SERVICES,
|
||||
TPL_CALLBACK, efi_shutdown_hook,
|
||||
NULL, &efi_shutdown_event ) ) != 0 ) {
|
||||
rc = -EEFI ( efirc );
|
||||
DBGC ( systab, "EFI could not create ExitBootServices event: "
|
||||
"%s\n", efi_strerror ( efirc ) );
|
||||
"%s\n", strerror ( rc ) );
|
||||
return efirc;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user