1 #ifndef X86_KVMCLOCK_H 2 #define X86_KVMCLOCK_H 3 4 #define MSR_KVM_WALL_CLOCK_NEW 0x4b564d00 5 #define MSR_KVM_SYSTEM_TIME_NEW 0x4b564d01 6 7 #define MAX_CPU 64 8 9 #define PVCLOCK_TSC_STABLE_BIT (1 << 0) 10 #define PVCLOCK_RAW_CYCLE_BIT (1 << 7) /* Get raw cycle */ 11 12 # define NSEC_PER_SEC 1000000000ULL 13 14 typedef u64 cycle_t; 15 16 struct pvclock_vcpu_time_info { 17 u32 version; 18 u32 pad0; 19 u64 tsc_timestamp; 20 u64 system_time; 21 u32 tsc_to_system_mul; 22 s8 tsc_shift; 23 u8 flags; 24 u8 pad[2]; 25 } __attribute__((__packed__)); /* 32 bytes */ 26 27 struct pvclock_wall_clock { 28 u32 version; 29 u32 sec; 30 u32 nsec; 31 } __attribute__((__packed__)); 32 33 struct timespec { 34 long tv_sec; 35 long tv_nsec; 36 }; 37 38 void pvclock_set_flags(unsigned char flags); 39 cycle_t kvm_clock_read(void); 40 void kvm_get_wallclock(struct timespec *ts); 41 void kvm_clock_init(void *data); 42 void kvm_clock_clear(void *data); 43 44 #endif 45