Loading...
/* * Copyright (c) 2019 Carlo Caione <ccaione@baylibre.com> * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_INCLUDE_ARCH_ARM64_TIMER_H_ #define ZEPHYR_INCLUDE_ARCH_ARM64_TIMER_H_ #ifndef _ASMLANGUAGE #include <drivers/timer/arm_arch_timer.h> #include <zephyr/types.h> #ifdef __cplusplus extern "C" { #endif #define ARM_ARCH_TIMER_IRQ ARM_TIMER_VIRTUAL_IRQ #define ARM_ARCH_TIMER_PRIO ARM_TIMER_VIRTUAL_PRIO #define ARM_ARCH_TIMER_FLAGS ARM_TIMER_VIRTUAL_FLAGS static ALWAYS_INLINE void arm_arch_timer_init(void) { } static ALWAYS_INLINE void arm_arch_timer_set_compare(uint64_t val) { write_cntv_cval_el0(val); } static ALWAYS_INLINE void arm_arch_timer_enable(unsigned char enable) { uint64_t cntv_ctl; cntv_ctl = read_cntv_ctl_el0(); if (enable) { cntv_ctl |= CNTV_CTL_ENABLE_BIT; } else { cntv_ctl &= ~CNTV_CTL_ENABLE_BIT; } write_cntv_ctl_el0(cntv_ctl); } static ALWAYS_INLINE void arm_arch_timer_set_irq_mask(bool mask) { uint64_t cntv_ctl; cntv_ctl = read_cntv_ctl_el0(); if (mask) { cntv_ctl |= CNTV_CTL_IMASK_BIT; } else { cntv_ctl &= ~CNTV_CTL_IMASK_BIT; } write_cntv_ctl_el0(cntv_ctl); } static ALWAYS_INLINE uint64_t arm_arch_timer_count(void) { return read_cntvct_el0(); } #ifdef __cplusplus } #endif #endif /* _ASMLANGUAGE */ #endif /* ZEPHYR_INCLUDE_ARCH_ARM64_TIMER_H_ */ |