\r
CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf\r
ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf\r
+ ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf\r
ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf\r
ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf\r
DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf\r
#include <Base.h>\r
#include <Library/ArmLib.h>\r
#include <Library/ArmCpuLib.h>\r
-#include <Library/ArmArchTimer.h>\r
+#include <Library/ArmGenericTimerCounterLib.h>\r
#include <Library/DebugLib.h>\r
-#include <Library/IoLib.h>\r
#include <Library/PcdLib.h>\r
\r
#include <Chipset/ArmCortexA15.h>\r
\r
// Note: System Counter frequency can only be set in Secure privileged mode,\r
// if security extensions are implemented.\r
- ArmArchTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));\r
+ ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));\r
\r
if (ArmIsMpCore()) {\r
// Turn on SMP coherency\r
#/* @file\r
-# Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
+# Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
#\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
\r
[LibraryClasses]\r
ArmLib\r
- IoLib\r
+ ArmGenericTimerCounterLib\r
PcdLib\r
\r
[Sources.common]\r
#include <Base.h>\r
#include <Library/ArmLib.h>\r
#include <Library/ArmCpuLib.h>\r
-#include <Library/ArmArchTimer.h>\r
+#include <Library/ArmGenericTimerCounterLib.h>\r
#include <Library/DebugLib.h>\r
-#include <Library/IoLib.h>\r
#include <Library/PcdLib.h>\r
\r
#include <Chipset/ArmCortexA5x.h>\r
\r
// Note: System Counter frequency can only be set in Secure privileged mode,\r
// if security extensions are implemented.\r
- ArmArchTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));\r
+ ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));\r
\r
if (ArmIsMpCore ()) {\r
// Turn on SMP coherency\r
\r
[LibraryClasses]\r
ArmLib\r
- IoLib\r
+ ArmGenericTimerCounterLib\r
PcdLib\r
\r
[Sources.common]\r
\r
#include <Base.h>\r
#include <Library/ArmCpuLib.h>\r
-#include <Library/ArmArchTimer.h>\r
+#include <Library/ArmGenericTimerCounterLib.h>\r
#include <Library/PcdLib.h>\r
\r
#include <Chipset/ArmAemV8.h>\r
{\r
// Note: System Counter frequency can only be set in Secure privileged mode,\r
// if security extensions are implemented.\r
- ArmArchTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));\r
+ ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));\r
}\r
\r
\r
ArmPkg/ArmPkg.dec\r
\r
[LibraryClasses]\r
- ArmLib\r
- IoLib\r
+ ArmGenericTimerCounterLib\r
PcdLib\r
\r
[Sources.common]\r
#include <Library/UefiLib.h>\r
#include <Library/PcdLib.h>\r
#include <Library/IoLib.h>\r
+#include <Library/ArmGenericTimerCounterLib.h>\r
#include <Library/ArmArchTimer.h>\r
\r
#include <Protocol/Timer.h>\r
IN VOID *Context\r
)\r
{\r
- ArmArchTimerDisableTimer ();\r
+ ArmGenericTimerDisableTimer ();\r
}\r
\r
/**\r
EFI_TPL OriginalTPL;\r
\r
// Always disable the timer\r
- ArmArchTimerDisableTimer ();\r
+ ArmGenericTimerDisableTimer ();\r
\r
if (TimerPeriod != 0) {\r
// mTimerTicks = TimerPeriod in 1ms unit x Frequency.10^-3\r
\r
gBS->RestoreTPL (OriginalTPL);\r
\r
- // Get value of the current physical timer\r
- CounterValue = ArmReadCntPct ();\r
+ // Get value of the current timer\r
+ CounterValue = ArmGenericTimerGetSystemCount ();\r
// Set the interrupt in Current Time + mTimerTick\r
- ArmWriteCntpCval (CounterValue + mTimerTicks);\r
+ ArmGenericTimerSetCompareVal (CounterValue + mTimerTicks);\r
\r
// Enable the timer\r
- ArmArchTimerEnableTimer ();\r
+ ArmGenericTimerEnableTimer ();\r
} else {\r
// Save the new timer period\r
mTimerPeriod = TimerPeriod;\r
OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL);\r
\r
// Check if the timer interrupt is active\r
- if ((ArmArchTimerGetTimerCtrlReg () ) & ARM_ARCH_TIMER_ISTATUS) {\r
+ if ((ArmGenericTimerGetTimerCtrlReg () ) & ARM_ARCH_TIMER_ISTATUS) {\r
\r
// Signal end of interrupt early to help avoid losing subsequent ticks from long duration handlers\r
gInterrupt->EndOfInterrupt (gInterrupt, Source);\r
//\r
\r
// Get current counter value\r
- CurrentValue = ArmReadCntPct ();\r
+ CurrentValue = ArmGenericTimerGetSystemCount ();\r
// Get the counter value to compare with\r
- CompareValue = ArmReadCntpCval ();\r
+ CompareValue = ArmGenericTimerGetCompareVal ();\r
\r
// This loop is needed in case we missed interrupts (eg: case when the interrupt handling\r
// has taken longer than mTickPeriod).\r
} while (CompareValue < CurrentValue);\r
\r
// Set next compare value\r
- ArmWriteCntpCval (CompareValue);\r
+ ArmGenericTimerSetCompareVal (CompareValue);\r
}\r
\r
// Enable timer interrupts\r
ASSERT_EFI_ERROR (Status);\r
\r
// Disable the timer\r
- TimerCtrlReg = ArmArchTimerGetTimerCtrlReg ();\r
+ TimerCtrlReg = ArmGenericTimerGetTimerCtrlReg ();\r
TimerCtrlReg |= ARM_ARCH_TIMER_IMASK;\r
TimerCtrlReg &= ~ARM_ARCH_TIMER_ENABLE;\r
- ArmArchTimerSetTimerCtrlReg (TimerCtrlReg);\r
+ ArmGenericTimerSetTimerCtrlReg (TimerCtrlReg);\r
Status = TimerDriverSetTimerPeriod (&gTimer, 0);\r
ASSERT_EFI_ERROR (Status);\r
\r
\r
// Everything is ready, unmask and enable timer interrupts\r
TimerCtrlReg = ARM_ARCH_TIMER_ENABLE;\r
- ArmArchTimerSetTimerCtrlReg (TimerCtrlReg);\r
+ ArmGenericTimerSetTimerCtrlReg (TimerCtrlReg);\r
\r
// Register for an ExitBootServicesEvent\r
Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_NOTIFY, ExitBootServicesEvent, NULL, &EfiExitBootServicesEvent);\r
DebugLib\r
UefiDriverEntryPoint\r
IoLib\r
+ ArmGenericTimerCounterLib\r
\r
[Guids]\r
\r
IN VOID *SrcBuf\r
);\r
\r
-VOID\r
-EFIAPI\r
-ArmArchTimerEnableTimer (\r
- VOID\r
- );\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerDisableTimer (\r
- VOID\r
- );\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetTimerFreq (\r
- IN UINTN FreqInHz\r
- );\r
-\r
-UINTN\r
-EFIAPI\r
-ArmArchTimerGetTimerFreq (\r
- VOID\r
- );\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetTimerVal (\r
- IN UINTN Val\r
- );\r
-\r
-UINTN\r
-EFIAPI\r
-ArmArchTimerGetTimerVal (\r
- VOID\r
- );\r
-\r
-UINT64\r
-EFIAPI\r
-ArmArchTimerGetSystemCount (\r
- VOID\r
- );\r
-\r
-UINTN\r
-EFIAPI\r
-ArmArchTimerGetTimerCtrlReg (\r
- VOID\r
- );\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetTimerCtrlReg (\r
- UINTN Val\r
- );\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetCompareVal (\r
- IN UINT64 Val\r
- );\r
-\r
#endif // __ARM_ARCH_TIMER_H__\r
#include <Library/TimerLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/PcdLib.h>\r
-#include <Library/ArmArchTimer.h>\r
+#include <Library/ArmGenericTimerCounterLib.h>\r
\r
#define TICKS_PER_MICRO_SEC (PcdGet32 (PcdArmArchTimerFreqInHz)/1000000U)\r
\r
// Only set the frequency for ARMv7. We expect the secure firmware to have already do it\r
// If the security extensions are not implemented set Timer Frequency\r
if ((ArmReadIdPfr1 () & ARM_PFR1_SEC) == 0x0) {\r
- ArmArchTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));\r
+ ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));\r
}\r
#endif\r
\r
// Architectural Timer Frequency must be set in the Secure privileged(if secure extensions are supported) mode.\r
// If the reset value (0) is returned just ASSERT.\r
- TimerFreq = ArmArchTimerGetTimerFreq ();\r
+ TimerFreq = ArmGenericTimerGetTimerFreq ();\r
ASSERT (TimerFreq != 0);\r
\r
} else {\r
TimerTicks64 = (MicroSeconds * PcdGet32 (PcdArmArchTimerFreqInHz)) / 1000000U;\r
\r
// Read System Counter value\r
- SystemCounterVal = ArmArchTimerGetSystemCount ();\r
+ SystemCounterVal = ArmGenericTimerGetSystemCount ();\r
\r
TimerTicks64 += SystemCounterVal;\r
\r
// Wait until delay count is expired.\r
while (SystemCounterVal < TimerTicks64) {\r
- SystemCounterVal = ArmArchTimerGetSystemCount ();\r
+ SystemCounterVal = ArmGenericTimerGetSystemCount ();\r
}\r
\r
return MicroSeconds;\r
)\r
{\r
// Just return the value of system count\r
- return ArmArchTimerGetSystemCount ();\r
+ return ArmGenericTimerGetSystemCount ();\r
}\r
\r
/**\r
*EndValue = 0xFFFFFFFFFFFFFFFFUL;\r
}\r
\r
- return (UINT64)ArmArchTimerGetTimerFreq ();\r
+ return (UINT64)ArmGenericTimerGetTimerFreq ();\r
}\r
DebugLib\r
ArmLib\r
BaseLib\r
+ ArmGenericTimerCounterLib\r
\r
[Pcd]\r
gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz\r
ASSERT (0);\r
}\r
}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerEnableTimer (\r
- VOID\r
- )\r
-{\r
- UINTN TimerCtrlReg;\r
-\r
- ArmArchTimerReadReg (CntpCtl, (VOID *)&TimerCtrlReg);\r
- TimerCtrlReg |= ARM_ARCH_TIMER_ENABLE;\r
- ArmArchTimerWriteReg (CntpCtl, (VOID *)&TimerCtrlReg);\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerDisableTimer (\r
- VOID\r
- )\r
-{\r
- UINTN TimerCtrlReg;\r
-\r
- ArmArchTimerReadReg (CntpCtl, (VOID *)&TimerCtrlReg);\r
- TimerCtrlReg &= ~ARM_ARCH_TIMER_ENABLE;\r
- ArmArchTimerWriteReg (CntpCtl, (VOID *)&TimerCtrlReg);\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetTimerFreq (\r
- IN UINTN FreqInHz\r
- )\r
-{\r
- ArmArchTimerWriteReg (CntFrq, (VOID *)&FreqInHz);\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmArchTimerGetTimerFreq (\r
- VOID\r
- )\r
-{\r
- UINTN ArchTimerFreq = 0;\r
- ArmArchTimerReadReg (CntFrq, (VOID *)&ArchTimerFreq);\r
- return ArchTimerFreq;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmArchTimerGetTimerVal (\r
- VOID\r
- )\r
-{\r
- UINTN ArchTimerVal;\r
- ArmArchTimerReadReg (CntpTval, (VOID *)&ArchTimerVal);\r
- return ArchTimerVal;\r
-}\r
-\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetTimerVal (\r
- IN UINTN Val\r
- )\r
-{\r
- ArmArchTimerWriteReg (CntpTval, (VOID *)&Val);\r
-}\r
-\r
-UINT64\r
-EFIAPI\r
-ArmArchTimerGetSystemCount (\r
- VOID\r
- )\r
-{\r
- UINT64 SystemCount;\r
- ArmArchTimerReadReg (CntPct, (VOID *)&SystemCount);\r
- return SystemCount;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmArchTimerGetTimerCtrlReg (\r
- VOID\r
- )\r
-{\r
- UINTN Val;\r
- ArmArchTimerReadReg (CntpCtl, (VOID *)&Val);\r
- return Val;\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetTimerCtrlReg (\r
- UINTN Val\r
- )\r
-{\r
- ArmArchTimerWriteReg (CntpCtl, (VOID *)&Val);\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetCompareVal (\r
- IN UINT64 Val\r
- )\r
-{\r
- ArmArchTimerWriteReg (CntpCval, (VOID *)&Val);\r
-}\r
ASSERT (0);\r
}\r
}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerEnableTimer (\r
- VOID\r
- )\r
-{\r
- UINTN TimerCtrlReg;\r
-\r
- ArmArchTimerReadReg (CntpCtl, (VOID *)&TimerCtrlReg);\r
- TimerCtrlReg |= ARM_ARCH_TIMER_ENABLE;\r
- ArmArchTimerWriteReg (CntpCtl, (VOID *)&TimerCtrlReg);\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerDisableTimer (\r
- VOID\r
- )\r
-{\r
- UINTN TimerCtrlReg;\r
-\r
- ArmArchTimerReadReg (CntpCtl, (VOID *)&TimerCtrlReg);\r
- TimerCtrlReg &= ~ARM_ARCH_TIMER_ENABLE;\r
- ArmArchTimerWriteReg (CntpCtl, (VOID *)&TimerCtrlReg);\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetTimerFreq (\r
- IN UINTN FreqInHz\r
- )\r
-{\r
- ArmArchTimerWriteReg (CntFrq, (VOID *)&FreqInHz);\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmArchTimerGetTimerFreq (\r
- VOID\r
- )\r
-{\r
- UINTN ArchTimerFreq;\r
- ArmArchTimerReadReg (CntFrq, (VOID *)&ArchTimerFreq);\r
- return ArchTimerFreq;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmArchTimerGetTimerVal (\r
- VOID\r
- )\r
-{\r
- UINTN ArchTimerVal;\r
- ArmArchTimerReadReg (CntpTval, (VOID *)&ArchTimerVal);\r
- return ArchTimerVal;\r
-}\r
-\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetTimerVal (\r
- IN UINTN Val\r
- )\r
-{\r
- ArmArchTimerWriteReg (CntpTval, (VOID *)&Val);\r
-}\r
-\r
-UINT64\r
-EFIAPI\r
-ArmArchTimerGetSystemCount (\r
- VOID\r
- )\r
-{\r
- UINT64 SystemCount;\r
- ArmArchTimerReadReg (CntPct, (VOID *)&SystemCount);\r
- return SystemCount;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmArchTimerGetTimerCtrlReg (\r
- VOID\r
- )\r
-{\r
- UINTN Val;\r
- ArmArchTimerReadReg (CntpCtl, (VOID *)&Val);\r
- return Val;\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetTimerCtrlReg (\r
- UINTN Val\r
- )\r
-{\r
- ArmArchTimerWriteReg (CntpCtl, (VOID *)&Val);\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-ArmArchTimerSetCompareVal (\r
- IN UINT64 Val\r
- )\r
-{\r
- ArmArchTimerWriteReg (CntpCval, (VOID *)&Val);\r
-}\r
[LibraryClasses.AARCH64]\r
ArmLib|ArmPkg/Library/ArmLib/AArch64/AArch64Lib.inf\r
ArmCpuLib|ArmPkg/Drivers/ArmCpuLib/ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.inf\r
+ ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf\r
\r
[LibraryClasses.common.SEC]\r
ArmPlatformSecLib|ArmPlatformPkg/Library/ArmPlatformSecLibNull/ArmPlatformLibNullSec.inf\r
DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf\r
ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf\r
ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf\r
+ ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf\r
\r
# RealView Emulation Board Specific Libraries\r
EfiResetSystemLib|ArmPlatformPkg/ArmRealViewEbPkg/Library/ResetSystemLib/ResetSystemLib.inf\r
ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf\r
ArmPlatformStackLib|ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf\r
ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf\r
+ ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf\r
\r
# Versatile Express Specific Libraries\r
ArmPlatformSysConfigLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSysConfigLib/ArmVExpressSysConfigLib.inf\r