/** @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.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include #include #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; }