16446c98725949dbc5bbf51a2ce1ae004c74a511clgao/** @file 26446c98725949dbc5bbf51a2ce1ae004c74a511clgaoThis is an example of how a driver retrieve HII data using HII Package List 36446c98725949dbc5bbf51a2ce1ae004c74a511clgaoProtocol, and how to publish the HII data. 46446c98725949dbc5bbf51a2ce1ae004c74a511clgao 5c8ad2d7a296c851c2a91519f80dab479df0fdf46lgaoCopyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR> 6e5eed7d3641d71d7ea539e5379ea9c6a5cd97004hhtianThis program and the accompanying materials 76446c98725949dbc5bbf51a2ce1ae004c74a511clgaoare licensed and made available under the terms and conditions of the BSD License 86446c98725949dbc5bbf51a2ce1ae004c74a511clgaowhich accompanies this distribution. The full text of the license may be found at 96446c98725949dbc5bbf51a2ce1ae004c74a511clgaohttp://opensource.org/licenses/bsd-license.php 106446c98725949dbc5bbf51a2ce1ae004c74a511clgao 116446c98725949dbc5bbf51a2ce1ae004c74a511clgaoTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 126446c98725949dbc5bbf51a2ce1ae004c74a511clgaoWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 136446c98725949dbc5bbf51a2ce1ae004c74a511clgao 146446c98725949dbc5bbf51a2ce1ae004c74a511clgao**/ 156446c98725949dbc5bbf51a2ce1ae004c74a511clgao 166446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Uefi.h> 17c8ad2d7a296c851c2a91519f80dab479df0fdf46lgao#include <Guid/HiiResourceSampleHii.h> 186446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Protocol/HiiPackageList.h> 196446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/DevicePathLib.h> 206446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/UefiDriverEntryPoint.h> 216446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/UefiBootServicesTableLib.h> 226446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/UefiHiiServicesLib.h> 236446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/HiiLib.h> 246446c98725949dbc5bbf51a2ce1ae004c74a511clgao 256446c98725949dbc5bbf51a2ce1ae004c74a511clgao#pragma pack(1) 266446c98725949dbc5bbf51a2ce1ae004c74a511clgao/// 276446c98725949dbc5bbf51a2ce1ae004c74a511clgao/// HII specific Vendor Device Path definition. 286446c98725949dbc5bbf51a2ce1ae004c74a511clgao/// 296446c98725949dbc5bbf51a2ce1ae004c74a511clgaotypedef struct { 306446c98725949dbc5bbf51a2ce1ae004c74a511clgao VENDOR_DEVICE_PATH VendorDevicePath; 316446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_DEVICE_PATH_PROTOCOL End; 326446c98725949dbc5bbf51a2ce1ae004c74a511clgao} HII_VENDOR_DEVICE_PATH; 336446c98725949dbc5bbf51a2ce1ae004c74a511clgao#pragma pack() 346446c98725949dbc5bbf51a2ce1ae004c74a511clgao 356446c98725949dbc5bbf51a2ce1ae004c74a511clgao 366446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFI_HII_HANDLE mHiiHandle = NULL; 376446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFI_HANDLE mDriverHandle = NULL; 386446c98725949dbc5bbf51a2ce1ae004c74a511clgao 396446c98725949dbc5bbf51a2ce1ae004c74a511clgaoHII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = { 406446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 416446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 426446c98725949dbc5bbf51a2ce1ae004c74a511clgao HARDWARE_DEVICE_PATH, 436446c98725949dbc5bbf51a2ce1ae004c74a511clgao HW_VENDOR_DP, 446446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 456446c98725949dbc5bbf51a2ce1ae004c74a511clgao (UINT8) (sizeof (VENDOR_DEVICE_PATH)), 466446c98725949dbc5bbf51a2ce1ae004c74a511clgao (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) 476446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 486446c98725949dbc5bbf51a2ce1ae004c74a511clgao }, 49c8ad2d7a296c851c2a91519f80dab479df0fdf46lgao HII_RESOURCE_SAMPLE_FORM_SET_GUID 506446c98725949dbc5bbf51a2ce1ae004c74a511clgao }, 516446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 526446c98725949dbc5bbf51a2ce1ae004c74a511clgao END_DEVICE_PATH_TYPE, 536446c98725949dbc5bbf51a2ce1ae004c74a511clgao END_ENTIRE_DEVICE_PATH_SUBTYPE, 546446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 556446c98725949dbc5bbf51a2ce1ae004c74a511clgao (UINT8) (END_DEVICE_PATH_LENGTH), 566446c98725949dbc5bbf51a2ce1ae004c74a511clgao (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8) 576446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 586446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 596446c98725949dbc5bbf51a2ce1ae004c74a511clgao}; 606446c98725949dbc5bbf51a2ce1ae004c74a511clgao 616446c98725949dbc5bbf51a2ce1ae004c74a511clgao/** 626446c98725949dbc5bbf51a2ce1ae004c74a511clgao Main entry for this driver. 636446c98725949dbc5bbf51a2ce1ae004c74a511clgao 646446c98725949dbc5bbf51a2ce1ae004c74a511clgao @param[in] ImageHandle Image handle this driver. 656446c98725949dbc5bbf51a2ce1ae004c74a511clgao @param[in] SystemTable Pointer to SystemTable. 666446c98725949dbc5bbf51a2ce1ae004c74a511clgao 676446c98725949dbc5bbf51a2ce1ae004c74a511clgao @retval EFI_SUCESS This function always complete successfully. 686446c98725949dbc5bbf51a2ce1ae004c74a511clgao 696446c98725949dbc5bbf51a2ce1ae004c74a511clgao**/ 706446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFI_STATUS 716446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFIAPI 726446c98725949dbc5bbf51a2ce1ae004c74a511clgaoHiiResourcesSampleInit ( 736446c98725949dbc5bbf51a2ce1ae004c74a511clgao IN EFI_HANDLE ImageHandle, 746446c98725949dbc5bbf51a2ce1ae004c74a511clgao IN EFI_SYSTEM_TABLE *SystemTable 756446c98725949dbc5bbf51a2ce1ae004c74a511clgao ) 766446c98725949dbc5bbf51a2ce1ae004c74a511clgao{ 776446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_STATUS Status; 786446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_HII_PACKAGE_LIST_HEADER *PackageList; 796446c98725949dbc5bbf51a2ce1ae004c74a511clgao 806446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 816446c98725949dbc5bbf51a2ce1ae004c74a511clgao // Retrieve HII package list from ImageHandle 826446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 836446c98725949dbc5bbf51a2ce1ae004c74a511clgao Status = gBS->OpenProtocol ( 846446c98725949dbc5bbf51a2ce1ae004c74a511clgao ImageHandle, 856446c98725949dbc5bbf51a2ce1ae004c74a511clgao &gEfiHiiPackageListProtocolGuid, 866446c98725949dbc5bbf51a2ce1ae004c74a511clgao (VOID **) &PackageList, 876446c98725949dbc5bbf51a2ce1ae004c74a511clgao ImageHandle, 886446c98725949dbc5bbf51a2ce1ae004c74a511clgao NULL, 896446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_OPEN_PROTOCOL_GET_PROTOCOL 906446c98725949dbc5bbf51a2ce1ae004c74a511clgao ); 916446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (EFI_ERROR (Status)) { 926446c98725949dbc5bbf51a2ce1ae004c74a511clgao return Status; 936446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 946446c98725949dbc5bbf51a2ce1ae004c74a511clgao 956446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 966446c98725949dbc5bbf51a2ce1ae004c74a511clgao // Publish sample Fromset 976446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 986446c98725949dbc5bbf51a2ce1ae004c74a511clgao Status = gBS->InstallProtocolInterface ( 996446c98725949dbc5bbf51a2ce1ae004c74a511clgao &mDriverHandle, 1006446c98725949dbc5bbf51a2ce1ae004c74a511clgao &gEfiDevicePathProtocolGuid, 1016446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_NATIVE_INTERFACE, 1026446c98725949dbc5bbf51a2ce1ae004c74a511clgao &mHiiVendorDevicePath 1036446c98725949dbc5bbf51a2ce1ae004c74a511clgao ); 1046446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (EFI_ERROR (Status)) { 1056446c98725949dbc5bbf51a2ce1ae004c74a511clgao return Status; 1066446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 1076446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1086446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 109d90434ccb53d7ca320c84624bca8cf4ba8542196xdu // Publish HII package list to HII Database. 1106446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 1116446c98725949dbc5bbf51a2ce1ae004c74a511clgao Status = gHiiDatabase->NewPackageList ( 1126446c98725949dbc5bbf51a2ce1ae004c74a511clgao gHiiDatabase, 1136446c98725949dbc5bbf51a2ce1ae004c74a511clgao PackageList, 1146446c98725949dbc5bbf51a2ce1ae004c74a511clgao mDriverHandle, 1156446c98725949dbc5bbf51a2ce1ae004c74a511clgao &mHiiHandle 1166446c98725949dbc5bbf51a2ce1ae004c74a511clgao ); 1176446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (EFI_ERROR (Status)) { 1186446c98725949dbc5bbf51a2ce1ae004c74a511clgao return Status; 1196446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 1206446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1216446c98725949dbc5bbf51a2ce1ae004c74a511clgao return EFI_SUCCESS; 1226446c98725949dbc5bbf51a2ce1ae004c74a511clgao} 1236446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1246446c98725949dbc5bbf51a2ce1ae004c74a511clgao/** 1256446c98725949dbc5bbf51a2ce1ae004c74a511clgao Unloads the application and its installed protocol. 1266446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1276446c98725949dbc5bbf51a2ce1ae004c74a511clgao @param[in] ImageHandle Handle that identifies the image to be unloaded. 1286446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1296446c98725949dbc5bbf51a2ce1ae004c74a511clgao @retval EFI_SUCCESS The image has been unloaded. 1306446c98725949dbc5bbf51a2ce1ae004c74a511clgao**/ 1316446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFI_STATUS 1326446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFIAPI 1336446c98725949dbc5bbf51a2ce1ae004c74a511clgaoHiiResourcesSampleUnload ( 1346446c98725949dbc5bbf51a2ce1ae004c74a511clgao IN EFI_HANDLE ImageHandle 1356446c98725949dbc5bbf51a2ce1ae004c74a511clgao ) 1366446c98725949dbc5bbf51a2ce1ae004c74a511clgao{ 1376446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (mDriverHandle != NULL) { 1386446c98725949dbc5bbf51a2ce1ae004c74a511clgao gBS->UninstallProtocolInterface ( 1396446c98725949dbc5bbf51a2ce1ae004c74a511clgao mDriverHandle, 1406446c98725949dbc5bbf51a2ce1ae004c74a511clgao &gEfiDevicePathProtocolGuid, 1416446c98725949dbc5bbf51a2ce1ae004c74a511clgao &mHiiVendorDevicePath 1426446c98725949dbc5bbf51a2ce1ae004c74a511clgao ); 1436446c98725949dbc5bbf51a2ce1ae004c74a511clgao mDriverHandle = NULL; 1446446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 1456446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1466446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (mHiiHandle != NULL) { 1476446c98725949dbc5bbf51a2ce1ae004c74a511clgao HiiRemovePackages (mHiiHandle); 1486446c98725949dbc5bbf51a2ce1ae004c74a511clgao mHiiHandle = NULL; 1496446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 1506446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1516446c98725949dbc5bbf51a2ce1ae004c74a511clgao return EFI_SUCCESS; 1526446c98725949dbc5bbf51a2ce1ae004c74a511clgao} 153