VirtualBox

Changeset 60515 in vbox for trunk


Ignore:
Timestamp:
Apr 15, 2016 10:21:32 AM (9 years ago)
Author:
vboxsync
Message:

VUSB: Allow bulk/interrupt transfer mixing (most USB stack do not distinguish them.

File:
1 edited

Legend:

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

    r59875 r60515  
    11451145    if ((pEndPtDesc->Core.bmAttributes & 0x3) != pUrb->enmType)
    11461146    {
    1147         Log(("%s: pDev=%p[%s]: SUBMIT: %s transfer requested for %#x endpoint on DstAddress=%i ep=%i dir=%s\n",
    1148              pUrb->pszDesc, pDev, pDev->pUsbIns->pszName, vusbUrbTypeName(pUrb->enmType), pEndPtDesc->Core.bmAttributes,
    1149              pUrb->DstAddress, pUrb->EndPt, vusbUrbDirName(pUrb->enmDir)));
    1150         return vusbUrbSubmitHardError(pUrb);
     1147        /* Bulk and interrupt transfers are identical on the bus level (the only difference
     1148         * is in how they are scheduled by the HCD/HC) and need an exemption.
     1149         * Atheros AR9271 is a known offender; its configuration descriptors include
     1150         * interrupt endpoints, but drivers (Win7/8, Linux kernel pre-3.05) treat them
     1151         * as bulk endpoints.
     1152         */
     1153        if (   (pUrb->enmType == VUSBXFERTYPE_BULK && (pEndPtDesc->Core.bmAttributes & 0x3) == VUSBXFERTYPE_INTR)
     1154            || (pUrb->enmType == VUSBXFERTYPE_INTR && (pEndPtDesc->Core.bmAttributes & 0x3) == VUSBXFERTYPE_BULK))
     1155        {
     1156            Log2(("%s: pDev=%p[%s]: SUBMIT: mixing bulk/interrupt transfers on DstAddress=%i ep=%i dir=%s\n",
     1157                  pUrb->pszDesc, pDev, pDev->pUsbIns->pszName,
     1158                  pUrb->DstAddress, pUrb->EndPt, vusbUrbDirName(pUrb->enmDir)));
     1159        }
     1160        else
     1161        {
     1162            Log(("%s: pDev=%p[%s]: SUBMIT: %s transfer requested for %#x endpoint on DstAddress=%i ep=%i dir=%s\n",
     1163                 pUrb->pszDesc, pDev, pDev->pUsbIns->pszName, vusbUrbTypeName(pUrb->enmType), pEndPtDesc->Core.bmAttributes,
     1164                 pUrb->DstAddress, pUrb->EndPt, vusbUrbDirName(pUrb->enmDir)));
     1165            return vusbUrbSubmitHardError(pUrb);
     1166        }
    11511167    }
    11521168
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