VirtualBox

Changeset 81406 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
Oct 21, 2019 12:30:54 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
134120
Message:

PDM: Enabled PDM task code. Added bunch of new device helper functions. bugref:9218

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp

    r81197 r81406  
    672672    LogFlow(("pdmR0DevHlp_TMTimeVirtGetNano: caller='%p'/%d\n", pDevIns, pDevIns->iInstance));
    673673    return TMVirtualToNano(pDevIns->Internal.s.pGVM, TMVirtualGet(pDevIns->Internal.s.pGVM));
     674}
     675
     676
     677/** @interface_method_impl{PDMDEVHLPR0,pfnQueueToPtr} */
     678static DECLCALLBACK(PPDMQUEUE)  pdmR0DevHlp_QueueToPtr(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue)
     679{
     680    PDMDEV_ASSERT_DEVINS(pDevIns);
     681    RT_NOREF(pDevIns);
     682    return (PPDMQUEUE)MMHyperR3ToCC(pDevIns->Internal.s.pGVM, hQueue);
     683}
     684
     685
     686/** @interface_method_impl{PDMDEVHLPR0,pfnQueueAlloc} */
     687static DECLCALLBACK(PPDMQUEUEITEMCORE) pdmR0DevHlp_QueueAlloc(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue)
     688{
     689    return PDMQueueAlloc(pdmR0DevHlp_QueueToPtr(pDevIns, hQueue));
     690}
     691
     692
     693/** @interface_method_impl{PDMDEVHLPR0,pfnQueueInsert} */
     694static DECLCALLBACK(void) pdmR0DevHlp_QueueInsert(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue, PPDMQUEUEITEMCORE pItem)
     695{
     696    return PDMQueueInsert(pdmR0DevHlp_QueueToPtr(pDevIns, hQueue), pItem);
     697}
     698
     699
     700/** @interface_method_impl{PDMDEVHLPR0,pfnQueueInsertEx} */
     701static DECLCALLBACK(void) pdmR0DevHlp_QueueInsertEx(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue, PPDMQUEUEITEMCORE pItem,
     702                                                    uint64_t cNanoMaxDelay)
     703{
     704    return PDMQueueInsertEx(pdmR0DevHlp_QueueToPtr(pDevIns, hQueue), pItem, cNanoMaxDelay);
     705}
     706
     707
     708/** @interface_method_impl{PDMDEVHLPR0,pfnQueueFlushIfNecessary} */
     709static DECLCALLBACK(bool) pdmR0DevHlp_QueueFlushIfNecessary(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue)
     710{
     711    return PDMQueueFlushIfNecessary(pdmR0DevHlp_QueueToPtr(pDevIns, hQueue));
     712}
     713
     714
     715/** @interface_method_impl{PDMDEVHLPR0,pfnTaskTrgger} */
     716static DECLCALLBACK(int) pdmR0DevHlp_TaskTrigger(PPDMDEVINS pDevIns, PDMTASKHANDLE hTask)
     717{
     718    PDMDEV_ASSERT_DEVINS(pDevIns);
     719    LogFlow(("pdmR0DevHlp_TaskTrigger: caller='%s'/%d: hTask=%RU64\n", pDevIns->pReg->szName, pDevIns->iInstance, hTask));
     720    PGVM pGVM = pDevIns->Internal.s.pGVM;
     721    VM_ASSERT_EMT(pGVM);
     722
     723    int rc = PDMTaskTrigger(pGVM, PDMTASKTYPE_DEV, pDevIns->pDevInsForR3, hTask);
     724
     725    LogFlow(("pdmR0DevHlp_TaskTrigger: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     726    return rc;
     727}
     728
     729
     730/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventSignal} */
     731static DECLCALLBACK(int) pdmR0DevHlp_SUPSemEventSignal(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent)
     732{
     733    PDMDEV_ASSERT_DEVINS(pDevIns);
     734    LogFlow(("pdmR0DevHlp_SUPSemEventSignal: caller='%s'/%d: hEvent=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, hEvent));
     735    PGVM pGVM = pDevIns->Internal.s.pGVM;
     736    VM_ASSERT_EMT(pGVM);
     737
     738    int rc = SUPSemEventSignal(pGVM->pSession, hEvent);
     739
     740    LogFlow(("pdmR0DevHlp_SUPSemEventSignal: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     741    return rc;
     742}
     743
     744
     745/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventWaitNoResume} */
     746static DECLCALLBACK(int) pdmR0DevHlp_SUPSemEventWaitNoResume(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint32_t cMillies)
     747{
     748    PDMDEV_ASSERT_DEVINS(pDevIns);
     749    LogFlow(("pdmR0DevHlp_SUPSemEventWaitNoResume: caller='%s'/%d: hEvent=%p cNsTimeout=%RU32\n",
     750             pDevIns->pReg->szName, pDevIns->iInstance, hEvent, cMillies));
     751    PGVM pGVM = pDevIns->Internal.s.pGVM;
     752    VM_ASSERT_EMT(pGVM);
     753
     754    int rc = SUPSemEventWaitNoResume(pGVM->pSession, hEvent, cMillies);
     755
     756    LogFlow(("pdmR0DevHlp_SUPSemEventWaitNoResume: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     757    return rc;
     758}
     759
     760
     761/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventWaitNsAbsIntr} */
     762static DECLCALLBACK(int) pdmR0DevHlp_SUPSemEventWaitNsAbsIntr(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint64_t uNsTimeout)
     763{
     764    PDMDEV_ASSERT_DEVINS(pDevIns);
     765    LogFlow(("pdmR0DevHlp_SUPSemEventWaitNsAbsIntr: caller='%s'/%d: hEvent=%p uNsTimeout=%RU64\n",
     766             pDevIns->pReg->szName, pDevIns->iInstance, hEvent, uNsTimeout));
     767    PGVM pGVM = pDevIns->Internal.s.pGVM;
     768    VM_ASSERT_EMT(pGVM);
     769
     770    int rc = SUPSemEventWaitNsAbsIntr(pGVM->pSession, hEvent, uNsTimeout);
     771
     772    LogFlow(("pdmR0DevHlp_SUPSemEventWaitNsAbsIntr: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     773    return rc;
     774}
     775
     776
     777/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventWaitNsRelIntr} */
     778static DECLCALLBACK(int) pdmR0DevHlp_SUPSemEventWaitNsRelIntr(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint64_t cNsTimeout)
     779{
     780    PDMDEV_ASSERT_DEVINS(pDevIns);
     781    LogFlow(("pdmR0DevHlp_SUPSemEventWaitNsRelIntr: caller='%s'/%d: hEvent=%p cNsTimeout=%RU64\n",
     782             pDevIns->pReg->szName, pDevIns->iInstance, hEvent, cNsTimeout));
     783    PGVM pGVM = pDevIns->Internal.s.pGVM;
     784    VM_ASSERT_EMT(pGVM);
     785
     786    int rc = SUPSemEventWaitNsRelIntr(pGVM->pSession, hEvent, cNsTimeout);
     787
     788    LogFlow(("pdmR0DevHlp_SUPSemEventWaitNsRelIntr: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     789    return rc;
     790}
     791
     792
     793/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventGetResolution} */
     794static DECLCALLBACK(uint32_t) pdmR0DevHlp_SUPSemEventGetResolution(PPDMDEVINS pDevIns)
     795{
     796    PDMDEV_ASSERT_DEVINS(pDevIns);
     797    LogFlow(("pdmR0DevHlp_SUPSemEventGetResolution: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance));
     798    PGVM pGVM = pDevIns->Internal.s.pGVM;
     799    VM_ASSERT_EMT(pGVM);
     800
     801    uint32_t cNsResolution = SUPSemEventGetResolution(pGVM->pSession);
     802
     803    LogFlow(("pdmR0DevHlp_SUPSemEventGetResolution: caller='%s'/%d: returns %u\n", pDevIns->pReg->szName, pDevIns->iInstance, cNsResolution));
     804    return cNsResolution;
     805}
     806
     807
     808/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventMultiSignal} */
     809static DECLCALLBACK(int) pdmR0DevHlp_SUPSemEventMultiSignal(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti)
     810{
     811    PDMDEV_ASSERT_DEVINS(pDevIns);
     812    LogFlow(("pdmR0DevHlp_SUPSemEventMultiSignal: caller='%s'/%d: hEventMulti=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, hEventMulti));
     813    PGVM pGVM = pDevIns->Internal.s.pGVM;
     814    VM_ASSERT_EMT(pGVM);
     815
     816    int rc = SUPSemEventMultiSignal(pGVM->pSession, hEventMulti);
     817
     818    LogFlow(("pdmR0DevHlp_SUPSemEventMultiSignal: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     819    return rc;
     820}
     821
     822
     823/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventMultiReset} */
     824static DECLCALLBACK(int) pdmR0DevHlp_SUPSemEventMultiReset(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti)
     825{
     826    PDMDEV_ASSERT_DEVINS(pDevIns);
     827    LogFlow(("pdmR0DevHlp_SUPSemEventMultiReset: caller='%s'/%d: hEventMulti=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, hEventMulti));
     828    PGVM pGVM = pDevIns->Internal.s.pGVM;
     829    VM_ASSERT_EMT(pGVM);
     830
     831    int rc = SUPSemEventMultiReset(pGVM->pSession, hEventMulti);
     832
     833    LogFlow(("pdmR0DevHlp_SUPSemEventMultiReset: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     834    return rc;
     835}
     836
     837
     838/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventMultiWaitNoResume} */
     839static DECLCALLBACK(int) pdmR0DevHlp_SUPSemEventMultiWaitNoResume(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti,
     840                                                                  uint32_t cMillies)
     841{
     842    PDMDEV_ASSERT_DEVINS(pDevIns);
     843    LogFlow(("pdmR0DevHlp_SUPSemEventMultiWaitNoResume: caller='%s'/%d: hEventMulti=%p cMillies=%RU32\n",
     844             pDevIns->pReg->szName, pDevIns->iInstance, hEventMulti, cMillies));
     845    PGVM pGVM = pDevIns->Internal.s.pGVM;
     846    VM_ASSERT_EMT(pGVM);
     847
     848    int rc = SUPSemEventMultiWaitNoResume(pGVM->pSession, hEventMulti, cMillies);
     849
     850    LogFlow(("pdmR0DevHlp_SUPSemEventMultiWaitNoResume: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     851    return rc;
     852}
     853
     854
     855/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventMultiWaitNsAbsIntr} */
     856static DECLCALLBACK(int) pdmR0DevHlp_SUPSemEventMultiWaitNsAbsIntr(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti,
     857                                                                   uint64_t uNsTimeout)
     858{
     859    PDMDEV_ASSERT_DEVINS(pDevIns);
     860    LogFlow(("pdmR0DevHlp_SUPSemEventMultiWaitNsAbsIntr: caller='%s'/%d: hEventMulti=%p uNsTimeout=%RU64\n",
     861             pDevIns->pReg->szName, pDevIns->iInstance, hEventMulti, uNsTimeout));
     862    PGVM pGVM = pDevIns->Internal.s.pGVM;
     863    VM_ASSERT_EMT(pGVM);
     864
     865    int rc = SUPSemEventMultiWaitNsAbsIntr(pGVM->pSession, hEventMulti, uNsTimeout);
     866
     867    LogFlow(("pdmR0DevHlp_SUPSemEventMultiWaitNsAbsIntr: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     868    return rc;
     869}
     870
     871
     872/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventMultiWaitNsRelIntr} */
     873static DECLCALLBACK(int) pdmR0DevHlp_SUPSemEventMultiWaitNsRelIntr(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti,
     874                                                                   uint64_t cNsTimeout)
     875{
     876    PDMDEV_ASSERT_DEVINS(pDevIns);
     877    LogFlow(("pdmR0DevHlp_SUPSemEventMultiWaitNsRelIntr: caller='%s'/%d: hEventMulti=%p cNsTimeout=%RU64\n",
     878             pDevIns->pReg->szName, pDevIns->iInstance, hEventMulti, cNsTimeout));
     879    PGVM pGVM = pDevIns->Internal.s.pGVM;
     880    VM_ASSERT_EMT(pGVM);
     881
     882    int rc = SUPSemEventMultiWaitNsRelIntr(pGVM->pSession, hEventMulti, cNsTimeout);
     883
     884    LogFlow(("pdmR0DevHlp_SUPSemEventMultiWaitNsRelIntr: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     885    return rc;
     886}
     887
     888
     889/** @interface_method_impl{PDMDEVHLPR0,pfnSUPSemEventMultiGetResolution} */
     890static DECLCALLBACK(uint32_t) pdmR0DevHlp_SUPSemEventMultiGetResolution(PPDMDEVINS pDevIns)
     891{
     892    PDMDEV_ASSERT_DEVINS(pDevIns);
     893    LogFlow(("pdmR0DevHlp_SUPSemEventMultiGetResolution: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance));
     894    PGVM pGVM = pDevIns->Internal.s.pGVM;
     895    VM_ASSERT_EMT(pGVM);
     896
     897    uint32_t cNsResolution = SUPSemEventMultiGetResolution(pGVM->pSession);
     898
     899    LogFlow(("pdmR0DevHlp_SUPSemEventMultiGetResolution: caller='%s'/%d: returns %u\n", pDevIns->pReg->szName, pDevIns->iInstance, cNsResolution));
     900    return cNsResolution;
    674901}
    675902
     
    9091136    pdmR0DevHlp_TMTimeVirtGetFreq,
    9101137    pdmR0DevHlp_TMTimeVirtGetNano,
     1138    pdmR0DevHlp_QueueToPtr,
     1139    pdmR0DevHlp_QueueAlloc,
     1140    pdmR0DevHlp_QueueInsert,
     1141    pdmR0DevHlp_QueueInsertEx,
     1142    pdmR0DevHlp_QueueFlushIfNecessary,
     1143    pdmR0DevHlp_TaskTrigger,
     1144    pdmR0DevHlp_SUPSemEventSignal,
     1145    pdmR0DevHlp_SUPSemEventWaitNoResume,
     1146    pdmR0DevHlp_SUPSemEventWaitNsAbsIntr,
     1147    pdmR0DevHlp_SUPSemEventWaitNsRelIntr,
     1148    pdmR0DevHlp_SUPSemEventGetResolution,
     1149    pdmR0DevHlp_SUPSemEventMultiSignal,
     1150    pdmR0DevHlp_SUPSemEventMultiReset,
     1151    pdmR0DevHlp_SUPSemEventMultiWaitNoResume,
     1152    pdmR0DevHlp_SUPSemEventMultiWaitNsAbsIntr,
     1153    pdmR0DevHlp_SUPSemEventMultiWaitNsRelIntr,
     1154    pdmR0DevHlp_SUPSemEventMultiGetResolution,
    9111155    pdmR0DevHlp_CritSectGetNop,
    9121156    pdmR0DevHlp_SetDeviceCritSect,
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