Control, Bulk, Interrupt and Isochronous requests to Usb2.0 device.\r
\r
Note that EhciDxe driver is enhanced to guarantee that the EHCI controller get attached\r
- to the EHCI controller before the UHCI driver attaches to the companion UHCI controller. \r
- This way avoids the control transfer on a shared port between EHCI and companion host\r
- controller when UHCI gets attached earlier than EHCI and a USB 2.0 device inserts.\r
+ to the EHCI controller before a UHCI or OHCI driver attaches to the companion UHCI or \r
+ OHCI controller. This way avoids the control transfer on a shared port between EHCI \r
+ and companion host controller when UHCI or OHCI gets attached earlier than EHCI and a \r
+ USB 2.0 device inserts.\r
\r
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
// Test whether the controller belongs to Ehci type\r
//\r
if ((UsbClassCReg.BaseCode != PCI_CLASS_SERIAL) || (UsbClassCReg.SubClassCode != PCI_CLASS_SERIAL_USB)\r
- || ((UsbClassCReg.ProgInterface != PCI_IF_EHCI) && (UsbClassCReg.ProgInterface !=PCI_IF_UHCI))) {\r
+ || ((UsbClassCReg.ProgInterface != PCI_IF_EHCI) && (UsbClassCReg.ProgInterface != PCI_IF_UHCI) && (UsbClassCReg.ProgInterface != PCI_IF_OHCI))) {\r
\r
Status = EFI_UNSUPPORTED;\r
}\r
EFI_HANDLE *HandleBuffer;\r
UINTN NumberOfHandles;\r
UINTN Index;\r
- UINTN UhciSegmentNumber;\r
- UINTN UhciBusNumber;\r
- UINTN UhciDeviceNumber;\r
- UINTN UhciFunctionNumber;\r
+ UINTN CompanionSegmentNumber;\r
+ UINTN CompanionBusNumber;\r
+ UINTN CompanionDeviceNumber;\r
+ UINTN CompanionFunctionNumber;\r
UINTN EhciSegmentNumber;\r
UINTN EhciBusNumber;\r
UINTN EhciDeviceNumber;\r
goto CLOSE_PCIIO;\r
}\r
//\r
- // determine if the device is UHCI host controller or not. If yes, then find out the \r
+ // Determine if the device is UHCI or OHCI host controller or not. If yes, then find out the \r
// companion usb ehci host controller and force EHCI driver get attached to it before\r
- // UHCI driver attaches to UHCI host controller.\r
+ // UHCI or OHCI driver attaches to UHCI or OHCI host controller.\r
//\r
- if ((UsbClassCReg.ProgInterface == PCI_IF_UHCI) &&\r
+ if ((UsbClassCReg.ProgInterface == PCI_IF_UHCI || UsbClassCReg.ProgInterface == PCI_IF_OHCI) &&\r
(UsbClassCReg.BaseCode == PCI_CLASS_SERIAL) && \r
(UsbClassCReg.SubClassCode == PCI_CLASS_SERIAL_USB)) {\r
Status = PciIo->GetLocation (\r
PciIo,\r
- &UhciSegmentNumber,\r
- &UhciBusNumber,\r
- &UhciDeviceNumber,\r
- &UhciFunctionNumber\r
+ &CompanionSegmentNumber,\r
+ &CompanionBusNumber,\r
+ &CompanionDeviceNumber,\r
+ &CompanionFunctionNumber\r
);\r
if (EFI_ERROR (Status)) {\r
goto CLOSE_PCIIO;\r
// Currently, the judgment on the companion usb host controller is through the\r
// same bus number, which may vary on different platform.\r
//\r
- if (EhciBusNumber == UhciBusNumber) {\r
+ if (EhciBusNumber == CompanionBusNumber) {\r
gBS->CloseProtocol (\r
Controller,\r
&gEfiPciIoProtocolGuid,\r
\r
//\r
// Disable routing of all ports to EHCI controller, so all ports are \r
- // routed back to the UHCI controller.\r
+ // routed back to the UHCI or OHCI controller.\r
//\r
EhcClearOpRegBit (Ehc, EHC_CONFIG_FLAG_OFFSET, CONFIGFLAG_ROUTE_EHC);\r
\r