Lines Matching refs:pUrb

320         R3PTRTYPE(PVUSBURB) pUrb;
806 static DECLCALLBACK(void) ohciRhXferCompletion(PVUSBIROOTHUBPORT pInterface, PVUSBURB pUrb);
807 static DECLCALLBACK(bool) ohciRhXferError(PVUSBIROOTHUBPORT pInterface, PVUSBURB pUrb);
1582 * @param pUrb The URB.
1584 static void ohci_in_flight_add(POHCI pThis, uint32_t GCPhysTD, PVUSBURB pUrb)
1590 pUrb->Hci.u32FrameNo = pThis->HcFmNumber;
1593 pThis->aInFlight[i].pUrb = pUrb;
1605 * @param pUrb The URB.
1607 static void ohci_in_flight_add_urb(POHCI pThis, PVUSBURB pUrb)
1609 for (unsigned iTd = 0; iTd < pUrb->Hci.cTds; iTd++)
1610 ohci_in_flight_add(pThis, pUrb->Hci.paTds[iTd].TdAddr, pUrb);
1676 return pThis->aInFlight[i].pUrb;
1694 const int cFramesInFlight = pThis->HcFmNumber - pThis->aInFlight[i].pUrb->Hci.u32FrameNo;
1699 GCPhysTD, cFramesInFlight, pThis->aInFlight[i].pUrb->Hci.u32FrameNo, pThis->HcFmNumber));
1701 pThis->aInFlight[i].pUrb = NULL;
1716 * @param pUrb The URB.
1718 static int ohci_in_flight_remove_urb(POHCI pThis, PVUSBURB pUrb)
1720 int cFramesInFlight = ohci_in_flight_remove(pThis, pUrb->Hci.paTds[0].TdAddr);
1721 if (pUrb->Hci.cTds > 1)
1723 for (unsigned iTd = 1; iTd < pUrb->Hci.cTds; iTd++)
1724 if (ohci_in_flight_remove(pThis, pUrb->Hci.paTds[iTd].TdAddr) < 0)
1950 static bool ohciUnlinkTds(POHCI pThis, PVUSBURB pUrb, POHCIED pEd)
1955 if (pUrb->Hci.fUnlinked)
1957 pUrb->Hci.fUnlinked = true;
1959 if (pUrb->enmType == VUSBXFERTYPE_ISOC)
1961 for (unsigned iTd = 0; iTd < pUrb->Hci.cTds; iTd++)
1963 POHCIITD pITd = (POHCIITD)&pUrb->Hci.paTds[iTd].TdCopy[0];
1964 const uint32_t ITdAddr = pUrb->Hci.paTds[iTd].TdAddr;
1989 for (unsigned iTd = 0; iTd < pUrb->Hci.cTds; iTd++)
1991 POHCITD pTd = (POHCITD)&pUrb->Hci.paTds[iTd].TdCopy[0];
1992 const uint32_t TdAddr = pUrb->Hci.paTds[iTd].TdAddr;
2046 if (pUrb->enmStatus != VUSBSTATUS_OK)
2063 * @param pUrb The URB in question.
2066 static bool ohciHasUrbBeenCanceled(POHCI pThis, PVUSBURB pUrb, PCOHCIED pEd)
2068 if (!pUrb)
2078 ohciReadEd(pThis, pUrb->Hci.EdAddr, &Ed);
2082 if (pUrb->enmType == VUSBXFERTYPE_ISOC)
2084 for (unsigned iTd = 0; iTd < pUrb->Hci.cTds; iTd++)
2091 if ( (pUrb->Hci.paTds[iTd].TdAddr & ED_PTR_MASK)
2095 pUrb->pszDesc, iTd, pUrb->Hci.cTds, pUrb->Hci.paTds[iTd].TdAddr));
2099 ohciReadITd(pThis, pUrb->Hci.paTds[iTd].TdAddr, &u.ITd);
2100 if ( u.au32[0] != pUrb->Hci.paTds[iTd].TdCopy[0] /* hwinfo */
2101 || u.au32[1] != pUrb->Hci.paTds[iTd].TdCopy[1] /* bp0 */
2102 || u.au32[3] != pUrb->Hci.paTds[iTd].TdCopy[3] /* be */
2103 || ( u.au32[2] != pUrb->Hci.paTds[iTd].TdCopy[2] /* NextTD */
2104 && iTd + 1 < pUrb->Hci.cTds /* ignore the last one */)
2105 || u.au32[4] != pUrb->Hci.paTds[iTd].TdCopy[4] /* psw0&1 */
2106 || u.au32[5] != pUrb->Hci.paTds[iTd].TdCopy[5] /* psw2&3 */
2107 || u.au32[6] != pUrb->Hci.paTds[iTd].TdCopy[6] /* psw4&5 */
2108 || u.au32[7] != pUrb->Hci.paTds[iTd].TdCopy[7] /* psw6&7 */
2112 pUrb->pszDesc, iTd, pUrb->Hci.cTds, pUrb->Hci.paTds[iTd].TdAddr));
2115 sizeof(u.ITd), &u.ITd, sizeof(u.ITd), &pUrb->Hci.paTds[iTd].TdCopy[0]));
2119 pUrb->Hci.paTds[iTd].TdCopy[2] = u.au32[2];
2124 for (unsigned iTd = 0; iTd < pUrb->Hci.cTds; iTd++)
2131 if ( (pUrb->Hci.paTds[iTd].TdAddr & ED_PTR_MASK)
2135 pUrb->pszDesc, iTd, pUrb->Hci.cTds, pUrb->Hci.paTds[iTd].TdAddr));
2139 ohciReadTd(pThis, pUrb->Hci.paTds[iTd].TdAddr, &u.Td);
2140 if ( u.au32[0] != pUrb->Hci.paTds[iTd].TdCopy[0] /* hwinfo */
2141 || u.au32[1] != pUrb->Hci.paTds[iTd].TdCopy[1] /* cbp */
2142 || u.au32[3] != pUrb->Hci.paTds[iTd].TdCopy[3] /* be */
2143 || ( u.au32[2] != pUrb->Hci.paTds[iTd].TdCopy[2] /* NextTD */
2144 && iTd + 1 < pUrb->Hci.cTds /* ignore the last one */)
2148 pUrb->pszDesc, iTd, pUrb->Hci.cTds, pUrb->Hci.paTds[iTd].TdAddr));
2151 sizeof(u.Td), &u.Td, sizeof(u.Td), &pUrb->Hci.paTds[iTd].TdCopy[0]));
2155 pUrb->Hci.paTds[iTd].TdCopy[2] = u.au32[2];
2238 Log(("pUrb->enmStatus=%#x!!!\n", enmStatus));
2249 static void ohciRhXferCompleteIsochronousURB(POHCI pThis, PVUSBURB pUrb, POHCIED pEd, int cFmAge)
2254 for (unsigned iTd = 0; iTd < pUrb->Hci.cTds; iTd++)
2256 POHCIITD pITd = (POHCIITD)&pUrb->Hci.paTds[iTd].TdCopy[0];
2257 const uint32_t ITdAddr = pUrb->Hci.paTds[iTd].TdAddr;
2259 unsigned R = (pUrb->Hci.u32FrameNo & ITD_HWINFO_SF) - (pITd->HwInfo & ITD_HWINFO_SF);
2270 if (pUrb->enmStatus == VUSBSTATUS_OK)
2279 || pUrb->aIsocPkts[i - R].enmStatus == VUSBSTATUS_NOT_ACCESSED)
2288 pITd->aPSW[i] = ohciVUsbStatus2OhciStatus(pUrb->aIsocPkts[i - R].enmStatus)
2291 if ( pUrb->enmDir == VUSBDIRECTION_IN
2292 && ( pUrb->aIsocPkts[i - R].enmStatus == VUSBSTATUS_OK
2293 || pUrb->aIsocPkts[i - R].enmStatus == VUSBSTATUS_DATA_UNDERRUN
2294 || pUrb->aIsocPkts[i - R].enmStatus == VUSBSTATUS_DATA_OVERRUN))
2297 const unsigned cb = pUrb->aIsocPkts[i - R].cb;
2302 uint8_t *pb = &pUrb->abData[pUrb->aIsocPkts[i - R].off];
2319 i + R, off, cb, pb, pb - &pUrb->abData[0], cb, pb));
2329 if (pUrb->aIsocPkts[pUrb->cIsocPkts - 1].enmStatus == VUSBSTATUS_NOT_ACCESSED)
2343 //if (pUrb->enmStatus != VUSBSTATUS_DATA_OVERRUN)
2345 const unsigned uCC = ohciVUsbStatus2OhciStatus(pUrb->enmStatus)
2351 // pITd->HwInfo |= ohciVUsbStatus2OhciStatus(pUrb->enmStatus);
2379 pUrb->pszDesc, ITdAddr,
2380 pUrb->Hci.EdAddr,
2402 static void ohciRhXferCompleteGeneralURB(POHCI pThis, PVUSBURB pUrb, POHCIED pEd, int cFmAge)
2407 unsigned cbLeft = pUrb->cbData;
2408 uint8_t *pb = &pUrb->abData[0];
2409 for (unsigned iTd = 0; iTd < pUrb->Hci.cTds; iTd++)
2411 POHCITD pTd = (POHCITD)&pUrb->Hci.paTds[iTd].TdCopy[0];
2412 const uint32_t TdAddr = pUrb->Hci.paTds[iTd].TdAddr;
2434 if ( pUrb->enmDir == VUSBDIRECTION_IN
2435 && ( pUrb->enmStatus == VUSBSTATUS_OK
2436 || pUrb->enmStatus == VUSBSTATUS_DATA_OVERRUN
2437 || pUrb->enmStatus == VUSBSTATUS_DATA_UNDERRUN)
2458 if (pUrb->enmStatus == VUSBSTATUS_OK)
2468 pUrb->pszDesc, pUrb->Hci.EdAddr, TdAddr, cFmAge, pUrb->enmStatus, Buf.cbTotal, NewCbp, pThis->dqic));
2472 Log(("%s: ohciRhXferCompleteGeneralURB: HALTED ED=%#010x TD=%#010x (age %d) pUrb->enmStatus=%d\n",
2473 pUrb->pszDesc, pUrb->Hci.EdAddr, TdAddr, cFmAge, pUrb->enmStatus));
2479 switch (pUrb->enmStatus)
2494 Log(("pUrb->enmStatus=%#x!!!\n", pUrb->enmStatus));
2538 * @param pUrb Pointer to the URB in question.
2540 static DECLCALLBACK(void) ohciRhXferCompletion(PVUSBIROOTHUBPORT pInterface, PVUSBURB pUrb)
2544 pUrb->pszDesc, pUrb->Hci.EdAddr, pUrb->Hci.cTds, pUrb->Hci.paTds[0].TdAddr));
2551 ohciReadEd(pThis, pUrb->Hci.EdAddr, &Ed);
2563 int cFmAge = ohci_in_flight_remove_urb(pThis, pUrb);
2564 if (pUrb->enmStatus == VUSBSTATUS_UNDO)
2568 pUrb->pszDesc, pUrb->Hci.EdAddr, pUrb->Hci.cTds, pUrb->Hci.paTds[0].TdAddr, cFmAge));
2577 || (fHasBeenCanceled = ohciHasUrbBeenCanceled(pThis, pUrb, &Ed))
2578 || !ohciUnlinkTds(pThis, pUrb, &Ed)
2582 pUrb->pszDesc, pUrb->Hci.EdAddr, pUrb->Hci.cTds, pUrb->Hci.paTds[0].TdAddr, cFmAge,
2585 (Ed.HeadP & ED_PTR_MASK) != pUrb->Hci.paTds[0].TdAddr ? " ep head-changed" : "",
2598 if (pUrb->enmType == VUSBXFERTYPE_ISOC)
2599 ohciRhXferCompleteIsochronousURB(pThis, pUrb, &Ed, cFmAge);
2601 ohciRhXferCompleteGeneralURB(pThis, pUrb, &Ed, cFmAge);
2604 ohciWriteEd(pThis, pUrb->Hci.EdAddr, &Ed);
2622 * @param pUrb Pointer to the URB in question.
2624 static DECLCALLBACK(bool) ohciRhXferError(PVUSBIROOTHUBPORT pInterface, PVUSBURB pUrb)
2631 if (pUrb->enmType == VUSBXFERTYPE_ISOC)
2637 if (pUrb->enmStatus == VUSBSTATUS_STALL)
2639 Log2(("%s: ohciRhXferError: STALL, giving up.\n", pUrb->pszDesc, pUrb->enmStatus));
2650 const uint32_t TdAddr = pUrb->Hci.paTds[0].TdAddr;
2652 if (ohciHasUrbBeenCanceled(pThis, pUrb, NULL))
2654 Log(("%s: ohciRhXferError: TdAddr0=%#x canceled!\n", pUrb->pszDesc, TdAddr));
2662 POHCITD pTd = (POHCITD)&pUrb->Hci.paTds[0].TdCopy[0];
2671 Log2(("%s: ohciRhXferError: too many errors, giving up!\n", pUrb->pszDesc));
2675 Log2(("%s: ohciRhXferError: cErrs=%d: retrying...\n", pUrb->pszDesc, cErrs));
2725 PVUSBURB pUrb = VUSBIRhNewUrb(pThis->RootHub.pIRhConn, pEd->hwinfo & ED_HWINFO_FUNCTION, Buf.cbTotal, 1);
2726 if (!pUrb)
2728 Assert(pUrb->Hci.cTds == 1);
2730 pUrb->enmType = enmType;
2731 pUrb->EndPt = (pEd->hwinfo & ED_HWINFO_ENDPOINT) >> ED_HWINFO_ENDPOINT_SHIFT;
2732 pUrb->enmDir = enmDir;
2733 pUrb->fShortNotOk = !(Td.hwinfo & TD_HWINFO_ROUNDING);
2734 pUrb->enmStatus = VUSBSTATUS_OK;
2735 pUrb->Hci.EdAddr = EdAddr;
2736 pUrb->Hci.fUnlinked = false;
2737 pUrb->Hci.paTds[0].TdAddr = TdAddr;
2738 pUrb->Hci.u32FrameNo = pThis->HcFmNumber;
2739 AssertCompile(sizeof(pUrb->Hci.paTds[0].TdCopy) >= sizeof(Td));
2740 memcpy(pUrb->Hci.paTds[0].TdCopy, &Td, sizeof(Td));
2744 RTStrAPrintf(&pUrb->pszDesc, "URB %p %10s/s%c%04d", pUrb, pszListName,
2749 pUrb->cbData = Buf.cbTotal;
2754 ohciPhysRead(pThis, Buf.aVecs[0].Addr, pUrb->abData, Buf.aVecs[0].cb);
2756 ohciPhysRead(pThis, Buf.aVecs[1].Addr, &pUrb->abData[Buf.aVecs[0].cb], Buf.aVecs[1].cb);
2762 ohci_in_flight_add(pThis, TdAddr, pUrb);
2764 pUrb->pszDesc, TdAddr, EdAddr, pUrb->cbData));
2766 int rc = VUSBIRhSubmitUrb(pThis->RootHub.pIRhConn, pUrb, &pThis->RootHub.Led);
2771 Log(("ohciServiceTd: failed submitting TdAddr=%#010x EdAddr=%#010x pUrb=%p!!\n",
2772 TdAddr, EdAddr, pUrb));
2880 PVUSBURB pUrb = VUSBIRhNewUrb(pThis->RootHub.pIRhConn, pEd->hwinfo & ED_HWINFO_FUNCTION, cbTotal, cTds);
2881 if (!pUrb)
2884 Assert(pUrb->Hci.cTds == cTds);
2885 Assert(pUrb->cbData == cbTotal);
2887 pUrb->enmType = enmType;
2888 pUrb->EndPt = (pEd->hwinfo & ED_HWINFO_ENDPOINT) >> ED_HWINFO_ENDPOINT_SHIFT;
2889 pUrb->enmDir = enmDir;
2890 pUrb->fShortNotOk = !(pTail->Td.hwinfo & TD_HWINFO_ROUNDING);
2891 pUrb->enmStatus = VUSBSTATUS_OK;
2892 pUrb->Hci.EdAddr = EdAddr;
2893 pUrb->Hci.fUnlinked = false;
2894 pUrb->Hci.u32FrameNo = pThis->HcFmNumber;
2898 RTStrAPrintf(&pUrb->pszDesc, "URB %p %10s/m%c%04d", pUrb, pszListName,
2904 uint8_t *pb = &pUrb->abData[0];
2919 pUrb->Hci.paTds[iTd].TdAddr = pCur->TdAddr;
2920 AssertCompile(sizeof(pUrb->Hci.paTds[iTd].TdCopy) >= sizeof(pCur->Td));
2921 memcpy(pUrb->Hci.paTds[iTd].TdCopy, &pCur->Td, sizeof(pCur->Td));
2927 ohci_in_flight_add_urb(pThis, pUrb);
2929 pUrb->pszDesc, pUrb->cbData, EdAddr, cTds, TdAddr));
2930 int rc = VUSBIRhSubmitUrb(pThis->RootHub.pIRhConn, pUrb, &pThis->RootHub.Led);
2935 Log(("ohciServiceTdMultiple: failed submitting pUrb=%p cbData=%#x EdAddr=%#010x cTds=%d TdAddr0=%#010x - rc=%Rrc\n",
2936 pUrb, cbTotal, EdAddr, cTds, TdAddr, rc));
2966 PVUSBURB pUrb, POHCIED pEd, uint32_t EdAddr)
2969 pUrb ? pUrb->pszDesc : "", pUrb ? ": " : "", ITdAddr, EdAddr, ITdAddrPrev));
2980 PVUSBURB pUrbPrev = pThis->aInFlight[iInFlightPrev].pUrb;
3000 if (pUrb)
3002 pUrb->Hci.fUnlinked = true;
3003 if (ohciHasUrbBeenCanceled(pThis, pUrb, pEd)) /* ensures the copy is correct (paranoia). */
3006 POHCIITD pITdCopy = ((POHCIITD)pUrb->Hci.paTds[0].TdCopy);
3091 PVUSBURB pUrb = VUSBIRhNewUrb(pThis->RootHub.pIRhConn, pEd->hwinfo & ED_HWINFO_FUNCTION, cbTotal, 1);
3092 if (!pUrb)
3096 pUrb->enmType = VUSBXFERTYPE_ISOC;
3097 pUrb->EndPt = (pEd->hwinfo & ED_HWINFO_ENDPOINT) >> ED_HWINFO_ENDPOINT_SHIFT;
3098 pUrb->enmDir = enmDir;
3099 pUrb->fShortNotOk = false;
3100 pUrb->enmStatus = VUSBSTATUS_OK;
3101 pUrb->Hci.EdAddr = EdAddr;
3102 pUrb->Hci.fUnlinked = false;
3103 pUrb->Hci.u32FrameNo = pThis->HcFmNumber;
3104 pUrb->Hci.paTds[0].TdAddr = ITdAddr;
3105 AssertCompile(sizeof(pUrb->Hci.paTds[0].TdCopy) >= sizeof(*pITd));
3106 memcpy(pUrb->Hci.paTds[0].TdCopy, pITd, sizeof(*pITd));
3108 memset(pUrb->abData, 0xfe, cbTotal);
3113 RTStrAPrintf(&pUrb->pszDesc, "URB %p isoc%c%04d", pUrb, enmDir == VUSBDIRECTION_IN ? '<' : '>', s_iSerial);
3127 ohciPhysRead(pThis, (pITd->BP0 & ITD_BP0_MASK) + off0, &pUrb->abData[0], cb0);
3128 ohciPhysRead(pThis, pITd->BE & ITD_BP0_MASK, &pUrb->abData[cb0], offEnd & 0xfff);
3131 ohciPhysRead(pThis, (pITd->BP0 & ITD_BP0_MASK) + off0, pUrb->abData, offEnd - off0);
3134 ohciPhysRead(pThis, (pITd->BE & UINT32_C(0xfffff000)) + (off0 & 0xfff), pUrb->abData, cbTotal);
3138 pUrb->cIsocPkts = cFrames - R;
3140 for (unsigned i = 0; i < pUrb->cIsocPkts; i++)
3142 pUrb->aIsocPkts[i].enmStatus = VUSBSTATUS_NOT_ACCESSED;
3143 pUrb->aIsocPkts[i].off = off;
3144 off += pUrb->aIsocPkts[i].cb = aPkts[i].cb;
3151 ohci_in_flight_add_urb(pThis, pUrb);
3153 pUrb->pszDesc, pUrb->cbData, pUrb->cIsocPkts, EdAddr, ITdAddr, pITd->HwInfo & ITD_HWINFO_SF, pThis->HcFmNumber));
3154 int rc = VUSBIRhSubmitUrb(pThis->RootHub.pIRhConn, pUrb, &pThis->RootHub.Led);
3159 Log(("ohciServiceIsochronousTd: failed submitting pUrb=%p cbData=%#x EdAddr=%#010x cTds=%d ITdAddr0=%#010x - rc=%Rrc\n",
3160 pUrb, cbTotal, EdAddr, 1, ITdAddr, rc));
3269 iInFlight < 0 ? NULL : pThis->aInFlight[iInFlight].pUrb,
3393 PVUSBURB pUrb = ohciTdInFlightUrb(pThis, TdAddr);
3394 if (pUrb)
3395 pThis->RootHub.pIRhConn->pfnCancelUrbsEp(pThis->RootHub.pIRhConn, pUrb);
3442 PVUSBURB pUrb = ohciTdInFlightUrb(pThis, TdAddr);
3443 if (pUrb)
3444 pThis->RootHub.pIRhConn->pfnCancelUrbsEp(pThis->RootHub.pIRhConn, pUrb);
3586 PVUSBURB pUrb = ohciTdInFlightUrb(pThis, TdAddr);
3587 if (pUrb)
3588 pThis->RootHub.pIRhConn->pfnCancelUrbsEp(pThis->RootHub.pIRhConn, pUrb);
3664 PVUSBURB pUrb;
3675 if (pThis->aInFlight[i].pUrb)
3732 if (pThis->aInFlight[i].pUrb)
3735 pUrb = pThis->aInFlight[i].pUrb;
3737 && pUrb->enmState == VUSBURBSTATE_IN_FLIGHT
3738 && pUrb->enmType != VUSBXFERTYPE_CTRL)
3739 pThis->RootHub.pIRhConn->pfnCancelUrbsEp(pThis->RootHub.pIRhConn, pUrb);