1278183Sbryanv/*- 2278183Sbryanv * Copyright (c) 2014, Bryan Venteicher <bryanv@FreeBSD.org> 3278183Sbryanv * All rights reserved. 4278183Sbryanv * 5278183Sbryanv * Redistribution and use in source and binary forms, with or without 6278183Sbryanv * modification, are permitted provided that the following conditions 7278183Sbryanv * are met: 8278183Sbryanv * 1. Redistributions of source code must retain the above copyright 9278183Sbryanv * notice, this list of conditions and the following disclaimer. 10278183Sbryanv * 2. Redistributions in binary form must reproduce the above copyright 11278183Sbryanv * notice, this list of conditions and the following disclaimer in the 12278183Sbryanv * documentation and/or other materials provided with the distribution. 13278183Sbryanv * 14278183Sbryanv * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15278183Sbryanv * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16278183Sbryanv * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17278183Sbryanv * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18278183Sbryanv * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19278183Sbryanv * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20278183Sbryanv * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21278183Sbryanv * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22278183Sbryanv * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23278183Sbryanv * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24278183Sbryanv * SUCH DAMAGE. 25278183Sbryanv * 26278183Sbryanv * $FreeBSD$ 27278183Sbryanv */ 28278183Sbryanv 29278183Sbryanv#ifndef X86_PVCLOCK 30278183Sbryanv#define X86_PVCLOCK 31278183Sbryanv 32278183Sbryanvstruct pvclock_vcpu_time_info { 33278183Sbryanv uint32_t version; 34278183Sbryanv uint32_t pad0; 35278183Sbryanv uint64_t tsc_timestamp; 36278183Sbryanv uint64_t system_time; 37278183Sbryanv uint32_t tsc_to_system_mul; 38278183Sbryanv int8_t tsc_shift; 39278183Sbryanv uint8_t flags; 40278183Sbryanv uint8_t pad[2]; 41278183Sbryanv}; 42278183Sbryanv 43278183Sbryanv#define PVCLOCK_FLAG_TSC_STABLE 0x01 44278183Sbryanv#define PVCLOCK_FLAG_GUEST_PASUED 0x02 45278183Sbryanv 46278183Sbryanvstruct pvclock_wall_clock { 47278183Sbryanv uint32_t version; 48278183Sbryanv uint32_t sec; 49278183Sbryanv uint32_t nsec; 50278183Sbryanv}; 51278183Sbryanv 52278183Sbryanvvoid pvclock_resume(void); 53278183Sbryanvuint64_t pvclock_get_last_cycles(void); 54278184Sbryanvuint64_t pvclock_tsc_freq(struct pvclock_vcpu_time_info *ti); 55278183Sbryanvuint64_t pvclock_get_timecount(struct pvclock_vcpu_time_info *ti); 56278183Sbryanvvoid pvclock_get_wallclock(struct pvclock_wall_clock *wc, 57278183Sbryanv struct timespec *ts); 58278183Sbryanv 59278183Sbryanv#endif 60