MdeModulePkg/Xhci: Fill the 'interval' field for ISO endpoint context

https://bugzilla.tianocore.org/show_bug.cgi?id=510

The commit fills the 'Interval' field of the Endpoint Context data for
isochronous endpoints. It will resolve the error when a Configure
Endpoint Command is sent to an isochronous endpoint.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
Hao Wu
2017-05-31 09:22:27 +08:00
parent 213da0b540
commit 3719c2aa87
2 changed files with 58 additions and 2 deletions

View File

@@ -2,7 +2,7 @@
PEIM to produce gPeiUsb2HostControllerPpiGuid based on gPeiUsbControllerPpiGuid
which is used to enable recovery function from USB Drivers.
Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
@@ -1749,6 +1749,20 @@ XhcPeiSetConfigCmd (
InputContext->EP[Dci-1].CErr = 0;
InputContext->EP[Dci-1].EPType = ED_ISOCH_OUT;
}
//
// Get the bInterval from descriptor and init the the interval field of endpoint context.
// Refer to XHCI 1.1 spec section 6.2.3.6.
//
if (DeviceSpeed == EFI_USB_SPEED_FULL) {
Interval = EpDesc->Interval;
ASSERT (Interval >= 1 && Interval <= 16);
InputContext->EP[Dci-1].Interval = Interval + 2;
} else if ((DeviceSpeed == EFI_USB_SPEED_HIGH) || (DeviceSpeed == EFI_USB_SPEED_SUPER)) {
Interval = EpDesc->Interval;
ASSERT (Interval >= 1 && Interval <= 16);
InputContext->EP[Dci-1].Interval = Interval - 1;
}
//
// Do not support isochronous transfer now.
//
@@ -1952,6 +1966,20 @@ XhcPeiSetConfigCmd64 (
InputContext->EP[Dci-1].CErr = 0;
InputContext->EP[Dci-1].EPType = ED_ISOCH_OUT;
}
//
// Get the bInterval from descriptor and init the the interval field of endpoint context.
// Refer to XHCI 1.1 spec section 6.2.3.6.
//
if (DeviceSpeed == EFI_USB_SPEED_FULL) {
Interval = EpDesc->Interval;
ASSERT (Interval >= 1 && Interval <= 16);
InputContext->EP[Dci-1].Interval = Interval + 2;
} else if ((DeviceSpeed == EFI_USB_SPEED_HIGH) || (DeviceSpeed == EFI_USB_SPEED_SUPER)) {
Interval = EpDesc->Interval;
ASSERT (Interval >= 1 && Interval <= 16);
InputContext->EP[Dci-1].Interval = Interval - 1;
}
//
// Do not support isochronous transfer now.
//