123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /** @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 PlatformGuid;
- GUID ModuleGuid;
- } PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_HEADER;
- typedef struct {
- PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_HEADER Header;
- PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT PrmHandlerExportDescriptors[1];
- } PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT;
- #pragma pack(pop)
- #if defined(_MSC_VER)
- #define PRM_PACKED_STRUCT(definition) \
- __pragma(pack(push, 1)) typedef struct definition __pragma(pack(pop))
- #elif defined (__GNUC__) || defined (__clang__)
- #define PRM_PACKED_STRUCT(definition) \
- typedef struct __attribute__((packed)) definition
- #endif
- /**
- 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_PACKED_STRUCT( \
- { \
- PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_HEADER Header; \
- PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT PrmHandlerExportDescriptors[VA_ARG_COUNT(__VA_ARGS__)]; \
- } PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_ \
- ); \
- \
- 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__), \
- EDKII_DSC_PLATFORM_GUID, \
- EFI_CALLER_ID_GUID \
- }, \
- { __VA_ARGS__ } \
- } \
- #endif
|