mirror of https://github.com/acidanthera/audk.git
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>
This commit is contained in:
parent
68ee42c991
commit
c040831cf9
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -65,3 +65,13 @@
|
|||
# report PRM handler execution time in the application. If such a TimerLib
|
||||
# instance is not available, set this PCD to FALSE in the package DSC file.
|
||||
gPrmPkgTokenSpaceGuid.PcdPrmInfoPrintHandlerExecutionTime|TRUE|BOOLEAN|0x00000003
|
||||
|
||||
## PRM Platform GUID
|
||||
#
|
||||
# Uniquely identifies a specific platform targeted for PRM module updates. Each
|
||||
# platform MUST provide a new GUID. This GUID is checked against the platform
|
||||
# GUID in the PRM module export descriptor during PRM runtime updates to determine
|
||||
# if a given PRM module update is valid for a given system. Even if PRM runtime
|
||||
# updates are not planned for a given platform, this value should still be given
|
||||
# a unique value in the platform DSC.
|
||||
gPrmPkgTokenSpaceGuid.PcdPrmPlatformGuid|{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}|VOID*|0x00000004
|
||||
|
|
|
@ -74,6 +74,18 @@ The following list are the currently defined build flags (if any) that may be pa
|
|||
This structure is passed as the context buffer to PRM handlers. The structure actually passed to PRM handlers is
|
||||
allocated and populated by the OS where it gets all the information to populate the context buffer from other structures.
|
||||
|
||||
### PRM Platform GUID
|
||||
**IMPORTANT**
|
||||
|
||||
A configuration item that requires user attention is the PRM platform GUID. Each platform that uses PRM must be
|
||||
uniquely identifiable so that various instances of a PRM module can target the correct platform in PRM module updates.
|
||||
|
||||
To apply a unique platform GUID set the following PCD to a unique value in your platform DSC file.
|
||||
``gPrmPkgTokenSpaceGuid.PcdPrmPlatformGuid``
|
||||
|
||||
The default value assigned in [PrmPkg.dec](PrmPkg/PrmPkg.dec) is zero. By design, this is an invalid value that will
|
||||
cause an ASSERT if it is not updated.
|
||||
|
||||
## Overview
|
||||
At a high-level, PRM can be viewed from three levels of granularity:
|
||||
|
||||
|
|
Loading…
Reference in New Issue