15c08e1173703234cc2913757f237ee916087498aklu/** @file 25c08e1173703234cc2913757f237ee916087498aklu Head file for BDS Architectural Protocol implementation 35c08e1173703234cc2913757f237ee916087498aklu 469fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu NiCopyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR> 5180a5a35cb49699bd249dee19e41cee34c856a58hhtianThis program and the accompanying materials 65c08e1173703234cc2913757f237ee916087498akluare licensed and made available under the terms and conditions of the BSD License 75c08e1173703234cc2913757f237ee916087498akluwhich accompanies this distribution. The full text of the license may be found at 85c08e1173703234cc2913757f237ee916087498akluhttp://opensource.org/licenses/bsd-license.php 95c08e1173703234cc2913757f237ee916087498aklu 105c08e1173703234cc2913757f237ee916087498akluTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 115c08e1173703234cc2913757f237ee916087498akluWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 125c08e1173703234cc2913757f237ee916087498aklu 135c08e1173703234cc2913757f237ee916087498aklu**/ 145c08e1173703234cc2913757f237ee916087498aklu 155c08e1173703234cc2913757f237ee916087498aklu#ifndef _BDS_MODULE_H_ 165c08e1173703234cc2913757f237ee916087498aklu#define _BDS_MODULE_H_ 175c08e1173703234cc2913757f237ee916087498aklu 1879bc7a89f7da2c5c17332a55e514dd69e849ce87mdkinney#include <FrameworkDxe.h> 1967d632277d0650197002996fb98cb3cb41dce9e8lgao#include <IndustryStandard/PeImage.h> 20a2ded1d652cef1f2aaf85e73fc8f5bc5626723beqhuang#include <Guid/MdeModuleHii.h> 215c08e1173703234cc2913757f237ee916087498aklu#include <Guid/FileSystemVolumeLabelInfo.h> 22ab4da12626934cf13fa3f7265cb220eb7f3f31fcgikidy#include <Guid/HiiPlatformSetupFormset.h> 2369fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni#include <Guid/StatusCodeDataTypeVariable.h> 245c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/DevicePath.h> 256cfbf7adff681490789ce9c20bf9344aee6a225edavidhuang#include <IndustryStandard/SmBios.h> 265c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/LoadFile.h> 275c08e1173703234cc2913757f237ee916087498aklu#include <Guid/FileInfo.h> 285c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/HiiConfigRouting.h> 295c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/Bds.h> 306cfbf7adff681490789ce9c20bf9344aee6a225edavidhuang#include <Protocol/Smbios.h> 315c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/UgaDraw.h> 325c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/BlockIo.h> 335c08e1173703234cc2913757f237ee916087498aklu#include <Guid/GlobalVariable.h> 345c08e1173703234cc2913757f237ee916087498aklu#include <Guid/CapsuleVendor.h> 3555e1864e6bff2fb719e0745b35ed386aa74065c3lgao#include <Guid/StatusCodeDataTypeId.h> 36e24fc1032db5d5d2395260f6d7af94aa5a2a0802lgao#include <Guid/LegacyDevOrder.h> 37e24fc1032db5d5d2395260f6d7af94aa5a2a0802lgao#include <Guid/BdsHii.h> 385676ccca070b261ff70e93bc32b5f7496c1b8c83czhang#include <Guid/ConnectConInEvent.h> 39f6c07313d1f7317c328e9ef80cfb272beec0a249lzeng#include <Guid/Performance.h> 40566771b0a70a4ec637420c4b96a1415348bf2f12czhang#include <Guid/FmpCapsule.h> 415c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/GenericMemoryTest.h> 425c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/FormBrowser2.h> 435c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/HiiConfigAccess.h> 445c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/GraphicsOutput.h> 455c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/SimpleFileSystem.h> 465c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/HiiDatabase.h> 475c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/HiiString.h> 485c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/SerialIo.h> 495c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/LegacyBios.h> 505c08e1173703234cc2913757f237ee916087498aklu#include <Protocol/SimpleTextInEx.h> 51ab4da12626934cf13fa3f7265cb220eb7f3f31fcgikidy#include <Protocol/DriverHealth.h> 52a637802c2f8765549cf41a5694f53860b24601c9xdu#include <Protocol/BootLogo.h> 53ff8438477f2dcea28149514de25368ac0b2c02eeniruiyu#include <Protocol/VariableLock.h> 545c08e1173703234cc2913757f237ee916087498aklu 555c08e1173703234cc2913757f237ee916087498aklu#include <Library/UefiDriverEntryPoint.h> 565c08e1173703234cc2913757f237ee916087498aklu#include <Library/PrintLib.h> 575c08e1173703234cc2913757f237ee916087498aklu#include <Library/DebugLib.h> 585c08e1173703234cc2913757f237ee916087498aklu#include <Library/BaseMemoryLib.h> 595c08e1173703234cc2913757f237ee916087498aklu#include <Library/UefiBootServicesTableLib.h> 605c08e1173703234cc2913757f237ee916087498aklu#include <Library/UefiLib.h> 615c08e1173703234cc2913757f237ee916087498aklu#include <Library/MemoryAllocationLib.h> 625c08e1173703234cc2913757f237ee916087498aklu#include <Library/PerformanceLib.h> 635c08e1173703234cc2913757f237ee916087498aklu#include <Library/ReportStatusCodeLib.h> 645c08e1173703234cc2913757f237ee916087498aklu#include <Library/UefiRuntimeServicesTableLib.h> 655c08e1173703234cc2913757f237ee916087498aklu#include <Library/HobLib.h> 665c08e1173703234cc2913757f237ee916087498aklu#include <Library/BaseLib.h> 675c08e1173703234cc2913757f237ee916087498aklu#include <Library/DevicePathLib.h> 685c08e1173703234cc2913757f237ee916087498aklu#include <Library/PcdLib.h> 695c08e1173703234cc2913757f237ee916087498aklu#include <Library/CapsuleLib.h> 705c08e1173703234cc2913757f237ee916087498aklu#include <Library/HiiLib.h> 71f6f910dd125144707e3516bbb517b8ec7a388c06rsun#include <Library/DevicePathLib.h> 7233bb6326576a3f4f722b60d8a8d996af882009d1qhuang#include <Library/UefiHiiServicesLib.h> 735c08e1173703234cc2913757f237ee916087498aklu 745c08e1173703234cc2913757f237ee916087498aklu#include <Library/GenericBdsLib.h> 755c08e1173703234cc2913757f237ee916087498aklu#include <Library/PlatformBdsLib.h> 765c08e1173703234cc2913757f237ee916087498aklu 77f6f910dd125144707e3516bbb517b8ec7a388c06rsun#pragma pack(1) 78f6f910dd125144707e3516bbb517b8ec7a388c06rsun 79f6f910dd125144707e3516bbb517b8ec7a388c06rsun/// 80f6f910dd125144707e3516bbb517b8ec7a388c06rsun/// HII specific Vendor Device Path definition. 81f6f910dd125144707e3516bbb517b8ec7a388c06rsun/// 82f6f910dd125144707e3516bbb517b8ec7a388c06rsuntypedef struct { 83f6f910dd125144707e3516bbb517b8ec7a388c06rsun VENDOR_DEVICE_PATH VendorDevicePath; 84f6f910dd125144707e3516bbb517b8ec7a388c06rsun EFI_DEVICE_PATH_PROTOCOL End; 85f6f910dd125144707e3516bbb517b8ec7a388c06rsun} HII_VENDOR_DEVICE_PATH; 86f6f910dd125144707e3516bbb517b8ec7a388c06rsun 87f6f910dd125144707e3516bbb517b8ec7a388c06rsun#pragma pack() 88f6f910dd125144707e3516bbb517b8ec7a388c06rsun 895c08e1173703234cc2913757f237ee916087498aklu/** 905c08e1173703234cc2913757f237ee916087498aklu 915c08e1173703234cc2913757f237ee916087498aklu Show progress bar with title above it. It only works in Graphics mode. 925c08e1173703234cc2913757f237ee916087498aklu 935c08e1173703234cc2913757f237ee916087498aklu @param TitleForeground Foreground color for Title. 945c08e1173703234cc2913757f237ee916087498aklu @param TitleBackground Background color for Title. 955c08e1173703234cc2913757f237ee916087498aklu @param Title Title above progress bar. 965c08e1173703234cc2913757f237ee916087498aklu @param ProgressColor Progress bar color. 975c08e1173703234cc2913757f237ee916087498aklu @param Progress Progress (0-100) 985c08e1173703234cc2913757f237ee916087498aklu @param PreviousValue The previous value of the progress. 995c08e1173703234cc2913757f237ee916087498aklu 1005c08e1173703234cc2913757f237ee916087498aklu @retval EFI_STATUS Success update the progress bar 1015c08e1173703234cc2913757f237ee916087498aklu 1025c08e1173703234cc2913757f237ee916087498aklu**/ 1035c08e1173703234cc2913757f237ee916087498akluEFI_STATUS 1045c08e1173703234cc2913757f237ee916087498akluPlatformBdsShowProgress ( 1055c08e1173703234cc2913757f237ee916087498aklu IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground, 1065c08e1173703234cc2913757f237ee916087498aklu IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground, 1075c08e1173703234cc2913757f237ee916087498aklu IN CHAR16 *Title, 1085c08e1173703234cc2913757f237ee916087498aklu IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor, 1095c08e1173703234cc2913757f237ee916087498aklu IN UINTN Progress, 1105c08e1173703234cc2913757f237ee916087498aklu IN UINTN PreviousValue 1115c08e1173703234cc2913757f237ee916087498aklu ); 1125c08e1173703234cc2913757f237ee916087498aklu 1135c08e1173703234cc2913757f237ee916087498aklu// 1145c08e1173703234cc2913757f237ee916087498aklu// Prototypes 1155c08e1173703234cc2913757f237ee916087498aklu// 1165c08e1173703234cc2913757f237ee916087498aklu 1175c08e1173703234cc2913757f237ee916087498aklu/** 1185c08e1173703234cc2913757f237ee916087498aklu 1195c08e1173703234cc2913757f237ee916087498aklu Install Boot Device Selection Protocol 1205c08e1173703234cc2913757f237ee916087498aklu 1215c08e1173703234cc2913757f237ee916087498aklu @param ImageHandle The image handle. 1225c08e1173703234cc2913757f237ee916087498aklu @param SystemTable The system table. 1235c08e1173703234cc2913757f237ee916087498aklu 1245c08e1173703234cc2913757f237ee916087498aklu @retval EFI_SUCEESS BDS has finished initializing. 1255c08e1173703234cc2913757f237ee916087498aklu Return the dispatcher and recall BDS.Entry 1265c08e1173703234cc2913757f237ee916087498aklu @retval Other Return status from AllocatePool() or gBS->InstallProtocolInterface 1275c08e1173703234cc2913757f237ee916087498aklu 1285c08e1173703234cc2913757f237ee916087498aklu**/ 1295c08e1173703234cc2913757f237ee916087498akluEFI_STATUS 1305c08e1173703234cc2913757f237ee916087498akluEFIAPI 1315c08e1173703234cc2913757f237ee916087498akluBdsInitialize ( 1325c08e1173703234cc2913757f237ee916087498aklu IN EFI_HANDLE ImageHandle, 1335c08e1173703234cc2913757f237ee916087498aklu IN EFI_SYSTEM_TABLE *SystemTable 1345c08e1173703234cc2913757f237ee916087498aklu ); 1355c08e1173703234cc2913757f237ee916087498aklu 1365c08e1173703234cc2913757f237ee916087498aklu/** 1375c08e1173703234cc2913757f237ee916087498aklu 1385c08e1173703234cc2913757f237ee916087498aklu Service routine for BdsInstance->Entry(). Devices are connected, the 1395c08e1173703234cc2913757f237ee916087498aklu consoles are initialized, and the boot options are tried. 1405c08e1173703234cc2913757f237ee916087498aklu 1415c08e1173703234cc2913757f237ee916087498aklu @param This Protocol Instance structure. 1425c08e1173703234cc2913757f237ee916087498aklu 1435c08e1173703234cc2913757f237ee916087498aklu**/ 1445c08e1173703234cc2913757f237ee916087498akluVOID 1455c08e1173703234cc2913757f237ee916087498akluEFIAPI 1465c08e1173703234cc2913757f237ee916087498akluBdsEntry ( 1475c08e1173703234cc2913757f237ee916087498aklu IN EFI_BDS_ARCH_PROTOCOL *This 1485c08e1173703234cc2913757f237ee916087498aklu ); 1495c08e1173703234cc2913757f237ee916087498aklu 15019bf20e11acd88a02922201f97e6d64edcd16390lgao 15119bf20e11acd88a02922201f97e6d64edcd16390lgao/** 15219bf20e11acd88a02922201f97e6d64edcd16390lgao Perform the memory test base on the memory test intensive level, 15319bf20e11acd88a02922201f97e6d64edcd16390lgao and update the memory resource. 15419bf20e11acd88a02922201f97e6d64edcd16390lgao 15519bf20e11acd88a02922201f97e6d64edcd16390lgao @param Level The memory test intensive level. 15619bf20e11acd88a02922201f97e6d64edcd16390lgao 15719bf20e11acd88a02922201f97e6d64edcd16390lgao @retval EFI_STATUS Success test all the system memory and update 15819bf20e11acd88a02922201f97e6d64edcd16390lgao the memory resource 15919bf20e11acd88a02922201f97e6d64edcd16390lgao 16019bf20e11acd88a02922201f97e6d64edcd16390lgao**/ 16119bf20e11acd88a02922201f97e6d64edcd16390lgaoEFI_STATUS 1628861fc792ce90cb7ab18a91bd3d6596d77ee0170jljustenEFIAPI 16319bf20e11acd88a02922201f97e6d64edcd16390lgaoBdsMemoryTest ( 16419bf20e11acd88a02922201f97e6d64edcd16390lgao IN EXTENDMEM_COVERAGE_LEVEL Level 16519bf20e11acd88a02922201f97e6d64edcd16390lgao ); 16619bf20e11acd88a02922201f97e6d64edcd16390lgao 16719bf20e11acd88a02922201f97e6d64edcd16390lgao/** 16819bf20e11acd88a02922201f97e6d64edcd16390lgao 16919bf20e11acd88a02922201f97e6d64edcd16390lgao This routine is called to see if there are any capsules we need to process. 17019bf20e11acd88a02922201f97e6d64edcd16390lgao If the boot mode is not UPDATE, then we do nothing. Otherwise find the 17119bf20e11acd88a02922201f97e6d64edcd16390lgao capsule HOBS and produce firmware volumes for them via the DXE service. 17219bf20e11acd88a02922201f97e6d64edcd16390lgao Then call the dispatcher to dispatch drivers from them. Finally, check 17319bf20e11acd88a02922201f97e6d64edcd16390lgao the status of the updates. 17419bf20e11acd88a02922201f97e6d64edcd16390lgao 17519bf20e11acd88a02922201f97e6d64edcd16390lgao This function should be called by BDS in case we need to do some 17619bf20e11acd88a02922201f97e6d64edcd16390lgao sort of processing even if there is no capsule to process. We 17719bf20e11acd88a02922201f97e6d64edcd16390lgao need to do this if an earlier update went away and we need to 17819bf20e11acd88a02922201f97e6d64edcd16390lgao clear the capsule variable so on the next reset PEI does not see it and 17919bf20e11acd88a02922201f97e6d64edcd16390lgao think there is a capsule available. 18019bf20e11acd88a02922201f97e6d64edcd16390lgao 18119bf20e11acd88a02922201f97e6d64edcd16390lgao @param BootMode the current boot mode 18219bf20e11acd88a02922201f97e6d64edcd16390lgao 18319bf20e11acd88a02922201f97e6d64edcd16390lgao @retval EFI_INVALID_PARAMETER boot mode is not correct for an update 18419bf20e11acd88a02922201f97e6d64edcd16390lgao @retval EFI_SUCCESS There is no error when processing capsule 18519bf20e11acd88a02922201f97e6d64edcd16390lgao 18619bf20e11acd88a02922201f97e6d64edcd16390lgao**/ 18719bf20e11acd88a02922201f97e6d64edcd16390lgaoEFI_STATUS 1888861fc792ce90cb7ab18a91bd3d6596d77ee0170jljustenEFIAPI 18919bf20e11acd88a02922201f97e6d64edcd16390lgaoBdsProcessCapsules ( 19019bf20e11acd88a02922201f97e6d64edcd16390lgao EFI_BOOT_MODE BootMode 19119bf20e11acd88a02922201f97e6d64edcd16390lgao ); 19219bf20e11acd88a02922201f97e6d64edcd16390lgao 19369fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni/** 19469fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni Set the variable and report the error through status code upon failure. 19569fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni 19669fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @param VariableName A Null-terminated string that is the name of the vendor's variable. 19769fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni Each VariableName is unique for each VendorGuid. VariableName must 19869fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni contain 1 or more characters. If VariableName is an empty string, 19969fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni then EFI_INVALID_PARAMETER is returned. 20069fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @param VendorGuid A unique identifier for the vendor. 20169fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @param Attributes Attributes bitmask to set for the variable. 20269fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @param DataSize The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE, 20369fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, or 20469fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero 20569fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is 20669fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni set, then a SetVariable() call with a DataSize of zero will not cause any change to 20769fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni the variable value (the timestamp associated with the variable may be updated however 20869fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni even if no new data value is provided,see the description of the 20969fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not 21069fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated). 21169fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @param Data The contents for the variable. 21269fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni 21369fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @retval EFI_SUCCESS The firmware has successfully stored the variable and its data as 21469fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni defined by the Attributes. 21569fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits, name, and GUID was supplied, or the 21669fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni DataSize exceeds the maximum allowed. 21769fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @retval EFI_INVALID_PARAMETER VariableName is an empty string. 21869fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data. 21969fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error. 22069fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @retval EFI_WRITE_PROTECTED The variable in question is read-only. 22169fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @retval EFI_WRITE_PROTECTED The variable in question cannot be deleted. 22269fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 22369fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni or EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS being set, but the AuthInfo 22469fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni does NOT pass the validation check carried out by the firmware. 22569fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni 22669fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni @retval EFI_NOT_FOUND The variable trying to be updated or deleted was not found. 22769fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni**/ 22869fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu NiEFI_STATUS 22969fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu NiBdsDxeSetVariableAndReportStatusCodeOnError ( 23069fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni IN CHAR16 *VariableName, 23169fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni IN EFI_GUID *VendorGuid, 23269fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni IN UINT32 Attributes, 23369fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni IN UINTN DataSize, 23469fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni IN VOID *Data 23569fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni ); 23669fc8f080e07ea026e8fbb8610cfb89c099d6db2Ruiyu Ni 2375c08e1173703234cc2913757f237ee916087498aklu#endif 238