summaryrefslogtreecommitdiffstats
path: root/PcAtChipsetPkg/IsaAcpiDxe
diff options
context:
space:
mode:
authormdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524>2010-07-02 23:20:11 +0000
committermdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524>2010-07-02 23:20:11 +0000
commit755e4d118482c3a89f429086c255e77a5c5778f9 (patch)
tree3d3b055422022f3e12241384e1c6f38588060879 /PcAtChipsetPkg/IsaAcpiDxe
parent4bc6ab83ba86936df05e58465e2ab08f5ab5b01b (diff)
downloadedk2-755e4d118482c3a89f429086c255e77a5c5778f9.tar.gz
edk2-755e4d118482c3a89f429086c255e77a5c5778f9.tar.bz2
edk2-755e4d118482c3a89f429086c255e77a5c5778f9.zip
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
Diffstat (limited to 'PcAtChipsetPkg/IsaAcpiDxe')
-rw-r--r--PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c27
1 files 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;
+ }
}
}
}