Lines Matching defs:pTimer

56 # define TMTIMER_ASSERT_CRITSECT(pTimer) \
58 if ((pTimer)->pCritSect) \
61 PPDMCRITSECT pCritSect = (PPDMCRITSECT)MMHyperR3ToCC((pTimer)->CTX_SUFF(pVM), (pTimer)->pCritSect); \
64 || (enmState = (pTimer)->CTX_SUFF(pVM)->enmVMState) == VMSTATE_CREATING \
67 ("pTimer=%p (%s) pCritSect=%p (%s)\n", pTimer, R3STRING(pTimer->pszDesc), \
68 (pTimer)->pCritSect, R3STRING(PDMR3CritSectName((pTimer)->pCritSect)) )); \
72 # define TMTIMER_ASSERT_CRITSECT(pTimer) do { } while (0)
89 # define TMTIMER_ASSERT_SYNC_CRITSECT_ORDER(pVM, pTimer) \
91 if ((pTimer)->pCritSect) \
94 PPDMCRITSECT pCritSect = (PPDMCRITSECT)MMHyperR3ToCC(pVM, (pTimer)->pCritSect); \
101 ("pTimer=%p (%s) pCritSect=%p (%s)\n", pTimer, R3STRING(pTimer->pszDesc), \
102 (pTimer)->pCritSect, R3STRING(PDMR3CritSectName((pTimer)->pCritSect)) )); \
106 # define TMTIMER_ASSERT_SYNC_CRITSECT_ORDER(pVM, pTimer) do { } while (0)
273 DECLINLINE(void) tmSchedule(PTMTIMER pTimer)
275 PVM pVM = pTimer->CTX_SUFF(pVM);
281 tmTimerQueueSchedule(pVM, &pVM->tm.s.CTX_SUFF(paTimerQueues)[pTimer->enmClock]);
290 TMTIMERSTATE enmState = pTimer->enmState;
302 * @param pTimer Timer in question.
306 DECLINLINE(bool) tmTimerTry(PTMTIMER pTimer, TMTIMERSTATE enmStateNew, TMTIMERSTATE enmStateOld)
312 TM_TRY_SET_STATE(pTimer, enmStateNew, enmStateOld, fRc);
321 * @param pTimer The timer.
326 DECLINLINE(void) tmTimerLinkSchedule(PTMTIMERQUEUE pQueue, PTMTIMER pTimer)
328 Assert(!pTimer->offScheduleNext);
329 const int32_t offHeadNew = (intptr_t)pTimer - (intptr_t)pQueue;
335 pTimer->offScheduleNext = ((intptr_t)pQueue + offHead) - (intptr_t)pTimer;
337 pTimer->offScheduleNext = 0;
347 * @param pTimer Timer in question.
351 DECLINLINE(bool) tmTimerTryWithLink(PTMTIMER pTimer, TMTIMERSTATE enmStateNew, TMTIMERSTATE enmStateOld)
353 if (tmTimerTry(pTimer, enmStateNew, enmStateOld))
355 tmTimerLinkSchedule(&pTimer->CTX_SUFF(pVM)->tm.s.CTX_SUFF(paTimerQueues)[pTimer->enmClock], pTimer);
366 * @param pTimer The timer.
371 DECL_FORCE_INLINE(void) tmTimerQueueLinkActive(PTMTIMERQUEUE pQueue, PTMTIMER pTimer, uint64_t u64Expire)
373 Assert(!pTimer->offNext);
374 Assert(!pTimer->offPrev);
375 Assert(pTimer->enmState == TMTIMERSTATE_ACTIVE || pTimer->enmClock != TMCLOCK_VIRTUAL_SYNC); /* (active is not a stable state) */
385 TMTIMER_SET_NEXT(pTimer, pCur);
386 TMTIMER_SET_PREV(pTimer, pPrev);
388 TMTIMER_SET_NEXT(pPrev, pTimer);
391 TMTIMER_SET_HEAD(pQueue, pTimer);
393 DBGFTRACE_U64_TAG2(pTimer->CTX_SUFF(pVM), u64Expire, "tmTimerQueueLinkActive head", R3STRING(pTimer->pszDesc));
395 TMTIMER_SET_PREV(pCur, pTimer);
400 TMTIMER_SET_NEXT(pCur, pTimer);
401 TMTIMER_SET_PREV(pTimer, pCur);
402 DBGFTRACE_U64_TAG2(pTimer->CTX_SUFF(pVM), u64Expire, "tmTimerQueueLinkActive tail", R3STRING(pTimer->pszDesc));
409 TMTIMER_SET_HEAD(pQueue, pTimer);
411 DBGFTRACE_U64_TAG2(pTimer->CTX_SUFF(pVM), u64Expire, "tmTimerQueueLinkActive empty", R3STRING(pTimer->pszDesc));
421 * @param pTimer The timer that needs scheduling.
425 DECLINLINE(void) tmTimerQueueScheduleOne(PTMTIMERQUEUE pQueue, PTMTIMER pTimer)
435 TMTIMERSTATE enmState = pTimer->enmState;
442 if (RT_UNLIKELY(!tmTimerTry(pTimer, TMTIMERSTATE_PENDING_SCHEDULE, TMTIMERSTATE_PENDING_RESCHEDULE)))
444 tmTimerQueueUnlinkActive(pQueue, pTimer);
451 Assert(!pTimer->offNext); Assert(!pTimer->offPrev);
452 if (RT_UNLIKELY(!tmTimerTry(pTimer, TMTIMERSTATE_ACTIVE, TMTIMERSTATE_PENDING_SCHEDULE)))
454 tmTimerQueueLinkActive(pQueue, pTimer, pTimer->u64Expire);
461 if (RT_UNLIKELY(!tmTimerTry(pTimer, TMTIMERSTATE_PENDING_STOP_SCHEDULE, TMTIMERSTATE_PENDING_STOP)))
463 tmTimerQueueUnlinkActive(pQueue, pTimer);
470 Assert(!pTimer->offNext); Assert(!pTimer->offPrev);
471 if (RT_UNLIKELY(!tmTimerTry(pTimer, TMTIMERSTATE_STOPPED, TMTIMERSTATE_PENDING_STOP_SCHEDULE)))
487 tmTimerLinkSchedule(pQueue, pTimer);
488 STAM_COUNTER_INC(&pTimer->CTX_SUFF(pVM)->tm.s.CTX_SUFF_Z(StatPostponed));
501 pTimer, tmTimerState(pTimer->enmState), pTimer->enmState));
534 PTMTIMER pTimer = pNext;
536 pTimer->offScheduleNext = 0;
542 pTimer, tmTimerState(pTimer->enmState), pTimer->enmClock, pTimer->enmType, R3STRING(pTimer->pszDesc)));
543 tmTimerQueueScheduleOne(pQueue, pTimer);
544 Log2(("tmTimerQueueSchedule: %p: new %s\n", pTimer, tmTimerState(pTimer->enmState)));
1030 * @param pTimer Timer handle as returned by one of the create functions.
1032 VMMDECL(PTMTIMERR3) TMTimerR3Ptr(PTMTIMER pTimer)
1034 return (PTMTIMERR3)MMHyperCCToR3(pTimer->CTX_SUFF(pVM), pTimer);
1042 * @param pTimer Timer handle as returned by one of the create functions.
1044 VMMDECL(PTMTIMERR0) TMTimerR0Ptr(PTMTIMER pTimer)
1046 return (PTMTIMERR0)MMHyperCCToR0(pTimer->CTX_SUFF(pVM), pTimer);
1054 * @param pTimer Timer handle as returned by one of the create functions.
1056 VMMDECL(PTMTIMERRC) TMTimerRCPtr(PTMTIMER pTimer)
1058 return (PTMTIMERRC)MMHyperCCToRC(pTimer->CTX_SUFF(pVM), pTimer);
1067 * @param pTimer The timer which clock lock we wish to take.
1075 VMMDECL(int) TMTimerLock(PTMTIMER pTimer, int rcBusy)
1077 AssertPtr(pTimer);
1078 AssertReturn(pTimer->enmClock == TMCLOCK_VIRTUAL_SYNC, VERR_NOT_SUPPORTED);
1079 return PDMCritSectEnter(&pTimer->CTX_SUFF(pVM)->tm.s.VirtualSyncLock, rcBusy);
1086 * @param pTimer The timer which clock to unlock.
1088 VMMDECL(void) TMTimerUnlock(PTMTIMER pTimer)
1090 AssertPtr(pTimer);
1091 AssertReturnVoid(pTimer->enmClock == TMCLOCK_VIRTUAL_SYNC);
1092 PDMCritSectLeave(&pTimer->CTX_SUFF(pVM)->tm.s.VirtualSyncLock);
1100 * @param pTimer The timer handle.
1102 VMMDECL(bool) TMTimerIsLockOwner(PTMTIMER pTimer)
1104 AssertPtr(pTimer);
1105 AssertReturn(pTimer->enmClock == TMCLOCK_VIRTUAL_SYNC, false);
1106 return PDMCritSectIsOwner(&pTimer->CTX_SUFF(pVM)->tm.s.VirtualSyncLock);
1116 * @param pTimer The timer handle.
1119 static int tmTimerSetOptimizedStart(PVM pVM, PTMTIMER pTimer, uint64_t u64Expire)
1121 Assert(!pTimer->offPrev);
1122 Assert(!pTimer->offNext);
1123 Assert(pTimer->enmState == TMTIMERSTATE_ACTIVE);
1125 TMCLOCK const enmClock = pTimer->enmClock;
1137 ASMAtomicWriteU64(&pTimer->u64Expire, u64Expire);
1138 Log2(("tmTimerSetOptimizedStart: %p:{.pszDesc='%s', .u64Expire=%'RU64}\n", pTimer, R3STRING(pTimer->pszDesc), u64Expire));
1143 tmTimerQueueLinkActive(&pVM->tm.s.CTX_SUFF(paTimerQueues)[enmClock], pTimer, u64Expire);
1159 * @param pTimer The timer handle.
1162 static int tmTimerVirtualSyncSet(PVM pVM, PTMTIMER pTimer, uint64_t u64Expire)
1166 TMTIMER_ASSERT_SYNC_CRITSECT_ORDER(pVM, pTimer);
1171 TMTIMERSTATE enmState = pTimer->enmState;
1182 ("%'RU64 < %'RU64 %s\n", u64Expire, pVM->tm.s.u64VirtualSync, R3STRING(pTimer->pszDesc)));
1183 pTimer->u64Expire = u64Expire;
1184 TM_SET_STATE(pTimer, TMTIMERSTATE_ACTIVE);
1185 tmTimerQueueLinkActive(pQueue, pTimer, u64Expire);
1191 tmTimerQueueUnlinkActive(pQueue, pTimer);
1192 pTimer->u64Expire = u64Expire;
1193 tmTimerQueueLinkActive(pQueue, pTimer, u64Expire);
1206 AssertLogRelMsgFailed(("Invalid timer state %s: %s\n", tmTimerState(enmState), R3STRING(pTimer->pszDesc)));
1211 AssertMsgFailed(("Unknown timer state %d: %s\n", enmState, R3STRING(pTimer->pszDesc)));
1226 * @param pTimer Timer handle as returned by one of the create functions.
1229 VMMDECL(int) TMTimerSet(PTMTIMER pTimer, uint64_t u64Expire)
1231 PVM pVM = pTimer->CTX_SUFF(pVM);
1234 if (pTimer->enmClock == TMCLOCK_VIRTUAL_SYNC)
1235 return tmTimerVirtualSyncSet(pVM, pTimer, u64Expire);
1238 TMTIMER_ASSERT_CRITSECT(pTimer);
1240 DBGFTRACE_U64_TAG2(pVM, u64Expire, "TMTimerSet", R3STRING(pTimer->pszDesc));
1247 TMTIMERSTATE enmOrgState = pTimer->enmState;
1266 TMTIMERSTATE enmState1 = pTimer->enmState;
1269 && pTimer->pCritSect))
1274 if (RT_LIKELY(tmTimerTry(pTimer, TMTIMERSTATE_ACTIVE, enmState1)))
1276 tmTimerSetOptimizedStart(pVM, pTimer, u64Expire);
1294 TMTIMERSTATE enmState = pTimer->enmState;
1296 pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), cRetries, u64Expire));
1301 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_SCHEDULE_SET_EXPIRE, enmState))
1303 Assert(!pTimer->offPrev);
1304 Assert(!pTimer->offNext);
1305 pTimer->u64Expire = u64Expire;
1306 TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_SCHEDULE);
1307 tmSchedule(pTimer);
1315 if (tmTimerTry(pTimer, TMTIMERSTATE_PENDING_SCHEDULE_SET_EXPIRE, enmState))
1317 pTimer->u64Expire = u64Expire;
1318 TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_SCHEDULE);
1319 tmSchedule(pTimer);
1327 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE_SET_EXPIRE, enmState))
1329 pTimer->u64Expire = u64Expire;
1330 TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE);
1331 tmSchedule(pTimer);
1339 if (tmTimerTry(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE_SET_EXPIRE, enmState))
1341 pTimer->u64Expire = u64Expire;
1342 TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE);
1343 tmSchedule(pTimer);
1366 AssertMsgFailed(("Invalid timer state %d (%s)\n", enmState, R3STRING(pTimer->pszDesc)));
1369 AssertMsgFailed(("Unknown timer state %d (%s)\n", enmState, R3STRING(pTimer->pszDesc)));
1374 AssertMsgFailed(("Failed waiting for stable state. state=%d (%s)\n", pTimer->enmState, R3STRING(pTimer->pszDesc)));
1418 * @param pTimer The timer handle.
1423 static int tmTimerSetRelativeOptimizedStart(PVM pVM, PTMTIMER pTimer, uint64_t cTicksToNext, uint64_t *pu64Now)
1425 Assert(!pTimer->offPrev);
1426 Assert(!pTimer->offNext);
1427 Assert(pTimer->enmState == TMTIMERSTATE_ACTIVE);
1432 TMCLOCK const enmClock = pTimer->enmClock;
1434 pTimer->u64Expire = u64Expire;
1435 Log2(("tmTimerSetRelativeOptimizedStart: %p:{.pszDesc='%s', .u64Expire=%'RU64} cTicksToNext=%'RU64\n", pTimer, R3STRING(pTimer->pszDesc), u64Expire, cTicksToNext));
1440 DBGFTRACE_U64_TAG2(pVM, u64Expire, "tmTimerSetRelativeOptimizedStart", R3STRING(pTimer->pszDesc));
1441 tmTimerQueueLinkActive(&pVM->tm.s.CTX_SUFF(paTimerQueues)[enmClock], pTimer, u64Expire);
1461 static int tmTimerVirtualSyncSetRelative(PVM pVM, PTMTIMER pTimer, uint64_t cTicksToNext, uint64_t *pu64Now)
1465 TMTIMER_ASSERT_SYNC_CRITSECT_ORDER(pVM, pTimer);
1477 TMTIMERSTATE enmState = pTimer->enmState;
1486 pTimer->u64Expire = u64Expire;
1487 TM_SET_STATE(pTimer, TMTIMERSTATE_ACTIVE);
1488 tmTimerQueueLinkActive(pQueue, pTimer, u64Expire);
1494 tmTimerQueueUnlinkActive(pQueue, pTimer);
1495 pTimer->u64Expire = u64Expire;
1496 tmTimerQueueLinkActive(pQueue, pTimer, u64Expire);
1509 AssertLogRelMsgFailed(("Invalid timer state %s: %s\n", tmTimerState(enmState), R3STRING(pTimer->pszDesc)));
1514 AssertMsgFailed(("Unknown timer state %d: %s\n", enmState, R3STRING(pTimer->pszDesc)));
1529 * @param pTimer Timer handle as returned by one of the create functions.
1534 VMMDECL(int) TMTimerSetRelative(PTMTIMER pTimer, uint64_t cTicksToNext, uint64_t *pu64Now)
1536 PVM pVM = pTimer->CTX_SUFF(pVM);
1539 if (pTimer->enmClock == TMCLOCK_VIRTUAL_SYNC)
1540 return tmTimerVirtualSyncSetRelative(pVM, pTimer, cTicksToNext, pu64Now);
1543 TMTIMER_ASSERT_CRITSECT(pTimer);
1545 DBGFTRACE_U64_TAG2(pVM, cTicksToNext, "TMTimerSetRelative", R3STRING(pTimer->pszDesc));
1552 TMTIMERSTATE enmOrgState = pTimer->enmState;
1582 && pTimer->pCritSect)
1584 TMTIMERSTATE enmState = pTimer->enmState;
1587 && tmTimerTry(pTimer, TMTIMERSTATE_ACTIVE, enmState)))
1589 tmTimerSetRelativeOptimizedStart(pVM, pTimer, cTicksToNext, pu64Now);
1590 STAM_PROFILE_STOP(&pTimer->CTX_SUFF(pVM)->tm.s.CTX_SUFF_Z(StatTimerSetRelative), a);
1602 TMCLOCK const enmClock = pTimer->enmClock;
1608 TMTIMERSTATE enmState = pTimer->enmState;
1622 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_SCHEDULE_SET_EXPIRE, enmState))
1624 Assert(!pTimer->offPrev);
1625 Assert(!pTimer->offNext);
1626 pTimer->u64Expire = cTicksToNext + tmTimerSetRelativeNowWorker(pVM, enmClock, pu64Now);
1628 pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), pTimer->u64Expire, cRetries));
1629 TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_SCHEDULE);
1630 tmSchedule(pTimer);
1639 if (tmTimerTry(pTimer, TMTIMERSTATE_PENDING_SCHEDULE_SET_EXPIRE, enmState))
1641 pTimer->u64Expire = cTicksToNext + tmTimerSetRelativeNowWorker(pVM, enmClock, pu64Now);
1643 pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), pTimer->u64Expire, cRetries));
1644 TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_SCHEDULE);
1645 tmSchedule(pTimer);
1654 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE_SET_EXPIRE, enmState))
1656 pTimer->u64Expire = cTicksToNext + tmTimerSetRelativeNowWorker(pVM, enmClock, pu64Now);
1658 pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), pTimer->u64Expire, cRetries));
1659 TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE);
1660 tmSchedule(pTimer);
1669 if (tmTimerTry(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE_SET_EXPIRE, enmState))
1671 pTimer->u64Expire = cTicksToNext + tmTimerSetRelativeNowWorker(pVM, enmClock, pu64Now);
1673 pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), pTimer->u64Expire, cRetries));
1674 TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE);
1675 tmSchedule(pTimer);
1700 AssertMsgFailed(("Invalid timer state %d (%s)\n", enmState, R3STRING(pTimer->pszDesc)));
1705 AssertMsgFailed(("Unknown timer state %d (%s)\n", enmState, R3STRING(pTimer->pszDesc)));
1721 AssertMsgFailed(("Failed waiting for stable state. state=%d (%s)\n", pTimer->enmState, R3STRING(pTimer->pszDesc)));
1741 STAM_PROFILE_STOP(&pTimer->CTX_SUFF(pVM)->tm.s.CTX_SUFF_Z(StatTimerSetRelative), a);
1753 * @param pTimer Timer handle as returned by one of the create
1761 VMMDECL(int) TMTimerSetFrequencyHint(PTMTIMER pTimer, uint32_t uHzHint)
1763 TMTIMER_ASSERT_CRITSECT(pTimer);
1765 uint32_t const uHzOldHint = pTimer->uHzHint;
1766 pTimer->uHzHint = uHzHint;
1768 PVM pVM = pTimer->CTX_SUFF(pVM);
1786 * @param pTimer The timer handle.
1788 static int tmTimerVirtualSyncStop(PVM pVM, PTMTIMER pTimer)
1792 TMTIMER_ASSERT_SYNC_CRITSECT_ORDER(pVM, pTimer);
1797 if (pTimer->uHzHint)
1799 if (pTimer->uHzHint >= pVM->tm.s.uMaxHzHint)
1801 pTimer->uHzHint = 0;
1806 TMTIMERSTATE enmState = pTimer->enmState;
1810 tmTimerQueueUnlinkActive(pQueue, pTimer);
1811 TM_SET_STATE(pTimer, TMTIMERSTATE_STOPPED);
1816 TM_SET_STATE(pTimer, TMTIMERSTATE_STOPPED);
1833 AssertLogRelMsgFailed(("Invalid timer state %s: %s\n", tmTimerState(enmState), R3STRING(pTimer->pszDesc)));
1838 AssertMsgFailed(("Unknown timer state %d: %s\n", enmState, R3STRING(pTimer->pszDesc)));
1854 * @param pTimer Timer handle as returned by one of the create functions.
1856 VMMDECL(int) TMTimerStop(PTMTIMER pTimer)
1858 PVM pVM = pTimer->CTX_SUFF(pVM);
1861 if (pTimer->enmClock == TMCLOCK_VIRTUAL_SYNC)
1862 return tmTimerVirtualSyncStop(pVM, pTimer);
1865 TMTIMER_ASSERT_CRITSECT(pTimer);
1870 if (pTimer->uHzHint)
1872 if (pTimer->uHzHint >= pVM->tm.s.uMaxHzHint)
1874 pTimer->uHzHint = 0;
1884 TMTIMERSTATE enmState = pTimer->enmState;
1886 pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), cRetries));
1900 if (tmTimerTry(pTimer, TMTIMERSTATE_PENDING_STOP_SCHEDULE, enmState))
1902 tmSchedule(pTimer);
1908 if (tmTimerTry(pTimer, TMTIMERSTATE_PENDING_STOP, enmState))
1910 tmSchedule(pTimer);
1917 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_STOP, enmState))
1919 tmSchedule(pTimer);
1941 AssertMsgFailed(("Invalid timer state %d (%s)\n", enmState, R3STRING(pTimer->pszDesc)));
1944 AssertMsgFailed(("Unknown timer state %d (%s)\n", enmState, R3STRING(pTimer->pszDesc)));
1949 AssertMsgFailed(("Failed waiting for stable state. state=%d (%s)\n", pTimer->enmState, R3STRING(pTimer->pszDesc)));
1960 * @param pTimer Timer handle as returned by one of the create functions.
1962 VMMDECL(uint64_t) TMTimerGet(PTMTIMER pTimer)
1964 PVM pVM = pTimer->CTX_SUFF(pVM);
1967 switch (pTimer->enmClock)
1979 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
1982 //Log2(("TMTimerGet: returns %'RU64 (pTimer=%p:{.enmState=%s, .pszDesc='%s'})\n",
1983 // u64, pTimer, tmTimerState(pTimer->enmState), R3STRING(pTimer->pszDesc)));
1992 * @param pTimer Timer handle as returned by one of the create functions.
1994 VMMDECL(uint64_t) TMTimerGetFreq(PTMTIMER pTimer)
1996 switch (pTimer->enmClock)
2006 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
2017 * @param pTimer Timer handle as returned by one of the create functions.
2019 VMMDECL(uint64_t) TMTimerGetExpire(PTMTIMER pTimer)
2021 TMTIMER_ASSERT_CRITSECT(pTimer);
2025 TMTIMERSTATE enmState = pTimer->enmState;
2033 Log2(("TMTimerGetExpire: returns ~0 (pTimer=%p:{.enmState=%s, .pszDesc='%s'})\n",
2034 pTimer, tmTimerState(pTimer->enmState), R3STRING(pTimer->pszDesc)));
2040 Log2(("TMTimerGetExpire: returns %'RU64 (pTimer=%p:{.enmState=%s, .pszDesc='%s'})\n",
2041 pTimer->u64Expire, pTimer, tmTimerState(pTimer->enmState), R3STRING(pTimer->pszDesc)));
2042 return pTimer->u64Expire;
2057 AssertMsgFailed(("Invalid timer state %d (%s)\n", enmState, R3STRING(pTimer->pszDesc)));
2058 Log2(("TMTimerGetExpire: returns ~0 (pTimer=%p:{.enmState=%s, .pszDesc='%s'})\n",
2059 pTimer, tmTimerState(pTimer->enmState), R3STRING(pTimer->pszDesc)));
2062 AssertMsgFailed(("Unknown timer state %d (%s)\n", enmState, R3STRING(pTimer->pszDesc)));
2067 AssertMsgFailed(("Failed waiting for stable state. state=%d (%s)\n", pTimer->enmState, R3STRING(pTimer->pszDesc)));
2068 Log2(("TMTimerGetExpire: returns ~0 (pTimer=%p:{.enmState=%s, .pszDesc='%s'})\n",
2069 pTimer, tmTimerState(pTimer->enmState), R3STRING(pTimer->pszDesc)));
2079 * @param pTimer Timer handle as returned by one of the create functions.
2081 VMMDECL(bool) TMTimerIsActive(PTMTIMER pTimer)
2083 TMTIMERSTATE enmState = pTimer->enmState;
2091 Log2(("TMTimerIsActive: returns false (pTimer=%p:{.enmState=%s, .pszDesc='%s'})\n",
2092 pTimer, tmTimerState(pTimer->enmState), R3STRING(pTimer->pszDesc)));
2100 Log2(("TMTimerIsActive: returns true (pTimer=%p:{.enmState=%s, .pszDesc='%s'})\n",
2101 pTimer, tmTimerState(pTimer->enmState), R3STRING(pTimer->pszDesc)));
2109 AssertMsgFailed(("Invalid timer state %s (%s)\n", tmTimerState(enmState), R3STRING(pTimer->pszDesc)));
2110 Log2(("TMTimerIsActive: returns false (pTimer=%p:{.enmState=%s, .pszDesc='%s'})\n",
2111 pTimer, tmTimerState(pTimer->enmState), R3STRING(pTimer->pszDesc)));
2114 AssertMsgFailed(("Unknown timer state %d (%s)\n", enmState, R3STRING(pTimer->pszDesc)));
2127 * @param pTimer Timer handle as returned by one of the create functions.
2130 VMMDECL(int) TMTimerSetMillies(PTMTIMER pTimer, uint32_t cMilliesToNext)
2132 switch (pTimer->enmClock)
2136 return TMTimerSetRelative(pTimer, cMilliesToNext * UINT64_C(1000000), NULL);
2140 return TMTimerSetRelative(pTimer, cMilliesToNext * UINT64_C(1000000), NULL);
2144 return TMTimerSetRelative(pTimer, cMilliesToNext, NULL);
2147 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
2157 * @param pTimer Timer handle as returned by one of the create functions.
2160 VMMDECL(int) TMTimerSetMicro(PTMTIMER pTimer, uint64_t cMicrosToNext)
2162 switch (pTimer->enmClock)
2166 return TMTimerSetRelative(pTimer, cMicrosToNext * 1000, NULL);
2170 return TMTimerSetRelative(pTimer, cMicrosToNext * 1000, NULL);
2174 return TMTimerSetRelative(pTimer, cMicrosToNext / 1000, NULL);
2177 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
2187 * @param pTimer Timer handle as returned by one of the create functions.
2190 VMMDECL(int) TMTimerSetNano(PTMTIMER pTimer, uint64_t cNanosToNext)
2192 switch (pTimer->enmClock)
2196 return TMTimerSetRelative(pTimer, cNanosToNext, NULL);
2200 return TMTimerSetRelative(pTimer, cNanosToNext, NULL);
2204 return TMTimerSetRelative(pTimer, cNanosToNext / 1000000, NULL);
2207 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
2217 * @param pTimer Timer handle as returned by one of the create functions.
2219 VMMDECL(uint64_t) TMTimerGetNano(PTMTIMER pTimer)
2221 return TMTimerToNano(pTimer, TMTimerGet(pTimer));
2229 * @param pTimer Timer handle as returned by one of the create functions.
2231 VMMDECL(uint64_t) TMTimerGetMicro(PTMTIMER pTimer)
2233 return TMTimerToMicro(pTimer, TMTimerGet(pTimer));
2241 * @param pTimer Timer handle as returned by one of the create functions.
2243 VMMDECL(uint64_t) TMTimerGetMilli(PTMTIMER pTimer)
2245 return TMTimerToMilli(pTimer, TMTimerGet(pTimer));
2253 * @param pTimer Timer handle as returned by one of the create functions.
2258 VMMDECL(uint64_t) TMTimerToNano(PTMTIMER pTimer, uint64_t u64Ticks)
2260 switch (pTimer->enmClock)
2272 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
2282 * @param pTimer Timer handle as returned by one of the create functions.
2287 VMMDECL(uint64_t) TMTimerToMicro(PTMTIMER pTimer, uint64_t u64Ticks)
2289 switch (pTimer->enmClock)
2301 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
2311 * @param pTimer Timer handle as returned by one of the create functions.
2316 VMMDECL(uint64_t) TMTimerToMilli(PTMTIMER pTimer, uint64_t u64Ticks)
2318 switch (pTimer->enmClock)
2330 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
2340 * @param pTimer Timer handle as returned by one of the create functions.
2344 VMMDECL(uint64_t) TMTimerFromNano(PTMTIMER pTimer, uint64_t cNanoSecs)
2346 switch (pTimer->enmClock)
2358 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
2368 * @param pTimer Timer handle as returned by one of the create functions.
2372 VMMDECL(uint64_t) TMTimerFromMicro(PTMTIMER pTimer, uint64_t cMicroSecs)
2374 switch (pTimer->enmClock)
2386 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
2396 * @param pTimer Timer handle as returned by one of the create functions.
2400 VMMDECL(uint64_t) TMTimerFromMilli(PTMTIMER pTimer, uint64_t cMilliSecs)
2402 switch (pTimer->enmClock)
2414 AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));