From 755e4d118482c3a89f429086c255e77a5c5778f9 Mon Sep 17 00:00:00 2001 From: mdkinney Date: Fri, 2 Jul 2010 23:20:11 +0000 Subject: [PATCH] Update logic in Suuported() for PCI-ISA Bridges with Positive Decode to avoid false positives on bridges of class PCI_CLASS_BRIDGE_OTHER. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10626 6f19259b-4bc3-4df7-8a09-765794883524 --- PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c | 27 +++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c b/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c index e8789e5d11..468f193955 100644 --- a/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c +++ b/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c @@ -73,6 +73,10 @@ PcatIsaAcpiDriverBindingSupported ( EFI_STATUS Status; EFI_PCI_IO_PROTOCOL *PciIo; PCI_TYPE00 Pci; + UINTN SegmentNumber; + UINTN BusNumber; + UINTN DeviceNumber; + UINTN FunctionNumber; // // Get PciIo protocol instance @@ -110,10 +114,25 @@ PcatIsaAcpiDriverBindingSupported ( // // See if this is an Intel PCI to ISA bridge in Positive Decode Mode // - if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE && - Pci.Hdr.VendorId == 0x8086 && - (Pci.Hdr.DeviceId & 0xF000) == 0x7000) { - Status = EFI_SUCCESS; + if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE && + Pci.Hdr.VendorId == 0x8086 ) { + // + // See if this is on Function #0 to avoid false positives on + // PCI_CLASS_BRIDGE_OTHER that has the same value as + // PCI_CLASS_BRIDGE_ISA_PDECODE + // + Status = PciIo->GetLocation ( + PciIo, + &SegmentNumber, + &BusNumber, + &DeviceNumber, + &FunctionNumber + ); + if (!EFI_ERROR (Status) && FunctionNumber == 0) { + Status = EFI_SUCCESS; + } else { + Status = EFI_UNSUPPORTED; + } } } }