X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=ArmPkg%2FInclude%2FLibrary%2FArmLib.h;h=58116663b28d8d9202af7c8a483cfae1b2d4a31b;hp=5663844b1f1890a6fdb91231f4cec7bb0cd2c732;hb=cf93a37859e6d06efdbc5b1a91a6bf66f06b578b;hpb=e359565ec271d7a3fc863293e9f1f607c938f0ce
diff --git a/ArmPkg/Include/Library/ArmLib.h b/ArmPkg/Include/Library/ArmLib.h
index 5663844b1f..58116663b2 100644
--- a/ArmPkg/Include/Library/ArmLib.h
+++ b/ArmPkg/Include/Library/ArmLib.h
@@ -1,7 +1,7 @@
/** @file
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
- Copyright (c) 2011 - 2012, ARM Ltd. All rights reserved.
+ Copyright (c) 2011 - 2015, ARM Ltd. All rights reserved.
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -18,10 +18,12 @@
#include
-#ifdef ARM_CPU_ARMv6
-#include
+#ifdef MDE_CPU_ARM
+ #include
+#elif defined(MDE_CPU_AARCH64)
+ #include
#else
-#include
+ #error "Unknown chipset."
#endif
typedef enum {
@@ -70,7 +72,7 @@ typedef enum {
typedef struct {
EFI_PHYSICAL_ADDRESS PhysicalBase;
EFI_VIRTUAL_ADDRESS VirtualBase;
- UINTN Length;
+ UINT64 Length;
ARM_MEMORY_REGION_ATTRIBUTES Attributes;
} ARM_MEMORY_REGION_DESCRIPTOR;
@@ -112,14 +114,16 @@ typedef enum {
//
// ARM MP Core IDs
//
-#define ARM_CORE_MASK 0xFF
-#define ARM_CLUSTER_MASK (0xFF << 8)
+#define ARM_CORE_AFF0 0xFF
+#define ARM_CORE_AFF1 (0xFF << 8)
+#define ARM_CORE_AFF2 (0xFF << 16)
+#define ARM_CORE_AFF3 (0xFFULL << 32)
+
+#define ARM_CORE_MASK ARM_CORE_AFF0
+#define ARM_CLUSTER_MASK ARM_CORE_AFF1
#define GET_CORE_ID(MpId) ((MpId) & ARM_CORE_MASK)
#define GET_CLUSTER_ID(MpId) (((MpId) & ARM_CLUSTER_MASK) >> 8)
#define GET_MPID(ClusterId, CoreId) (((ClusterId) << 8) | (CoreId))
-// Get the position of the core for the Stack Offset (4 Core per Cluster)
-// Position = (ClusterId * 4) + CoreId
-#define GET_CORE_POS(MpId) ((((MpId) & ARM_CLUSTER_MASK) >> 6) + ((MpId) & ARM_CORE_MASK))
#define PRIMARY_CORE_ID (PcdGet32(PcdArmPrimaryCore) & ARM_CORE_MASK)
ARM_CACHE_TYPE
@@ -145,58 +149,70 @@ EFIAPI
ArmDataCachePresent (
VOID
);
-
+
UINTN
EFIAPI
ArmDataCacheSize (
VOID
);
-
+
UINTN
EFIAPI
ArmDataCacheAssociativity (
VOID
);
-
+
UINTN
EFIAPI
ArmDataCacheLineLength (
VOID
);
-
+
BOOLEAN
EFIAPI
ArmInstructionCachePresent (
VOID
);
-
+
UINTN
EFIAPI
ArmInstructionCacheSize (
VOID
);
-
+
UINTN
EFIAPI
ArmInstructionCacheAssociativity (
VOID
);
-
+
UINTN
EFIAPI
ArmInstructionCacheLineLength (
VOID
);
-
-UINT32
+
+UINTN
EFIAPI
-Cp15IdCode (
+ArmIsArchTimerImplemented (
VOID
);
-
-UINT32
+
+UINTN
EFIAPI
-Cp15CacheInfo (
+ArmReadIdPfr0 (
+ VOID
+ );
+
+UINTN
+EFIAPI
+ArmReadIdPfr1 (
+ VOID
+ );
+
+UINTN
+EFIAPI
+ArmCacheInfo (
VOID
);
@@ -255,6 +271,24 @@ ArmCleanInvalidateDataCacheEntryByMVA (
IN UINTN Address
);
+VOID
+EFIAPI
+ArmInvalidateDataCacheEntryBySetWay (
+ IN UINTN SetWayFormat
+ );
+
+VOID
+EFIAPI
+ArmCleanDataCacheEntryBySetWay (
+ IN UINTN SetWayFormat
+ );
+
+VOID
+EFIAPI
+ArmCleanInvalidateDataCacheEntryBySetWay (
+ IN UINTN SetWayFormat
+ );
+
VOID
EFIAPI
ArmEnableDataCache (
@@ -278,7 +312,7 @@ EFIAPI
ArmDisableInstructionCache (
VOID
);
-
+
VOID
EFIAPI
ArmEnableMmu (
@@ -293,13 +327,13 @@ ArmDisableMmu (
VOID
EFIAPI
-ArmDisableCachesAndMmu (
+ArmEnableCachesAndMmu (
VOID
);
VOID
EFIAPI
-ArmInvalidateInstructionAndDataTlb (
+ArmDisableCachesAndMmu (
VOID
);
@@ -321,9 +355,15 @@ ArmGetInterruptState (
VOID
);
+VOID
+EFIAPI
+ArmEnableAsynchronousAbort (
+ VOID
+ );
+
UINTN
EFIAPI
-ArmDisableIrq (
+ArmDisableAsynchronousAbort (
VOID
);
@@ -333,6 +373,12 @@ ArmEnableIrq (
VOID
);
+UINTN
+EFIAPI
+ArmDisableIrq (
+ VOID
+ );
+
VOID
EFIAPI
ArmEnableFiq (
@@ -344,26 +390,29 @@ EFIAPI
ArmDisableFiq (
VOID
);
-
+
BOOLEAN
EFIAPI
ArmGetFiqState (
VOID
);
+/**
+ * Invalidate Data and Instruction TLBs
+ */
VOID
EFIAPI
ArmInvalidateTlb (
VOID
);
-
+
VOID
EFIAPI
ArmUpdateTranslationTableEntry (
IN VOID *TranslationTableEntry,
IN VOID *Mva
);
-
+
VOID
EFIAPI
ArmSetDomainAccessControl (
@@ -382,32 +431,20 @@ ArmGetTTBR0BaseAddress (
VOID
);
-VOID
+RETURN_STATUS
EFIAPI
ArmConfigureMmu (
IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable,
- OUT VOID **TranslationTableBase OPTIONAL,
+ OUT VOID **TranslationTableBase OPTIONAL,
OUT UINTN *TranslationTableSize OPTIONAL
);
-
+
BOOLEAN
EFIAPI
ArmMmuEnabled (
VOID
);
-
-VOID
-EFIAPI
-ArmSwitchProcessorMode (
- IN ARM_PROCESSOR_MODE Mode
- );
-ARM_PROCESSOR_MODE
-EFIAPI
-ArmProcessorMode (
- VOID
- );
-
VOID
EFIAPI
ArmEnableBranchPrediction (
@@ -432,18 +469,24 @@ ArmSetHighVectors (
VOID
);
+VOID
+EFIAPI
+ArmDrainWriteBuffer (
+ VOID
+ );
+
VOID
EFIAPI
ArmDataMemoryBarrier (
VOID
);
-
+
VOID
EFIAPI
-ArmDataSyncronizationBarrier (
+ArmDataSynchronizationBarrier (
VOID
);
-
+
VOID
EFIAPI
ArmInstructionSynchronizationBarrier (
@@ -453,10 +496,10 @@ ArmInstructionSynchronizationBarrier (
VOID
EFIAPI
ArmWriteVBar (
- IN UINT32 VectorBase
+ IN UINTN VectorBase
);
-UINT32
+UINTN
EFIAPI
ArmReadVBar (
VOID
@@ -501,6 +544,7 @@ ArmCallWFE (
VOID
EFIAPI
ArmCallWFI (
+
VOID
);
@@ -510,6 +554,12 @@ ArmReadMpidr (
VOID
);
+UINTN
+EFIAPI
+ArmReadMidr (
+ VOID
+ );
+
UINT32
EFIAPI
ArmReadCpacr (
@@ -528,28 +578,28 @@ ArmEnableVFP (
VOID
);
-UINT32
-EFIAPI
-ArmReadNsacr (
- VOID
- );
+/**
+ Get the Secure Configuration Register value
-VOID
-EFIAPI
-ArmWriteNsacr (
- IN UINT32 SetWayFormat
- );
+ @return Value read from the Secure Configuration Register
+**/
UINT32
EFIAPI
ArmReadScr (
VOID
);
+/**
+ Set the Secure Configuration Register
+
+ @param Value Value to write to the Secure Configuration Register
+
+**/
VOID
EFIAPI
ArmWriteScr (
- IN UINT32 SetWayFormat
+ IN UINT32 Value
);
UINT32
@@ -582,4 +632,57 @@ ArmWriteHVBar (
IN UINTN HypModeVectorBase
);
+
+//
+// Helper functions for accessing CPU ACTLR
+//
+
+UINTN
+EFIAPI
+ArmReadCpuActlr (
+ VOID
+ );
+
+VOID
+EFIAPI
+ArmWriteCpuActlr (
+ IN UINTN Val
+ );
+
+VOID
+EFIAPI
+ArmSetCpuActlrBit (
+ IN UINTN Bits
+ );
+
+VOID
+EFIAPI
+ArmUnsetCpuActlrBit (
+ IN UINTN Bits
+ );
+
+RETURN_STATUS
+ArmSetMemoryRegionNoExec (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length
+ );
+
+RETURN_STATUS
+ArmClearMemoryRegionNoExec (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length
+ );
+
+RETURN_STATUS
+ArmSetMemoryRegionReadOnly (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length
+ );
+
+RETURN_STATUS
+ArmClearMemoryRegionReadOnly (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length
+ );
+
#endif // __ARM_LIB__