]>
Commit | Line | Data |
---|---|---|
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 | |
24 | typedef 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 | |
29 | typedef 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 | |
37 | typedef 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 |