]>
git.proxmox.com Git - mirror_edk2.git/blob - ArmVirtPkg/Library/XenArmGenericTimerVirtCounterLib/XenArmGenericTimerVirtCounterLib.c
3 Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
4 Copyright (c) 2014 - 2018, Linaro Ltd. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #include <Library/ArmGenericTimerCounterLib.h>
11 #include <Library/ArmLib.h>
15 ArmGenericTimerEnableTimer (
21 TimerCtrlReg
= ArmReadCntvCtl ();
22 TimerCtrlReg
|= ARM_ARCH_TIMER_ENABLE
;
23 ArmWriteCntvCtl (TimerCtrlReg
);
28 ArmGenericTimerReenableTimer (
34 TimerCtrlReg
= ArmReadCntvCtl ();
35 TimerCtrlReg
|= ARM_ARCH_TIMER_ENABLE
;
38 // When running under Xen, we need to unmask the interrupt on the timer side
39 // as Xen will mask it when servicing the interrupt at the hypervisor level
40 // and delivering the virtual timer interrupt to the guest. Otherwise, the
41 // interrupt will fire again, trapping into the hypervisor again, etc. etc.
43 TimerCtrlReg
&= ~ARM_ARCH_TIMER_IMASK
;
44 ArmWriteCntvCtl (TimerCtrlReg
);
49 ArmGenericTimerDisableTimer (
55 TimerCtrlReg
= ArmReadCntvCtl ();
56 TimerCtrlReg
&= ~ARM_ARCH_TIMER_ENABLE
;
57 ArmWriteCntvCtl (TimerCtrlReg
);
62 ArmGenericTimerSetTimerFreq (
66 ArmWriteCntFrq (FreqInHz
);
71 ArmGenericTimerGetTimerFreq (
75 return ArmReadCntFrq ();
80 ArmGenericTimerGetTimerVal (
84 return ArmReadCntvTval ();
89 ArmGenericTimerSetTimerVal (
93 ArmWriteCntvTval (Value
);
98 ArmGenericTimerGetSystemCount (
102 return ArmReadCntvCt ();
107 ArmGenericTimerGetTimerCtrlReg (
111 return ArmReadCntvCtl ();
116 ArmGenericTimerSetTimerCtrlReg (
120 ArmWriteCntvCtl (Value
);
125 ArmGenericTimerGetCompareVal (
129 return ArmReadCntvCval ();
134 ArmGenericTimerSetCompareVal (
138 ArmWriteCntvCval (Value
);