diff options
author | Michael Kubacki <michael.kubacki@microsoft.com> | 2020-04-07 11:00:28 -0700 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2022-04-05 00:42:38 +0000 |
commit | d2998af2117119d3db4a41f7907d0e6f22548cc2 (patch) | |
tree | afb7ab704a4096eb022415b9b1628ed55c0eb75c /PrmPkg/Include/PrmExportDescriptor.h | |
parent | ad6816c319cdbd927d81e071996a0dea33c86e4a (diff) | |
download | edk2-d2998af2117119d3db4a41f7907d0e6f22548cc2.tar.gz edk2-d2998af2117119d3db4a41f7907d0e6f22548cc2.tar.bz2 edk2-d2998af2117119d3db4a41f7907d0e6f22548cc2.zip |
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>
Diffstat (limited to 'PrmPkg/Include/PrmExportDescriptor.h')
-rw-r--r-- | PrmPkg/Include/PrmExportDescriptor.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/PrmPkg/Include/PrmExportDescriptor.h b/PrmPkg/Include/PrmExportDescriptor.h new file mode 100644 index 0000000000..95198cef65 --- /dev/null +++ b/PrmPkg/Include/PrmExportDescriptor.h @@ -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
|