From: li-elvin Date: Mon, 5 Sep 2011 09:53:37 +0000 (+0000) Subject: Update capsule pei module to pass IPF build. X-Git-Tag: edk2-stable201903~14273 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=4e4f13d245b1fbca55c03aca0b36848d8d50b57f Update capsule pei module to pass IPF build. Signed-off-by: li-elvin Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12280 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/MdeModulePkg/Universal/CapsulePei/Capsule.h b/MdeModulePkg/Universal/CapsulePei/Capsule.h index 8d8658a0c1..5b7caae674 100644 --- a/MdeModulePkg/Universal/CapsulePei/Capsule.h +++ b/MdeModulePkg/Universal/CapsulePei/Capsule.h @@ -38,6 +38,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include "Common/CommonHeader.h" +#ifdef MDE_CPU_IA32 + #pragma pack(1) // @@ -99,3 +101,5 @@ EFI_STATUS ); #endif + +#endif diff --git a/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf b/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf index 2599cdbcd1..72f1ba52f6 100644 --- a/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf +++ b/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf @@ -49,22 +49,26 @@ DebugLib PeiServicesTablePointerLib PrintLib - PeCoffLib + ReportStatusCodeLib + +[LibraryClasses.IA32] PeCoffGetEntryPointLib PcdLib - ReportStatusCodeLib [Guids] gEfiCapsuleVendorGuid # ALWAYS_CONSUMED - [Ppis] gEfiPeiReadOnlyVariable2PpiGuid # PPI ALWAYS_CONSUMED gPeiCapsulePpiGuid # PPI ALWAYS_CONSUMED + +[Ppis.IA32] gEfiPeiLoadFilePpiGuid # PPI ALWAYS_CONSUMED -[Pcd] +[Pcd.IA32] gEfiMdeModulePkgTokenSpaceGuid.PcdCapsuleCoalesceFile + +[FeaturePcd.IA32] gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode [Depex] diff --git a/MdeModulePkg/Universal/CapsulePei/Common/CommonHeader.h b/MdeModulePkg/Universal/CapsulePei/Common/CommonHeader.h index 5c0aa3068c..0f7f7aea41 100644 --- a/MdeModulePkg/Universal/CapsulePei/Common/CommonHeader.h +++ b/MdeModulePkg/Universal/CapsulePei/Common/CommonHeader.h @@ -12,11 +12,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ -#ifndef _CAPSULE_THUNK_32_TO_64_ -#define _CAPSULE_THUNK_32_TO_64_ - -#include -#include "PiPei.h" +#ifndef _CAPSULE_COMMON_HEADER_ +#define _CAPSULE_COMMON_HEADER_ // // This capsule PEIM puts its private data at the start of the @@ -31,6 +28,7 @@ typedef struct { #define CAPSULE_TEST_SIGNATURE SIGNATURE_32('T', 'E', 'S', 'T') +#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) typedef struct { EFI_PHYSICAL_ADDRESS EntryPoint; EFI_PHYSICAL_ADDRESS StackBufferBase; @@ -47,6 +45,7 @@ typedef struct { UINT64 ReturnStatus; IA32_DESCRIPTOR Gdtr; } SWITCH_64_TO_32_CONTEXT; +#endif /** The function to coalesce a fragmented capsule in memory. diff --git a/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c b/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c index 5598755d46..da37e671fe 100644 --- a/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c +++ b/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c @@ -16,6 +16,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include "Capsule.h" +#ifdef MDE_CPU_IA32 // // Global Descriptor Table (GDT) // @@ -417,6 +418,67 @@ ModeSwitch ( } +/** + Locates the coalesce image entry point, and detects its machine type. + + @param CoalesceImageEntryPoint Pointer to coalesce image entry point for output. + @param CoalesceImageMachineType Pointer to machine type of coalesce image. + + @retval EFI_SUCCESS Coalesce image successfully located. + @retval Others Failed to locate the coalesce image. + +**/ +EFI_STATUS +FindCapsuleCoalesceImage ( + OUT EFI_PHYSICAL_ADDRESS *CoalesceImageEntryPoint, + OUT UINT16 *CoalesceImageMachineType + ) +{ + EFI_STATUS Status; + UINTN Instance; + EFI_PEI_LOAD_FILE_PPI *LoadFile; + EFI_PEI_FV_HANDLE VolumeHandle; + EFI_PEI_FILE_HANDLE FileHandle; + EFI_PHYSICAL_ADDRESS CoalesceImageAddress; + UINT64 CoalesceImageSize; + UINT32 AuthenticationState; + + Instance = 0; + + while (TRUE) { + Status = PeiServicesFfsFindNextVolume (Instance++, &VolumeHandle); + if (EFI_ERROR (Status)) { + return Status; + } + Status = PeiServicesFfsFindFileByName (PcdGetPtr(PcdCapsuleCoalesceFile), VolumeHandle, &FileHandle); + if (!EFI_ERROR (Status)) { + Status = PeiServicesLocatePpi (&gEfiPeiLoadFilePpiGuid, 0, NULL, (VOID **) &LoadFile); + ASSERT_EFI_ERROR (Status); + + Status = LoadFile->LoadFile ( + LoadFile, + FileHandle, + &CoalesceImageAddress, + &CoalesceImageSize, + CoalesceImageEntryPoint, + &AuthenticationState + ); + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_ERROR, "Unable to find PE32 section in CapsuleRelocate image ffs %r!\n", Status)); + return Status; + } + *CoalesceImageMachineType = PeCoffLoaderGetMachineType ((VOID *) (UINTN) CoalesceImageAddress); + break; + } else { + continue; + } + } + + return Status; +} + +#endif + /** Checks for the presence of capsule descriptors. Get capsule descriptors from variable CapsuleUpdateData, CapsuleUpdateData1, CapsuleUpdateData2... @@ -526,65 +588,6 @@ GetCapsuleDescriptors ( return EFI_SUCCESS; } -/** - Locates the coalesce image entry point, and detects its machine type. - - @param CoalesceImageEntryPoint Pointer to coalesce image entry point for output. - @param CoalesceImageMachineType Pointer to machine type of coalesce image. - - @retval EFI_SUCCESS Coalesce image successfully located. - @retval Others Failed to locate the coalesce image. - -**/ -EFI_STATUS -FindCapsuleCoalesceImage ( - OUT EFI_PHYSICAL_ADDRESS *CoalesceImageEntryPoint, - OUT UINT16 *CoalesceImageMachineType - ) -{ - EFI_STATUS Status; - UINTN Instance; - EFI_PEI_LOAD_FILE_PPI *LoadFile; - EFI_PEI_FV_HANDLE VolumeHandle; - EFI_PEI_FILE_HANDLE FileHandle; - EFI_PHYSICAL_ADDRESS CoalesceImageAddress; - UINT64 CoalesceImageSize; - UINT32 AuthenticationState; - - Instance = 0; - - while (TRUE) { - Status = PeiServicesFfsFindNextVolume (Instance++, &VolumeHandle); - if (EFI_ERROR (Status)) { - return Status; - } - Status = PeiServicesFfsFindFileByName (PcdGetPtr(PcdCapsuleCoalesceFile), VolumeHandle, &FileHandle); - if (!EFI_ERROR (Status)) { - Status = PeiServicesLocatePpi (&gEfiPeiLoadFilePpiGuid, 0, NULL, (VOID **) &LoadFile); - ASSERT_EFI_ERROR (Status); - - Status = LoadFile->LoadFile ( - LoadFile, - FileHandle, - &CoalesceImageAddress, - &CoalesceImageSize, - CoalesceImageEntryPoint, - &AuthenticationState - ); - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_ERROR, "Unable to find PE32 section in CapsuleRelocate image ffs %r!\n", Status)); - return Status; - } - *CoalesceImageMachineType = PeCoffLoaderGetMachineType ((VOID *) (UINTN) CoalesceImageAddress); - break; - } else { - continue; - } - } - - return Status; -} - /** Gets the reserved long mode buffer. diff --git a/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c b/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c index c64fe1017c..a4e44a4f5e 100644 --- a/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c +++ b/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c @@ -12,7 +12,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ -#include #include #include "CommonHeader.h"