1 /* 2 * Copyright 2018 The Hafnium Authors. 3 * 4 * Use of this source code is governed by a BSD-style 5 * license that can be found in the LICENSE file or at 6 * https://opensource.org/licenses/BSD-3-Clause. 7 */ 8 9 #pragma once 10 11 #include <stdbool.h> 12 #include <stdint.h> 13 14 #include "hf/arch/types.h" 15 16 /** 17 * Sets the bit to mask virtual timer interrupts. 18 */ 19 void arch_timer_mask(struct arch_regs *regs); 20 21 /** 22 * Checks whether the virtual timer is enabled and its interrupt not masked. 23 */ 24 bool arch_timer_enabled(struct arch_regs *regs); 25 26 /** 27 * Returns the number of nanoseconds remaining on the virtual timer as stored in 28 * the given `arch_regs`, or 0 if it has already expired. This is undefined if 29 * the timer is not enabled. 30 */ 31 uint64_t arch_timer_remaining_ns(struct arch_regs *regs); 32 33 /** 34 * Returns whether the timer is ready to fire: i.e. it is enabled, not masked, 35 * and the condition is met. 36 */ 37 bool arch_timer_pending(struct arch_regs *regs); 38 39 /** 40 * Checks whether the virtual timer is enabled and its interrupt not masked, for 41 * the currently active vCPU. 42 */ 43 bool arch_timer_enabled_current(void); 44 45 /** 46 * Disable the virtual timer for the currently active vCPU. 47 */ 48 void arch_timer_disable_current(void); 49 50 /** 51 * Returns the number of nanoseconds remaining on the virtual timer of the 52 * currently active vCPU, or 0 if it has already expired. This is undefined if 53 * the timer is not enabled. 54 */ 55 uint64_t arch_timer_remaining_ns_current(void); 56