xref: /kvm-unit-tests/x86/kvmclock.h (revision c865f654ffe4c5955038aaf74f702ba62f3eb014)
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