tm.h revision e51fe4b097229c66ff098ddbfa63c5054e0fa176
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * TM - Time Manager. (VMM)
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * Copyright (C) 2006-2010 Oracle Corporation
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * available from http://www.virtualbox.org. This file is free software;
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * you can redistribute it and/or modify it under the terms of the GNU
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * General Public License (GPL) as published by the Free Software
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * The contents of this file may alternatively be used under the terms
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * of the Common Development and Distribution License Version 1.0
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * VirtualBox OSE distribution, in which case the provisions of the
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * CDDL are applicable instead of those of the GPL.
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * You may elect to license modified versions of this file under the
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * terms and conditions of either the GPL or the CDDL or both.
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync/** @defgroup grp_tm The Time Manager API
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync/** Enable a timer hack which improves the timer response/resolution a bit. */
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * Clock type.
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync /** Real host time.
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * This clock ticks all the time, so use with care. */
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync /** Virtual guest time.
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * This clock only ticks when the guest is running. It's implemented
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * as an offset to monotonic real time (GIP). */
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync /** Virtual guest synchronized timer time.
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * This is a special clock and timer queue for synchronizing virtual timers
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * and virtual time sources. This clock is trying to keep up with
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * TMCLOCK_VIRTUAL, but will wait for timers to be executed. If it lags
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * too far behind TMCLOCK_VIRTUAL, it will try speed up to close the
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * distance.
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * @remarks Do not use this unless you really *must*. */
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync /** Virtual CPU timestamp.
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * By default this is a function of TMCLOCK_VIRTUAL_SYNC and the virtual
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * CPU frequency. */
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync /** Number of clocks. */
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync/** @defgroup grp_tm_timer_flags Timer flags.
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync/** Use the default critical section for the class of timers. */
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync/** No critical section needed or a custom one is set using
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync * TMR3TimerSetCritSect(). */
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsyncVMMDECL(void) TMNotifyStartOfExecution(PVMCPU pVCpu);
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsyncVMM_INT_DECL(void) TMNotifyStartOfHalt(PVMCPU pVCpu);
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsyncVMMR3DECL(int) TMR3NotifySuspend(PVM pVM, PVMCPU pVCpu);
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsyncVMMR3DECL(int) TMR3NotifyResume(PVM pVM, PVMCPU pVCpu);
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsyncVMMR3DECL(int) TMR3SetWarpDrive(PVM pVM, uint32_t u32Percent);
6e59cff536e8de93f15fa1fb6b46d0ee01e06829vboxsyncVMMR3DECL(int) TMR3GetCpuLoadTimes(PVM pVM, VMCPUID idCpu, uint64_t *pcNsTotal, uint64_t *pcNsExecuting,
6e59cff536e8de93f15fa1fb6b46d0ee01e06829vboxsync/** @name Real Clock Methods
33b0e5fd502b10034575ffa7c8a30c6816222ce2vboxsync/** @name Virtual Clock Methods
VMM_INT_DECL(uint64_t) TMCpuTickGetDeadlineAndTscOffset(PVMCPU pVCpu, bool *pfOffsettedTsc, uint64_t *poffRealTSC);
#ifdef IN_RING3
VMM_INT_DECL(int) TMR3TimerCreateDevice(PVM pVM, PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback, void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer);
VMM_INT_DECL(int) TMR3TimerCreateDriver(PVM pVM, PPDMDRVINS pDrvIns, TMCLOCK enmClock, PFNTMTIMERDRV pfnCallback, void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer);
VMMR3DECL(int) TMR3TimerCreateInternal(PVM pVM, TMCLOCK enmClock, PFNTMTIMERINT pfnCallback, void *pvUser, const char *pszDesc, PPTMTIMERR3 ppTimer);
VMMR3DECL(PTMTIMERR3) TMR3TimerCreateExternal(PVM pVM, TMCLOCK enmClock, PFNTMTIMEREXT pfnCallback, void *pvUser, const char *pszDesc);