HiiResourcesSample.c revision d90434ccb53d7ca320c84624bca8cf4ba8542196
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 56446c98725949dbc5bbf51a2ce1ae004c74a511clgaoCopyright (c) 2009, Intel Corporation 66446c98725949dbc5bbf51a2ce1ae004c74a511clgaoAll rights reserved. This 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> 176446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Protocol/HiiPackageList.h> 186446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/DevicePathLib.h> 196446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/UefiDriverEntryPoint.h> 206446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/UefiBootServicesTableLib.h> 216446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/UefiHiiServicesLib.h> 226446c98725949dbc5bbf51a2ce1ae004c74a511clgao#include <Library/HiiLib.h> 236446c98725949dbc5bbf51a2ce1ae004c74a511clgao 246446c98725949dbc5bbf51a2ce1ae004c74a511clgao#pragma pack(1) 256446c98725949dbc5bbf51a2ce1ae004c74a511clgao/// 266446c98725949dbc5bbf51a2ce1ae004c74a511clgao/// HII specific Vendor Device Path definition. 276446c98725949dbc5bbf51a2ce1ae004c74a511clgao/// 286446c98725949dbc5bbf51a2ce1ae004c74a511clgaotypedef struct { 296446c98725949dbc5bbf51a2ce1ae004c74a511clgao VENDOR_DEVICE_PATH VendorDevicePath; 306446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_DEVICE_PATH_PROTOCOL End; 316446c98725949dbc5bbf51a2ce1ae004c74a511clgao} HII_VENDOR_DEVICE_PATH; 326446c98725949dbc5bbf51a2ce1ae004c74a511clgao#pragma pack() 336446c98725949dbc5bbf51a2ce1ae004c74a511clgao 346446c98725949dbc5bbf51a2ce1ae004c74a511clgao 356446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFI_HII_HANDLE mHiiHandle = NULL; 366446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFI_HANDLE mDriverHandle = NULL; 376446c98725949dbc5bbf51a2ce1ae004c74a511clgao 386446c98725949dbc5bbf51a2ce1ae004c74a511clgaoHII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = { 396446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 406446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 416446c98725949dbc5bbf51a2ce1ae004c74a511clgao HARDWARE_DEVICE_PATH, 426446c98725949dbc5bbf51a2ce1ae004c74a511clgao HW_VENDOR_DP, 436446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 446446c98725949dbc5bbf51a2ce1ae004c74a511clgao (UINT8) (sizeof (VENDOR_DEVICE_PATH)), 456446c98725949dbc5bbf51a2ce1ae004c74a511clgao (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) 466446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 476446c98725949dbc5bbf51a2ce1ae004c74a511clgao }, 486446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 496446c98725949dbc5bbf51a2ce1ae004c74a511clgao // {D49D2EB0-44D5-4621-9FD6-1A92C9109B99} 506446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 516446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 0xD49D2EB0, 0x44D5, 0x4621, { 0x9F, 0xD6, 0x1A, 0x92, 0xC9, 0x10, 0x9B, 0x99 } } 526446c98725949dbc5bbf51a2ce1ae004c74a511clgao }, 536446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 546446c98725949dbc5bbf51a2ce1ae004c74a511clgao END_DEVICE_PATH_TYPE, 556446c98725949dbc5bbf51a2ce1ae004c74a511clgao END_ENTIRE_DEVICE_PATH_SUBTYPE, 566446c98725949dbc5bbf51a2ce1ae004c74a511clgao { 576446c98725949dbc5bbf51a2ce1ae004c74a511clgao (UINT8) (END_DEVICE_PATH_LENGTH), 586446c98725949dbc5bbf51a2ce1ae004c74a511clgao (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8) 596446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 606446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 616446c98725949dbc5bbf51a2ce1ae004c74a511clgao}; 626446c98725949dbc5bbf51a2ce1ae004c74a511clgao 636446c98725949dbc5bbf51a2ce1ae004c74a511clgao/** 646446c98725949dbc5bbf51a2ce1ae004c74a511clgao Main entry for this driver. 656446c98725949dbc5bbf51a2ce1ae004c74a511clgao 666446c98725949dbc5bbf51a2ce1ae004c74a511clgao @param[in] ImageHandle Image handle this driver. 676446c98725949dbc5bbf51a2ce1ae004c74a511clgao @param[in] SystemTable Pointer to SystemTable. 686446c98725949dbc5bbf51a2ce1ae004c74a511clgao 696446c98725949dbc5bbf51a2ce1ae004c74a511clgao @retval EFI_SUCESS This function always complete successfully. 706446c98725949dbc5bbf51a2ce1ae004c74a511clgao 716446c98725949dbc5bbf51a2ce1ae004c74a511clgao**/ 726446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFI_STATUS 736446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFIAPI 746446c98725949dbc5bbf51a2ce1ae004c74a511clgaoHiiResourcesSampleInit ( 756446c98725949dbc5bbf51a2ce1ae004c74a511clgao IN EFI_HANDLE ImageHandle, 766446c98725949dbc5bbf51a2ce1ae004c74a511clgao IN EFI_SYSTEM_TABLE *SystemTable 776446c98725949dbc5bbf51a2ce1ae004c74a511clgao ) 786446c98725949dbc5bbf51a2ce1ae004c74a511clgao{ 796446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_STATUS Status; 806446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_HII_PACKAGE_LIST_HEADER *PackageList; 816446c98725949dbc5bbf51a2ce1ae004c74a511clgao 826446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 836446c98725949dbc5bbf51a2ce1ae004c74a511clgao // Retrieve HII package list from ImageHandle 846446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 856446c98725949dbc5bbf51a2ce1ae004c74a511clgao Status = gBS->OpenProtocol ( 866446c98725949dbc5bbf51a2ce1ae004c74a511clgao ImageHandle, 876446c98725949dbc5bbf51a2ce1ae004c74a511clgao &gEfiHiiPackageListProtocolGuid, 886446c98725949dbc5bbf51a2ce1ae004c74a511clgao (VOID **) &PackageList, 896446c98725949dbc5bbf51a2ce1ae004c74a511clgao ImageHandle, 906446c98725949dbc5bbf51a2ce1ae004c74a511clgao NULL, 916446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_OPEN_PROTOCOL_GET_PROTOCOL 926446c98725949dbc5bbf51a2ce1ae004c74a511clgao ); 936446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (EFI_ERROR (Status)) { 946446c98725949dbc5bbf51a2ce1ae004c74a511clgao return Status; 956446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 966446c98725949dbc5bbf51a2ce1ae004c74a511clgao 976446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 986446c98725949dbc5bbf51a2ce1ae004c74a511clgao // Publish sample Fromset 996446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 1006446c98725949dbc5bbf51a2ce1ae004c74a511clgao Status = gBS->InstallProtocolInterface ( 1016446c98725949dbc5bbf51a2ce1ae004c74a511clgao &mDriverHandle, 1026446c98725949dbc5bbf51a2ce1ae004c74a511clgao &gEfiDevicePathProtocolGuid, 1036446c98725949dbc5bbf51a2ce1ae004c74a511clgao EFI_NATIVE_INTERFACE, 1046446c98725949dbc5bbf51a2ce1ae004c74a511clgao &mHiiVendorDevicePath 1056446c98725949dbc5bbf51a2ce1ae004c74a511clgao ); 1066446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (EFI_ERROR (Status)) { 1076446c98725949dbc5bbf51a2ce1ae004c74a511clgao return Status; 1086446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 1096446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1106446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 111d90434ccb53d7ca320c84624bca8cf4ba8542196xdu // Publish HII package list to HII Database. 1126446c98725949dbc5bbf51a2ce1ae004c74a511clgao // 1136446c98725949dbc5bbf51a2ce1ae004c74a511clgao Status = gHiiDatabase->NewPackageList ( 1146446c98725949dbc5bbf51a2ce1ae004c74a511clgao gHiiDatabase, 1156446c98725949dbc5bbf51a2ce1ae004c74a511clgao PackageList, 1166446c98725949dbc5bbf51a2ce1ae004c74a511clgao mDriverHandle, 1176446c98725949dbc5bbf51a2ce1ae004c74a511clgao &mHiiHandle 1186446c98725949dbc5bbf51a2ce1ae004c74a511clgao ); 1196446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (EFI_ERROR (Status)) { 1206446c98725949dbc5bbf51a2ce1ae004c74a511clgao return Status; 1216446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 1226446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1236446c98725949dbc5bbf51a2ce1ae004c74a511clgao return EFI_SUCCESS; 1246446c98725949dbc5bbf51a2ce1ae004c74a511clgao} 1256446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1266446c98725949dbc5bbf51a2ce1ae004c74a511clgao/** 1276446c98725949dbc5bbf51a2ce1ae004c74a511clgao Unloads the application and its installed protocol. 1286446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1296446c98725949dbc5bbf51a2ce1ae004c74a511clgao @param[in] ImageHandle Handle that identifies the image to be unloaded. 1306446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1316446c98725949dbc5bbf51a2ce1ae004c74a511clgao @retval EFI_SUCCESS The image has been unloaded. 1326446c98725949dbc5bbf51a2ce1ae004c74a511clgao**/ 1336446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFI_STATUS 1346446c98725949dbc5bbf51a2ce1ae004c74a511clgaoEFIAPI 1356446c98725949dbc5bbf51a2ce1ae004c74a511clgaoHiiResourcesSampleUnload ( 1366446c98725949dbc5bbf51a2ce1ae004c74a511clgao IN EFI_HANDLE ImageHandle 1376446c98725949dbc5bbf51a2ce1ae004c74a511clgao ) 1386446c98725949dbc5bbf51a2ce1ae004c74a511clgao{ 1396446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (mDriverHandle != NULL) { 1406446c98725949dbc5bbf51a2ce1ae004c74a511clgao gBS->UninstallProtocolInterface ( 1416446c98725949dbc5bbf51a2ce1ae004c74a511clgao mDriverHandle, 1426446c98725949dbc5bbf51a2ce1ae004c74a511clgao &gEfiDevicePathProtocolGuid, 1436446c98725949dbc5bbf51a2ce1ae004c74a511clgao &mHiiVendorDevicePath 1446446c98725949dbc5bbf51a2ce1ae004c74a511clgao ); 1456446c98725949dbc5bbf51a2ce1ae004c74a511clgao mDriverHandle = NULL; 1466446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 1476446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1486446c98725949dbc5bbf51a2ce1ae004c74a511clgao if (mHiiHandle != NULL) { 1496446c98725949dbc5bbf51a2ce1ae004c74a511clgao HiiRemovePackages (mHiiHandle); 1506446c98725949dbc5bbf51a2ce1ae004c74a511clgao mHiiHandle = NULL; 1516446c98725949dbc5bbf51a2ce1ae004c74a511clgao } 1526446c98725949dbc5bbf51a2ce1ae004c74a511clgao 1536446c98725949dbc5bbf51a2ce1ae004c74a511clgao return EFI_SUCCESS; 1546446c98725949dbc5bbf51a2ce1ae004c74a511clgao} 155