MdeMdeModulePkg/Xhci: Fix a wrong conditional judgment which bring assertion with 1.0 hub.

Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Elvin Li <elvin.li@intel.com>


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14021 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
erictian 2012-12-25 06:31:41 +00:00
parent 890ff9a498
commit b3b1e97b55

View File

@ -140,27 +140,27 @@ XhcReset (
) )
{ {
USB_XHCI_INSTANCE *Xhc; USB_XHCI_INSTANCE *Xhc;
EFI_STATUS Status; EFI_STATUS Status;
EFI_TPL OldTpl; EFI_TPL OldTpl;
Xhc = XHC_FROM_THIS (This); Xhc = XHC_FROM_THIS (This);
if (Xhc->DevicePath != NULL) { if (Xhc->DevicePath != NULL) {
// //
// Report Status Code to indicate reset happens // Report Status Code to indicate reset happens
// //
REPORT_STATUS_CODE_WITH_DEVICE_PATH ( REPORT_STATUS_CODE_WITH_DEVICE_PATH (
EFI_PROGRESS_CODE, EFI_PROGRESS_CODE,
(EFI_IO_BUS_USB | EFI_IOB_PC_RESET), (EFI_IO_BUS_USB | EFI_IOB_PC_RESET),
Xhc->DevicePath Xhc->DevicePath
); );
} }
OldTpl = gBS->RaiseTPL (XHC_TPL); OldTpl = gBS->RaiseTPL (XHC_TPL);
switch (Attributes) { switch (Attributes) {
case EFI_USB_HC_RESET_GLOBAL: case EFI_USB_HC_RESET_GLOBAL:
// //
// Flow through, same behavior as Host Controller Reset // Flow through, same behavior as Host Controller Reset
// //
case EFI_USB_HC_RESET_HOST_CONTROLLER: case EFI_USB_HC_RESET_HOST_CONTROLLER:
@ -932,9 +932,9 @@ XhcControlTransfer (
} }
Xhc->UsbDevContext[SlotId].ConfDesc = AllocateZeroPool (Xhc->UsbDevContext[SlotId].DevDesc.NumConfigurations * sizeof (EFI_USB_CONFIG_DESCRIPTOR *)); Xhc->UsbDevContext[SlotId].ConfDesc = AllocateZeroPool (Xhc->UsbDevContext[SlotId].DevDesc.NumConfigurations * sizeof (EFI_USB_CONFIG_DESCRIPTOR *));
if (Xhc->HcCParams.Data.Csz == 0) { if (Xhc->HcCParams.Data.Csz == 0) {
Status = XhcEvaluateContext (Xhc, SlotId, MaxPacket0); Status = XhcEvaluateContext (Xhc, SlotId, MaxPacket0);
} else { } else {
Status = XhcEvaluateContext64 (Xhc, SlotId, MaxPacket0); Status = XhcEvaluateContext64 (Xhc, SlotId, MaxPacket0);
} }
ASSERT_EFI_ERROR (Status); ASSERT_EFI_ERROR (Status);
} else if (DescriptorType == USB_DESC_TYPE_CONFIG) { } else if (DescriptorType == USB_DESC_TYPE_CONFIG) {
@ -1007,17 +1007,15 @@ XhcControlTransfer (
if ((State & XHC_PORTSC_PS) >> 10 == 0) { if ((State & XHC_PORTSC_PS) >> 10 == 0) {
PortStatus.PortStatus |= USB_PORT_STAT_SUPER_SPEED; PortStatus.PortStatus |= USB_PORT_STAT_SUPER_SPEED;
} }
} else if (DeviceSpeed == EFI_USB_SPEED_HIGH) { } else {
// //
// For high speed hub, its bit9~10 presents the attached device speed. // For high or full/low speed hub, its bit9~10 presents the attached device speed.
// //
if (XHC_BIT_IS_SET (State, BIT9)) { if (XHC_BIT_IS_SET (State, BIT9)) {
PortStatus.PortStatus |= USB_PORT_STAT_LOW_SPEED; PortStatus.PortStatus |= USB_PORT_STAT_LOW_SPEED;
} else if (XHC_BIT_IS_SET (State, BIT10)) { } else if (XHC_BIT_IS_SET (State, BIT10)) {
PortStatus.PortStatus |= USB_PORT_STAT_HIGH_SPEED; PortStatus.PortStatus |= USB_PORT_STAT_HIGH_SPEED;
} }
} else {
ASSERT (0);
} }
// //
@ -1690,15 +1688,15 @@ ON_EXIT:
@return The allocated and initialized USB_XHCI_INSTANCE structure if created, @return The allocated and initialized USB_XHCI_INSTANCE structure if created,
otherwise NULL. otherwise NULL.
**/ **/
USB_XHCI_INSTANCE* USB_XHCI_INSTANCE*
XhcCreateUsbHc ( XhcCreateUsbHc (
IN EFI_PCI_IO_PROTOCOL *PciIo, IN EFI_PCI_IO_PROTOCOL *PciIo,
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
IN UINT64 OriginalPciAttributes IN UINT64 OriginalPciAttributes
) )
{ {
USB_XHCI_INSTANCE *Xhc; USB_XHCI_INSTANCE *Xhc;
EFI_STATUS Status; EFI_STATUS Status;
UINT32 PageSize; UINT32 PageSize;
UINT16 ExtCapReg; UINT16 ExtCapReg;
@ -1711,13 +1709,13 @@ XhcCreateUsbHc (
// //
// Initialize private data structure // Initialize private data structure
// //
Xhc->Signature = XHCI_INSTANCE_SIG; Xhc->Signature = XHCI_INSTANCE_SIG;
Xhc->PciIo = PciIo; Xhc->PciIo = PciIo;
Xhc->DevicePath = DevicePath; Xhc->DevicePath = DevicePath;
Xhc->OriginalPciAttributes = OriginalPciAttributes; Xhc->OriginalPciAttributes = OriginalPciAttributes;
CopyMem (&Xhc->Usb2Hc, &gXhciUsb2HcTemplate, sizeof (EFI_USB2_HC_PROTOCOL)); CopyMem (&Xhc->Usb2Hc, &gXhciUsb2HcTemplate, sizeof (EFI_USB2_HC_PROTOCOL));
InitializeListHead (&Xhc->AsyncIntTransfers); InitializeListHead (&Xhc->AsyncIntTransfers);
// //
@ -1841,13 +1839,13 @@ XhcDriverBindingStart (
EFI_STATUS Status; EFI_STATUS Status;
EFI_PCI_IO_PROTOCOL *PciIo; EFI_PCI_IO_PROTOCOL *PciIo;
UINT64 Supports; UINT64 Supports;
UINT64 OriginalPciAttributes; UINT64 OriginalPciAttributes;
BOOLEAN PciAttributesSaved; BOOLEAN PciAttributesSaved;
USB_XHCI_INSTANCE *Xhc; USB_XHCI_INSTANCE *Xhc;
EFI_DEVICE_PATH_PROTOCOL *HcDevicePath; EFI_DEVICE_PATH_PROTOCOL *HcDevicePath;
// //
// Open the PciIo Protocol, then enable the USB host controller // Open the PciIo Protocol, then enable the USB host controller
// //
Status = gBS->OpenProtocol ( Status = gBS->OpenProtocol (
Controller, Controller,
@ -1859,25 +1857,25 @@ XhcDriverBindingStart (
); );
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
// //
// Open Device Path Protocol for on USB host controller // Open Device Path Protocol for on USB host controller
// //
HcDevicePath = NULL; HcDevicePath = NULL;
Status = gBS->OpenProtocol ( Status = gBS->OpenProtocol (
Controller, Controller,
&gEfiDevicePathProtocolGuid, &gEfiDevicePathProtocolGuid,
(VOID **) &HcDevicePath, (VOID **) &HcDevicePath,
This->DriverBindingHandle, This->DriverBindingHandle,
Controller, Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL EFI_OPEN_PROTOCOL_GET_PROTOCOL
); );
PciAttributesSaved = FALSE; PciAttributesSaved = FALSE;
// //
// Save original PCI attributes // Save original PCI attributes
// //
Status = PciIo->Attributes ( Status = PciIo->Attributes (
PciIo, PciIo,
@ -1912,13 +1910,13 @@ XhcDriverBindingStart (
goto CLOSE_PCIIO; goto CLOSE_PCIIO;
} }
// //
// Create then install USB2_HC_PROTOCOL // Create then install USB2_HC_PROTOCOL
// //
Xhc = XhcCreateUsbHc (PciIo, HcDevicePath, OriginalPciAttributes); Xhc = XhcCreateUsbHc (PciIo, HcDevicePath, OriginalPciAttributes);
if (Xhc == NULL) { if (Xhc == NULL) {
DEBUG ((EFI_D_ERROR, "XhcDriverBindingStart: failed to create USB2_HC\n")); DEBUG ((EFI_D_ERROR, "XhcDriverBindingStart: failed to create USB2_HC\n"));
return EFI_OUT_OF_RESOURCES; return EFI_OUT_OF_RESOURCES;
} }