| #ifndef KVMCLOCK_H |
| #define KVMCLOCK_H |
| |
| #define MSR_KVM_WALL_CLOCK_NEW 0x4b564d00 |
| #define MSR_KVM_SYSTEM_TIME_NEW 0x4b564d01 |
| |
| #define MAX_CPU 64 |
| |
| #define PVCLOCK_TSC_STABLE_BIT (1 << 0) |
| #define PVCLOCK_RAW_CYCLE_BIT (1 << 7) /* Get raw cycle */ |
| |
| # define NSEC_PER_SEC 1000000000ULL |
| |
| typedef u64 cycle_t; |
| |
| struct pvclock_vcpu_time_info { |
| u32 version; |
| u32 pad0; |
| u64 tsc_timestamp; |
| u64 system_time; |
| u32 tsc_to_system_mul; |
| s8 tsc_shift; |
| u8 flags; |
| u8 pad[2]; |
| } __attribute__((__packed__)); /* 32 bytes */ |
| |
| struct pvclock_wall_clock { |
| u32 version; |
| u32 sec; |
| u32 nsec; |
| } __attribute__((__packed__)); |
| |
| struct timespec { |
| long tv_sec; |
| long tv_nsec; |
| }; |
| |
| void pvclock_set_flags(unsigned char flags); |
| cycle_t kvm_clock_read(); |
| void kvm_get_wallclock(struct timespec *ts); |
| void kvm_clock_init(void *data); |
| void kvm_clock_clear(void *data); |
| |
| #endif |