ArmPkg: introduce ArmMmuLib library class

Introduce the library class ArmMmuLib, which encapsulates the functionality
to set up and modify page table entries.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec
index 75c238a..c189117 100644
--- a/ArmPkg/ArmPkg.dec
+++ b/ArmPkg/ArmPkg.dec
@@ -34,6 +34,7 @@
 

 [LibraryClasses.common]

   ArmLib|Include/Library/ArmLib.h

+  ArmMmuLib|Include/Library/ArmMmuLib.h

   SemihostLib|Include/Library/Semihosting.h

   UncachedMemoryAllocationLib|Include/Library/UncachedMemoryAllocationLib.h

   DefaultExceptionHandlerLib|Include/Library/DefaultExceptionHandlerLib.h

diff --git a/ArmPkg/Include/Library/ArmMmuLib.h b/ArmPkg/Include/Library/ArmMmuLib.h
new file mode 100644
index 0000000..c1d4387
--- /dev/null
+++ b/ArmPkg/Include/Library/ArmMmuLib.h
@@ -0,0 +1,65 @@
+/** @file

+

+  Copyright (c) 2015 - 2016, Linaro Ltd. All rights reserved.<BR>

+

+  This program and the accompanying materials

+  are licensed and made available under the terms and conditions of the BSD License

+  which accompanies this distribution.  The full text of the license may be found at

+  http://opensource.org/licenses/bsd-license.php

+

+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

+

+**/

+

+#ifndef __ARM_MMU_LIB__

+#define __ARM_MMU_LIB__

+

+#include <Uefi/UefiBaseType.h>

+

+#include <Library/ArmLib.h>

+

+EFI_STATUS

+EFIAPI

+ArmConfigureMmu (

+  IN  ARM_MEMORY_REGION_DESCRIPTOR  *MemoryTable,

+  OUT VOID                          **TranslationTableBase OPTIONAL,

+  OUT UINTN                         *TranslationTableSize  OPTIONAL

+  );

+

+EFI_STATUS

+EFIAPI

+ArmSetMemoryRegionNoExec (

+  IN  EFI_PHYSICAL_ADDRESS      BaseAddress,

+  IN  UINT64                    Length

+  );

+

+EFI_STATUS

+EFIAPI

+ArmClearMemoryRegionNoExec (

+  IN  EFI_PHYSICAL_ADDRESS      BaseAddress,

+  IN  UINT64                    Length

+  );

+

+EFI_STATUS

+EFIAPI

+ArmSetMemoryRegionReadOnly (

+  IN  EFI_PHYSICAL_ADDRESS      BaseAddress,

+  IN  UINT64                    Length

+  );

+

+EFI_STATUS

+EFIAPI

+ArmClearMemoryRegionReadOnly (

+  IN  EFI_PHYSICAL_ADDRESS      BaseAddress,

+  IN  UINT64                    Length

+  );

+

+VOID

+EFIAPI

+ArmReplaceLiveTranslationEntry (

+  IN  UINT64  *Entry,

+  IN  UINT64  Value

+  );

+

+#endif