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