1*740b1759SClaudio Fontana /* 2*740b1759SClaudio Fontana * QEMU System Emulator 3*740b1759SClaudio Fontana * 4*740b1759SClaudio Fontana * Copyright (c) 2003-2008 Fabrice Bellard 5*740b1759SClaudio Fontana * 6*740b1759SClaudio Fontana * Permission is hereby granted, free of charge, to any person obtaining a copy 7*740b1759SClaudio Fontana * of this software and associated documentation files (the "Software"), to deal 8*740b1759SClaudio Fontana * in the Software without restriction, including without limitation the rights 9*740b1759SClaudio Fontana * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10*740b1759SClaudio Fontana * copies of the Software, and to permit persons to whom the Software is 11*740b1759SClaudio Fontana * furnished to do so, subject to the following conditions: 12*740b1759SClaudio Fontana * 13*740b1759SClaudio Fontana * The above copyright notice and this permission notice shall be included in 14*740b1759SClaudio Fontana * all copies or substantial portions of the Software. 15*740b1759SClaudio Fontana * 16*740b1759SClaudio Fontana * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17*740b1759SClaudio Fontana * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18*740b1759SClaudio Fontana * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19*740b1759SClaudio Fontana * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20*740b1759SClaudio Fontana * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21*740b1759SClaudio Fontana * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22*740b1759SClaudio Fontana * THE SOFTWARE. 23*740b1759SClaudio Fontana */ 24*740b1759SClaudio Fontana 25*740b1759SClaudio Fontana #ifndef TIMERS_STATE_H 26*740b1759SClaudio Fontana #define TIMERS_STATE_H 27*740b1759SClaudio Fontana 28*740b1759SClaudio Fontana /* timers state, for sharing between icount and cpu-timers */ 29*740b1759SClaudio Fontana 30*740b1759SClaudio Fontana typedef struct TimersState { 31*740b1759SClaudio Fontana /* Protected by BQL. */ 32*740b1759SClaudio Fontana int64_t cpu_ticks_prev; 33*740b1759SClaudio Fontana int64_t cpu_ticks_offset; 34*740b1759SClaudio Fontana 35*740b1759SClaudio Fontana /* 36*740b1759SClaudio Fontana * Protect fields that can be respectively read outside the 37*740b1759SClaudio Fontana * BQL, and written from multiple threads. 38*740b1759SClaudio Fontana */ 39*740b1759SClaudio Fontana QemuSeqLock vm_clock_seqlock; 40*740b1759SClaudio Fontana QemuSpin vm_clock_lock; 41*740b1759SClaudio Fontana 42*740b1759SClaudio Fontana int16_t cpu_ticks_enabled; 43*740b1759SClaudio Fontana 44*740b1759SClaudio Fontana /* Conversion factor from emulated instructions to virtual clock ticks. */ 45*740b1759SClaudio Fontana int16_t icount_time_shift; 46*740b1759SClaudio Fontana 47*740b1759SClaudio Fontana /* Compensate for varying guest execution speed. */ 48*740b1759SClaudio Fontana int64_t qemu_icount_bias; 49*740b1759SClaudio Fontana 50*740b1759SClaudio Fontana int64_t vm_clock_warp_start; 51*740b1759SClaudio Fontana int64_t cpu_clock_offset; 52*740b1759SClaudio Fontana 53*740b1759SClaudio Fontana /* Only written by TCG thread */ 54*740b1759SClaudio Fontana int64_t qemu_icount; 55*740b1759SClaudio Fontana 56*740b1759SClaudio Fontana /* for adjusting icount */ 57*740b1759SClaudio Fontana QEMUTimer *icount_rt_timer; 58*740b1759SClaudio Fontana QEMUTimer *icount_vm_timer; 59*740b1759SClaudio Fontana QEMUTimer *icount_warp_timer; 60*740b1759SClaudio Fontana } TimersState; 61*740b1759SClaudio Fontana 62*740b1759SClaudio Fontana extern TimersState timers_state; 63*740b1759SClaudio Fontana 64*740b1759SClaudio Fontana /* 65*740b1759SClaudio Fontana * icount needs this internal from cpu-timers when adjusting the icount shift. 66*740b1759SClaudio Fontana */ 67*740b1759SClaudio Fontana int64_t cpu_get_clock_locked(void); 68*740b1759SClaudio Fontana 69*740b1759SClaudio Fontana #endif /* TIMERS_STATE_H */ 70