1 /** @file 2 3 Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR> 4 Copyright (c) 2014, Linaro Ltd. All rights reserved.<BR> 5 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #include <Library/ArmGenericTimerCounterLib.h> 17 #include <Library/ArmArchTimer.h> 18 19 VOID 20 EFIAPI 21 ArmGenericTimerEnableTimer ( 22 VOID 23 ) 24 { 25 UINTN TimerCtrlReg; 26 27 ArmArchTimerReadReg (CntpCtl, (VOID *)&TimerCtrlReg); 28 TimerCtrlReg |= ARM_ARCH_TIMER_ENABLE; 29 ArmArchTimerWriteReg (CntpCtl, (VOID *)&TimerCtrlReg); 30 } 31 32 VOID 33 EFIAPI 34 ArmGenericTimerDisableTimer ( 35 VOID 36 ) 37 { 38 UINTN TimerCtrlReg; 39 40 ArmArchTimerReadReg (CntpCtl, (VOID *)&TimerCtrlReg); 41 TimerCtrlReg &= ~ARM_ARCH_TIMER_ENABLE; 42 ArmArchTimerWriteReg (CntpCtl, (VOID *)&TimerCtrlReg); 43 } 44 45 VOID 46 EFIAPI 47 ArmGenericTimerSetTimerFreq ( 48 IN UINTN FreqInHz 49 ) 50 { 51 ArmArchTimerWriteReg (CntFrq, (VOID *)&FreqInHz); 52 } 53 54 UINTN 55 EFIAPI 56 ArmGenericTimerGetTimerFreq ( 57 VOID 58 ) 59 { 60 UINTN ArchTimerFreq = 0; 61 ArmArchTimerReadReg (CntFrq, (VOID *)&ArchTimerFreq); 62 return ArchTimerFreq; 63 } 64 65 UINTN 66 EFIAPI 67 ArmGenericTimerGetTimerVal ( 68 VOID 69 ) 70 { 71 UINTN ArchTimerValue; 72 ArmArchTimerReadReg (CntpTval, (VOID *)&ArchTimerValue); 73 74 return ArchTimerValue; 75 } 76 77 78 VOID 79 EFIAPI 80 ArmGenericTimerSetTimerVal ( 81 IN UINTN Value 82 ) 83 { 84 ArmArchTimerWriteReg (CntpTval, (VOID *)&Value); 85 } 86 87 UINT64 88 EFIAPI 89 ArmGenericTimerGetSystemCount ( 90 VOID 91 ) 92 { 93 UINT64 SystemCount; 94 ArmArchTimerReadReg (CntPct, (VOID *)&SystemCount); 95 96 return SystemCount; 97 } 98 99 UINTN 100 EFIAPI 101 ArmGenericTimerGetTimerCtrlReg ( 102 VOID 103 ) 104 { 105 UINTN Value; 106 ArmArchTimerReadReg (CntpCtl, (VOID *)&Value); 107 108 return Value; 109 } 110 111 VOID 112 EFIAPI 113 ArmGenericTimerSetTimerCtrlReg ( 114 UINTN Value 115 ) 116 { 117 ArmArchTimerWriteReg (CntpCtl, (VOID *)&Value); 118 } 119 120 UINT64 121 EFIAPI 122 ArmGenericTimerGetCompareVal ( 123 VOID 124 ) 125 { 126 UINT64 Value; 127 ArmArchTimerReadReg (CntpCval, (VOID *)&Value); 128 129 return Value; 130 } 131 132 VOID 133 EFIAPI 134 ArmGenericTimerSetCompareVal ( 135 IN UINT64 Value 136 ) 137 { 138 ArmArchTimerWriteReg (CntpCval, (VOID *)&Value); 139 } 140