diff --git a/include/libpldm/base.h b/include/libpldm/base.h
index bb160b3..c3d1ac9 100644
--- a/include/libpldm/base.h
+++ b/include/libpldm/base.h
@@ -87,25 +87,25 @@
 	PLDM_ASYNC_REQUEST_NOTIFY, //!< Unacknowledged PLDM request messages
 } MessageType;
 
-#define PLDM_INSTANCE_MAX 31
-#define PLDM_MAX_TYPES 64
+#define PLDM_INSTANCE_MAX      31
+#define PLDM_MAX_TYPES	       64
 #define PLDM_MAX_CMDS_PER_TYPE 256
-#define PLDM_MAX_TIDS 256
+#define PLDM_MAX_TIDS	       256
 
 /* Message payload lengths */
 #define PLDM_GET_COMMANDS_REQ_BYTES 5
-#define PLDM_GET_VERSION_REQ_BYTES 6
+#define PLDM_GET_VERSION_REQ_BYTES  6
 
 /* Response lengths are inclusive of completion code */
-#define PLDM_GET_TYPES_RESP_BYTES 9
-#define PLDM_GET_TID_RESP_BYTES 2
-#define PLDM_SET_TID_RESP_BYTES 1
+#define PLDM_GET_TYPES_RESP_BYTES    9
+#define PLDM_GET_TID_RESP_BYTES	     2
+#define PLDM_SET_TID_RESP_BYTES	     1
 #define PLDM_GET_COMMANDS_RESP_BYTES 33
 /* Response data has only one version and does not contain the checksum */
-#define PLDM_GET_VERSION_RESP_BYTES 10
+#define PLDM_GET_VERSION_RESP_BYTES	 10
 #define PLDM_MULTIPART_RECEIVE_REQ_BYTES 18
 
-#define PLDM_VERSION_0 0
+#define PLDM_VERSION_0	     0
 #define PLDM_CURRENT_VERSION PLDM_VERSION_0
 
 #define PLDM_TIMESTAMP104_SIZE 13
@@ -200,11 +200,9 @@
  *  Structure representing PLDM get version request.
  */
 struct pldm_get_version_req {
-	uint32_t
-	    transfer_handle; //!< handle to identify PLDM version data transfer
+	uint32_t transfer_handle; //!< handle to identify PLDM version data transfer
 	uint8_t transfer_opflag; //!< PLDM GetVersion operation flag
-	uint8_t type; //!< PLDM Type for which version information is being
-		      //!< requested
+	uint8_t type; //!< PLDM Type for which version information is being requested
 } __attribute__((packed));
 
 /** @struct pldm_get_version_resp
@@ -541,10 +539,13 @@
  *  @param[out] section_length - The length of the requested section
  *  @return pldm_completion_codes
  */
-int decode_multipart_receive_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *pldm_type,
-    uint8_t *transfer_opflag, uint32_t *transfer_ctx, uint32_t *transfer_handle,
-    uint32_t *section_offset, uint32_t *section_length);
+int decode_multipart_receive_req(const struct pldm_msg *msg,
+				 size_t payload_length, uint8_t *pldm_type,
+				 uint8_t *transfer_opflag,
+				 uint32_t *transfer_ctx,
+				 uint32_t *transfer_handle,
+				 uint32_t *section_offset,
+				 uint32_t *section_length);
 
 /** @brief Create a PLDM response message containing only cc
  *
diff --git a/include/libpldm/bios.h b/include/libpldm/bios.h
index c8f480a..8b0f7d9 100644
--- a/include/libpldm/bios.h
+++ b/include/libpldm/bios.h
@@ -11,13 +11,13 @@
 /* Response lengths are inclusive of completion code */
 #define PLDM_GET_DATE_TIME_RESP_BYTES 8
 
-#define PLDM_GET_BIOS_TABLE_REQ_BYTES 6
-#define PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES 6
-#define PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES 6
-#define PLDM_SET_BIOS_TABLE_RESP_BYTES 5
-#define PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES 5
-#define PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES 5
-#define PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_REQ_BYTES 7
+#define PLDM_GET_BIOS_TABLE_REQ_BYTES			     6
+#define PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES		     6
+#define PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES		     6
+#define PLDM_SET_BIOS_TABLE_RESP_BYTES			     5
+#define PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES	     5
+#define PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES		     5
+#define PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_REQ_BYTES	     7
 #define PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_MIN_RESP_BYTES 6
 
 enum pldm_bios_completion_codes {
@@ -256,9 +256,9 @@
  *         'msg.payload'
  */
 int encode_set_bios_attribute_current_value_req(
-    uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_flag,
-    const uint8_t *attribute_data, size_t attribute_length,
-    struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_flag,
+	const uint8_t *attribute_data, size_t attribute_length,
+	struct pldm_msg *msg, size_t payload_length);
 
 /** @brief Decode a SetBiosAttributeCurrentValue response message
  *
@@ -276,8 +276,8 @@
  *  @return pldm_completion_codes
  */
 int decode_set_bios_attribute_current_value_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_transfer_handle);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_transfer_handle);
 
 /* SetBIOSTable */
 
@@ -427,8 +427,8 @@
  *  @return pldm_completion_codes
  */
 int encode_get_bios_attribute_current_value_by_handle_req(
-    uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_op_flag,
-    uint16_t attribute_handle, struct pldm_msg *msg);
+	uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_op_flag,
+	uint16_t attribute_handle, struct pldm_msg *msg);
 
 /** @brief Decode GetBIOSAttributeCurrentValueByHandle response packet
  *
@@ -443,9 +443,9 @@
  *  @return pldm_completion_codes
  */
 int decode_get_bios_attribute_current_value_by_handle_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_transfer_handle, uint8_t *transfer_flag,
-    struct variable_field *attribute_data);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_transfer_handle,
+	uint8_t *transfer_flag, struct variable_field *attribute_data);
 
 /** @brief Decode GetBIOSAttributeCurrentValueByHandle request packet
  *
@@ -458,9 +458,9 @@
  *  @return pldm_completion_codes
  */
 int decode_get_bios_attribute_current_value_by_handle_req(
-    const struct pldm_msg *msg, size_t payload_length,
-    uint32_t *transfer_handle, uint8_t *transfer_op_flag,
-    uint16_t *attribute_handle);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint32_t *transfer_handle, uint8_t *transfer_op_flag,
+	uint16_t *attribute_handle);
 
 /** @brief Create a PLDM response message for
  * GetBIOSAttributeCurrentValueByHandle
@@ -476,10 +476,13 @@
  *  @param[out] msg - Message will be written to this
  *  @return pldm_completion_codes
  */
-int encode_get_bios_current_value_by_handle_resp(
-    uint8_t instance_id, uint8_t completion_code, uint32_t next_transfer_handle,
-    uint8_t transfer_flag, const uint8_t *attribute_data,
-    size_t attribute_length, struct pldm_msg *msg);
+int encode_get_bios_current_value_by_handle_resp(uint8_t instance_id,
+						 uint8_t completion_code,
+						 uint32_t next_transfer_handle,
+						 uint8_t transfer_flag,
+						 const uint8_t *attribute_data,
+						 size_t attribute_length,
+						 struct pldm_msg *msg);
 
 /* SetBiosAttributeCurrentValue */
 
@@ -496,9 +499,9 @@
  *  @return pldm_completion_codes
  */
 int decode_set_bios_attribute_current_value_req(
-    const struct pldm_msg *msg, size_t payload_length,
-    uint32_t *transfer_handle, uint8_t *transfer_flag,
-    struct variable_field *attribute);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint32_t *transfer_handle, uint8_t *transfer_flag,
+	struct variable_field *attribute);
 
 /** @brief Create a PLDM response message for SetBiosAttributeCurrentValue
  *
diff --git a/include/libpldm/bios_table.h b/include/libpldm/bios_table.h
index 5a07e7b..76f41d1 100644
--- a/include/libpldm/bios_table.h
+++ b/include/libpldm/bios_table.h
@@ -57,7 +57,7 @@
 pldm_bios_table_iter_attr_entry_value(struct pldm_bios_table_iter *iter)
 {
 	return (const struct pldm_bios_attr_table_entry *)
-	    pldm_bios_table_iter_value(iter);
+		pldm_bios_table_iter_value(iter);
 }
 
 /** @brief Get the bios string table entry that the iterator ponit to
@@ -68,7 +68,7 @@
 pldm_bios_table_iter_string_entry_value(struct pldm_bios_table_iter *iter)
 {
 	return (const struct pldm_bios_string_table_entry *)
-	    pldm_bios_table_iter_value(iter);
+		pldm_bios_table_iter_value(iter);
 }
 
 /** @brief Get the bios attribute value table entry that the iterator ponit to
@@ -79,7 +79,7 @@
 pldm_bios_table_iter_attr_value_entry_value(struct pldm_bios_table_iter *iter)
 {
 	return (const struct pldm_bios_attr_val_table_entry *)
-	    pldm_bios_table_iter_value(iter);
+		pldm_bios_table_iter_value(iter);
 }
 
 /** @brief Get the length of an entry in the BIOS String Table
@@ -114,14 +114,14 @@
  *  @return Handle to identify a string in the bios string table
  */
 uint16_t pldm_bios_table_string_entry_decode_handle(
-    const struct pldm_bios_string_table_entry *entry);
+	const struct pldm_bios_string_table_entry *entry);
 
 /** @brief Get the string length for the entry
  *  @param[in] entry - Pointer to a bios string table entry
  *  @return Length of string in bytes
  */
 uint16_t pldm_bios_table_string_entry_decode_string_length(
-    const struct pldm_bios_string_table_entry *entry);
+	const struct pldm_bios_string_table_entry *entry);
 
 /** @brief Get the string(at most one less than *size* characters) from the
  * entry
@@ -131,8 +131,8 @@
  *  @return Length of the string decoded
  */
 uint16_t pldm_bios_table_string_entry_decode_string(
-    const struct pldm_bios_string_table_entry *entry, char *buffer,
-    size_t size);
+	const struct pldm_bios_string_table_entry *entry, char *buffer,
+	size_t size);
 
 /** @brief Get the string from the entry and check the validity of the
  * parameters
@@ -142,8 +142,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_string_entry_decode_string_check(
-    const struct pldm_bios_string_table_entry *entry, char *buffer,
-    size_t size);
+	const struct pldm_bios_string_table_entry *entry, char *buffer,
+	size_t size);
 
 /** @brief Find an entry in bios string table by string
  *  @param[in] table - The BIOS String Table
@@ -169,14 +169,14 @@
  *  @return handle to identify the attribute in the attribute table
  */
 uint16_t pldm_bios_table_attr_entry_decode_attribute_handle(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the attribute type of the attribute table entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return Type of the attribute table entry
  */
 uint8_t pldm_bios_table_attr_entry_decode_attribute_type(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the attribute name handle from the attribute table entry
  *  @param[in] entry - Pointer to bios attribute table entry
@@ -184,7 +184,7 @@
  *          to a string in the bios string table.
  */
 uint16_t pldm_bios_table_attr_entry_decode_string_handle(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Find an entry in attribute table by handle
  *  @param[in] table - The BIOS Attribute Table
@@ -236,8 +236,8 @@
  * pldm_bios_table_attr_entry_enum_info
  */
 void pldm_bios_table_attr_entry_enum_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_enum_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_enum_info *info);
 
 /** @brief Create an entry of BIOS Attribute Table (type: enum) and check the
  * validity of the parameters
@@ -248,15 +248,15 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_enum_encode_check(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_enum_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_enum_info *info);
 
 /** @brief Get the total number of possible values for the entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return total number of possible values
  */
 uint8_t pldm_bios_table_attr_entry_enum_decode_pv_num(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the total number of possible values for the entry and check the
  * validity of the parameters
@@ -265,14 +265,14 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_enum_decode_pv_num_check(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *pv_num);
+	const struct pldm_bios_attr_table_entry *entry, uint8_t *pv_num);
 
 /** @brief Get the total number of default values for the entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return total number of default values
  */
 uint8_t pldm_bios_table_attr_entry_enum_decode_def_num(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the total number of default values for the entry and check the
  * validity of the parameters
@@ -281,7 +281,7 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_enum_decode_def_num_check(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *def_num);
+	const struct pldm_bios_attr_table_entry *entry, uint8_t *def_num);
 
 /** @brief Get possible values string handles
  *  @param[in] entry - Pointer to bios attribute table entry
@@ -291,8 +291,8 @@
  *  @return pldm_completion_codes
  */
 uint8_t pldm_bios_table_attr_entry_enum_decode_pv_hdls(
-    const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
-    uint8_t pv_num);
+	const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
+	uint8_t pv_num);
 
 /** @brief Get possible values string handles and check the validity of the
  * parameters
@@ -304,8 +304,8 @@
  *  @return Number of PossibleValuesStringHandles decoded
  */
 int pldm_bios_table_attr_entry_enum_decode_pv_hdls_check(
-    const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
-    uint8_t pv_num);
+	const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
+	uint8_t pv_num);
 
 /** @brief Get Indices of default values
  *  @param[in] entry - Pointer to bios attribute table entry
@@ -316,8 +316,8 @@
  *  @return Number of default values decoded
  */
 uint8_t pldm_bios_table_attr_entry_enum_decode_def_indices(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *def_indices,
-    uint8_t def_num);
+	const struct pldm_bios_attr_table_entry *entry, uint8_t *def_indices,
+	uint8_t def_num);
 
 /** @struct pldm_bios_table_attr_entry_string_info
  *
@@ -342,8 +342,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_string_info_check(
-    const struct pldm_bios_table_attr_entry_string_info *info,
-    const char **errmsg);
+	const struct pldm_bios_table_attr_entry_string_info *info,
+	const char **errmsg);
 
 /** @brief Get length that an attribute entry(type: string) will take
  *  @param[in] def_str_len - Length of default string
@@ -358,8 +358,8 @@
  * pldm_bios_table_attr_entry_string_info
  */
 void pldm_bios_table_attr_entry_string_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_string_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_string_info *info);
 
 /** @brief Create an entry of BIOS Attribute Table (type: string) and check the
  * validity of the parameters
@@ -370,15 +370,15 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_string_encode_check(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_string_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_string_info *info);
 
 /** @brief Get the length of default string in bytes for the entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return length of default string in bytes
  */
 uint16_t pldm_bios_table_attr_entry_string_decode_def_string_length(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the length of default string in bytes for the entry and check the
  * validity of the parameters
@@ -387,15 +387,15 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_string_decode_def_string_length_check(
-    const struct pldm_bios_attr_table_entry *entry,
-    uint16_t *def_string_length);
+	const struct pldm_bios_attr_table_entry *entry,
+	uint16_t *def_string_length);
 
 /** @brief Get the type of string of bios attribute table entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return Type of the string
  */
 uint8_t pldm_bios_table_attr_entry_string_decode_string_type(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get maximum length of the string from a bios attribute table entry in
  * bytes
@@ -403,7 +403,7 @@
  *  @return Maximum length of the string
  */
 uint16_t pldm_bios_table_attr_entry_string_decode_max_length(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get minimum length of the string from a bios attribute table entry in
  * bytes
@@ -411,7 +411,7 @@
  *  @return Minimum length of the string
  */
 uint16_t pldm_bios_table_attr_entry_string_decode_min_length(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the default string from a bios attribute table entry
  *  @param[out] buffer - Pointer to a buffer to store the string
@@ -419,7 +419,8 @@
  *  @return Length of the string decoded
  */
 uint16_t pldm_bios_table_attr_entry_string_decode_def_string(
-    const struct pldm_bios_attr_table_entry *entry, char *buffer, size_t size);
+	const struct pldm_bios_attr_table_entry *entry, char *buffer,
+	size_t size);
 
 /** @struct pldm_bios_table_attr_entry_integer_info
  *
@@ -444,8 +445,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_integer_info_check(
-    const struct pldm_bios_table_attr_entry_integer_info *info,
-    const char **errmsg);
+	const struct pldm_bios_table_attr_entry_integer_info *info,
+	const char **errmsg);
 
 /** @brief Get length that an attribute entry(type: integer) will take
  *  @return The length that an entry(type: integer) will take
@@ -459,8 +460,8 @@
  * pldm_bios_table_attr_entry_integer_info
  */
 void pldm_bios_table_attr_entry_integer_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_integer_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_integer_info *info);
 
 /** @brief Create an entry of BIOS Attribute Table (type: integer) and check the
  * validity of the parameters
@@ -471,8 +472,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_integer_encode_check(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_integer_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_integer_info *info);
 
 /** @brief Decode the specific fields(integer) of attribute table entry
  *  @param[in] entry - Pointer to an entry of attribute table
@@ -483,22 +484,22 @@
  *  @param[out] def - The default value of the integer
  */
 void pldm_bios_table_attr_entry_integer_decode(
-    const struct pldm_bios_attr_table_entry *entry, uint64_t *lower,
-    uint64_t *upper, uint32_t *scalar, uint64_t *def);
+	const struct pldm_bios_attr_table_entry *entry, uint64_t *lower,
+	uint64_t *upper, uint32_t *scalar, uint64_t *def);
 
 /** @brief Get the attribute handle from the attribute value table entry
  *  @param[in] entry - Pointer to bios attribute value table entry
  *  @return handle to identify the attribute in the attribute value table
  */
 uint16_t pldm_bios_table_attr_value_entry_decode_attribute_handle(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get the attribute type from the attribute value table entry
  *  @param[in] entry - Pointer to bios attribute value table entry
  *  @return Type of the attribute value entry
  */
 uint8_t pldm_bios_table_attr_value_entry_decode_attribute_type(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get length that an attribute value entry(type: enum) will take
  *  @param[in] count - Total number of current values for this enumeration
@@ -518,15 +519,15 @@
  * Attribute Table) of the possible values of string handles for this attribute.
  */
 void pldm_bios_table_attr_value_entry_encode_enum(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint8_t count, const uint8_t *handles);
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint8_t count, const uint8_t *handles);
 
 /** @brief Get number of current values for the enum entry
  *  @param[in] entry - Pointer to bios attribute value table entry
  *  @return Total number of current values for this enumeration
  */
 uint8_t pldm_bios_table_attr_value_entry_enum_decode_number(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get CurrentValueStringHandleIndex
  *  @param[in] entry - Pointer to bios attribute value table entry
@@ -536,8 +537,8 @@
  *  @return Number of CurrentValueStringHandleIndex decoded.
  */
 uint8_t pldm_bios_table_attr_value_entry_enum_decode_handles(
-    const struct pldm_bios_attr_val_table_entry *entry, uint8_t *handles,
-    uint8_t number);
+	const struct pldm_bios_attr_val_table_entry *entry, uint8_t *handles,
+	uint8_t number);
 
 /** @brief Create an attribute value entry(type: enum) and check the validity of
  * the parameters
@@ -553,8 +554,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_value_entry_encode_enum_check(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint8_t count, uint8_t *handles);
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint8_t count, uint8_t *handles);
 
 /** @brief Get length that an attribute value entry(type: string) will take
  *  @param[in] string_length - Length of the current string in byte, 0 indicates
@@ -576,15 +577,15 @@
  *  @param[in] string - The current string itsel
  */
 void pldm_bios_table_attr_value_entry_encode_string(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint16_t str_length, const char *string);
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint16_t str_length, const char *string);
 
 /** @brief Get length of the current string in bytes
  *  @param [in] entry - Pointer to bios attribute value table entry
  *  @return The length of the current string in bytes
  */
 uint16_t pldm_bios_table_attr_value_entry_string_decode_length(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get Current String Itself
  *  @param[in] entry - Pointer to bios attribute value table entry
@@ -594,8 +595,8 @@
  *                                    when \p current_string is used.
  */
 void pldm_bios_table_attr_value_entry_string_decode_string(
-    const struct pldm_bios_attr_val_table_entry *entry,
-    struct variable_field *current_string);
+	const struct pldm_bios_attr_val_table_entry *entry,
+	struct variable_field *current_string);
 
 /** @brief Create an attribute value entry(type: string) and check the validity
  * of the parameters
@@ -611,8 +612,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_value_entry_encode_string_check(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint16_t str_length, const char *string);
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint16_t str_length, const char *string);
 
 /** @brief Get length that an attribute value entry(type: integer) will take
  *  @return The length that an entry(type: integer) will take
@@ -639,7 +640,7 @@
  *  @return Current Value
  */
 uint64_t pldm_bios_table_attr_value_entry_integer_decode_cv(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Create an attribute value entry(type: integer) and check the validity
  * of the parameters
@@ -663,14 +664,14 @@
  *  @return handle to identify the attribute in the attribute value table
  */
 uint16_t pldm_bios_table_attr_value_entry_decode_handle(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get the length of the attribute value entry
  *  @param[in] entry - Pointer to bios attribute value entry
  *  @return Length of the entry
  */
 size_t pldm_bios_table_attr_value_entry_length(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Find an entry in attribute value table by handle
  *  @param[in] table - The BIOS Attribute Value Table
@@ -711,8 +712,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_value_copy_and_update(
-    const void *src_table, size_t src_length, void *dest_table,
-    size_t *dest_length, const void *entry, size_t entry_length);
+	const void *src_table, size_t src_length, void *dest_table,
+	size_t *dest_length, const void *entry, size_t entry_length);
 
 /** @brief Verify the crc value of the complete table
  *  @param[in] table - Pointer to a buffer of a bios table
diff --git a/include/libpldm/firmware_update.h b/include/libpldm/firmware_update.h
index eb02558..fe89b41 100644
--- a/include/libpldm/firmware_update.h
+++ b/include/libpldm/firmware_update.h
@@ -12,21 +12,21 @@
 #include <stdint.h>
 struct variable_field;
 
-#define PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE 8
+#define PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE		 8
 #define PLDM_FWUP_INVALID_COMPONENT_COMPARISON_TIMESTAMP 0xFFFFFFFF
-#define PLDM_QUERY_DEVICE_IDENTIFIERS_REQ_BYTES 0
+#define PLDM_QUERY_DEVICE_IDENTIFIERS_REQ_BYTES		 0
 /** @brief Minimum length of device descriptor, 2 bytes for descriptor type,
  *         2 bytes for descriptor length and atleast 1 byte of descriptor data
  */
-#define PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN 5
+#define PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN    5
 #define PLDM_GET_FIRMWARE_PARAMETERS_REQ_BYTES 0
-#define PLDM_FWUP_BASELINE_TRANSFER_SIZE 32
-#define PLDM_FWUP_MIN_OUTSTANDING_REQ 1
-#define PLDM_GET_STATUS_REQ_BYTES 0
+#define PLDM_FWUP_BASELINE_TRANSFER_SIZE       32
+#define PLDM_FWUP_MIN_OUTSTANDING_REQ	       1
+#define PLDM_GET_STATUS_REQ_BYTES	       0
 /* Maximum progress percentage value*/
-#define PLDM_FWUP_MAX_PROGRESS_PERCENT 0x65
+#define PLDM_FWUP_MAX_PROGRESS_PERCENT	       0x65
 #define PLDM_CANCEL_UPDATE_COMPONENT_REQ_BYTES 0
-#define PLDM_CANCEL_UPDATE_REQ_BYTES 0
+#define PLDM_CANCEL_UPDATE_REQ_BYTES	       0
 
 /** @brief PLDM Firmware update commands
  */
@@ -575,9 +575,9 @@
  *  @return pldm_completion_codes
  */
 int decode_pldm_package_header_info(
-    const uint8_t *data, size_t length,
-    struct pldm_package_header_information *package_header_info,
-    struct variable_field *package_version_str);
+	const uint8_t *data, size_t length,
+	struct pldm_package_header_information *package_header_info,
+	struct variable_field *package_version_str);
 
 /** @brief Decode individual firmware device ID record
  *
@@ -596,12 +596,13 @@
  *  @return pldm_completion_codes
  */
 int decode_firmware_device_id_record(
-    const uint8_t *data, size_t length, uint16_t component_bitmap_bit_length,
-    struct pldm_firmware_device_id_record *fw_device_id_record,
-    struct variable_field *applicable_components,
-    struct variable_field *comp_image_set_version_str,
-    struct variable_field *record_descriptors,
-    struct variable_field *fw_device_pkg_data);
+	const uint8_t *data, size_t length,
+	uint16_t component_bitmap_bit_length,
+	struct pldm_firmware_device_id_record *fw_device_id_record,
+	struct variable_field *applicable_components,
+	struct variable_field *comp_image_set_version_str,
+	struct variable_field *record_descriptors,
+	struct variable_field *fw_device_pkg_data);
 
 /** @brief Decode the record descriptor entries in the firmware update package
  *         and the Descriptors in the QueryDeviceIDentifiers command
@@ -630,9 +631,9 @@
  *  @return pldm_completion_codes
  */
 int decode_vendor_defined_descriptor_value(
-    const uint8_t *data, size_t length, uint8_t *descriptor_title_str_type,
-    struct variable_field *descriptor_title_str,
-    struct variable_field *descriptor_data);
+	const uint8_t *data, size_t length, uint8_t *descriptor_title_str_type,
+	struct variable_field *descriptor_title_str,
+	struct variable_field *descriptor_data);
 
 /** @brief Decode individual component image information
  *
@@ -645,9 +646,9 @@
  *  @return pldm_completion_codes
  */
 int decode_pldm_comp_image_info(
-    const uint8_t *data, size_t length,
-    struct pldm_component_image_information *pldm_comp_image_info,
-    struct variable_field *comp_version_str);
+	const uint8_t *data, size_t length,
+	struct pldm_component_image_information *pldm_comp_image_info,
+	struct variable_field *comp_version_str);
 
 /** @brief Create a PLDM request message for QueryDeviceIdentifiers
  *
@@ -711,11 +712,11 @@
  *  @return pldm_completion_codes
  */
 int decode_get_firmware_parameters_resp(
-    const struct pldm_msg *msg, size_t payload_length,
-    struct pldm_get_firmware_parameters_resp *resp_data,
-    struct variable_field *active_comp_image_set_ver_str,
-    struct variable_field *pending_comp_image_set_ver_str,
-    struct variable_field *comp_parameter_table);
+	const struct pldm_msg *msg, size_t payload_length,
+	struct pldm_get_firmware_parameters_resp *resp_data,
+	struct variable_field *active_comp_image_set_ver_str,
+	struct variable_field *pending_comp_image_set_ver_str,
+	struct variable_field *comp_parameter_table);
 
 /** @brief Decode component entries in the component parameter table which is
  *         part of the response of GetFirmwareParameters command
@@ -730,10 +731,10 @@
  *  @return pldm_completion_codes
  */
 int decode_get_firmware_parameters_resp_comp_entry(
-    const uint8_t *data, size_t length,
-    struct pldm_component_parameter_entry *component_data,
-    struct variable_field *active_comp_ver_str,
-    struct variable_field *pending_comp_ver_str);
+	const uint8_t *data, size_t length,
+	struct pldm_component_parameter_entry *component_data,
+	struct variable_field *active_comp_ver_str,
+	struct variable_field *pending_comp_ver_str);
 
 /** @brief Create PLDM request message for RequestUpdate
  *
@@ -806,11 +807,12 @@
  *         'msg.payload'
  */
 int encode_pass_component_table_req(
-    uint8_t instance_id, uint8_t transfer_flag, uint16_t comp_classification,
-    uint16_t comp_identifier, uint8_t comp_classification_index,
-    uint32_t comp_comparison_stamp, uint8_t comp_ver_str_type,
-    uint8_t comp_ver_str_len, const struct variable_field *comp_ver_str,
-    struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint8_t transfer_flag,
+	uint16_t comp_classification, uint16_t comp_identifier,
+	uint8_t comp_classification_index, uint32_t comp_comparison_stamp,
+	uint8_t comp_ver_str_type, uint8_t comp_ver_str_len,
+	const struct variable_field *comp_ver_str, struct pldm_msg *msg,
+	size_t payload_length);
 
 /** @brief Decode PassComponentTable response message
  *
@@ -850,12 +852,12 @@
  *         'msg.payload'
  */
 int encode_update_component_req(
-    uint8_t instance_id, uint16_t comp_classification, uint16_t comp_identifier,
-    uint8_t comp_classification_index, uint32_t comp_comparison_stamp,
-    uint32_t comp_image_size, bitfield32_t update_option_flags,
-    uint8_t comp_ver_str_type, uint8_t comp_ver_str_len,
-    const struct variable_field *comp_ver_str, struct pldm_msg *msg,
-    size_t payload_length);
+	uint8_t instance_id, uint16_t comp_classification,
+	uint16_t comp_identifier, uint8_t comp_classification_index,
+	uint32_t comp_comparison_stamp, uint32_t comp_image_size,
+	bitfield32_t update_option_flags, uint8_t comp_ver_str_type,
+	uint8_t comp_ver_str_len, const struct variable_field *comp_ver_str,
+	struct pldm_msg *msg, size_t payload_length);
 
 /** @brief Decode UpdateComponent response message
  *
@@ -982,8 +984,9 @@
  *  @return pldm_completion_codes
  */
 int decode_apply_complete_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *apply_result,
-    bitfield16_t *comp_activation_methods_modification);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *apply_result,
+	bitfield16_t *comp_activation_methods_modification);
 
 /** @brief Create PLDM response message for ApplyComplete
  *
diff --git a/include/libpldm/fru.h b/include/libpldm/fru.h
index bb2f571..ce93e55 100644
--- a/include/libpldm/fru.h
+++ b/include/libpldm/fru.h
@@ -12,13 +12,13 @@
 #include "base.h"
 #include "utils.h"
 
-#define PLDM_GET_FRU_RECORD_TABLE_METADATA_REQ_BYTES 0
+#define PLDM_GET_FRU_RECORD_TABLE_METADATA_REQ_BYTES  0
 #define PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES 19
-#define PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES 5
-#define PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES 6
-#define PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES 6
-#define PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES 5
-#define PLDM_SET_FRU_RECORD_TABLE_RESP_BYTES 5
+#define PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES	      5
+#define PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES      6
+#define PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES  6
+#define PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES	      5
+#define PLDM_SET_FRU_RECORD_TABLE_RESP_BYTES	      5
 
 #define FRU_TABLE_CHECKSUM_SIZE 4
 
@@ -84,15 +84,12 @@
 	uint8_t completion_code;	//!< completion code
 	uint8_t fru_data_major_version; //!< The major version of the FRU Record
 	uint8_t fru_data_minor_version; //!< The minor version of the FRU Record
-	uint32_t
-	    fru_table_maximum_size; //!< The size of the largest FRU Record data
+	uint32_t fru_table_maximum_size; //!< The size of the largest FRU Record data
 	uint32_t fru_table_length; //!< The total length of the FRU Record Table
 	uint16_t total_record_set_identifiers; //!< The total number of FRU
 					       //!< Record Data structures
-	uint16_t
-	    total_table_records; //!< The total number of records in the table
-	uint32_t
-	    checksum; //!< The integrity checksum on the FRU Record Table data
+	uint16_t total_table_records; //!< The total number of records in the table
+	uint32_t checksum; //!< The integrity checksum on the FRU Record Table data
 } __attribute__((packed));
 
 /** @struct pldm_get_fru_record_table_req
@@ -203,11 +200,11 @@
  *  @return pldm_completion_codes
  */
 int decode_get_fru_record_table_metadata_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *fru_data_major_version, uint8_t *fru_data_minor_version,
-    uint32_t *fru_table_maximum_size, uint32_t *fru_table_length,
-    uint16_t *total_record_set_identifiers, uint16_t *total_table_records,
-    uint32_t *checksum);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *fru_data_major_version,
+	uint8_t *fru_data_minor_version, uint32_t *fru_table_maximum_size,
+	uint32_t *fru_table_length, uint16_t *total_record_set_identifiers,
+	uint16_t *total_table_records, uint32_t *checksum);
 
 /* Responder */
 
@@ -232,11 +229,11 @@
  */
 
 int encode_get_fru_record_table_metadata_resp(
-    uint8_t instance_id, uint8_t completion_code,
-    uint8_t fru_data_major_version, uint8_t fru_data_minor_version,
-    uint32_t fru_table_maximum_size, uint32_t fru_table_length,
-    uint16_t total_record_set_identifiers, uint16_t total_table_records,
-    uint32_t checksum, struct pldm_msg *msg);
+	uint8_t instance_id, uint8_t completion_code,
+	uint8_t fru_data_major_version, uint8_t fru_data_minor_version,
+	uint32_t fru_table_maximum_size, uint32_t fru_table_length,
+	uint16_t total_record_set_identifiers, uint16_t total_table_records,
+	uint32_t checksum, struct pldm_msg *msg);
 
 /* GetFruRecordTable */
 
@@ -292,10 +289,10 @@
  *  @return pldm_completion_codes
  */
 int decode_get_fru_record_by_option_req(
-    const struct pldm_msg *msg, size_t payload_length,
-    uint32_t *data_transfer_handle, uint16_t *fru_table_handle,
-    uint16_t *record_set_identifier, uint8_t *record_type, uint8_t *field_type,
-    uint8_t *transfer_op_flag);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint32_t *data_transfer_handle, uint16_t *fru_table_handle,
+	uint16_t *record_set_identifier, uint8_t *record_type,
+	uint8_t *field_type, uint8_t *transfer_op_flag);
 
 /** @brief Encode GetFRURecordByOption response data
  *
@@ -359,10 +356,13 @@
  *  @return pldm_completion_codes
  */
 
-int decode_get_fru_record_table_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_data_transfer_handle, uint8_t *transfer_flag,
-    uint8_t *fru_record_table_data, size_t *fru_record_table_length);
+int decode_get_fru_record_table_resp(const struct pldm_msg *msg,
+				     size_t payload_length,
+				     uint8_t *completion_code,
+				     uint32_t *next_data_transfer_handle,
+				     uint8_t *transfer_flag,
+				     uint8_t *fru_record_table_data,
+				     size_t *fru_record_table_length);
 
 /** @brief Decode GetFruRecordTable response data, ensuring that the fru
  *         record table section is small enough to fit in the provided buffer.
@@ -384,10 +384,10 @@
  */
 
 int decode_get_fru_record_table_resp_safe(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_data_transfer_handle, uint8_t *transfer_flag,
-    uint8_t *fru_record_table_data, size_t *fru_record_table_length,
-    size_t max_fru_record_table_length);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_data_transfer_handle,
+	uint8_t *transfer_flag, uint8_t *fru_record_table_data,
+	size_t *fru_record_table_length, size_t max_fru_record_table_length);
 
 /** @brief Encode the FRU record in the FRU table
  *
@@ -430,10 +430,10 @@
  *         'msg.payload'
  */
 int encode_get_fru_record_by_option_req(
-    uint8_t instance_id, uint32_t data_transfer_handle,
-    uint16_t fru_table_handle, uint16_t record_set_identifier,
-    uint8_t record_type, uint8_t field_type, uint8_t transfer_op_flag,
-    struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint32_t data_transfer_handle,
+	uint16_t fru_table_handle, uint16_t record_set_identifier,
+	uint8_t record_type, uint8_t field_type, uint8_t transfer_op_flag,
+	struct pldm_msg *msg, size_t payload_length);
 
 /** @brief Decode GetFRURecordByOption response data
  *
@@ -448,9 +448,9 @@
  *  @return pldm_completion_codes
  */
 int decode_get_fru_record_by_option_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_transfer_handle, uint8_t *transfer_flag,
-    struct variable_field *fru_structure_data);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_transfer_handle,
+	uint8_t *transfer_flag, struct variable_field *fru_structure_data);
 
 /** @brief Get FRU Record Table By Option
  *  @param[in] table - The source fru record table
diff --git a/include/libpldm/oem/ibm/libpldm/file_io.h b/include/libpldm/oem/ibm/libpldm/file_io.h
index 1a4627d..5b4bb32 100644
--- a/include/libpldm/oem/ibm/libpldm/file_io.h
+++ b/include/libpldm/oem/ibm/libpldm/file_io.h
@@ -73,25 +73,25 @@
 	PLDM_FILE_TYPE_PSPD_VPD_PDD_KEYWORD = 0x16,
 };
 
-#define PLDM_RW_FILE_MEM_REQ_BYTES 20
-#define PLDM_RW_FILE_MEM_RESP_BYTES 5
-#define PLDM_GET_FILE_TABLE_REQ_BYTES 6
-#define PLDM_GET_FILE_TABLE_MIN_RESP_BYTES 6
-#define PLDM_READ_FILE_REQ_BYTES 12
-#define PLDM_READ_FILE_RESP_BYTES 5
-#define PLDM_WRITE_FILE_REQ_BYTES 12
-#define PLDM_WRITE_FILE_RESP_BYTES 5
-#define PLDM_RW_FILE_BY_TYPE_MEM_REQ_BYTES 22
-#define PLDM_RW_FILE_BY_TYPE_MEM_RESP_BYTES 5
-#define PLDM_NEW_FILE_REQ_BYTES 14
-#define PLDM_NEW_FILE_RESP_BYTES 1
-#define PLDM_RW_FILE_BY_TYPE_REQ_BYTES 14
-#define PLDM_RW_FILE_BY_TYPE_RESP_BYTES 5
-#define PLDM_FILE_ACK_REQ_BYTES 7
-#define PLDM_FILE_ACK_RESP_BYTES 1
-#define PLDM_FILE_ACK_WITH_META_DATA_REQ_BYTES 23
-#define PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES 1
-#define PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_REQ_BYTES 30
+#define PLDM_RW_FILE_MEM_REQ_BYTES			  20
+#define PLDM_RW_FILE_MEM_RESP_BYTES			  5
+#define PLDM_GET_FILE_TABLE_REQ_BYTES			  6
+#define PLDM_GET_FILE_TABLE_MIN_RESP_BYTES		  6
+#define PLDM_READ_FILE_REQ_BYTES			  12
+#define PLDM_READ_FILE_RESP_BYTES			  5
+#define PLDM_WRITE_FILE_REQ_BYTES			  12
+#define PLDM_WRITE_FILE_RESP_BYTES			  5
+#define PLDM_RW_FILE_BY_TYPE_MEM_REQ_BYTES		  22
+#define PLDM_RW_FILE_BY_TYPE_MEM_RESP_BYTES		  5
+#define PLDM_NEW_FILE_REQ_BYTES				  14
+#define PLDM_NEW_FILE_RESP_BYTES			  1
+#define PLDM_RW_FILE_BY_TYPE_REQ_BYTES			  14
+#define PLDM_RW_FILE_BY_TYPE_RESP_BYTES			  5
+#define PLDM_FILE_ACK_REQ_BYTES				  7
+#define PLDM_FILE_ACK_RESP_BYTES			  1
+#define PLDM_FILE_ACK_WITH_META_DATA_REQ_BYTES		  23
+#define PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES		  1
+#define PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_REQ_BYTES  30
 #define PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_RESP_BYTES 1
 
 /** @struct pldm_read_write_file_memory_req
@@ -774,9 +774,10 @@
  *  @return pldm_completion_codes
  */
 int encode_file_ack_with_meta_data_req(
-    uint8_t instance_id, uint16_t file_type, uint32_t file_handle,
-    uint8_t file_status, uint32_t file_meta_data_1, uint32_t file_meta_data_2,
-    uint32_t file_meta_data_3, uint32_t file_meta_data_4, struct pldm_msg *msg);
+	uint8_t instance_id, uint16_t file_type, uint32_t file_handle,
+	uint8_t file_status, uint32_t file_meta_data_1,
+	uint32_t file_meta_data_2, uint32_t file_meta_data_3,
+	uint32_t file_meta_data_4, struct pldm_msg *msg);
 
 /** @brief Decode FileAckWithMetadata command response data
  *
@@ -803,10 +804,10 @@
  * @return pldm_completion_codes
  */
 int decode_file_ack_with_meta_data_req(
-    const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
-    uint32_t *file_handle, uint8_t *file_status, uint32_t *file_meta_data_1,
-    uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
-    uint32_t *file_meta_data_4);
+	const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
+	uint32_t *file_handle, uint8_t *file_status, uint32_t *file_meta_data_1,
+	uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
+	uint32_t *file_meta_data_4);
 
 /** @brief Create a PLDM response message for FileAckWithMetadata
  *
@@ -857,10 +858,13 @@
  *  @param[out] msg - Message will be written to this
  *  @return pldm_completion_codes
  */
-int encode_new_file_with_metadata_req(
-    uint8_t instance_id, uint16_t file_type, uint32_t file_handle,
-    uint64_t length, uint32_t file_meta_data_1, uint32_t file_meta_data_2,
-    uint32_t file_meta_data_3, uint32_t file_meta_data_4, struct pldm_msg *msg);
+int encode_new_file_with_metadata_req(uint8_t instance_id, uint16_t file_type,
+				      uint32_t file_handle, uint64_t length,
+				      uint32_t file_meta_data_1,
+				      uint32_t file_meta_data_2,
+				      uint32_t file_meta_data_3,
+				      uint32_t file_meta_data_4,
+				      struct pldm_msg *msg);
 
 /** @brief Decode NewFileAvailableWithMetaData response data
  *
@@ -887,10 +891,10 @@
  *  @return pldm_completion_codes
  */
 int decode_new_file_with_metadata_req(
-    const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
-    uint32_t *file_handle, uint64_t *length, uint32_t *file_meta_data_1,
-    uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
-    uint32_t *file_meta_data_4);
+	const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
+	uint32_t *file_handle, uint64_t *length, uint32_t *file_meta_data_1,
+	uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
+	uint32_t *file_meta_data_4);
 
 /** @brief Create a PLDM response for NewFileAvailableWithMetaData
  *
diff --git a/include/libpldm/pdr.h b/include/libpldm/pdr.h
index 8b5f6a7..5443fba 100644
--- a/include/libpldm/pdr.h
+++ b/include/libpldm/pdr.h
@@ -206,9 +206,9 @@
  *  @return uint32_t - record handle assigned to PDR record
  */
 const pldm_pdr_record *pldm_pdr_fru_record_set_find_by_rsi(
-    const pldm_pdr *repo, uint16_t fru_rsi, uint16_t *terminus_handle,
-    uint16_t *entity_type, uint16_t *entity_instance_num,
-    uint16_t *container_id);
+	const pldm_pdr *repo, uint16_t fru_rsi, uint16_t *terminus_handle,
+	uint16_t *entity_type, uint16_t *entity_instance_num,
+	uint16_t *container_id);
 
 /* =========================== */
 /* Entity Association PDR APIs */
@@ -258,9 +258,9 @@
  *  @return pldm_entity_node* - opaque pointer to added entity
  */
 pldm_entity_node *pldm_entity_association_tree_add(
-    pldm_entity_association_tree *tree, pldm_entity *entity,
-    uint16_t entity_instance_number, pldm_entity_node *parent,
-    uint8_t association_type);
+	pldm_entity_association_tree *tree, pldm_entity *entity,
+	uint16_t entity_instance_number, pldm_entity_node *parent,
+	uint8_t association_type);
 
 /** @brief Visit and note each entity in the entity association tree
  *
@@ -328,8 +328,8 @@
  *  @param[in] terminus_handle - terminus handle of the terminus
  */
 void pldm_entity_association_pdr_add_from_node(
-    pldm_entity_node *node, pldm_pdr *repo, pldm_entity **entities,
-    size_t num_entities, bool is_remote, uint16_t terminus_handle);
+	pldm_entity_node *node, pldm_pdr *repo, pldm_entity **entities,
+	size_t num_entities, bool is_remote, uint16_t terminus_handle);
 
 /** @brief Find entity reference in tree
  *
@@ -375,15 +375,15 @@
  *  @param[in/out] new_tree - pointer to destination tree
  */
 void pldm_entity_association_tree_copy_root(
-    pldm_entity_association_tree *org_tree,
-    pldm_entity_association_tree *new_tree);
+	pldm_entity_association_tree *org_tree,
+	pldm_entity_association_tree *new_tree);
 
 /** @brief Destroy all the nodes of the entity association tree
  *
  *  @param[in] tree - pointer to entity association tree
  */
 void pldm_entity_association_tree_destroy_root(
-    pldm_entity_association_tree *tree);
+	pldm_entity_association_tree *tree);
 
 /** @brief Check whether the entity association tree is empty
  *
diff --git a/include/libpldm/platform.h b/include/libpldm/platform.h
index 9149da2..ead3421 100644
--- a/include/libpldm/platform.h
+++ b/include/libpldm/platform.h
@@ -13,15 +13,15 @@
 #include "pldm_types.h"
 
 /* Maximum size for request */
-#define PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES 19
-#define PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES 4
+#define PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES  19
+#define PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES  4
 #define PLDM_GET_NUMERIC_EFFECTER_VALUE_REQ_BYTES 2
-#define PLDM_GET_SENSOR_READING_REQ_BYTES 3
-#define PLDM_SET_EVENT_RECEIVER_REQ_BYTES 5
+#define PLDM_GET_SENSOR_READING_REQ_BYTES	  3
+#define PLDM_SET_EVENT_RECEIVER_REQ_BYTES	  5
 /* Response lengths are inclusive of completion code */
 #define PLDM_SET_STATE_EFFECTER_STATES_RESP_BYTES 1
 
-#define PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES 1
+#define PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES    1
 #define PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES 4
 
 #define PLDM_GET_PDR_REQ_BYTES 13
@@ -29,58 +29,58 @@
 #define PLDM_SET_EVENT_RECEIVER_RESP_BYTES 1
 
 /* Platform event supported request */
-#define PLDM_EVENT_MESSAGE_BUFFER_SIZE_REQ_BYTES 2
+#define PLDM_EVENT_MESSAGE_BUFFER_SIZE_REQ_BYTES  2
 #define PLDM_EVENT_MESSAGE_BUFFER_SIZE_RESP_BYTES 3
 
-#define PLDM_EVENT_MESSAGE_SUPPORTED_REQ_BYTES 1
+#define PLDM_EVENT_MESSAGE_SUPPORTED_REQ_BYTES	    1
 #define PLDM_EVENT_MESSAGE_SUPPORTED_MIN_RESP_BYTES 4
 
-#define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES 8
+#define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES	    8
 #define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES 4
-#define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_RESP_BYTES 14
+#define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_RESP_BYTES	    14
 #define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_CHECKSUM_BYTES 4
 
 /* Minimum response length */
-#define PLDM_GET_PDR_MIN_RESP_BYTES 12
+#define PLDM_GET_PDR_MIN_RESP_BYTES		       12
 #define PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES 5
-#define PLDM_GET_SENSOR_READING_MIN_RESP_BYTES 8
-#define PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES 2
-#define PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES 41
+#define PLDM_GET_SENSOR_READING_MIN_RESP_BYTES	       8
+#define PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES  2
+#define PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES	       41
 
 /* Minimum length for PLDM PlatformEventMessage request */
-#define PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES 3
+#define PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES		 3
 #define PLDM_PLATFORM_EVENT_MESSAGE_STATE_SENSOR_STATE_REQ_BYTES 6
-#define PLDM_PLATFORM_EVENT_MESSAGE_RESP_BYTES 2
-#define PLDM_PLATFORM_EVENT_MESSAGE_FORMAT_VERSION 1
+#define PLDM_PLATFORM_EVENT_MESSAGE_RESP_BYTES			 2
+#define PLDM_PLATFORM_EVENT_MESSAGE_FORMAT_VERSION		 1
 
 /* Minumum length of senson event data */
-#define PLDM_SENSOR_EVENT_DATA_MIN_LENGTH 5
-#define PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH 2
-#define PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH 3
-#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH 4
-#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH 7
-#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_8BIT_DATA_LENGTH 4
+#define PLDM_SENSOR_EVENT_DATA_MIN_LENGTH			 5
+#define PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH		 2
+#define PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH	 3
+#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH	 4
+#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH	 7
+#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_8BIT_DATA_LENGTH	 4
 #define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_16BIT_DATA_LENGTH 5
 #define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_32BIT_DATA_LENGTH 7
 
 /* Minimum length of data for pldmPDRRepositoryChgEvent */
-#define PLDM_PDR_REPOSITORY_CHG_EVENT_MIN_LENGTH 2
+#define PLDM_PDR_REPOSITORY_CHG_EVENT_MIN_LENGTH     2
 #define PLDM_PDR_REPOSITORY_CHANGE_RECORD_MIN_LENGTH 2
 
 /* Minimum length of numeric sensor PDR */
-#define PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH 57
+#define PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH		       57
 #define PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH 3
-#define PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH 9
+#define PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH      9
 #define PLDM_PDR_NUMERIC_SENSOR_PDR_MIN_LENGTH                                 \
 	(PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH +                            \
 	 PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH +      \
 	 PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH)
 
 #define PLDM_INVALID_EFFECTER_ID 0xFFFF
-#define PLDM_TID_RESERVED 0xFF
+#define PLDM_TID_RESERVED	 0xFF
 
 /* DSP0248 Table1 PLDM monitoring and control data types */
-#define PLDM_STR_UTF_8_MAX_LEN 256
+#define PLDM_STR_UTF_8_MAX_LEN	256
 #define PLDM_STR_UTF_16_MAX_LEN 256
 
 enum pldm_effecter_data_size {
@@ -603,9 +603,9 @@
  * @note sensor->hdr.length, .type, and .version will be set appropriately.
  */
 int encode_state_sensor_pdr(
-    struct pldm_state_sensor_pdr *sensor, size_t allocation_size,
-    const struct state_sensor_possible_states *possible_states,
-    size_t possible_states_size, size_t *actual_size);
+	struct pldm_state_sensor_pdr *sensor, size_t allocation_size,
+	const struct state_sensor_possible_states *possible_states,
+	size_t possible_states_size, size_t *actual_size);
 
 /** @union union_effecter_data_size
  *
@@ -802,9 +802,9 @@
  * @note effecter->hdr.length, .type, and .version will be set appropriately.
  */
 int encode_state_effecter_pdr(
-    struct pldm_state_effecter_pdr *effecter, size_t allocation_size,
-    const struct state_effecter_possible_states *possible_states,
-    size_t possible_states_size, size_t *actual_size);
+	struct pldm_state_effecter_pdr *effecter, size_t allocation_size,
+	const struct state_effecter_possible_states *possible_states,
+	size_t possible_states_size, size_t *actual_size);
 
 /** @struct set_effecter_state_field
  *
@@ -826,7 +826,7 @@
 				//! from. This must be different from the
 				//! present state
 	uint8_t event_state;	//!< Return a state value from a PLDM State Set
-			     //! that is associated with the sensor
+				//! that is associated with the sensor
 } __attribute__((packed)) get_sensor_state_field;
 
 /** @struct PLDM_SetStateEffecterStates_Request
@@ -1306,9 +1306,10 @@
  *         'msg.payload'
  */
 int encode_get_numeric_effecter_value_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t effecter_data_size,
-    uint8_t effecter_oper_state, const uint8_t *pending_value,
-    const uint8_t *present_value, struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint8_t completion_code,
+	uint8_t effecter_data_size, uint8_t effecter_oper_state,
+	const uint8_t *pending_value, const uint8_t *present_value,
+	struct pldm_msg *msg, size_t payload_length);
 
 /* GetSensorReading */
 
@@ -1380,11 +1381,11 @@
  *  @return pldm_completion_codes
  */
 int encode_get_pdr_repository_info_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t repository_state,
-    const uint8_t *update_time, const uint8_t *oem_update_time,
-    uint32_t record_count, uint32_t repository_size,
-    uint32_t largest_record_size, uint8_t data_transfer_handle_timeout,
-    struct pldm_msg *msg);
+	uint8_t instance_id, uint8_t completion_code, uint8_t repository_state,
+	const uint8_t *update_time, const uint8_t *oem_update_time,
+	uint32_t record_count, uint32_t repository_size,
+	uint32_t largest_record_size, uint8_t data_transfer_handle_timeout,
+	struct pldm_msg *msg);
 
 /** @brief Decode GetPDRRepositoryInfo response data
  *
@@ -1404,10 +1405,11 @@
  *  @return pldm_completion_codes
  */
 int decode_get_pdr_repository_info_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *repository_state, uint8_t *update_time, uint8_t *oem_update_time,
-    uint32_t *record_count, uint32_t *repository_size,
-    uint32_t *largest_record_size, uint8_t *data_transfer_handle_timeout);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *repository_state,
+	uint8_t *update_time, uint8_t *oem_update_time, uint32_t *record_count,
+	uint32_t *repository_size, uint32_t *largest_record_size,
+	uint8_t *data_transfer_handle_timeout);
 
 /* GetPDR */
 
@@ -1528,9 +1530,12 @@
  *  @note  Caller is responsible for memory alloc and dealloc of param
  *         'msg.payload'
  */
-int encode_set_numeric_effecter_value_req(
-    uint8_t instance_id, uint16_t effecter_id, uint8_t effecter_data_size,
-    const uint8_t *effecter_value, struct pldm_msg *msg, size_t payload_length);
+int encode_set_numeric_effecter_value_req(uint8_t instance_id,
+					  uint16_t effecter_id,
+					  uint8_t effecter_data_size,
+					  const uint8_t *effecter_value,
+					  struct pldm_msg *msg,
+					  size_t payload_length);
 
 /** @brief Decode SetNumericEffecterValue response data
  *  @param[in] msg - Request message
@@ -1613,9 +1618,9 @@
  *  @return pldm_completion_codes
  */
 int decode_poll_for_platform_event_message_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *format_version,
-    uint8_t *transfer_operation_flag, uint32_t *data_transfer_handle,
-    uint16_t *event_id_to_acknowledge);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *format_version, uint8_t *transfer_operation_flag,
+	uint32_t *data_transfer_handle, uint16_t *event_id_to_acknowledge);
 
 /** @brief Encode PlatformEventMessage response data
  *  @param[in] instance_id - Message's instance id
@@ -1650,11 +1655,11 @@
  *  'msg.payload'
  */
 int encode_poll_for_platform_event_message_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t tid,
-    uint16_t event_id, uint32_t next_data_transfer_handle,
-    uint8_t transfer_flag, uint8_t event_class, uint32_t event_data_size,
-    uint8_t *event_data, uint32_t checksum, struct pldm_msg *msg,
-    size_t payload_length);
+	uint8_t instance_id, uint8_t completion_code, uint8_t tid,
+	uint16_t event_id, uint32_t next_data_transfer_handle,
+	uint8_t transfer_flag, uint8_t event_class, uint32_t event_data_size,
+	uint8_t *event_data, uint32_t checksum, struct pldm_msg *msg,
+	size_t payload_length);
 
 /** @brief Encode PlatformEventMessage request data
  * @param[in] instance_id - Message's instance id
@@ -1670,9 +1675,9 @@
  * 'msg.payload'
  */
 int encode_platform_event_message_req(
-    uint8_t instance_id, uint8_t format_version, uint8_t tid,
-    uint8_t event_class, const uint8_t *event_data, size_t event_data_length,
-    struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint8_t format_version, uint8_t tid,
+	uint8_t event_class, const uint8_t *event_data,
+	size_t event_data_length, struct pldm_msg *msg, size_t payload_length);
 
 /** @brief Encode PollForPlatformEventMessage request data
  *  @param[in] instance_id - Message's instance id
@@ -1712,10 +1717,11 @@
  *  'msg.payload'
  */
 int decode_poll_for_platform_event_message_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *tid, uint16_t *event_id, uint32_t *next_data_transfer_handle,
-    uint8_t *transfer_flag, uint8_t *event_class, uint32_t *event_data_size,
-    void **event_data, uint32_t *event_data_integrity_checksum);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *tid, uint16_t *event_id,
+	uint32_t *next_data_transfer_handle, uint8_t *transfer_flag,
+	uint8_t *event_class, uint32_t *event_data_size, void **event_data,
+	uint32_t *event_data_integrity_checksum);
 
 /** @brief Decode PlatformEventMessage response data
  * @param[in] msg - Request message
@@ -1749,9 +1755,9 @@
  *  @note Caller is responsible for memory alloc and dealloc of param
  *  'msg.payload'
  */
-int encode_event_message_buffer_size_req(
-    uint8_t instance_id, uint16_t event_receiver_max_buffer_size,
-    struct pldm_msg *msg);
+int encode_event_message_buffer_size_req(uint8_t instance_id,
+					 uint16_t event_receiver_max_buffer_size,
+					 struct pldm_msg *msg);
 
 /** @brief Encode EventMessageSupported request data
  *
@@ -1780,11 +1786,14 @@
  *
  *  @return pldm_completion_codes
  */
-int decode_event_message_supported_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *synchrony_config, bitfield8_t *synchrony_config_support,
-    uint8_t *number_event_class_returned, uint8_t *event_class,
-    uint8_t event_class_count);
+int decode_event_message_supported_resp(const struct pldm_msg *msg,
+					size_t payload_length,
+					uint8_t *completion_code,
+					uint8_t *synchrony_config,
+					bitfield8_t *synchrony_config_support,
+					uint8_t *number_event_class_returned,
+					uint8_t *event_class,
+					uint8_t event_class_count);
 
 /** @brief Decode sensorEventData response data
  *
@@ -1867,8 +1876,8 @@
  *  @param[out] pdr_value - unpacked numeric sensor PDR struct
  */
 int decode_numeric_sensor_pdr_data(
-    const void *pdr_data, size_t pdr_data_length,
-    struct pldm_numeric_sensor_value_pdr *pdr_value);
+	const void *pdr_data, size_t pdr_data_length,
+	struct pldm_numeric_sensor_value_pdr *pdr_value);
 
 /* GetNumericEffecterValue */
 
@@ -1902,10 +1911,13 @@
  *              used for this field
  *  @return pldm_completion_codes
  */
-int decode_get_numeric_effecter_value_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *effecter_data_size, uint8_t *effecter_oper_state,
-    uint8_t *pending_value, uint8_t *present_value);
+int decode_get_numeric_effecter_value_resp(const struct pldm_msg *msg,
+					   size_t payload_length,
+					   uint8_t *completion_code,
+					   uint8_t *effecter_data_size,
+					   uint8_t *effecter_oper_state,
+					   uint8_t *pending_value,
+					   uint8_t *present_value);
 
 /** @brief Decode pldmPDRRepositoryChgEvent response data
  *
@@ -1922,9 +1934,9 @@
  *         'event_data'
  */
 int decode_pldm_pdr_repository_chg_event_data(
-    const uint8_t *event_data, size_t event_data_size,
-    uint8_t *event_data_format, uint8_t *number_of_change_records,
-    size_t *change_record_data_offset);
+	const uint8_t *event_data, size_t event_data_size,
+	uint8_t *event_data_format, uint8_t *number_of_change_records,
+	size_t *change_record_data_offset);
 
 /** @brief Encode PLDM PDR Repository Change eventData
  *  @param[in] event_data_format - Format of this event data (e.g.
@@ -1958,12 +1970,12 @@
  * 'event_data.change_records'
  */
 int encode_pldm_pdr_repository_chg_event_data(
-    uint8_t event_data_format, uint8_t number_of_change_records,
-    const uint8_t *event_data_operations,
-    const uint8_t *numbers_of_change_entries,
-    const uint32_t *const *change_entries,
-    struct pldm_pdr_repository_chg_event_data *event_data,
-    size_t *actual_change_records_size, size_t max_change_records_size);
+	uint8_t event_data_format, uint8_t number_of_change_records,
+	const uint8_t *event_data_operations,
+	const uint8_t *numbers_of_change_entries,
+	const uint32_t *const *change_entries,
+	struct pldm_pdr_repository_chg_event_data *event_data,
+	size_t *actual_change_records_size, size_t max_change_records_size);
 
 /** @brief Encode event data for a PLDM Sensor Event
  *
@@ -2004,9 +2016,9 @@
  *         'change_record_data'
  */
 int decode_pldm_pdr_repository_change_record_data(
-    const uint8_t *change_record_data, size_t change_record_data_size,
-    uint8_t *event_data_operation, uint8_t *number_of_change_entries,
-    size_t *change_entry_data_offset);
+	const uint8_t *change_record_data, size_t change_record_data_size,
+	uint8_t *event_data_operation, uint8_t *number_of_change_entries,
+	size_t *change_entry_data_offset);
 
 /* GetSensorReading */
 
@@ -2048,10 +2060,11 @@
  */
 
 int decode_get_sensor_reading_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *sensor_data_size, uint8_t *sensor_operational_state,
-    uint8_t *sensor_event_message_enable, uint8_t *present_state,
-    uint8_t *previous_state, uint8_t *event_state, uint8_t *present_reading);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *sensor_data_size,
+	uint8_t *sensor_operational_state, uint8_t *sensor_event_message_enable,
+	uint8_t *present_state, uint8_t *previous_state, uint8_t *event_state,
+	uint8_t *present_reading);
 
 /** @brief Encode the SetEventReceiver request message
  *
diff --git a/include/libpldm/state_set.h b/include/libpldm/state_set.h
index d54bbe1..38f5aa1 100644
--- a/include/libpldm/state_set.h
+++ b/include/libpldm/state_set.h
@@ -228,7 +228,7 @@
 
 /* OEM ranges */
 #define PLDM_OEM_STATE_SET_ID_START 32768
-#define PLDM_OEM_STATE_SET_ID_END 65535
+#define PLDM_OEM_STATE_SET_ID_END   65535
 
 #ifdef __cplusplus
 }
