## @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
#
#
# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
#
#  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

  ENTRY_POINT                    = PeimInitializePciCfg2

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  PciCfg2OnPciCfgThunk.c

[Packages]
  MdePkg/MdePkg.dec
  IntelFrameworkPkg/IntelFrameworkPkg.dec
  EdkCompatibilityPkg/EdkCompatibilityPkg.dec

[LibraryClasses]
  PeimEntryPoint
  DebugLib

[Ppis]
  gEfiPciCfgPpiInServiceTableGuid
  gEfiPciCfg2PpiGuid
  gEcpPeiPciCfgPpiGuid

[Depex]
  TRUE