/** @file | |
This library retrieve the EFI_BOOT_SERVICES pointer from EFI system table in | |
library's constructor. | |
Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#include <Uefi.h> | |
VOID *gHobList = NULL; | |
/** | |
Local implementation of GUID comparasion that doesn't depend on DebugLib::ASSERT(). | |
This function compares Guid1 to Guid2. If the GUIDs are identical then TRUE is returned. | |
If there are any bit differences in the two GUIDs, then FALSE is returned. | |
@param Guid1 A pointer to a 128 bit GUID. | |
@param Guid2 A pointer to a 128 bit GUID. | |
@retval TRUE Guid1 and Guid2 are identical. | |
@retval FALSE Guid1 and Guid2 are not identical. | |
**/ | |
BOOLEAN | |
LocalCompareGuid ( | |
IN CONST GUID *Guid1, | |
IN CONST GUID *Guid2 | |
) | |
{ | |
UINT64 *Left; | |
UINT64 *Right; | |
Left = (UINT64 *)Guid1; | |
Right = (UINT64 *)Guid2; | |
return (BOOLEAN)(Left[0] == Right[0] && Left[1] == Right[1]); | |
} | |
/** | |
@param ImageHandle The firmware allocated handle for the EFI image. | |
@param SystemTable A pointer to the EFI System Table. | |
@retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
DxeHobListLibConstructor ( | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_SYSTEM_TABLE *SystemTable | |
) | |
{ | |
UINTN Index; | |
for (Index = 0; Index < SystemTable->NumberOfTableEntries; Index++) { | |
if (LocalCompareGuid (&gEfiHobListGuid, &SystemTable->ConfigurationTable[Index].VendorGuid)) { | |
gHobList = SystemTable->ConfigurationTable[Index].VendorTable; | |
return EFI_SUCCESS; | |
} | |
} | |
return EFI_NOT_FOUND; | |
} |