summaryrefslogtreecommitdiff
path: root/EdkCompatibilityPkg/Compatibility/PciCfg2OnPciCfgThunk/PciCfg2ToPciCfgThunk.inf
diff options
context:
space:
mode:
Diffstat (limited to 'EdkCompatibilityPkg/Compatibility/PciCfg2OnPciCfgThunk/PciCfg2ToPciCfgThunk.inf')
-rw-r--r--EdkCompatibilityPkg/Compatibility/PciCfg2OnPciCfgThunk/PciCfg2ToPciCfgThunk.inf108
1 files changed, 108 insertions, 0 deletions
diff --git a/EdkCompatibilityPkg/Compatibility/PciCfg2OnPciCfgThunk/PciCfg2ToPciCfgThunk.inf b/EdkCompatibilityPkg/Compatibility/PciCfg2OnPciCfgThunk/PciCfg2ToPciCfgThunk.inf
new file mode 100644
index 0000000000..ea1b5c89dc
--- /dev/null
+++ b/EdkCompatibilityPkg/Compatibility/PciCfg2OnPciCfgThunk/PciCfg2ToPciCfgThunk.inf
@@ -0,0 +1,108 @@
+#/** @file
+# Module produces PciCfgPpi2 on top of PciCfgPpi. It also updates the
+# PciCfg2Ppi pointer in the EFI_PEI_SERVICES upon a installation of
+# EcpPeiPciCfgPpi.
+#
+# EcpPeiPciCfgPpi is installed by a framework module which
+# produce PciCfgPpi originally. Such framework module is updated based on the
+# following rule to install EcpPeiPciCfgPpi instead of updating the PciCfg pointer
+# in the Framework PeiServicesTable:
+#
+# Search pattern:
+# PeiServices->PciCfg = <*>;
+# Replace pattern:
+# {
+# static EFI_PEI_PPI_DESCRIPTOR gEcpPeiPciCfgPpiList = {
+# (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+# &gEcpPeiPciCfgPpiGuid,
+# <*>
+# };
+# (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList);
+# }
+#
+# In addition, the PeiServicesTable definition in PeiApi.h is updated to
+#
+# struct _EFI_PEI_SERVICES {
+# EFI_TABLE_HEADER Hdr;
+# ...
+#
+# //
+# // Pointer to PPI interface
+# //
+# #if (PI_SPECIFICATION_VERSION < 0x00010000)
+#
+# PEI_CPU_IO_PPI *CpuIo;
+# ECP_PEI_PCI_CFG_PPI *PciCfg; //Changed.
+# #else
+# ...
+# #endif
+#
+# };
+#
+# This change enable the detection of code segment which invokes PeiServices->PciCfg->Modify.
+# Such code causes a build break as ECP_PEI_PCI_CFG_PPI does not has "Modify" field.
+# This should be updated to a call to PeiLibPciCfgModify as shown below:
+#
+# Search pattern:
+# *->Modify(<*>);
+# Replace pattern:
+# PeiLibPciCfgModify(<*>);
+#
+# PIWG's PI specification replaces Inte's EFI Specification 1.10.
+# EFI_PEI_PCI_CFG_PPI defined in Inte's EFI Specification 1.10 is replaced by
+# EFI_PEI_PCI_CFG2_PPI in PI 1.0.
+# This module produces PciCfgPpi on top of PciCfgPpi2. This module is used on platform when both of
+# these two conditions are true:
+# 1) Framework module present that produces PCI CFG PPI AND
+# 2) PI module that produces PCI CFG2 is not present
+
+#
+# PEIM to provide the Variable functionality.
+# Copyright (c) 2006 - 2007, Intel Corporation
+#
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#
+#**/
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PciCfg2ToPciCfgThunk
+ FILE_GUID = 41401688-2862-431b-BAAC-6ECADAC384AB
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ EDK_RELEASE_VERSION = 0x00020000
+ EFI_SPECIFICATION_VERSION = 0x00020000
+
+ ENTRY_POINT = PeimInitializePciCfg2
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+[Sources.common]
+ PciCfg2ToPciCfgThunk.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ IntelFrameworkPkg/IntelFrameworkPkg.dec
+ EdkCompatibilityPkg/EdkCompatibilityPkg.dec
+
+[LibraryClasses]
+ PeimEntryPoint
+ DebugLib
+
+[Ppis]
+ gEfiPciCfgPpiInServiceTableGuid
+ gEfiPciCfg2PpiGuid
+ gEcpPeiPciCfgPpiGuid
+
+[Depex]
+ TRUE