diff options
author | Michael Kubacki <mikuback@microsoft.com> | 2020-06-29 15:54:01 -0700 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2022-04-05 00:42:38 +0000 |
commit | c040831cf95e05d2c5f2d87a5f435ed63cb7f7a3 (patch) | |
tree | 15082894016610eca39509ad2b1522a7ece24dfe /PrmPkg/PrmLoaderDxe | |
parent | 68ee42c99126dca11a116fa9c22c428374a0ac80 (diff) | |
download | edk2-c040831cf95e05d2c5f2d87a5f435ed63cb7f7a3.tar.gz edk2-c040831cf95e05d2c5f2d87a5f435ed63cb7f7a3.tar.bz2 edk2-c040831cf95e05d2c5f2d87a5f435ed63cb7f7a3.zip |
PrmPkg: Add PlatformGuid
Adds a "platform GUID" field to the PRM ACPI table. This field
is used by a platform to uniquely identify itself such that it
can be targeted by runtime PRM module updates for that platform.
Platforms using PRM are currently required to set a unique value
for gPrmPkgTokenSpaceGuid.PcdPrmPlatformGuid in their platform
DSC.
Cc: Andrew Fish <afish@apple.com>
Cc: Kang Gao <kang.gao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Michael Kubacki <michael.kubacki@microsoft.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Benjamin You <benjamin.you@intel.com>
Cc: Liu Yun <yun.y.liu@intel.com>
Cc: Ankit Sinha <ankit.sinha@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
Acked-by: Leif Lindholm <quic_llindhol@quicinc.com>
Reviewed-by: Ankit Sinha <ankit.sinha@intel.com>
Diffstat (limited to 'PrmPkg/PrmLoaderDxe')
-rw-r--r-- | PrmPkg/PrmLoaderDxe/PrmAcpiTable.h | 3 | ||||
-rw-r--r-- | PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c | 17 | ||||
-rw-r--r-- | PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf | 2 |
3 files changed, 22 insertions, 0 deletions
diff --git a/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h b/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h index ec3be529d1..6f9ba8f777 100644 --- a/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h +++ b/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h @@ -56,6 +56,9 @@ typedef struct { typedef struct {
EFI_ACPI_DESCRIPTION_HEADER Header; ///< Standard ACPI description header
+ GUID PrmPlatformGuid; ///< A GUID that uniquely identifies this platform.
+ ///< Used to check for compatibility in PRM module
+ ///< runtime updates.
UINT32 PrmModuleInfoOffset; ///< Offset in bytes from the beginning of this
///< structure to the PRM Module Info array
UINT32 PrmModuleInfoCount; ///< Number of entries in the PRM Module Info array
diff --git a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c index aa7aab391e..f78c682a65 100644 --- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c +++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c @@ -11,6 +11,7 @@ #include "PrmAcpiTable.h"
+#include <Guid/ZeroGuid.h>
#include <IndustryStandard/Acpi.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
@@ -52,6 +53,7 @@ ProcessPrmModules ( OUT PRM_ACPI_DESCRIPTION_TABLE **PrmAcpiDescriptionTable
)
{
+ EFI_GUID *PlatformGuid;
EFI_IMAGE_EXPORT_DIRECTORY *CurrentImageExportDirectory;
PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT *CurrentExportDescriptorStruct;
PRM_ACPI_DESCRIPTION_TABLE *PrmAcpiTable;
@@ -79,6 +81,20 @@ ProcessPrmModules ( }
*PrmAcpiDescriptionTable = NULL;
+ PlatformGuid = (EFI_GUID *) PcdGetPtr (PcdPrmPlatformGuid);
+ //
+ // The platform should set PcdPrmPlatformGuid to a non-zero value
+ //
+ if (CompareGuid (PlatformGuid, &gZeroGuid)) {
+ DEBUG ((
+ DEBUG_ERROR,
+ " %a %a: PcdPrmPlatformGuid must be set to a unique value in the platform DSC file.\n",
+ _DBGMSGID_,
+ __FUNCTION__
+ ));
+ ASSERT (!CompareGuid (PlatformGuid, &gZeroGuid));
+ }
+
DEBUG ((DEBUG_INFO, " %a %a: %d total PRM modules to process.\n", _DBGMSGID_, __FUNCTION__, mPrmModuleCount));
DEBUG ((DEBUG_INFO, " %a %a: %d total PRM handlers to process.\n", _DBGMSGID_, __FUNCTION__, mPrmHandlerCount));
@@ -102,6 +118,7 @@ ProcessPrmModules ( PrmAcpiTable->Header.OemRevision = PcdGet32 (PcdAcpiDefaultOemRevision);
PrmAcpiTable->Header.CreatorId = PcdGet32 (PcdAcpiDefaultCreatorId);
PrmAcpiTable->Header.CreatorRevision = PcdGet32 (PcdAcpiDefaultCreatorRevision);
+ CopyGuid (&PrmAcpiTable->PrmPlatformGuid, PlatformGuid);
PrmAcpiTable->PrmModuleInfoOffset = OFFSET_OF (PRM_ACPI_DESCRIPTION_TABLE, PrmModuleInfoStructure);
PrmAcpiTable->PrmModuleInfoCount = (UINT32) mPrmModuleCount;
diff --git a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf index 554d49685e..7efefdae96 100644 --- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf +++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf @@ -31,6 +31,7 @@ [Guids]
gEfiEndOfDxeEventGroupGuid
+ gZeroGuid
[LibraryClasses]
BaseLib
@@ -51,6 +52,7 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemRevision ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision ## CONSUMES
+ gPrmPkgTokenSpaceGuid.PcdPrmPlatformGuid ## CONSUMES
[Protocols]
gEfiAcpiTableProtocolGuid
|