1## @file
2# Module produces PciCfgPpi2 on top of PciCfgPpi. It also updates the
3# PciCfg2Ppi pointer in the EFI_PEI_SERVICES upon a installation of
4# EcpPeiPciCfgPpi.
5#
6# EcpPeiPciCfgPpi is installed by a framework module which
7# produce PciCfgPpi originally. Such framework module is updated based on the
8# following rule to install EcpPeiPciCfgPpi instead of updating the PciCfg pointer
9# in the Framework PeiServicesTable:
10#
11# Search pattern:
12# 	   PeiServices->PciCfg = <*>;
13# Replace pattern:
14#         {
15#           static EFI_PEI_PPI_DESCRIPTOR gEcpPeiPciCfgPpiList = {
16#             (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
17#             &gEcpPeiPciCfgPpiGuid,
18#             <*>
19#           };
20#           (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList);
21#         }
22#
23# In addition, the PeiServicesTable definition in PeiApi.h is updated to
24#
25# struct _EFI_PEI_SERVICES {
26#   EFI_TABLE_HEADER              Hdr;
27#   ...
28#
29#   //
30#   // Pointer to PPI interface
31#   //
32# #if (PI_SPECIFICATION_VERSION < 0x00010000)
33#
34#   PEI_CPU_IO_PPI                 *CpuIo;
35#   ECP_PEI_PCI_CFG_PPI        *PciCfg;  //Changed.
36# #else
37# ...
38# #endif
39#
40# };
41#
42# This change enable the detection of code segment which invokes PeiServices->PciCfg->Modify.
43# Such code causes a build break as ECP_PEI_PCI_CFG_PPI does not has "Modify" field.
44# This should be updated to a call to PeiLibPciCfgModify as shown below:
45#
46# Search pattern:
47# 		*->Modify(<*>);
48# Replace pattern:
49# 		PeiLibPciCfgModify(<*>);
50#
51# PIWG's PI specification replaces Inte's EFI Specification 1.10.
52# EFI_PEI_PCI_CFG_PPI defined in Inte's EFI Specification 1.10 is replaced by
53# EFI_PEI_PCI_CFG2_PPI in PI 1.0.
54# This module produces PciCfgPpi on top of PciCfgPpi2. This module is used on platform when both of
55# these two conditions are true:
56# 1) Framework module present that produces PCI CFG PPI  AND
57# 2) PI module that produces PCI CFG2 is not present
58#
59#
60# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
61#
62#  This program and the accompanying materials
63#  are licensed and made available under the terms and conditions of the BSD License
64#  which accompanies this distribution. The full text of the license may be found at
65#  http://opensource.org/licenses/bsd-license.php
66#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
67#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
68#
69#
70##
71
72[Defines]
73  INF_VERSION                    = 0x00010005
74  BASE_NAME                      = PciCfg2OnPciCfgThunk
75  FILE_GUID                      = 41401688-2862-431b-BAAC-6ECADAC384AB
76  MODULE_TYPE                    = PEIM
77  VERSION_STRING                 = 1.0
78
79  ENTRY_POINT                    = PeimInitializePciCfg2
80
81#
82# The following information is for reference only and not required by the build tools.
83#
84#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
85#
86
87[Sources]
88  PciCfg2OnPciCfgThunk.c
89
90[Packages]
91  MdePkg/MdePkg.dec
92  IntelFrameworkPkg/IntelFrameworkPkg.dec
93  EdkCompatibilityPkg/EdkCompatibilityPkg.dec
94
95[LibraryClasses]
96  PeimEntryPoint
97  DebugLib
98
99[Ppis]
100  gEfiPciCfgPpiInServiceTableGuid
101  gEfiPciCfg2PpiGuid
102  gEcpPeiPciCfgPpiGuid
103
104[Depex]
105  TRUE
106