From: Bret Barkelew <brbar...@microsoft.com> There are a number of Arm-specific accesses that are abstracted behind this. It may need to be refactored to work better across architectures.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3651 Cc: Michael D Kinney <michael.d.kin...@intel.com> Cc: Liming Gao <gaolim...@byosoft.com.cn> Cc: Zhiguang Liu <zhiguang....@intel.com> Cc: Sean Brogan <sean.bro...@microsoft.com> Signed-off-by: Bret Barkelew <bret.barke...@microsoft.com> --- MdePkg/Library/BaseMmuLibNull/BaseMmuLibNull.c | 86 ++++++++++++++++++++ MdePkg/Include/Library/MmuLib.h | 75 +++++++++++++++++ MdePkg/Library/BaseMmuLibNull/BaseMmuLibNull.inf | 28 +++++++ MdePkg/MdePkg.dec | 5 ++ MdePkg/MdePkg.dsc | 2 + 5 files changed, 196 insertions(+) diff --git a/MdePkg/Library/BaseMmuLibNull/BaseMmuLibNull.c b/MdePkg/Library/BaseMmuLibNull/BaseMmuLibNull.c new file mode 100644 index 000000000000..0398bc03f8f7 --- /dev/null +++ b/MdePkg/Library/BaseMmuLibNull/BaseMmuLibNull.c @@ -0,0 +1,86 @@ +/** @file +This lib abstracts some of the MMU accesses currently hardcoded against +an Arm lib. It's likely that this will need to be refactored at some point. + +Copyright (c) Microsoft Corporation. +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include <Uefi.h> +#include <Library/DebugLib.h> + +/** + Bitwise sets the memory attributes on a range of memory based on an attributes mask. + + @param BaseAddress The start of the range for which to set attributes. + @param Length The length of the range. + @param Attributes A bitmask of the attributes to set. See "Physical memory + protection attributes" in UefiSpec.h + + @return EFI_SUCCESS + @return Others + +**/ +EFI_STATUS +EFIAPI +MmuSetAttributes ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes + ) +{ + DEBUG ((DEBUG_ERROR, "%a() NULL implementation used!\n", __FUNCTION__)); + ASSERT (FALSE); + return EFI_UNSUPPORTED; +} + + +/** + Bitwise clears the memory attributes on a range of memory based on an attributes mask. + + @param BaseAddress The start of the range for which to clear attributes. + @param Length The length of the range. + @param Attributes A bitmask of the attributes to clear. See "Physical memory + protection attributes" in UefiSpec.h + + @return EFI_SUCCESS + @return Others + +**/ +EFI_STATUS +EFIAPI +MmuClearAttributes ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes + ) +{ + DEBUG ((DEBUG_ERROR, "%a() NULL implementation used!\n", __FUNCTION__)); + ASSERT (FALSE); + return EFI_UNSUPPORTED; +} + + +/** + Returns the memory attributes on a range of memory. + + @param BaseAddress The start of the range for which to set attributes. + @param Attributes A return pointer for the attributes. + + @return EFI_SUCCESS + @return EFI_INVALID_PARAMETER A return pointer is NULL. + @return Others + +**/ +EFI_STATUS +EFIAPI +MmuGetAttributes ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + OUT UINT64 *Attributes + ) +{ + DEBUG ((DEBUG_ERROR, "%a() NULL implementation used!\n", __FUNCTION__)); + ASSERT (FALSE); + return EFI_UNSUPPORTED; +} diff --git a/MdePkg/Include/Library/MmuLib.h b/MdePkg/Include/Library/MmuLib.h new file mode 100644 index 000000000000..34b363bf712f --- /dev/null +++ b/MdePkg/Include/Library/MmuLib.h @@ -0,0 +1,75 @@ +/** @file +This lib abstracts some of the MMU accesses currently hardcoded against +an Arm lib. It's likely that this will need to be refactored at some point. + +Copyright (c) Microsoft Corporation. +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef MMU_LIB_H_ +#define MMU_LIB_H_ + +#include <Uefi.h> + +/** + Bitwise sets the memory attributes on a range of memory based on an attributes mask. + + @param BaseAddress The start of the range for which to set attributes. + @param Length The length of the range. + @param Attributes A bitmask of the attributes to set. See "Physical memory + protection attributes" in UefiSpec.h + + @return EFI_SUCCESS + @return Others + +**/ +EFI_STATUS +EFIAPI +MmuSetAttributes ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes + ); + + +/** + Bitwise clears the memory attributes on a range of memory based on an attributes mask. + + @param BaseAddress The start of the range for which to clear attributes. + @param Length The length of the range. + @param Attributes A bitmask of the attributes to clear. See "Physical memory + protection attributes" in UefiSpec.h + + @return EFI_SUCCESS + @return Others + +**/ +EFI_STATUS +EFIAPI +MmuClearAttributes ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes + ); + + +/** + Returns the memory attributes on a range of memory. + + @param BaseAddress The start of the range for which to set attributes. + @param Attributes A return pointer for the attributes. + + @return EFI_SUCCESS + @return EFI_INVALID_PARAMETER A return pointer is NULL. + @return Others + +**/ +EFI_STATUS +EFIAPI +MmuGetAttributes ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + OUT UINT64 *Attributes + ); + +#endif diff --git a/MdePkg/Library/BaseMmuLibNull/BaseMmuLibNull.inf b/MdePkg/Library/BaseMmuLibNull/BaseMmuLibNull.inf new file mode 100644 index 000000000000..9f1b4422cc04 --- /dev/null +++ b/MdePkg/Library/BaseMmuLibNull/BaseMmuLibNull.inf @@ -0,0 +1,28 @@ +## @file +# This lib abstracts some of the MMU accesses currently hardcoded against +# an Arm lib. It's likely that this will need to be refactored at some point. +# +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + + +[Defines] + INF_VERSION = 0x00010017 + BASE_NAME = BaseMmuLibNull + FILE_GUID = 97196A48-00C0-4487-802A-CC5540583EEB + VERSION_STRING = 1.0 + MODULE_TYPE = BASE + LIBRARY_CLASS = MmuLib + + +[Sources] + BaseMmuLibNull.c + + +[LibraryClasses] + DebugLib + + +[Packages] + MdePkg/MdePkg.dec diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index 8b18415b107a..43ad9726bf7f 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -267,6 +267,11 @@ [LibraryClasses] # RegisterFilterLib|Include/Library/RegisterFilterLib.h + ## @libraryclass This lib abstracts some of the MMU accesses currently hardcoded against + # an Arm lib. It's likely that this will need to be refactored at some point. + # + MmuLib|Include/Library/MmuLib.h + [LibraryClasses.IA32, LibraryClasses.X64, LibraryClasses.AARCH64] ## @libraryclass Provides services to generate random number. # diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index a04f0aec8c20..c0f9bac787f2 100644 --- a/MdePkg/MdePkg.dsc +++ b/MdePkg/MdePkg.dsc @@ -131,6 +131,8 @@ [Components] MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf + MdePkg/Library/BaseMmuLibNull/BaseMmuLibNull.inf + [Components.IA32, Components.X64, Components.ARM, Components.AARCH64] # # Add UEFI Target Based Unit Tests -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#83620): https://edk2.groups.io/g/devel/message/83620 Mute This Topic: https://groups.io/mt/86971567/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-