Changeset 31230 in vbox
- Timestamp:
- Jul 30, 2010 7:29:31 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
include/VBox/vusb.h (modified) (1 diff)
-
src/VBox/Devices/USB/DevOHCI.cpp (modified) (2 diffs)
-
src/VBox/Devices/USB/DrvVUSBRootHub.cpp (modified) (2 diffs)
-
src/VBox/Devices/USB/VUSBInternal.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vusb.h
r30788 r31230 495 495 */ 496 496 DECLR3CALLBACKMEMBER(void, pfnReapAsyncUrbs,(PVUSBIROOTHUBCONNECTOR pInterface, RTMSINTERVAL cMillies)); 497 498 /** 499 * Cancels and completes - with CRC failure - all URBs queued on an endpoint. 500 * This is done in response to guest URB cancellation. 501 * 502 * @returns VBox status code. 503 * @param pInterface Pointer to this struct. 504 * @param pUrb Pointer to a previously submitted URB. 505 */ 506 DECLR3CALLBACKMEMBER(int, pfnCancelUrbsEp,(PVUSBIROOTHUBCONNECTOR pInterface, PVUSBURB pUrb)); 497 507 498 508 /** -
trunk/src/VBox/Devices/USB/DevOHCI.cpp
r30568 r31230 1585 1585 } 1586 1586 1587 /** 1588 * Returns a URB associated with an in-flight TD, if any. 1589 * 1590 * @returns pointer to URB if TD is in flight. 1591 * @returns NULL if not in flight. 1592 * @param pOhci OHCI instance data. 1593 * @param GCPhysTD Physical address of the TD. 1594 */ 1595 static PVUSBURB ohciTdInFlightUrb(POHCI pOhci, uint32_t GCPhysTD) 1596 { 1597 int i; 1598 1599 i = ohci_in_flight_find(pOhci, GCPhysTD); 1600 if ( i >= 0 ) 1601 return pOhci->aInFlight[i].pUrb; 1602 else 1603 return NULL; 1604 } 1587 1605 1588 1606 /** … … 3180 3198 } 3181 3199 #endif 3200 } 3201 else 3202 { 3203 if (Ed.hwinfo & ED_HWINFO_SKIP) 3204 { 3205 LogFlow(("ohciServiceBulkList: Ed=%#010RX32 Ed.TailP=%#010RX32 SKIP\n", EdAddr, Ed.TailP)); 3206 /* If the ED is in 'skip' state, no transactions on it are allowed and we must 3207 * cancel outstanding URBs, if any. 3208 */ 3209 uint32_t TdAddr = Ed.HeadP & ED_PTR_MASK; 3210 PVUSBURB pUrb = ohciTdInFlightUrb(pOhci, TdAddr); 3211 if (pUrb) 3212 pOhci->RootHub.pIRhConn->pfnCancelUrbsEp(pOhci->RootHub.pIRhConn, pUrb); 3213 } 3182 3214 } 3183 3215 -
trunk/src/VBox/Devices/USB/DrvVUSBRootHub.cpp
r30528 r31230 573 573 574 574 575 /** @copydoc VUSBIROOTHUBCONNECTOR::pfnCancelUrbsEp */ 576 static DECLCALLBACK(int) vusbRhCancelUrbsEp(PVUSBIROOTHUBCONNECTOR pInterface, PVUSBURB pUrb) 577 { 578 PVUSBROOTHUB pRh = VUSBIROOTHUBCONNECTOR_2_VUSBROOTHUB(pInterface); 579 AssertReturn(pRh, VERR_INVALID_PARAMETER); 580 AssertReturn(pUrb, VERR_INVALID_PARAMETER); 581 582 //@todo: This method of URB canceling may not work on non-Linux hosts. 583 /* 584 * Cancel and reap the URB(s) on an endpoint. 585 */ 586 LogFlow(("vusbRhCancelUrbsEp: pRh=%p pUrb=%p\n", pRh)); 587 vusbUrbCancel(pUrb); 588 589 PVUSBURB pRipe; 590 if (pUrb->enmState == VUSBURBSTATE_REAPED) 591 pRipe = pUrb; 592 else 593 pRipe = pUrb->pUsbIns->pReg->pfnUrbReap(pUrb->pUsbIns, 0); 594 if (pRipe) 595 { 596 pRipe->enmStatus = VUSBSTATUS_CRC; 597 vusbUrbRipe(pRipe); 598 } 599 return VINF_SUCCESS; 600 } 601 575 602 /** @copydoc VUSBIROOTHUBCONNECTOR::pfnCancelAllUrbs */ 576 603 static DECLCALLBACK(void) vusbRhCancelAllUrbs(PVUSBIROOTHUBCONNECTOR pInterface) … … 906 933 pThis->IRhConnector.pfnSubmitUrb = vusbRhSubmitUrb; 907 934 pThis->IRhConnector.pfnReapAsyncUrbs= vusbRhReapAsyncUrbs; 935 pThis->IRhConnector.pfnCancelUrbsEp = vusbRhCancelUrbsEp; 908 936 pThis->IRhConnector.pfnCancelAllUrbs= vusbRhCancelAllUrbs; 909 937 pThis->IRhConnector.pfnAttachDevice = vusbRhAttachDevice; -
trunk/src/VBox/Devices/USB/VUSBInternal.h
r31058 r31230 355 355 PVUSBDEV pDevices; 356 356 #if HC_ARCH_BITS == 32 357 uint32_t Alignment0;357 // uint32_t Alignment0; 358 358 #endif 359 359 /** Availability Bitmap. */
Note:
See TracChangeset
for help on using the changeset viewer.

