To prepare for the enablement of booting EFI with the SCTLR.WXN control enabled, which makes all writeable memory regions non-executable by default, introduce a memory type that we will use to describe the flash region that carries the SEC and PEIM modules that execute in place. Even if these are implicitly read-only due to the ROM nature, they need to be mapped with read-only attributes in the page tables to be able to execute from them. Also add the XP counterpart which will be used for all normal DRAM right at the outset. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
		
			
				
	
	
		
			789 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			789 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
 | 
						|
  Copyright (c) 2011 - 2016, ARM Ltd. All rights reserved.<BR>
 | 
						|
  Copyright (c) 2020 - 2021, NUVIA Inc. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef ARM_LIB_H_
 | 
						|
#define ARM_LIB_H_
 | 
						|
 | 
						|
#include <Uefi/UefiBaseType.h>
 | 
						|
 | 
						|
#ifdef MDE_CPU_ARM
 | 
						|
  #include <Chipset/ArmV7.h>
 | 
						|
#elif defined (MDE_CPU_AARCH64)
 | 
						|
  #include <Chipset/AArch64.h>
 | 
						|
#else
 | 
						|
  #error "Unknown chipset."
 | 
						|
#endif
 | 
						|
 | 
						|
#define EFI_MEMORY_CACHETYPE_MASK  (EFI_MEMORY_UC | EFI_MEMORY_WC |  \
 | 
						|
                                     EFI_MEMORY_WT | EFI_MEMORY_WB | \
 | 
						|
                                     EFI_MEMORY_UCE)
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED = 0,
 | 
						|
  ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
 | 
						|
 | 
						|
  // On some platforms, memory mapped flash region is designed as not supporting
 | 
						|
  // shareable attribute, so WRITE_BACK_NONSHAREABLE is added for such special
 | 
						|
  // need.
 | 
						|
  // Do NOT use below two attributes if you are not sure.
 | 
						|
  ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK_NONSHAREABLE,
 | 
						|
 | 
						|
  // Special region types for memory that must be mapped with read-only or
 | 
						|
  // non-execute permissions from the very start, e.g., to support the use
 | 
						|
  // of the WXN virtual memory control.
 | 
						|
  ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK_RO,
 | 
						|
  ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK_XP,
 | 
						|
 | 
						|
  ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH,
 | 
						|
  ARM_MEMORY_REGION_ATTRIBUTE_DEVICE,
 | 
						|
} ARM_MEMORY_REGION_ATTRIBUTES;
 | 
						|
 | 
						|
#define IS_ARM_MEMORY_REGION_ATTRIBUTES_SECURE(attr)  ((UINT32)(attr) & 1)
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  EFI_PHYSICAL_ADDRESS            PhysicalBase;
 | 
						|
  EFI_VIRTUAL_ADDRESS             VirtualBase;
 | 
						|
  UINT64                          Length;
 | 
						|
  ARM_MEMORY_REGION_ATTRIBUTES    Attributes;
 | 
						|
} ARM_MEMORY_REGION_DESCRIPTOR;
 | 
						|
 | 
						|
typedef VOID (*CACHE_OPERATION)(
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
typedef VOID (*LINE_OPERATION)(
 | 
						|
  UINTN
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// ARM Processor Mode
 | 
						|
//
 | 
						|
typedef enum {
 | 
						|
  ARM_PROCESSOR_MODE_USER       = 0x10,
 | 
						|
  ARM_PROCESSOR_MODE_FIQ        = 0x11,
 | 
						|
  ARM_PROCESSOR_MODE_IRQ        = 0x12,
 | 
						|
  ARM_PROCESSOR_MODE_SUPERVISOR = 0x13,
 | 
						|
  ARM_PROCESSOR_MODE_ABORT      = 0x17,
 | 
						|
  ARM_PROCESSOR_MODE_HYP        = 0x1A,
 | 
						|
  ARM_PROCESSOR_MODE_UNDEFINED  = 0x1B,
 | 
						|
  ARM_PROCESSOR_MODE_SYSTEM     = 0x1F,
 | 
						|
  ARM_PROCESSOR_MODE_MASK       = 0x1F
 | 
						|
} ARM_PROCESSOR_MODE;
 | 
						|
 | 
						|
//
 | 
						|
// ARM Cpu IDs
 | 
						|
//
 | 
						|
#define ARM_CPU_IMPLEMENTER_MASK      (0xFFU << 24)
 | 
						|
#define ARM_CPU_IMPLEMENTER_ARMLTD    (0x41U << 24)
 | 
						|
#define ARM_CPU_IMPLEMENTER_DEC       (0x44U << 24)
 | 
						|
#define ARM_CPU_IMPLEMENTER_MOT       (0x4DU << 24)
 | 
						|
#define ARM_CPU_IMPLEMENTER_QUALCOMM  (0x51U << 24)
 | 
						|
#define ARM_CPU_IMPLEMENTER_MARVELL   (0x56U << 24)
 | 
						|
 | 
						|
#define ARM_CPU_PRIMARY_PART_MASK       (0xFFF << 4)
 | 
						|
#define ARM_CPU_PRIMARY_PART_CORTEXA5   (0xC05 << 4)
 | 
						|
#define ARM_CPU_PRIMARY_PART_CORTEXA7   (0xC07 << 4)
 | 
						|
#define ARM_CPU_PRIMARY_PART_CORTEXA8   (0xC08 << 4)
 | 
						|
#define ARM_CPU_PRIMARY_PART_CORTEXA9   (0xC09 << 4)
 | 
						|
#define ARM_CPU_PRIMARY_PART_CORTEXA15  (0xC0F << 4)
 | 
						|
 | 
						|
//
 | 
						|
// ARM MP Core IDs
 | 
						|
//
 | 
						|
#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))
 | 
						|
#define GET_MPIDR_AFF0(MpId)           ((MpId) & ARM_CORE_AFF0)
 | 
						|
#define GET_MPIDR_AFF1(MpId)           (((MpId) & ARM_CORE_AFF1) >> 8)
 | 
						|
#define GET_MPIDR_AFF2(MpId)           (((MpId) & ARM_CORE_AFF2) >> 16)
 | 
						|
#define GET_MPIDR_AFF3(MpId)           (((MpId) & ARM_CORE_AFF3) >> 32)
 | 
						|
#define GET_MPIDR_AFFINITY_BITS(MpId)  ((MpId) & 0xFF00FFFFFF)
 | 
						|
#define PRIMARY_CORE_ID  (PcdGet32(PcdArmPrimaryCore) & ARM_CORE_MASK)
 | 
						|
#define MPIDR_MT_BIT     BIT24
 | 
						|
 | 
						|
/** Reads the CCSIDR register for the specified cache.
 | 
						|
 | 
						|
  @param CSSELR The CSSELR cache selection register value.
 | 
						|
 | 
						|
  @return The contents of the CCSIDR_EL1 register for the specified cache, when in AARCH64 mode.
 | 
						|
          Returns the contents of the CCSIDR register in AARCH32 mode.
 | 
						|
**/
 | 
						|
UINTN
 | 
						|
ReadCCSIDR (
 | 
						|
  IN UINT32  CSSELR
 | 
						|
  );
 | 
						|
 | 
						|
/** Reads the CCSIDR2 for the specified cache.
 | 
						|
 | 
						|
  @param CSSELR The CSSELR cache selection register value
 | 
						|
 | 
						|
  @return The contents of the CCSIDR2 register for the specified cache.
 | 
						|
**/
 | 
						|
UINT32
 | 
						|
ReadCCSIDR2 (
 | 
						|
  IN UINT32  CSSELR
 | 
						|
  );
 | 
						|
 | 
						|
/** Reads the Cache Level ID (CLIDR) register.
 | 
						|
 | 
						|
  @return The contents of the CLIDR_EL1 register.
 | 
						|
**/
 | 
						|
UINT32
 | 
						|
ReadCLIDR (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmDataCacheLineLength (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmInstructionCacheLineLength (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmCacheWritebackGranule (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmIsArchTimerImplemented (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmCacheInfo (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
ArmIsMpCore (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmInvalidateDataCache (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmCleanInvalidateDataCache (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmCleanDataCache (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmInvalidateInstructionCache (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmInvalidateDataCacheEntryByMVA (
 | 
						|
  IN  UINTN  Address
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmCleanDataCacheEntryToPoUByMVA (
 | 
						|
  IN  UINTN  Address
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmInvalidateInstructionCacheEntryToPoUByMVA (
 | 
						|
  IN  UINTN  Address
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmCleanDataCacheEntryByMVA (
 | 
						|
  IN  UINTN  Address
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmCleanInvalidateDataCacheEntryByMVA (
 | 
						|
  IN  UINTN  Address
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableDataCache (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmDisableDataCache (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableInstructionCache (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmDisableInstructionCache (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableMmu (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmDisableMmu (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableCachesAndMmu (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmDisableCachesAndMmu (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableInterrupts (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmDisableInterrupts (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
ArmGetInterruptState (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableAsynchronousAbort (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmDisableAsynchronousAbort (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableIrq (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmDisableIrq (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableFiq (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
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 (
 | 
						|
  IN  UINT32  Domain
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmSetTTBR0 (
 | 
						|
  IN  VOID  *TranslationTableBase
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmSetTTBCR (
 | 
						|
  IN  UINT32  Bits
 | 
						|
  );
 | 
						|
 | 
						|
VOID *
 | 
						|
EFIAPI
 | 
						|
ArmGetTTBR0BaseAddress (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
ArmMmuEnabled (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableBranchPrediction (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmDisableBranchPrediction (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmSetLowVectors (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmSetHighVectors (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmDataMemoryBarrier (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmDataSynchronizationBarrier (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmInstructionSynchronizationBarrier (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteVBar (
 | 
						|
  IN  UINTN  VectorBase
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadVBar (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteAuxCr (
 | 
						|
  IN  UINT32  Bit
 | 
						|
  );
 | 
						|
 | 
						|
UINT32
 | 
						|
EFIAPI
 | 
						|
ArmReadAuxCr (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmSetAuxCrBit (
 | 
						|
  IN  UINT32  Bits
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmUnsetAuxCrBit (
 | 
						|
  IN  UINT32  Bits
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmCallSEV (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmCallWFE (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmCallWFI (
 | 
						|
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadMpidr (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadMidr (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINT32
 | 
						|
EFIAPI
 | 
						|
ArmReadCpacr (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCpacr (
 | 
						|
  IN  UINT32  Access
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmEnableVFP (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get the Secure Configuration Register value
 | 
						|
 | 
						|
  @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  Value
 | 
						|
  );
 | 
						|
 | 
						|
UINT32
 | 
						|
EFIAPI
 | 
						|
ArmReadMVBar (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteMVBar (
 | 
						|
  IN  UINT32  VectorMonitorBase
 | 
						|
  );
 | 
						|
 | 
						|
UINT32
 | 
						|
EFIAPI
 | 
						|
ArmReadSctlr (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteSctlr (
 | 
						|
  IN  UINT32  Value
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadHVBar (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
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
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// Accessors for the architected generic timer registers
 | 
						|
//
 | 
						|
 | 
						|
#define ARM_ARCH_TIMER_ENABLE   (1 << 0)
 | 
						|
#define ARM_ARCH_TIMER_IMASK    (1 << 1)
 | 
						|
#define ARM_ARCH_TIMER_ISTATUS  (1 << 2)
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadCntFrq (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCntFrq (
 | 
						|
  UINTN  FreqInHz
 | 
						|
  );
 | 
						|
 | 
						|
UINT64
 | 
						|
EFIAPI
 | 
						|
ArmReadCntPct (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadCntkCtl (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCntkCtl (
 | 
						|
  UINTN  Val
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadCntpTval (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCntpTval (
 | 
						|
  UINTN  Val
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadCntpCtl (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCntpCtl (
 | 
						|
  UINTN  Val
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadCntvTval (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCntvTval (
 | 
						|
  UINTN  Val
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmReadCntvCtl (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCntvCtl (
 | 
						|
  UINTN  Val
 | 
						|
  );
 | 
						|
 | 
						|
UINT64
 | 
						|
EFIAPI
 | 
						|
ArmReadCntvCt (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
UINT64
 | 
						|
EFIAPI
 | 
						|
ArmReadCntpCval (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCntpCval (
 | 
						|
  UINT64  Val
 | 
						|
  );
 | 
						|
 | 
						|
UINT64
 | 
						|
EFIAPI
 | 
						|
ArmReadCntvCval (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCntvCval (
 | 
						|
  UINT64  Val
 | 
						|
  );
 | 
						|
 | 
						|
UINT64
 | 
						|
EFIAPI
 | 
						|
ArmReadCntvOff (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ArmWriteCntvOff (
 | 
						|
  UINT64  Val
 | 
						|
  );
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
ArmGetPhysicalAddressBits (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
///  ID Register Helper functions
 | 
						|
///
 | 
						|
 | 
						|
/**
 | 
						|
  Check whether the CPU supports the GIC system register interface (any version)
 | 
						|
 | 
						|
  @return   Whether GIC System Register Interface is supported
 | 
						|
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
ArmHasGicSystemRegisters (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Checks if CCIDX is implemented.
 | 
						|
 | 
						|
   @retval TRUE  CCIDX is implemented.
 | 
						|
   @retval FALSE CCIDX is not implemented.
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
ArmHasCcidx (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
#ifdef MDE_CPU_ARM
 | 
						|
///
 | 
						|
/// AArch32-only ID Register Helper functions
 | 
						|
///
 | 
						|
 | 
						|
/**
 | 
						|
  Check whether the CPU supports the Security extensions
 | 
						|
 | 
						|
  @return   Whether the Security extensions are implemented
 | 
						|
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
ArmHasSecurityExtensions (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
#endif // MDE_CPU_ARM
 | 
						|
 | 
						|
#endif // ARM_LIB_H_
 |