KVM
Classes | Macros | Enumerations | Functions
arm_arch_timer.h File Reference
#include <linux/clocksource.h>
#include <linux/hrtimer.h>
Include dependency graph for arm_arch_timer.h:

Go to the source code of this file.

Classes

struct  arch_timer_offset
 
struct  arch_timer_vm_data
 
struct  arch_timer_context
 
struct  timer_map
 
struct  arch_timer_cpu
 

Macros

#define vcpu_timer(v)   (&(v)->arch.timer_cpu)
 
#define vcpu_get_timer(v, t)   (&vcpu_timer(v)->timers[(t)])
 
#define vcpu_vtimer(v)   (&(v)->arch.timer_cpu.timers[TIMER_VTIMER])
 
#define vcpu_ptimer(v)   (&(v)->arch.timer_cpu.timers[TIMER_PTIMER])
 
#define vcpu_hvtimer(v)   (&(v)->arch.timer_cpu.timers[TIMER_HVTIMER])
 
#define vcpu_hptimer(v)   (&(v)->arch.timer_cpu.timers[TIMER_HPTIMER])
 
#define arch_timer_ctx_index(ctx)   ((ctx) - vcpu_timer((ctx)->vcpu)->timers)
 
#define timer_vm_data(ctx)   (&(ctx)->vcpu->kvm->arch.timer_data)
 
#define timer_irq(ctx)   (timer_vm_data(ctx)->ppi[arch_timer_ctx_index(ctx)])
 

Enumerations

enum  kvm_arch_timers {
  TIMER_PTIMER , TIMER_VTIMER , NR_KVM_EL0_TIMERS , TIMER_HVTIMER = NR_KVM_EL0_TIMERS ,
  TIMER_HPTIMER , NR_KVM_TIMERS
}
 
enum  kvm_arch_timer_regs {
  TIMER_REG_CNT , TIMER_REG_CVAL , TIMER_REG_TVAL , TIMER_REG_CTL ,
  TIMER_REG_VOFF
}
 

Functions

void get_timer_map (struct kvm_vcpu *vcpu, struct timer_map *map)
 
int __init kvm_timer_hyp_init (bool has_gic)
 
int kvm_timer_enable (struct kvm_vcpu *vcpu)
 
void kvm_timer_vcpu_reset (struct kvm_vcpu *vcpu)
 
void kvm_timer_vcpu_init (struct kvm_vcpu *vcpu)
 
void kvm_timer_sync_user (struct kvm_vcpu *vcpu)
 
bool kvm_timer_should_notify_user (struct kvm_vcpu *vcpu)
 
void kvm_timer_update_run (struct kvm_vcpu *vcpu)
 
void kvm_timer_vcpu_terminate (struct kvm_vcpu *vcpu)
 
void kvm_timer_init_vm (struct kvm *kvm)
 
u64 kvm_arm_timer_get_reg (struct kvm_vcpu *, u64 regid)
 
int kvm_arm_timer_set_reg (struct kvm_vcpu *, u64 regid, u64 value)
 
int kvm_arm_timer_set_attr (struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)
 
int kvm_arm_timer_get_attr (struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)
 
int kvm_arm_timer_has_attr (struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)
 
u64 kvm_phys_timer_read (void)
 
void kvm_timer_vcpu_load (struct kvm_vcpu *vcpu)
 
void kvm_timer_vcpu_put (struct kvm_vcpu *vcpu)
 
void kvm_timer_init_vhe (void)
 
u64 kvm_arm_timer_read_sysreg (struct kvm_vcpu *vcpu, enum kvm_arch_timers tmr, enum kvm_arch_timer_regs treg)
 
void kvm_arm_timer_write_sysreg (struct kvm_vcpu *vcpu, enum kvm_arch_timers tmr, enum kvm_arch_timer_regs treg, u64 val)
 
u32 timer_get_ctl (struct arch_timer_context *ctxt)
 
u64 timer_get_cval (struct arch_timer_context *ctxt)
 
void kvm_timer_cpu_up (void)
 
void kvm_timer_cpu_down (void)
 
static bool has_cntpoff (void)
 

Macro Definition Documentation

◆ arch_timer_ctx_index

#define arch_timer_ctx_index (   ctx)    ((ctx) - vcpu_timer((ctx)->vcpu)->timers)

Definition at line 129 of file arm_arch_timer.h.

◆ timer_irq

#define timer_irq (   ctx)    (timer_vm_data(ctx)->ppi[arch_timer_ctx_index(ctx)])

Definition at line 132 of file arm_arch_timer.h.

◆ timer_vm_data

#define timer_vm_data (   ctx)    (&(ctx)->vcpu->kvm->arch.timer_data)

Definition at line 131 of file arm_arch_timer.h.

◆ vcpu_get_timer

#define vcpu_get_timer (   v,
 
)    (&vcpu_timer(v)->timers[(t)])

Definition at line 123 of file arm_arch_timer.h.

◆ vcpu_hptimer

#define vcpu_hptimer (   v)    (&(v)->arch.timer_cpu.timers[TIMER_HPTIMER])

Definition at line 127 of file arm_arch_timer.h.

◆ vcpu_hvtimer

#define vcpu_hvtimer (   v)    (&(v)->arch.timer_cpu.timers[TIMER_HVTIMER])

Definition at line 126 of file arm_arch_timer.h.

◆ vcpu_ptimer

#define vcpu_ptimer (   v)    (&(v)->arch.timer_cpu.timers[TIMER_PTIMER])

Definition at line 125 of file arm_arch_timer.h.

◆ vcpu_timer

#define vcpu_timer (   v)    (&(v)->arch.timer_cpu)

Definition at line 122 of file arm_arch_timer.h.

◆ vcpu_vtimer

#define vcpu_vtimer (   v)    (&(v)->arch.timer_cpu.timers[TIMER_VTIMER])

Definition at line 124 of file arm_arch_timer.h.

Enumeration Type Documentation

◆ kvm_arch_timer_regs

Enumerator
TIMER_REG_CNT 
TIMER_REG_CVAL 
TIMER_REG_TVAL 
TIMER_REG_CTL 
TIMER_REG_VOFF 

Definition at line 22 of file arm_arch_timer.h.

22  {
28 };
@ TIMER_REG_VOFF
@ TIMER_REG_CTL
@ TIMER_REG_TVAL
@ TIMER_REG_CNT
@ TIMER_REG_CVAL

◆ kvm_arch_timers

Enumerator
TIMER_PTIMER 
TIMER_VTIMER 
NR_KVM_EL0_TIMERS 
TIMER_HVTIMER 
TIMER_HPTIMER 
NR_KVM_TIMERS 

Definition at line 13 of file arm_arch_timer.h.

13  {
20 };
@ NR_KVM_TIMERS
@ NR_KVM_EL0_TIMERS
@ TIMER_HPTIMER
@ TIMER_VTIMER
@ TIMER_PTIMER
@ TIMER_HVTIMER

Function Documentation

◆ get_timer_map()

void get_timer_map ( struct kvm_vcpu *  vcpu,
struct timer_map map 
)

◆ has_cntpoff()

static bool has_cntpoff ( void  )
inlinestatic

Definition at line 150 of file arm_arch_timer.h.

151 {
152  return (has_vhe() && cpus_have_final_cap(ARM64_HAS_ECV_CNTPOFF));
153 }

◆ kvm_arm_timer_get_attr()

int kvm_arm_timer_get_attr ( struct kvm_vcpu *  vcpu,
struct kvm_device_attr *  attr 
)

◆ kvm_arm_timer_get_reg()

u64 kvm_arm_timer_get_reg ( struct kvm_vcpu *  ,
u64  regid 
)

◆ kvm_arm_timer_has_attr()

int kvm_arm_timer_has_attr ( struct kvm_vcpu *  vcpu,
struct kvm_device_attr *  attr 
)

◆ kvm_arm_timer_read_sysreg()

u64 kvm_arm_timer_read_sysreg ( struct kvm_vcpu *  vcpu,
enum kvm_arch_timers  tmr,
enum kvm_arch_timer_regs  treg 
)

◆ kvm_arm_timer_set_attr()

int kvm_arm_timer_set_attr ( struct kvm_vcpu *  vcpu,
struct kvm_device_attr *  attr 
)

◆ kvm_arm_timer_set_reg()

int kvm_arm_timer_set_reg ( struct kvm_vcpu *  ,
u64  regid,
u64  value 
)

◆ kvm_arm_timer_write_sysreg()

void kvm_arm_timer_write_sysreg ( struct kvm_vcpu *  vcpu,
enum kvm_arch_timers  tmr,
enum kvm_arch_timer_regs  treg,
u64  val 
)

◆ kvm_phys_timer_read()

u64 kvm_phys_timer_read ( void  )

◆ kvm_timer_cpu_down()

void kvm_timer_cpu_down ( void  )

◆ kvm_timer_cpu_up()

void kvm_timer_cpu_up ( void  )

◆ kvm_timer_enable()

int kvm_timer_enable ( struct kvm_vcpu *  vcpu)

◆ kvm_timer_hyp_init()

int __init kvm_timer_hyp_init ( bool  has_gic)

◆ kvm_timer_init_vhe()

void kvm_timer_init_vhe ( void  )

◆ kvm_timer_init_vm()

void kvm_timer_init_vm ( struct kvm *  kvm)

◆ kvm_timer_should_notify_user()

bool kvm_timer_should_notify_user ( struct kvm_vcpu *  vcpu)

◆ kvm_timer_sync_user()

void kvm_timer_sync_user ( struct kvm_vcpu *  vcpu)

◆ kvm_timer_update_run()

void kvm_timer_update_run ( struct kvm_vcpu *  vcpu)

◆ kvm_timer_vcpu_init()

void kvm_timer_vcpu_init ( struct kvm_vcpu *  vcpu)

◆ kvm_timer_vcpu_load()

void kvm_timer_vcpu_load ( struct kvm_vcpu *  vcpu)

◆ kvm_timer_vcpu_put()

void kvm_timer_vcpu_put ( struct kvm_vcpu *  vcpu)

◆ kvm_timer_vcpu_reset()

void kvm_timer_vcpu_reset ( struct kvm_vcpu *  vcpu)

◆ kvm_timer_vcpu_terminate()

void kvm_timer_vcpu_terminate ( struct kvm_vcpu *  vcpu)

◆ timer_get_ctl()

u32 timer_get_ctl ( struct arch_timer_context ctxt)

◆ timer_get_cval()

u64 timer_get_cval ( struct arch_timer_context ctxt)