Home | History | Annotate | Download | only in ArmGenericTimerPhyCounterLib
      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