mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 23:24:03 +02:00
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:
parent
890ff9a498
commit
b3b1e97b55
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user