* [PATCH 0/2] Add SecHobData PPI support
@ 2017-08-02 10:37 Star Zeng
2017-08-02 10:37 ` [PATCH 1/2] MdePkg: Add definition for SecHobData PPI Star Zeng
2017-08-02 10:37 ` [PATCH 2/2] MdeModulePkg PeiCore: Install SEC HOB data Star Zeng
0 siblings, 2 replies; 4+ messages in thread
From: Star Zeng @ 2017-08-02 10:37 UTC (permalink / raw)
To: edk2-devel; +Cc: Star Zeng, Liming Gao
This PPI is introduced in PI Version 1.5.
Cc: Liming Gao <liming.gao@intel.com>
Star Zeng (2):
MdePkg: Add definition for SecHobData PPI
MdeModulePkg PeiCore: Install SEC HOB data
MdeModulePkg/Core/Pei/Hob/Hob.c | 74 ++++++++++++++++++++++++++++++++++++++-
MdeModulePkg/Core/Pei/PeiMain.h | 17 +++++++++
MdeModulePkg/Core/Pei/PeiMain.inf | 3 +-
MdeModulePkg/Core/Pei/Ppi/Ppi.c | 19 +++++++++-
MdePkg/Include/Ppi/SecHobData.h | 65 ++++++++++++++++++++++++++++++++++
MdePkg/MdePkg.dec | 7 ++++
6 files changed, 182 insertions(+), 3 deletions(-)
create mode 100644 MdePkg/Include/Ppi/SecHobData.h
--
2.7.0.windows.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] MdePkg: Add definition for SecHobData PPI
2017-08-02 10:37 [PATCH 0/2] Add SecHobData PPI support Star Zeng
@ 2017-08-02 10:37 ` Star Zeng
2017-08-03 15:17 ` Gao, Liming
2017-08-02 10:37 ` [PATCH 2/2] MdeModulePkg PeiCore: Install SEC HOB data Star Zeng
1 sibling, 1 reply; 4+ messages in thread
From: Star Zeng @ 2017-08-02 10:37 UTC (permalink / raw)
To: edk2-devel; +Cc: Star Zeng, Liming Gao
This PPI is introduced in PI Version 1.5.
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
---
MdePkg/Include/Ppi/SecHobData.h | 65 +++++++++++++++++++++++++++++++++++++++++
MdePkg/MdePkg.dec | 7 +++++
2 files changed, 72 insertions(+)
create mode 100644 MdePkg/Include/Ppi/SecHobData.h
diff --git a/MdePkg/Include/Ppi/SecHobData.h b/MdePkg/Include/Ppi/SecHobData.h
new file mode 100644
index 000000000000..0efe1a2d0b77
--- /dev/null
+++ b/MdePkg/Include/Ppi/SecHobData.h
@@ -0,0 +1,65 @@
+/** @file
+ This file declares Sec Hob Data PPI.
+
+ This PPI provides a way for the SEC code to pass zero or more HOBs in a HOB list.
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials are licensed and made available under
+the terms and conditions of the BSD License that accompanies this 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.
+
+ @par Revision Reference:
+ This PPI is introduced in PI Version 1.5.
+
+**/
+
+#ifndef __SEC_HOB_DATA_PPI_H__
+#define __SEC_HOB_DATA_PPI_H__
+
+#include <Pi/PiHob.h>
+
+#define EFI_SEC_HOB_DATA_PPI_GUID \
+ { \
+ 0x3ebdaf20, 0x6667, 0x40d8, {0xb4, 0xee, 0xf5, 0x99, 0x9a, 0xc1, 0xb7, 0x1f } \
+ }
+
+typedef struct _EFI_SEC_HOB_DATA_PPI EFI_SEC_HOB_DATA_PPI;
+
+/**
+ Return a pointer to a buffer containing zero or more HOBs that
+ will be installed into the PEI HOB List.
+
+ This function returns a pointer to a pointer to zero or more HOBs,
+ terminated with a HOB of type EFI_HOB_TYPE_END_OF_HOB_LIST.
+ Note: The HobList must not contain a EFI_HOB_HANDOFF_INFO_TABLE HOB (PHIT) HOB.
+
+ @param[in] This Pointer to this PPI structure.
+ @param[out] HobList A pointer to a returned pointer to zero or more HOBs.
+ If no HOBs are to be returned, then the returned pointer
+ is a pointer to a HOB of type EFI_HOB_TYPE_END_OF_HOB_LIST.
+
+ @retval EFI_SUCCESS This function completed successfully.
+ @retval EFI_NOT_FOUND No HOBS are available.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SEC_HOB_DATA_GET) (
+ IN CONST EFI_SEC_HOB_DATA_PPI *This,
+ OUT EFI_HOB_GENERIC_HEADER **HobList
+);
+
+///
+/// This PPI provides a way for the SEC code to pass zero or more HOBs in a HOB list.
+///
+struct _EFI_SEC_HOB_DATA_PPI {
+ EFI_SEC_HOB_DATA_GET GetHobs;
+};
+
+extern EFI_GUID gEfiSecHobDataPpiGuid;
+
+#endif
diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
index d6928b3f97bf..f54b056563b4 100644
--- a/MdePkg/MdePkg.dec
+++ b/MdePkg/MdePkg.dec
@@ -909,6 +909,13 @@ [Ppis]
## Include/Ppi/SecPlatformInformation.h
gEfiSecPlatformInformation2PpiGuid = { 0x9e9f374b, 0x8f16, 0x4230, {0x98, 0x24, 0x58, 0x46, 0xee, 0x76, 0x6a, 0x97 } }
+ #
+ # PPIs defined in PI 1.5.
+ #
+
+ ## Include/Ppi/SecHobData.h
+ gEfiSecHobDataPpiGuid = { 0x3ebdaf20, 0x6667, 0x40d8, {0xb4, 0xee, 0xf5, 0x99, 0x9a, 0xc1, 0xb7, 0x1f } }
+
[Protocols]
## Include/Protocol/Pcd.h
gPcdProtocolGuid = { 0x11B34006, 0xD85B, 0x4D0A, { 0xA2, 0x90, 0xD5, 0xA5, 0x71, 0x31, 0x0E, 0xF7 }}
--
2.7.0.windows.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] MdeModulePkg PeiCore: Install SEC HOB data
2017-08-02 10:37 [PATCH 0/2] Add SecHobData PPI support Star Zeng
2017-08-02 10:37 ` [PATCH 1/2] MdePkg: Add definition for SecHobData PPI Star Zeng
@ 2017-08-02 10:37 ` Star Zeng
1 sibling, 0 replies; 4+ messages in thread
From: Star Zeng @ 2017-08-02 10:37 UTC (permalink / raw)
To: edk2-devel; +Cc: Star Zeng, Liming Gao
If the EFI_SEC_HOB_DATA_PPI is in the list of PPIs passed to the PEI
entry point, the PEI Foundation will call the GetHobs() member
function and install all HOBs returned into the HOB list. It does
this after installing all PPIs passed from SEC into the PPI database
and before dispatching any PEIMs.
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
---
MdeModulePkg/Core/Pei/Hob/Hob.c | 74 ++++++++++++++++++++++++++++++++++++++-
MdeModulePkg/Core/Pei/PeiMain.h | 17 +++++++++
MdeModulePkg/Core/Pei/PeiMain.inf | 3 +-
MdeModulePkg/Core/Pei/Ppi/Ppi.c | 19 +++++++++-
4 files changed, 110 insertions(+), 3 deletions(-)
diff --git a/MdeModulePkg/Core/Pei/Hob/Hob.c b/MdeModulePkg/Core/Pei/Hob/Hob.c
index e0ee8e7f1062..bb9f3f744e96 100644
--- a/MdeModulePkg/Core/Pei/Hob/Hob.c
+++ b/MdeModulePkg/Core/Pei/Hob/Hob.c
@@ -1,7 +1,7 @@
/** @file
This module provide Hand-Off Block manupulation.
-Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -125,6 +125,78 @@ PeiCreateHob (
}
/**
+ Install SEC HOB data to the HOB List.
+
+ @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+ @param SecHobList Pointer to SEC HOB List.
+
+ @return EFI_SUCCESS Success to install SEC HOB data.
+ @retval EFI_OUT_OF_RESOURCES If there is no more memory to grow the Hoblist.
+
+**/
+EFI_STATUS
+PeiInstallSecHobData (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_HOB_GENERIC_HEADER *SecHobList
+ )
+{
+ EFI_STATUS Status;
+ EFI_HOB_HANDOFF_INFO_TABLE *HandOffHob;
+ EFI_PEI_HOB_POINTERS HobStart;
+ EFI_PEI_HOB_POINTERS Hob;
+ UINTN SecHobListLength;
+ EFI_PHYSICAL_ADDRESS FreeMemory;
+ EFI_HOB_GENERIC_HEADER *HobEnd;
+
+ HandOffHob = NULL;
+ Status = PeiGetHobList (PeiServices, (VOID **) &HandOffHob);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ ASSERT (HandOffHob != NULL);
+
+ HobStart.Raw = (UINT8 *) SecHobList;
+ //
+ // The HobList must not contain a EFI_HOB_HANDOFF_INFO_TABLE HOB (PHIT) HOB.
+ //
+ ASSERT (HobStart.Header->HobType != EFI_HOB_TYPE_HANDOFF);
+ //
+ // Calculate the SEC HOB List length,
+ // not including the terminated HOB(EFI_HOB_TYPE_END_OF_HOB_LIST).
+ //
+ for (Hob.Raw = HobStart.Raw; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob));
+ SecHobListLength = (UINTN) Hob.Raw - (UINTN) HobStart.Raw;
+ //
+ // The length must be 8-bytes aligned.
+ //
+ ASSERT ((SecHobListLength & 0x7) == 0);
+
+ FreeMemory = HandOffHob->EfiFreeMemoryTop -
+ HandOffHob->EfiFreeMemoryBottom;
+
+ if (FreeMemory < SecHobListLength) {
+ DEBUG ((DEBUG_ERROR, "PeiInstallSecHobData fail: SecHobListLength - 0x%08x\n", SecHobListLength));
+ DEBUG ((DEBUG_ERROR, " FreeMemoryTop - 0x%08x\n", (UINTN)HandOffHob->EfiFreeMemoryTop));
+ DEBUG ((DEBUG_ERROR, " FreeMemoryBottom - 0x%08x\n", (UINTN)HandOffHob->EfiFreeMemoryBottom));
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ Hob.Raw = (UINT8 *) (UINTN) HandOffHob->EfiEndOfHobList;
+ CopyMem (Hob.Raw, HobStart.Raw, SecHobListLength);
+
+ HobEnd = (EFI_HOB_GENERIC_HEADER *) ((UINTN) Hob.Raw + SecHobListLength);
+ HandOffHob->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) HobEnd;
+
+ HobEnd->HobType = EFI_HOB_TYPE_END_OF_HOB_LIST;
+ HobEnd->HobLength = (UINT16) sizeof (EFI_HOB_GENERIC_HEADER);
+ HobEnd->Reserved = 0;
+ HobEnd++;
+ HandOffHob->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) HobEnd;
+
+ return EFI_SUCCESS;
+}
+
+/**
Builds a Handoff Information Table HOB
diff --git a/MdeModulePkg/Core/Pei/PeiMain.h b/MdeModulePkg/Core/Pei/PeiMain.h
index e95b1c3d8cd7..277f54a0c6ad 100644
--- a/MdeModulePkg/Core/Pei/PeiMain.h
+++ b/MdeModulePkg/Core/Pei/PeiMain.h
@@ -30,6 +30,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <Ppi/Security2.h>
#include <Ppi/TemporaryRamSupport.h>
#include <Ppi/TemporaryRamDone.h>
+#include <Ppi/SecHobData.h>
#include <Library/DebugLib.h>
#include <Library/PeiCoreEntryPoint.h>
#include <Library/BaseLib.h>
@@ -721,6 +722,22 @@ PeiCoreBuildHobHandoffInfoTable (
IN UINT64 MemoryLength
);
+/**
+ Install SEC HOB data to the HOB List.
+
+ @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+ @param SecHobList Pointer to SEC HOB List.
+
+ @return EFI_SUCCESS Success to install SEC HOB data.
+ @retval EFI_OUT_OF_RESOURCES If there is no more memory to grow the Hoblist.
+
+**/
+EFI_STATUS
+PeiInstallSecHobData (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_HOB_GENERIC_HEADER *SecHobList
+ );
+
//
// FFS Fw Volume support functions
diff --git a/MdeModulePkg/Core/Pei/PeiMain.inf b/MdeModulePkg/Core/Pei/PeiMain.inf
index 39a464f32633..21ce2be7784d 100644
--- a/MdeModulePkg/Core/Pei/PeiMain.inf
+++ b/MdeModulePkg/Core/Pei/PeiMain.inf
@@ -6,7 +6,7 @@
# 2) Dispatch PEIM from discovered FV.
# 3) Handoff control to DxeIpl to load DXE core and enter DXE phase.
#
-# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@@ -101,6 +101,7 @@ [Ppis]
gEfiTemporaryRamSupportPpiGuid ## SOMETIMES_CONSUMES
gEfiTemporaryRamDonePpiGuid ## SOMETIMES_CONSUMES
gEfiPeiReset2PpiGuid ## SOMETIMES_CONSUMES
+ gEfiSecHobDataPpiGuid ## SOMETIMES_CONSUMES
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxFvSupported ## CONSUMES
diff --git a/MdeModulePkg/Core/Pei/Ppi/Ppi.c b/MdeModulePkg/Core/Pei/Ppi/Ppi.c
index b2ab3fbd2086..36b8c235b235 100644
--- a/MdeModulePkg/Core/Pei/Ppi/Ppi.c
+++ b/MdeModulePkg/Core/Pei/Ppi/Ppi.c
@@ -726,7 +726,9 @@ ProcessPpiListFromSec (
IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList
)
{
- EFI_STATUS Status;
+ EFI_STATUS Status;
+ EFI_SEC_HOB_DATA_PPI *SecHobDataPpi;
+ EFI_HOB_GENERIC_HEADER *SecHobList;
for (;;) {
if ((PpiList->Flags & EFI_PEI_PPI_DESCRIPTOR_NOTIFY_TYPES) != 0) {
@@ -752,5 +754,20 @@ ProcessPpiListFromSec (
PpiList++;
}
+
+ //
+ // If the EFI_SEC_HOB_DATA_PPI is in the list of PPIs passed to the PEI entry point,
+ // the PEI Foundation will call the GetHobs() member function and install all HOBs
+ // returned into the HOB list. It does this after installing all PPIs passed from SEC
+ // into the PPI database and before dispatching any PEIMs.
+ //
+ Status = PeiLocatePpi (PeiServices, &gEfiSecHobDataPpiGuid, 0, NULL, (VOID **) &SecHobDataPpi);
+ if (!EFI_ERROR (Status)) {
+ Status = SecHobDataPpi->GetHobs (SecHobDataPpi, &SecHobList);
+ if (!EFI_ERROR (Status)) {
+ Status = PeiInstallSecHobData (PeiServices, SecHobList);
+ ASSERT_EFI_ERROR (Status);
+ }
+ }
}
--
2.7.0.windows.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] MdePkg: Add definition for SecHobData PPI
2017-08-02 10:37 ` [PATCH 1/2] MdePkg: Add definition for SecHobData PPI Star Zeng
@ 2017-08-03 15:17 ` Gao, Liming
0 siblings, 0 replies; 4+ messages in thread
From: Gao, Liming @ 2017-08-03 15:17 UTC (permalink / raw)
To: Zeng, Star, edk2-devel@lists.01.org
Reviewed-by: Liming Gao <liming.gao@intel.com> for this serials.
> -----Original Message-----
> From: Zeng, Star
> Sent: Wednesday, August 2, 2017 6:37 PM
> To: edk2-devel@lists.01.org
> Cc: Zeng, Star <star.zeng@intel.com>; Gao, Liming <liming.gao@intel.com>
> Subject: [PATCH 1/2] MdePkg: Add definition for SecHobData PPI
>
> This PPI is introduced in PI Version 1.5.
>
> Cc: Liming Gao <liming.gao@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Star Zeng <star.zeng@intel.com>
> ---
> MdePkg/Include/Ppi/SecHobData.h | 65 +++++++++++++++++++++++++++++++++++++++++
> MdePkg/MdePkg.dec | 7 +++++
> 2 files changed, 72 insertions(+)
> create mode 100644 MdePkg/Include/Ppi/SecHobData.h
>
> diff --git a/MdePkg/Include/Ppi/SecHobData.h b/MdePkg/Include/Ppi/SecHobData.h
> new file mode 100644
> index 000000000000..0efe1a2d0b77
> --- /dev/null
> +++ b/MdePkg/Include/Ppi/SecHobData.h
> @@ -0,0 +1,65 @@
> +/** @file
> + This file declares Sec Hob Data PPI.
> +
> + This PPI provides a way for the SEC code to pass zero or more HOBs in a HOB list.
> +
> +Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> +This program and the accompanying materials are licensed and made available under
> +the terms and conditions of the BSD License that accompanies this 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.
> +
> + @par Revision Reference:
> + This PPI is introduced in PI Version 1.5.
> +
> +**/
> +
> +#ifndef __SEC_HOB_DATA_PPI_H__
> +#define __SEC_HOB_DATA_PPI_H__
> +
> +#include <Pi/PiHob.h>
> +
> +#define EFI_SEC_HOB_DATA_PPI_GUID \
> + { \
> + 0x3ebdaf20, 0x6667, 0x40d8, {0xb4, 0xee, 0xf5, 0x99, 0x9a, 0xc1, 0xb7, 0x1f } \
> + }
> +
> +typedef struct _EFI_SEC_HOB_DATA_PPI EFI_SEC_HOB_DATA_PPI;
> +
> +/**
> + Return a pointer to a buffer containing zero or more HOBs that
> + will be installed into the PEI HOB List.
> +
> + This function returns a pointer to a pointer to zero or more HOBs,
> + terminated with a HOB of type EFI_HOB_TYPE_END_OF_HOB_LIST.
> + Note: The HobList must not contain a EFI_HOB_HANDOFF_INFO_TABLE HOB (PHIT) HOB.
> +
> + @param[in] This Pointer to this PPI structure.
> + @param[out] HobList A pointer to a returned pointer to zero or more HOBs.
> + If no HOBs are to be returned, then the returned pointer
> + is a pointer to a HOB of type EFI_HOB_TYPE_END_OF_HOB_LIST.
> +
> + @retval EFI_SUCCESS This function completed successfully.
> + @retval EFI_NOT_FOUND No HOBS are available.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SEC_HOB_DATA_GET) (
> + IN CONST EFI_SEC_HOB_DATA_PPI *This,
> + OUT EFI_HOB_GENERIC_HEADER **HobList
> +);
> +
> +///
> +/// This PPI provides a way for the SEC code to pass zero or more HOBs in a HOB list.
> +///
> +struct _EFI_SEC_HOB_DATA_PPI {
> + EFI_SEC_HOB_DATA_GET GetHobs;
> +};
> +
> +extern EFI_GUID gEfiSecHobDataPpiGuid;
> +
> +#endif
> diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
> index d6928b3f97bf..f54b056563b4 100644
> --- a/MdePkg/MdePkg.dec
> +++ b/MdePkg/MdePkg.dec
> @@ -909,6 +909,13 @@ [Ppis]
> ## Include/Ppi/SecPlatformInformation.h
> gEfiSecPlatformInformation2PpiGuid = { 0x9e9f374b, 0x8f16, 0x4230, {0x98, 0x24, 0x58, 0x46, 0xee, 0x76, 0x6a, 0x97 } }
>
> + #
> + # PPIs defined in PI 1.5.
> + #
> +
> + ## Include/Ppi/SecHobData.h
> + gEfiSecHobDataPpiGuid = { 0x3ebdaf20, 0x6667, 0x40d8, {0xb4, 0xee, 0xf5, 0x99, 0x9a, 0xc1, 0xb7, 0x1f } }
> +
> [Protocols]
> ## Include/Protocol/Pcd.h
> gPcdProtocolGuid = { 0x11B34006, 0xD85B, 0x4D0A, { 0xA2, 0x90, 0xD5, 0xA5, 0x71, 0x31, 0x0E, 0xF7 }}
> --
> 2.7.0.windows.1
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-08-03 15:14 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-02 10:37 [PATCH 0/2] Add SecHobData PPI support Star Zeng
2017-08-02 10:37 ` [PATCH 1/2] MdePkg: Add definition for SecHobData PPI Star Zeng
2017-08-03 15:17 ` Gao, Liming
2017-08-02 10:37 ` [PATCH 2/2] MdeModulePkg PeiCore: Install SEC HOB data Star Zeng
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox