mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-23 05:34:31 +02:00
OvmfPkg: Add CloudHv support to PlatformScanE820 utility function.
The PlatformScanE820 utility function is not currently compatible with CloudHv since it relies on the prescence of the "etc/e820" QemuFwCfg file. Update the PlatformScanE820 to iterate through the PVH e820 entries when running on a CloudHv guest. Signed-off-by: Thomas Barrett <tbarrett@crusoeenergy.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
195e59bd0c
commit
bfad87ceec
@ -248,6 +248,67 @@ PlatformReservationConflictCB (
|
|||||||
PlatformInfoHob->PcdPciMmio64Base = NewBase;
|
PlatformInfoHob->PcdPciMmio64Base = NewBase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns PVH memmap
|
||||||
|
@param Entries Pointer to PVH memmap
|
||||||
|
@param Count Number of entries
|
||||||
|
@return EFI_STATUS
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
GetPvhMemmapEntries (
|
||||||
|
struct hvm_memmap_table_entry **Entries,
|
||||||
|
UINT32 *Count
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT32 *PVHResetVectorData;
|
||||||
|
struct hvm_start_info *pvh_start_info;
|
||||||
|
|
||||||
|
PVHResetVectorData = (VOID *)(UINTN)PcdGet32 (PcdXenPvhStartOfDayStructPtr);
|
||||||
|
if (PVHResetVectorData == 0) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
pvh_start_info = (struct hvm_start_info *)(UINTN)PVHResetVectorData[0];
|
||||||
|
|
||||||
|
*Entries = (struct hvm_memmap_table_entry *)(UINTN)pvh_start_info->memmap_paddr;
|
||||||
|
*Count = pvh_start_info->memmap_entries;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
PlatformScanE820Pvh (
|
||||||
|
IN E820_SCAN_CALLBACK Callback,
|
||||||
|
IN OUT EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
||||||
|
)
|
||||||
|
{
|
||||||
|
struct hvm_memmap_table_entry *Memmap;
|
||||||
|
UINT32 MemmapEntriesCount;
|
||||||
|
struct hvm_memmap_table_entry *Entry;
|
||||||
|
EFI_E820_ENTRY64 E820Entry;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
UINT32 Loop;
|
||||||
|
|
||||||
|
Status = GetPvhMemmapEntries (&Memmap, &MemmapEntriesCount);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Loop = 0; Loop < MemmapEntriesCount; Loop++) {
|
||||||
|
Entry = Memmap + Loop;
|
||||||
|
|
||||||
|
if (Entry->type == XEN_HVM_MEMMAP_TYPE_RAM) {
|
||||||
|
E820Entry.BaseAddr = Entry->addr;
|
||||||
|
E820Entry.Length = Entry->size;
|
||||||
|
E820Entry.Type = Entry->type;
|
||||||
|
Callback (&E820Entry, PlatformInfoHob);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Iterate over the entries in QEMU's fw_cfg E820 RAM map, call the
|
Iterate over the entries in QEMU's fw_cfg E820 RAM map, call the
|
||||||
passed callback for each entry.
|
passed callback for each entry.
|
||||||
@ -279,6 +340,10 @@ PlatformScanE820 (
|
|||||||
EFI_E820_ENTRY64 E820Entry;
|
EFI_E820_ENTRY64 E820Entry;
|
||||||
UINTN Processed;
|
UINTN Processed;
|
||||||
|
|
||||||
|
if (PlatformInfoHob->HostBridgeDevId == CLOUDHV_DEVICE_ID) {
|
||||||
|
return PlatformScanE820Pvh (Callback, PlatformInfoHob);
|
||||||
|
}
|
||||||
|
|
||||||
Status = QemuFwCfgFindFile ("etc/e820", &FwCfgItem, &FwCfgSize);
|
Status = QemuFwCfgFindFile ("etc/e820", &FwCfgItem, &FwCfgSize);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
@ -297,36 +362,6 @@ PlatformScanE820 (
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Returns PVH memmap
|
|
||||||
|
|
||||||
@param Entries Pointer to PVH memmap
|
|
||||||
@param Count Number of entries
|
|
||||||
|
|
||||||
@return EFI_STATUS
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
GetPvhMemmapEntries (
|
|
||||||
struct hvm_memmap_table_entry **Entries,
|
|
||||||
UINT32 *Count
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT32 *PVHResetVectorData;
|
|
||||||
struct hvm_start_info *pvh_start_info;
|
|
||||||
|
|
||||||
PVHResetVectorData = (VOID *)(UINTN)PcdGet32 (PcdXenPvhStartOfDayStructPtr);
|
|
||||||
if (PVHResetVectorData == 0) {
|
|
||||||
return EFI_NOT_FOUND;
|
|
||||||
}
|
|
||||||
|
|
||||||
pvh_start_info = (struct hvm_start_info *)(UINTN)PVHResetVectorData[0];
|
|
||||||
|
|
||||||
*Entries = (struct hvm_memmap_table_entry *)(UINTN)pvh_start_info->memmap_paddr;
|
|
||||||
*Count = pvh_start_info->memmap_entries;
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
STATIC
|
STATIC
|
||||||
UINT64
|
UINT64
|
||||||
GetHighestSystemMemoryAddressFromPvhMemmap (
|
GetHighestSystemMemoryAddressFromPvhMemmap (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user