pdr: Add decode_numeric_effecter_pdr_data()
Add `decode_numeric_effecter_pdr_data` API to decode the numeric
effecter PDR data in DSP0248_1.2.2 table 87. The API will be used to
retrieve the data fields of numeric effecter from the PDRs in `pldmd`.
Signed-off-by: Thu Nguyen <thu@os.amperecomputing.com>
Change-Id: I323a1288cb0262bd39f4f28701ddc7dbb70c33c8
diff --git a/src/msgbuf/platform.h b/src/msgbuf/platform.h
index 7ca36c9..c52a66d 100644
--- a/src/msgbuf/platform.h
+++ b/src/msgbuf/platform.h
@@ -143,6 +143,44 @@
return -PLDM_ERROR_INVALID_DATA;
}
+#define pldm_msgbuf_extract_effecter_data(ctx, tag, dst) \
+ pldm_msgbuf_extract_typecheck(union_effecter_data_size, \
+ pldm__msgbuf_extract_range_field_format, \
+ dst, ctx, tag, (void *)&(dst))
+__attribute__((always_inline)) static inline int
+pldm__msgbuf_extract_effecter_data(struct pldm_msgbuf *ctx,
+ enum pldm_effecter_data_size tag, void *ed)
+{
+ switch (tag) {
+ case PLDM_EFFECTER_DATA_SIZE_UINT8:
+ return pldm__msgbuf_extract_uint8(
+ ctx, ((char *)ed) + offsetof(union_effecter_data_size,
+ value_u8));
+ case PLDM_EFFECTER_DATA_SIZE_SINT8:
+ return pldm__msgbuf_extract_int8(
+ ctx, ((char *)ed) + offsetof(union_effecter_data_size,
+ value_s8));
+ case PLDM_EFFECTER_DATA_SIZE_UINT16:
+ return pldm__msgbuf_extract_uint16(
+ ctx, ((char *)ed) + offsetof(union_effecter_data_size,
+ value_u16));
+ case PLDM_EFFECTER_DATA_SIZE_SINT16:
+ return pldm__msgbuf_extract_int16(
+ ctx, ((char *)ed) + offsetof(union_effecter_data_size,
+ value_s16));
+ case PLDM_EFFECTER_DATA_SIZE_UINT32:
+ return pldm__msgbuf_extract_uint32(
+ ctx, ((char *)ed) + offsetof(union_effecter_data_size,
+ value_u32));
+ case PLDM_EFFECTER_DATA_SIZE_SINT32:
+ return pldm__msgbuf_extract_int32(
+ ctx, ((char *)ed) + offsetof(union_effecter_data_size,
+ value_s32));
+ }
+
+ return -PLDM_ERROR_INVALID_DATA;
+}
+
#ifdef __cplusplus
#include <type_traits>