From 64cd21af352db61f18806f3fd4f58e8c0bd4de9c Mon Sep 17 00:00:00 2001 From: lgao4 Date: Mon, 17 Nov 2008 02:12:36 +0000 Subject: [PATCH] Update ASL build rule, Add PeiLibPciCfgModify into EDKII GlueLib PeiServiceLib to support the modules that uses EDKII Glue Lib git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6551 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Bin/Win32/Trim.exe | Bin 799323 -> 796118 bytes BaseTools/Conf/build_rule.template | 5 +- .../PciCfg2ToPciCfgThunk.inf | 2 +- .../Include/Library/EdkIIGluePeiServicesLib.h | 54 ++++++++++++ .../Library/PeiServicesLib/PeiServicesLib.c | 77 ++++++++++++++++++ .../Library/PeiServicesLib/PeiServicesLib.inf | 1 + 6 files changed, 136 insertions(+), 3 deletions(-) diff --git a/BaseTools/Bin/Win32/Trim.exe b/BaseTools/Bin/Win32/Trim.exe index 1494ad19d42235fa82529d461426d3b419436da1..46de2a1c0b74e22d676c96074f8812ba75da6da7 100755 GIT binary patch delta 50480 zcmb5X1%MPs(=a@;w>vXCvvPOb0f)Q027-HVr*Y`T{ct1tZ3DXhMk`?-6oB z**vjIFlNI3d}HNcP<(>|!w}?dfl~;wt6(cV#?kzT`MD%%enO@~RS@6!0Yz2@lO*IR z`cy-ptYs=Xf3a&p;{-Ez1R4*%C>j~vB69yyYKlFKPMG+YUS ziNE62idp%0?uya;yK=?Mt|-OF@l(e4tC(Gn;YPGIv5N|ShILG3a$7$%Tmdu;=3(N zE&CI`UsefChxj`yqU2oh?^dJ@Gi0wEo{(;(jZhK}t@#E`k9haSdr0!fjd`)cMK|vc zMv4zhcohsuP`8Xkyc6QL55yXz+}#&3Pnf@_9h!{^zC$CB@d*o$_%LYqu>y!!{Kw}^HlL&0eF*rM_q1R7sV{u~Tq@x|rNa?T(D9osbP+PZCz*1bFA=`olK?^NiKq&b*{2J*75FKzRj#@6}cc{%;r{?W6-2x2kXjV zhzt9~hKmTNo?1#$2pE^2lJr?fHG=!3dP4ulzj%?e8nIC>&y~dk6Y=>}~tH zD9P-l{p13U+fD1tWY_x1eX(lI2FX2wIkIbm zXCP43)$$z#D!NAgDHz0*wQ@z|G**AT{0LifwNvH7`=$|fRZm5#}`kxN*CQ*v(vvo~FrBiNC%@_uBWJ^g~5Ue0B2 zyCCP3Bia26vVug|uP@3ck#;99$<;7ghRbp`T`b9@FjJ0V4KB;u5eiFrRi1$4Gp<-& zS1|jp%4WPPhoKHu_)%yr-}N}On4NzjKSMlEK9yf%&@=hhU=Z8>Tpo?JuJ%%%n20;0 z+56XW35;C!job^t?0tX9FN5WPh4#6(^7ddjoAFNm6PJ#eUt~{+d_`FuF(&Y_SY+mW z53YM9NqkaBlASM`nbMW;hh?PxJdsUN6~CUL6dw|v(EiI7hwU~2nFgU_2VcJ}NuiX@2--@VzJ zvYAnATS)*qJw*6aH>JHsBp@Fot!JtB)cRqg2MweFh;NcryPKmVJmQ@A>kChGZ&t;W

Uj$05xlQ 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 VRiF#EC;*=yD(t?C1`2A?{{f>syaxaP delta 53321 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

3wn-3nrmGh5 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 - "$(ASLPP)" $(ASLPP_FLAGS) $(INC) ${src} > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i - "$(ASL)" -p ${dst} $(ASL_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i + Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i ${src} + "$(ASLPP)" $(ASLPP_FLAGS) $(INC) /I${s_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii + "$(ASL)" -p ${dst} $(ASL_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii [C-Code-File.AcpiTable] diff --git a/EdkCompatibilityPkg/Compatibility/PciCfg2ToPciCfgThunk/PciCfg2ToPciCfgThunk.inf b/EdkCompatibilityPkg/Compatibility/PciCfg2ToPciCfgThunk/PciCfg2ToPciCfgThunk.inf index f6b7a91402..ea1b5c89dc 100644 --- a/EdkCompatibilityPkg/Compatibility/PciCfg2ToPciCfgThunk/PciCfg2ToPciCfgThunk.inf +++ b/EdkCompatibilityPkg/Compatibility/PciCfg2ToPciCfgThunk/PciCfg2ToPciCfgThunk.inf @@ -17,7 +17,7 @@ # &gEcpPeiPciCfgPpiGuid, # <*> # }; -# (**PeiServices).InstallPpi (PeiServices, gEcpPeiPciCfgPpiList); +# (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList); # } # # In addition, the PeiServicesTable definition in PeiApi.h is updated to diff --git a/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Include/Library/EdkIIGluePeiServicesLib.h b/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Include/Library/EdkIIGluePeiServicesLib.h index f9a9dd7c01..912c36bfeb 100644 --- a/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Include/Library/EdkIIGluePeiServicesLib.h +++ b/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Include/Library/EdkIIGluePeiServicesLib.h @@ -307,5 +307,59 @@ PeiServicesResetSystem ( VOID ); +/** + PCI read-modify-write operations. + + 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. "Modify" function in these two PPI are not + compatibile with each other. + + For Framework code that make the following call: + PciCfg->Modify ( + PeiServices, + PciCfg, + Width, + Address, + SetBits, + ClearBits + ); + it will be updated to the following code which call this library API: + PeiLibPciCfgModify ( + PeiServices, + PciCfg, + Width, + Address, + SetBits, + ClearBits + ); + + @param PeiServices An indirect pointer to the PEI Services Table + published by the PEI Foundation. + @param PciCfg A pointer to the this pointer of EFI_PEI_PCI_CFG_PPI. + This parameter is unused as a place holder to make + the parameter list identical to PEI_PCI_CFG_PPI_RW. + @param Width The width of the access. Enumerated in bytes. Type + EFI_PEI_PCI_CFG_PPI_WIDTH is defined in Read(). + @param Address The physical address of the access. + @param SetBits Points to value to bitwise-OR with the read configuration value. + The size of the value is determined by Width. + @param ClearBits Points to the value to negate and bitwise-AND with the read configuration value. + The size of the value is determined by Width. + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_DEVICE_ERROR There was a problem with the transaction. +**/ +EFI_STATUS +EFIAPI +PeiLibPciCfgModify ( + IN EFI_PEI_SERVICES **PeiServices, + IN PEI_PCI_CFG_PPI *PciCfg, + IN PEI_PCI_CFG_PPI_WIDTH Width, + IN UINT64 Address, + IN UINTN SetBits, + IN UINTN ClearBits + ) +; #endif diff --git a/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesLib/PeiServicesLib.c b/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesLib/PeiServicesLib.c index 60143519f8..9efb8c2b15 100644 --- a/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesLib/PeiServicesLib.c +++ b/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesLib/PeiServicesLib.c @@ -391,3 +391,80 @@ PeiServicesResetSystem ( PeiServices = GetPeiServicesTablePointer (); return (*PeiServices)->PeiResetSystem (PeiServices); } +/** + PCI read-modify-write operations. + + 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. "Modify" function in these two PPI are not + compatibile with each other. + + For Framework code that make the following call: + PciCfg->Modify ( + PeiServices, + PciCfg, + Width, + Address, + SetBits, + ClearBits + ); + it will be updated to the following code which call this library API: + PeiLibPciCfgModify ( + PeiServices, + PciCfg, + Width, + Address, + SetBits, + ClearBits + ); + + @param PeiServices An indirect pointer to the PEI Services Table + published by the PEI Foundation. + @param PciCfg A pointer to the this pointer of EFI_PEI_PCI_CFG_PPI. + This parameter is unused as a place holder to make + the parameter list identical to PEI_PCI_CFG_PPI_RW. + @param Width The width of the access. Enumerated in bytes. Type + EFI_PEI_PCI_CFG_PPI_WIDTH is defined in Read(). + @param Address The physical address of the access. + @param SetBits Points to value to bitwise-OR with the read configuration value. + The size of the value is determined by Width. + @param ClearBits Points to the value to negate and bitwise-AND with the read configuration value. + The size of the value is determined by Width. + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_DEVICE_ERROR There was a problem with the transaction. +**/ +EFI_STATUS +EFIAPI +PeiLibPciCfgModify ( + IN EFI_PEI_SERVICES **PeiServices, + IN PEI_PCI_CFG_PPI *PciCfg, + IN PEI_PCI_CFG_PPI_WIDTH Width, + IN UINT64 Address, + IN UINTN SetBits, + IN UINTN ClearBits + ) +{ + EFI_STATUS Status; + EFI_PEI_PCI_CFG2_PPI *PciCfg2; + + Status = (*PeiServices)->LocatePpi ( + PeiServices, + &gPeiPciCfg2PpiGuid, + 0, + NULL, + (VOID **) &PciCfg2 + ); + ASSERT_EFI_ERROR (Status); + + Status = PciCfg2->Modify ( + (CONST EFI_PEI_SERVICES **) PeiServices, + PciCfg2, + (EFI_PEI_PCI_CFG_PPI_WIDTH) Width, + Address, + &SetBits, + &ClearBits + ); + + return Status; +} diff --git a/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesLib/PeiServicesLib.inf b/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesLib/PeiServicesLib.inf index 1b604d1f74..3c9e469066 100644 --- a/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesLib/PeiServicesLib.inf +++ b/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiServicesLib/PeiServicesLib.inf @@ -57,6 +57,7 @@ COMPONENT_TYPE = LIBRARY # used to replace EdkIIGluePeiServicesTablePointerLibMm7 or # EdkIIGluePeiServicesTablePointerLibKr1 # + EdkFrameworkPpiLib [libraries.ia32] EdkIIGluePeiServicesTablePointerLibMm7