VirtualBox

Changeset 67590 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Jun 23, 2017 7:24:52 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
116348
Message:

VUSB: Bit of infrastructure to allow frame delta (interval) tracking.

Location:
trunk/src/VBox/Devices/USB
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/USB/DrvVUSBRootHub.cpp

    r67589 r67590  
    982982
    983983/** @interface_method_impl{VUSBIROOTHUBCONNECTOR,pfnGetPeriodicFrameRate} */
    984 static DECLCALLBACK(uint32_t) vusbRhGetPriodicFrameRate(PVUSBIROOTHUBCONNECTOR pInterface)
     984static DECLCALLBACK(uint32_t) vusbRhGetPeriodicFrameRate(PVUSBIROOTHUBCONNECTOR pInterface)
    985985{
    986986    PVUSBROOTHUB pThis = VUSBIROOTHUBCONNECTOR_2_VUSBROOTHUB(pInterface);
    987987
    988988    return pThis->uFrameRate;
     989}
     990
     991/** @interface_method_impl{VUSBIROOTHUBCONNECTOR,pfnGetPeriodicFrameRate} */
     992static DECLCALLBACK(uint32_t) vusbRhUpdateIsocFrameDelta(PVUSBIROOTHUBCONNECTOR pInterface, PVUSBIDEVICE pDevice,
     993                                                         int EndPt, VUSBDIRECTION enmDir, uint16_t uNewFrame, uint8_t uBits)
     994{
     995    PVUSBROOTHUB    pRh = VUSBIROOTHUBCONNECTOR_2_VUSBROOTHUB(pInterface);
     996    AssertReturn(pRh, 0);
     997    PVUSBDEV        pDev = (PVUSBDEV)pDevice;
     998    PVUSBPIPE       pPipe = &pDev->aPipes[EndPt];
     999    uint32_t        *puLastFrame;
     1000    int32_t         uFrameDelta;
     1001    uint32_t        uMaxVal = 1 << uBits;
     1002
     1003    puLastFrame  = enmDir == VUSBDIRECTION_IN ? &pPipe->uLastFrameIn : &pPipe->uLastFrameOut;
     1004    uFrameDelta  = uNewFrame - *puLastFrame;
     1005    *puLastFrame = uNewFrame;
     1006    /* Take care of wrap-around. */
     1007    if (uFrameDelta < 0)
     1008        uFrameDelta += uMaxVal;
     1009
     1010    return (uint16_t)uFrameDelta;
    9891011}
    9901012
     
    11311153        pRh->pDevices = pDev;
    11321154        RTCritSectLeave(&pRh->CritSectDevices);
    1133         LogRel(("VUSB: Attached '%s' to port %d on %s (%sSpeed)\n", pDev->pUsbIns->pszName, 
     1155        LogRel(("VUSB: Attached '%s' to port %d on %s (%sSpeed)\n", pDev->pUsbIns->pszName,
    11341156                iPort, pHub->pszName, vusbGetSpeedString(pDev->pUsbIns->enmSpeed)));
    11351157    }
     
    13231345    pThis->IRhConnector.pfnDetachDevice               = vusbRhDetachDevice;
    13241346    pThis->IRhConnector.pfnSetPeriodicFrameProcessing = vusbRhSetFrameProcessing;
    1325     pThis->IRhConnector.pfnGetPeriodicFrameRate       = vusbRhGetPriodicFrameRate;
     1347    pThis->IRhConnector.pfnGetPeriodicFrameRate       = vusbRhGetPeriodicFrameRate;
     1348    pThis->IRhConnector.pfnUpdateIsocFrameDelta       = vusbRhUpdateIsocFrameDelta;
    13261349    pThis->hSniffer                                   = VUSBSNIFFER_NIL;
    13271350    pThis->cbHci                                      = 0;
  • trunk/src/VBox/Devices/USB/VUSBInternal.h

    r67589 r67590  
    158158    /** Count of active async transfers. */
    159159    volatile uint32_t   async;
     160    /** Last scheduled frame - only valid for isochronous IN endpoints. */
     161    uint32_t            uLastFrameIn;
     162    /** Last scheduled frame - only valid for isochronous OUT endpoints. */
     163    uint32_t            uLastFrameOut;
    160164} VUSBPIPE;
    161165/** Pointer to a VUSB pipe structure. */
Note: See TracChangeset for help on using the changeset viewer.

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