PrmPkg: Add package and include headers
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3812 Adds a new package to maintain Platform Runtime Mechanism (PRM) support. This package is intended to include generic code that provides a common infrastructure to support PRM in firmware and a collection of sample PRM modules that demonstrate how to use the interfaces and other package resources to author a PRM module. The following initial headers are included in this commit: * Prm.h - Includes common content for PRM with no dependencies on other PRM header files. * PrmContextBuffer.h - Includes definitions for PRM context buffers. Context buffers are standardized structures that point to various resources available to a PRM handler during its execution. * PrmDataBuffer.h - Includes definitions for PRM data buffers. Within the context of PRM, these data buffers are composed of a generic header followed by a variable length blob of arbitrary data. * PrmExportDescriptor.h - Includes definitions for creating PRM export descriptors. A PRM export descriptor is a structure referenced in the export table of PRM module that contains PRM-specific metadata about the module. * PrmMmio.h - Includes definitions for describing MMIO ranges uses by PRM modules. * PrmModule.h - Includes definitions commonly used by PRM module authors. This file is provided to serve as a convenient include for PRM module authors. * PrmOsServices.h - Includes content specific to PRM OS services. OS Services will not planned to be present in the final version of PRM. The OS Services have been reduced to a simple debug print function. So this is currently planned to be a temporary file to support debugging during PRM development. Note: Modules built for the UEFI environment can be built by Visual Studio and non-Visual Studio toolchains. However, PRM modules are currently only supported on Visual Studio toolchain due to usage of export tables. 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:
committed by
mergify[bot]
parent
ad6816c319
commit
d2998af211
87
PrmPkg/Include/PrmExportDescriptor.h
Normal file
87
PrmPkg/Include/PrmExportDescriptor.h
Normal file
@@ -0,0 +1,87 @@
|
||||
/** @file
|
||||
|
||||
Definitions for the Platform Runtime Mechanism (PRM) export descriptor structures.
|
||||
|
||||
Copyright (c) Microsoft Corporation
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef PRM_EXPORT_DESCRIPTOR_H_
|
||||
#define PRM_EXPORT_DESCRIPTOR_H_
|
||||
|
||||
#include <Prm.h>
|
||||
|
||||
#define PRM_MODULE_EXPORT_DESCRIPTOR_NAME PrmModuleExportDescriptor
|
||||
#define PRM_MODULE_EXPORT_DESCRIPTOR_SIGNATURE SIGNATURE_64 ('P', 'R', 'M', '_', 'M', 'E', 'D', 'T')
|
||||
#define PRM_MODULE_EXPORT_REVISION 0x0
|
||||
|
||||
//
|
||||
// Platform Runtime Mechanism (PRM) Export Descriptor Structures
|
||||
//
|
||||
#pragma pack(push, 1)
|
||||
|
||||
typedef struct {
|
||||
GUID PrmHandlerGuid;
|
||||
CHAR8 PrmHandlerName[PRM_HANDLER_NAME_MAXIMUM_LENGTH];
|
||||
} PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT;
|
||||
|
||||
typedef struct {
|
||||
UINT64 Signature;
|
||||
UINT16 Revision;
|
||||
UINT16 NumberPrmHandlers;
|
||||
GUID ModuleGuid;
|
||||
PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT PrmHandlerExportDescriptors[3];
|
||||
} PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT;
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
/**
|
||||
A macro that declares a PRM Handler Export Descriptor for a PRM Handler.
|
||||
|
||||
This macro is intended to be used once per PRM Handler to describe the handler when the
|
||||
module description is defined. It should be provided as an argument to PRM_MODULE_EXPORT.
|
||||
|
||||
@param Guid The GUID of the PRM Handler being exported.
|
||||
|
||||
@param Name The name of the PRM Handler being exported. This string should exactly
|
||||
match the function name.
|
||||
|
||||
**/
|
||||
#define PRM_HANDLER_EXPORT_ENTRY(Guid, Name) \
|
||||
{ \
|
||||
Guid, \
|
||||
PRM_STRING_(Name) \
|
||||
} \
|
||||
|
||||
/**
|
||||
A macro that returns the count of the number of variable-length arguments given.
|
||||
|
||||
@param VariableArgumentList A variable argument list of elements that will be included
|
||||
in the return value of the list count.
|
||||
**/
|
||||
#define VA_ARG_COUNT(...) (sizeof((PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT[]){__VA_ARGS__})/sizeof(PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT))
|
||||
|
||||
/**
|
||||
A macro that declares the PRM Module Export Descriptor for a PRM Module.
|
||||
|
||||
This macro is intended to be used once in a PRM Module after all of the PRM Handler definitions
|
||||
to describe the PRM Handlers being exported in the module.
|
||||
|
||||
@param PrmHandlerExportEntries A variable argument list of PRM_HANDLER_EXPORT_ENTRY values.
|
||||
This list should include all PRM Handlers being exported by
|
||||
this module.
|
||||
|
||||
**/
|
||||
#define PRM_MODULE_EXPORT(...) \
|
||||
PRM_EXPORT_API PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT PRM_MODULE_EXPORT_DESCRIPTOR_NAME = { \
|
||||
{ \
|
||||
PRM_MODULE_EXPORT_DESCRIPTOR_SIGNATURE, \
|
||||
PRM_MODULE_EXPORT_REVISION, \
|
||||
VA_ARG_COUNT(__VA_ARGS__), \
|
||||
EFI_CALLER_ID_GUID \
|
||||
}, \
|
||||
{ __VA_ARGS__ } \
|
||||
} \
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user