blob: f823c6dbb65dd9dd9f752d504f30d83fc8e3e5ca [file] [log] [blame] [edit]
#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);
void kvm_get_wallclock(struct timespec *ts);
void kvm_clock_init(void *data);
void kvm_clock_clear(void *data);
#endif