7 #ifndef __ASM_ARM_KVM_ARCH_TIMER_H
8 #define __ASM_ARM_KVM_ARCH_TIMER_H
10 #include <linux/clocksource.h>
11 #include <linux/hrtimer.h>
122 #define vcpu_timer(v) (&(v)->arch.timer_cpu)
123 #define vcpu_get_timer(v,t) (&vcpu_timer(v)->timers[(t)])
124 #define vcpu_vtimer(v) (&(v)->arch.timer_cpu.timers[TIMER_VTIMER])
125 #define vcpu_ptimer(v) (&(v)->arch.timer_cpu.timers[TIMER_PTIMER])
126 #define vcpu_hvtimer(v) (&(v)->arch.timer_cpu.timers[TIMER_HVTIMER])
127 #define vcpu_hptimer(v) (&(v)->arch.timer_cpu.timers[TIMER_HPTIMER])
129 #define arch_timer_ctx_index(ctx) ((ctx) - vcpu_timer((ctx)->vcpu)->timers)
131 #define timer_vm_data(ctx) (&(ctx)->vcpu->kvm->arch.timer_data)
132 #define timer_irq(ctx) (timer_vm_data(ctx)->ppi[arch_timer_ctx_index(ctx)])
152 return (has_vhe() && cpus_have_final_cap(ARM64_HAS_ECV_CNTPOFF));
void kvm_timer_vcpu_put(struct kvm_vcpu *vcpu)
void kvm_arm_timer_write_sysreg(struct kvm_vcpu *vcpu, enum kvm_arch_timers tmr, enum kvm_arch_timer_regs treg, u64 val)
void kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu)
int kvm_arm_timer_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)
void kvm_timer_vcpu_terminate(struct kvm_vcpu *vcpu)
int __init kvm_timer_hyp_init(bool has_gic)
void kvm_timer_cpu_up(void)
u64 kvm_arm_timer_get_reg(struct kvm_vcpu *, u64 regid)
u64 kvm_arm_timer_read_sysreg(struct kvm_vcpu *vcpu, enum kvm_arch_timers tmr, enum kvm_arch_timer_regs treg)
void kvm_timer_vcpu_load(struct kvm_vcpu *vcpu)
void kvm_timer_update_run(struct kvm_vcpu *vcpu)
int kvm_arm_timer_get_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)
static bool has_cntpoff(void)
void kvm_timer_sync_user(struct kvm_vcpu *vcpu)
int kvm_timer_enable(struct kvm_vcpu *vcpu)
void kvm_timer_init_vm(struct kvm *kvm)
u64 timer_get_cval(struct arch_timer_context *ctxt)
bool kvm_timer_should_notify_user(struct kvm_vcpu *vcpu)
void kvm_timer_cpu_down(void)
void kvm_timer_init_vhe(void)
void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu)
u64 kvm_phys_timer_read(void)
u32 timer_get_ctl(struct arch_timer_context *ctxt)
void get_timer_map(struct kvm_vcpu *vcpu, struct timer_map *map)
int kvm_arm_timer_set_reg(struct kvm_vcpu *, u64 regid, u64 value)
int kvm_arm_timer_has_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)
struct arch_timer_offset offset
struct arch_timer_context::@18 irq
struct arch_timer_context timers[NR_KVM_TIMERS]
struct arch_timer_context * direct_vtimer
struct arch_timer_context * direct_ptimer
struct arch_timer_context * emul_ptimer
struct arch_timer_context * emul_vtimer