From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.31; helo=mga06.intel.com; envelope-from=jiewen.yao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0B6A32097DD03 for ; Tue, 29 May 2018 08:18:43 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 May 2018 08:18:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,456,1520924400"; d="scan'208";a="43686028" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga008.fm.intel.com with ESMTP; 29 May 2018 08:18:43 -0700 Received: from fmsmsx115.amr.corp.intel.com (10.18.116.19) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 29 May 2018 08:18:43 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx115.amr.corp.intel.com (10.18.116.19) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 29 May 2018 08:18:42 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.223]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.82]) with mapi id 14.03.0319.002; Tue, 29 May 2018 23:18:40 +0800 From: "Yao, Jiewen" To: "Zeng, Star" , Ard Biesheuvel , "edk2-devel@lists.01.org" CC: "Zeng, Star" Thread-Topic: [edk2] [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce AllocatePeiAccessiblePages routine Thread-Index: AQHT9pHhQTa+ELUdXUSywv7r7IUyjqRFZ98AgAFoPEA= Date: Tue, 29 May 2018 15:18:40 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503AC1685D@shsmsx102.ccr.corp.intel.com> References: <20180528144024.10809-1-ard.biesheuvel@linaro.org> <20180528144024.10809-4-ard.biesheuvel@linaro.org> <0C09AFA07DD0434D9E2A0C6AEB0483103BB47F36@shsmsx102.ccr.corp.intel.com> In-Reply-To: <0C09AFA07DD0434D9E2A0C6AEB0483103BB47F36@shsmsx102.ccr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOGU1OWQzNzYtMTZjMS00ODQ0LTg2NDItOTRjZTRlODY1YTczIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiQnNHUFRiejRkNEt0bXRUc21RK2I1SUJiclpwXC95akUrdXI4a1FyZVNQTHVnZXhHNlQrNDhLeFE2WTg4eHlQdkUifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce AllocatePeiAccessiblePages routine X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 May 2018 15:18:44 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Maybe " be accessible by PEI after a warm reboot or S3" ? We may want to consider Capsule Update case. > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Ze= ng, > Star > Sent: Monday, May 28, 2018 6:37 PM > To: Ard Biesheuvel ; edk2-devel@lists.01.org > Cc: Zeng, Star > Subject: Re: [edk2] [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce > AllocatePeiAccessiblePages routine >=20 > I think " be accessible by PEI after a warm reboot " should be " be acces= sible by > PEI after resuming from S3 ". > You can update it when pushing without need to send a new patch if other = has > no comment to the code part. >=20 >=20 > Thanks, > Star > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Ar= d > Biesheuvel > Sent: Monday, May 28, 2018 10:40 PM > To: edk2-devel@lists.01.org > Cc: Ard Biesheuvel > Subject: [edk2] [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce > AllocatePeiAccessiblePages routine >=20 > Add a routine to DxeServicesLib that abstracts the allocation of memory > that should be accessible by PEI after a warm reboot. We will use it to > replace open coded implementations that limit the address to < 4 GB, > which may not be possible on non-Intel systems that have no 32-bit > addressable memory at all. >=20 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel > --- > MdePkg/Include/Library/DxeServicesLib.h | 23 ++++++- > MdePkg/Library/DxeServicesLib/Allocate.c | 54 +++++++++++++++ > MdePkg/Library/DxeServicesLib/DxeServicesLib.inf | 11 +++- > MdePkg/Library/DxeServicesLib/X64/Allocate.c | 69 > ++++++++++++++++++++ > 4 files changed, 155 insertions(+), 2 deletions(-) >=20 > diff --git a/MdePkg/Include/Library/DxeServicesLib.h > b/MdePkg/Include/Library/DxeServicesLib.h > index 7c1c62236d96..20aee68af558 100644 > --- a/MdePkg/Include/Library/DxeServicesLib.h > +++ b/MdePkg/Include/Library/DxeServicesLib.h > @@ -305,5 +305,26 @@ GetFileDevicePathFromAnyFv ( > OUT EFI_DEVICE_PATH_PROTOCOL **FvFileDevicePath > ); >=20 > -#endif > +/** > + Allocates one or more 4KB pages of a given type from a memory region t= hat > is > + accessible to PEI. > + > + Allocates the number of 4KB pages of type 'MemoryType' and returns a > + pointer to the allocated buffer. The buffer returned is aligned on a = 4KB > + boundary. If Pages is 0, then NULL is returned. If there is not enou= gh > + memory remaining to satisfy the request, then NULL is returned. >=20 > + @param[in] MemoryType The memory type to allocate > + @param[in] Pages The number of 4 KB pages to > allocate. > + > + @return A pointer to the allocated buffer or NULL if allocation fails. > + > +**/ > +VOID * > +EFIAPI > +AllocatePeiAccessiblePages ( > + IN EFI_MEMORY_TYPE MemoryType, > + IN UINTN Pages > + ); > + > +#endif > diff --git a/MdePkg/Library/DxeServicesLib/Allocate.c > b/MdePkg/Library/DxeServicesLib/Allocate.c > new file mode 100644 > index 000000000000..4d118f766d49 > --- /dev/null > +++ b/MdePkg/Library/DxeServicesLib/Allocate.c > @@ -0,0 +1,54 @@ > +/** @file > + DxeServicesLib memory allocation routines > + > + Copyright (c) 2018, Linaro, Ltd. All rights reserved.
> + > + This program and the accompanying materials are licensed and made > available > + under the terms and conditions of the BSD License which accompanies th= is > + distribution. The full text of the license may be found at > + http://opensource.org/licenses/bsd-license.php. > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > +**/ > + > +#include > +#include > +#include > + > +/** > + Allocates one or more 4KB pages of a given type from a memory region t= hat > is > + accessible to PEI. > + > + Allocates the number of 4KB pages of type 'MemoryType' and returns a > + pointer to the allocated buffer. The buffer returned is aligned on a = 4KB > + boundary. If Pages is 0, then NULL is returned. If there is not enou= gh > + memory remaining to satisfy the request, then NULL is returned. > + > + @param[in] MemoryType The memory type to allocate > + @param[in] Pages The number of 4 KB pages to > allocate. > + > + @return A pointer to the allocated buffer or NULL if allocation fails. > + > +**/ > +VOID * > +EFIAPI > +AllocatePeiAccessiblePages ( > + IN EFI_MEMORY_TYPE MemoryType, > + IN UINTN Pages > + ) > +{ > + EFI_STATUS Status; > + EFI_PHYSICAL_ADDRESS Memory; > + > + if (Pages =3D=3D 0) { > + return NULL; > + } > + > + Status =3D gBS->AllocatePages (AllocateAnyPages, MemoryType, Pages, > &Memory); > + if (EFI_ERROR (Status)) { > + return NULL; > + } > + return (VOID *)(UINTN)Memory; > +} > diff --git a/MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > b/MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > index bd2faf2f6f2d..50ae24f8ee22 100644 > --- a/MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > +++ b/MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > @@ -27,12 +27,18 @@ [Defines] > LIBRARY_CLASS =3D DxeServicesLib|DXE_CORE > DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER > SMM_CORE UEFI_APPLICATION UEFI_DRIVER >=20 > # > -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC > +# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC ARM AARCH64 > # >=20 > [Sources] > DxeServicesLib.c >=20 > +[Sources.IA32, Sources.IPF, Sources.EBC, Sources.ARM, Sources.AARCH64] > + Allocate.c > + > +[Sources.X64] > + X64/Allocate.c > + > [Packages] > MdePkg/MdePkg.dec >=20 > @@ -44,6 +50,9 @@ [LibraryClasses] > UefiLib > UefiBootServicesTableLib >=20 > +[LibraryClasses.X64] > + HobLib > + > [Guids] > gEfiFileInfoGuid ## > SOMETIMES_CONSUMES ## UNDEFINED >=20 > diff --git a/MdePkg/Library/DxeServicesLib/X64/Allocate.c > b/MdePkg/Library/DxeServicesLib/X64/Allocate.c > new file mode 100644 > index 000000000000..b6d34ba20881 > --- /dev/null > +++ b/MdePkg/Library/DxeServicesLib/X64/Allocate.c > @@ -0,0 +1,69 @@ > +/** @file > + DxeServicesLib memory allocation routines > + > + Copyright (c) 2018, Linaro, Ltd. All rights reserved.
> + > + This program and the accompanying materials are licensed and made > available > + under the terms and conditions of the BSD License which accompanies th= is > + distribution. The full text of the license may be found at > + http://opensource.org/licenses/bsd-license.php. > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > +**/ > + > +#include > +#include > +#include > +#include > + > +/** > + Allocates one or more 4KB pages of a given type from a memory region t= hat > is > + accessible to PEI. > + > + Allocates the number of 4KB pages of type 'MemoryType' and returns a > + pointer to the allocated buffer. The buffer returned is aligned on a = 4KB > + boundary. If Pages is 0, then NULL is returned. If there is not enou= gh > + memory remaining to satisfy the request, then NULL is returned. > + > + @param[in] MemoryType The memory type to allocate > + @param[in] Pages The number of 4 KB pages to > allocate. > + > + @return A pointer to the allocated buffer or NULL if allocation fails. > + > +**/ > +VOID * > +EFIAPI > +AllocatePeiAccessiblePages ( > + IN EFI_MEMORY_TYPE MemoryType, > + IN UINTN Pages > + ) > +{ > + EFI_STATUS Status; > + EFI_ALLOCATE_TYPE AllocType; > + EFI_PHYSICAL_ADDRESS Memory; > + EFI_HOB_HANDOFF_INFO_TABLE *PhitHob; > + > + if (Pages =3D=3D 0) { > + return NULL; > + } > + > + AllocType =3D AllocateAnyPages; > + // > + // A X64 build of DXE may be combined with a 32-bit build of PEI, and = so we > + // need to check the memory limit set by PEI, and allocate below 4 GB = if the > + // limit is set to 4 GB or lower. > + // > + PhitHob =3D (EFI_HOB_HANDOFF_INFO_TABLE *)GetHobList (); > + if (PhitHob->EfiFreeMemoryTop <=3D MAX_UINT32) { > + AllocType =3D AllocateMaxAddress; > + Memory =3D MAX_UINT32; > + } > + > + Status =3D gBS->AllocatePages (AllocType, MemoryType, Pages, &Memory); > + if (EFI_ERROR (Status)) { > + return NULL; > + } > + return (VOID *)(UINTN)Memory; > +} > -- > 2.17.0 >=20 > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel