Lines Matching refs:pUrb

398  * @param   pUrb                The URB to insert.
400 DECLINLINE(void) usbHidQueueAddTail(PUSBHIDURBQUEUE pQueue, PVUSBURB pUrb)
402 pUrb->Dev.pNext = NULL;
403 *pQueue->ppTail = pUrb;
404 pQueue->ppTail = &pUrb->Dev.pNext;
416 PVUSBURB pUrb = pQueue->pHead;
417 if (pUrb)
419 PVUSBURB pNext = pUrb->Dev.pNext;
424 pUrb->Dev.pNext = NULL;
426 return pUrb;
435 * @param pUrb The URB to remove.
437 DECLINLINE(bool) usbHidQueueRemove(PUSBHIDURBQUEUE pQueue, PVUSBURB pUrb)
440 if (pCur == pUrb)
441 pQueue->pHead = pUrb->Dev.pNext;
446 if (pCur->Dev.pNext == pUrb)
448 pCur->Dev.pNext = pUrb->Dev.pNext;
456 if (!pUrb->Dev.pNext)
478 * @param pUrb The URB.
480 static void usbHidLinkDone(PUSBHID pThis, PVUSBURB pUrb)
482 usbHidQueueAddTail(&pThis->DoneQueue, pUrb);
495 static int usbHidCompleteStall(PUSBHID pThis, PUSBHIDEP pEp, PVUSBURB pUrb, const char *pszWhy)
497 Log(("usbHidCompleteStall/#%u: pUrb=%p:%s: %s\n", pThis->pUsbIns->iInstance, pUrb, pUrb->pszDesc, pszWhy));
499 pUrb->enmStatus = VUSBSTATUS_STALL;
510 usbHidLinkDone(pThis, pUrb);
518 static int usbHidCompleteOk(PUSBHID pThis, PVUSBURB pUrb, size_t cbData)
520 Log(("usbHidCompleteOk/#%u: pUrb=%p:%s cbData=%#zx\n", pThis->pUsbIns->iInstance, pUrb, pUrb->pszDesc, cbData));
522 pUrb->enmStatus = VUSBSTATUS_OK;
523 pUrb->cbData = (uint32_t)cbData;
525 usbHidLinkDone(pThis, pUrb);
536 * @param pUrb Set when usbHidHandleDefaultPipe is the
541 static int usbHidResetWorker(PUSBHID pThis, PVUSBURB pUrb, bool fSetConfig)
558 if (!pUrb && !fSetConfig) /* (only device reset) */
571 if (pUrb)
572 return usbHidCompleteOk(pThis, pUrb, 0);
634 static void usbHidSetReport(PUSBHID pThis, PVUSBURB pUrb)
636 PVUSBSETUP pSetup = (PVUSBSETUP)&pUrb->abData[0];
643 uint8_t u8LEDs = pUrb->abData[sizeof(*pSetup)];
663 PVUSBURB pUrb = usbHidQueueRemoveHead(&pThis->ToHostQueue);
664 if (pUrb)
666 PUSBHIDK_REPORT pReport = (PUSBHIDK_REPORT)&pUrb->abData[0];
670 usbHidCompleteOk(pThis, pUrb, sizeof(*pReport));
768 PVUSBURB pUrb = usbHidQueueRemoveHead(&pThis->DoneQueue);
769 if (!pUrb && cMillies)
780 pUrb = usbHidQueueRemoveHead(&pThis->DoneQueue);
785 if (pUrb)
786 Log(("usbHidUrbReap/#%u: pUrb=%p:%s\n", pUsbIns->iInstance, pUrb, pUrb->pszDesc));
787 return pUrb;
805 static DECLCALLBACK(int) usbHidUrbCancel(PPDMUSBINS pUsbIns, PVUSBURB pUrb)
808 LogFlow(("usbHidUrbCancel/#%u: pUrb=%p:%s\n", pUsbIns->iInstance, pUrb, pUrb->pszDesc));
814 if (usbHidQueueRemove(&pThis->ToHostQueue, pUrb))
815 usbHidLinkDone(pThis, pUrb);
827 static int usbHidHandleIntrDevToHost(PUSBHID pThis, PUSBHIDEP pEp, PVUSBURB pUrb)
833 return usbHidCompleteStall(pThis, NULL, pUrb, "Halted pipe");
847 return usbHidCompleteOk(pThis, pUrb, 0);
858 return usbHidCompleteOk(pThis, pUrb, 0);
862 usbHidQueueAddTail(&pThis->ToHostQueue, pUrb);
867 LogFlow(("usbHidHandleIntrDevToHost: Sent report via %p:%s\n", pUrb, pUrb->pszDesc));
878 Log(("usbHidHandleIntrDevToHost: enmState=%d cbData=%#x\n", pThis->enmState, pUrb->cbData));
879 return usbHidCompleteStall(pThis, NULL, pUrb, "Really bad state (D2H)!");
887 static int usbHidHandleDefaultPipe(PUSBHID pThis, PUSBHIDEP pEp, PVUSBURB pUrb)
889 PVUSBSETUP pSetup = (PVUSBSETUP)&pUrb->abData[0];
890 LogFlow(("usbHidHandleDefaultPipe: cbData=%d\n", pUrb->cbData));
892 AssertReturn(pUrb->cbData >= sizeof(*pSetup), VERR_VUSB_FAILED_TO_QUEUE_URB);
925 cbCopy = pUrb->cbData - sizeof(*pSetup);
928 memcpy(&pUrb->abData[sizeof(*pSetup)], &g_UsbHidIfHidDesc, cbCopy);
929 return usbHidCompleteOk(pThis, pUrb, cbCopy + sizeof(*pSetup));
937 cbCopy = pUrb->cbData - sizeof(*pSetup);
940 memcpy(&pUrb->abData[sizeof(*pSetup)], &g_UsbHidReportDesc, cbCopy);
941 return usbHidCompleteOk(pThis, pUrb, cbCopy + sizeof(*pSetup));
953 return usbHidCompleteStall(pThis, pEp, pUrb, "Bad GET_DESCRIPTOR");
975 memcpy(&pUrb->abData[sizeof(*pSetup)], &wRet, sizeof(wRet));
976 return usbHidCompleteOk(pThis, pUrb, sizeof(wRet) + sizeof(*pSetup));
983 memcpy(&pUrb->abData[sizeof(*pSetup)], &wRet, sizeof(wRet));
984 return usbHidCompleteOk(pThis, pUrb, sizeof(wRet) + sizeof(*pSetup));
998 memcpy(&pUrb->abData[sizeof(*pSetup)], &wRet, sizeof(wRet));
999 return usbHidCompleteOk(pThis, pUrb, sizeof(wRet) + sizeof(*pSetup));
1010 return usbHidCompleteStall(pThis, pEp, pUrb, "Bad GET_STATUS");
1023 usbHidCompleteStall(pThis, pEp, pUrb, "TODO: standard request stuff");
1039 return usbHidCompleteOk(pThis, pUrb, 0);
1052 pUrb->abData[sizeof(*pSetup)] = pThis->bIdle;
1053 return usbHidCompleteOk(pThis, pUrb, 1);
1066 usbHidSetReport(pThis, pUrb);
1067 return usbHidCompleteOk(pThis, pUrb, 0);
1077 usbHidCompleteStall(pThis, pEp, pUrb, "TODO: class request stuff");
1083 return usbHidCompleteStall(pThis, pEp, pUrb, "Unknown control msg");
1093 static DECLCALLBACK(int) usbHidQueue(PPDMUSBINS pUsbIns, PVUSBURB pUrb)
1096 LogFlow(("usbHidQueue/#%u: pUrb=%p:%s EndPt=%#x\n", pUsbIns->iInstance, pUrb, pUrb->pszDesc, pUrb->EndPt));
1103 switch (pUrb->EndPt)
1106 rc = usbHidHandleDefaultPipe(pThis, &pThis->aEps[0], pUrb);
1112 rc = usbHidHandleIntrDevToHost(pThis, &pThis->aEps[1], pUrb);
1116 AssertMsgFailed(("EndPt=%d\n", pUrb->EndPt));