summaryrefslogtreecommitdiffstats
path: root/PrmPkg/PrmLoaderDxe
diff options
context:
space:
mode:
authorMichael Kubacki <mikuback@microsoft.com>2020-06-29 15:54:01 -0700
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2022-04-05 00:42:38 +0000
commitc040831cf95e05d2c5f2d87a5f435ed63cb7f7a3 (patch)
tree15082894016610eca39509ad2b1522a7ece24dfe /PrmPkg/PrmLoaderDxe
parent68ee42c99126dca11a116fa9c22c428374a0ac80 (diff)
downloadedk2-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.h3
-rw-r--r--PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c17
-rw-r--r--PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf2
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