#ifndef QEMU_TIMER_H #define QEMU_TIMER_H #include "qemu/typedefs.h" #include "qemu-common.h" #define NANOSECONDS_PER_SECOND 1000000000LL /* timers */ #define SCALE_MS 1000000 #define SCALE_US 1000 #define SCALE_NS 1 /** * QEMUClockType: * * The following clock types are available: * * @QEMU_CLOCK_REALTIME: Real time clock * * The real time clock should be used only for stuff which does not * change the virtual machine state, as it is run even if the virtual * machine is stopped. The real time clock has a frequency of 1000 * Hz. * * @QEMU_CLOCK_VIRTUAL: virtual clock * * The virtual clock is only run during the emulation. It is stopped * when the virtual machine is stopped. Virtual timers use a high * precision clock, usually cpu cycles (use ticks_per_sec). * * @QEMU_CLOCK_HOST: host clock * * The host clock should be use for device models that emulate accurate * real time sources. It will continue to run when the virtual machine * is suspended, and it will reflect system time changes the host may * undergo (e.g. due to NTP). The host clock has the same precision as * the virtual clock. * * @QEMU_CLOCK_VIRTUAL_RT: realtime clock used for icount warp * * Outside icount mode, this clock is the same as @QEMU_CLOCK_VIRTUAL. * In icount mode, this clock counts nanoseconds while the virtual * machine is running. It is used to increase @QEMU_CLOCK_VIRTUAL * while the CPUs are sleeping and thus not executing instructions. */ typedef enum { QEMU_CLOCK_REALTIME = 0, QEMU_CLOCK_VIRTUAL = 1, QEMU_CLOCK_HOST = 2, QEMU_CLOCK_VIRTUAL_RT = 3, QEMU_CLOCK_MAX } QEMUClockType; /* * QEMUClockType */ /* * qemu_clock_get_ns; * @type: the clock type * * Get the nanosecond value of a clock with * type @type * * Returns: the clock value in nanoseconds */ #if defined(__cplusplus) extern "C" { #endif int64_t qemu_clock_get_ns(QEMUClockType type); #if defined(__cplusplus) } #endif /** * qemu_clock_get_ms; * @type: the clock type * * Get the millisecond value of a clock with * type @type * * Returns: the clock value in milliseconds */ static inline int64_t qemu_clock_get_ms(QEMUClockType type) { return qemu_clock_get_ns(type) / SCALE_MS; } #endif