1740b1759SClaudio Fontana /* 2740b1759SClaudio Fontana * QEMU System Emulator 3740b1759SClaudio Fontana * 4740b1759SClaudio Fontana * Copyright (c) 2003-2008 Fabrice Bellard 5740b1759SClaudio Fontana * 6740b1759SClaudio Fontana * Permission is hereby granted, free of charge, to any person obtaining a copy 7740b1759SClaudio Fontana * of this software and associated documentation files (the "Software"), to deal 8740b1759SClaudio Fontana * in the Software without restriction, including without limitation the rights 9740b1759SClaudio Fontana * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10740b1759SClaudio Fontana * copies of the Software, and to permit persons to whom the Software is 11740b1759SClaudio Fontana * furnished to do so, subject to the following conditions: 12740b1759SClaudio Fontana * 13740b1759SClaudio Fontana * The above copyright notice and this permission notice shall be included in 14740b1759SClaudio Fontana * all copies or substantial portions of the Software. 15740b1759SClaudio Fontana * 16740b1759SClaudio Fontana * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17740b1759SClaudio Fontana * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18740b1759SClaudio Fontana * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19740b1759SClaudio Fontana * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20740b1759SClaudio Fontana * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21740b1759SClaudio Fontana * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22740b1759SClaudio Fontana * THE SOFTWARE. 23740b1759SClaudio Fontana */ 24740b1759SClaudio Fontana 25740b1759SClaudio Fontana #ifndef TIMERS_STATE_H 26740b1759SClaudio Fontana #define TIMERS_STATE_H 27740b1759SClaudio Fontana 28740b1759SClaudio Fontana /* timers state, for sharing between icount and cpu-timers */ 29740b1759SClaudio Fontana 30740b1759SClaudio Fontana typedef struct TimersState { 31740b1759SClaudio Fontana /* Protected by BQL. */ 32740b1759SClaudio Fontana int64_t cpu_ticks_prev; 33740b1759SClaudio Fontana int64_t cpu_ticks_offset; 34740b1759SClaudio Fontana 35740b1759SClaudio Fontana /* 36740b1759SClaudio Fontana * Protect fields that can be respectively read outside the 37740b1759SClaudio Fontana * BQL, and written from multiple threads. 38740b1759SClaudio Fontana */ 39740b1759SClaudio Fontana QemuSeqLock vm_clock_seqlock; 40740b1759SClaudio Fontana QemuSpin vm_clock_lock; 41740b1759SClaudio Fontana 42740b1759SClaudio Fontana int16_t cpu_ticks_enabled; 43740b1759SClaudio Fontana 44740b1759SClaudio Fontana /* Conversion factor from emulated instructions to virtual clock ticks. */ 45740b1759SClaudio Fontana int16_t icount_time_shift; 46fe852ac2SPavel Dovgalyuk /* Icount delta used for shift auto adjust. */ 47fe852ac2SPavel Dovgalyuk int64_t last_delta; 48740b1759SClaudio Fontana 49740b1759SClaudio Fontana /* Compensate for varying guest execution speed. */ 50*9ef0c6d6SRichard Henderson aligned_int64_t qemu_icount_bias; 51740b1759SClaudio Fontana 52740b1759SClaudio Fontana int64_t vm_clock_warp_start; 53740b1759SClaudio Fontana int64_t cpu_clock_offset; 54740b1759SClaudio Fontana 55740b1759SClaudio Fontana /* Only written by TCG thread */ 56740b1759SClaudio Fontana int64_t qemu_icount; 57740b1759SClaudio Fontana 58740b1759SClaudio Fontana /* for adjusting icount */ 59740b1759SClaudio Fontana QEMUTimer *icount_rt_timer; 60740b1759SClaudio Fontana QEMUTimer *icount_vm_timer; 61740b1759SClaudio Fontana QEMUTimer *icount_warp_timer; 62740b1759SClaudio Fontana } TimersState; 63740b1759SClaudio Fontana 64740b1759SClaudio Fontana extern TimersState timers_state; 65740b1759SClaudio Fontana 66740b1759SClaudio Fontana /* 67740b1759SClaudio Fontana * icount needs this internal from cpu-timers when adjusting the icount shift. 68740b1759SClaudio Fontana */ 69740b1759SClaudio Fontana int64_t cpu_get_clock_locked(void); 70740b1759SClaudio Fontana 71740b1759SClaudio Fontana #endif /* TIMERS_STATE_H */ 72