• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
ArmGenericTimerEnableTimer(VOID)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
ArmGenericTimerDisableTimer(VOID)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
ArmGenericTimerSetTimerFreq(IN UINTN FreqInHz)47 ArmGenericTimerSetTimerFreq (
48   IN   UINTN  FreqInHz
49   )
50 {
51   ArmArchTimerWriteReg (CntFrq, (VOID *)&FreqInHz);
52 }
53 
54 UINTN
55 EFIAPI
ArmGenericTimerGetTimerFreq(VOID)56 ArmGenericTimerGetTimerFreq (
57   VOID
58   )
59 {
60   UINTN ArchTimerFreq = 0;
61   ArmArchTimerReadReg (CntFrq, (VOID *)&ArchTimerFreq);
62   return ArchTimerFreq;
63 }
64 
65 UINTN
66 EFIAPI
ArmGenericTimerGetTimerVal(VOID)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
ArmGenericTimerSetTimerVal(IN UINTN Value)80 ArmGenericTimerSetTimerVal (
81   IN   UINTN   Value
82   )
83 {
84   ArmArchTimerWriteReg (CntpTval, (VOID *)&Value);
85 }
86 
87 UINT64
88 EFIAPI
ArmGenericTimerGetSystemCount(VOID)89 ArmGenericTimerGetSystemCount (
90   VOID
91   )
92 {
93   UINT64 SystemCount;
94   ArmArchTimerReadReg (CntPct, (VOID *)&SystemCount);
95 
96   return SystemCount;
97 }
98 
99 UINTN
100 EFIAPI
ArmGenericTimerGetTimerCtrlReg(VOID)101 ArmGenericTimerGetTimerCtrlReg (
102   VOID
103   )
104 {
105   UINTN  Value;
106   ArmArchTimerReadReg (CntpCtl, (VOID *)&Value);
107 
108   return Value;
109 }
110 
111 VOID
112 EFIAPI
ArmGenericTimerSetTimerCtrlReg(UINTN Value)113 ArmGenericTimerSetTimerCtrlReg (
114   UINTN Value
115   )
116 {
117   ArmArchTimerWriteReg (CntpCtl, (VOID *)&Value);
118 }
119 
120 UINT64
121 EFIAPI
ArmGenericTimerGetCompareVal(VOID)122 ArmGenericTimerGetCompareVal (
123   VOID
124   )
125 {
126   UINT64  Value;
127   ArmArchTimerReadReg (CntpCval, (VOID *)&Value);
128 
129   return Value;
130 }
131 
132 VOID
133 EFIAPI
ArmGenericTimerSetCompareVal(IN UINT64 Value)134 ArmGenericTimerSetCompareVal (
135   IN   UINT64   Value
136   )
137 {
138   ArmArchTimerWriteReg (CntpCval, (VOID *)&Value);
139 }
140