mirror of https://github.com/acidanthera/audk.git
1. Remove USB HC Protocol installing from Uhci module. It only installs USB2 HC protocol.
2. Restore Incompatible Pci Device Support Protocol in PciBus module. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4617 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
7113867d54
commit
ea5632e56d
|
@ -106,6 +106,7 @@
|
|||
gEfiPciPlatformProtocolGuid # PROTOCOL TO_START
|
||||
gEfiPciRootBridgeIoProtocolGuid # PROTOCOL TO_START
|
||||
gEfiDevicePathProtocolGuid # PROTOCOL TO_START
|
||||
gEfiIncompatiblePciDeviceSupportProtocolGuid # PROTOCOL TO_START
|
||||
|
||||
|
||||
[FeaturePcd.common]
|
||||
|
|
|
@ -294,9 +294,7 @@ Returns:
|
|||
//
|
||||
// Update the bar information for this PCI device so as to support some specific device
|
||||
//
|
||||
if (PcdGet8 (PcdPciIncompatibleDeviceSupportMask) & PCI_INCOMPATIBLE_ACPI_RESOURCE_SUPPORT) {
|
||||
UpdatePciInfo (PciIoDevice);
|
||||
}
|
||||
UpdatePciInfo (PciIoDevice);
|
||||
|
||||
if (PciIoDevice->DevicePath == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
|
@ -1216,21 +1214,54 @@ Returns:
|
|||
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Ptr;
|
||||
|
||||
Configuration = NULL;
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
//
|
||||
// Check whether the device belongs to incompatible devices or not
|
||||
// If it is , then get its special requirement in the ACPI table
|
||||
//
|
||||
PciDeviceInfo.VendorID = PciIoDevice->Pci.Hdr.VendorId;
|
||||
PciDeviceInfo.DeviceID = PciIoDevice->Pci.Hdr.DeviceId;
|
||||
PciDeviceInfo.RevisionID = PciIoDevice->Pci.Hdr.RevisionID;
|
||||
PciDeviceInfo.SubsystemVendorID = PciIoDevice->Pci.Device.SubsystemVendorID;
|
||||
PciDeviceInfo.SubsystemID = PciIoDevice->Pci.Device.SubsystemID;
|
||||
if (gEfiIncompatiblePciDeviceSupport == NULL) {
|
||||
//
|
||||
// It can only be supported after the Incompatible PCI Device
|
||||
// Support Protocol has been installed
|
||||
//
|
||||
Status = gBS->LocateProtocol (
|
||||
&gEfiIncompatiblePciDeviceSupportProtocolGuid,
|
||||
NULL,
|
||||
(VOID **) &gEfiIncompatiblePciDeviceSupport
|
||||
);
|
||||
}
|
||||
if (Status == EFI_SUCCESS) {
|
||||
//
|
||||
// Check whether the device belongs to incompatible devices from protocol or not
|
||||
// If it is , then get its special requirement in the ACPI table
|
||||
//
|
||||
Status = gEfiIncompatiblePciDeviceSupport->CheckDevice (
|
||||
gEfiIncompatiblePciDeviceSupport,
|
||||
PciIoDevice->Pci.Hdr.VendorId,
|
||||
PciIoDevice->Pci.Hdr.DeviceId,
|
||||
PciIoDevice->Pci.Hdr.RevisionID,
|
||||
PciIoDevice->Pci.Device.SubsystemVendorID,
|
||||
PciIoDevice->Pci.Device.SubsystemID,
|
||||
&Configuration
|
||||
);
|
||||
|
||||
Status = PciResourceUpdateCheck (&PciDeviceInfo, &Configuration);
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
//
|
||||
// Check whether the device belongs to incompatible devices from library or not
|
||||
// If it is , then get its special requirement in the ACPI table
|
||||
//
|
||||
if (PcdGet8 (PcdPciIncompatibleDeviceSupportMask) & PCI_INCOMPATIBLE_ACPI_RESOURCE_SUPPORT) {
|
||||
PciDeviceInfo.VendorID = PciIoDevice->Pci.Hdr.VendorId;
|
||||
PciDeviceInfo.DeviceID = PciIoDevice->Pci.Hdr.DeviceId;
|
||||
PciDeviceInfo.RevisionID = PciIoDevice->Pci.Hdr.RevisionID;
|
||||
PciDeviceInfo.SubsystemVendorID = PciIoDevice->Pci.Device.SubsystemVendorID;
|
||||
PciDeviceInfo.SubsystemID = PciIoDevice->Pci.Device.SubsystemID;
|
||||
|
||||
Status = PciResourceUpdateCheck (&PciDeviceInfo, &Configuration);
|
||||
}
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -27,6 +27,7 @@ EFI_DRIVER_BINDING_PROTOCOL gPciBusDriverBinding = {
|
|||
NULL
|
||||
};
|
||||
|
||||
EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL *gEfiIncompatiblePciDeviceSupport = NULL;
|
||||
EFI_HANDLE gPciHostBrigeHandles[PCI_MAX_HOST_BRIDGE_NUM];
|
||||
UINTN gPciHostBridgeNumber;
|
||||
BOOLEAN gFullEnumeration;
|
||||
|
@ -215,6 +216,12 @@ Returns:
|
|||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = gBS->LocateProtocol (
|
||||
&gEfiIncompatiblePciDeviceSupportProtocolGuid,
|
||||
NULL,
|
||||
(VOID **) &gEfiIncompatiblePciDeviceSupport
|
||||
);
|
||||
|
||||
//
|
||||
// If PCI Platform protocol is available, get it now.
|
||||
// If the platform implements this, it must be installed before BDS phase
|
||||
|
|
|
@ -32,6 +32,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include <Guid/PciOptionRomTable.h>
|
||||
#include <Protocol/BusSpecificDriverOverride.h>
|
||||
#include <Protocol/UgaIo.h>
|
||||
#include <Protocol/IncompatiblePciDeviceSupport.h>
|
||||
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/UefiDriverEntryPoint.h>
|
||||
|
@ -237,6 +238,7 @@ typedef struct _PCI_IO_DEVICE {
|
|||
//
|
||||
// Global Variables
|
||||
//
|
||||
extern EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL *gEfiIncompatiblePciDeviceSupport;
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gPciBusDriverBinding;
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gPciBusComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gPciBusComponentName2;
|
||||
|
|
|
@ -308,9 +308,9 @@ UhciComponentNameGetControllerName (
|
|||
OUT CHAR16 **ControllerName
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
USB_HC_DEV *UhciDev;
|
||||
EFI_USB_HC_PROTOCOL *UsbHc;
|
||||
EFI_STATUS Status;
|
||||
USB_HC_DEV *UhciDev;
|
||||
EFI_USB2_HC_PROTOCOL *Usb2Hc;
|
||||
|
||||
//
|
||||
// This is a device driver, so ChildHandle must be NULL.
|
||||
|
@ -336,8 +336,8 @@ UhciComponentNameGetControllerName (
|
|||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
ControllerHandle,
|
||||
&gEfiUsbHcProtocolGuid,
|
||||
(VOID **) &UsbHc,
|
||||
&gEfiUsb2HcProtocolGuid,
|
||||
(VOID **) &Usb2Hc,
|
||||
gUhciDriverBinding.DriverBindingHandle,
|
||||
ControllerHandle,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
|
@ -347,7 +347,7 @@ UhciComponentNameGetControllerName (
|
|||
return Status;
|
||||
}
|
||||
|
||||
UhciDev = UHC_FROM_USB_HC_PROTO (UsbHc);
|
||||
UhciDev = UHC_FROM_USB2_HC_PROTO (Usb2Hc);
|
||||
|
||||
return LookupUnicodeString2 (
|
||||
Language,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -98,7 +98,6 @@ typedef struct {
|
|||
} USB_CLASSC;
|
||||
#pragma pack()
|
||||
|
||||
#define UHC_FROM_USB_HC_PROTO(This) CR(This, USB_HC_DEV, UsbHc, USB_HC_DEV_SIGNATURE)
|
||||
#define UHC_FROM_USB2_HC_PROTO(This) CR(This, USB_HC_DEV, Usb2Hc, USB_HC_DEV_SIGNATURE)
|
||||
|
||||
//
|
||||
|
@ -114,7 +113,6 @@ typedef struct {
|
|||
//
|
||||
struct _USB_HC_DEV {
|
||||
UINT32 Signature;
|
||||
EFI_USB_HC_PROTOCOL UsbHc;
|
||||
EFI_USB2_HC_PROTOCOL Usb2Hc;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
UINT64 OriginalPciAttributes;
|
||||
|
|
|
@ -63,6 +63,5 @@
|
|||
|
||||
[Protocols]
|
||||
gEfiPciIoProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUsbHcProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUsb2HcProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
|
||||
|
|
|
@ -168,7 +168,7 @@ UhciAckAllInterrupt (
|
|||
//
|
||||
if (!UhciIsHcWorking (Uhc->PciIo)) {
|
||||
UHCI_ERROR (("UhciAckAllInterrupt: re-enable the UHCI from system error\n"));
|
||||
Uhc->UsbHc.SetState (&Uhc->UsbHc, EfiUsbHcStateOperational);
|
||||
Uhc->Usb2Hc.SetState (&Uhc->Usb2Hc, EfiUsbHcStateOperational);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -186,8 +186,8 @@ UhciAckAllInterrupt (
|
|||
**/
|
||||
EFI_STATUS
|
||||
UhciStopHc (
|
||||
IN USB_HC_DEV *Uhc,
|
||||
IN UINTN Timeout
|
||||
IN USB_HC_DEV *Uhc,
|
||||
IN UINTN Timeout
|
||||
)
|
||||
{
|
||||
UINT16 UsbSts;
|
||||
|
|
Loading…
Reference in New Issue