In preparation for introducing an implementation of the EFI memory attributes protocol that is shared between ARM and AArch64, unify the existing code that converts a page table descriptor into a EFI_MEMORY_xxx bitfield, so it can be called from the generic code.
Signed-off-by: Ard Biesheuvel <a...@kernel.org> --- ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c | 17 +++++++++ ArmPkg/Drivers/CpuDxe/Arm/Mmu.c | 38 ++++++++++++++++++++ ArmPkg/Drivers/CpuDxe/CpuDxe.h | 14 ++++++++ 3 files changed, 69 insertions(+) diff --git a/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c b/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c index 8bda11f08a30..4a416743fb8a 100644 --- a/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c +++ b/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c @@ -83,6 +83,23 @@ PageAttributeToGcdAttribute ( return GcdAttributes; } +/** + Convert a arch specific set of page attributes into a mask + of EFI_MEMORY_xx constants. + + @param PageAttributes The set of page attributes. + + @retval The mask of EFI_MEMORY_xx constants. + +**/ +UINT64 +RegionAttributeToGcdAttribute ( + IN UINTN PageAttributes + ) +{ + return PageAttributeToGcdAttribute (PageAttributes); +} + STATIC UINT64 GetFirstPageAttribute ( diff --git a/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c b/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c index 07faab8216ec..8e0dd5d2aaca 100644 --- a/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c +++ b/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c @@ -13,6 +13,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include <Library/MemoryAllocationLib.h> #include "CpuDxe.h" +/** + Convert a set of ARM short descriptor section attributes into a mask + of EFI_MEMORY_xx constants. + + @param SectionAttributes The set of page attributes. + @param GcdAttributes Pointer to the return value. + +**/ +STATIC EFI_STATUS SectionToGcdAttributes ( IN UINT32 SectionAttributes, @@ -74,6 +83,35 @@ SectionToGcdAttributes ( return EFI_SUCCESS; } +/** + Convert a arch specific set of page attributes into a mask + of EFI_MEMORY_xx constants. + + @param PageAttributes The set of page attributes. + + @retval The mask of EFI_MEMORY_xx constants. + +**/ +UINT64 +RegionAttributeToGcdAttribute ( + IN UINTN PageAttributes + ) +{ + UINT64 Result; + + SectionToGcdAttributes (PageAttributes, &Result); + return Result; +} + +/** + Convert a set of ARM short descriptor page attributes into a mask + of EFI_MEMORY_xx constants. + + @param PageAttributes The set of page attributes. + @param GcdAttributes Pointer to the return value. + +**/ +STATIC EFI_STATUS PageToGcdAttributes ( IN UINT32 PageAttributes, diff --git a/ArmPkg/Drivers/CpuDxe/CpuDxe.h b/ArmPkg/Drivers/CpuDxe/CpuDxe.h index ff672390ce51..8cb105dcc841 100644 --- a/ArmPkg/Drivers/CpuDxe/CpuDxe.h +++ b/ArmPkg/Drivers/CpuDxe/CpuDxe.h @@ -126,4 +126,18 @@ SetGcdMemorySpaceAttributes ( IN UINT64 Attributes ); +/** + Convert a arch specific set of page attributes into a mask + of EFI_MEMORY_xx constants. + + @param PageAttributes The set of page attributes. + + @retval The mask of EFI_MEMORY_xx constants. + +**/ +UINT64 +RegionAttributeToGcdAttribute ( + IN UINTN PageAttributes + ); + #endif // CPU_DXE_H_ -- 2.39.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#101113): https://edk2.groups.io/g/devel/message/101113 Mute This Topic: https://groups.io/mt/97585996/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-