mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
OvmfPkg: Add EFI_HOB_RESOURCE_DESCRIPTOR2 support
Update consumers of ResourceDescriptorHobs to understand both EFI_HOB_TYPE_RESOURCE_DESCRIPTOR and EFI_HOB_TYPE_RESOURCE_DESCRIPTOR2. Signed-off-by: Aaron Pop <aaronpop@microsoft.com>
This commit is contained in:
parent
fb9e11c6df
commit
fc4a7ccc44
7 changed files with 55 additions and 51 deletions
|
|
@ -376,7 +376,7 @@ AcceptMemoryForAPsStack (
|
|||
// Parse the HOB list until end of list or matching type is found.
|
||||
//
|
||||
while (!END_OF_HOB_LIST (Hob) && !MemoryRegionFound) {
|
||||
if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
|
||||
if (IS_RESOURCE_DESCRIPTOR_HOB (Hob)) {
|
||||
DEBUG ((DEBUG_INFO, "\nResourceType: 0x%x\n", Hob.ResourceDescriptor->ResourceType));
|
||||
|
||||
if (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_UNACCEPTED) {
|
||||
|
|
@ -384,7 +384,7 @@ AcceptMemoryForAPsStack (
|
|||
PhysicalStart = Hob.ResourceDescriptor->PhysicalStart;
|
||||
PhysicalEnd = PhysicalStart + ResourceLength;
|
||||
|
||||
DEBUG ((DEBUG_INFO, "ResourceAttribute: 0x%x\n", Hob.ResourceDescriptor->ResourceAttribute));
|
||||
DEBUG ((DEBUG_INFO, "ResourceAttribute: 0x%x\n", GET_RESOURCE_HOB_ATTRIBUTE (Hob)));
|
||||
DEBUG ((DEBUG_INFO, "PhysicalStart: 0x%llx\n", PhysicalStart));
|
||||
DEBUG ((DEBUG_INFO, "ResourceLength: 0x%llx\n", ResourceLength));
|
||||
DEBUG ((DEBUG_INFO, "Owner: %g\n\n", &Hob.ResourceDescriptor->Owner));
|
||||
|
|
@ -454,7 +454,7 @@ AcceptMemory (
|
|||
// Parse the HOB list until end of list or matching type is found.
|
||||
//
|
||||
while (!END_OF_HOB_LIST (Hob)) {
|
||||
if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
|
||||
if (IS_RESOURCE_DESCRIPTOR_HOB (Hob)) {
|
||||
if (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_UNACCEPTED) {
|
||||
PhysicalStart = Hob.ResourceDescriptor->PhysicalStart;
|
||||
PhysicalEnd = PhysicalStart + Hob.ResourceDescriptor->ResourceLength;
|
||||
|
|
@ -482,7 +482,7 @@ AcceptMemory (
|
|||
PhysicalEnd = AcceptMemoryEndAddress;
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "ResourceAttribute: 0x%x\n", Hob.ResourceDescriptor->ResourceAttribute));
|
||||
DEBUG ((DEBUG_INFO, "ResourceAttribute: 0x%x\n", GET_RESOURCE_HOB_ATTRIBUTE (Hob)));
|
||||
DEBUG ((DEBUG_INFO, "PhysicalStart: 0x%llx\n", Hob.ResourceDescriptor->PhysicalStart));
|
||||
DEBUG ((DEBUG_INFO, "ResourceLength: 0x%llx\n", Hob.ResourceDescriptor->ResourceLength));
|
||||
DEBUG ((DEBUG_INFO, "Owner: %g\n\n", &Hob.ResourceDescriptor->Owner));
|
||||
|
|
@ -636,8 +636,11 @@ ValidateHobList (
|
|||
break;
|
||||
|
||||
case EFI_HOB_TYPE_RESOURCE_DESCRIPTOR:
|
||||
if (Hob.Header->HobLength != sizeof (EFI_HOB_RESOURCE_DESCRIPTOR)) {
|
||||
DEBUG ((DEBUG_ERROR, "HOB: Hob length is not equal corresponding hob structure. Type: 0x%04x\n", EFI_HOB_TYPE_RESOURCE_DESCRIPTOR));
|
||||
case EFI_HOB_TYPE_RESOURCE_DESCRIPTOR2:
|
||||
if (((GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) && (Hob.Header->HobLength != sizeof (EFI_HOB_RESOURCE_DESCRIPTOR))) ||
|
||||
((GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR2) && (Hob.Header->HobLength != sizeof (EFI_HOB_RESOURCE_DESCRIPTOR2))))
|
||||
{
|
||||
DEBUG ((DEBUG_ERROR, "HOB: Hob length is not equal corresponding hob structure. Type: 0x%04x\n", GET_HOB_TYPE (Hob)));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -646,36 +649,36 @@ ValidateHobList (
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if ((Hob.ResourceDescriptor->ResourceAttribute & (~(EFI_RESOURCE_ATTRIBUTE_PRESENT |
|
||||
EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
|
||||
EFI_RESOURCE_ATTRIBUTE_TESTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_PERSISTENT |
|
||||
EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC |
|
||||
EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC |
|
||||
EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1 |
|
||||
EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2 |
|
||||
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_16_BIT_IO |
|
||||
EFI_RESOURCE_ATTRIBUTE_32_BIT_IO |
|
||||
EFI_RESOURCE_ATTRIBUTE_64_BIT_IO |
|
||||
EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_READ_PROTECTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_PERSISTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_ENCRYPTED|
|
||||
EFI_RESOURCE_ATTRIBUTE_SPECIAL_PURPOSE |
|
||||
EFI_RESOURCE_ATTRIBUTE_MORE_RELIABLE))) != 0)
|
||||
if ((GET_RESOURCE_HOB_ATTRIBUTE (Hob) & (~(EFI_RESOURCE_ATTRIBUTE_PRESENT |
|
||||
EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
|
||||
EFI_RESOURCE_ATTRIBUTE_TESTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_PERSISTENT |
|
||||
EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC |
|
||||
EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC |
|
||||
EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1 |
|
||||
EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2 |
|
||||
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_16_BIT_IO |
|
||||
EFI_RESOURCE_ATTRIBUTE_32_BIT_IO |
|
||||
EFI_RESOURCE_ATTRIBUTE_64_BIT_IO |
|
||||
EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_READ_PROTECTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_PERSISTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTED |
|
||||
EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTABLE |
|
||||
EFI_RESOURCE_ATTRIBUTE_ENCRYPTED|
|
||||
EFI_RESOURCE_ATTRIBUTE_SPECIAL_PURPOSE |
|
||||
EFI_RESOURCE_ATTRIBUTE_MORE_RELIABLE))) != 0)
|
||||
{
|
||||
DEBUG ((DEBUG_ERROR, "HOB: Unknow ResourceDescriptor ResourceAttribute type. Type: 0x%08x\n", Hob.ResourceDescriptor->ResourceAttribute));
|
||||
DEBUG ((DEBUG_ERROR, "HOB: Unknow ResourceDescriptor ResourceAttribute type. Type: 0x%08x\n", GET_RESOURCE_HOB_ATTRIBUTE (Hob)));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ ConstructFwHobList (
|
|||
// Parse the HOB list until end of list or matching type is found.
|
||||
//
|
||||
while (!END_OF_HOB_LIST (Hob)) {
|
||||
if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
|
||||
if (IS_RESOURCE_DESCRIPTOR_HOB (Hob)) {
|
||||
if (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_UNACCEPTED) {
|
||||
PhysicalEnd = Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength;
|
||||
ResourceLength = Hob.ResourceDescriptor->ResourceLength;
|
||||
|
|
|
|||
|
|
@ -101,8 +101,9 @@ TransferTdxHobList (
|
|||
while (!END_OF_HOB_LIST (Hob)) {
|
||||
switch (Hob.Header->HobType) {
|
||||
case EFI_HOB_TYPE_RESOURCE_DESCRIPTOR:
|
||||
case EFI_HOB_TYPE_RESOURCE_DESCRIPTOR2:
|
||||
ResourceType = Hob.ResourceDescriptor->ResourceType;
|
||||
ResourceAttribute = Hob.ResourceDescriptor->ResourceAttribute;
|
||||
ResourceAttribute = GET_RESOURCE_HOB_ATTRIBUTE (Hob);
|
||||
|
||||
if (ResourceType == EFI_RESOURCE_MEMORY_UNACCEPTED) {
|
||||
BuildResourceDescriptorHobForUnacceptedMemory (Hob.ResourceDescriptor);
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ PlatformScanE820Tdx (
|
|||
Hob.Raw = (UINT8 *)(UINTN)FixedPcdGet32 (PcdOvmfSecGhcbBase);
|
||||
|
||||
while (!END_OF_HOB_LIST (Hob)) {
|
||||
if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
|
||||
if (IS_RESOURCE_DESCRIPTOR_HOB (Hob)) {
|
||||
if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_UNACCEPTED) ||
|
||||
(Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ AmdSevSnpInitialize (
|
|||
// Iterate through the system RAM and validate it.
|
||||
//
|
||||
for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
|
||||
if ((Hob.Raw != NULL) && (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR)) {
|
||||
if ((Hob.Raw != NULL) && IS_RESOURCE_DESCRIPTOR_HOB (Hob)) {
|
||||
ResourceHob = Hob.ResourceDescriptor;
|
||||
|
||||
if (ResourceHob->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) {
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ FindInstallPeiMemory (
|
|||
// Iterate through the HOB list
|
||||
Hob.Raw = HobList;
|
||||
while (!END_OF_HOB_LIST (Hob)) {
|
||||
if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
|
||||
if (IS_RESOURCE_DESCRIPTOR_HOB (Hob)) {
|
||||
ResourceHob = (EFI_HOB_RESOURCE_DESCRIPTOR *)Hob.Raw;
|
||||
if ( (ResourceHob->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY)
|
||||
&& (ResourceHob->PhysicalStart > PeiMemoryBase)
|
||||
|
|
|
|||
|
|
@ -196,8 +196,11 @@ GetResourceDescriptor (
|
|||
EFI_PEI_HOB_POINTERS Hob;
|
||||
EFI_HOB_RESOURCE_DESCRIPTOR *ResourceDescriptor = NULL;
|
||||
|
||||
Hob.Raw = GetFirstHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR);
|
||||
while (Hob.Raw != NULL) {
|
||||
for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
|
||||
if (!IS_RESOURCE_DESCRIPTOR_HOB (Hob)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%a:%d: resource type 0x%x %llx %llx\n",
|
||||
|
|
@ -215,9 +218,6 @@ GetResourceDescriptor (
|
|||
ResourceDescriptor = Hob.ResourceDescriptor;
|
||||
break;
|
||||
}
|
||||
|
||||
Hob.Raw = GET_NEXT_HOB (Hob);
|
||||
Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, Hob.Raw);
|
||||
}
|
||||
|
||||
return ResourceDescriptor;
|
||||
|
|
@ -242,8 +242,11 @@ GetHighestResourceDescriptor (
|
|||
EFI_PEI_HOB_POINTERS Hob;
|
||||
EFI_HOB_RESOURCE_DESCRIPTOR *ResourceDescriptor = NULL;
|
||||
|
||||
Hob.Raw = GetFirstHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR);
|
||||
while (Hob.Raw != NULL) {
|
||||
for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
|
||||
if (!IS_RESOURCE_DESCRIPTOR_HOB (Hob)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((Hob.ResourceDescriptor->ResourceType == Type) &&
|
||||
(Hob.ResourceDescriptor->PhysicalStart < End))
|
||||
{
|
||||
|
|
@ -253,9 +256,6 @@ GetHighestResourceDescriptor (
|
|||
ResourceDescriptor = Hob.ResourceDescriptor;
|
||||
}
|
||||
}
|
||||
|
||||
Hob.Raw = GET_NEXT_HOB (Hob);
|
||||
Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, Hob.Raw);
|
||||
}
|
||||
|
||||
return ResourceDescriptor;
|
||||
|
|
@ -285,7 +285,7 @@ SetMmioSharedBit (
|
|||
// Parse the HOB list until end of list or matching type is found.
|
||||
//
|
||||
while (!END_OF_HOB_LIST (Hob)) {
|
||||
if ( (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR)
|
||||
if ( IS_RESOURCE_DESCRIPTOR_HOB (Hob)
|
||||
&& (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_MAPPED_IO))
|
||||
{
|
||||
MemEncryptTdxSetPageSharedBit (
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue