]> git.proxmox.com Git - mirror_edk2.git/blame - PrmPkg/Include/PrmExportDescriptor.h
OvmfPkg: Implement MeasureHobList/MeasureFvImage
[mirror_edk2.git] / PrmPkg / Include / PrmExportDescriptor.h
CommitLineData
d2998af2
MK
1/** @file\r
2\r
3 Definitions for the Platform Runtime Mechanism (PRM) export descriptor structures.\r
4\r
5 Copyright (c) Microsoft Corporation\r
6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
7\r
8**/\r
9\r
10#ifndef PRM_EXPORT_DESCRIPTOR_H_\r
11#define PRM_EXPORT_DESCRIPTOR_H_\r
12\r
13#include <Prm.h>\r
14\r
a298a844
MK
15#define PRM_MODULE_EXPORT_DESCRIPTOR_NAME PrmModuleExportDescriptor\r
16#define PRM_MODULE_EXPORT_DESCRIPTOR_SIGNATURE SIGNATURE_64 ('P', 'R', 'M', '_', 'M', 'E', 'D', 'T')\r
17#define PRM_MODULE_EXPORT_REVISION 0x0\r
d2998af2
MK
18\r
19//\r
20// Platform Runtime Mechanism (PRM) Export Descriptor Structures\r
21//\r
22#pragma pack(push, 1)\r
23\r
24typedef struct {\r
a298a844
MK
25 GUID PrmHandlerGuid;\r
26 CHAR8 PrmHandlerName[PRM_HANDLER_NAME_MAXIMUM_LENGTH];\r
d2998af2
MK
27} PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT;\r
28\r
29typedef struct {\r
a298a844
MK
30 UINT64 Signature;\r
31 UINT16 Revision;\r
32 UINT16 NumberPrmHandlers;\r
33 GUID PlatformGuid;\r
34 GUID ModuleGuid;\r
a6f8946b
MK
35} PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_HEADER;\r
36\r
37typedef struct {\r
a298a844
MK
38 PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_HEADER Header;\r
39 PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT PrmHandlerExportDescriptors[1];\r
d2998af2
MK
40} PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT;\r
41\r
42#pragma pack(pop)\r
43\r
a298a844
MK
44#if defined (_MSC_VER)\r
45#define PRM_PACKED_STRUCT(definition) \\r
a6f8946b
MK
46 __pragma(pack(push, 1)) typedef struct definition __pragma(pack(pop))\r
47#elif defined (__GNUC__) || defined (__clang__)\r
a298a844 48#define PRM_PACKED_STRUCT(definition) \\r
a6f8946b
MK
49 typedef struct __attribute__((packed)) definition\r
50#endif\r
51\r
d2998af2
MK
52/**\r
53 A macro that declares a PRM Handler Export Descriptor for a PRM Handler.\r
54\r
55 This macro is intended to be used once per PRM Handler to describe the handler when the\r
56 module description is defined. It should be provided as an argument to PRM_MODULE_EXPORT.\r
57\r
58 @param Guid The GUID of the PRM Handler being exported.\r
59\r
60 @param Name The name of the PRM Handler being exported. This string should exactly\r
61 match the function name.\r
62\r
63**/\r
64#define PRM_HANDLER_EXPORT_ENTRY(Guid, Name) \\r
65 { \\r
66 Guid, \\r
67 PRM_STRING_(Name) \\r
68 } \\r
69\r
a298a844 70\r
d2998af2
MK
71/**\r
72 A macro that returns the count of the number of variable-length arguments given.\r
73\r
74 @param VariableArgumentList A variable argument list of elements that will be included\r
75 in the return value of the list count.\r
76**/\r
77#define VA_ARG_COUNT(...) (sizeof((PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT[]){__VA_ARGS__})/sizeof(PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT))\r
78\r
79/**\r
80 A macro that declares the PRM Module Export Descriptor for a PRM Module.\r
81\r
82 This macro is intended to be used once in a PRM Module after all of the PRM Handler definitions\r
83 to describe the PRM Handlers being exported in the module.\r
84\r
85 @param PrmHandlerExportEntries A variable argument list of PRM_HANDLER_EXPORT_ENTRY values.\r
86 This list should include all PRM Handlers being exported by\r
87 this module.\r
88\r
89**/\r
a6f8946b
MK
90#define PRM_MODULE_EXPORT(...) \\r
91 PRM_PACKED_STRUCT( \\r
92 { \\r
93 PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_HEADER Header; \\r
94 PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT PrmHandlerExportDescriptors[VA_ARG_COUNT(__VA_ARGS__)]; \\r
95 } PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_ \\r
96 ); \\r
97 \\r
98 PRM_EXPORT_API PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_ PRM_MODULE_EXPORT_DESCRIPTOR_NAME = { \\r
d2998af2
MK
99 { \\r
100 PRM_MODULE_EXPORT_DESCRIPTOR_SIGNATURE, \\r
101 PRM_MODULE_EXPORT_REVISION, \\r
102 VA_ARG_COUNT(__VA_ARGS__), \\r
4a4aeaa4 103 EDKII_DSC_PLATFORM_GUID, \\r
d2998af2
MK
104 EFI_CALLER_ID_GUID \\r
105 }, \\r
106 { __VA_ARGS__ } \\r
107 } \\r
108\r
109#endif\r