VirtualBox

Changeset 87761 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Feb 15, 2021 11:02:24 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142815
Message:

VMM/DrvHlp: Changed the unused (at least internally) pfnTMTimerCreate interface to pfnTimerCreate and made it return a 'handle'. More helpers is required here if someone really wants to use timers in drivers. bugref:9943

Location:
trunk/src/VBox/VMM/VMMR3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PDMDriver.cpp

    r87760 r87761  
    13181318
    13191319
    1320 /** @interface_method_impl{PDMDRVHLPR3,pfnTMTimerCreate} */
    1321 static DECLCALLBACK(int) pdmR3DrvHlp_TMTimerCreate(PPDMDRVINS pDrvIns, TMCLOCK enmClock, PFNTMTIMERDRV pfnCallback, void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer)
    1322 {
    1323     PDMDRV_ASSERT_DRVINS(pDrvIns);
    1324     LogFlow(("pdmR3DrvHlp_TMTimerCreate: caller='%s'/%d: enmClock=%d pfnCallback=%p pvUser=%p fFlags=%#x pszDesc=%p:{%s} ppTimer=%p\n",
    1325              pDrvIns->pReg->szName, pDrvIns->iInstance, enmClock, pfnCallback, pvUser, fFlags, pszDesc, pszDesc, ppTimer));
     1320/** @interface_method_impl{PDMDRVHLPR3,pfnTimerCreate} */
     1321static DECLCALLBACK(int) pdmR3DrvHlp_TimerCreate(PPDMDRVINS pDrvIns, TMCLOCK enmClock, PFNTMTIMERDRV pfnCallback, void *pvUser,
     1322                                                 uint32_t fFlags, const char *pszDesc, PTMTIMERHANDLE phTimer)
     1323{
     1324    PDMDRV_ASSERT_DRVINS(pDrvIns);
     1325    LogFlow(("pdmR3DrvHlp_TimerCreate: caller='%s'/%d: enmClock=%d pfnCallback=%p pvUser=%p fFlags=%#x pszDesc=%p:{%s} phTimer=%p\n",
     1326             pDrvIns->pReg->szName, pDrvIns->iInstance, enmClock, pfnCallback, pvUser, fFlags, pszDesc, pszDesc, phTimer));
    13261327
    13271328    /* Clear the ring-0 flag if the driver isn't configured for ring-0. */
    13281329    if (fFlags & TMTIMER_FLAGS_RING0)
    13291330    {
     1331        AssertReturn(!(fFlags & TMTIMER_FLAGS_NO_RING0), VERR_INVALID_FLAGS);
    13301332        Assert(pDrvIns->Internal.s.pDrv->pReg->fFlags & PDM_DRVREG_FLAGS_R0);
    13311333        /** @todo if (!(pDrvIns->Internal.s.fIntFlags & PDMDRVINSINT_FLAGS_R0_ENABLED))   */
    1332             fFlags &= ~TMTIMER_FLAGS_RING0;
    1333     }
    1334 
    1335     int rc = TMR3TimerCreateDriver(pDrvIns->Internal.s.pVMR3, pDrvIns, enmClock, pfnCallback, pvUser, fFlags, pszDesc, ppTimer);
    1336 
    1337     LogFlow(("pdmR3DrvHlp_TMTimerCreate: caller='%s'/%d: returns %Rrc *ppTimer=%p\n", pDrvIns->pReg->szName, pDrvIns->iInstance, rc, *ppTimer));
     1334            fFlags = (fFlags & ~TMTIMER_FLAGS_RING0) | TMTIMER_FLAGS_NO_RING0;
     1335    }
     1336    else
     1337        fFlags |= TMTIMER_FLAGS_NO_RING0;
     1338
     1339    PTMTIMERR3 pTimer = NULL;
     1340    int rc = TMR3TimerCreateDriver(pDrvIns->Internal.s.pVMR3, pDrvIns, enmClock, pfnCallback, pvUser, fFlags, pszDesc, &pTimer);
     1341    if (RT_SUCCESS(rc))
     1342        *phTimer = (TMTIMERHANDLE)pTimer;
     1343
     1344    LogFlow(("pdmR3DrvHlp_TMTimerCreate: caller='%s'/%d: returns %Rrc *phTimer=%p\n", pDrvIns->pReg->szName, pDrvIns->iInstance, rc, *phTimer));
    13381345    return rc;
    13391346}
     
    18431850    pdmR3DrvHlp_TMGetVirtualFreq,
    18441851    pdmR3DrvHlp_TMGetVirtualTime,
    1845     pdmR3DrvHlp_TMTimerCreate,
     1852    pdmR3DrvHlp_TimerCreate,
    18461853    pdmR3DrvHlp_SSMRegister,
    18471854    pdmR3DrvHlp_SSMDeregister,
  • trunk/src/VBox/VMM/VMMR3/TM.cpp

    r87760 r87761  
    15151515{
    15161516    VM_ASSERT_EMT(pVM);
     1517    AssertReturn((fFlags & (TMTIMER_FLAGS_RING0 | TMTIMER_FLAGS_NO_RING0)) != (TMTIMER_FLAGS_RING0 | TMTIMER_FLAGS_NO_RING0),
     1518                 VERR_INVALID_FLAGS);
    15171519
    15181520    /*
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette