From 31bbf49fa70c32e712b8dc83dbbb7d924735ee95 Mon Sep 17 00:00:00 2001 From: zliu3 Date: Thu, 13 Mar 2008 08:44:09 +0000 Subject: [PATCH] Enhanced the PCI Bus DXE module git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4844 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 6 ++++++ .../Bus/Pci/PciBusDxe/PciResourceSupport.c | 12 +++++++++++- IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/pcibus.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c b/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c index 048e30c8a3..0a5292e796 100644 --- a/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c +++ b/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c @@ -490,6 +490,12 @@ Returns: } else { PciIoDevice->Decodes |= EFI_BRIDGE_IO16_DECODE_SUPPORTED; } + // + // changed to support En1K for IO Bridge Device + // + if( (Value & 0x0c) == 0x0c ){ + PciIoDevice->Decodes |= EFI_BRIDGE_IOEN1K_DECODE_SUPPORTED; + } } Status = BarExisted ( diff --git a/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c b/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c index 1b44b6bc8f..1db77d15ae 100644 --- a/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c +++ b/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c @@ -653,6 +653,13 @@ Returns: Node->PciDev = PciDev; Node->Length = Length; Node->Alignment = Alignment; + if(((ResType == PciBarTypeIo16) || (ResType == PciBarTypeIo32)) && ( Alignment == 0x0FFF)) + { + if((PciDev->Decodes & EFI_BRIDGE_IOEN1K_DECODE_SUPPORTED) == EFI_BRIDGE_IOEN1K_DECODE_SUPPORTED) + Node->Alignment = 0x3FF; + else + Node->Alignment = 0xFFF; + } Node->Bar = Bar; Node->ResType = ResType; Node->Reserved = FALSE; @@ -1013,7 +1020,10 @@ Returns: // // if no PMem32 request, still keep PMem64. Otherwise degrade to PMem32 // - if (PMem32Node != NULL) { + if (PMem32Node != NULL && PMem32Node->Length != 0 && Bridge->Parent != NULL ) { + // + // Fixed the issue that there is no resource for 64-bit (above 4G) + // MergeResourceTree ( PMem32Node, PMem64Node, diff --git a/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/pcibus.h b/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/pcibus.h index 9db1dde553..9ce14e87e0 100644 --- a/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/pcibus.h +++ b/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/pcibus.h @@ -110,6 +110,7 @@ typedef struct { #define EFI_BRIDGE_PMEM_MEM_COMBINE_SUPPORTED 0x0010 #define EFI_BRIDGE_MEM64_DECODE_SUPPORTED 0x0020 #define EFI_BRIDGE_MEM32_DECODE_SUPPORTED 0x0040 +#define EFI_BRIDGE_IOEN1K_DECODE_SUPPORTED 0x0080 #define PCI_MAX_HOST_BRIDGE_NUM 0x0010 //