#/** @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                      = PciCfg2OnPciCfgThunk
  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]
  PciCfg2OnPciCfgThunk.c

[Packages]
  MdePkg/MdePkg.dec
  IntelFrameworkPkg/IntelFrameworkPkg.dec
  EdkCompatibilityPkg/EdkCompatibilityPkg.dec

[LibraryClasses]
  PeimEntryPoint
  DebugLib

[Ppis]
  gEfiPciCfgPpiInServiceTableGuid
  gEfiPciCfg2PpiGuid
  gEcpPeiPciCfgPpiGuid

[Depex]
  TRUE
