Lines Matching refs:pUsbIns

74 # define PDMUSB_ASSERT_USBINS(pUsbIns) \
76 AssertPtr(pUsbIns); \
77 Assert(pUsbIns->u32Version == PDM_USBINS_VERSION); \
78 Assert(pUsbIns->pvInstanceDataR3 == (void *)&pUsbIns->achInstanceData[0]); \
81 # define PDMUSB_ASSERT_USBINS(pUsbIns) do { } while (0)
88 static void pdmR3UsbDestroyDevice(PVM pVM, PPDMUSBINS pUsbIns);
394 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
396 if (pUsbIns->pReg->pfnVMInitComplete)
398 int rc = pUsbIns->pReg->pfnVMInitComplete(pUsbIns);
402 pUsbIns->pReg->szName, pUsbIns->iInstance, rc));
578 PPDMUSBINS pUsbIns;
579 rc = MMR3HeapAllocZEx(pVM, MM_TAG_PDM_USB, cb, (void **)&pUsbIns);
591 pUsbIns->u32Version = PDM_USBINS_VERSION;
592 //pUsbIns->Internal.s.pNext = NULL;
593 //pUsbIns->Internal.s.pPerDeviceNext = NULL;
594 pUsbIns->Internal.s.pUsbDev = pUsbDev;
595 pUsbIns->Internal.s.pVM = pVM;
596 //pUsbIns->Internal.s.pLuns = NULL;
597 pUsbIns->Internal.s.pCfg = pInstanceNode;
598 pUsbIns->Internal.s.pCfgDelete = pInstanceToDelete;
599 pUsbIns->Internal.s.pCfgGlobal = pGlobalConfig;
600 pUsbIns->Internal.s.Uuid = *pUuid;
601 //pUsbIns->Internal.s.pHub = NULL;
602 pUsbIns->Internal.s.iPort = UINT32_MAX; /* to be determined. */
606 pUsbIns->Internal.s.fVMSuspended = !fAtRuntime;
607 //pUsbIns->Internal.s.pfnAsyncNotify = NULL;
608 pUsbIns->pHlpR3 = &g_pdmR3UsbHlp;
609 pUsbIns->pReg = pUsbDev->pReg;
610 pUsbIns->pCfg = pConfig;
611 pUsbIns->pCfgGlobal = pGlobalConfig;
612 pUsbIns->iInstance = iInstance;
613 pUsbIns->pvInstanceDataR3 = &pUsbIns->achInstanceData[0];
614 pUsbIns->pszName = RTStrDup(pUsbDev->pReg->szName);
615 //pUsbIns->fTracing = 0;
616 pUsbIns->idTracing = ++pVM->pdm.s.idTracingOther;
617 pUsbIns->enmSpeed = enmSpeed;
625 pVM->pdm.s.pUsbInstances = pUsbIns;
633 pPrev1->Internal.s.pNext = pUsbIns;
639 pUsbDev->pInstances = pUsbIns;
647 pPrev2->Internal.s.pPerDeviceNext = pUsbIns;
653 Log(("PDM: Constructing USB device '%s' instance %d...\n", pUsbIns->pReg->szName, pUsbIns->iInstance));
654 rc = pUsbIns->pReg->pfnConstruct(pUsbIns, pUsbIns->iInstance, pUsbIns->pCfg, pUsbIns->pCfgGlobal);
661 rc = pHub->Reg.pfnAttachDevice(pHub->pDrvIns, pUsbIns, pszCaptureFilename, &pUsbIns->Internal.s.iPort);
666 pUsbIns->Internal.s.pHub = pHub;
669 if (fAtRuntime && pUsbIns->pReg->pfnHotPlugged)
670 pUsbIns->pReg->pfnHotPlugged(pUsbIns);
673 pUsbIns->pReg->szName, pUsbIns->iInstance, pHub));
678 pUsbIns->pReg->szName, pUsbIns->iInstance, pHub, rc));
682 AssertMsgFailed(("Failed to construct '%s'/%d! %Rra\n", pUsbIns->pReg->szName, pUsbIns->iInstance, rc));
687 pdmR3UsbDestroyDevice(pVM, pUsbIns);
1072 * @param pUsbIns The USB device instance to destroy.
1075 static void pdmR3UsbDestroyDevice(PVM pVM, PPDMUSBINS pUsbIns)
1077 Assert(!pUsbIns->Internal.s.pHub);
1083 if (pUsbIns->pReg->pfnHotUnplugged)
1084 pUsbIns->pReg->pfnHotUnplugged(pUsbIns);
1089 while (pUsbIns->Internal.s.pLuns)
1091 PPDMLUN pLun = pUsbIns->Internal.s.pLuns;
1092 pUsbIns->Internal.s.pLuns = pLun->pNext;
1099 if (pUsbIns->pReg->pfnDestruct)
1101 Log(("PDM: Destructing USB device '%s' instance %d...\n", pUsbIns->pReg->szName, pUsbIns->iInstance));
1102 pUsbIns->pReg->pfnDestruct(pUsbIns);
1104 TMR3TimerDestroyUsb(pVM, pUsbIns);
1105 SSMR3DeregisterUsb(pVM, pUsbIns, NULL, 0);
1106 pdmR3ThreadDestroyUsb(pVM, pUsbIns);
1108 pdmR3AsyncCompletionTemplateDestroyUsb(pVM, pUsbIns);
1115 if (pVM->pdm.s.pUsbInstances == pUsbIns)
1116 pVM->pdm.s.pUsbInstances = pUsbIns->Internal.s.pNext;
1120 while (pPrev && pPrev->Internal.s.pNext != pUsbIns)
1125 Assert(pPrev); Assert(pPrev != pUsbIns);
1127 pPrev->Internal.s.pNext = pUsbIns->Internal.s.pNext;
1131 PPDMUSB pUsbDev = pUsbIns->Internal.s.pUsbDev;
1132 if (pUsbDev->pInstances == pUsbIns)
1133 pUsbDev->pInstances = pUsbIns->Internal.s.pPerDeviceNext;
1137 while (pPrev && pPrev->Internal.s.pPerDeviceNext != pUsbIns)
1142 Assert(pPrev); Assert(pPrev != pUsbIns);
1144 pPrev->Internal.s.pPerDeviceNext = pUsbIns->Internal.s.pPerDeviceNext;
1150 pUsbIns->u32Version = 0;
1151 pUsbIns->pReg = NULL;
1152 if (pUsbIns->pszName)
1154 RTStrFree(pUsbIns->pszName);
1155 pUsbIns->pszName = NULL;
1157 CFGMR3RemoveNode(pUsbIns->Internal.s.pCfgDelete);
1158 MMR3HeapFree(pUsbIns);
1184 PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances;
1185 for ( ; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
1186 if (!RTUuidCompare(&pUsbIns->Internal.s.Uuid, pUuid))
1188 if (!pUsbIns)
1194 PPDMUSBHUB pHub = pUsbIns->Internal.s.pHub;
1197 int rc = pHub->Reg.pfnDetachDevice(pHub->pDrvIns, pUsbIns, pUsbIns->Internal.s.iPort);
1201 pUsbIns->pReg->szName, pUsbIns->iInstance, pHub, rc));
1207 pUsbIns->Internal.s.pHub = NULL;
1213 pdmR3UsbDestroyDevice(pVM, pUsbIns);
1259 for (PPDMUSBINS pUsbIns = pUsbDev->pInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pPerDeviceNext)
1261 if (pUsbIns->iInstance == iInstance)
1266 for (PPDMLUN pLun = pUsbIns->Internal.s.pLuns; pLun; pLun = pLun->pNext)
1328 PPDMUSBINS pUsbIns = pLun->pUsbIns;
1329 if (pUsbIns->pReg->pfnDriverAttach)
1331 rc = pUsbIns->pReg->pfnDriverAttach(pUsbIns, iLun, fFlags);
1486 static DECLCALLBACK(int) pdmR3UsbHlp_DriverAttach(PPDMUSBINS pUsbIns, RTUINT iLun, PPDMIBASE pBaseInterface,
1489 PDMUSB_ASSERT_USBINS(pUsbIns);
1490 PVM pVM = pUsbIns->Internal.s.pVM;
1493 pUsbIns->pReg->szName, pUsbIns->iInstance, iLun, pBaseInterface, ppBaseInterface, pszDesc, pszDesc));
1499 PPDMLUN pLun = pUsbIns->Internal.s.pLuns;
1527 pLun->pUsbIns = pUsbIns;
1531 pUsbIns->Internal.s.pLuns = pLun;
1535 iLun, pszDesc, pUsbIns->pReg->szName, pUsbIns->iInstance));
1540 LogFlow(("pdmR3UsbHlp_DriverAttach: caller='%s'/%d: returns %Rrc\n", pUsbIns->pReg->szName, pUsbIns->iInstance, VERR_PDM_DRIVER_ALREADY_ATTACHED));
1550 PCFGMNODE pNode = CFGMR3GetChildF(pUsbIns->Internal.s.pCfg, "LUN#%u", iLun);
1557 LogFlow(("pdmR3UsbHlp_DriverAttach: caller='%s'/%d: returns %Rrc\n", pUsbIns->pReg->szName, pUsbIns->iInstance, rc));
1563 static DECLCALLBACK(bool) pdmR3UsbHlp_AssertEMT(PPDMUSBINS pUsbIns, const char *pszFile, unsigned iLine, const char *pszFunction)
1565 PDMUSB_ASSERT_USBINS(pUsbIns);
1566 if (VM_IS_EMT(pUsbIns->Internal.s.pVM))
1570 RTStrPrintf(szMsg, sizeof(szMsg), "AssertEMT '%s'/%d\n", pUsbIns->pReg->szName, pUsbIns->iInstance);
1578 static DECLCALLBACK(bool) pdmR3UsbHlp_AssertOther(PPDMUSBINS pUsbIns, const char *pszFile, unsigned iLine, const char *pszFunction)
1580 PDMUSB_ASSERT_USBINS(pUsbIns);
1581 if (!VM_IS_EMT(pUsbIns->Internal.s.pVM))
1585 RTStrPrintf(szMsg, sizeof(szMsg), "AssertOther '%s'/%d\n", pUsbIns->pReg->szName, pUsbIns->iInstance);
1593 static DECLCALLBACK(int) pdmR3UsbHlp_DBGFStopV(PPDMUSBINS pUsbIns, const char *pszFile, unsigned iLine, const char *pszFunction, const char *pszFormat, va_list args)
1595 PDMUSB_ASSERT_USBINS(pUsbIns);
1600 pUsbIns->pReg->szName, pUsbIns->iInstance, pszFile, pszFile, iLine, pszFunction, pszFunction, pszFormat, pszFormat, pszFormat, &va2));
1604 PVM pVM = pUsbIns->Internal.s.pVM;
1610 LogFlow(("pdmR3UsbHlp_DBGFStopV: caller='%s'/%d: returns %Rrc\n", pUsbIns->pReg->szName, pUsbIns->iInstance, rc));
1616 static DECLCALLBACK(int) pdmR3UsbHlp_DBGFInfoRegister(PPDMUSBINS pUsbIns, const char *pszName, const char *pszDesc, PFNDBGFHANDLERUSB pfnHandler)
1618 PDMUSB_ASSERT_USBINS(pUsbIns);
1620 pUsbIns->pReg->szName, pUsbIns->iInstance, pszName, pszName, pszDesc, pszDesc, pfnHandler));
1622 PVM pVM = pUsbIns->Internal.s.pVM;
1624 NOREF(pVM); /** @todo int rc = DBGFR3InfoRegisterUsb(pVM, pszName, pszDesc, pfnHandler, pUsbIns); */
1627 LogFlow(("pdmR3UsbHlp_DBGFInfoRegister: caller='%s'/%d: returns %Rrc\n", pUsbIns->pReg->szName, pUsbIns->iInstance, rc));
1633 static DECLCALLBACK(void *) pdmR3UsbHlp_MMHeapAlloc(PPDMUSBINS pUsbIns, size_t cb)
1635 PDMUSB_ASSERT_USBINS(pUsbIns);
1636 LogFlow(("pdmR3UsbHlp_MMHeapAlloc: caller='%s'/%d: cb=%#x\n", pUsbIns->pReg->szName, pUsbIns->iInstance, cb));
1638 void *pv = MMR3HeapAlloc(pUsbIns->Internal.s.pVM, MM_TAG_PDM_USB_USER, cb);
1640 LogFlow(("pdmR3UsbHlp_MMHeapAlloc: caller='%s'/%d: returns %p\n", pUsbIns->pReg->szName, pUsbIns->iInstance, pv));
1646 static DECLCALLBACK(void *) pdmR3UsbHlp_MMHeapAllocZ(PPDMUSBINS pUsbIns, size_t cb)
1648 PDMUSB_ASSERT_USBINS(pUsbIns);
1649 LogFlow(("pdmR3UsbHlp_MMHeapAllocZ: caller='%s'/%d: cb=%#x\n", pUsbIns->pReg->szName, pUsbIns->iInstance, cb));
1651 void *pv = MMR3HeapAllocZ(pUsbIns->Internal.s.pVM, MM_TAG_PDM_USB_USER, cb);
1653 LogFlow(("pdmR3UsbHlp_MMHeapAllocZ: caller='%s'/%d: returns %p\n", pUsbIns->pReg->szName, pUsbIns->iInstance, pv));
1659 static DECLCALLBACK(int) pdmR3UsbHlp_PDMQueueCreate(PPDMUSBINS pUsbIns, RTUINT cbItem, RTUINT cItems, uint32_t cMilliesInterval,
1662 PDMUSB_ASSERT_USBINS(pUsbIns);
1664 pUsbIns->pReg->szName, pUsbIns->iInstance, cbItem, cItems, cMilliesInterval, pfnCallback, pszName, pszName, ppQueue));
1666 PVM pVM = pUsbIns->Internal.s.pVM;
1669 if (pUsbIns->iInstance > 0)
1671 pszName = MMR3HeapAPrintf(pVM, MM_TAG_PDM_DEVICE_DESC, "%s_%u", pszName, pUsbIns->iInstance);
1675 /** @todo int rc = PDMR3QueueCreateUsb(pVM, pUsbIns, cbItem, cItems, cMilliesInterval, pfnCallback, fGCEnabled, pszName, ppQueue); */
1678 LogFlow(("pdmR3UsbHlp_PDMQueueCreate: caller='%s'/%d: returns %Rrc *ppQueue=%p\n", pUsbIns->pReg->szName, pUsbIns->iInstance, rc, *ppQueue));
1684 static DECLCALLBACK(int) pdmR3UsbHlp_SSMRegister(PPDMUSBINS pUsbIns, uint32_t uVersion, size_t cbGuess,
1689 PDMUSB_ASSERT_USBINS(pUsbIns);
1690 VM_ASSERT_EMT(pUsbIns->Internal.s.pVM);
1693 pUsbIns->pReg->szName, pUsbIns->iInstance, uVersion, cbGuess,
1698 int rc = SSMR3RegisterUsb(pUsbIns->Internal.s.pVM, pUsbIns, pUsbIns->pReg->szName, pUsbIns->iInstance,
1704 LogFlow(("pdmR3UsbHlp_SSMRegister: caller='%s'/%d: returns %Rrc\n", pUsbIns->pReg->szName, pUsbIns->iInstance, rc));
1710 static DECLCALLBACK(void) pdmR3UsbHlp_STAMRegisterV(PPDMUSBINS pUsbIns, void *pvSample, STAMTYPE enmType, STAMVISIBILITY enmVisibility,
1713 PDMUSB_ASSERT_USBINS(pUsbIns);
1714 PVM pVM = pUsbIns->Internal.s.pVM;
1725 static DECLCALLBACK(int) pdmR3UsbHlp_TMTimerCreate(PPDMUSBINS pUsbIns, TMCLOCK enmClock, PFNTMTIMERUSB pfnCallback, void *pvUser,
1728 PDMUSB_ASSERT_USBINS(pUsbIns);
1729 PVM pVM = pUsbIns->Internal.s.pVM;
1732 pUsbIns->pReg->szName, pUsbIns->iInstance, enmClock, pfnCallback, pvUser, fFlags, pszDesc, pszDesc, ppTimer));
1734 if (pUsbIns->iInstance > 0) /** @todo use a string cache here later. */
1736 char *pszDesc2 = MMR3HeapAPrintf(pVM, MM_TAG_PDM_USB_DESC, "%s [%u]", pszDesc, pUsbIns->iInstance);
1741 int rc = TMR3TimerCreateUsb(pVM, pUsbIns, enmClock, pfnCallback, pvUser, fFlags, pszDesc, ppTimer);
1743 LogFlow(("pdmR3UsbHlp_TMTimerCreate: caller='%s'/%d: returns %Rrc\n", pUsbIns->pReg->szName, pUsbIns->iInstance, rc));
1749 static DECLCALLBACK(int) pdmR3UsbHlp_VMSetErrorV(PPDMUSBINS pUsbIns, int rc, RT_SRC_POS_DECL, const char *pszFormat, va_list va)
1751 PDMUSB_ASSERT_USBINS(pUsbIns);
1752 int rc2 = VMSetErrorV(pUsbIns->Internal.s.pVM, rc, RT_SRC_POS_ARGS, pszFormat, va); Assert(rc2 == rc); NOREF(rc2);
1758 static DECLCALLBACK(int) pdmR3UsbHlp_VMSetRuntimeErrorV(PPDMUSBINS pUsbIns, uint32_t fFlags, const char *pszErrorId, const char *pszFormat, va_list va)
1760 PDMUSB_ASSERT_USBINS(pUsbIns);
1761 int rc = VMSetRuntimeErrorV(pUsbIns->Internal.s.pVM, fFlags, pszErrorId, pszFormat, va);
1767 static DECLCALLBACK(VMSTATE) pdmR3UsbHlp_VMState(PPDMUSBINS pUsbIns)
1769 PDMUSB_ASSERT_USBINS(pUsbIns);
1771 VMSTATE enmVMState = VMR3GetState(pUsbIns->Internal.s.pVM);
1773 LogFlow(("pdmR3UsbHlp_VMState: caller='%s'/%d: returns %d (%s)\n", pUsbIns->pReg->szName, pUsbIns->iInstance,
1779 static DECLCALLBACK(int) pdmR3UsbHlp_ThreadCreate(PPDMUSBINS pUsbIns, PPPDMTHREAD ppThread, void *pvUser, PFNPDMTHREADUSB pfnThread,
1782 PDMUSB_ASSERT_USBINS(pUsbIns);
1783 VM_ASSERT_EMT(pUsbIns->Internal.s.pVM);
1785 pUsbIns->pReg->szName, pUsbIns->iInstance, ppThread, pvUser, pfnThread, pfnWakeup, cbStack, enmType, pszName, pszName));
1787 int rc = pdmR3ThreadCreateUsb(pUsbIns->Internal.s.pVM, pUsbIns, ppThread, pvUser, pfnThread, pfnWakeup, cbStack, enmType, pszName);
1789 LogFlow(("pdmR3UsbHlp_ThreadCreate: caller='%s'/%d: returns %Rrc *ppThread=%RTthrd\n", pUsbIns->pReg->szName, pUsbIns->iInstance,
1796 static DECLCALLBACK(int) pdmR3UsbHlp_SetAsyncNotification(PPDMUSBINS pUsbIns, PFNPDMUSBASYNCNOTIFY pfnAsyncNotify)
1798 PDMUSB_ASSERT_USBINS(pUsbIns);
1799 VM_ASSERT_EMT0(pUsbIns->Internal.s.pVM);
1800 LogFlow(("pdmR3UsbHlp_SetAsyncNotification: caller='%s'/%d: pfnAsyncNotify=%p\n", pUsbIns->pReg->szName, pUsbIns->iInstance, pfnAsyncNotify));
1804 AssertStmt(!pUsbIns->Internal.s.pfnAsyncNotify, rc = VERR_WRONG_ORDER);
1805 AssertStmt(pUsbIns->Internal.s.fVMSuspended || pUsbIns->Internal.s.fVMReset, rc = VERR_WRONG_ORDER);
1806 VMSTATE enmVMState = VMR3GetState(pUsbIns->Internal.s.pVM);
1817 pUsbIns->Internal.s.pfnAsyncNotify = pfnAsyncNotify;
1819 LogFlow(("pdmR3UsbHlp_SetAsyncNotification: caller='%s'/%d: returns %Rrc\n", pUsbIns->pReg->szName, pUsbIns->iInstance, rc));
1825 static DECLCALLBACK(void) pdmR3UsbHlp_AsyncNotificationCompleted(PPDMUSBINS pUsbIns)
1827 PDMUSB_ASSERT_USBINS(pUsbIns);
1828 PVM pVM = pUsbIns->Internal.s.pVM;
1839 LogFlow(("pdmR3UsbHlp_AsyncNotificationCompleted: caller='%s'/%d:\n", pUsbIns->pReg->szName, pUsbIns->iInstance));
1843 LogFlow(("pdmR3UsbHlp_AsyncNotificationCompleted: caller='%s'/%d: enmVMState=%d\n", pUsbIns->pReg->szName, pUsbIns->iInstance, enmVMState));
1848 static DECLCALLBACK(VMSUSPENDREASON) pdmR3UsbHlp_VMGetSuspendReason(PPDMUSBINS pUsbIns)
1850 PDMUSB_ASSERT_USBINS(pUsbIns);
1851 PVM pVM = pUsbIns->Internal.s.pVM;
1855 pUsbIns->pReg->szName, pUsbIns->iInstance, enmReason));
1861 static DECLCALLBACK(VMRESUMEREASON) pdmR3UsbHlp_VMGetResumeReason(PPDMUSBINS pUsbIns)
1863 PDMUSB_ASSERT_USBINS(pUsbIns);
1864 PVM pVM = pUsbIns->Internal.s.pVM;
1868 pUsbIns->pReg->szName, pUsbIns->iInstance, enmReason));