linux/include/clocksource/arm_arch_timer.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2012 ARM Ltd.
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License version 2 as
   6 * published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11 * GNU General Public License for more details.
  12 *
  13 * You should have received a copy of the GNU General Public License
  14 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  15 */
  16#ifndef __CLKSOURCE_ARM_ARCH_TIMER_H
  17#define __CLKSOURCE_ARM_ARCH_TIMER_H
  18
  19#include <linux/timecounter.h>
  20#include <linux/types.h>
  21
  22#define ARCH_TIMER_CTRL_ENABLE          (1 << 0)
  23#define ARCH_TIMER_CTRL_IT_MASK         (1 << 1)
  24#define ARCH_TIMER_CTRL_IT_STAT         (1 << 2)
  25
  26#define CNTHCTL_EL1PCTEN                (1 << 0)
  27#define CNTHCTL_EL1PCEN                 (1 << 1)
  28#define CNTHCTL_EVNTEN                  (1 << 2)
  29#define CNTHCTL_EVNTDIR                 (1 << 3)
  30#define CNTHCTL_EVNTI                   (0xF << 4)
  31
  32enum arch_timer_reg {
  33        ARCH_TIMER_REG_CTRL,
  34        ARCH_TIMER_REG_TVAL,
  35};
  36
  37#define ARCH_TIMER_PHYS_ACCESS          0
  38#define ARCH_TIMER_VIRT_ACCESS          1
  39#define ARCH_TIMER_MEM_PHYS_ACCESS      2
  40#define ARCH_TIMER_MEM_VIRT_ACCESS      3
  41
  42#define ARCH_TIMER_USR_PCT_ACCESS_EN    (1 << 0) /* physical counter */
  43#define ARCH_TIMER_USR_VCT_ACCESS_EN    (1 << 1) /* virtual counter */
  44#define ARCH_TIMER_VIRT_EVT_EN          (1 << 2)
  45#define ARCH_TIMER_EVT_TRIGGER_SHIFT    (4)
  46#define ARCH_TIMER_EVT_TRIGGER_MASK     (0xF << ARCH_TIMER_EVT_TRIGGER_SHIFT)
  47#define ARCH_TIMER_USR_VT_ACCESS_EN     (1 << 8) /* virtual timer registers */
  48#define ARCH_TIMER_USR_PT_ACCESS_EN     (1 << 9) /* physical timer registers */
  49
  50#define ARCH_TIMER_EVT_STREAM_FREQ      10000   /* 100us */
  51
  52#ifdef CONFIG_ARM_ARCH_TIMER
  53
  54extern u32 arch_timer_get_rate(void);
  55extern u64 (*arch_timer_read_counter)(void);
  56extern struct timecounter *arch_timer_get_timecounter(void);
  57
  58#else
  59
  60static inline u32 arch_timer_get_rate(void)
  61{
  62        return 0;
  63}
  64
  65static inline u64 arch_timer_read_counter(void)
  66{
  67        return 0;
  68}
  69
  70static inline struct timecounter *arch_timer_get_timecounter(void)
  71{
  72        return NULL;
  73}
  74
  75#endif
  76
  77#endif
  78