/** @file | |
This is an example of how a driver retrieve HII data using HII Package List | |
Protocol, and how to publish the HII data. | |
Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#include <Uefi.h> | |
#include <Guid/HiiResourceSampleHii.h> | |
#include <Protocol/HiiPackageList.h> | |
#include <Library/DevicePathLib.h> | |
#include <Library/UefiDriverEntryPoint.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/UefiHiiServicesLib.h> | |
#include <Library/HiiLib.h> | |
#pragma pack(1) | |
/// | |
/// HII specific Vendor Device Path definition. | |
/// | |
typedef struct { | |
VENDOR_DEVICE_PATH VendorDevicePath; | |
EFI_DEVICE_PATH_PROTOCOL End; | |
} HII_VENDOR_DEVICE_PATH; | |
#pragma pack() | |
EFI_HII_HANDLE mHiiHandle = NULL; | |
EFI_HANDLE mDriverHandle = NULL; | |
HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = { | |
{ | |
{ | |
HARDWARE_DEVICE_PATH, | |
HW_VENDOR_DP, | |
{ | |
(UINT8)(sizeof (VENDOR_DEVICE_PATH)), | |
(UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) | |
} | |
}, | |
HII_RESOURCE_SAMPLE_FORM_SET_GUID | |
}, | |
{ | |
END_DEVICE_PATH_TYPE, | |
END_ENTIRE_DEVICE_PATH_SUBTYPE, | |
{ | |
(UINT8)(END_DEVICE_PATH_LENGTH), | |
(UINT8)((END_DEVICE_PATH_LENGTH) >> 8) | |
} | |
} | |
}; | |
/** | |
Main entry for this driver. | |
@param[in] ImageHandle Image handle this driver. | |
@param[in] SystemTable Pointer to SystemTable. | |
@retval EFI_SUCESS This function always complete successfully. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
HiiResourcesSampleInit ( | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_SYSTEM_TABLE *SystemTable | |
) | |
{ | |
EFI_STATUS Status; | |
EFI_HII_PACKAGE_LIST_HEADER *PackageList; | |
// | |
// Retrieve HII package list from ImageHandle | |
// | |
Status = gBS->OpenProtocol ( | |
ImageHandle, | |
&gEfiHiiPackageListProtocolGuid, | |
(VOID **)&PackageList, | |
ImageHandle, | |
NULL, | |
EFI_OPEN_PROTOCOL_GET_PROTOCOL | |
); | |
if (EFI_ERROR (Status)) { | |
return Status; | |
} | |
// | |
// Publish sample Fromset | |
// | |
Status = gBS->InstallProtocolInterface ( | |
&mDriverHandle, | |
&gEfiDevicePathProtocolGuid, | |
EFI_NATIVE_INTERFACE, | |
&mHiiVendorDevicePath | |
); | |
if (EFI_ERROR (Status)) { | |
return Status; | |
} | |
// | |
// Publish HII package list to HII Database. | |
// | |
Status = gHiiDatabase->NewPackageList ( | |
gHiiDatabase, | |
PackageList, | |
mDriverHandle, | |
&mHiiHandle | |
); | |
if (EFI_ERROR (Status)) { | |
return Status; | |
} | |
return EFI_SUCCESS; | |
} | |
/** | |
Unloads the application and its installed protocol. | |
@param[in] ImageHandle Handle that identifies the image to be unloaded. | |
@retval EFI_SUCCESS The image has been unloaded. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
HiiResourcesSampleUnload ( | |
IN EFI_HANDLE ImageHandle | |
) | |
{ | |
if (mDriverHandle != NULL) { | |
gBS->UninstallProtocolInterface ( | |
mDriverHandle, | |
&gEfiDevicePathProtocolGuid, | |
&mHiiVendorDevicePath | |
); | |
mDriverHandle = NULL; | |
} | |
if (mHiiHandle != NULL) { | |
HiiRemovePackages (mHiiHandle); | |
mHiiHandle = NULL; | |
} | |
return EFI_SUCCESS; | |
} |