VirtualBox

Changeset 104125 in vbox


Ignore:
Timestamp:
Mar 30, 2024 11:18:05 AM (10 months ago)
Author:
vboxsync
Message:

VUSB: Added vusbRhAbortEpByAddr(), renamed vusbRhAbortEp() to vusbRhAbortEpByPort() for clarity. New function will be useful for OHCI/EHCI HCs which do not keep track of devices by port but rather by address.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vusb.h

    r99739 r104125  
    870870     * @param   enmDir      Endpoint direction.
    871871     */
    872     DECLR3CALLBACKMEMBER(int, pfnAbortEp,(PVUSBIROOTHUBCONNECTOR pInterface, uint32_t uPort, int EndPt, VUSBDIRECTION enmDir));
     872    DECLR3CALLBACKMEMBER(int, pfnAbortEpByPort,(PVUSBIROOTHUBCONNECTOR pInterface, uint32_t uPort, int EndPt, VUSBDIRECTION enmDir));
     873
     874    /**
     875     * Cancels and completes - with CRC failure - all URBs queued on an endpoint.
     876     * This is done in response to a guest endpoint/pipe abort.
     877     *
     878     * @returns VBox status code.
     879     * @param   pInterface  Pointer to this struct.
     880     * @param   DstAddress  Port of the device.
     881     * @param   EndPt       Endpoint number.
     882     * @param   enmDir      Endpoint direction.
     883     */
     884    DECLR3CALLBACKMEMBER(int, pfnAbortEpByAddr,(PVUSBIROOTHUBCONNECTOR pInterface, uint8_t DstAddress, int EndPt, VUSBDIRECTION enmDir));
    873885
    874886    /**
  • trunk/src/VBox/Devices/USB/DevXHCI.cpp

    r103681 r104125  
    43644364            RTCritSectLeave(&pThisCC->CritSectThrd);
    43654365            Log(("Aborting DCI %u -> ep=%u d=%u\n", uDCI, uDCI / 2, uDCI & 1 ? VUSBDIRECTION_IN : VUSBDIRECTION_OUT));
    4366             pRh->pIRhConn->pfnAbortEp(pRh->pIRhConn, uPort, uDCI / 2, uDCI & 1 ? VUSBDIRECTION_IN : VUSBDIRECTION_OUT);
     4366            pRh->pIRhConn->pfnAbortEpByPort(pRh->pIRhConn, uPort, uDCI / 2, uDCI & 1 ? VUSBDIRECTION_IN : VUSBDIRECTION_OUT);
    43674367            RTCritSectEnter(&pThisCC->CritSectThrd);
    43684368        }
  • trunk/src/VBox/Devices/USB/DrvVUSBRootHub.cpp

    r100779 r104125  
    11171117
    11181118
    1119 /** @interface_method_impl{VUSBIROOTHUBCONNECTOR,pfnAbortEp} */
    1120 static DECLCALLBACK(int) vusbRhAbortEp(PVUSBIROOTHUBCONNECTOR pInterface, uint32_t uPort, int EndPt, VUSBDIRECTION enmDir)
     1119/** @interface_method_impl{VUSBIROOTHUBCONNECTOR,pfnAbortEpByPort} */
     1120static DECLCALLBACK(int) vusbRhAbortEpByPort(PVUSBIROOTHUBCONNECTOR pInterface, uint32_t uPort, int EndPt, VUSBDIRECTION enmDir)
    11211121{
    11221122    PVUSBROOTHUB pRh = VUSBIROOTHUBCONNECTOR_2_VUSBROOTHUB(pInterface);
    1123     PVUSBDEV pDev = vusbR3RhGetVUsbDevByPortRetain(pRh, uPort, "vusbRhAbortEp");
     1123    PVUSBDEV pDev = vusbR3RhGetVUsbDevByPortRetain(pRh, uPort, "vusbRhAbortEpByPort");
    11241124
    11251125    if (pDev->pHub != pRh)
     
    11271127
    11281128    vusbDevIoThreadExecSync(pDev, (PFNRT)vusbRhAbortEpWorker, 3, pDev, EndPt, enmDir);
    1129     vusbDevRelease(pDev, "vusbRhAbortEp");
     1129    vusbDevRelease(pDev, "vusbRhAbortEpByPort");
     1130
     1131    /* The reaper thread will take care of completing the URB. */
     1132
     1133    return VINF_SUCCESS;
     1134}
     1135
     1136
     1137/** @interface_method_impl{VUSBIROOTHUBCONNECTOR,pfnAbortEpByAddr} */
     1138static DECLCALLBACK(int) vusbRhAbortEpByAddr(PVUSBIROOTHUBCONNECTOR pInterface, uint8_t DstAddress, int EndPt, VUSBDIRECTION enmDir)
     1139{
     1140    PVUSBROOTHUB pRh = VUSBIROOTHUBCONNECTOR_2_VUSBROOTHUB(pInterface);
     1141    PVUSBDEV pDev = vusbR3RhGetVUsbDevByAddrRetain(pRh, DstAddress, "vusbRhAbortEpByAddr");
     1142
     1143    if (pDev->pHub != pRh)
     1144        AssertFailedReturn(VERR_INVALID_PARAMETER);
     1145
     1146    /* This method is the same as vusbRhAbortEp[ByPort], intended for old controllers
     1147     * which don't have a defined port <-> device relationship.
     1148     */
     1149    vusbDevIoThreadExecSync(pDev, (PFNRT)vusbRhAbortEpWorker, 3, pDev, EndPt, enmDir);
     1150    vusbDevRelease(pDev, "vusbRhAbortEpByAddr");
    11301151
    11311152    /* The reaper thread will take care of completing the URB. */
     
    16511672    pThis->IRhConnector.pfnCancelUrbsEp               = vusbRhCancelUrbsEp;
    16521673    pThis->IRhConnector.pfnCancelAllUrbs              = vusbRhCancelAllUrbs;
    1653     pThis->IRhConnector.pfnAbortEp                    = vusbRhAbortEp;
     1674    pThis->IRhConnector.pfnAbortEpByPort              = vusbRhAbortEpByPort;
     1675    pThis->IRhConnector.pfnAbortEpByAddr              = vusbRhAbortEpByAddr;
    16541676    pThis->IRhConnector.pfnSetPeriodicFrameProcessing = vusbRhSetFrameProcessing;
    16551677    pThis->IRhConnector.pfnGetPeriodicFrameRate       = vusbRhGetPeriodicFrameRate;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette