]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.c
826827fb09165d1d18ecfd59a41c231c0cc6fb5c
[mirror_edk2.git] / ArmPkg / Library / ArmGenericTimerPhyCounterLib / ArmGenericTimerPhyCounterLib.c
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 }