PrmPkg: Enable variable growth for the PRM_MODULE_EXPORT macro
The PRM_MODULE_EXPORT parameterized macro allows a caller to produce a static PRM module export descriptor structure in the binary by simply passing PRM_HANDLER_EXPORT_ENTRY arguments with each argument representing a PRM handler to be exported by the module. Previously, the PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT used in the PRM_MODULE_EXPORT macro was fixed to a maximum of three handlers. This change removes that restriction and allows the structure to grow based on the number of PRM handlers given to the macro. This means a local type will be customized per PRM module. The reference type PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT keeps a field at the end that allows array access to PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT members. 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
e846797662
commit
a6f8946bc9
@@ -31,11 +31,23 @@ typedef struct {
|
||||
UINT16 Revision;
|
||||
UINT16 NumberPrmHandlers;
|
||||
GUID ModuleGuid;
|
||||
PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT PrmHandlerExportDescriptors[3];
|
||||
} 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.
|
||||
|
||||
@@ -73,8 +85,15 @@ typedef struct {
|
||||
this module.
|
||||
|
||||
**/
|
||||
#define PRM_MODULE_EXPORT(...) \
|
||||
PRM_EXPORT_API PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT PRM_MODULE_EXPORT_DESCRIPTOR_NAME = { \
|
||||
#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, \
|
||||
|
Reference in New Issue
Block a user