mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 07:04:28 +02:00
Ring3: Added MakeUserPageTableTemplate() for AARCH64.
This commit is contained in:
parent
1135998eae
commit
2a0b76c4b9
@ -21,6 +21,14 @@ ArmConfigureMmu (
|
|||||||
OUT UINTN *TranslationTableSize OPTIONAL
|
OUT UINTN *TranslationTableSize OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
ArmMakeUserPageTableTemplate (
|
||||||
|
IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable,
|
||||||
|
OUT UINTN *TranslationTableBase,
|
||||||
|
OUT UINTN *TranslationTableSize
|
||||||
|
);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ArmReplaceLiveTranslationEntry (
|
ArmReplaceLiveTranslationEntry (
|
||||||
|
@ -786,6 +786,53 @@ FreeTranslationTable:
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
ArmMakeUserPageTableTemplate (
|
||||||
|
IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable,
|
||||||
|
OUT UINTN *TranslationTableBase,
|
||||||
|
OUT UINTN *TranslationTableSize
|
||||||
|
)
|
||||||
|
{
|
||||||
|
VOID *TranslationTable;
|
||||||
|
UINTN MaxAddressBits;
|
||||||
|
UINT64 MaxAddress;
|
||||||
|
UINTN T0SZ;
|
||||||
|
UINTN RootTableEntryCount;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
MaxAddressBits = MIN (ArmGetPhysicalAddressBits (), MAX_VA_BITS);
|
||||||
|
MaxAddress = LShiftU64 (1ULL, MaxAddressBits) - 1;
|
||||||
|
|
||||||
|
T0SZ = 64 - MaxAddressBits;
|
||||||
|
RootTableEntryCount = GetRootTableEntryCount (T0SZ);
|
||||||
|
|
||||||
|
TranslationTable = AllocatePages (1);
|
||||||
|
if (TranslationTable == NULL) {
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZeroMem (TranslationTable, RootTableEntryCount * sizeof (UINT64));
|
||||||
|
|
||||||
|
Status = UpdateRegionMapping (
|
||||||
|
MemoryTable->VirtualBase,
|
||||||
|
MemoryTable->Length,
|
||||||
|
ArmMemoryAttributeToPageAttribute (MemoryTable->Attributes),
|
||||||
|
0,
|
||||||
|
TranslationTable,
|
||||||
|
FALSE
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
FreePages (TranslationTable, 1);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
*TranslationTableBase = (UINTN)TranslationTable;
|
||||||
|
*TranslationTableSize = RootTableEntryCount * sizeof (UINT64);
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
RETURN_STATUS
|
RETURN_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ArmMmuBaseLibConstructor (
|
ArmMmuBaseLibConstructor (
|
||||||
|
@ -152,6 +152,9 @@
|
|||||||
gEfiGlobalVariableGuid ## SOMETIMES_CONSUMES ## SysCall
|
gEfiGlobalVariableGuid ## SOMETIMES_CONSUMES ## SysCall
|
||||||
gEarlyPL011BaseAddressGuid ## CONSUMES
|
gEarlyPL011BaseAddressGuid ## CONSUMES
|
||||||
|
|
||||||
|
[Guids.ARM, Guids.AARCH64]
|
||||||
|
gArmVirtSystemMemorySizeGuid ## CONSUMES
|
||||||
|
|
||||||
[Ppis]
|
[Ppis]
|
||||||
gEfiVectorHandoffInfoPpiGuid ## UNDEFINED # HOB
|
gEfiVectorHandoffInfoPpiGuid ## UNDEFINED # HOB
|
||||||
|
|
||||||
@ -232,6 +235,9 @@
|
|||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaBase ## CONSUMES
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaBase ## CONSUMES
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaSize ## CONSUMES
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaSize ## CONSUMES
|
||||||
|
|
||||||
|
[Pcd.ARM, Pcd.AARCH64]
|
||||||
|
gArmTokenSpaceGuid.PcdSystemMemoryBase ## CONSUMES
|
||||||
|
|
||||||
# [Hob]
|
# [Hob]
|
||||||
# RESOURCE_DESCRIPTOR ## CONSUMES
|
# RESOURCE_DESCRIPTOR ## CONSUMES
|
||||||
# MEMORY_ALLOCATION ## CONSUMES
|
# MEMORY_ALLOCATION ## CONSUMES
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include <Chipset/AArch64.h>
|
#include <Chipset/AArch64.h>
|
||||||
#include <Library/ArmLib.h>
|
#include <Library/ArmLib.h>
|
||||||
|
#include <Library/ArmMmuLib.h>
|
||||||
#include <Library/DefaultExceptionHandlerLib.h>
|
#include <Library/DefaultExceptionHandlerLib.h>
|
||||||
|
|
||||||
#include "DxeMain.h"
|
#include "DxeMain.h"
|
||||||
@ -89,6 +90,34 @@ SysCallBootService (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
MakeUserPageTableTemplate (
|
||||||
|
OUT UINTN *UserPageTableTemplate,
|
||||||
|
OUT UINTN *UserPageTableTemplateSize
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ARM_MEMORY_REGION_DESCRIPTOR Descriptor;
|
||||||
|
VOID *MemorySizeHob;
|
||||||
|
|
||||||
|
MemorySizeHob = GetFirstGuidHob (&gArmVirtSystemMemorySizeGuid);
|
||||||
|
ASSERT (MemorySizeHob != NULL);
|
||||||
|
if (MemorySizeHob == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Descriptor.PhysicalBase = PcdGet64 (PcdSystemMemoryBase);
|
||||||
|
Descriptor.VirtualBase = Descriptor.PhysicalBase;
|
||||||
|
Descriptor.Length = *(UINT64 *)GET_GUID_HOB_DATA (MemorySizeHob);
|
||||||
|
Descriptor.Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
|
||||||
|
|
||||||
|
ArmMakeUserPageTableTemplate (
|
||||||
|
&Descriptor,
|
||||||
|
UserPageTableTemplate,
|
||||||
|
UserPageTableTemplateSize
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
InitializeMsr (
|
InitializeMsr (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user