#/** @file\r
# Module produces PciCfgPpi2 on top of PciCfgPpi. It also updates the \r
# PciCfg2Ppi pointer in the EFI_PEI_SERVICES upon a installation of\r
-# EcpPeiPciCfgPpi. EcpPeiPciCfgPpi is installed in a framework module which\r
-# produce PciCfgPpi originally. This framework module is updated based on the \r
-# following rule:\r
+# EcpPeiPciCfgPpi. \r
+#\r
+# EcpPeiPciCfgPpi is installed by a framework module which\r
+# produce PciCfgPpi originally. Such framework module is updated based on the \r
+# following rule to install EcpPeiPciCfgPpi instead of updating the PciCfg pointer\r
+# in the Framework PeiServicesTable: \r
+# \r
# Search pattern:\r
# PeiServices->PciCfg = <*>;\r
# Replace pattern:\r
# &gEcpPeiPciCfgPpiGuid,\r
# <*>\r
# };\r
-# (**PeiServices).InstallPpi (PeiServices, gEcpPeiPciCfgPpiList);\r
+# (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList);\r
# }\r
-\r
+# \r
+# In addition, the PeiServicesTable definition in PeiApi.h is updated to\r
+# \r
+# struct _EFI_PEI_SERVICES {\r
+# EFI_TABLE_HEADER Hdr;\r
+# ...\r
+# \r
+# //\r
+# // Pointer to PPI interface\r
+# //\r
+# #if (PI_SPECIFICATION_VERSION < 0x00010000)\r
+# \r
+# PEI_CPU_IO_PPI *CpuIo;\r
+# ECP_PEI_PCI_CFG_PPI *PciCfg; //Changed.\r
+# #else\r
+# ...\r
+# #endif\r
+# \r
+# };\r
+# \r
+# This change enable the detection of code segment which invokes PeiServices->PciCfg->Modify.\r
+# Such code causes a build break as ECP_PEI_PCI_CFG_PPI does not has "Modify" field. \r
+# This should be updated to a call to PeiLibPciCfgModify as shown below:\r
+# \r
+# Search pattern:\r
+# *->Modify(<*>); \r
+# Replace pattern:\r
+# PeiLibPciCfgModify(<*>);\r
+#\r
# PIWG's PI specification replaces Inte's EFI Specification 1.10.\r
# EFI_PEI_PCI_CFG_PPI defined in Inte's EFI Specification 1.10 is replaced by\r
# EFI_PEI_PCI_CFG2_PPI in PI 1.0.\r