These changes facilitate more robust parameter type checking and helps to identify unexpected coding errors. Most simulators can now also be compiled with a C++ compiler without warnings. Additionally, these changes have also been configured to facilitate easier backporting of simulator and device simulation modules to run under the simh v3.9+ SCP framework.
95 lines
2.2 KiB
C
95 lines
2.2 KiB
C
#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
|