summaryrefslogtreecommitdiffstats
path: root/src/interface/efi/efi_snp_hii.c
diff options
context:
space:
mode:
authorMichael Brown2014-05-19 21:29:01 +0200
committerMichael Brown2014-05-20 01:33:05 +0200
commit81df95e8aebffeae11a0ae6b7099e402da1c08c3 (patch)
treeea1cb0edad2dd4951f81aa1494c2825e7feace03 /src/interface/efi/efi_snp_hii.c
parent[efi] Make EFI_DEVICE_PATH_TO_TEXT_PROTOCOL optional (diff)
downloadipxe-81df95e8aebffeae11a0ae6b7099e402da1c08c3.tar.gz
ipxe-81df95e8aebffeae11a0ae6b7099e402da1c08c3.tar.xz
ipxe-81df95e8aebffeae11a0ae6b7099e402da1c08c3.zip
[efi] Make EFI_HII_DATABASE_PROTOCOL optional
Some UEFI systems (observed with a Mac Pro) do not provide EFI_HII_DATABASE_PROTOCOL. We can continue to function without providing access to network device settings via HII, so make this protocol optional and fall back to simply not providing any HII protocols. Reported-by: Matt Woodward <pxematt@woodwardcc.com> Tested-by: Matt Woodward <pxematt@woodwardcc.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/interface/efi/efi_snp_hii.c')
-rw-r--r--src/interface/efi/efi_snp_hii.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/interface/efi/efi_snp_hii.c b/src/interface/efi/efi_snp_hii.c
index c272527c..797a6d83 100644
--- a/src/interface/efi/efi_snp_hii.c
+++ b/src/interface/efi/efi_snp_hii.c
@@ -75,7 +75,7 @@ static EFI_GUID efi_hii_ibm_ucm_compliant_formset_guid
/** EFI HII database protocol */
static EFI_HII_DATABASE_PROTOCOL *efihii;
-EFI_REQUIRE_PROTOCOL ( EFI_HII_DATABASE_PROTOCOL, &efihii );
+EFI_REQUEST_PROTOCOL ( EFI_HII_DATABASE_PROTOCOL, &efihii );
/**
* Identify settings to be exposed via HII
@@ -649,6 +649,10 @@ int efi_snp_hii_install ( struct efi_snp_device *snpdev ) {
int efirc;
int rc;
+ /* Do nothing if HII database protocol is not supported */
+ if ( ! efihii )
+ return 0;
+
/* Initialise HII protocol */
memcpy ( &snpdev->hii, &efi_snp_device_hii, sizeof ( snpdev->hii ) );
@@ -705,6 +709,11 @@ int efi_snp_hii_install ( struct efi_snp_device *snpdev ) {
void efi_snp_hii_uninstall ( struct efi_snp_device *snpdev ) {
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
+ /* Do nothing if HII database protocol is not supported */
+ if ( ! efihii )
+ return;
+
+ /* Uninstall protocols and remove package list */
bs->UninstallMultipleProtocolInterfaces (
snpdev->handle,
&efi_hii_config_access_protocol_guid, &snpdev->hii,