From nobody Thu Apr 25 04:46:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+63629+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+63629+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1596325977; cv=none; d=zohomail.com; s=zohoarc; b=JI1zI8+IBQ7maynRtUJ2EMFByHH4x2zE4JXE+gHhIdYHNihln3mDHA309tLrUubaB9IcS79PNHcefsWhRaW5gX1npK5cQz2R9D98KEArg4KsrkgzhYQHXRFeJWEWhQEEm9Vw48v4eRTG/tLkpu3Xb1Kos3CYODGMqP+MkB1viao= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1596325977; h=Cc:Date:From:List-Id:List-Unsubscribe:Message-ID:Reply-To:Sender:Subject:To; bh=QFPzoJ9a2w0xkwnE52xvPbo2Yt8fwDsSSVwtx3NB+Hs=; b=EeaNKURsVvL65nA3N2bsjxPaom01tCJPK9eSL2JA5S28XfhfbMRvMNm/qfDQC+kkzUzSOqTtc6SMUccI5jZ7gea1hdTIQ+bgmOkRWdPHhtJRgXwVqp799bptC8C1iNl08DkERXMbiv/6ABHavGfzfNtK7MH8KbiDooyobkveOWI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+63629+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1596325977794621.5769359561572; Sat, 1 Aug 2020 16:52:57 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id l6mgYY1788612xnyal1QNHse; Sat, 01 Aug 2020 16:52:57 -0700 X-Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web10.342.1596325976445472649 for ; Sat, 01 Aug 2020 16:52:56 -0700 IronPort-SDR: RbaNqEsxs8EY/odZFYcC6gpzd76q2sbMVDE9UJruxogdnNvzU+ILXe40sokXyNKOGOd+KdwyR0 dEU9mb2WgMAA== X-IronPort-AV: E=McAfee;i="6000,8403,9700"; a="170069308" X-IronPort-AV: E=Sophos;i="5.75,424,1589266800"; d="scan'208";a="170069308" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Aug 2020 16:52:55 -0700 IronPort-SDR: yuO0HCDtS01VrEn4RmMikmBLAeb661hITB9ibWSB/wSczuhtHbjCQVmdMB351RnQS/8cbRlda1 m5OzhY61HcZg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,424,1589266800"; d="scan'208";a="321814439" X-Received: from gdong1-mobl.amr.corp.intel.com ([10.212.131.71]) by orsmga008.jf.intel.com with ESMTP; 01 Aug 2020 16:52:54 -0700 From: "Guo Dong" To: devel@edk2.groups.io Cc: leif@nuviainc.com, ard.biesheuvel@arm.com Subject: [edk2-devel] [PATCH] [EmbeddedPkg]:Update PrePiLib to return DxeCoreEntrypoint Date: Sat, 1 Aug 2020 16:52:33 -0700 Message-Id: <20200801235233.11428-1-guo.dong@intel.com> Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,guo.dong@intel.com X-Gm-Message-State: Om1Lu6oITUiQg2BlLaWbPQ5Bx1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1596325977; bh=+VAci+IVsRxsU4RtULEDN27KrPY5oGlkH5wXwLhMdj4=; h=Cc:Date:From:Reply-To:Subject:To; b=p2R7/axKgxi6pem+t4jV6FvBXq57fDWV3djbDAW9Z7lQF9ZwJOZllDCoKHgqX7NuXEy 8T38LP+RV7d7IE0XcXoeTAasT+rxewJPGQ8QGrnVcoIqVtRMVgmQpCjzmiD7uQ3wR/g+s Iw2oX18KAa6p7bcCGkX4JJRyli4UuWErroo= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Added LoadDxeCore() API to return DxeCore entry point after loading DxeCore from FV, and del LoadDxeCoreFromFfsFile() as it is replaced by LoadDxeCore(= ). Update LoadDxeCoreFromFv() to use LoadDxeCore() to reduce code, and its behavior is same. Updated FfsProcessSection() to support both IA32 and X64 build. With this patch, PrePiLib could be used by UefiPayloadPkg to load DxeCore and get its entry point. Signed-off-by: Guo Dong --- EmbeddedPkg/Include/Library/PrePiLib.h | 17 ++++++++++++++--- EmbeddedPkg/Library/PrePiLib/FwVol.c | 2 +- EmbeddedPkg/Library/PrePiLib/PrePiLib.c | 95 +++++++++++++++++++++++++++++= ++++++++++++++++++++++++------------------------------------------ 3 files changed, 68 insertions(+), 46 deletions(-) diff --git a/EmbeddedPkg/Include/Library/PrePiLib.h b/EmbeddedPkg/Include/L= ibrary/PrePiLib.h index 54f8e1e582..269907108e 100644 --- a/EmbeddedPkg/Include/Library/PrePiLib.h +++ b/EmbeddedPkg/Include/Library/PrePiLib.h @@ -735,11 +735,22 @@ LoadPeCoffImage ( OUT EFI_PHYSICAL_ADDRESS *EntryPoint ); =20 + +/** + Load DXE core from FV and return DXE core entrypoint. + + @param[in] FvInstance The FV instance to search DXE core. Will = search all the FVs if it is NULL. + @param[out] EntryPoint DXE core entrypoint. + + @return EFI_SUCCESS The DxeCore is loaded successfully. + @return Others Failed to load the DxeCore. + +**/ EFI_STATUS EFIAPI -LoadDxeCoreFromFfsFile ( - IN EFI_PEI_FILE_HANDLE FileHandle, - IN UINTN StackSize +LoadDxeCore ( + IN UINTN *FvInstance, OPTIONAL + OUT EFI_PHYSICAL_ADDRESS *EntryPoint ); =20 EFI_STATUS diff --git a/EmbeddedPkg/Library/PrePiLib/FwVol.c b/EmbeddedPkg/Library/Pre= PiLib/FwVol.c index 881506eddd..46ea5f733f 100644 --- a/EmbeddedPkg/Library/PrePiLib/FwVol.c +++ b/EmbeddedPkg/Library/PrePiLib/FwVol.c @@ -298,7 +298,7 @@ FfsProcessSection ( UINT16 SectionAttribute; UINT32 AuthenticationStatus; CHAR8 *CompressedData; - UINTN CompressedDataLength; + UINT32 CompressedDataLength; =20 =20 *OutputBuffer =3D NULL; diff --git a/EmbeddedPkg/Library/PrePiLib/PrePiLib.c b/EmbeddedPkg/Library/= PrePiLib/PrePiLib.c index afbe146632..c18b30e22e 100644 --- a/EmbeddedPkg/Library/PrePiLib/PrePiLib.c +++ b/EmbeddedPkg/Library/PrePiLib/PrePiLib.c @@ -119,30 +119,52 @@ VOID IN VOID *HobStart ); =20 +/** + Load DXE core from FV and return DXE core entrypoint. + + @param[in] FvInstance The FV instance to search DXE core. Will = search all the FVs if it is NULL. + @param[out] EntryPoint DXE core entrypoint. + + @return EFI_SUCCESS The DxeCore is loaded successfully. + @return Others Failed to load the DxeCore. + +**/ EFI_STATUS EFIAPI -LoadDxeCoreFromFfsFile ( - IN EFI_PEI_FILE_HANDLE FileHandle, - IN UINTN StackSize +LoadDxeCore ( + IN UINTN *FvInstance, OPTIONAL + OUT EFI_PHYSICAL_ADDRESS *EntryPoint ) { EFI_STATUS Status; + EFI_PEI_FV_HANDLE VolumeHandle; + EFI_PEI_FILE_HANDLE FileHandle; VOID *PeCoffImage; EFI_PHYSICAL_ADDRESS ImageAddress; UINT64 ImageSize; - EFI_PHYSICAL_ADDRESS EntryPoint; - VOID *BaseOfStack; - VOID *TopOfStack; - VOID *Hob; EFI_FV_FILE_INFO FvFileInfo; =20 + FileHandle =3D NULL; + if (FvInstance !=3D NULL) { + // + // Caller passed in a specific FV to try, so only try that one + // + Status =3D FfsFindNextVolume (*FvInstance, &VolumeHandle); + if (!EFI_ERROR (Status)) { + Status =3D FfsFindNextFile (EFI_FV_FILETYPE_DXE_CORE, VolumeHandle, = &FileHandle); + } + } else { + Status =3D FfsAnyFvFindFirstFile (EFI_FV_FILETYPE_DXE_CORE, &VolumeHan= dle, &FileHandle); + DEBUG ((EFI_D_ERROR, "FfsAnyFvFindFirstFile Status =3D %r\n", Status)); + } + Status =3D FfsFindSectionData (EFI_SECTION_PE32, FileHandle, &PeCoffImag= e); if (EFI_ERROR (Status)) { return Status; } =20 =20 - Status =3D LoadPeCoffImage (PeCoffImage, &ImageAddress, &ImageSize, &Ent= ryPoint); + Status =3D LoadPeCoffImage (PeCoffImage, &ImageAddress, &ImageSize, Entr= yPoint); // For NT32 Debug Status =3D SecWinNtPeiLoadFile (PeCoffImage, &ImageAddr= ess, &ImageSize, &EntryPoint); ASSERT_EFI_ERROR (Status); =20 @@ -152,13 +174,33 @@ LoadDxeCoreFromFfsFile ( Status =3D FfsGetFileInfo (FileHandle, &FvFileInfo); ASSERT_EFI_ERROR (Status); =20 - BuildModuleHob (&FvFileInfo.FileName, (EFI_PHYSICAL_ADDRESS)(UINTN)Image= Address, EFI_SIZE_TO_PAGES ((UINT32) ImageSize) * EFI_PAGE_SIZE, EntryPoint= ); + BuildModuleHob (&FvFileInfo.FileName, (EFI_PHYSICAL_ADDRESS)(UINTN)Image= Address, EFI_SIZE_TO_PAGES ((UINT32) ImageSize) * EFI_PAGE_SIZE, *EntryPoin= t); =20 - DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Loading DxeCore at 0x%10p EntryPoint= =3D0x%10p\n", (VOID *)(UINTN)ImageAddress, (VOID *)(UINTN)EntryPoint)); + DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Loading DxeCore at 0x%10p EntryPoint= =3D0x%10p\n", (VOID *)(UINTN)ImageAddress, (VOID *)(UINTN)*EntryPoint)); + + return EFI_SUCCESS; +} + + +EFI_STATUS +EFIAPI +LoadDxeCoreFromFv ( + IN UINTN *FvInstance, OPTIONAL + IN UINTN StackSize + ) +{ + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS EntryPoint; + VOID *BaseOfStack; + VOID *TopOfStack; + VOID *Hob; + + Status =3D LoadDxeCore (FvInstance, &EntryPoint); + ASSERT_EFI_ERROR (Status); =20 Hob =3D GetHobList (); if (StackSize =3D=3D 0) { - // User the current stack + // Use the current stack =20 ((DXE_CORE_ENTRY_POINT)(UINTN)EntryPoint) (Hob); } else { @@ -199,37 +241,6 @@ LoadDxeCoreFromFfsFile ( =20 =20 =20 -EFI_STATUS -EFIAPI -LoadDxeCoreFromFv ( - IN UINTN *FvInstance, OPTIONAL - IN UINTN StackSize - ) -{ - EFI_STATUS Status; - EFI_PEI_FV_HANDLE VolumeHandle; - EFI_PEI_FILE_HANDLE FileHandle =3D NULL; - - if (FvInstance !=3D NULL) { - // - // Caller passed in a specific FV to try, so only try that one - // - Status =3D FfsFindNextVolume (*FvInstance, &VolumeHandle); - if (!EFI_ERROR (Status)) { - Status =3D FfsFindNextFile (EFI_FV_FILETYPE_DXE_CORE, VolumeHandle, = &FileHandle); - } - } else { - Status =3D FfsAnyFvFindFirstFile (EFI_FV_FILETYPE_DXE_CORE, &VolumeHan= dle, &FileHandle); - } - - if (!EFI_ERROR (Status)) { - return LoadDxeCoreFromFfsFile (FileHandle, StackSize); - } - - return Status; -} - - EFI_STATUS EFIAPI DecompressFirstFv ( --=20 2.16.2.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#63629): https://edk2.groups.io/g/devel/message/63629 Mute This Topic: https://groups.io/mt/75937184/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-