Adjusts the requirements for the MaxPacketLength to match what is seen on real world devices that do not follow the USB specification.
This fixes enumeration on the multiple USB 3 devices made by SanDisk, Integral, Kingston and other generic brands. Cc: Hao A Wu <hao.a...@intel.com> Cc: Ray Ni <ray...@intel.com> Signed-off-by: Sean Rhodes <sean@starlabs.systems> --- MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c b/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c index 62535cad54..043b7d4cea 100644 --- a/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c +++ b/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c @@ -906,19 +906,16 @@ XhcControlTransfer ( return EFI_INVALID_PARAMETER; } - if ((MaximumPacketLength != 8) && (MaximumPacketLength != 16) && - (MaximumPacketLength != 32) && (MaximumPacketLength != 64) && - (MaximumPacketLength != 512) - ) - { + // Check for valid maximum packet size + if ((DeviceSpeed == EFI_USB_SPEED_SUPER) && (MaximumPacketLength > 1024)) { return EFI_INVALID_PARAMETER; } - if ((DeviceSpeed == EFI_USB_SPEED_LOW) && (MaximumPacketLength != 8)) { + if ((DeviceSpeed == EFI_USB_SPEED_HIGH) && (MaximumPacketLength > 512)) { return EFI_INVALID_PARAMETER; } - if ((DeviceSpeed == EFI_USB_SPEED_SUPER) && (MaximumPacketLength != 512)) { + if ((DeviceSpeed == EFI_USB_SPEED_FULL) && (MaximumPacketLength > 64)) { return EFI_INVALID_PARAMETER; } -- 2.37.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#96951): https://edk2.groups.io/g/devel/message/96951 Mute This Topic: https://groups.io/mt/95465401/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-