Remove libpldm code & add libpldm.wrap

Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com>
Change-Id: I984498c8cf3fbca7bad34d0fd21447d48543ff04
diff --git a/meson.build b/meson.build
index 55fc434..d7d3456 100644
--- a/meson.build
+++ b/meson.build
@@ -56,9 +56,7 @@
 conf_data.set('INSTANCE_ID_EXPIRATION_INTERVAL',get_option('instance-id-expiration-interval'))
 conf_data.set('RESPONSE_TIME_OUT',get_option('response-time-out'))
 conf_data.set('FLIGHT_RECORDER_MAX_ENTRIES',get_option('flightrecorder-max-entries'))
-if get_option('libpldm-only').disabled()
-  conf_data.set_quoted('HOST_EID_PATH', join_paths(package_datadir, 'host_eid'))
-endif
+conf_data.set_quoted('HOST_EID_PATH', join_paths(package_datadir, 'host_eid'))
 conf_data.set('MAXIMUM_TRANSFER_SIZE', get_option('maximum-transfer-size'))
 configure_file(output: 'config.h',
   configuration: conf_data
@@ -66,34 +64,32 @@
 
 cpp = meson.get_compiler('cpp')
 
-if get_option('libpldm-only').disabled()
-  phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces')
-  sdbusplus = dependency('sdbusplus')
-  sdeventplus = dependency('sdeventplus')
-  stdplus = dependency('stdplus')
+phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces')
+sdbusplus = dependency('sdbusplus')
+sdeventplus = dependency('sdeventplus')
+stdplus = dependency('stdplus')
 
-  if cpp.has_header('nlohmann/json.hpp')
-    nlohmann_json = declare_dependency()
-  else
-    nlohmann_json = dependency('nlohmann_json')
-  endif
+if cpp.has_header('nlohmann/json.hpp')
+  nlohmann_json = declare_dependency()
+else
+  nlohmann_json = dependency('nlohmann_json')
+endif
 
-  if cpp.has_header('CLI/CLI.hpp')
-    CLI11_dep = declare_dependency()
-  else
-    CLI11_dep = dependency('CLI11')
-  endif
+if cpp.has_header('CLI/CLI.hpp')
+  CLI11_dep = declare_dependency()
+else
+  CLI11_dep = dependency('CLI11')
+endif
 
-  if cpp.has_header_symbol('function2/function2.hpp', 'fu2::unique_function')
-    function2_dep = declare_dependency()
-  else
-    subproject('function2')
-    function2_dep = declare_dependency(
-      include_directories: [
-        'subprojects/function2/include/function2'
-      ]
-    )
-  endif
+if cpp.has_header_symbol('function2/function2.hpp', 'fu2::unique_function')
+  function2_dep = declare_dependency()
+else
+  subproject('function2')
+  function2_dep = declare_dependency(
+    include_directories: [
+      'subprojects/function2/include/function2'
+    ]
+  )
 endif
 
 if get_option('oe-sdk').enabled()
@@ -135,7 +131,6 @@
 
 libpldm_dep = dependency('libpldm', fallback:['libpldm','libpldm_dep'])
 
-if get_option('libpldm-only').disabled()
 
 libpldmutils_headers = ['.']
 libpldmutils = library(
@@ -227,5 +222,3 @@
   subdir('requester/test')
   subdir('test')
 endif
-
-endif # pldm-only
diff --git a/meson_options.txt b/meson_options.txt
index c4a1d59..4a1ca66 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -5,7 +5,6 @@
 option('utilities', type: 'feature', description: 'Enable debug utilities', value: 'enabled')
 option('libpldmresponder', type: 'feature', description: 'Enable libpldmresponder', value: 'enabled')
 
-option('libpldm-only', type: 'feature', description: 'Only build libpldm', value: 'disabled')
 option('oem-ibm-dma-maxsize', type: 'integer', min:4096, max: 16773120, description: 'OEM-IBM: max DMA size', value: 8384512) #16MB - 4K
 option('softoff', type: 'feature', description: 'Build soft power off application', value: 'enabled')
 option('softoff-timeout-seconds', type: 'integer', description: 'softoff: Time to wait for host to gracefully shutdown', value: 7200)
diff --git a/subprojects/libpldm.wrap b/subprojects/libpldm.wrap
new file mode 100644
index 0000000..5c90142
--- /dev/null
+++ b/subprojects/libpldm.wrap
@@ -0,0 +1,6 @@
+[wrap-git]
+url = https://github.com/openbmc/libpldm.git
+revision = HEAD
+
+[provide]
+libpldm = libpldm_dep
diff --git a/subprojects/libpldm/.clang-format b/subprojects/libpldm/.clang-format
deleted file mode 100644
index a3ef233..0000000
--- a/subprojects/libpldm/.clang-format
+++ /dev/null
@@ -1,6 +0,0 @@
-BasedOnStyle: LLVM
-IndentWidth: 8
-UseTab: Always
-BreakBeforeBraces: Linux
-AllowShortIfStatementsOnASingleLine: false
-IndentCaseLabels: false
diff --git a/subprojects/libpldm/LICENSE b/subprojects/libpldm/LICENSE
deleted file mode 100644
index 261eeb9..0000000
--- a/subprojects/libpldm/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/subprojects/libpldm/include/libpldm/base.h b/subprojects/libpldm/include/libpldm/base.h
deleted file mode 100644
index be1e355..0000000
--- a/subprojects/libpldm/include/libpldm/base.h
+++ /dev/null
@@ -1,553 +0,0 @@
-#ifndef BASE_H
-#define BASE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <asm/byteorder.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#include "pldm_types.h"
-
-/** @brief PLDM Types
- */
-enum pldm_supported_types {
-	PLDM_BASE = 0x00,
-	PLDM_PLATFORM = 0x02,
-	PLDM_BIOS = 0x03,
-	PLDM_FRU = 0x04,
-	PLDM_FWUP = 0x05,
-	PLDM_OEM = 0x3F,
-};
-
-/** @brief PLDM Commands
- */
-enum pldm_supported_commands {
-	PLDM_GET_TID = 0x2,
-	PLDM_GET_PLDM_VERSION = 0x3,
-	PLDM_GET_PLDM_TYPES = 0x4,
-	PLDM_GET_PLDM_COMMANDS = 0x5,
-	PLDM_MULTIPART_RECEIVE = 0x9,
-};
-
-/** @brief PLDM base codes
- */
-enum pldm_completion_codes {
-	PLDM_SUCCESS = 0x00,
-	PLDM_ERROR = 0x01,
-	PLDM_ERROR_INVALID_DATA = 0x02,
-	PLDM_ERROR_INVALID_LENGTH = 0x03,
-	PLDM_ERROR_NOT_READY = 0x04,
-	PLDM_ERROR_UNSUPPORTED_PLDM_CMD = 0x05,
-	PLDM_ERROR_INVALID_PLDM_TYPE = 0x20,
-	PLDM_INVALID_TRANSFER_OPERATION_FLAG = 0x21
-};
-
-enum transfer_op_flag {
-	PLDM_GET_NEXTPART = 0,
-	PLDM_GET_FIRSTPART = 1,
-};
-
-enum transfer_multipart_op_flag {
-	PLDM_XFER_FIRST_PART = 0,
-	PLDM_XFER_NEXT_PART = 1,
-	PLDM_XFER_ABORT = 2,
-	PLDM_XFER_COMPLETE = 3,
-	PLDM_XFER_CURRENT_PART = 4,
-};
-
-enum transfer_resp_flag {
-	PLDM_START = 0x01,
-	PLDM_MIDDLE = 0x02,
-	PLDM_END = 0x04,
-	PLDM_START_AND_END = 0x05,
-};
-
-/** @brief PLDM transport protocol type
- */
-enum pldm_transport_protocol_type {
-	PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP = 0x00,
-	PLDM_TRANSPORT_PROTOCOL_TYPE_OEM = 0xFF,
-};
-
-/** @enum MessageType
- *
- *  The different message types supported by the PLDM specification.
- */
-typedef enum {
-	PLDM_RESPONSE,		   //!< PLDM response
-	PLDM_REQUEST,		   //!< PLDM request
-	PLDM_RESERVED,		   //!< Reserved
-	PLDM_ASYNC_REQUEST_NOTIFY, //!< Unacknowledged PLDM request messages
-} MessageType;
-
-#define PLDM_INSTANCE_MAX 31
-#define PLDM_MAX_TYPES 64
-#define PLDM_MAX_CMDS_PER_TYPE 256
-
-/* Message payload lengths */
-#define PLDM_GET_COMMANDS_REQ_BYTES 5
-#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_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_MULTIPART_RECEIVE_REQ_BYTES 18
-
-#define PLDM_VERSION_0 0
-#define PLDM_CURRENT_VERSION PLDM_VERSION_0
-
-#define PLDM_TIMESTAMP104_SIZE 13
-
-/** @struct pldm_msg_hdr
- *
- * Structure representing PLDM message header fields
- */
-struct pldm_msg_hdr {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-	uint8_t instance_id : 5; //!< Instance ID
-	uint8_t reserved : 1;	 //!< Reserved
-	uint8_t datagram : 1;	 //!< Datagram bit
-	uint8_t request : 1;	 //!< Request bit
-#elif defined(__BIG_ENDIAN_BITFIELD)
-	uint8_t request : 1;	 //!< Request bit
-	uint8_t datagram : 1;	 //!< Datagram bit
-	uint8_t reserved : 1;	 //!< Reserved
-	uint8_t instance_id : 5; //!< Instance ID
-#endif
-
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-	uint8_t type : 6;	//!< PLDM type
-	uint8_t header_ver : 2; //!< Header version
-#elif defined(__BIG_ENDIAN_BITFIELD)
-	uint8_t header_ver : 2;	 //!< Header version
-	uint8_t type : 6;	 //!< PLDM type
-#endif
-	uint8_t command; //!< PLDM command code
-} __attribute__((packed));
-
-// Macros for byte-swapping variables in-place
-#define HTOLE32(X) (X = htole32(X))
-#define HTOLE16(X) (X = htole16(X))
-#define LE32TOH(X) (X = le32toh(X))
-#define LE16TOH(X) (X = le16toh(X))
-
-/** @struct pldm_msg
- *
- * Structure representing PLDM message
- */
-struct pldm_msg {
-	struct pldm_msg_hdr hdr; //!< PLDM message header
-	uint8_t payload[1]; //!< &payload[0] is the beginning of the payload
-} __attribute__((packed));
-
-/** @struct pldm_header_info
- *
- *  The information needed to prepare PLDM header and this is passed to the
- *  pack_pldm_header and unpack_pldm_header API.
- */
-struct pldm_header_info {
-	MessageType msg_type;	 //!< PLDM message type
-	uint8_t instance;	 //!< PLDM instance id
-	uint8_t pldm_type;	 //!< PLDM type
-	uint8_t command;	 //!< PLDM command code
-	uint8_t completion_code; //!< PLDM completion code, applies for response
-};
-
-/** @struct pldm_get_types_resp
- *
- *  Structure representing PLDM get types response.
- */
-struct pldm_get_types_resp {
-	uint8_t completion_code; //!< completion code
-	bitfield8_t types[8]; //!< each bit represents whether a given PLDM Type
-			      //!< is supported
-} __attribute__((packed));
-
-/** @struct pldm_get_commands_req
- *
- *  Structure representing PLDM get commands request.
- */
-struct pldm_get_commands_req {
-	uint8_t type;	 //!< PLDM Type for which command support information is
-			 //!< being requested
-	ver32_t version; //!< version for the specified PLDM Type
-} __attribute__((packed));
-
-/** @struct pldm_get_commands_resp
- *
- *  Structure representing PLDM get commands response.
- */
-struct pldm_get_commands_resp {
-	uint8_t completion_code;  //!< completion code
-	bitfield8_t commands[32]; //!< each bit represents whether a given PLDM
-				  //!< command is supported
-} __attribute__((packed));
-
-/** @struct pldm_get_version_req
- *
- *  Structure representing PLDM get version request.
- */
-struct pldm_get_version_req {
-	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
-} __attribute__((packed));
-
-/** @struct pldm_get_version_resp
- *
- *  Structure representing PLDM get version response.
- */
-
-struct pldm_get_version_resp {
-	uint8_t completion_code;       //!< completion code
-	uint32_t next_transfer_handle; //!< next portion of PLDM version data
-				       //!< transfer
-	uint8_t transfer_flag;	       //!< PLDM GetVersion transfer flag
-	uint8_t version_data[1];       //!< PLDM GetVersion version field
-} __attribute__((packed));
-
-/** @struct pldm_get_tid_resp
- *
- *  Structure representing PLDM get tid response.
- */
-
-struct pldm_get_tid_resp {
-	uint8_t completion_code; //!< completion code
-	uint8_t tid;		 //!< PLDM GetTID TID field
-} __attribute__((packed));
-
-/** @struct pldm_multipart_receive_req
- *
- * Structure representing PLDM multipart receive request.
- */
-struct pldm_multipart_receive_req {
-	uint8_t pldm_type;	  //!< PLDM Type for the MultipartReceive
-				  //!< command.
-	uint8_t transfer_opflag;  //!< PLDM MultipartReceive operation flag.
-	uint32_t transfer_ctx;	  //!< Protocol-specifc context for this
-				  //!< transfer.
-	uint32_t transfer_handle; //!< handle to identify the part of data to be
-				  //!< received.
-	uint32_t section_offset;  //!< The start offset for the requested
-				  //!< section.
-	uint32_t section_length;  //!< The length (in bytes) of the section
-				  //!< requested.
-} __attribute__((packed));
-/**
- * @brief Populate the PLDM message with the PLDM header.The caller of this API
- *        allocates buffer for the PLDM header when forming the PLDM message.
- *        The buffer is passed to this API to pack the PLDM header.
- *
- * @param[in] hdr - Pointer to the PLDM header information
- * @param[out] msg - Pointer to PLDM message header
- *
- * @return 0 on success, otherwise PLDM error codes.
- * @note   Caller is responsible for alloc and dealloc of msg
- *         and hdr params
- */
-uint8_t pack_pldm_header(const struct pldm_header_info *hdr,
-			 struct pldm_msg_hdr *msg);
-
-/**
- * @brief Unpack the PLDM header from the PLDM message.
- *
- * @param[in] msg - Pointer to the PLDM message header
- * @param[out] hdr - Pointer to the PLDM header information
- *
- * @return 0 on success, otherwise PLDM error codes.
- * @note   Caller is responsible for alloc and dealloc of msg
- *         and hdr params
- */
-uint8_t unpack_pldm_header(const struct pldm_msg_hdr *msg,
-			   struct pldm_header_info *hdr);
-
-/* Requester */
-
-/* GetPLDMTypes */
-
-/** @brief Create a PLDM request message for GetPLDMTypes
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_types_req(uint8_t instance_id, struct pldm_msg *msg);
-
-/** @brief Decode a GetPLDMTypes response message
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] types - pointer to array bitfield8_t[8] containing supported
- *              types (MAX_TYPES/8) = 8), as per DSP0240
- *  @return pldm_completion_codes
- */
-int decode_get_types_resp(const struct pldm_msg *msg, size_t payload_length,
-			  uint8_t *completion_code, bitfield8_t *types);
-
-/* GetPLDMCommands */
-
-/** @brief Create a PLDM request message for GetPLDMCommands
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] type - PLDM Type
- *  @param[in] version - Version for PLDM Type
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_commands_req(uint8_t instance_id, uint8_t type, ver32_t version,
-			    struct pldm_msg *msg);
-
-/** @brief Decode a GetPLDMCommands response message
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of reponse message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[in] commands - pointer to array bitfield8_t[32] containing supported
- *             commands (PLDM_MAX_CMDS_PER_TYPE/8) = 32), as per DSP0240
- *  @return pldm_completion_codes
- */
-int decode_get_commands_resp(const struct pldm_msg *msg, size_t payload_length,
-			     uint8_t *completion_code, bitfield8_t *commands);
-
-/* GetPLDMVersion */
-
-/** @brief Create a PLDM request for GetPLDMVersion
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] transfer_handle - Handle to identify PLDM version data transfer.
- *         This handle is ignored by the responder when the
- *         transferop_flag is set to getFirstPart.
- *  @param[in] transfer_opflag - flag to indicate whether it is start of
- *         transfer
- *  @param[in] type -  PLDM Type for which version is requested
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_version_req(uint8_t instance_id, uint32_t transfer_handle,
-			   uint8_t transfer_opflag, uint8_t type,
-			   struct pldm_msg *msg);
-
-/** @brief Decode a GetPLDMVersion response message
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of reponse message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] next_transfer_handle - the next handle for the next part of data
- *  @param[out] transfer_flag - flag to indicate the part of data
- *  @return pldm_completion_codes
- */
-int decode_get_version_resp(const struct pldm_msg *msg, size_t payload_length,
-			    uint8_t *completion_code,
-			    uint32_t *next_transfer_handle,
-			    uint8_t *transfer_flag, ver32_t *version);
-
-/* GetTID */
-
-/** @brief Decode a GetTID response message
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] tid - Pointer to the terminus id
- *  @return pldm_completion_codes
- */
-int decode_get_tid_resp(const struct pldm_msg *msg, size_t payload_length,
-			uint8_t *completion_code, uint8_t *tid);
-
-/* Responder */
-
-/* GetPLDMTypes */
-
-/** @brief Create a PLDM response message for GetPLDMTypes
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] types - pointer to array bitfield8_t[8] containing supported
- *             types (MAX_TYPES/8) = 8), as per DSP0240
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_types_resp(uint8_t instance_id, uint8_t completion_code,
-			  const bitfield8_t *types, struct pldm_msg *msg);
-
-/* GetPLDMCommands */
-
-/** @brief Decode GetPLDMCommands' request data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] type - PLDM Type
- *  @param[out] version - Version for PLDM Type
- *  @return pldm_completion_codes
- */
-int decode_get_commands_req(const struct pldm_msg *msg, size_t payload_length,
-			    uint8_t *type, ver32_t *version);
-
-/** @brief Create a PLDM response message for GetPLDMCommands
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] commands - pointer to array bitfield8_t[32] containing supported
- *             commands (PLDM_MAX_CMDS_PER_TYPE/8) = 32), as per DSP0240
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_commands_resp(uint8_t instance_id, uint8_t completion_code,
-			     const bitfield8_t *commands, struct pldm_msg *msg);
-
-/* GetPLDMVersion */
-
-/** @brief Create a PLDM response for GetPLDMVersion
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_transfer_handle - Handle to identify next portion of
- *              data transfer
- *  @param[in] transfer_flag - Represents the part of transfer
- *  @param[in] version_data - the version data
- *  @param[in] version_size - size of version data
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_version_resp(uint8_t instance_id, uint8_t completion_code,
-			    uint32_t next_transfer_handle,
-			    uint8_t transfer_flag, const ver32_t *version_data,
-			    size_t version_size, struct pldm_msg *msg);
-
-/** @brief Decode a GetPLDMVersion request message
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - length of request message payload
- *  @param[out] transfer_handle - the handle of data
- *  @param[out] transfer_opflag - Transfer Flag
- *  @param[out] type - PLDM type for which version is requested
- *  @return pldm_completion_codes
- */
-int decode_get_version_req(const struct pldm_msg *msg, size_t payload_length,
-			   uint32_t *transfer_handle, uint8_t *transfer_opflag,
-			   uint8_t *type);
-
-/* Requester */
-
-/* GetTID */
-
-/** @brief Create a PLDM request message for GetTID
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_tid_req(uint8_t instance_id, struct pldm_msg *msg);
-
-/** @brief Create a PLDM response message for GetTID
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] tid - Terminus ID
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_tid_resp(uint8_t instance_id, uint8_t completion_code,
-			uint8_t tid, struct pldm_msg *msg);
-
-/* Responder */
-
-/* MultipartRecieve */
-
-/** @brief Decode a PLDM MultipartReceive request message
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - length of request message payload
- *  @param[out] pldm_type - PLDM type for which version is requested
- *  @param[out] transfer_opflag - Transfer Flag
- *  @param[out] transfer_ctx - The context of the packet
- *  @param[out] transfer_handle - The handle of data
- *  @param[out] section_offset - The start of the requested section
- *  @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);
-
-/** @brief Create a PLDM response message containing only cc
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] type - PLDM Type
- *  @param[in] command - PLDM Command
- *  @param[in] cc - PLDM Completion Code
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- */
-int encode_cc_only_resp(uint8_t instance_id, uint8_t type, uint8_t command,
-			uint8_t cc, struct pldm_msg *msg);
-
-/** @brief Create a PLDM message only with the header
- *
- *	@param[in] msg_type - PLDM message type
- *	@param[in] instance_id - Message's instance id
- *	@param[in] pldm_type - PLDM Type
- *	@param[in] command - PLDM Command
- *	@param[out] msg - Message will be written to this
- *
- *	@return pldm_completion_codes
- */
-int encode_pldm_header_only(uint8_t msg_type, uint8_t instance_id,
-			    uint8_t pldm_type, uint8_t command,
-			    struct pldm_msg *msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* BASE_H */
diff --git a/subprojects/libpldm/include/libpldm/bios.h b/subprojects/libpldm/include/libpldm/bios.h
deleted file mode 100644
index a23a671..0000000
--- a/subprojects/libpldm/include/libpldm/bios.h
+++ /dev/null
@@ -1,618 +0,0 @@
-#ifndef BIOS_H
-#define BIOS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <asm/byteorder.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base.h"
-#include "utils.h"
-
-/* 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_ATTR_CURR_VAL_BY_HANDLE_MIN_RESP_BYTES 6
-
-enum pldm_bios_completion_codes {
-	PLDM_BIOS_TABLE_UNAVAILABLE = 0x83,
-	PLDM_INVALID_BIOS_TABLE_DATA_INTEGRITY_CHECK = 0x84,
-	PLDM_INVALID_BIOS_TABLE_TYPE = 0x85,
-	PLDM_INVALID_BIOS_ATTR_HANDLE = 0x88,
-};
-enum pldm_bios_commands {
-	PLDM_GET_BIOS_TABLE = 0x01,
-	PLDM_SET_BIOS_TABLE = 0x02,
-	PLDM_SET_BIOS_ATTRIBUTE_CURRENT_VALUE = 0x07,
-	PLDM_GET_BIOS_ATTRIBUTE_CURRENT_VALUE_BY_HANDLE = 0x08,
-	PLDM_GET_DATE_TIME = 0x0c,
-	PLDM_SET_DATE_TIME = 0x0d,
-};
-
-enum pldm_bios_table_types {
-	PLDM_BIOS_STRING_TABLE,
-	PLDM_BIOS_ATTR_TABLE,
-	PLDM_BIOS_ATTR_VAL_TABLE,
-};
-
-struct pldm_bios_string_table_entry {
-	uint16_t string_handle;
-	uint16_t string_length;
-	char name[1];
-} __attribute__((packed));
-
-struct pldm_bios_attr_table_entry {
-	uint16_t attr_handle;
-	uint8_t attr_type;
-	uint16_t string_handle;
-	uint8_t metadata[1];
-} __attribute__((packed));
-
-struct pldm_bios_enum_attr {
-	uint8_t num_possible_values;
-	uint16_t indices[1];
-} __attribute__((packed));
-
-struct pldm_bios_attr_val_table_entry {
-	uint16_t attr_handle;
-	uint8_t attr_type;
-	uint8_t value[1];
-} __attribute__((packed));
-
-enum pldm_bios_attribute_type {
-	PLDM_BIOS_ENUMERATION = 0x0,
-	PLDM_BIOS_STRING = 0x1,
-	PLDM_BIOS_PASSWORD = 0x2,
-	PLDM_BIOS_INTEGER = 0x3,
-	PLDM_BIOS_ENUMERATION_READ_ONLY = 0x80,
-	PLDM_BIOS_STRING_READ_ONLY = 0x81,
-	PLDM_BIOS_PASSWORD_READ_ONLY = 0x82,
-	PLDM_BIOS_INTEGER_READ_ONLY = 0x83,
-};
-
-/** @struct pldm_get_bios_table_req
- *
- *  structure representing GetBIOSTable request packet
- */
-struct pldm_get_bios_table_req {
-	uint32_t transfer_handle;
-	uint8_t transfer_op_flag;
-	uint8_t table_type;
-} __attribute__((packed));
-
-/** @struct pldm_get_bios_table_resp
- *
- *  structure representing GetBIOSTable response packet
- */
-struct pldm_get_bios_table_resp {
-	uint8_t completion_code;
-	uint32_t next_transfer_handle;
-	uint8_t transfer_flag;
-	uint8_t table_data[1];
-} __attribute__((packed));
-
-/** @struct pldm_get_date_time_resp
- *
- *  Structure representing PLDM get date time response
- */
-struct pldm_get_date_time_resp {
-	uint8_t completion_code; //!< completion code
-	uint8_t seconds;	 //!< Seconds in BCD format
-	uint8_t minutes;	 //!< Minutes in BCD format
-	uint8_t hours;		 //!< Hours in BCD format
-	uint8_t day;		 //!< Day of the month in BCD format
-	uint8_t month;		 //!< Month in BCD format
-	uint16_t year;		 //!< Year in BCD format
-} __attribute__((packed));
-
-/** @struct pldm_set_date_time_req
- *
- *  structure representing SetDateTime request packet
- *
- */
-struct pldm_set_date_time_req {
-	uint8_t seconds; //!< Seconds in BCD format
-	uint8_t minutes; //!< Minutes in BCD format
-	uint8_t hours;	 //!< Hours in BCD format
-	uint8_t day;	 //!< Day of the month in BCD format
-	uint8_t month;	 //!< Month in BCD format
-	uint16_t year;	 //!< Year in BCD format
-} __attribute__((packed));
-
-/** @struct pldm_only_cc_resp
- *
- *  Structure representing PLDM responses only have completion code
- */
-struct pldm_only_cc_resp {
-	uint8_t completion_code;
-} __attribute__((packed));
-
-/** @struct pldm_get_bios_attribute_current_value_by_handle_req
- *
- *  structure representing GetBIOSAttributeCurrentValueByHandle request packet
- */
-struct pldm_get_bios_attribute_current_value_by_handle_req {
-	uint32_t transfer_handle;
-	uint8_t transfer_op_flag;
-	uint16_t attribute_handle;
-} __attribute__((packed));
-
-/** @struct pldm_get_bios_attribute_current_value_by_handle_resp
- *
- *  structure representing GetBIOSAttributeCurrentValueByHandle response
- */
-struct pldm_get_bios_attribute_current_value_by_handle_resp {
-	uint8_t completion_code;
-	uint32_t next_transfer_handle;
-	uint8_t transfer_flag;
-	uint8_t attribute_data[1];
-} __attribute__((packed));
-
-/** @struct pldm_set_bios_attribute_current_value_req
- *
- *  structure representing SetBiosAttributeCurrentValue request packet
- *
- */
-struct pldm_set_bios_attribute_current_value_req {
-	uint32_t transfer_handle;
-	uint8_t transfer_flag;
-	uint8_t attribute_data[1];
-} __attribute__((packed));
-
-/** @struct pldm_set_bios_attribute_current_value_resp
- *
- *  structure representing SetBiosCurrentValue response packet
- *
- */
-struct pldm_set_bios_attribute_current_value_resp {
-	uint8_t completion_code;
-	uint32_t next_transfer_handle;
-} __attribute__((packed));
-
-/** @struct pldm_set_bios_table_req
- *
- *  structure representing SetBIOSTable request packet
- *
- */
-struct pldm_set_bios_table_req {
-	uint32_t transfer_handle;
-	uint8_t transfer_flag;
-	uint8_t table_type;
-	uint8_t table_data[1];
-} __attribute__((packed));
-
-/** @struct pldm_set_bios_table_resp
- *
- *  structure representing SetBIOSTable response packet
- *
- */
-struct pldm_set_bios_table_resp {
-	uint8_t completion_code;
-	uint32_t next_transfer_handle;
-} __attribute__((packed));
-
-/* Requester */
-
-/* GetDateTime */
-
-/** @brief Create a PLDM request message for GetDateTime
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.body.payload'
- */
-
-int encode_get_date_time_req(uint8_t instance_id, struct pldm_msg *msg);
-
-/** @brief Decode a GetDateTime response message
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] seconds - Seconds in BCD format
- *  @param[out] minutes - minutes in BCD format
- *  @param[out] hours - hours in BCD format
- *  @param[out] day - day of month in BCD format
- *  @param[out] month - number of month in BCD format
- *  @param[out] year - year in BCD format
- *  @return pldm_completion_codes
- */
-int decode_get_date_time_resp(const struct pldm_msg *msg, size_t payload_length,
-			      uint8_t *completion_code, uint8_t *seconds,
-			      uint8_t *minutes, uint8_t *hours, uint8_t *day,
-			      uint8_t *month, uint16_t *year);
-
-/* SetBiosAttributeCurrentValue */
-
-/** @brief Create a PLDM request message for SetBiosAttributeCurrentValue
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] transfer_handle - Handle to identify a BIOS table transfer
- *  @param[in] transfer_flag - Flag to indicate what part of the transfer
- * this request represents
- *  @param[in] attribute_data - Contains current value of attribute
- *  @param[in] attribute_length - Length of attribute
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of params
- *         '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);
-
-/** @brief Decode a SetBiosAttributeCurrentValue response message
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] next_transfer_handle - Pointer to a handle that identify the
- *              next portion of the transfer
- *  @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);
-
-/* SetBIOSTable */
-
-/** @brief Create a PLDM request message for SetBIOSTable
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] transfer_handle - Handle to identify a BIOS table transfer
- *  @param[in] transfer_flag - Flag to indicate what part of the transfer
- * 			   this request represents
- *  @param[in] table_type - Indicates what table is being transferred
- *             {BIOSStringTable=0x0, BIOSAttributeTable=0x1,
- *              BIOSAttributeValueTable=0x2}
- *  @param[in] table_data - Contains data specific to the table type
- *  @param[in] table_length - Length of table data
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of params
- *         'msg.payload'
- */
-int encode_set_bios_table_req(uint8_t instance_id, uint32_t transfer_handle,
-			      uint8_t transfer_flag, uint8_t table_type,
-			      const uint8_t *table_data, size_t table_length,
-			      struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Decode a SetBIOSTable response message
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] next_transfer_handle - Pointer to a handle that identify the
- *              next portion of the transfer
- *  @return pldm_completion_codes
- */
-int decode_set_bios_table_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint32_t *next_transfer_handle);
-
-/* Responder */
-
-/* GetDateTime */
-
-/** @brief Create a PLDM response message for GetDateTime
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] seconds - seconds in BCD format
- *  @param[in] minutes - minutes in BCD format
- *  @param[in] hours - hours in BCD format
- *  @param[in] day - day of the month in BCD format
- *  @param[in] month - number of month in BCD format
- *  @param[in] year - year in BCD format
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.body.payload'
- */
-
-int encode_get_date_time_resp(uint8_t instance_id, uint8_t completion_code,
-			      uint8_t seconds, uint8_t minutes, uint8_t hours,
-			      uint8_t day, uint8_t month, uint16_t year,
-			      struct pldm_msg *msg);
-
-/* GetBIOSTable */
-
-/** @brief Create a PLDM response message for GetBIOSTable
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_transfer_handle - handle to identify the next portion of the
- * transfer
- *  @param[in] transfer_flag - To indicate what part of the transfer this
- * response represents
- *  @param[in] table_data - BIOS Table type specific data
- *  @param[in] payload_length - Length of payload message
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- */
-int encode_get_bios_table_resp(uint8_t instance_id, uint8_t completion_code,
-			       uint32_t next_transfer_handle,
-			       uint8_t transfer_flag, uint8_t *table_data,
-			       size_t payload_length, struct pldm_msg *msg);
-
-/** @brief Encode  GetBIOSTable request packet
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] transfer_handle - Handle to identify a BIOS table transfer
- *  @param[in] transfer_op_flag - Flag to indicate the start of a multipart
- *                                 transfer
- *  @param[in] table_type - BIOS table type
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- */
-int encode_get_bios_table_req(uint8_t instance_id, uint32_t transfer_handle,
-			      uint8_t transfer_op_flag, uint8_t table_type,
-			      struct pldm_msg *msg);
-
-/** @brief Decode GetBIOSTable request packet
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] transfer_handle - Handle to identify a BIOS table transfer
- *  @param[out] transfer_op_flag - Flag to indicate the start of a multipart
- * transfer
- *  @param[out] table_type - BIOS table type
- *  @return pldm_completion_codes
- */
-int decode_get_bios_table_req(const struct pldm_msg *msg, size_t payload_length,
-			      uint32_t *transfer_handle,
-			      uint8_t *transfer_op_flag, uint8_t *table_type);
-
-/** @brief Decode GetBIOSTable response packet
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_transfer_handle - handle to identify the next portion of the
- *                                    transfer
- *  @param[in] transfer_flag - To indicate what part of the transfer this
- *                             response represents
- *  @param[out] bios_table_offset - Offset where bios table data should be read
- *                                  in pldm msg
- *  @return pldm_completion_codes
- */
-int decode_get_bios_table_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint32_t *next_transfer_handle,
-			       uint8_t *transfer_flag,
-			       size_t *bios_table_offset);
-
-/* GetBIOSAttributeCurrentValueByHandle */
-
-/** @brief Decode GetBIOSAttributeCurrentValueByHandle request packet
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] transfer_handle - Handle to identify a BIOS attribute transfer
- *  @param[in] transfer_op_flag - Flag to indicate the start of a multipart
- *                                 transfer
- *  @param[in] attribute_handle - Handle to identify the BIOS attribute
- *  @param[out] msg - Message will be written to this
- *  @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);
-
-/** @brief Decode GetBIOSAttributeCurrentValueByHandle response packet
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] next_transfer_handle - handle to identify the next portion of
- * the transfer
- *  @param[out] transfer_flag - To indicate what part of the transfer this
- *                             response represents
- *  @param[out] attribute_data - contains current value of attribute
- *  @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);
-
-/** @brief Decode GetBIOSAttributeCurrentValueByHandle request packet
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] transfer_handle - Handle to identify a BIOS table transfer
- *  @param[out] transfer_op_flag - Flag to indicate the start of a multipart
- * transfer
- *  @param[out] attribute_handle - Handle to identify the BIOS attribute
- *  @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);
-
-/** @brief Create a PLDM response message for
- * GetBIOSAttributeCurrentValueByHandle
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_transfer_handle - handle to identify the next portion of the
- * transfer
- *  @param[in] transfer_flag - To indicate what part of the transfer this
- * response represents
- *  @param[in] attribute_data - contains current value of attribute
- *  @param[in] attribute_length - Length of attribute
- *  @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);
-
-/* SetBiosAttributeCurrentValue */
-
-/** @brief Decode SetBIOSAttributeCurrentValue request packet
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] transfer_handle - Handle to identify a BIOS table transfer
- *  @param[out] transfer_flag - Flag to indicate what part of the transfer
- *                              this request represents
- *  @param[out] attribute - Struct variable_field, contains a pointer to the
- *                          attribute field in the buffer of \p msg, \p msg must
- *                          be valid when \p attribute is used.
- *  @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);
-
-/** @brief Create a PLDM response message for SetBiosAttributeCurrentValue
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_transfer_handle - handle to identify the next portion of the
- *  @param[out] msg - Message will be written to this
- */
-int encode_set_bios_attribute_current_value_resp(uint8_t instance_id,
-						 uint8_t completion_code,
-						 uint32_t next_transfer_handle,
-						 struct pldm_msg *msg);
-
-/** @brief Create a PLDM request message for SetDateTime
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] seconds - Seconds in decimal format. Value range 0~59
- *  @param[in] minutes - minutes in decimal format. Value range 0~59
- *  @param[in] hours - hours in decimal format. Value range 0~23
- *  @param[in] day - day of month in decimal format. Value range 1~31
- *  @param[in] month - number of month in decimal format. Value range 1~12
- *  @param[in] year - year in decimal format. Value range 1970~
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.body.payload'
- */
-int encode_set_date_time_req(uint8_t instance_id, uint8_t seconds,
-			     uint8_t minutes, uint8_t hours, uint8_t day,
-			     uint8_t month, uint16_t year, struct pldm_msg *msg,
-			     size_t payload_length);
-
-/** @brief Decode a SetDateTime request message
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] seconds - seconds in BCD format
- *  @param[out] minutes - minutes in BCD format
- *  @param[out] hours - hours in BCD format
- *  @param[out] day - day of the month in BCD format
- *  @param[out] month - number of month in BCD format
- *  @param[out] year - year in BCD format
- *  @return pldm_completion_codes
- */
-int decode_set_date_time_req(const struct pldm_msg *msg, size_t payload_length,
-			     uint8_t *seconds, uint8_t *minutes, uint8_t *hours,
-			     uint8_t *day, uint8_t *month, uint16_t *year);
-
-/** @brief Create a PLDM response message for SetDateTime
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of response message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.body.payload'
- */
-int encode_set_date_time_resp(uint8_t instance_id, uint8_t completion_code,
-			      struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Decode a SetDateTime response message
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @return pldm_completion_codes
- */
-int decode_set_date_time_resp(const struct pldm_msg *msg, size_t payload_length,
-			      uint8_t *completion_code);
-
-/* SetBIOSTable */
-
-/** @brief Create a PLDM response message for SetBIOSTable
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_transfer_handle - handle to identify the next portion of the
- *             transfer
- *  @param[out] msg - Message will be written to this
- */
-int encode_set_bios_table_resp(uint8_t instance_id, uint8_t completion_code,
-			       uint32_t next_transfer_handle,
-			       struct pldm_msg *msg);
-
-/** @brief Decode SetBIOSTable request packet
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] transfer_handle - Handle to identify a BIOS table transfer
- *  @param[out] transfer_flag - Flag to indicate what part of the transfer
- *                              this request represents
- *  @param[out] table_type - Indicates what table is being transferred
- *             {BIOSStringTable=0x0, BIOSAttributeTable=0x1,
- *              BIOSAttributeValueTable=0x2}
- *  @param[out] table - Struct variable_field, contains data specific to the
- * 				table type and the length of table data.
- *  @return pldm_completion_codes
- */
-int decode_set_bios_table_req(const struct pldm_msg *msg, size_t payload_length,
-			      uint32_t *transfer_handle, uint8_t *transfer_flag,
-			      uint8_t *table_type,
-			      struct variable_field *table);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* BIOS_H */
diff --git a/subprojects/libpldm/include/libpldm/bios_table.h b/subprojects/libpldm/include/libpldm/bios_table.h
deleted file mode 100644
index 284efcb..0000000
--- a/subprojects/libpldm/include/libpldm/bios_table.h
+++ /dev/null
@@ -1,728 +0,0 @@
-#ifndef BIOS_TABLE_H__
-#define BIOS_TABLE_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "bios.h"
-#include "utils.h"
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-
-/** @struct pldm_bios_table_iter
- *  structure representing bios table iterator
- */
-struct pldm_bios_table_iter;
-
-/** @brief Create a bios table iterator
- *  @param[in] table - Pointer to table data
- *  @param[in] length - Length of table data
- *  @param[in] type - Type of pldm bios table
- *  @return Iterator to the beginning
- */
-struct pldm_bios_table_iter *
-pldm_bios_table_iter_create(const void *table, size_t length,
-			    enum pldm_bios_table_types type);
-
-/** @brief Release a bios table iterator
- *  @param[in] iter - Pointer to bios table iterator
- */
-void pldm_bios_table_iter_free(struct pldm_bios_table_iter *iter);
-
-/** @brief Check if the iterator reaches the end of the bios table
- *  @param[in] iter - Pointer to the bios table iterator
- *  @return true if iterator reaches the end
- *  @note *end* is a position after the last entry.
- */
-bool pldm_bios_table_iter_is_end(const struct pldm_bios_table_iter *iter);
-
-/** @brief Get iterator to next entry
- *  @param[in] iter - Pointer the bios table iterator
- */
-void pldm_bios_table_iter_next(struct pldm_bios_table_iter *iter);
-
-/** @brief Get the bios table entry that the iterator points to
- *  @param[in] iter - Pointer to the bios table iterator
- *  @return Pointer to an entry in bios table
- */
-const void *pldm_bios_table_iter_value(struct pldm_bios_table_iter *iter);
-
-/** @brief Get the bios attribute table entry that the iterator points to
- *  @param[in] iter - Pointer the bios attribute table iterator
- *  @return Pointer to an entry in bios attribute table
- */
-static inline const struct pldm_bios_attr_table_entry *
-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);
-}
-
-/** @brief Get the bios string table entry that the iterator ponit to
- *  @param[in] iter - Pointer the bios string table iterator
- *  @return Pointer to an entry in bios string table
- */
-static inline const struct pldm_bios_string_table_entry *
-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);
-}
-
-/** @brief Get the bios attribute value table entry that the iterator ponit to
- *  @param[in] iter - Pointer the bios attribute value table iterator
- *  @return Pointer to an entry in bios attribute value table
- */
-static inline const struct pldm_bios_attr_val_table_entry *
-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);
-}
-
-/** @brief Get the length of an entry in the BIOS String Table
- *  @param[in] string_length - Length of string
- *  @return Length of an entry in bytes
- */
-size_t pldm_bios_table_string_entry_encode_length(uint16_t string_length);
-
-/** @brief Create an entry of BIOS String Table
- *  @param[out] entry - Pointer to a buffer to create an entry
- *  @param[in] entry_length - Length of the buffer to create an entry
- *  @param[in] str - String itself
- *  @param[in] str_length - Length of the string
- */
-void pldm_bios_table_string_entry_encode(void *entry, size_t entry_length,
-					 const char *str, uint16_t str_length);
-
-/** @brief Create an entry of BIOS String Table and check the validity of the
- * parameters
- *  @param[out] entry - Pointer to a buffer to create an entry
- *  @param[in] entry_length - Length of the buffer to create an entry
- *  @param[in] str - String itself
- *  @param[in] str_length - Length of the string
- *  @return pldm_completion_codes
- */
-int pldm_bios_table_string_entry_encode_check(void *entry, size_t entry_length,
-					      const char *str,
-					      uint16_t str_length);
-
-/** @brief Get the string handle for the entry
- *  @param[in] entry - Pointer to a bios string table entry
- *  @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);
-
-/** @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);
-
-/** @brief Get the string(at most one less than *size* characters) from the
- * entry
- *  @param[in] entry - Pointer to a bios string table entry
- *  @param[out] buffer - Pointer to a buffer to store the string
- *  @param[in] size - Size of the buffer to store the string
- *  @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);
-
-/** @brief Get the string from the entry and check the validity of the
- * parameters
- *  @param[in] entry - Pointer to a bios string table entry
- *  @param[out] buffer - Pointer to a buffer to store the string
- *  @param[in] size - Size of the buffer to store the string
- *  @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);
-
-/** @brief Find an entry in bios string table by string
- *  @param[in] table - The BIOS String Table
- *  @param[in] length - Length of the BIOS String Table
- *  @param[in] str - String itself
- *  @return Pointer to an entry in the bios string table
- */
-const struct pldm_bios_string_table_entry *
-pldm_bios_table_string_find_by_string(const void *table, size_t length,
-				      const char *str);
-/** @brief Find an entry in bios string table by handle
- *  @param[in] table - The BIOS String Table
- *  @param[in] length - Length of the BIOS String Table
- *  @param[in] handle - Handle to identify a string in the bios string table
- *  @return Pointer to an entry in the bios string table
- */
-const struct pldm_bios_string_table_entry *
-pldm_bios_table_string_find_by_handle(const void *table, size_t length,
-				      uint16_t handle);
-
-/** @brief Get the attribute handle from the attribute table entry
- *  @param[in] entry - Pointer to bios attribute table entry
- *  @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);
-
-/** @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);
-
-/** @brief Get the attribute name handle from the attribute table entry
- *  @param[in] entry - Pointer to bios attribute table entry
- *  @return handle to identify the name of the attribute, this handle points
- *          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);
-
-/** @brief Find an entry in attribute table by handle
- *  @param[in] table - The BIOS Attribute Table
- *  @param[in] length - Length of the BIOS Attribute Table
- *  @param[in] handle - handle to identify the attribute in the attribute table
- *  @return Pointer to the entry
- */
-const struct pldm_bios_attr_table_entry *
-pldm_bios_table_attr_find_by_handle(const void *table, size_t length,
-				    uint16_t handle);
-
-/** @brief Find an entry in attribute table by string handle
- *  @param[in] table - The BIOS Attribute Table
- *  @param[in] length - Length of the BIOS Attribute Table
- *  @param[in] handle - The string handle
- *  @return Pointer to the entry
- */
-const struct pldm_bios_attr_table_entry *
-pldm_bios_table_attr_find_by_string_handle(const void *table, size_t length,
-					   uint16_t handle);
-
-/** @struct pldm_bios_table_attr_entry_enum_info
- *
- *  An auxiliary structure for passing parameters to @ref
- * pldm_bios_table_attr_entry_enum_encode
- *
- */
-struct pldm_bios_table_attr_entry_enum_info {
-	uint16_t name_handle; //!< attribute name handle
-	bool read_only;	      //!< indicate whether the attribute is read-only
-	uint8_t pv_num;	      //!< number of possible values
-	const uint16_t *pv_handle; //!< handles of possible values
-	uint8_t def_num;	   //!< nnumber of default values
-	const uint8_t *def_index;  //!< indices of default values.
-};
-
-/** @brief Get length that an attribute entry(type: enum) will take
- *  @param[in] pv_num - Number of possible values
- *  @param[in] def_num - Number of default values
- *  @return The length that an entry(type: enum) will take
- */
-size_t pldm_bios_table_attr_entry_enum_encode_length(uint8_t pv_num,
-						     uint8_t def_num);
-
-/** @brief Create an entry of BIOS Attribute Table (type: enum)
- *  @param[out] entry - Pointer to a buffer to create an entry
- *  @param[in] entry_length - Length of the buffer to create an entry
- *  @param[in] info - Pointer to an auxiliary structure @ref
- * 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);
-
-/** @brief Create an entry of BIOS Attribute Table (type: enum) and check the
- * validity of the parameters
- *  @param[out] entry - Pointer to a buffer to create an entry
- *  @param[in] entry_length - Length of the buffer to create an entry
- *  @param[in] info - Pointer to an auxiliary structure @ref
- * pldm_bios_table_attr_entry_enum_info
- *  @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);
-
-/** @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);
-
-/** @brief Get the total number of possible values for the entry and check the
- * validity of the parameters
- *  @param[in] entry - Pointer to bios attribute table entry
- *  @param[out] pv_num - Pointer to total number of possible values
- *  @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);
-
-/** @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);
-
-/** @brief Get the total number of default values for the entry and check the
- * validity of the parameters
- *  @param[in] entry - Pointer to bios attribute table entry
- *  @param[out] def_num - Pointer to total number of default values
- *  @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);
-
-/** @brief Get possible values string handles
- *  @param[in] entry - Pointer to bios attribute table entry
- *  @param[out] pv_hdls - Pointer to a buffer to stroe
- * PossibleValuesStringHandles
- *  @param[in] pv_num - Number of PossibleValuesStringHandles expected
- *  @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);
-
-/** @brief Get possible values string handles and check the validity of the
- * parameters
- *  @param[in] entry - Pointer to bios attribute table entry
- *  @param[out] pv_hdls - Pointer to a buffer to stroe
- * PossibleValuesStringHandles
- *  @param[in] pv_num - Number of PossibleValuesStringHandles the buffer can
- * stroe
- *  @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);
-
-/** @brief Get Indices of default values
- *  @param[in] entry - Pointer to bios attribute table entry
- *  @param[out] def_indices - Pointer to a buffer to store
- *                            default value indices
- *  @param[in] def_num - Number of DefaultValues the buffer can
- *                       store
- *  @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);
-
-/** @struct pldm_bios_table_attr_entry_string_info
- *
- *  An auxiliary structure for passing parameters to @ref
- * pldm_bios_table_attr_entry_string_encode
- *
- */
-struct pldm_bios_table_attr_entry_string_info {
-	uint16_t name_handle;	//!< attribute name handle
-	bool read_only;		//!< indicate whether the attribute is read-only
-	uint8_t string_type;	//!< The type of the string
-	uint16_t min_length;	//!< The minimum length of the string in bytes
-	uint16_t max_length;	//!< The maximum length of the string in bytes
-	uint16_t def_length;	//!< The length of the defaut string in bytes
-	const char *def_string; //!< The default string itself
-};
-
-/** @brief Check fields in @ref pldm_bios_table_attr_entry_string_info
- *  @param[in] info - Pointer to the pldm_bios_table_attr_entry_string_info
- *  @param[out] errmsg - Pointer to an errmsg stored in the statically allocated
- * memory
- *  @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);
-
-/** @brief Get length that an attribute entry(type: string) will take
- *  @param[in] def_str_len - Length of default string
- *  @return The length that an entry(type: string) will take
- */
-size_t pldm_bios_table_attr_entry_string_encode_length(uint16_t def_str_len);
-
-/** @brief Create an entry of BIOS Attribute Table (type: string)
- *  @param[out] entry - Pointer to a buffer to create an entry
- *  @param[in] entry_length - Length of the buffer to create an entry
- *  @param[in] info - Pointer to an auxiliary structure @ref
- * 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);
-
-/** @brief Create an entry of BIOS Attribute Table (type: string) and check the
- * validity of the parameters
- *  @param[out] entry - Pointer to a buffer to create an entry
- *  @param[in] entry_length - Length of the buffer to create an entry
- *  @param[in] info - Pointer to an auxiliary structure @ref
- * pldm_bios_table_attr_entry_string_info
- *  @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);
-
-/** @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);
-
-/** @brief Get the length of default string in bytes for the entry and check the
- * validity of the parameters
- *  @param[in] entry - Pointer to bios attribute table entry
- *  @param[out] def_string_length Pointer to length of default string in bytes
- *  @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);
-
-/** @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);
-
-/** @brief Get maximum length of the string from a bios attribute table entry in
- * bytes
- *  @param[in] entry - Pointer to a bios attribute table entry
- *  @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);
-
-/** @brief Get minimum length of the string from a bios attribute table entry in
- * bytes
- *  @param[in] entry - Pointer to a bios attribute table entry
- *  @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);
-
-/** @brief Get the default string from a bios attribute table entry
- *  @param[out] buffer - Pointer to a buffer to store the string
- *  @param[in] size - Size of the buffer to store the string
- *  @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);
-
-/** @struct pldm_bios_table_attr_entry_integer_info
- *
- *  An auxiliary structure for passing parameters to @ref
- * pldm_bios_table_attr_entry_integer_encode
- *
- */
-struct pldm_bios_table_attr_entry_integer_info {
-	uint16_t name_handle; //!< attribute name handle
-	bool read_only;	      //!< indicate whether the attribute is read-only
-	uint64_t lower_bound; //!< The lower bound on the integer value
-	uint64_t upper_bound; //!< The upper bound on the integer value
-	uint32_t scalar_increment; //!< The scalar value that is used for the
-				   //!< increments to this integer
-	uint64_t default_value;	   //!< The default value of the integer
-};
-
-/** @brief Check fields in @ref pldm_bios_table_attr_entry_integer_info
- *  @param[in] info - Pointer to the pldm_bios_table_attr_entry_integer_info
- *  @param[out] errmsg - Pointer to an errmsg stored in the statically allocated
- * memory
- *  @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);
-
-/** @brief Get length that an attribute entry(type: integer) will take
- *  @return The length that an entry(type: integer) will take
- */
-size_t pldm_bios_table_attr_entry_integer_encode_length();
-
-/** @brief Create an entry of BIOS Attribute Table (type: integer)
- *  @param[out] entry - Pointer to a buffer to create an entry
- *  @param[in] entry_length - Length of the buffer to create an entry
- *  @param[in] info - Pointer to an auxiliary structure @ref
- * 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);
-
-/** @brief Create an entry of BIOS Attribute Table (type: integer) and check the
- * validity of the parameters
- *  @param[out] entry - Pointer to a buffer to create an entry
- *  @param[in] entry_length - Length of the buffer to create an entry
- *  @param[in] info - Pointer to an auxiliary structure @ref
- * pldm_bios_table_attr_entry_integer_info
- *  @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);
-
-/** @brief Decode the specific fields(integer) of attribute table entry
- *  @param[in] entry - Pointer to an entry of attribute table
- *  @param[out] lower - The lower bound on the integer value
- *  @param[out] upper - The upper bound on the integer value
- *  @param[out] scalar - The scalar value that is used for the increments to
- *                       this integer
- *  @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);
-
-/** @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);
-
-/** @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);
-
-/** @brief Get length that an attribute value entry(type: enum) will take
- *  @param[in] count - Total number of current values for this enumeration
- *  @return The length that an entry(type: enum) will take
- */
-size_t pldm_bios_table_attr_value_entry_encode_enum_length(uint8_t count);
-
-/** @brief Create an attribute value entry(type: enum)
- *  @param[out] entry - Pointer to bios attribute value entry
- *  @param[in] entry_length - Length of attribute value entry
- *  @param[in] attr_handle - This handle points to an attribute in the
- *  BIOS Attribute Vlaue Table.
- *  @param[in] attr_type - Type of this attribute in the BIOS Attribute Value
- * Table
- *  @param[in] count - Total number of current values for this enum attribute
- *  @param[in] handle_indexes - Index into the array(provided in the BIOS
- * 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 *handle_indexes);
-
-/** @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);
-
-/** @brief Get CurrentValueStringHandleIndex
- *  @param[in] entry - Pointer to bios attribute value table entry
- *  @param[in, out] handles - Pointer to a buffer to store
- *                            CurrentValueStringHandleIndex
- *  @param[in] number - Number of PossibleValuesStringHandles expected
- *  @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);
-
-/** @brief Create an attribute value entry(type: enum) and check the validity of
- * the parameters
- *  @param[out] entry - Pointer to bios attribute value entry
- *  @param[in] entry_length - Length of attribute value entry
- *  @param[in] attr_handle - This handle points to an attribute in the
- *  BIOS Attribute Vlaue Table.
- *  @param[in] attr_type - Type of this attribute in the BIOS Attribute Value
- * Table
- *  @param[in] count - Total number of current values for this enum attribute
- *  @param[in] handle_indexes - Index into the array(provided in the BIOS
- * Attribute Table) of the possible values of string handles for this attribute.
- *  @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 *handle_indexes);
-
-/** @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
- *  that the current string value is not set.
- *  @return The length that an entry(type: string) will take
- */
-size_t
-pldm_bios_table_attr_value_entry_encode_string_length(uint16_t string_length);
-
-/** @brief Create an attribute value entry(type: string)
- *  @param[out] entry - Pointer to bios attribute value entry
- *  @param[in] entry_length - Length of attribute value entry
- *  @param[in] attr_handle - This handle points to an attribute in the
- *  BIOS Attribute Vlaue Table.
- *  @param[in] attr_type - Type of this attribute in the BIOS Attribute Value
- * Table
- *  @param[in] string_length - Length of current string in bytes. 0 indicates
- * that the current string value is not set.
- *  @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 string_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);
-
-/** @brief Get Current String Itself
- *  @param[in] entry - Pointer to bios attribute value table entry
- *  @param[in, out] current_string - Struct variable_field, contains a pointer
- *                                   to the CurrentString field in the buffer of
- *                                    \p entry, \p entry must be valid
- *                                    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);
-
-/** @brief Create an attribute value entry(type: string) and check the validity
- * of the parameters
- *  @param[out] entry - Pointer to bios attribute value entry
- *  @param[in] entry_length - Length of attribute value entry
- *  @param[in] attr_handle - This handle points to an attribute in the
- *  BIOS Attribute Vlaue Table.
- *  @param[in] attr_type - Type of this attribute in the BIOS Attribute Value
- * Table
- *  @param[in] string_length - Length of current string in bytes. 0 indicates
- * that the current string value is not set.
- *  @param[in] string - The current string itsel
- *  @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 string_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
- */
-size_t pldm_bios_table_attr_value_entry_encode_integer_length();
-
-/** @brief Create an attribute value entry(type: integer)
- *  @param[out] entry - Pointer to bios attribute value entry
- *  @param[in] entry_length - Length of attribute value entry
- *  @param[in] attr_handle - This handle points to an attribute in the
- *  BIOS Attribute Vlaue Table.
- *  @param[in] attr_type - Type of this attribute in the BIOS Attribute Value
- * Table
- *  @param[in] cv - Current Value
- */
-void pldm_bios_table_attr_value_entry_encode_integer(void *entry,
-						     size_t entry_length,
-						     uint16_t attr_handle,
-						     uint8_t attr_type,
-						     uint64_t cv);
-
-/** @brief Get current values for the integer entry
- *  @param[in] entry - Pointer to bios attribute value table entry
- *  @return Current Value
- */
-uint64_t pldm_bios_table_attr_value_entry_integer_decode_cv(
-    const struct pldm_bios_attr_val_table_entry *entry);
-
-/** @brief Create an attribute value entry(type: integer) and check the validity
- * of the parameters
- *  @param[out] entry - Pointer to bios attribute value entry
- *  @param[in] entry_length - Length of attribute value entry
- *  @param[in] attr_handle - This handle points to an attribute in the
- *  BIOS Attribute Vlaue Table.
- *  @param[in] attr_type - Type of this attribute in the BIOS Attribute Value
- * Table
- *  @param[in] cv - Current Value
- *  @return pldm_completion_codes
- */
-int pldm_bios_table_attr_value_entry_encode_integer_check(void *entry,
-							  size_t entry_length,
-							  uint16_t attr_handle,
-							  uint8_t attr_type,
-							  uint64_t cv);
-
-/** @brief Get the handle from the attribute value entry
- *  @param[in] entry - Pointer to bios attribute value entry
- *  @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);
-
-/** @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);
-
-/** @brief Find an entry in attribute value table by handle
- *  @param[in] table - The BIOS Attribute Value Table
- *  @param[in] length - Length of the BIOS Attribute Value Table
- *  @param[in] handle - handle to identify the attribute in the attribute value
- * table
- *  @return Pointer to the entry
- */
-const struct pldm_bios_attr_val_table_entry *
-pldm_bios_table_attr_value_find_by_handle(const void *table, size_t length,
-					  uint16_t handle);
-
-/** @brief Get the size of pad and checksum
- *  @param[in] size_without_pad - Table size without pad
- *  @return The size of pad and checksum
- */
-size_t pldm_bios_table_pad_checksum_size(size_t size_without_pad);
-
-/** @brief Append pad and checksum at the end of the table
- *  @param[in,out] table - Pointer to a buffer of a bios table
- *  @param[in] size - Size of the buffer of a bios table
- *  @param[in] size_without_pad - Table size without pad and checksum
- *  @return Total size of the table
- */
-size_t pldm_bios_table_append_pad_checksum(void *table, size_t size,
-					   size_t size_without_pad);
-
-/** @brief Build a new table and update an entry
- *  @param[in] src_table - Pointer to the source table
- *  @param[in] src_length - Size of the source table
- *  @param[out] dest_table - Pointer to the buffer of destination table
- *  @param[in,out] dest_length - Buffer size of the destination table as input
- *                               parameter and will be assigned the length of
- *                               the new table, if the function returns
- * 				 PLDM_SUCCESS
- *  @param[in] entry - Pointer to an entry
- *  @param[in] entry_length - Size of the entry
- *  @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);
-
-/** @brief Verify the crc value of the complete table
- *  @param[in] table - Pointer to a buffer of a bios table
- *  @param[in] size - Size of the buffer of a bios table
- *  @return true: crc value is correct
- */
-bool pldm_bios_table_checksum(const uint8_t *table, size_t size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/subprojects/libpldm/include/libpldm/entity.h b/subprojects/libpldm/include/libpldm/entity.h
deleted file mode 100644
index 9e657c1..0000000
--- a/subprojects/libpldm/include/libpldm/entity.h
+++ /dev/null
@@ -1,149 +0,0 @@
-#ifndef ENTITY_H
-#define ENTITY_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @brief PLDM Entity ID Codes in DSP0249_1.1.0 specification
- */
-enum pldm_entity_id_codes {
-	PLDM_ENTITY_UNSPECIFIED = 0,
-	PLDM_ENTITY_OTHER = 1,
-
-	/* Miscellaneous Entities */
-	PLDM_ENTITY_NETWORK = 2,
-	PLDM_ENTITY_GROUP = 3,
-	PLDM_ENTITY_REMOTE_MGMT_COMM_DEVICE = 4,
-	PLDM_ENTITY_EXTERNAL_ENVIRONMENT = 5,
-	PLDM_ENTITY_COMM_CHANNEL = 6,
-	PLDM_ENTITY_TERMINUS = 7,
-	PLDM_ENTITY_PLATFORM_EVENT_LOG = 8,
-
-	/* Human Interface Entities */
-	PLDM_ENTITY_KEYPAD = 15,
-	PLDM_ENTITY_SWITCH = 16,
-	PLDM_ENTITY_PUSHBUTTON = 17,
-	PLDM_ENTITY_DISPLAY = 18,
-	PLDM_ENTITY_INDICATOR = 19,
-
-	/* Software/Firmware Entities */
-	PLDM_ENTITY_SYS_MGMT_SW = 30,
-	PLDM_ENTITY_SYS_FIRMWARE = 31,
-	PLDM_ENTITY_OPERATING_SYS = 32,
-	PLDM_ENTITY_VIRTUAL_MACHINE_MANAGER = 33,
-	PLDM_ENTITY_OS_LOADER = 34,
-	PLDM_ENTITY_DEVICE_DRIVER = 35,
-	PLDM_ENTITY_MGMT_CONTROLLER_FW = 36,
-
-	/* Chassis/Enclosure Entities */
-	PLDM_ENTITY_SYSTEM_CHASSIS = 45,
-	PLDM_ENTITY_SUB_CHASSIS = 46,
-	PLDM_ENTITY_DISK_DRIVE_BAY = 47,
-	PLDM_ENTITY_PERIPHERAL_BAY = 48,
-	PLDM_ENTITY_DEVICE_BAY = 49,
-	PLDM_ENTITY_DOOR = 50,
-	PLDM_ENTITY_ACCESS_PANEL = 51,
-	PLDM_ENTITY_COVER = 52,
-
-	/* Board/Card/Module Entities */
-	PLDM_ENTITY_BOARD = 60,
-	PLDM_ENTITY_CARD = 61,
-	PLDM_ENTITY_MODULE = 62,
-	PLDM_ENTITY_SYS_MGMT_MODULE = 63,
-	PLDM_ENTITY_SYS_BOARD = 64,
-	PLDM_ENTITY_MEMORY_BOARD = 65,
-	PLDM_ENTITY_MEMORY_MODULE = 66,
-	PLDM_ENTITY_PROC_MODULE = 67,
-	PLDM_ENTITY_ADD_IN_CARD = 68,
-	PLDM_ENTITY_CHASSIS_FRONT_PANEL_BOARD = 69,
-	PLDM_ENTITY_BACK_PANEL_BOARD = 70,
-	PLDM_ENTITY_POWER_MGMT = 71,
-	PLDM_ENTITY_POWER_SYS_BOARD = 72,
-	PLDM_ENTITY_DRIVE_BACKPLANE = 73,
-	PLDM_ENTITY_SYS_INTERNAL_EXPANSION_BOARD = 74,
-	PLDM_ENTITY_OTHER_SYS_BOARD = 75,
-	PLDM_ENTITY_CHASSIS_BACK_PANEL_BOARD = 76,
-	PLDM_ENTITY_PROCESSING_BLADE = 77,
-	PLDM_ENTITY_CONNECTIVITY_SWITCH = 78,
-	PLDM_ENTITY_PROC_MEMORY_MODULE = 79,
-	PLDM_ENTITY_IO_MODULE = 80,
-	PLDM_ENTITY_PROC_IO_MODULE = 81,
-
-	/* Cooling Entities */
-	PLDM_ENTITY_COOLING_DEVICE = 90,
-	PLDM_ENTITY_COOLING_SUBSYSTEM = 91,
-	PLDM_ENTITY_COOLING_UNIT = 92,
-	PLDM_ENTITY_FAN = 93,
-	PLDM_ENTITY_PELTIER_COOLING_DEVICE = 94,
-	PLDM_ENTITY_LIQUID_COOLING_DEVICE = 95,
-	PLDM_ENTITY_LIQUID_COOLING_SUBSYSTEM = 96,
-
-	/* Storage Device Entities */
-	PLDM_ENTITY_OTHER_STORAGE_DEVICE = 105,
-	PLDM_ENTITY_FLOPPY_DRIVE = 106,
-	PLDM_ENTITY_FIXED_DISK_HARD_DRIVE = 107,
-	PLDM_ENTITY_CD_DRIVE = 108,
-	PLDM_ENTITY_CD_DVD_DRIVE = 109,
-	PLDM_ENTITY_OTHER_SILICON_STORAGE_DEVICE = 110,
-	PLDM_ENTITY_SOLID_STATE_SRIVE = 111,
-
-	/* Power Entities */
-	PLDM_ENTITY_POWER_SUPPLY = 120,
-	PLDM_ENTITY_BATTERY = 121,
-	PLDM_ENTITY_SUPER_CAPACITOR = 122,
-	PLDM_ENTITY_POWER_CONVERTER = 123,
-	PLDM_ENTITY_DC_DC_CONVERTER = 124,
-	PLDM_ENTITY_AC_MAINS_POWER_SUPPLY = 125,
-	PLDM_ENTITY_DC_MAINS_POWER_SUPPLY = 126,
-
-	/* Chip Entities */
-	PLDM_ENTITY_PROC = 135,
-	PLDM_ENTITY_CHIPSET_COMPONENT = 136,
-	PLDM_ENTITY_MGMT_CONTROLLER = 137,
-	PLDM_ENTITY_PERIPHERAL_CONTROLLER = 138,
-	PLDM_ENTITY_SEEPROM = 139,
-	PLDM_ENTITY_NVRAM_CHIP = 140,
-	PLDM_ENTITY_FLASH_MEMORY_CHIP = 141,
-	PLDM_ENTITY_MEMORY_CHIP = 142,
-	PLDM_ENTITY_MEMORY_CONTROLLER = 143,
-	PLDM_ENTITY_NETWORK_CONTROLLER = 144,
-	PLDM_ENTITY_IO_CONTROLLER = 145,
-	PLDM_ENTITY_SOUTH_BRIDGE = 146,
-	PLDM_ENTITY_REAL_TIME_CLOCK = 147,
-	PLDM_ENTITY_FPGA_CPLD_DEVICE = 148,
-	/* Bus Entities */
-	PLDM_ENTITY_OTHER_BUS = 160,
-	PLDM_ENTITY_SYS_BUS = 161,
-	PLDM_ENTITY_I2C_BUS = 162,
-	PLDM_ENTITY_SMBUS_BUS = 163,
-	PLDM_ENTITY_SPI_BUS = 164,
-	PLDM_ENTITY_PCI_BUS = 165,
-	PLDM_ENTITY_PCI_EXPRESS_BUS = 166,
-	PLDM_ENTITY_PECI_BUS = 167,
-	PLDM_ENTITY_LPC_BUS = 168,
-	PLDM_ENTITY_USB_BUS = 169,
-	PLDM_ENTITY_FIREWIRE_BUS = 170,
-	PLDM_ENTITY_SCSI_BUS = 171,
-	PLDM_ENTITY_SATA_SAS_BUS = 172,
-	PLDM_ENTITY_PROC_FRONT_SIDE_BUS = 173,
-	PLDM_ENTITY_INTER_PROC_BUS = 174,
-
-	/* Connectors/Cables */
-	PLDM_ENTITY_CONNECTOR = 185,
-	PLDM_ENTITY_SLOT = 186,
-	PLDM_ENTITY_CABLE = 187,
-	PLDM_ENTITY_INTERCONNECT = 188,
-	PLDM_ENTITY_PLUG = 189,
-	PLDM_ENTITY_SOCKET = 190,
-
-	/* OEM ranges */
-	PLDM_OEM_ENTITY_TYPE_START = 24576,
-	PLDM_OEM_ENTITY_TYPE_END = 32767,
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ENTITY_H */
diff --git a/subprojects/libpldm/include/libpldm/firmware_update.h b/subprojects/libpldm/include/libpldm/firmware_update.h
deleted file mode 100644
index 0dc5e4b..0000000
--- a/subprojects/libpldm/include/libpldm/firmware_update.h
+++ /dev/null
@@ -1,1132 +0,0 @@
-#ifndef FW_UPDATE_H
-#define FW_UPDATE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include "base.h"
-#include "stdbool.h"
-#include "utils.h"
-
-#define PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE 8
-#define PLDM_FWUP_INVALID_COMPONENT_COMPARISON_TIMESTAMP 0xFFFFFFFF
-#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_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
-/* Maximum progress percentage value*/
-#define PLDM_FWUP_MAX_PROGRESS_PERCENT 0x65
-#define PLDM_CANCEL_UPDATE_COMPONENT_REQ_BYTES 0
-#define PLDM_CANCEL_UPDATE_REQ_BYTES 0
-
-/** @brief PLDM Firmware update commands
- */
-enum pldm_firmware_update_commands {
-	PLDM_QUERY_DEVICE_IDENTIFIERS = 0x01,
-	PLDM_GET_FIRMWARE_PARAMETERS = 0x02,
-	PLDM_REQUEST_UPDATE = 0x10,
-	PLDM_PASS_COMPONENT_TABLE = 0x13,
-	PLDM_UPDATE_COMPONENT = 0x14,
-	PLDM_REQUEST_FIRMWARE_DATA = 0x15,
-	PLDM_TRANSFER_COMPLETE = 0x16,
-	PLDM_VERIFY_COMPLETE = 0x17,
-	PLDM_APPLY_COMPLETE = 0x18,
-	PLDM_ACTIVATE_FIRMWARE = 0x1A,
-	PLDM_GET_STATUS = 0x1B,
-	PLDM_CANCEL_UPDATE_COMPONENT = 0x1C,
-	PLDM_CANCEL_UPDATE = 0x1D
-};
-
-/** @brief PLDM Firmware update completion codes
- */
-enum pldm_firmware_update_completion_codes {
-	PLDM_FWUP_NOT_IN_UPDATE_MODE = 0x80,
-	PLDM_FWUP_ALREADY_IN_UPDATE_MODE = 0x81,
-	PLDM_FWUP_DATA_OUT_OF_RANGE = 0x82,
-	PLDM_FWUP_INVALID_TRANSFER_LENGTH = 0x83,
-	PLDM_FWUP_INVALID_STATE_FOR_COMMAND = 0x84,
-	PLDM_FWUP_INCOMPLETE_UPDATE = 0x85,
-	PLDM_FWUP_BUSY_IN_BACKGROUND = 0x86,
-	PLDM_FWUP_CANCEL_PENDING = 0x87,
-	PLDM_FWUP_COMMAND_NOT_EXPECTED = 0x88,
-	PLDM_FWUP_RETRY_REQUEST_FW_DATA = 0x89,
-	PLDM_FWUP_UNABLE_TO_INITIATE_UPDATE = 0x8A,
-	PLDM_FWUP_ACTIVATION_NOT_REQUIRED = 0x8B,
-	PLDM_FWUP_SELF_CONTAINED_ACTIVATION_NOT_PERMITTED = 0x8C,
-	PLDM_FWUP_NO_DEVICE_METADATA = 0x8D,
-	PLDM_FWUP_RETRY_REQUEST_UPDATE = 0x8E,
-	PLDM_FWUP_NO_PACKAGE_DATA = 0x8F,
-	PLDM_FWUP_INVALID_TRANSFER_HANDLE = 0x90,
-	PLDM_FWUP_INVALID_TRANSFER_OPERATION_FLAG = 0x91,
-	PLDM_FWUP_ACTIVATE_PENDING_IMAGE_NOT_PERMITTED = 0x92,
-	PLDM_FWUP_PACKAGE_DATA_ERROR = 0x93
-};
-
-/** @brief String type values defined in the PLDM firmware update specification
- */
-enum pldm_firmware_update_string_type {
-	PLDM_STR_TYPE_UNKNOWN = 0,
-	PLDM_STR_TYPE_ASCII = 1,
-	PLDM_STR_TYPE_UTF_8 = 2,
-	PLDM_STR_TYPE_UTF_16 = 3,
-	PLDM_STR_TYPE_UTF_16LE = 4,
-	PLDM_STR_TYPE_UTF_16BE = 5
-};
-
-/** @brief Descriptor types defined in PLDM firmware update specification
- */
-enum pldm_firmware_update_descriptor_types {
-	PLDM_FWUP_PCI_VENDOR_ID = 0x0000,
-	PLDM_FWUP_IANA_ENTERPRISE_ID = 0x0001,
-	PLDM_FWUP_UUID = 0x0002,
-	PLDM_FWUP_PNP_VENDOR_ID = 0x0003,
-	PLDM_FWUP_ACPI_VENDOR_ID = 0x0004,
-	PLDM_FWUP_IEEE_ASSIGNED_COMPANY_ID = 0x0005,
-	PLDM_FWUP_SCSI_VENDOR_ID = 0x0006,
-	PLDM_FWUP_PCI_DEVICE_ID = 0x0100,
-	PLDM_FWUP_PCI_SUBSYSTEM_VENDOR_ID = 0x0101,
-	PLDM_FWUP_PCI_SUBSYSTEM_ID = 0x0102,
-	PLDM_FWUP_PCI_REVISION_ID = 0x0103,
-	PLDM_FWUP_PNP_PRODUCT_IDENTIFIER = 0x0104,
-	PLDM_FWUP_ACPI_PRODUCT_IDENTIFIER = 0x0105,
-	PLDM_FWUP_ASCII_MODEL_NUMBER_LONG_STRING = 0x0106,
-	PLDM_FWUP_ASCII_MODEL_NUMBER_SHORT_STRING = 0x0107,
-	PLDM_FWUP_SCSI_PRODUCT_ID = 0x0108,
-	PLDM_FWUP_UBM_CONTROLLER_DEVICE_CODE = 0x0109,
-	PLDM_FWUP_VENDOR_DEFINED = 0xFFFF
-};
-
-/** @brief Descriptor types length defined in PLDM firmware update specification
- */
-enum pldm_firmware_update_descriptor_types_length {
-	PLDM_FWUP_PCI_VENDOR_ID_LENGTH = 2,
-	PLDM_FWUP_IANA_ENTERPRISE_ID_LENGTH = 4,
-	PLDM_FWUP_UUID_LENGTH = 16,
-	PLDM_FWUP_PNP_VENDOR_ID_LENGTH = 3,
-	PLDM_FWUP_ACPI_VENDOR_ID_LENGTH = 4,
-	PLDM_FWUP_IEEE_ASSIGNED_COMPANY_ID_LENGTH = 3,
-	PLDM_FWUP_SCSI_VENDOR_ID_LENGTH = 8,
-	PLDM_FWUP_PCI_DEVICE_ID_LENGTH = 2,
-	PLDM_FWUP_PCI_SUBSYSTEM_VENDOR_ID_LENGTH = 2,
-	PLDM_FWUP_PCI_SUBSYSTEM_ID_LENGTH = 2,
-	PLDM_FWUP_PCI_REVISION_ID_LENGTH = 1,
-	PLDM_FWUP_PNP_PRODUCT_IDENTIFIER_LENGTH = 4,
-	PLDM_FWUP_ACPI_PRODUCT_IDENTIFIER_LENGTH = 4,
-	PLDM_FWUP_ASCII_MODEL_NUMBER_LONG_STRING_LENGTH = 40,
-	PLDM_FWUP_ASCII_MODEL_NUMBER_SHORT_STRING_LENGTH = 10,
-	PLDM_FWUP_SCSI_PRODUCT_ID_LENGTH = 16,
-	PLDM_FWUP_UBM_CONTROLLER_DEVICE_CODE_LENGTH = 4
-};
-
-/** @brief ComponentClassification values defined in firmware update
- *         specification
- */
-enum pldm_component_classification_values {
-	PLDM_COMP_UNKNOWN = 0x0000,
-	PLDM_COMP_OTHER = 0x0001,
-	PLDM_COMP_DRIVER = 0x0002,
-	PLDM_COMP_CONFIGURATION_SOFTWARE = 0x0003,
-	PLDM_COMP_APPLICATION_SOFTWARE = 0x0004,
-	PLDM_COMP_INSTRUMENTATION = 0x0005,
-	PLDM_COMP_FIRMWARE_OR_BIOS = 0x0006,
-	PLDM_COMP_DIAGNOSTIC_SOFTWARE = 0x0007,
-	PLDM_COMP_OPERATING_SYSTEM = 0x0008,
-	PLDM_COMP_MIDDLEWARE = 0x0009,
-	PLDM_COMP_FIRMWARE = 0x000A,
-	PLDM_COMP_BIOS_OR_FCODE = 0x000B,
-	PLDM_COMP_SUPPORT_OR_SERVICEPACK = 0x000C,
-	PLDM_COMP_SOFTWARE_BUNDLE = 0x000D,
-	PLDM_COMP_DOWNSTREAM_DEVICE = 0xFFFF
-};
-
-/** @brief ComponentActivationMethods is the bit position in the bitfield that
- *         provides the capability of the FD for firmware activation. Multiple
- *         activation methods can be supported.
- */
-enum pldm_comp_activation_methods {
-	PLDM_ACTIVATION_AUTOMATIC = 0,
-	PLDM_ACTIVATION_SELF_CONTAINED = 1,
-	PLDM_ACTIVATION_MEDIUM_SPECIFIC_RESET = 2,
-	PLDM_ACTIVATION_SYSTEM_REBOOT = 3,
-	PLDM_ACTIVATION_DC_POWER_CYCLE = 4,
-	PLDM_ACTIVATION_AC_POWER_CYCLE = 5,
-	PLDM_SUPPORTS_ACTIVATE_PENDING_IMAGE = 6,
-	PLDM_SUPPORTS_ACTIVATE_PENDING_IMAGE_SET = 7
-};
-
-/** @brief ComponentResponse values in the response of PassComponentTable
- */
-enum pldm_component_responses {
-	PLDM_CR_COMP_CAN_BE_UPDATED = 0,
-	PLDM_CR_COMP_MAY_BE_UPDATEABLE = 1
-};
-
-/** @brief ComponentResponseCode values in the response of PassComponentTable
- */
-enum pldm_component_response_codes {
-	PLDM_CRC_COMP_CAN_BE_UPDATED = 0x00,
-	PLDM_CRC_COMP_COMPARISON_STAMP_IDENTICAL = 0x01,
-	PLDM_CRC_COMP_COMPARISON_STAMP_LOWER = 0x02,
-	PLDM_CRC_INVALID_COMP_COMPARISON_STAMP = 0x03,
-	PLDM_CRC_COMP_CONFLICT = 0x04,
-	PLDM_CRC_COMP_PREREQUISITES_NOT_MET = 0x05,
-	PLDM_CRC_COMP_NOT_SUPPORTED = 0x06,
-	PLDM_CRC_COMP_SECURITY_RESTRICTIONS = 0x07,
-	PLDM_CRC_INCOMPLETE_COMP_IMAGE_SET = 0x08,
-	PLDM_CRC_ACTIVE_IMAGE_NOT_UPDATEABLE_SUBSEQUENTLY = 0x09,
-	PLDM_CRC_COMP_VER_STR_IDENTICAL = 0x0A,
-	PLDM_CRC_COMP_VER_STR_LOWER = 0x0B,
-	PLDM_CRC_VENDOR_COMP_RESP_CODE_RANGE_MIN = 0xD0,
-	PLDM_CRC_VENDOR_COMP_RESP_CODE_RANGE_MAX = 0xEF
-};
-
-/** @brief ComponentCompatibilityResponse values in the response of
- *         UpdateComponent
- */
-enum pldm_component_compatibility_responses {
-	PLDM_CCR_COMP_CAN_BE_UPDATED = 0,
-	PLDM_CCR_COMP_CANNOT_BE_UPDATED = 1
-};
-
-/** @brief ComponentCompatibilityResponse Code values in the response of
- *         UpdateComponent
- */
-enum pldm_component_compatibility_response_codes {
-	PLDM_CCRC_NO_RESPONSE_CODE = 0x00,
-	PLDM_CCRC_COMP_COMPARISON_STAMP_IDENTICAL = 0x01,
-	PLDM_CCRC_COMP_COMPARISON_STAMP_LOWER = 0x02,
-	PLDM_CCRC_INVALID_COMP_COMPARISON_STAMP = 0x03,
-	PLDM_CCRC_COMP_CONFLICT = 0x04,
-	PLDM_CCRC_COMP_PREREQUISITES_NOT_MET = 0x05,
-	PLDM_CCRC_COMP_NOT_SUPPORTED = 0x06,
-	PLDM_CCRC_COMP_SECURITY_RESTRICTIONS = 0x07,
-	PLDM_CCRC_INCOMPLETE_COMP_IMAGE_SET = 0x08,
-	PLDM_CCRC_COMP_INFO_NO_MATCH = 0x09,
-	PLDM_CCRC_COMP_VER_STR_IDENTICAL = 0x0A,
-	PLDM_CCRC_COMP_VER_STR_LOWER = 0x0B,
-	PLDM_CCRC_VENDOR_COMP_RESP_CODE_RANGE_MIN = 0xD0,
-	PLDM_CCRC_VENDOR_COMP_RESP_CODE_RANGE_MAX = 0xEF
-};
-
-/** @brief Common error codes in TransferComplete, VerifyComplete and
- *        ApplyComplete request
- */
-enum pldm_firmware_update_common_error_codes {
-	PLDM_FWUP_TIME_OUT = 0x09,
-	PLDM_FWUP_GENERIC_ERROR = 0x0A
-};
-
-/** @brief TransferResult values in the request of TransferComplete
- */
-enum pldm_firmware_update_transfer_result_values {
-	PLDM_FWUP_TRANSFER_SUCCESS = 0x00,
-	PLDM_FWUP_TRANSFER_ERROR_IMAGE_CORRUPT = 0x02,
-	PLDM_FWUP_TRANSFER_ERROR_VERSION_MISMATCH = 0x02,
-	PLDM_FWUP_FD_ABORTED_TRANSFER = 0x03,
-	PLDM_FWUP_FD_ABORTED_TRANSFER_LOW_POWER_STATE = 0x0B,
-	PLDM_FWUP_FD_ABORTED_TRANSFER_RESET_NEEDED = 0x0C,
-	PLDM_FWUP_FD_ABORTED_TRANSFER_STORAGE_ISSUE = 0x0D,
-	PLDM_FWUP_VENDOR_TRANSFER_RESULT_RANGE_MIN = 0x70,
-	PLDM_FWUP_VENDOR_TRANSFER_RESULT_RANGE_MAX = 0x8F
-};
-
-/**@brief VerifyResult values in the request of VerifyComplete
- */
-enum pldm_firmware_update_verify_result_values {
-	PLDM_FWUP_VERIFY_SUCCESS = 0x00,
-	PLDM_FWUP_VERIFY_ERROR_VERIFICATION_FAILURE = 0x01,
-	PLDM_FWUP_VERIFY_ERROR_VERSION_MISMATCH = 0x02,
-	PLDM_FWUP_VERIFY_FAILED_FD_SECURITY_CHECKS = 0x03,
-	PLDM_FWUP_VERIFY_ERROR_IMAGE_INCOMPLETE = 0x04,
-	PLDM_FWUP_VENDOR_VERIFY_RESULT_RANGE_MIN = 0x90,
-	PLDM_FWUP_VENDOR_VERIFY_RESULT_RANGE_MAX = 0xAF
-};
-
-/**@brief ApplyResult values in the request of ApplyComplete
- */
-enum pldm_firmware_update_apply_result_values {
-	PLDM_FWUP_APPLY_SUCCESS = 0x00,
-	PLDM_FWUP_APPLY_SUCCESS_WITH_ACTIVATION_METHOD = 0x01,
-	PLDM_FWUP_APPLY_FAILURE_MEMORY_ISSUE = 0x02,
-	PLDM_FWUP_VENDOR_APPLY_RESULT_RANGE_MIN = 0xB0,
-	PLDM_FWUP_VENDOR_APPLY_RESULT_RANGE_MAX = 0xCF
-};
-
-/** @brief SelfContainedActivationRequest in the request of ActivateFirmware
- */
-enum pldm_self_contained_activation_req {
-	PLDM_NOT_ACTIVATE_SELF_CONTAINED_COMPONENTS = false,
-	PLDM_ACTIVATE_SELF_CONTAINED_COMPONENTS = true
-};
-
-/** @brief Current state/previous state of the FD or FDP returned in GetStatus
- *         response
- */
-enum pldm_firmware_device_states {
-	PLDM_FD_STATE_IDLE = 0,
-	PLDM_FD_STATE_LEARN_COMPONENTS = 1,
-	PLDM_FD_STATE_READY_XFER = 2,
-	PLDM_FD_STATE_DOWNLOAD = 3,
-	PLDM_FD_STATE_VERIFY = 4,
-	PLDM_FD_STATE_APPLY = 5,
-	PLDM_FD_STATE_ACTIVATE = 6
-};
-
-/** @brief Firmware device aux state in GetStatus response
- */
-enum pldm_get_status_aux_states {
-	PLDM_FD_OPERATION_IN_PROGRESS = 0,
-	PLDM_FD_OPERATION_SUCCESSFUL = 1,
-	PLDM_FD_OPERATION_FAILED = 2,
-	PLDM_FD_IDLE_LEARN_COMPONENTS_READ_XFER = 3
-};
-
-/** @brief Firmware device aux state status in GetStatus response
- */
-enum pldm_get_status_aux_state_status_values {
-	PLDM_FD_AUX_STATE_IN_PROGRESS_OR_SUCCESS = 0x00,
-	PLDM_FD_TIMEOUT = 0x09,
-	PLDM_FD_GENERIC_ERROR = 0x0A,
-	PLDM_FD_VENDOR_DEFINED_STATUS_CODE_START = 0x70,
-	PLDM_FD_VENDOR_DEFINED_STATUS_CODE_END = 0xEF
-};
-
-/** @brief Firmware device reason code in GetStatus response
- */
-enum pldm_get_status_reason_code_values {
-	PLDM_FD_INITIALIZATION = 0,
-	PLDM_FD_ACTIVATE_FW = 1,
-	PLDM_FD_CANCEL_UPDATE = 2,
-	PLDM_FD_TIMEOUT_LEARN_COMPONENT = 3,
-	PLDM_FD_TIMEOUT_READY_XFER = 4,
-	PLDM_FD_TIMEOUT_DOWNLOAD = 5,
-	PLDM_FD_TIMEOUT_VERIFY = 6,
-	PLDM_FD_TIMEOUT_APPLY = 7,
-	PLDM_FD_STATUS_VENDOR_DEFINED_MIN = 200,
-	PLDM_FD_STATUS_VENDOR_DEFINED_MAX = 255
-};
-
-/** @brief Components functional indicator in CancelUpdate response
- */
-enum pldm_firmware_update_non_functioning_component_indication {
-	PLDM_FWUP_COMPONENTS_FUNCTIONING = 0,
-	PLDM_FWUP_COMPONENTS_NOT_FUNCTIONING = 1
-};
-
-/** @struct pldm_package_header_information
- *
- *  Structure representing fixed part of package header information
- */
-struct pldm_package_header_information {
-	uint8_t uuid[PLDM_FWUP_UUID_LENGTH];
-	uint8_t package_header_format_version;
-	uint16_t package_header_size;
-	uint8_t package_release_date_time[PLDM_TIMESTAMP104_SIZE];
-	uint16_t component_bitmap_bit_length;
-	uint8_t package_version_string_type;
-	uint8_t package_version_string_length;
-} __attribute__((packed));
-
-/** @struct pldm_firmware_device_id_record
- *
- *  Structure representing firmware device ID record
- */
-struct pldm_firmware_device_id_record {
-	uint16_t record_length;
-	uint8_t descriptor_count;
-	bitfield32_t device_update_option_flags;
-	uint8_t comp_image_set_version_string_type;
-	uint8_t comp_image_set_version_string_length;
-	uint16_t fw_device_pkg_data_length;
-} __attribute__((packed));
-
-/** @struct pldm_descriptor_tlv
- *
- *  Structure representing descriptor type, length and value
- */
-struct pldm_descriptor_tlv {
-	uint16_t descriptor_type;
-	uint16_t descriptor_length;
-	uint8_t descriptor_data[1];
-} __attribute__((packed));
-
-/** @struct pldm_vendor_defined_descriptor_title_data
- *
- *  Structure representing vendor defined descriptor title sections
- */
-struct pldm_vendor_defined_descriptor_title_data {
-	uint8_t vendor_defined_descriptor_title_str_type;
-	uint8_t vendor_defined_descriptor_title_str_len;
-	uint8_t vendor_defined_descriptor_title_str[1];
-} __attribute__((packed));
-
-/** @struct pldm_component_image_information
- *
- *  Structure representing fixed part of individual component information in
- *  PLDM firmware update package
- */
-struct pldm_component_image_information {
-	uint16_t comp_classification;
-	uint16_t comp_identifier;
-	uint32_t comp_comparison_stamp;
-	bitfield16_t comp_options;
-	bitfield16_t requested_comp_activation_method;
-	uint32_t comp_location_offset;
-	uint32_t comp_size;
-	uint8_t comp_version_string_type;
-	uint8_t comp_version_string_length;
-} __attribute__((packed));
-
-/** @struct pldm_query_device_identifiers_resp
- *
- *  Structure representing query device identifiers response.
- */
-struct pldm_query_device_identifiers_resp {
-	uint8_t completion_code;
-	uint32_t device_identifiers_len;
-	uint8_t descriptor_count;
-} __attribute__((packed));
-
-/** @struct pldm_get_firmware_parameters_resp
- *
- *  Structure representing the fixed part of GetFirmwareParameters response
- */
-struct pldm_get_firmware_parameters_resp {
-	uint8_t completion_code;
-	bitfield32_t capabilities_during_update;
-	uint16_t comp_count;
-	uint8_t active_comp_image_set_ver_str_type;
-	uint8_t active_comp_image_set_ver_str_len;
-	uint8_t pending_comp_image_set_ver_str_type;
-	uint8_t pending_comp_image_set_ver_str_len;
-} __attribute__((packed));
-
-/** @struct pldm_component_parameter_entry
- *
- *  Structure representing component parameter table entry.
- */
-struct pldm_component_parameter_entry {
-	uint16_t comp_classification;
-	uint16_t comp_identifier;
-	uint8_t comp_classification_index;
-	uint32_t active_comp_comparison_stamp;
-	uint8_t active_comp_ver_str_type;
-	uint8_t active_comp_ver_str_len;
-	uint8_t active_comp_release_date[8];
-	uint32_t pending_comp_comparison_stamp;
-	uint8_t pending_comp_ver_str_type;
-	uint8_t pending_comp_ver_str_len;
-	uint8_t pending_comp_release_date[8];
-	bitfield16_t comp_activation_methods;
-	bitfield32_t capabilities_during_update;
-} __attribute__((packed));
-
-/** @struct pldm_request_update_req
- *
- *  Structure representing fixed part of Request Update request
- */
-struct pldm_request_update_req {
-	uint32_t max_transfer_size;
-	uint16_t num_of_comp;
-	uint8_t max_outstanding_transfer_req;
-	uint16_t pkg_data_len;
-	uint8_t comp_image_set_ver_str_type;
-	uint8_t comp_image_set_ver_str_len;
-} __attribute__((packed));
-
-/** @struct pldm_request_update_resp
- *
- *  Structure representing Request Update response
- */
-struct pldm_request_update_resp {
-	uint8_t completion_code;
-	uint16_t fd_meta_data_len;
-	uint8_t fd_will_send_pkg_data;
-} __attribute__((packed));
-
-/** @struct pldm_pass_component_table_req
- *
- *  Structure representing PassComponentTable request
- */
-struct pldm_pass_component_table_req {
-	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;
-} __attribute__((packed));
-
-/** @struct pldm_pass_component_table_resp
- *
- *  Structure representing PassComponentTable response
- */
-struct pldm_pass_component_table_resp {
-	uint8_t completion_code;
-	uint8_t comp_resp;
-	uint8_t comp_resp_code;
-} __attribute__((packed));
-
-/** @struct pldm_update_component_req
- *
- *  Structure representing UpdateComponent request
- */
-struct pldm_update_component_req {
-	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;
-} __attribute__((packed));
-
-/** @struct pldm_update_component_resp
- *
- *  Structure representing UpdateComponent response
- */
-struct pldm_update_component_resp {
-	uint8_t completion_code;
-	uint8_t comp_compatibility_resp;
-	uint8_t comp_compatibility_resp_code;
-	bitfield32_t update_option_flags_enabled;
-	uint16_t time_before_req_fw_data;
-} __attribute__((packed));
-
-/** @struct pldm_request_firmware_data_req
- *
- *  Structure representing RequestFirmwareData request.
- */
-struct pldm_request_firmware_data_req {
-	uint32_t offset;
-	uint32_t length;
-} __attribute__((packed));
-
-/** @struct pldm_apply_complete_req
- *
- *  Structure representing ApplyComplete request.
- */
-struct pldm_apply_complete_req {
-	uint8_t apply_result;
-	bitfield16_t comp_activation_methods_modification;
-} __attribute__((packed));
-
-/** @struct pldm_activate_firmware_req
- *
- *  Structure representing ActivateFirmware request
- */
-struct pldm_activate_firmware_req {
-	bool8_t self_contained_activation_req;
-} __attribute__((packed));
-
-/** @struct activate_firmware_resp
- *
- *  Structure representing Activate Firmware response
- */
-struct pldm_activate_firmware_resp {
-	uint8_t completion_code;
-	uint16_t estimated_time_activation;
-} __attribute__((packed));
-
-/** @struct pldm_get_status_resp
- *
- *  Structure representing GetStatus response.
- */
-struct pldm_get_status_resp {
-	uint8_t completion_code;
-	uint8_t current_state;
-	uint8_t previous_state;
-	uint8_t aux_state;
-	uint8_t aux_state_status;
-	uint8_t progress_percent;
-	uint8_t reason_code;
-	bitfield32_t update_option_flags_enabled;
-} __attribute__((packed));
-
-/** @struct pldm_cancel_update_resp
- *
- *  Structure representing CancelUpdate response.
- */
-struct pldm_cancel_update_resp {
-	uint8_t completion_code;
-	bool8_t non_functioning_component_indication;
-	uint64_t non_functioning_component_bitmap;
-} __attribute__((packed));
-
-/** @brief Decode the PLDM package header information
- *
- *  @param[in] data - pointer to package header information
- *  @param[in] length - available length in the firmware update package
- *  @param[out] package_header_info - pointer to fixed part of PLDM package
- *                                    header information
- *  @param[out] package_version_str - pointer to package version string
- *
- *  @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);
-
-/** @brief Decode individual firmware device ID record
- *
- *  @param[in] data - pointer to firmware device ID record
- *  @param[in] length - available length in the firmware update package
- *  @param[in] component_bitmap_bit_length - ComponentBitmapBitLengthfield
- *                                           parsed from the package header info
- *  @param[out] fw_device_id_record - pointer to fixed part of firmware device
- *                                    id record
- *  @param[out] applicable_components - pointer to ApplicableComponents
- *  @param[out] comp_image_set_version_str - pointer to
- *                                           ComponentImageSetVersionString
- *  @param[out] record_descriptors - pointer to RecordDescriptors
- *  @param[out] fw_device_pkg_data - pointer to FirmwareDevicePackageData
- *
- *  @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);
-
-/** @brief Decode the record descriptor entries in the firmware update package
- *         and the Descriptors in the QueryDeviceIDentifiers command
- *
- *  @param[in] data - pointer to descriptor entry
- *  @param[in] length - remaining length of the descriptor data
- *  @param[out] descriptor_type - pointer to descriptor type
- *  @param[out] descriptor_data - pointer to descriptor data
- *
- *  @return pldm_completion_codes
- */
-int decode_descriptor_type_length_value(const uint8_t *data, size_t length,
-					uint16_t *descriptor_type,
-					struct variable_field *descriptor_data);
-
-/** @brief Decode the vendor defined descriptor value
- *
- *  @param[in] data - pointer to vendor defined descriptor value
- *  @param[in] length - length of the vendor defined descriptor value
- *  @param[out] descriptor_title_str_type - pointer to vendor defined descriptor
- *                                          title string type
- *  @param[out] descriptor_title_str - pointer to vendor defined descriptor
- *                                     title string
- *  @param[out] descriptor_data - pointer to vendor defined descriptor data
- *
- *  @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);
-
-/** @brief Decode individual component image information
- *
- *  @param[in] data - pointer to component image information
- *  @param[in] length - available length in the firmware update package
- *  @param[out] pldm_comp_image_info - pointer to fixed part of component image
- *                                     information
- *  @param[out] comp_version_str - pointer to component version string
- *
- *  @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);
-
-/** @brief Create a PLDM request message for QueryDeviceIdentifiers
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] payload_length - Length of the request message payload
- *  @param[in,out] msg - Message will be written to this
- *
- *  @return pldm_completion_codes
- *
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_query_device_identifiers_req(uint8_t instance_id,
-					size_t payload_length,
-					struct pldm_msg *msg);
-
-/** @brief Decode QueryDeviceIdentifiers response message
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] device_identifiers_len - Pointer to device identifiers length
- *  @param[out] descriptor_count - Pointer to descriptor count
- *  @param[out] descriptor_data - Pointer to descriptor data
- *
- *  @return pldm_completion_codes
- */
-int decode_query_device_identifiers_resp(const struct pldm_msg *msg,
-					 size_t payload_length,
-					 uint8_t *completion_code,
-					 uint32_t *device_identifiers_len,
-					 uint8_t *descriptor_count,
-					 uint8_t **descriptor_data);
-
-/** @brief Create a PLDM request message for GetFirmwareParameters
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] payload_length - Length of the request message payload
- *  @param[in,out] msg - Message will be written to this
- *
- *  @return pldm_completion_codes
- *
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_firmware_parameters_req(uint8_t instance_id,
-				       size_t payload_length,
-				       struct pldm_msg *msg);
-
-/** @brief Decode GetFirmwareParameters response
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] resp_data - Pointer to get firmware parameters response
- *  @param[out] active_comp_image_set_ver_str - Pointer to active component
- *                                              image set version string
- *  @param[out] pending_comp_image_set_ver_str - Pointer to pending component
- *                                               image set version string
- *  @param[out] comp_parameter_table - Pointer to component parameter table
- *
- *  @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);
-
-/** @brief Decode component entries in the component parameter table which is
- *         part of the response of GetFirmwareParameters command
- *
- *  @param[in] data - Component entry
- *  @param[in] length - Length of component entry
- *  @param[out] component_data - Pointer to component parameter table
- *  @param[out] active_comp_ver_str - Pointer to active component version string
- *  @param[out] pending_comp_ver_str - Pointer to pending component version
- *                                     string
- *
- *  @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);
-
-/** @brief Create PLDM request message for RequestUpdate
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] max_transfer_size - Maximum size of the variable payload allowed
- *                                 to be requested via RequestFirmwareData
- *                                 command
- *  @param[in] num_of_comp - Total number of components that will be passed to
- *                           the FD during the update
- *  @param[in] max_outstanding_transfer_req - Total number of outstanding
- * 											  RequestFirmwareData
- * commands that can be sent by the FD
- *  @param[in] pkg_data_len - Value of the FirmwareDevicePackageDataLength field
- *                            present in firmware package header
- *  @param[in] comp_image_set_ver_str_type - StringType of
- *                                           ComponentImageSetVersionString
- *  @param[in] comp_image_set_ver_str_len - The length of the
- *                                          ComponentImageSetVersionString
- *  @param[in] comp_img_set_ver_str - Component Image Set version information
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *
- *  @return pldm_completion_codes
- *
- *  @note Caller is responsible for memory alloc and dealloc of param
- *        'msg.payload'
- */
-int encode_request_update_req(uint8_t instance_id, uint32_t max_transfer_size,
-			      uint16_t num_of_comp,
-			      uint8_t max_outstanding_transfer_req,
-			      uint16_t pkg_data_len,
-			      uint8_t comp_image_set_ver_str_type,
-			      uint8_t comp_image_set_ver_str_len,
-			      const struct variable_field *comp_img_set_ver_str,
-			      struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Decode a RequestUpdate response message
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to hold the completion code
- *  @param[out] fd_meta_data_len - Pointer to hold the length of FD metadata
- *  @param[out] fd_will_send_pkg_data - Pointer to hold information whether FD
- *                                      will send GetPackageData command
- *  @return pldm_completion_codes
- */
-int decode_request_update_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint16_t *fd_meta_data_len,
-			       uint8_t *fd_will_send_pkg_data);
-
-/** @brief Create PLDM request message for PassComponentTable
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] transfer_flag - TransferFlag
- *  @param[in] comp_classification - ComponentClassification
- *  @param[in] comp_identifier - ComponentIdentifier
- *  @param[in] comp_classification_index - ComponentClassificationIndex
- *  @param[in] comp_comparison_stamp - ComponentComparisonStamp
- *  @param[in] comp_ver_str_type - ComponentVersionStringType
- *  @param[in] comp_ver_str_len - ComponentVersionStringLength
- *  @param[in] comp_ver_str - ComponentVersionString
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *                              information
- *
- *  @return pldm_completion_codes
- *
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         '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);
-
-/** @brief Decode PassComponentTable response message
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to hold completion code
- *  @param[out] comp_resp - Pointer to hold component response
- *  @param[out] comp_resp_code - Pointer to hold component response code
- *
- *  @return pldm_completion_codes
- */
-int decode_pass_component_table_resp(const struct pldm_msg *msg,
-				     size_t payload_length,
-				     uint8_t *completion_code,
-				     uint8_t *comp_resp,
-				     uint8_t *comp_resp_code);
-
-/** @brief Create PLDM request message for UpdateComponent
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] comp_classification - ComponentClassification
- *  @param[in] comp_identifier - ComponentIdentifier
- *  @param[in] comp_classification_index - ComponentClassificationIndex
- *  @param[in] comp_comparison_stamp - ComponentComparisonStamp
- *  @param[in] comp_image_size - ComponentImageSize
- *  @param[in] update_option_flags - UpdateOptionFlags
- *  @param[in] comp_ver_str_type - ComponentVersionStringType
- *  @param[in] comp_ver_str_len - ComponentVersionStringLength
- *  @param[in] comp_ver_str - ComponentVersionString
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *                              information
- *
- *  @return pldm_completion_codes
- *
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         '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);
-
-/** @brief Decode UpdateComponent response message
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to hold completion code
- *  @param[out] comp_compatibility_resp - Pointer to hold component
- *                                        compatibility response
- *  @param[out] comp_compatibility_resp_code - Pointer to hold component
- *                                             compatibility response code
- *  @param[out] update_option_flags_enabled - Pointer to hold
- *                                            UpdateOptionsFlagEnabled
- *  @param[out] time_before_req_fw_data - Pointer to hold the estimated time
- *                                        before sending RequestFirmwareData
- *
- *  @return pldm_completion_codes
- */
-int decode_update_component_resp(const struct pldm_msg *msg,
-				 size_t payload_length,
-				 uint8_t *completion_code,
-				 uint8_t *comp_compatibility_resp,
-				 uint8_t *comp_compatibility_resp_code,
-				 bitfield32_t *update_option_flags_enabled,
-				 uint16_t *time_before_req_fw_data);
-
-/** @brief Decode RequestFirmwareData request message
- *
- *	@param[in] msg - Request message
- *	@param[in] payload_length - Length of request message payload
- *	@param[out] offset - Pointer to hold offset
- *	@param[out] length - Pointer to hold the size of the component image
- *                       segment requested by the FD/FDP
- *
- *	@return pldm_completion_codes
- */
-int decode_request_firmware_data_req(const struct pldm_msg *msg,
-				     size_t payload_length, uint32_t *offset,
-				     uint32_t *length);
-
-/** @brief Create PLDM response message for RequestFirmwareData
- *
- *  The ComponentImagePortion is not encoded in the PLDM response message
- *  by encode_request_firmware_data_resp to avoid an additional copy. Populating
- *  ComponentImagePortion in the PLDM response message is handled by the user
- *  of this API. The payload_length validation considers only the
- *  CompletionCode.
- *
- *	@param[in] instance_id - Message's instance id
- *	@param[in] completion_code - CompletionCode
- *	@param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of response message payload
- *
- *	@return pldm_completion_codes
- *
- *	@note  Caller is responsible for memory alloc and dealloc of param
- *		   'msg.payload'
- */
-int encode_request_firmware_data_resp(uint8_t instance_id,
-				      uint8_t completion_code,
-				      struct pldm_msg *msg,
-				      size_t payload_length);
-
-/** @brief Decode TransferComplete request message
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] transfer_result - Pointer to hold TransferResult
- *
- *  @return pldm_completion_codes
- */
-int decode_transfer_complete_req(const struct pldm_msg *msg,
-				 size_t payload_length,
-				 uint8_t *transfer_result);
-
-/** @brief Create PLDM response message for TransferComplete
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - CompletionCode
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of response message payload
- *
- *  @return pldm_completion_codes
- *
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_transfer_complete_resp(uint8_t instance_id, uint8_t completion_code,
-				  struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Decode VerifyComplete request message
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[in] verify_result - Pointer to hold VerifyResult
- *
- *  @return pldm_completion_codes
- */
-int decode_verify_complete_req(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *verify_result);
-
-/** @brief Create PLDM response message for VerifyComplete
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - CompletionCode
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of response message payload
- *
- *  @return pldm_completion_codes
- *
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_verify_complete_resp(uint8_t instance_id, uint8_t completion_code,
-				struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Decode ApplyComplete request message
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[in] apply_result - Pointer to hold ApplyResult
- *  @param[in] comp_activation_methods_modification - Pointer to hold the
- *                                        ComponentActivationMethodsModification
- *
- *  @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);
-
-/** @brief Create PLDM response message for ApplyComplete
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - CompletionCode
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of response message payload
- *
- *  @return pldm_completion_codes
- *
- *  @note Caller is responsible for memory alloc and dealloc of param
- *        'msg.payload'
- */
-int encode_apply_complete_resp(uint8_t instance_id, uint8_t completion_code,
-			       struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Create PLDM request message for ActivateFirmware
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] self_contained_activation_req SelfContainedActivationRequest
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *
- *  @return pldm_completion_codes
- *
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_activate_firmware_req(uint8_t instance_id,
-				 bool8_t self_contained_activation_req,
-				 struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Decode ActivateFirmware response message
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to hold CompletionCode
- *  @param[out] estimated_time_activation - Pointer to hold
- *                                       EstimatedTimeForSelfContainedActivation
- *
- *  @return pldm_completion_codes
- */
-int decode_activate_firmware_resp(const struct pldm_msg *msg,
-				  size_t payload_length,
-				  uint8_t *completion_code,
-				  uint16_t *estimated_time_activation);
-
-/** @brief Create PLDM request message for GetStatus
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *
- *  @return pldm_completion_codes
- *
- *  @note Caller is responsible for memory alloc and dealloc of param
- *        'msg.payload'
- */
-int encode_get_status_req(uint8_t instance_id, struct pldm_msg *msg,
-			  size_t payload_length);
-
-/** @brief Decode GetStatus response message
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to completion code
- *  @param[out] current_state - Pointer to current state machine state
- *  @param[out] previous_state - Pointer to previous different state machine
- *                               state
- *  @param[out] aux_state - Pointer to current operation state of FD/FDP
- *  @param[out] aux_state_status - Pointer to aux state status
- *  @param[out] progress_percent - Pointer to progress percentage
- *  @param[out] reason_code - Pointer to reason for entering current state
- *  @param[out] update_option_flags_enabled - Pointer to update option flags
- *                                            enabled
- *
- *  @return pldm_completion_codes
- */
-int decode_get_status_resp(const struct pldm_msg *msg, size_t payload_length,
-			   uint8_t *completion_code, uint8_t *current_state,
-			   uint8_t *previous_state, uint8_t *aux_state,
-			   uint8_t *aux_state_status, uint8_t *progress_percent,
-			   uint8_t *reason_code,
-			   bitfield32_t *update_option_flags_enabled);
-
-/** @brief Create PLDM request message for CancelUpdateComponent
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *
- *  @return pldm_completion_codes
- *
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_cancel_update_component_req(uint8_t instance_id,
-				       struct pldm_msg *msg,
-				       size_t payload_length);
-
-/** @brief Decode CancelUpdateComponent response message
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to the completion code
- *
- *  @return pldm_completion_codes
- */
-int decode_cancel_update_component_resp(const struct pldm_msg *msg,
-					size_t payload_length,
-					uint8_t *completion_code);
-
-/** @brief Create PLDM request message for CancelUpdate
- *
- *	@param[in] instance_id - Message's instance id
- *	@param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *
- *	@return pldm_completion_codes
- *
- *	@note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_cancel_update_req(uint8_t instance_id, struct pldm_msg *msg,
-			     size_t payload_length);
-
-/** @brief Decode CancelUpdate response message
- *
- *	@param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *	@param[out] completion_code - Pointer to completion code
- *	@param[out] non_functioning_component_indication - Pointer to non
-						       functioning
- *                                                     component indication
- *	@param[out] non_functioning_component_bitmap - Pointer to non
- functioning
- *                                                 component bitmap
- *
- *	@return pldm_completion_codes
- */
-int decode_cancel_update_resp(const struct pldm_msg *msg, size_t payload_length,
-			      uint8_t *completion_code,
-			      bool8_t *non_functioning_component_indication,
-			      bitfield64_t *non_functioning_component_bitmap);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // End of FW_UPDATE_H
diff --git a/subprojects/libpldm/include/libpldm/fru.h b/subprojects/libpldm/include/libpldm/fru.h
deleted file mode 100644
index bb2f571..0000000
--- a/subprojects/libpldm/include/libpldm/fru.h
+++ /dev/null
@@ -1,507 +0,0 @@
-#ifndef FRU_H
-#define FRU_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <asm/byteorder.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base.h"
-#include "utils.h"
-
-#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 FRU_TABLE_CHECKSUM_SIZE 4
-
-enum pldm_fru_completion_codes {
-	PLDM_FRU_INVALID_DATA_TRANSFER_HANDLE = 0x80,
-	PLDM_FRU_INVALID_TRANSFER_FLAG = 0x82,
-	PLDM_FRU_DATA_INVALID_DATA_INTEGRITY_CHECK = 0x84,
-	PLDM_FRU_DATA_STRUCTURE_TABLE_UNAVAILABLE = 0x85,
-};
-
-/** @brief PLDM FRU commands
- */
-enum pldm_fru_commands {
-	PLDM_GET_FRU_RECORD_TABLE_METADATA = 0X01,
-	PLDM_GET_FRU_RECORD_TABLE = 0X02,
-	PLDM_SET_FRU_RECORD_TABLE = 0X03,
-	PLDM_GET_FRU_RECORD_BY_OPTION = 0X04
-};
-
-/** @brief FRU record types
- */
-enum pldm_fru_record_type {
-	PLDM_FRU_RECORD_TYPE_GENERAL = 0X01,
-	PLDM_FRU_RECORD_TYPE_OEM = 0XFE,
-};
-
-/** @brief Encoding type for FRU fields
- */
-enum pldm_fru_field_encoding {
-	PLDM_FRU_ENCODING_UNSPECIFIED = 0X00,
-	PLDM_FRU_ENCODING_ASCII = 0X01,
-	PLDM_FRU_ENCODING_UTF8 = 0X02,
-	PLDM_FRU_ENCODING_UTF16 = 0X03,
-	PLDM_FRU_ENCODING_UTF16LE = 0X04,
-	PLDM_FRU_ENCODING_UTF16BE = 0X05,
-};
-
-/** @brief FRU field types
- */
-enum pldm_fru_field_type {
-	PLDM_FRU_FIELD_TYPE_CHASSIS = 0X01,
-	PLDM_FRU_FIELD_TYPE_MODEL = 0X02,
-	PLDM_FRU_FIELD_TYPE_PN = 0X03,
-	PLDM_FRU_FIELD_TYPE_SN = 0X04,
-	PLDM_FRU_FIELD_TYPE_MANUFAC = 0X05,
-	PLDM_FRU_FIELD_TYPE_MANUFAC_DATE = 0X06,
-	PLDM_FRU_FIELD_TYPE_VENDOR = 0X07,
-	PLDM_FRU_FIELD_TYPE_NAME = 0X08,
-	PLDM_FRU_FIELD_TYPE_SKU = 0X09,
-	PLDM_FRU_FIELD_TYPE_VERSION = 0X0A,
-	PLDM_FRU_FIELD_TYPE_ASSET_TAG = 0X0B,
-	PLDM_FRU_FIELD_TYPE_DESC = 0X0C,
-	PLDM_FRU_FIELD_TYPE_EC_LVL = 0X0D,
-	PLDM_FRU_FIELD_TYPE_OTHER = 0X0E,
-	PLDM_FRU_FIELD_TYPE_IANA = 0X0F,
-};
-
-/** @struct pldm_get_fru_record_table_metadata_resp
- *
- *  Structure representing PLDM get FRU table metadata response.
- */
-struct pldm_get_fru_record_table_metadata_resp {
-	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_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
-} __attribute__((packed));
-
-/** @struct pldm_get_fru_record_table_req
- *
- *  Structure representing PLDM get FRU record table request.
- */
-struct pldm_get_fru_record_table_req {
-	uint32_t data_transfer_handle;
-	uint8_t transfer_operation_flag;
-} __attribute__((packed));
-
-/** @struct pldm_get_fru_record_table_resp
- *
- *  Structure representing PLDM get FRU record table response.
- */
-struct pldm_get_fru_record_table_resp {
-	uint8_t completion_code;
-	uint32_t next_data_transfer_handle;
-	uint8_t transfer_flag;
-	uint8_t fru_record_table_data[1];
-} __attribute__((packed));
-
-struct pldm_get_fru_record_by_option_req {
-	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;
-} __attribute__((packed));
-
-struct pldm_get_fru_record_by_option_resp {
-	uint8_t completion_code;
-	uint32_t next_data_transfer_handle;
-	uint8_t transfer_flag;
-	uint8_t fru_structure_data[1];
-} __attribute__((packed));
-
-struct pldm_set_fru_record_table_req {
-	uint32_t data_transfer_handle;
-	uint8_t transfer_flag;
-	uint8_t fru_record_table_data[1];
-} __attribute__((packed));
-
-struct pldm_set_fru_record_table_resp {
-	uint8_t completion_code;
-	uint32_t next_data_transfer_handle;
-} __attribute__((packed));
-
-/** @struct pldm_fru_record_tlv
- *
- *  Structure representing each FRU field entry (type, length, value)
- */
-struct pldm_fru_record_tlv {
-	uint8_t type;
-	uint8_t length;
-	uint8_t value[1];
-} __attribute__((packed));
-
-/** @struct pldm_fru_record_data_format
- *
- *  Structure representing the FRU record data format
- */
-struct pldm_fru_record_data_format {
-	uint16_t record_set_id;
-	uint8_t record_type;
-	uint8_t num_fru_fields;
-	uint8_t encoding_type;
-	struct pldm_fru_record_tlv tlvs[1];
-} __attribute__((packed));
-
-/* Requester */
-
-/* GetFRURecordTableMetadata */
-
-/** @brief Create a PLDM request message for GetFRURecordTableMetadata
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of the request message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_fru_record_table_metadata_req(uint8_t instance_id,
-					     struct pldm_msg *msg,
-					     size_t payload_length);
-
-/** @brief Decode GetFruRecordTable response data
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] fru_data_major_version - Major version of the FRU Record
- *  @param[out] fru_data_minor_version - Minor version of the FRU Record
- *  @param[out] fru_table_maximum_size - Size of the largest FRU Record data
- *  @param[out] fru_table_length - Total length of the FRU Record Table
- *  @param[out] total_Record_Set_Identifiers - Total number of FRU Record Data
- * structures
- *  @param[out] total_table_records - Total number of records in the table
- *  @param[out] checksum - integrity checksum on the FRU Record Table data
- *  @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);
-
-/* Responder */
-
-/* GetFRURecordTableMetadata */
-
-/** @brief Create a PLDM response message for GetFRURecordTableMetadata
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] fru_data_major_version - Major version of the FRU Record
- *  @param[in] fru_data_minor_version - Minor version of the FRU Record
- *  @param[in] fru_table_maximum_size - Size of the largest FRU Record data
- *  @param[in] fru_table_length - Total length of the FRU Record Table
- *  @param[in] total_Record_Set_Identifiers - Total number of FRU Record Data
- * structures
- *  @param[in] total_table_records - Total number of records in the table
- *  @param[in] checksum - integrity checksum on the FRU Record Table data
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-
-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);
-
-/* GetFruRecordTable */
-
-/** @brief Decode GetFruRecordTable request data
- *
- *  @param[in] msg - PLDM request message payload
- *  @param[in] payload_length - Length of request payload
- *  @param[out] data_transfer_handle - A handle, used to identify a FRU Record
- *  Table data transfer
- *  @param[out] transfer_operation_flag - A flag that indicates whether this is
- *  the start of the transfer
- *  @return pldm_completion_codes
- */
-int decode_get_fru_record_table_req(const struct pldm_msg *msg,
-				    size_t payload_length,
-				    uint32_t *data_transfer_handle,
-				    uint8_t *transfer_operation_flag);
-
-/** @brief Create a PLDM response message for GetFruRecordTable
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_data_transfer_handle - A handle that is used to identify the
- *  next portion of the transfer
- *  @param[in] transfer_flag - The transfer flag that indicates what part of the
- *  transfer this response represents
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg',
- *         and for appending the FRU table to the msg.
- */
-int encode_get_fru_record_table_resp(uint8_t instance_id,
-				     uint8_t completion_code,
-				     uint32_t next_data_transfer_handle,
-				     uint8_t transfer_flag,
-				     struct pldm_msg *msg);
-
-/* GetFRURecordByOption */
-
-/** @brief Decode GetFRURecordByOption request data
- *
- *  @param[in] msg - PLDM request message payload
- *  @param[in] payload_length - Length of request payload
- *  @param[out] data_transfer_handle - A handle, used to identify a FRU Record
- *              Table data transfer
- *  @param[out] fru_table_handle - A handle, used to identify a FRU DATA
- *              records
- *  @param[out] record_set_identifier - FRU record set identifier
- *  @param[out] record_type - FRU record type
- *  @param[out] field_type - FRU field type
- *  @param[out] transfer_op_flag - A flag that indicates whether this is
- *              the start of the transfer
- *  @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);
-
-/** @brief Encode GetFRURecordByOption response data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_data_transfer_handle - A handle that is used to identify the
- *             next portion of the transfer
- *  @param[in] transfer_flag - The transfer flag that indicates what part of the
- *             transfer this response represents
- *  @param[in] fru_structure_data - FRU Structure Data
- *  @param[in] data_size - Size of FRU Structrue Data
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg',
- *         and for appending the FRU table to the msg.
- */
-int encode_get_fru_record_by_option_resp(uint8_t instance_id,
-					 uint8_t completion_code,
-					 uint32_t next_data_transfer_handle,
-					 uint8_t transfer_flag,
-					 const void *fru_structure_data,
-					 size_t data_size, struct pldm_msg *msg,
-					 size_t payload_length);
-
-/* Requester */
-
-/* GetFruRecordTable */
-
-/** @brief Create a PLDM request message for GetFruRecordTable
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] data_transfer_handle - A handle, used to identify a FRU Record
- *  Table data transfer
- *  @param[in] transfer_operation_flag - A flag that indicates whether this is
- *  the start of the transfer
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-
-int encode_get_fru_record_table_req(uint8_t instance_id,
-				    uint32_t data_transfer_handle,
-				    uint8_t transfer_operation_flag,
-				    struct pldm_msg *msg,
-				    size_t payload_length);
-
-/** @brief Decode GetFruRecordTable response data
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] next_data_transfer_handle - A handle used to identify the next
- *  portion of the transfer
- *  @param[out] transfer_flag - The transfer flag that indicates what part of
- * the transfer this response represents
- *  @param[out] fru_record_table_data - This data is a portion of the overall
- * FRU Record Table
- *  @param[out] fru_record_table_length - Length of the FRU record table data
- *  @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);
-
-/** @brief Decode GetFruRecordTable response data, ensuring that the fru
- *         record table section is small enough to fit in the provided buffer.
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] next_data_transfer_handle - A handle used to identify the next
- *  portion of the transfer
- *  @param[out] transfer_flag - The transfer flag that indicates what part of
- * the transfer this response represents
- *  @param[out] fru_record_table_data - This data is a portion of the overall
- * FRU Record Table
- *  @param[out] fru_record_table_length - Length of the FRU record table data
- *  @param[in] max_fru_record_table_length - Maximum length of the FRU record
- * table data. If the response contains more data than this,
- * return PLDM_ERROR_INVALID_LENGTH.
- *  @return pldm_completion_codes
- */
-
-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);
-
-/** @brief Encode the FRU record in the FRU table
- *
- *  @param[in/out] fru_table - Pointer to the FRU table
- *  @param[in] total_size - The size of the table,including the size of FRU
- *                          record to be added to the table.
- *  @param[in/out] curr_size - The size of the table, excluding the size of FRU
- *                          record to be added to the table.
- *  @param[in] record_set_id - FRU record set identifier
- *  @param[in] record_type - FRU record type
- *  @param[in] num_frus - Number of FRU fields
- *  @param[in] encoding - Encoding type for FRU fields
- *  @param[in] tlvs - Pointer to the buffer with all the FRU fields
- *  @param[in] tlvs_size - Size of the  buffer with all the FRU fields
- *
- *  @return pldm_completion_codes
- */
-int encode_fru_record(uint8_t *fru_table, size_t total_size, size_t *curr_size,
-		      uint16_t record_set_id, uint8_t record_type,
-		      uint8_t num_frus, uint8_t encoding, uint8_t *tlvs,
-		      size_t tlvs_size);
-
-/* GetFRURecordByOption */
-
-/** @brief Create a PLDM request message for GetFRURecordByOption
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] data_transfer_handle - A handle, used to identify a FRU Record
- *             Table data transfer
- *  @param[in] fru_table_handle - A handle, used to identify a FRU DATA records
- *  @param[in] record_set_identifier - FRU record set identifier
- *  @param[in] record_type - FRU record type
- *  @param[in] field_type - FRU field type
- *  @param[in] transfer_op_flag - A flag that indicates whether this is
- *             the start of the transfer
- *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         '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);
-
-/** @brief Decode GetFRURecordByOption response data
- *
- *  @param[in] msg - Response message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - Pointer to response msg's PLDM completion code
- *  @param[out] next_data_transfer_handle - A handle used to identify the next
- *              portion of the transfer
- *  @param[out] transfer_flag - The transfer flag that indicates what part of
- *              the transfer this response represents
- *  @param[out] fru_structure_data - FRU Structure Data
- *  @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);
-
-/** @brief Get FRU Record Table By Option
- *  @param[in] table - The source fru record table
- *  @param[in] table_size - Size of the source fru record table
- *  @param[out] record_table - Fru table fetched based on the input option
- *  @param[in/out] record_size - Size of the table fetched by fru record option
- *  @param[in] rsi - FRU record set identifier
- *  @param[in] rt - FRU record type
- *  @param[in] ft - FRU field type
- */
-void get_fru_record_by_option(const uint8_t *table, size_t table_size,
-			      uint8_t *record_table, size_t *record_size,
-			      uint16_t rsi, uint8_t rt, uint8_t ft);
-/* SetFruRecordTable */
-
-/** @brief Decode SetFruRecordTable request data
- *
- *  @param[in] msg - PLDM request message payload
- *  @param[in] payload_length - Length of request payload
- *  @param[out] data_transfer_handle - A handle used to identify a FRU Record
- *                                     table data transfer
- *  @param[out] transfer_flag - Flag to indicate what part of the transfer
- *                              this request represents
- *  @param[out] fru_table_data - Struct variable_field, contains data specific
- *                               to the fru record table and the length of table
- *                               data
- *  @return pldm_completion_codes
- */
-int decode_set_fru_record_table_req(const struct pldm_msg *msg,
-				    size_t payload_length,
-				    uint32_t *data_transfer_handle,
-				    uint8_t *transfer_flag,
-				    struct variable_field *fru_table_data);
-
-/** @brief Create a PLDM response message for SetFruRecordTable
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_transfer_handle - handle to identify the next portion of the
- *                                    transfer
- *  @param[in] payload_length - Length of payload message
- *  @param[out] msg - Argument to capture the Message
- */
-int encode_set_fru_record_table_resp(uint8_t instance_id,
-				     uint8_t completion_code,
-				     uint32_t next_data_transfer_handle,
-				     size_t payload_length,
-				     struct pldm_msg *msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/subprojects/libpldm/include/libpldm/meson.build b/subprojects/libpldm/include/libpldm/meson.build
deleted file mode 100644
index 0d25754..0000000
--- a/subprojects/libpldm/include/libpldm/meson.build
+++ /dev/null
@@ -1,35 +0,0 @@
-libpldm_include_dir += include_directories('.')
-
-libpldm_headers += files(
-  'base.h',
-  'pldm_types.h',
-  'platform.h',
-  'bios.h',
-  'bios_table.h',
-  'entity.h',
-  'states.h',
-  'state_set.h',
-  'fru.h',
-  'utils.h',
-  'pdr.h',
-  'firmware_update.h'
-  )
-
-if get_option('oem-ibm').enabled()
-  libpldm_include_dir += include_directories('oem/ibm')
-  libpldm_headers += files(
-    'oem/ibm/libpldm/entity_oem_ibm.h',
-    'oem/ibm/libpldm/file_io.h',
-    'oem/ibm/libpldm/host.h',
-    'oem/ibm/libpldm/fru_oem_ibm.h',
-    'oem/ibm/libpldm/platform_oem_ibm.h',
-    'oem/ibm/libpldm/state_set_oem_ibm.h'
-  )
-endif
-
-if get_option('requester-api').enabled()
-   libpldm_headers += files(
-    'requester/pldm.h'
-    )
-endif
-
diff --git a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/entity_oem_ibm.h b/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/entity_oem_ibm.h
deleted file mode 100644
index dd80f56..0000000
--- a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/entity_oem_ibm.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef OEM_IBM_ENTITY_H
-#define OEM_IBM_ENTITY_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum pldm_oem_ibm_entity_id_codes {
-	PLDM_OEM_IBM_ENTITY_TPM = 24576,
-	PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE = 24577,
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OEM_IBM_ENTITY_H */
diff --git a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/file_io.h b/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/file_io.h
deleted file mode 100644
index c78627f..0000000
--- a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/file_io.h
+++ /dev/null
@@ -1,901 +0,0 @@
-#ifndef FILEIO_H
-#define FILEIO_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base.h"
-
-/** @brief PLDM Commands in IBM OEM type
- */
-enum pldm_fileio_commands {
-	PLDM_GET_FILE_TABLE = 0x1,
-	PLDM_READ_FILE = 0x4,
-	PLDM_WRITE_FILE = 0x5,
-	PLDM_READ_FILE_INTO_MEMORY = 0x6,
-	PLDM_WRITE_FILE_FROM_MEMORY = 0x7,
-	PLDM_READ_FILE_BY_TYPE_INTO_MEMORY = 0x8,
-	PLDM_WRITE_FILE_BY_TYPE_FROM_MEMORY = 0x9,
-	PLDM_NEW_FILE_AVAILABLE = 0xA,
-	PLDM_READ_FILE_BY_TYPE = 0xB,
-	PLDM_WRITE_FILE_BY_TYPE = 0xC,
-	PLDM_FILE_ACK = 0xD,
-	PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA = 0xE,
-	PLDM_FILE_ACK_WITH_META_DATA = 0xF,
-};
-
-/** @brief PLDM Command specific codes
- */
-enum pldm_fileio_completion_codes {
-	PLDM_FILE_TABLE_UNAVAILABLE = 0x83,
-	PLDM_INVALID_FILE_TABLE_TYPE = 0x85,
-	PLDM_INVALID_FILE_HANDLE = 0x86,
-	PLDM_DATA_OUT_OF_RANGE = 0x87,
-	PLDM_INVALID_FILE_TYPE = 0x89,
-	PLDM_ERROR_FILE_DISCARDED = 0x8A,
-};
-
-/** @brief PLDM File I/O table types
- */
-enum pldm_fileio_table_type {
-	PLDM_FILE_ATTRIBUTE_TABLE = 0,
-	PLDM_OEM_FILE_ATTRIBUTE_TABLE = 1,
-};
-
-/** @brief PLDM File I/O table types
- */
-enum pldm_fileio_file_type {
-	PLDM_FILE_TYPE_PEL = 0x0,
-	PLDM_FILE_TYPE_LID_PERM = 0x1,
-	PLDM_FILE_TYPE_LID_TEMP = 0x2,
-	PLDM_FILE_TYPE_DUMP = 0x3,
-	PLDM_FILE_TYPE_CERT_SIGNING_REQUEST = 0x4,
-	PLDM_FILE_TYPE_SIGNED_CERT = 0x5,
-	PLDM_FILE_TYPE_ROOT_CERT = 0x6,
-	PLDM_FILE_TYPE_LID_MARKER = 0x7,
-	PLDM_FILE_TYPE_RESOURCE_DUMP_PARMS = 0x8,
-	PLDM_FILE_TYPE_RESOURCE_DUMP = 0x9,
-	PLDM_FILE_TYPE_PROGRESS_SRC = 0xA,
-	PLDM_FILE_TYPE_LID_RUNNING = 0x13,
-};
-
-#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
- *
- *  Structure representing ReadFileIntoMemory request and WriteFileFromMemory
- *  request
- */
-struct pldm_read_write_file_memory_req {
-	uint32_t file_handle; //!< A Handle to the file
-	uint32_t offset;      //!< Offset to the file
-	uint32_t length;      //!< Number of bytes to be read/write
-	uint64_t address;     //!< Memory address of the file
-} __attribute__((packed));
-
-/** @struct pldm_read_write_file_memory_resp
- *
- *  Structure representing ReadFileIntoMemory response and WriteFileFromMemory
- *  response
- */
-struct pldm_read_write_file_memory_resp {
-	uint8_t completion_code; //!< completion code
-	uint32_t length;	 //!< Number of bytes read/written
-} __attribute__((packed));
-
-/** @brief Decode ReadFileIntoMemory and WriteFileFromMemory commands request
- *         data
- *
- *  @param[in] msg - Pointer to PLDM request message
- *  @param[in] payload_length - Length of request payload
- *  @param[out] file_handle - A handle to the file
- *  @param[out] offset - Offset to the file at which the read should begin
- *  @param[out] length - Number of bytes to be read
- *  @param[out] address - Memory address where the file content has to be
- *                        written to
- *  @return pldm_completion_codes
- */
-int decode_rw_file_memory_req(const struct pldm_msg *msg, size_t payload_length,
-			      uint32_t *file_handle, uint32_t *offset,
-			      uint32_t *length, uint64_t *address);
-
-/** @brief Create a PLDM response for ReadFileIntoMemory and
- *         WriteFileFromMemory
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] command - PLDM command
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] length - Number of bytes read. This could be less than what the
-			 requester asked for.
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'
- */
-int encode_rw_file_memory_resp(uint8_t instance_id, uint8_t command,
-			       uint8_t completion_code, uint32_t length,
-			       struct pldm_msg *msg);
-
-/** @brief Encode ReadFileIntoMemory and WriteFileFromMemory
- *         commands request data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] command - PLDM command
- *  @param[in] file_handle - A handle to the file
- *  @param[in] offset -  Offset to the file at which the read should begin
- *  @param[in] length -  Number of bytes to be read/written
- *  @param[in] address - Memory address where the file content has to be
- *                       written to
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- */
-int encode_rw_file_memory_req(uint8_t instance_id, uint8_t command,
-			      uint32_t file_handle, uint32_t offset,
-			      uint32_t length, uint64_t address,
-			      struct pldm_msg *msg);
-
-/** @brief Decode ReadFileIntoMemory and WriteFileFromMemory
- *         commands response data
- *
- *  @param[in] msg - pointer to PLDM response message
- *  @param[in] payload_length - Length of response payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] length - Number of bytes to be read/written
- *  @return pldm_completion_codes
- */
-int decode_rw_file_memory_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint32_t *length);
-
-/** @struct pldm_get_file_table_req
- *
- *  Structure representing GetFileTable request
- */
-struct pldm_get_file_table_req {
-	uint32_t transfer_handle; //!< Data transfer handle
-	uint8_t operation_flag;	  //!< Transfer operation flag
-	uint8_t table_type;	  //!< Table type
-} __attribute__((packed));
-
-/** @struct pldm_get_file_table_resp
- *
- *  Structure representing GetFileTable response fixed data
- */
-struct pldm_get_file_table_resp {
-	uint8_t completion_code;       //!< Completion code
-	uint32_t next_transfer_handle; //!< Next data transfer handle
-	uint8_t transfer_flag;	       //!< Transfer flag
-	uint8_t table_data[1];	       //!< Table Data
-} __attribute__((packed));
-
-/** @struct pldm_file_attr_table_entry
- *
- * Structure representing File attribute table entry
- */
-struct pldm_file_attr_table_entry {
-	uint32_t file_handle;		//!< File Handle
-	uint16_t file_name_length;	//!< File name length
-	uint8_t file_attr_table_nst[1]; //!< File name size traits
-} __attribute__((packed));
-
-/** @brief Decode GetFileTable command request data
- *
- *  @param[in] msg - Pointer to PLDM request message
- *  @param[in] payload_length - Length of request payload
- *  @param[out] trasnfer_handle - the handle of data
- *  @param[out] transfer_opflag - Transfer operation flag
- *  @param[out] table_type - the type of file table
- *  @return pldm_completion_codes
- */
-int decode_get_file_table_req(const struct pldm_msg *msg, size_t payload_length,
-			      uint32_t *transfer_handle,
-			      uint8_t *transfer_opflag, uint8_t *table_type);
-
-/** @brief Create a PLDM response for GetFileTable command
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_transfer_handle - Handle to identify next portion of
- *              data transfer
- *  @param[in] transfer_flag - Represents the part of transfer
- *  @param[in] table_data - pointer to file table data
- *  @param[in] table_size - file table size
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'
- */
-int encode_get_file_table_resp(uint8_t instance_id, uint8_t completion_code,
-			       uint32_t next_transfer_handle,
-			       uint8_t transfer_flag, const uint8_t *table_data,
-			       size_t table_size, struct pldm_msg *msg);
-
-/** @brief Encode GetFileTable command request data
- *
- * @param[in] instance_id - Message's instance id
- * @param[in] transfer_handle - the handle of data
- * @param[in] transfer_opflag - Transfer operation flag
- * @param[in] table_type - the type of file table
- * @param[out] msg - Message will be written to this
- * @return pldm_completion_codes
- */
-int encode_get_file_table_req(uint8_t instance_id, uint32_t transfer_handle,
-			      uint8_t transfer_opflag, uint8_t table_type,
-			      struct pldm_msg *msg);
-
-/** @brief Decode GetFileTable command response data
- * @param[in] msg - Response message
- * @param[in] payload_length - length of response message payload
- * @param[out] completion_code - PLDM completion code
- * @param[out] next_transfer_handle -  Handle to identify next portion of data
- * transfer
- * @param[out] transfer_flag - Represents the part of transfer
- * @param[out] file_table_data_start_offset - This data is a portion of the
- * overall File Table
- * @param[out] file_table_length - Length of the File table data
- * @return pldm_completion_codes
- */
-int decode_get_file_table_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint32_t *next_transfer_handle,
-			       uint8_t *transfer_flag,
-			       uint8_t *file_table_data_start_offset,
-			       size_t *file_table_length);
-
-/** @struct pldm_read_file_req
- *
- *  Structure representing ReadFile request
- */
-struct pldm_read_file_req {
-	uint32_t file_handle; //!< Handle to file
-	uint32_t offset;      //!< Offset to file where read starts
-	uint32_t length;      //!< Bytes to be read
-} __attribute__((packed));
-
-/** @struct pldm_read_file_resp
- *
- *  Structure representing ReadFile response data
- */
-struct pldm_read_file_resp {
-	uint8_t completion_code; //!< Completion code
-	uint32_t length;	 //!< Number of bytes read
-	uint8_t file_data[1];	 //!< Address of this is where file data starts
-} __attribute__((packed));
-
-/** @struct pldm_write_file_req
- *
- *  Structure representing WriteFile request
- */
-struct pldm_write_file_req {
-	uint32_t file_handle; //!< Handle to file
-	uint32_t offset;      //!< Offset to file where write starts
-	uint32_t length;      //!< Bytes to be written
-	uint8_t file_data[1]; //!< Address of this is where file data starts
-} __attribute__((packed));
-
-/** @struct pldm_write_file_resp
- *
- *  Structure representing WriteFile response data
- */
-struct pldm_write_file_resp {
-	uint8_t completion_code; //!< Completion code
-	uint32_t length;	 //!< Bytes written
-} __attribute__((packed));
-
-/** @brief Decode Read File commands request
- *
- *  @param[in] msg - PLDM request message payload
- *  @param[in] payload_length - Length of request payload
- *  @param[out] file_handle - A handle to the file
- *  @param[out] offset - Offset to the file at which the read should begin
- *  @param[out] length - Number of bytes read
- *  @return pldm_completion_codes
- */
-int decode_read_file_req(const struct pldm_msg *msg, size_t payload_length,
-			 uint32_t *file_handle, uint32_t *offset,
-			 uint32_t *length);
-
-/** @brief Encode Read File commands request
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] file_handle - A handle to the file
- *  @param[in] offset - Offset to the file at which the read should begin
- *  @param[in] length - Number of bytes read
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'
- */
-int encode_read_file_req(uint8_t instance_id, uint32_t file_handle,
-			 uint32_t offset, uint32_t length,
-			 struct pldm_msg *msg);
-
-/** @brief Decode Read File commands response
- *
- *  @param[in] msg - PLDM response message payload
- *  @param[in] payload_length - Length of request payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] length - Number of bytes read. This could be less than what the
- *                       requester asked for.
- *  @param[out] file_data_offset - Offset where file data should be read in pldm
- * msg.
- *  @return pldm_completion_codes
- */
-int decode_read_file_resp(const struct pldm_msg *msg, size_t payload_length,
-			  uint8_t *completion_code, uint32_t *length,
-			  size_t *file_data_offset);
-
-/** @brief Create a PLDM response for Read File
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] length - Number of bytes read. This could be less than what the
- *                      requester asked for.
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'.
- *  Although read file command response includes file data, this function
- *  does not encode the file data to prevent additional copying of the data.
- *  The position of file data is calculated by caller from address and size
- *  of other input arguments.
- */
-int encode_read_file_resp(uint8_t instance_id, uint8_t completion_code,
-			  uint32_t length, struct pldm_msg *msg);
-
-/** @brief Decode Write File commands request
- *
- *  @param[in] msg - PLDM request message payload
- *  @param[in] payload_length - Length of request payload
- *  @param[out] file_handle - A handle to the file
- *  @param[out] offset - Offset to the file at which the write should begin
- *  @param[out] length - Number of bytes to write
- *  @param[out] file_data_offset - Offset where file data write begins in pldm
- * msg.
- *  @return pldm_completion_codes
- */
-int decode_write_file_req(const struct pldm_msg *msg, size_t payload_length,
-			  uint32_t *file_handle, uint32_t *offset,
-			  uint32_t *length, size_t *file_data_offset);
-
-/** @brief Create a PLDM request for Write File
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] file_handle - A handle to the file
- *  @param[in] offset - Offset to the file at which the read should begin
- *  @param[in] length - Number of bytes written. This could be less than what
- *                      the requester asked for.
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'.
- *  Although write file command request includes file data, this function
- *  does not encode the file data to prevent additional copying of the data.
- *  The position of file data is calculated by caller from address and size
- *  of other input arguments.
- */
-int encode_write_file_req(uint8_t instance_id, uint32_t file_handle,
-			  uint32_t offset, uint32_t length,
-			  struct pldm_msg *msg);
-
-/** @brief Decode Write File commands response
- *
- *  @param[in] msg - PLDM request message payload
- *  @param[in] payload_length - Length of request payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] length - Number of bytes written
- *  @return pldm_completion_codes
- */
-int decode_write_file_resp(const struct pldm_msg *msg, size_t payload_length,
-			   uint8_t *completion_code, uint32_t *length);
-
-/** @brief Create a PLDM response for Write File
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] length - Number of bytes written. This could be less than what
- *                      the requester asked for.
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'
- */
-int encode_write_file_resp(uint8_t instance_id, uint8_t completion_code,
-			   uint32_t length, struct pldm_msg *msg);
-
-/** @struct pldm_read_write_file_by_type_memory_req
- *
- *  Structure representing ReadFileByTypeIntoMemory and
- * WriteFileByTypeFromMemory request
- */
-struct pldm_read_write_file_by_type_memory_req {
-	uint16_t file_type;   //!< Type of file
-	uint32_t file_handle; //!< Handle to file
-	uint32_t offset;      //!< Offset to file where read starts
-	uint32_t length;      //!< Bytes to be read
-	uint64_t address;     //!< Memory address of the file
-} __attribute__((packed));
-
-/** @struct pldm_read_write_file_by_type_memory_resp
- *
- *  Structure representing ReadFileByTypeIntoMemory and
- * WriteFileByTypeFromMemory response
- */
-struct pldm_read_write_file_by_type_memory_resp {
-	uint8_t completion_code; //!< Completion code
-	uint32_t length;	 //!< Number of bytes read
-} __attribute__((packed));
-
-/** @brief Decode ReadFileByTypeIntoMemory and WriteFileByTypeFromMemory
- * commands request data
- *
- *  @param[in] msg - Pointer to PLDM request message
- *  @param[in] payload_length - Length of request payload
- *  @param[in] file_type - Type of the file
- *  @param[out] file_handle - A handle to the file
- *  @param[out] offset - Offset to the file at which the read should begin
- *  @param[out] length - Number of bytes to be read
- *  @param[out] address - Memory address of the file content
- *  @return pldm_completion_codes
- */
-int decode_rw_file_by_type_memory_req(const struct pldm_msg *msg,
-				      size_t payload_length,
-				      uint16_t *file_type,
-				      uint32_t *file_handle, uint32_t *offset,
-				      uint32_t *length, uint64_t *address);
-
-/** @brief Create a PLDM response for ReadFileByTypeIntoMemory and
- * WriteFileByTypeFromMemory
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] command - PLDM command
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] length - Number of bytes read. This could be less than what the
- *                      requester asked for.
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'
- */
-int encode_rw_file_by_type_memory_resp(uint8_t instance_id, uint8_t command,
-				       uint8_t completion_code, uint32_t length,
-				       struct pldm_msg *msg);
-
-/** @brief Encode ReadFileByTypeIntoMemory and WriteFileByTypeFromMemory
- *         commands request data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] command - PLDM command
- *  @param[in] file_type - Type of the file
- *  @param[in] file_handle - A handle to the file
- *  @param[in] offset -  Offset to the file at which the read should begin
- *  @param[in] length -  Number of bytes to be read/written
- *  @param[in] address - Memory address where the file content has to be
- *                       written to
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- */
-int encode_rw_file_by_type_memory_req(uint8_t instance_id, uint8_t command,
-				      uint16_t file_type, uint32_t file_handle,
-				      uint32_t offset, uint32_t length,
-				      uint64_t address, struct pldm_msg *msg);
-
-/** @brief Decode ReadFileTypeIntoMemory and WriteFileTypeFromMemory
- *         commands response data
- *
- *  @param[in] msg - pointer to PLDM response message
- *  @param[in] payload_length - Length of response payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] length - Number of bytes to be read/written
- *  @return pldm_completion_codes
- */
-int decode_rw_file_by_type_memory_resp(const struct pldm_msg *msg,
-				       size_t payload_length,
-				       uint8_t *completion_code,
-				       uint32_t *length);
-
-/** @struct pldm_new_file_req
- *
- *  Structure representing NewFile request
- */
-struct pldm_new_file_req {
-	uint16_t file_type;   //!< Type of file
-	uint32_t file_handle; //!< Handle to file
-	uint64_t length;      //!< Number of bytes in new file
-} __attribute__((packed));
-
-/** @struct pldm_new_file_resp
- *
- *  Structure representing NewFile response data
- */
-struct pldm_new_file_resp {
-	uint8_t completion_code; //!< Completion code
-} __attribute__((packed));
-
-/** @brief Decode NewFileAvailable command request data
- *
- *  @param[in] msg - Pointer to PLDM request message
- *  @param[in] payload_length - Length of request payload
- *  @param[in] file_type - Type of the file
- *  @param[out] file_handle - A handle to the file
- *  @param[out] length - Number of bytes in new file
- *  @return pldm_completion_codes
- */
-int decode_new_file_req(const struct pldm_msg *msg, size_t payload_length,
-			uint16_t *file_type, uint32_t *file_handle,
-			uint64_t *length);
-
-/** @brief Create a PLDM response for NewFileAvailable
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'
- */
-int encode_new_file_resp(uint8_t instance_id, uint8_t completion_code,
-			 struct pldm_msg *msg);
-
-/** @brief Encode NewFileAvailable command request data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] file_type - Type of the file
- *  @param[in] file_handle - A handle to the file
- *  @param[in] length -  Number of bytes in new file
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- */
-int encode_new_file_req(uint8_t instance_id, uint16_t file_type,
-			uint32_t file_handle, uint64_t length,
-			struct pldm_msg *msg);
-
-/** @brief Decode NewFileAvailable command response data
- *
- *  @param[in] msg - pointer to PLDM response message
- *  @param[in] payload_length - Length of response payload
- *  @param[out] completion_code - PLDM completion code
- *  @return pldm_completion_codes
- */
-int decode_new_file_resp(const struct pldm_msg *msg, size_t payload_length,
-			 uint8_t *completion_code);
-
-/** @struct pldm_read_write_file_by_type_req
- *
- *  Structure representing ReadFileByType and
- *  WriteFileByType request
- */
-struct pldm_read_write_file_by_type_req {
-	uint16_t file_type;   //!< Type of file
-	uint32_t file_handle; //!< Handle to file
-	uint32_t offset;      //!< Offset to file where read/write starts
-	uint32_t length;      //!< Bytes to be read
-} __attribute__((packed));
-
-/** @struct pldm_read_write_file_by_type_resp
- *
- *  Structure representing ReadFileByType and
- *  WriteFileByType response
- */
-struct pldm_read_write_file_by_type_resp {
-	uint8_t completion_code; //!< Completion code
-	uint32_t length;	 //!< Number of bytes read
-} __attribute__((packed));
-
-/** @brief Decode ReadFileByType and WriteFileByType
- *  commands request data
- *
- *  @param[in] msg - Pointer to PLDM request message
- *  @param[in] payload_length - Length of request payload
- *  @param[out] file_type - Type of the file
- *  @param[out] file_handle - A handle to the file
- *  @param[out] offset - Offset to the file at which the read/write should begin
- *  @param[out] length - Number of bytes to be read/written
- *  @return pldm_completion_codes
- */
-int decode_rw_file_by_type_req(const struct pldm_msg *msg,
-			       size_t payload_length, uint16_t *file_type,
-			       uint32_t *file_handle, uint32_t *offset,
-			       uint32_t *length);
-
-/** @brief Create a PLDM response for ReadFileByType and
- *  WriteFileByType
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] command - PLDM command
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] length - Number of bytes read/written. This could be less than
- *                      what the requester asked for.
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'
- *  @note File content has to be copied directly by the caller.
- */
-int encode_rw_file_by_type_resp(uint8_t instance_id, uint8_t command,
-				uint8_t completion_code, uint32_t length,
-				struct pldm_msg *msg);
-
-/** @brief Encode ReadFileByType and WriteFileByType
- *         commands request data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] command - PLDM command
- *  @param[in] file_type - Type of the file
- *  @param[in] file_handle - A handle to the file
- *  @param[in] offset -  Offset to the file at which the read should begin
- *  @param[in] length -  Number of bytes to be read/written
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note File content has to be read directly by the caller.
- */
-int encode_rw_file_by_type_req(uint8_t instance_id, uint8_t command,
-			       uint16_t file_type, uint32_t file_handle,
-			       uint32_t offset, uint32_t length,
-			       struct pldm_msg *msg);
-
-/** @brief Decode ReadFileByType and WriteFileByType
- *         commands response data
- *
- *  @param[in] msg - pointer to PLDM response message
- *  @param[in] payload_length - Length of response payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] length - Number of bytes to be read/written
- *  @return pldm_completion_codes
- */
-int decode_rw_file_by_type_resp(const struct pldm_msg *msg,
-				size_t payload_length, uint8_t *completion_code,
-				uint32_t *length);
-
-/** @struct pldm_file_ack_req
- *
- *  Structure representing FileAck request
- */
-struct pldm_file_ack_req {
-	uint16_t file_type;   //!< Type of file
-	uint32_t file_handle; //!< Handle to file
-	uint8_t file_status;  //!< Status of file processing
-} __attribute__((packed));
-
-/** @struct pldm_file_ack_resp
- *
- *  Structure representing NewFile response data
- */
-struct pldm_file_ack_resp {
-	uint8_t completion_code; //!< Completion code
-} __attribute__((packed));
-
-/** @brief Decode FileAck command request data
- *
- *  @param[in] msg - Pointer to PLDM request message
- *  @param[in] payload_length - Length of request payload
- *  @param[out] file_type - Type of the file
- *  @param[out] file_handle - A handle to the file
- *  @param[out] file_status - Status of file processing
- *  @return pldm_completion_codes
- */
-int decode_file_ack_req(const struct pldm_msg *msg, size_t payload_length,
-			uint16_t *file_type, uint32_t *file_handle,
-			uint8_t *file_status);
-
-/** @brief Create a PLDM response for FileAck
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'
- */
-int encode_file_ack_resp(uint8_t instance_id, uint8_t completion_code,
-			 struct pldm_msg *msg);
-
-/** @brief Encode FileAck command request data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] file_type - Type of the file
- *  @param[in] file_handle - A handle to the file
- *  @param[in] file_status - Status of file processing
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- */
-int encode_file_ack_req(uint8_t instance_id, uint16_t file_type,
-			uint32_t file_handle, uint8_t file_status,
-			struct pldm_msg *msg);
-
-/** @brief Decode FileAck command response data
- *
- *  @param[in] msg - pointer to PLDM response message
- *  @param[in] payload_length - Length of response payload
- *  @param[out] completion_code - PLDM completion code
- *  @return pldm_completion_codes
- */
-int decode_file_ack_resp(const struct pldm_msg *msg, size_t payload_length,
-			 uint8_t *completion_code);
-
-/* FileAckWithMetadata */
-
-/** @struct pldm_file_ack_with_meta_data_req
- *
- *  Structure representing FileAckWithMetadata request
- */
-struct pldm_file_ack_with_meta_data_req {
-	uint16_t file_type;	   //!< Type of file
-	uint32_t file_handle;	   //!< Handle to file
-	uint8_t file_status;	   //!< Status of file processing
-	uint32_t file_meta_data_1; //!< Meta data specific to file type 1
-	uint32_t file_meta_data_2; //!< Meta data specific to file type 2
-	uint32_t file_meta_data_3; //!< Meta data specific to file type 3
-	uint32_t file_meta_data_4; //!< meta data specific to file type 4
-} __attribute__((packed));
-
-/** @struct pldm_file_ack_with_meta_data_resp
- *
- *  Structure representing FileAckWithMetadata response
- */
-struct pldm_file_ack_with_meta_data_resp {
-	uint8_t completion_code; //!< Completion code
-} __attribute__((packed));
-
-/** @brief Encode FileAckWithMetadata request data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] file_type - Type of the file
- *  @param[in] file_handle - A handle to the file
- *  @param[in] file_status - Status of file processing
- *  @param[in] file_meta_data_1 - meta data specific to file type 1
- *  @param[in] file_meta_data_2 - meta data specific to file type 2
- *  @param[in] file_meta_data_3 - meta data specific to file type 3
- *  @param[in] file_meta_data_4 - Meta data specific to file type 4
- *  @param[out] msg - Message will be written to this
- *  @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);
-
-/** @brief Decode FileAckWithMetadata command response data
- *
- * @param[in] msg - pointer to PLDM response message
- * @param[in] payload_length - Length of response payload
- * @param[out] completion_code - PLDM completion code
- * @return pldm_completion_codes
- */
-int decode_file_ack_with_meta_data_resp(const struct pldm_msg *msg,
-					size_t payload_length,
-					uint8_t *completion_code);
-
-/** @brief Decode FileAckWithMetadata request data
- *
- * @param[in] msg - Pointer to PLDM request message
- * @param[in] payload_length - Length of request payload
- * @param[out] file_type - Type of the file
- * @param[out] file_handle - A handle to the file
- * @param[out] file_status - Status of file processing
- * @param[out] file_meta_data_1 - meta data specific to file type 1
- * @param[out] file_meta_data_2 - meta data specific to file type 2
- * @param[out] file_meta_data_3 - meta data specific to file type 3
- * @param[out] file_meta_data_4 - Meta data specific to file type 4
- * @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);
-
-/** @brief Create a PLDM response message for FileAckWithMetadata
- *
- * @param[in] instance_id - Message's instance id
- * @param[in] completion_code - PLDM completion code
- * @param[in,out] msg - Message will be written to this
- * @return pldm_completion_codes
- */
-int encode_file_ack_with_meta_data_resp(uint8_t instance_id,
-					uint8_t completion_code,
-					struct pldm_msg *msg);
-
-/* NewFileAvailableWithMetaData */
-
-/** @struct pldm_new_file_with_metadata_req
- *
- *  Structure representing NewFileAvailableWithMetaData request
- */
-
-struct pldm_new_file_with_metadata_req {
-	uint16_t file_type;	   //!< Type of file
-	uint32_t file_handle;	   //!< Handle to file
-	uint64_t length;	   //!< Number of bytes in new file
-	uint32_t file_meta_data_1; //!< Meta data specific to file type 1
-	uint32_t file_meta_data_2; //!< Meta data specific to file type 2
-	uint32_t file_meta_data_3; //!< Meta data specific to file type 3
-	uint32_t file_meta_data_4; //!< Meta data specific to file type 4
-} __attribute__((packed));
-
-/** @struct pldm_new_file_with_metadata_resp
- *
- *  Structure representing NewFileAvailableWithMetaData response data
- */
-struct pldm_new_file_with_metadata_resp {
-	uint8_t completion_code; //!< Completion code
-} __attribute__((packed));
-
-/** @brief Encode NewFileAvailableWithMetaData request data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] file_type - Type of the file
- *  @param[in] file_handle - A handle to the file
- *  @param[in] length -  Number of bytes in new file
- *  @param[in] file_meta_data_1 - Meta data specific to file type 1
- *  @param[in] file_meta_data_2 - Meta data specific to file type 2
- *  @param[in] file_meta_data_3 - Meta data specific to file type 3
- *  @param[in] file_meta_data_4 - Meta data specific to file type 4
- *  @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);
-
-/** @brief Decode NewFileAvailableWithMetaData response data
- *
- *  @param[in] msg - pointer to PLDM response message
- *  @param[in] payload_length - Length of response payload
- *  @param[out] completion_code - PLDM completion code
- *  @return pldm_completion_codes
- */
-int decode_new_file_with_metadata_resp(const struct pldm_msg *msg,
-				       size_t payload_length,
-				       uint8_t *completion_code);
-
-/** @brief Decode NewFileAvailableWithMetaData request data
- *
- *  @param[in] msg - Pointer to PLDM request message
- *  @param[in] payload_length - Length of request payload
- *  @param[out] file_type - Type of the file
- *  @param[out] file_handle - A handle to the file
- *  @param[out] length - Number of bytes in new file
- *  @param[out] file_meta_data_1 - Meta data specific to file type 1
- *  @param[out] file_meta_data_2 - Meta data specific to file type 2
- *  @param[out] file_meta_data_3 - Meta data specific to file type 3
- *  @param[out] file_meta_data_4 - Meta data specific to file type 4
- *  @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);
-
-/** @brief Create a PLDM response for NewFileAvailableWithMetaData
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in,out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param 'msg'
- */
-int encode_new_file_with_metadata_resp(uint8_t instance_id,
-				       uint8_t completion_code,
-				       struct pldm_msg *msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FILEIO_H */
diff --git a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/fru_oem_ibm.h b/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/fru_oem_ibm.h
deleted file mode 100644
index c97f8b0..0000000
--- a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/fru_oem_ibm.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef OEM_IBM_FRU_H
-#define OEM_IBM_FRU_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-#include <stdint.h>
-
-enum pldm_oem_ibm_fru_field_type {
-	PLDM_OEM_FRU_FIELD_TYPE_IANA = 0X01,
-	PLDM_OEM_FRU_FIELD_TYPE_RT = 0X02,
-	PLDM_OEM_FRU_FIELD_TYPE_LOCATION_CODE = 0XFE,
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OEM_IBM_FRU_H */
diff --git a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/host.h b/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/host.h
deleted file mode 100644
index ed121ae..0000000
--- a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/host.h
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef OEM_IBM_HOST_H
-#define OEM_IBM_HOST_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base.h"
-
-/* Maximum size for request */
-#define PLDM_GET_ALERT_STATUS_REQ_BYTES 1
-
-/* Response lengths are inclusive of completion code */
-#define PLDM_GET_ALERT_STATUS_RESP_BYTES 9
-
-enum pldm_host_commands {
-	PLDM_HOST_GET_ALERT_STATUS = 0xF0 // Custom oem cmd
-};
-
-/** @brief PLDM Command specific codes
- */
-enum pldm_host_completion_codes { PLDM_HOST_UNSUPPORTED_FORMAT_VERSION = 0x81 };
-
-/** @struct pldm_get_alert_states_resp
- *
- * Structure representing GetAlertStatus response packet
- */
-struct pldm_get_alert_status_resp {
-	uint8_t completion_code;
-	uint32_t rack_entry;
-	uint32_t pri_cec_node;
-} __attribute__((packed));
-
-/* Requester */
-
-/* GetAlertStatus */
-
-/** @brief Create a PLDM request message for GetAlertStatus
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] version_id - The command/response format. 0x00 for this format
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_alert_status_req(uint8_t instance_id, uint8_t version_id,
-				struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Decode GetAlertStatus response data
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] rack_entry - Enclosure ID, Alert Status, Flags, Config ID
- *  @param[out] pri_cec_node - Enclosure ID, Alert Status, Flags, Config ID
- *  @return pldm_completion_codes
- */
-int decode_get_alert_status_resp(const struct pldm_msg *msg,
-				 size_t payload_length,
-				 uint8_t *completion_code, uint32_t *rack_entry,
-				 uint32_t *pri_cec_node);
-
-/* Responder */
-
-/* GetAlertStatus */
-
-/** @brief Decode GetAlertStatus request data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] version_id - the command/response format. 0x00 for this format
- *  @return pldm_completion_codes
- */
-int decode_get_alert_status_req(const struct pldm_msg *msg,
-				size_t payload_length, uint8_t *version_id);
-
-/** @brief Create a PLDM OEM response message for GetAlertStatus
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] rack_entry - Enclosure ID, Alert Status, Flags, Config ID
- *  @param[in] pri_cec_node - Enclosure ID, Alert Status, Flags, Config ID
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.body.payload'
- */
-int encode_get_alert_status_resp(uint8_t instance_id, uint8_t completion_code,
-				 uint32_t rack_entry, uint32_t pri_cec_node,
-				 struct pldm_msg *msg, size_t payload_length);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OEM_IBM_HOST_H */
diff --git a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/platform_oem_ibm.h b/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/platform_oem_ibm.h
deleted file mode 100644
index f0aafd3..0000000
--- a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/platform_oem_ibm.h
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef PLATFORM_OEM_IBM_H
-#define PLATFORM_OEM_IBM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "base.h"
-#include <stddef.h>
-#include <stdint.h>
-
-enum pldm_event_types_ibm_oem {
-	PLDM_EVENT_TYPE_OEM_EVENT_BIOS_ATTRIBUTE_UPDATE = 0xF0,
-};
-
-/** @struct pldm_bios_attribute_update_event_req
- *
- * 	Structure representing PlatformEventMessage command request data for OEM
- *  event type BIOS attribute update.
- */
-struct pldm_bios_attribute_update_event_req {
-	uint8_t format_version;
-	uint8_t tid;
-	uint8_t event_class;
-	uint8_t num_handles;
-	uint8_t bios_attribute_handles[1];
-} __attribute__((packed));
-
-/** @brief Encode PlatformEventMessage request data for BIOS attribute update
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] format_version - Version of the event format
- *  @param[in] tid - Terminus ID for the terminus that originated the event
- *                   message
- *  @param[in] num_handles - Number of BIOS handles with an update
- *  @param[in] list_of_handles - Pointer to the list of BIOS attribute handles
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] msg - Message will be written to this
- *
- *  @return pldm_completion_codes
- *
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_bios_attribute_update_event_req(uint8_t instance_id,
-					   uint8_t format_version, uint8_t tid,
-					   uint8_t num_handles,
-					   const uint8_t *list_of_handles,
-					   size_t payload_length,
-					   struct pldm_msg *msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* PLATFORM_OEM_IBM_H */
\ No newline at end of file
diff --git a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/state_set_oem_ibm.h b/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/state_set_oem_ibm.h
deleted file mode 100644
index 5c8378b..0000000
--- a/subprojects/libpldm/include/libpldm/oem/ibm/libpldm/state_set_oem_ibm.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef STATE_SET_OEM_IBM_H
-#define STATE_SET_OEM_IBM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @brief IBM OEM State Set IDs */
-enum ibm_oem_pldm_state_set_ids {
-	PLDM_OEM_IBM_FIRMWARE_UPDATE_STATE = 32768,
-	PLDM_OEM_IBM_BOOT_STATE = 32769,
-	PLDM_OEM_IBM_VERIFICATION_STATE = 32770,
-	PLDM_OEM_IBM_SYSTEM_POWER_STATE = 32771,
-	PLDM_OEM_IBM_SBE_MAINTENANCE_STATE = 32772,
-	PLDM_OEM_IBM_SBE_HRESET_STATE = 32776,
-};
-
-enum ibm_oem_pldm_state_set_firmware_update_state_values {
-	START = 0x1,
-	END = 0x2,
-	FAIL = 0x3,
-	ABORT = 0x4,
-	ACCEPT = 0x5,
-	REJECT = 0x6,
-};
-
-enum ibm_oem_pldm_state_set_boot_state_values {
-	P = 0x1,
-	T = 0x2,
-};
-
-enum ibm_oem_pldm_state_set_verification_state_values {
-	VALID = 0x0,
-	ENTITLEMENT_FAIL = 0x1,
-	BANNED_PLATFORM_FAIL = 0x2,
-	MIN_MIF_FAIL = 0x4,
-};
-
-enum ibm_oem_pldm_state_set_system_power_state_values {
-	POWER_CYCLE_HARD = 0x1
-};
-
-enum ibm_oem_pldm_state_set_sbe_dump_state_values {
-	SBE_DUMP_COMPLETED = 0x1,
-	SBE_RETRY_REQUIRED = 0x2,
-};
-
-enum ibm_oem_pldm_state_set_sbe_hreset_state_values {
-	SBE_HRESET_NOT_READY = 0x1,
-	SBE_HRESET_READY = 0x2,
-	SBE_HRESET_FAILED = 0x3,
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* STATE_SET_OEM_IBM_H */
diff --git a/subprojects/libpldm/include/libpldm/pdr.h b/subprojects/libpldm/include/libpldm/pdr.h
deleted file mode 100644
index 671b726..0000000
--- a/subprojects/libpldm/include/libpldm/pdr.h
+++ /dev/null
@@ -1,410 +0,0 @@
-#ifndef PDR_H
-#define PDR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-
-/** @struct pldm_pdr
- *  opaque structure that acts as a handle to a PDR repository
- */
-typedef struct pldm_pdr pldm_pdr;
-
-/** @struct pldm_pdr_record
- *  opaque structure that acts as a handle to a PDR record
- */
-typedef struct pldm_pdr_record pldm_pdr_record;
-
-/* ====================== */
-/* Common PDR access APIs */
-/* ====================== */
-
-/** @brief Make a new PDR repository
- *
- *  @return opaque pointer that acts as a handle to the repository; NULL if no
- *  repository could be created
- *
- *  @note  Caller may make multiple repositories (for its own PDRs, as well as
- *  for PDRs received by other entities) and can associate the returned handle
- *  to a PLDM terminus id.
- */
-pldm_pdr *pldm_pdr_init();
-
-/** @brief Destroy a PDR repository (and free up associated resources)
- *
- *  @param[in/out] repo - pointer to opaque pointer acting as a PDR repo handle
- */
-void pldm_pdr_destroy(pldm_pdr *repo);
-
-/** @brief Get number of records in a PDR repository
- *
- *  @param[in] repo - opaque pointer acting as a PDR repo handle
- *
- *  @return uint32_t - number of records
- */
-uint32_t pldm_pdr_get_record_count(const pldm_pdr *repo);
-
-/** @brief Get size of a PDR repository, in bytes
- *
- *  @param[in] repo - opaque pointer acting as a PDR repo handle
- *
- *  @return uint32_t - size in bytes
- */
-uint32_t pldm_pdr_get_repo_size(const pldm_pdr *repo);
-
-/** @brief Add a PDR record to a PDR repository
- *
- *  @param[in/out] repo - opaque pointer acting as a PDR repo handle
- *  @param[in] data - pointer to a PDR record, pointing to a PDR definition as
- *  per DSP0248. This data is memcpy'd.
- *  @param[in] size - size of input PDR record in bytes
- *  @param[in] record_handle - record handle of input PDR record; if this is set
- *  to 0, then a record handle is computed and assigned to this PDR record
- *  @param[in] is_remote - if true, then the PDR is not from this terminus
- *  @param[in] terminus_handle - terminus handle of the input PDR record
- *
- *  @return uint32_t - record handle assigned to PDR record
- */
-uint32_t pldm_pdr_add(pldm_pdr *repo, const uint8_t *data, uint32_t size,
-		      uint32_t record_handle, bool is_remote,
-		      uint16_t terminus_handle);
-
-/** @brief Get record handle of a PDR record
- *
- *  @param[in] repo - opaque pointer acting as a PDR repo handle
- *  @param[in] record - opaque pointer acting as a PDR record handle
- *
- *  @return uint32_t - record handle assigned to PDR record; 0 if record is not
- *  found
- */
-uint32_t pldm_pdr_get_record_handle(const pldm_pdr *repo,
-				    const pldm_pdr_record *record);
-
-/** @brief Find PDR record by record handle
- *
- *  @param[in] repo - opaque pointer acting as a PDR repo handle
- *  @param[in] record_handle - input record handle
- *  @param[in/out] data - will point to PDR record data (as per DSP0248) on
- *                        return
- *  @param[out] size - *size will be size of PDR record
- *  @param[out] next_record_handle - *next_record_handle will be the record
- *  handle of record next to the returned PDR record
- *
- *  @return opaque pointer acting as PDR record handle, will be NULL if record
- *  was not found
- */
-const pldm_pdr_record *pldm_pdr_find_record(const pldm_pdr *repo,
-					    uint32_t record_handle,
-					    uint8_t **data, uint32_t *size,
-					    uint32_t *next_record_handle);
-
-/** @brief Get PDR record next to input PDR record
- *
- *  @param[in] repo - opaque pointer acting as a PDR repo handle
- *  @param[in] curr_record - opaque pointer acting as a PDR record handle
- *  @param[in/out] data - will point to PDR record data (as per DSP0248) on
- *                        return
- *  @param[out] size - *size will be size of PDR record
- *  @param[out] next_record_handle - *next_record_handle will be the record
- *  handle of record nect to the returned PDR record
- *
- *  @return opaque pointer acting as PDR record handle, will be NULL if record
- *  was not found
- */
-const pldm_pdr_record *
-pldm_pdr_get_next_record(const pldm_pdr *repo,
-			 const pldm_pdr_record *curr_record, uint8_t **data,
-			 uint32_t *size, uint32_t *next_record_handle);
-
-/** @brief Find (first) PDR record by PDR type
- *
- *  @param[in] repo - opaque pointer acting as a PDR repo handle
- *  @param[in] pdr_type - PDR type number as per DSP0248
- *  @param[in] curr_record - opaque pointer acting as a PDR record handle; if
- *  not NULL, then search will begin from this record's next record
- *  @param[in/out] data - will point to PDR record data (as per DSP0248) on
- *                        return, if input is not NULL
- *  @param[out] size - *size will be size of PDR record, if input is not NULL
- *
- *  @return opaque pointer acting as PDR record handle, will be NULL if record
- *  was not found
- */
-const pldm_pdr_record *
-pldm_pdr_find_record_by_type(const pldm_pdr *repo, uint8_t pdr_type,
-			     const pldm_pdr_record *curr_record, uint8_t **data,
-			     uint32_t *size);
-
-bool pldm_pdr_record_is_remote(const pldm_pdr_record *record);
-
-/** @brief Remove all PDR records that belong to a remote terminus
- *
- *  @param[in] repo - opaque pointer acting as a PDR repo handle
- */
-void pldm_pdr_remove_remote_pdrs(pldm_pdr *repo);
-
-/** @brief Remove all remote PDR's that beling to a specific terminus
- *         handle
- *  @param[in] repo - opaque pointer acting as a PDR repo handle
- *  @param[in] terminus_handle - Terminus Handle of the remove PLDM terminus
- */
-void pldm_pdr_remove_pdrs_by_terminus_handle(pldm_pdr *repo,
-					     uint16_t terminus_handle);
-
-/** @brief Update the validity of TL PDR - the validity is decided based on
- * whether the valid bit is set or not as per the spec DSP0248
- *
- * @param[in] repo - opaque pointer acting as a PDR repo handle
- * @param[in] terminusHandle - PLDM terminus handle
- * @param[in] tid - Terminus ID
- * @param[in] tlEid - MCTP endpoint EID
- * @param[in] valid - validity bit of TLPDR
- */
-void pldm_pdr_update_TL_pdr(const pldm_pdr *repo, uint16_t terminusHandle,
-			    uint8_t tid, uint8_t tlEid, bool valid);
-
-/* ======================= */
-/* FRU Record Set PDR APIs */
-/* ======================= */
-
-/** @brief Add a FRU record set PDR record to a PDR repository
- *
- *  @param[in/out] repo - opaque pointer acting as a PDR repo handle
- *  @param[in] terminus_handle - PLDM terminus handle of terminus owning the PDR
- *  record
- *  @param[in] fru_rsi - FRU record set identifier
- *  @param[in] entity_type - entity type of FRU
- *  @param[in] entity_instance_num - entity instance number of FRU
- *  @param[in] container_id - container id of FRU
- *  @param[in] bmc_record_handle - handle used to construct the next record
- *
- *  @return uint32_t - record handle assigned to PDR record
- */
-uint32_t pldm_pdr_add_fru_record_set(pldm_pdr *repo, uint16_t terminus_handle,
-				     uint16_t fru_rsi, uint16_t entity_type,
-				     uint16_t entity_instance_num,
-				     uint16_t container_id,
-				     uint32_t bmc_record_handle);
-
-/** @brief Find a FRU record set PDR by FRU record set identifier
- *
- *  @param[in] repo - opaque pointer acting as a PDR repo handle
- *  @param[in] fru_rsi - FRU record set identifier
- *  @param[in] terminus_handle - *terminus_handle will be FRU terminus handle of
- *  found PDR, or 0 if not found
- *  @param[in] entity_type - *entity_type will be FRU entity type of found PDR,
- *  or 0 if not found
- *  @param[in] entity_instance_num - *entity_instance_num will be FRU entity
- *  instance number of found PDR, or 0 if not found
- *  @param[in] container_id - *cintainer_id will be FRU container id of found
- *  PDR, or 0 if not found
- *
- *  @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);
-
-/* =========================== */
-/* Entity Association PDR APIs */
-/* =========================== */
-
-typedef struct pldm_entity {
-	uint16_t entity_type;
-	uint16_t entity_instance_num;
-	uint16_t entity_container_id;
-} __attribute__((packed)) pldm_entity;
-
-enum entity_association_containment_type {
-	PLDM_ENTITY_ASSOCIAION_PHYSICAL = 0x0,
-	PLDM_ENTITY_ASSOCIAION_LOGICAL = 0x1,
-};
-
-/** @struct pldm_entity_association_tree
- *  opaque structure that represents the entity association hierarchy
- */
-typedef struct pldm_entity_association_tree pldm_entity_association_tree;
-
-/** @struct pldm_entity_node
- *  opaque structure that represents a node in the entity association hierarchy
- */
-typedef struct pldm_entity_node pldm_entity_node;
-
-/** @brief Make a new entity association tree
- *
- *  @return opaque pointer that acts as a handle to the tree; NULL if no
- *  tree could be created
- */
-pldm_entity_association_tree *pldm_entity_association_tree_init();
-
-/** @brief Add an entity into the entity association tree
- *
- *  @param[in/out] tree - opaque pointer acting as a handle to the tree
- *  @param[in/out] entity - pointer to the entity to be added. Input has the
- *                          entity type. On output, instance number and the
- *                          container id are populated.
- *  @param[in] entity_instance_number - entity instance number, we can use the
- *                                      entity instance number of the entity by
- *                                      default if its value is equal 0xFFFF.
- *  @param[in] parent - pointer to the node that should be the parent of input
- *                      entity. If this is NULL, then the entity is the root
- *  @param[in] association_type - relation with the parent : logical or physical
- *
- *  @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);
-
-/** @brief Visit and note each entity in the entity association tree
- *
- *  @param[in] tree - opaque pointer acting as a handle to the tree
- *  @param[out] entities - pointer to list of pldm_entity's. To be free()'d by
- *                         the caller
- *  @param[out] size - number of pldm_entity's
- */
-void pldm_entity_association_tree_visit(pldm_entity_association_tree *tree,
-					pldm_entity **entities, size_t *size);
-
-/** @brief Extract pldm entity by the pldm_entity_node
- *
- *  @param[in] node     - opaque pointer to added entity
- *
- *  @return pldm_entity - pldm entity
- */
-pldm_entity pldm_entity_extract(pldm_entity_node *node);
-
-/** @brief Destroy entity association tree
- *
- *  @param[in] tree - opaque pointer acting as a handle to the tree
- */
-void pldm_entity_association_tree_destroy(pldm_entity_association_tree *tree);
-
-/** @brief Check if input enity node is a parent
- *
- *  @param[in] node - opaque pointer acting as a handle to an entity node
- *
- *  @return bool true if node is a parent, false otherwise
- */
-bool pldm_entity_is_node_parent(pldm_entity_node *node);
-
-/** @brief Get parent of entity
- *
- *  @param[in] node - opaque pointer acting as a handle to an entity node
- *
- *  @return pldm_entity - pldm entity
- */
-pldm_entity pldm_entity_get_parent(pldm_entity_node *node);
-
-/** @brief Check the current pldm entity is exist parent
- *
- *  @param[in] node - opaque pointer acting as a handle to an entity node
- *
- *  @return bool true if exist parent, false otherwise
- */
-bool pldm_entity_is_exist_parent(pldm_entity_node *node);
-
-/** @brief Convert entity association tree to PDR
- *
- *  @param[in] tree - opaque pointer to entity association tree
- *  @param[in] repo - PDR repo where entity association records should be added
- *  @param[in] is_remote - if true, then the PDR is not from this terminus
- *  @param[in] terminus_handle - terminus handle of the terminus
- */
-void pldm_entity_association_pdr_add(pldm_entity_association_tree *tree,
-				     pldm_pdr *repo, bool is_remote,
-				     uint16_t terminus_handle);
-/** @brief Add entity association pdr from node
- *
- *  @param[in] node - opaque pointer acting as a handle to an entity node
- *  @param[in] repo - PDR repo where entity association records should be added
- *  @param[in] is_remote  - if true, then the PDR is not from this terminus
- *  @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);
-
-/** @brief Find entity reference in tree
- *
- *  @param[in] tree - opaque pointer to entity association tree
- *  @param[in] entity - PLDM entity
- *  @param[in] node - node to the entity
- */
-void pldm_find_entity_ref_in_tree(pldm_entity_association_tree *tree,
-				  pldm_entity entity, pldm_entity_node **node);
-
-/** @brief Get number of children of entity
- *
- *  @param[in] node - opaque pointer acting as a handle to an entity node
- *  @param[in] association_type - relation type filter : logical or physical
- *
- *  @return uint8_t number of children
- */
-uint8_t pldm_entity_get_num_children(pldm_entity_node *node,
-				     uint8_t association_type);
-
-/** @brief Verify that the current node is a child of the current parent
- *
- *  @param[in] parent    - opaque pointer acting as a handle to an entity parent
- *  @param[in] node      - pointer to the node of the pldm entity
- */
-bool pldm_is_current_parent_child(pldm_entity_node *parent, pldm_entity *node);
-
-/** @brief Find an entity in the entity association tree
- *
- *  @param[in] tree - pointer to entity association tree
- *  @param[in/out] entity - entity type and instance id set on input, container
- *                 id set on output
- *
- *  @return pldm_entity_node* pointer to entity if found, NULL otherwise
- */
-pldm_entity_node *
-pldm_entity_association_tree_find(pldm_entity_association_tree *tree,
-				  pldm_entity *entity);
-
-/** @brief Create a copy of an existing entity association tree
- *
- *  @param[in] org_tree - pointer to source tree
- *  @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);
-
-/** @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);
-
-/** @brief Check whether the entity association tree is empty
- *
- *  @param[in] tree - pointer to entity association tree
- *  @return bool, true if tree is empty
- */
-bool pldm_is_empty_entity_assoc_tree(pldm_entity_association_tree *tree);
-
-/** @brief Extract entities from entity association PDR
- *
- *  @param[in] pdr - entity association PDR
- *  @param[in] pdr_len - size of entity association PDR in bytes
- *  @param[out] num_entities - number of entities found, including the container
- *  @param[out] entities - extracted entities, container is *entities[0]. Caller
- *              must free *entities
- */
-void pldm_entity_association_pdr_extract(const uint8_t *pdr, uint16_t pdr_len,
-					 size_t *num_entities,
-					 pldm_entity **entities);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* PDR_H */
diff --git a/subprojects/libpldm/include/libpldm/platform.h b/subprojects/libpldm/include/libpldm/platform.h
deleted file mode 100644
index e03d8c2..0000000
--- a/subprojects/libpldm/include/libpldm/platform.h
+++ /dev/null
@@ -1,1625 +0,0 @@
-#ifndef PLATFORM_H
-#define PLATFORM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base.h"
-#include "pdr.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_GET_NUMERIC_EFFECTER_VALUE_REQ_BYTES 2
-#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_MIN_REQ_BYTES 4
-
-#define PLDM_GET_PDR_REQ_BYTES 13
-
-#define PLDM_SET_EVENT_RECEIVER_RESP_BYTES 1
-/* Minimum response length */
-#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
-
-/* Minimum length for PLDM PlatformEventMessage request */
-#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
-
-/* 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_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_CHANGE_RECORD_MIN_LENGTH 2
-
-#define PLDM_INVALID_EFFECTER_ID 0xFFFF
-#define PLDM_TID_RESERVED 0xFF
-
-enum pldm_effecter_data_size {
-	PLDM_EFFECTER_DATA_SIZE_UINT8,
-	PLDM_EFFECTER_DATA_SIZE_SINT8,
-	PLDM_EFFECTER_DATA_SIZE_UINT16,
-	PLDM_EFFECTER_DATA_SIZE_SINT16,
-	PLDM_EFFECTER_DATA_SIZE_UINT32,
-	PLDM_EFFECTER_DATA_SIZE_SINT32
-};
-
-enum pldm_range_field_format {
-	PLDM_RANGE_FIELD_FORMAT_UINT8,
-	PLDM_RANGE_FIELD_FORMAT_SINT8,
-	PLDM_RANGE_FIELD_FORMAT_UINT16,
-	PLDM_RANGE_FIELD_FORMAT_SINT16,
-	PLDM_RANGE_FIELD_FORMAT_UINT32,
-	PLDM_RANGE_FIELD_FORMAT_SINT32,
-	PLDM_RANGE_FIELD_FORMAT_REAL32
-};
-
-enum set_request { PLDM_NO_CHANGE = 0x00, PLDM_REQUEST_SET = 0x01 };
-
-enum effecter_state { PLDM_INVALID_VALUE = 0xFF };
-
-enum pldm_sensor_present_state {
-	PLDM_SENSOR_UNKNOWN = 0x0,
-	PLDM_SENSOR_NORMAL = 0x01,
-	PLDM_SENSOR_WARNING = 0x02,
-	PLDM_SENSOR_CRITICAL = 0x03,
-	PLDM_SENSOR_FATAL = 0x04,
-	PLDM_SENSOR_LOWERWARNING = 0x05,
-	PLDM_SENSOR_LOWERCRITICAL = 0x06,
-	PLDM_SENSOR_LOWERFATAL = 0x07,
-	PLDM_SENSOR_UPPERWARNING = 0x08,
-	PLDM_SENSOR_UPPERCRITICAL = 0x09,
-	PLDM_SENSOR_UPPERFATAL = 0x0a
-};
-
-enum pldm_sensor_event_message_enable {
-	PLDM_NO_EVENT_GENERATION,
-	PLDM_EVENTS_DISABLED,
-	PLDM_EVENTS_ENABLED,
-	PLDM_OP_EVENTS_ONLY_ENABLED,
-	PLDM_STATE_EVENTS_ONLY_ENABLED
-};
-
-enum pldm_effecter_oper_state {
-	EFFECTER_OPER_STATE_ENABLED_UPDATEPENDING,
-	EFFECTER_OPER_STATE_ENABLED_NOUPDATEPENDING,
-	EFFECTER_OPER_STATE_DISABLED,
-	EFFECTER_OPER_STATE_UNAVAILABLE,
-	EFFECTER_OPER_STATE_STATUSUNKNOWN,
-	EFFECTER_OPER_STATE_FAILED,
-	EFFECTER_OPER_STATE_INITIALIZING,
-	EFFECTER_OPER_STATE_SHUTTINGDOWN,
-	EFFECTER_OPER_STATE_INTEST
-};
-
-enum pldm_platform_commands {
-	PLDM_SET_EVENT_RECEIVER = 0x04,
-	PLDM_GET_SENSOR_READING = 0x11,
-	PLDM_GET_STATE_SENSOR_READINGS = 0x21,
-	PLDM_SET_NUMERIC_EFFECTER_VALUE = 0x31,
-	PLDM_GET_NUMERIC_EFFECTER_VALUE = 0x32,
-	PLDM_SET_STATE_EFFECTER_STATES = 0x39,
-	PLDM_GET_PDR_REPOSITORY_INFO = 0x50,
-	PLDM_GET_PDR = 0x51,
-	PLDM_PLATFORM_EVENT_MESSAGE = 0x0A
-};
-
-/** @brief PLDM PDR types
- */
-enum pldm_pdr_types {
-	PLDM_TERMINUS_LOCATOR_PDR = 1,
-	PLDM_NUMERIC_SENSOR_PDR = 2,
-	PLDM_NUMERIC_SENSOR_INITIALIZATION_PDR = 3,
-	PLDM_STATE_SENSOR_PDR = 4,
-	PLDM_STATE_SENSOR_INITIALIZATION_PDR = 5,
-	PLDM_SENSOR_AUXILIARY_NAMES_PDR = 6,
-	PLDM_OEM_UNIT_PDR = 7,
-	PLDM_OEM_STATE_SET_PDR = 8,
-	PLDM_NUMERIC_EFFECTER_PDR = 9,
-	PLDM_NUMERIC_EFFECTER_INITIALIZATION_PDR = 10,
-	PLDM_STATE_EFFECTER_PDR = 11,
-	PLDM_STATE_EFFECTER_INITIALIZATION_PDR = 12,
-	PLDM_EFFECTER_AUXILIARY_NAMES_PDR = 13,
-	PLDM_EFFECTER_OEM_SEMANTIC_PDR = 14,
-	PLDM_PDR_ENTITY_ASSOCIATION = 15,
-	PLDM_ENTITY_AUXILIARY_NAMES_PDR = 16,
-	PLDM_OEM_ENTITY_ID_PDR = 17,
-	PLDM_INTERRUPT_ASSOCIATION_PDR = 18,
-	PLDM_EVENT_LOG_PDR = 19,
-	PLDM_PDR_FRU_RECORD_SET = 20,
-	PLDM_OEM_DEVICE_PDR = 126,
-	PLDM_OEM_PDR = 127,
-};
-
-/** @brief PLDM effecter initialization schemes
- */
-enum pldm_effecter_init {
-	PLDM_NO_INIT,
-	PLDM_USE_INIT_PDR,
-	PLDM_ENABLE_EFFECTER,
-	PLDM_DISABLE_EFECTER
-};
-
-/** @brief PLDM Platform M&C completion codes
- */
-enum pldm_platform_completion_codes {
-	PLDM_PLATFORM_INVALID_SENSOR_ID = 0x80,
-	PLDM_PLATFORM_REARM_UNAVAILABLE_IN_PRESENT_STATE = 0x81,
-
-	PLDM_PLATFORM_INVALID_EFFECTER_ID = 0x80,
-	PLDM_PLATFORM_INVALID_STATE_VALUE = 0x81,
-
-	PLDM_PLATFORM_INVALID_DATA_TRANSFER_HANDLE = 0x80,
-	PLDM_PLATFORM_INVALID_TRANSFER_OPERATION_FLAG = 0x81,
-	PLDM_PLATFORM_INVALID_RECORD_HANDLE = 0x82,
-	PLDM_PLATFORM_INVALID_RECORD_CHANGE_NUMBER = 0x83,
-	PLDM_PLATFORM_TRANSFER_TIMEOUT = 0x84,
-
-	PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE = 0x82,
-
-	PLDM_PLATFORM_INVALID_PROTOCOL_TYPE = 0x80,
-	PLDM_PLATFORM_ENABLE_METHOD_NOT_SUPPORTED = 0x81,
-	PLDM_PLATFORM_HEARTBEAT_FREQUENCY_TOO_HIGH = 0x82,
-};
-
-/** @brief PLDM Event types
- */
-enum pldm_event_types {
-	PLDM_SENSOR_EVENT = 0x00,
-	PLDM_EFFECTER_EVENT = 0x01,
-	PLDM_REDFISH_TASK_EXECUTED_EVENT = 0x02,
-	PLDM_REDFISH_MESSAGE_EVENT = 0x03,
-	PLDM_PDR_REPOSITORY_CHG_EVENT = 0x04,
-	PLDM_MESSAGE_POLL_EVENT = 0x05,
-	PLDM_HEARTBEAT_TIMER_ELAPSED_EVENT = 0x06
-};
-
-/** @brief PLDM sensorEventClass states
- */
-enum sensor_event_class_states {
-	PLDM_SENSOR_OP_STATE,
-	PLDM_STATE_SENSOR_STATE,
-	PLDM_NUMERIC_SENSOR_STATE
-};
-
-/** @brief PLDM sensor supported states
- */
-enum pldm_sensor_operational_state {
-	PLDM_SENSOR_ENABLED,
-	PLDM_SENSOR_DISABLED,
-	PLDM_SENSOR_UNAVAILABLE,
-	PLDM_SENSOR_STATUSUNKOWN,
-	PLDM_SENSOR_FAILED,
-	PLDM_SENSOR_INITIALIZING,
-	PLDM_SENSOR_SHUTTINGDOWN,
-	PLDM_SENSOR_INTEST
-};
-
-/** @brief PLDM pldmPDRRepositoryChgEvent class eventData format
- */
-enum pldm_pdr_repository_chg_event_data_format {
-	REFRESH_ENTIRE_REPOSITORY,
-	FORMAT_IS_PDR_TYPES,
-	FORMAT_IS_PDR_HANDLES
-};
-
-/** @brief PLDM pldmPDRRepositoryChgEvent class changeRecord format
- * eventDataOperation
- */
-enum pldm_pdr_repository_chg_event_change_record_event_data_operation {
-	PLDM_REFRESH_ALL_RECORDS,
-	PLDM_RECORDS_DELETED,
-	PLDM_RECORDS_ADDED,
-	PLDM_RECORDS_MODIFIED
-};
-
-/** @brief PLDM NumericSensorStatePresentReading data type
- */
-enum pldm_sensor_readings_data_type {
-	PLDM_SENSOR_DATA_SIZE_UINT8,
-	PLDM_SENSOR_DATA_SIZE_SINT8,
-	PLDM_SENSOR_DATA_SIZE_UINT16,
-	PLDM_SENSOR_DATA_SIZE_SINT16,
-	PLDM_SENSOR_DATA_SIZE_UINT32,
-	PLDM_SENSOR_DATA_SIZE_SINT32
-};
-
-/** @brief PLDM PlatformEventMessage response status
- */
-enum pldm_platform_event_status {
-	PLDM_EVENT_NO_LOGGING = 0x00,
-	PLDM_EVENT_LOGGING_DISABLED = 0x01,
-	PLDM_EVENT_LOG_FULL = 0x02,
-	PLDM_EVENT_ACCEPTED_FOR_LOGGING = 0x03,
-	PLDM_EVENT_LOGGED = 0x04,
-	PLDM_EVENT_LOGGING_REJECTED = 0x05
-};
-
-/** @brief PLDM Terminus Locator PDR validity
- */
-enum pldm_terminus_locator_pdr_validity {
-	PLDM_TL_PDR_NOT_VALID,
-	PLDM_TL_PDR_VALID
-};
-
-/** @brief PLDM Terminus Locator type
- */
-enum pldm_terminus_locator_type {
-	PLDM_TERMINUS_LOCATOR_TYPE_UID,
-	PLDM_TERMINUS_LOCATOR_TYPE_MCTP_EID,
-	PLDM_TERMINUS_LOCATOR_TYPE_SMBUS_RELATIVE,
-	PLDM_TERMINUS_LOCATOR_TYPE_SYS_SW
-};
-
-/** @brief PLDM event message global enable for
- *  SetEventReceiver command
- */
-enum pldm_event_message_global_enable {
-	PLDM_EVENT_MESSAGE_GLOBAL_DISABLE,
-	PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC,
-	PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_POLLING,
-	PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE
-};
-
-/** @brief PLDM respository state */
-enum pldm_repository_state {
-	PLDM_AVAILABLE,
-	PLDM_UPDATE_IN_PROGRESS,
-	PLDM_FAILED
-};
-
-/** @brief PLDM respository data transfer handler timeout */
-enum pldm_repository_data_transfer_handler_timeout {
-	PLDM_NO_TIMEOUT,
-	PLDM_DEFALUT_MINIMUM_TIMEOUT
-};
-
-/** @struct pldm_pdr_hdr
- *
- *  Structure representing PLDM common PDR header
- */
-struct pldm_pdr_hdr {
-	uint32_t record_handle;
-	uint8_t version;
-	uint8_t type;
-	uint16_t record_change_num;
-	uint16_t length;
-} __attribute__((packed));
-
-/** @struct pldm_terminus_locator_pdr
- *
- *  Structure representing PLDM terminus locator PDR
- */
-struct pldm_terminus_locator_pdr {
-	struct pldm_pdr_hdr hdr;
-	uint16_t terminus_handle;
-	uint8_t validity;
-	uint8_t tid;
-	uint16_t container_id;
-	uint8_t terminus_locator_type;
-	uint8_t terminus_locator_value_size;
-	uint8_t terminus_locator_value[1];
-} __attribute__((packed));
-
-/** @struct pldm_terminus_locator_type_mctp_eid
- *
- *  Structure representing terminus locator value for
- *  terminus locator type MCTP_EID
- */
-struct pldm_terminus_locator_type_mctp_eid {
-	uint8_t eid;
-} __attribute__((packed));
-
-/** @struct pldm_pdr_entity_association
- *
- *  Structure representing PLDM Entity Association PDR
- */
-struct pldm_pdr_entity_association {
-	uint16_t container_id;
-	uint8_t association_type;
-	pldm_entity container;
-	uint8_t num_children;
-	pldm_entity children[1];
-} __attribute__((packed));
-
-/** @struct pldm_pdr_fru_record_set
- *
- *  Structure representing PLDM FRU record set PDR
- */
-struct pldm_pdr_fru_record_set {
-	uint16_t terminus_handle;
-	uint16_t fru_rsi;
-	uint16_t entity_type;
-	uint16_t entity_instance_num;
-	uint16_t container_id;
-} __attribute__((packed));
-
-/** @struct pldm_state_sensor_pdr
- *
- *  Structure representing PLDM state sensor PDR
- */
-struct pldm_state_sensor_pdr {
-	struct pldm_pdr_hdr hdr;
-	uint16_t terminus_handle;
-	uint16_t sensor_id;
-	uint16_t entity_type;
-	uint16_t entity_instance;
-	uint16_t container_id;
-	uint8_t sensor_init;
-	bool8_t sensor_auxiliary_names_pdr;
-	uint8_t composite_sensor_count;
-	uint8_t possible_states[1];
-} __attribute__((packed));
-
-/** @struct state_sensor_possible_states
- *
- *  Structure representing state enums for state sensor
- */
-struct state_sensor_possible_states {
-	uint16_t state_set_id;
-	uint8_t possible_states_size;
-	bitfield8_t states[1];
-} __attribute__((packed));
-
-/** @struct pldm_state_effecter_pdr
- *
- *  Structure representing PLDM state effecter PDR
- */
-struct pldm_state_effecter_pdr {
-	struct pldm_pdr_hdr hdr;
-	uint16_t terminus_handle;
-	uint16_t effecter_id;
-	uint16_t entity_type;
-	uint16_t entity_instance;
-	uint16_t container_id;
-	uint16_t effecter_semantic_id;
-	uint8_t effecter_init;
-	bool8_t has_description_pdr;
-	uint8_t composite_effecter_count;
-	uint8_t possible_states[1];
-} __attribute__((packed));
-
-/** @brief Encode PLDM state sensor PDR
- *
- * @param[in/out] sensor                 Structure to encode. All members of
- * sensor, except those mentioned in the @note below, should be initialized by
- * the caller.
- * @param[in]     allocation_size        Size of sensor allocation in bytes
- * @param[in]     possible_states        Possible sensor states
- * @param[in]     possible_states_size   Size of possible sensor states in bytes
- * @param[out]    actual_size            Size of sensor PDR. Set to 0 on error.
- * @return int    pldm_completion_codes
- *                PLDM_SUCCESS/PLDM_ERROR/PLDM_ERROR_INVALID_LENGTH
- *
- * @note The sensor parameter will be encoded in place.
- * @note Caller is responsible for allocation of the sensor parameter. Caller
- *       must allocate enough space for the base structure and the
- *       sensor->possible_states array, otherwise the function will fail.
- * @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);
-
-/** @union union_effecter_data_size
- *
- *  The bit width and format of reading and threshold values that the effecter
- *  returns.
- *  Refer to: DSP0248_1.2.0: 28.11 Table 87
- */
-typedef union {
-	uint8_t value_u8;
-	int8_t value_s8;
-	uint16_t value_u16;
-	int16_t value_s16;
-	uint32_t value_u32;
-	int32_t value_s32;
-} union_effecter_data_size;
-
-/** @union union_range_field_format
- *
- *  Indicates the format used for the nominalValue, normalMax, and normalMin
- *  fields.
- *  Refer to: DSP0248_1.2.0: 28.11 Table 87
- */
-typedef union {
-	uint8_t value_u8;
-	int8_t value_s8;
-	uint16_t value_u16;
-	int16_t value_s16;
-	uint32_t value_u32;
-	int32_t value_s32;
-	real32_t value_f32;
-} union_range_field_format;
-
-/** @struct pldm_numeric_effecter_value_pdr
- *
- *  Structure representing PLDM numeric effecter value PDR
- */
-struct pldm_numeric_effecter_value_pdr {
-	struct pldm_pdr_hdr hdr;
-	uint16_t terminus_handle;
-	uint16_t effecter_id;
-	uint16_t entity_type;
-	uint16_t entity_instance;
-	uint16_t container_id;
-	uint16_t effecter_semantic_id;
-	uint8_t effecter_init;
-	bool8_t effecter_auxiliary_names;
-	uint8_t base_unit;
-	int8_t unit_modifier;
-	uint8_t rate_unit;
-	uint8_t base_oem_unit_handle;
-	uint8_t aux_unit;
-	int8_t aux_unit_modifier;
-	uint8_t aux_rate_unit;
-	uint8_t aux_oem_unit_handle;
-	bool8_t is_linear;
-	uint8_t effecter_data_size;
-	real32_t resolution;
-	real32_t offset;
-	uint16_t accuracy;
-	uint8_t plus_tolerance;
-	uint8_t minus_tolerance;
-	real32_t state_transition_interval;
-	real32_t transition_interval;
-	union_effecter_data_size max_settable;
-	union_effecter_data_size min_settable;
-	uint8_t range_field_format;
-	bitfield8_t range_field_support;
-	union_range_field_format nominal_value;
-	union_range_field_format normal_max;
-	union_range_field_format normal_min;
-	union_range_field_format rated_max;
-	union_range_field_format rated_min;
-} __attribute__((packed));
-
-/** @struct state_effecter_possible_states
- *
- *  Structure representing state enums for state effecter
- */
-struct state_effecter_possible_states {
-	uint16_t state_set_id;
-	uint8_t possible_states_size;
-	bitfield8_t states[1];
-} __attribute__((packed));
-
-/** @brief Encode PLDM state effecter PDR
- *
- * @param[in/out] effecter               Structure to encode. All members of
- *                                       effecter, except those mentioned in
- *                                       the @note below, should be initialized
- *                                       by the caller.
- * @param[in]     allocation_size        Size of effecter allocation in bytes
- * @param[in]     possible_states        Possible effecter states
- * @param[in]     possible_states_size   Size of possible effecter states in
- *                                       bytes
- * @param[out]    actual_size            Size of effecter PDR. Set to 0 on
- *                                       error.
- * @return int    pldm_completion_codes
- *                PLDM_SUCCESS/PLDM_ERROR/PLDM_ERROR_INVALID_LENGTH
- *
- * @note The effecter parameter will be encoded in place.
- * @note Caller is responsible for allocation of the effecter parameter. Caller
- *       must allocate enough space for the base structure and the
- *       effecter->possible_states array, otherwise the function will fail.
- * @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 set_effecter_state_field
- *
- *  Structure representing a stateField in SetStateEffecterStates command */
-
-typedef struct state_field_for_state_effecter_set {
-	uint8_t set_request;	//!< Whether to change the state
-	uint8_t effecter_state; //!< Expected state of the effecter
-} __attribute__((packed)) set_effecter_state_field;
-
-/** @struct get_sensor_readings_field
- *
- *  Structure representing a stateField in GetStateSensorReadings command */
-
-typedef struct state_field_for_get_state_sensor_readings {
-	uint8_t sensor_op_state; //!< The state of the sensor itself
-	uint8_t present_state;	 //!< Return a state value
-	uint8_t previous_state; //!< The state that the presentState was entered
-				//! 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
-} __attribute__((packed)) get_sensor_state_field;
-
-/** @struct PLDM_SetStateEffecterStates_Request
- *
- *  Structure representing PLDM set state effecter states request.
- */
-struct pldm_set_state_effecter_states_req {
-	uint16_t effecter_id;
-	uint8_t comp_effecter_count;
-	set_effecter_state_field field[8];
-} __attribute__((packed));
-
-/** @struct pldm_get_pdr_repository_info_resp
- *
- *  Structure representing GetPDRRepositoryInfo response packet
- */
-struct pldm_pdr_repository_info_resp {
-	uint8_t completion_code;
-	uint8_t repository_state;
-	uint8_t update_time[PLDM_TIMESTAMP104_SIZE];
-	uint8_t oem_update_time[PLDM_TIMESTAMP104_SIZE];
-	uint32_t record_count;
-	uint32_t repository_size;
-	uint32_t largest_record_size;
-	uint8_t data_transfer_handle_timeout;
-} __attribute__((packed));
-
-/** @struct pldm_get_pdr_resp
- *
- *  structure representing GetPDR response packet
- *  transfer CRC is not part of the structure and will be
- *  added at the end of last packet in multipart transfer
- */
-struct pldm_get_pdr_resp {
-	uint8_t completion_code;
-	uint32_t next_record_handle;
-	uint32_t next_data_transfer_handle;
-	uint8_t transfer_flag;
-	uint16_t response_count;
-	uint8_t record_data[1];
-} __attribute__((packed));
-
-/** @struct pldm_get_pdr_req
- *
- *  structure representing GetPDR request packet
- */
-struct pldm_get_pdr_req {
-	uint32_t record_handle;
-	uint32_t data_transfer_handle;
-	uint8_t transfer_op_flag;
-	uint16_t request_count;
-	uint16_t record_change_number;
-} __attribute__((packed));
-
-/** @struct pldm_set_event_receiver_req
- *
- * Structure representing SetEventReceiver command.
- * This structure applies only for MCTP as a transport type.
- */
-struct pldm_set_event_receiver_req {
-	uint8_t event_message_global_enable;
-	uint8_t transport_protocol_type;
-	uint8_t event_receiver_address_info;
-	uint16_t heartbeat_timer;
-} __attribute__((packed));
-
-/** @struct pldm_set_numeric_effecter_value_req
- *
- *  structure representing SetNumericEffecterValue request packet
- */
-struct pldm_set_numeric_effecter_value_req {
-	uint16_t effecter_id;
-	uint8_t effecter_data_size;
-	uint8_t effecter_value[1];
-} __attribute__((packed));
-
-/** @struct pldm_get_state_sensor_readings_req
- *
- *  Structure representing PLDM get state sensor readings request.
- */
-struct pldm_get_state_sensor_readings_req {
-	uint16_t sensor_id;
-	bitfield8_t sensor_rearm;
-	uint8_t reserved;
-} __attribute__((packed));
-
-/** @struct pldm_get_state_sensor_readings_resp
- *
- *  Structure representing PLDM get state sensor readings response.
- */
-struct pldm_get_state_sensor_readings_resp {
-	uint8_t completion_code;
-	uint8_t comp_sensor_count;
-	get_sensor_state_field field[1];
-} __attribute__((packed));
-
-/** @struct pldm_sensor_event
- *
- *  structure representing sensorEventClass
- */
-struct pldm_sensor_event_data {
-	uint16_t sensor_id;
-	uint8_t sensor_event_class_type;
-	uint8_t event_class[1];
-} __attribute__((packed));
-
-/** @struct pldm_state_sensor_state
- *
- *  structure representing sensorEventClass for stateSensorState
- */
-struct pldm_sensor_event_state_sensor_state {
-	uint8_t sensor_offset;
-	uint8_t event_state;
-	uint8_t previous_event_state;
-} __attribute__((packed));
-
-/** @struct pldm_sensor_event_numeric_sensor_state
- *
- *  structure representing sensorEventClass for stateSensorState
- */
-struct pldm_sensor_event_numeric_sensor_state {
-	uint8_t event_state;
-	uint8_t previous_event_state;
-	uint8_t sensor_data_size;
-	uint8_t present_reading[1];
-} __attribute__((packed));
-
-/** @struct pldm_sensor_event_sensor_op_state
- *
- *  structure representing sensorEventClass for SensorOpState
- */
-struct pldm_sensor_event_sensor_op_state {
-	uint8_t present_op_state;
-	uint8_t previous_op_state;
-} __attribute__((packed));
-
-/** @struct pldm_platform_event_message_req
- *
- *  structure representing PlatformEventMessage command request data
- */
-struct pldm_platform_event_message_req {
-	uint8_t format_version;
-	uint8_t tid;
-	uint8_t event_class;
-	uint8_t event_data[1];
-} __attribute__((packed));
-
-/** @struct pldm_platform_event_message_response
- *
- *  structure representing PlatformEventMessage command response data
- */
-struct pldm_platform_event_message_resp {
-	uint8_t completion_code;
-	uint8_t platform_event_status;
-} __attribute__((packed));
-
-/** @struct pldm_pdr_repository_chg_event_data
- *
- *  structure representing pldmPDRRepositoryChgEvent class eventData
- */
-struct pldm_pdr_repository_chg_event_data {
-	uint8_t event_data_format;
-	uint8_t number_of_change_records;
-	uint8_t change_records[1];
-} __attribute__((packed));
-
-/** @struct pldm_pdr_repository_chg_event_change_record_data
- *
- *  structure representing pldmPDRRepositoryChgEvent class eventData's change
- * record data
- */
-struct pldm_pdr_repository_change_record_data {
-	uint8_t event_data_operation;
-	uint8_t number_of_change_entries;
-	uint32_t change_entry[1];
-} __attribute__((packed));
-
-/** @struct pldm_get_numeric_effecter_value_req
- *
- *  structure representing GetNumericEffecterValue request packet
- */
-struct pldm_get_numeric_effecter_value_req {
-	uint16_t effecter_id;
-} __attribute__((packed));
-
-/** @struct pldm_get_numeric_effecter_value_resp
- *
- *  structure representing GetNumericEffecterValue response packet
- */
-struct pldm_get_numeric_effecter_value_resp {
-	uint8_t completion_code;
-	uint8_t effecter_data_size;
-	uint8_t effecter_oper_state;
-	uint8_t pending_and_present_values[1];
-} __attribute__((packed));
-
-/** @struct pldm_get_sensor_reading_req
- *
- *  Structure representing PLDM get sensor reading request
- */
-struct pldm_get_sensor_reading_req {
-	uint16_t sensor_id;
-	bool8_t rearm_event_state;
-} __attribute__((packed));
-
-/** @struct pldm_get_sensor_reading_resp
- *
- *  Structure representing PLDM get sensor reading response
- */
-struct pldm_get_sensor_reading_resp {
-	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[1];
-} __attribute__((packed));
-
-/* Responder */
-
-/* SetNumericEffecterValue */
-
-/** @brief Decode SetNumericEffecterValue request data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] effecter_id - used to identify and access the effecter
- *  @param[out] effecter_data_size - The bit width and format of the setting
- * 				value for the effecter.
- * 				value:{uint8,sint8,uint16,sint16,uint32,sint32}
- *  @param[out] effecter_value - The setting value of numeric effecter being
- * 				requested.
- *  @return pldm_completion_codes
- */
-int decode_set_numeric_effecter_value_req(const struct pldm_msg *msg,
-					  size_t payload_length,
-					  uint16_t *effecter_id,
-					  uint8_t *effecter_data_size,
-					  uint8_t *effecter_value);
-
-/** @brief Create a PLDM response message for SetNumericEffecterValue
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.body.payload'
- */
-int encode_set_numeric_effecter_value_resp(uint8_t instance_id,
-					   uint8_t completion_code,
-					   struct pldm_msg *msg,
-					   size_t payload_length);
-
-/* SetStateEffecterStates */
-
-/** @brief Create a PLDM response message for SetStateEffecterStates
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.body.payload'
- */
-
-int encode_set_state_effecter_states_resp(uint8_t instance_id,
-					  uint8_t completion_code,
-					  struct pldm_msg *msg);
-
-/** @brief Decode SetStateEffecterStates request data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] effecter_id - used to identify and access the effecter
- *  @param[out] comp_effecter_count - number of individual sets of effecter
- *         information. Upto eight sets of state effecter info can be accessed
- *         for a given effecter.
- *  @param[out] field - each unit is an instance of the stateFileld structure
- *         that is used to set the requested state for a particular effecter
- *         within the state effecter. This field holds the starting address of
- *         the stateField values. The user is responsible to allocate the
- *         memory prior to calling this command. Since the state field count is
- *         not known in advance, the user should allocate the maximum size
- *         always, which is 8 in number.
- *  @return pldm_completion_codes
- */
-
-int decode_set_state_effecter_states_req(const struct pldm_msg *msg,
-					 size_t payload_length,
-					 uint16_t *effecter_id,
-					 uint8_t *comp_effecter_count,
-					 set_effecter_state_field *field);
-
-/* GetPDR */
-
-/** @brief Create a PLDM response message for GetPDR
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] next_record_hndl - The recordHandle for the PDR that is next in
- *        the PDR Repository
- *  @param[in] next_data_transfer_hndl - A handle that identifies the next
- *        portion of the PDR data to be transferred, if any
- *  @param[in] transfer_flag - Indicates the portion of PDR data being
- *        transferred
- *  @param[in] resp_cnt - The number of recordData bytes returned in this
- *        response
- *  @param[in] record_data - PDR data bytes of length resp_cnt
- *  @param[in] transfer_crc - A CRC-8 for the overall PDR. This is present only
- *        in the last part of a PDR being transferred
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_pdr_resp(uint8_t instance_id, uint8_t completion_code,
-			uint32_t next_record_hndl,
-			uint32_t next_data_transfer_hndl, uint8_t transfer_flag,
-			uint16_t resp_cnt, const uint8_t *record_data,
-			uint8_t transfer_crc, struct pldm_msg *msg);
-
-/** @brief Decode GetPDR request data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] record_hndl - The recordHandle value for the PDR to be retrieved
- *  @param[out] data_transfer_hndl - Handle used to identify a particular
- *         multipart PDR data transfer operation
- *  @param[out] transfer_op_flag - Flag to indicate the first or subsequent
- *         portion of transfer
- *  @param[out] request_cnt - The maximum number of record bytes requested
- *  @param[out] record_chg_num - Used to determine whether the PDR has changed
- *        while PDR transfer is going on
- *  @return pldm_completion_codes
- */
-
-int decode_get_pdr_req(const struct pldm_msg *msg, size_t payload_length,
-		       uint32_t *record_hndl, uint32_t *data_transfer_hndl,
-		       uint8_t *transfer_op_flag, uint16_t *request_cnt,
-		       uint16_t *record_chg_num);
-
-/* GetStateSensorReadings */
-
-/** @brief Decode GetStateSensorReadings request data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] sensor_id - used to identify and access the simple or composite
- *         sensor
- *  @param[out] sensor_rearm - Each bit location in this field corresponds to a
- *         particular sensor within the state sensor, where bit [0] corresponds
- *         to the first state sensor (sensor offset 0) and bit [7] corresponds
- *         to the eighth sensor (sensor offset 7), sequentially.
- *  @param[out] reserved - value: 0x00
- *  @return pldm_completion_codes
- */
-
-int decode_get_state_sensor_readings_req(const struct pldm_msg *msg,
-					 size_t payload_length,
-					 uint16_t *sensor_id,
-					 bitfield8_t *sensor_rearm,
-					 uint8_t *reserved);
-
-/** @brief Encode GetStateSensorReadings response data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[out] comp_sensor_count - The number of individual sets of sensor
- *         information that this command accesses
- *  @param[out] field - Each stateField is an instance of a stateField structure
- *         that is used to return the present operational state setting and the
- *         present state and event state for a particular set of sensor
- *         information contained within the state sensor
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- */
-
-int encode_get_state_sensor_readings_resp(uint8_t instance_id,
-					  uint8_t completion_code,
-					  uint8_t comp_sensor_count,
-					  get_sensor_state_field *field,
-					  struct pldm_msg *msg);
-
-/* GetNumericEffecterValue */
-
-/** @brief Decode GetNumericEffecterValue request data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] effecter_id - used to identify and access the effecter
- *  @return pldm_completion_codes
- */
-int decode_get_numeric_effecter_value_req(const struct pldm_msg *msg,
-					  size_t payload_length,
-					  uint16_t *effecter_id);
-
-/** @brief Create a PLDM response message for GetNumericEffecterValue
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] effecter_data_size - The bit width and format of the setting
- *             value for the effecter.
- * 	       value:{uint8,sint8,uint16,sint16,uint32,sint32}
- *  @param[in] effecter_oper_state - The state of the effecter itself
- *  @param[in] pending_value - The pending numeric value setting of the
- *             effecter. The effecterDataSize field indicates the number of
- *             bits used for this field
- *  @param[in] present_value - The present numeric value setting of the
- *             effecter. The effecterDataSize indicates the number of bits
- *             used for this field
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         '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, uint8_t *pending_value, uint8_t *present_value,
-    struct pldm_msg *msg, size_t payload_length);
-
-/* GetSensorReading */
-
-/** @brief Decode GetSensorReading request data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] sensor_id - A handle that is used to identify and access
- *         the sensor
- *  @param[out] rearm_event_state - true =  manually re-arm EventState after
- *         responding to this request, false = no manual re-arm
- *  @return pldm_completion_codes
- */
-
-int decode_get_sensor_reading_req(const struct pldm_msg *msg,
-				  size_t payload_length, uint16_t *sensor_id,
-				  bool8_t *rearm_event_state);
-
-/** @brief Encode GetSensorReading response data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[out] sensor_data_size - The bit width and format of reading and
- *         threshold values
- *  @param[out] sensor_operational_state - The state of the sensor itself
- *  @param[out] sensor_event_message_enable - value: { noEventGeneration,
- *         eventsDisabled, eventsEnabled, opEventsOnlyEnabled,
- *         stateEventsOnlyEnabled }
- *  @param[out] present_state - The most recently assessed state value monitored
- *         by the sensor
- *  @param[out] previous_state - The state that the presentState was entered
- *         from
- *  @param[out] event_state - Indicates which threshold crossing assertion
- *         events have been detected
- *  @param[out] present_reading - The present value indicated by the sensor
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *  @return pldm_completion_codes
- */
-
-int encode_get_sensor_reading_resp(
-    uint8_t instance_id, 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, struct pldm_msg *msg, size_t payload_length);
-
-/* Requester */
-
-/*GetPDRRepositoryInfo*/
-
-/** @brief Encode GetPDRRepositoryInfo response data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] repository_state - PLDM repository state
- *  @param[in] update_time - When the standard PDR repository data was
- *                           originally created
- *  @param[in] oem_update_time - when OEM PDRs in the PDR Repository were
- *                               originally created
- *  @param[in] record_count - Total number of PDRs in this repository
- *  @param[in] repository_size - Size of the PDR Repository in bytes
- *  @param[in] largest_record_size - Size of the largest record in the PDR
- * Repository in bytes
- *  @param[in] data_transfer_handle_timeout - Data transmission timeout
- *  @param[out] msg - Message will be written to this
- *  @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);
-
-/* GetPDR */
-
-/** @brief Create a PLDM request message for GetPDR
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] record_hndl - The recordHandle value for the PDR to be retrieved
- *  @param[in] data_transfer_hndl - Handle used to identify a particular
- *         multipart PDR data transfer operation
- *  @param[in] transfer_op_flag - Flag to indicate the first or subsequent
- *         portion of transfer
- *  @param[in] request_cnt - The maximum number of record bytes requested
- *  @param[in] record_chg_num - Used to determine whether the PDR has changed
- *        while PDR transfer is going on
- *  @param[out] msg - Message will be written to this
- *  @param[in] payload_length - Length of request message payload
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_pdr_req(uint8_t instance_id, uint32_t record_hndl,
-		       uint32_t data_transfer_hndl, uint8_t transfer_op_flag,
-		       uint16_t request_cnt, uint16_t record_chg_num,
-		       struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Decode GetPDR response data
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] next_record_hndl - The recordHandle for the PDR that is next in
- *        the PDR Repository
- *  @param[out] next_data_transfer_hndl - A handle that identifies the next
- *        portion of the PDR data to be transferred, if any
- *  @param[out] transfer_flag - Indicates the portion of PDR data being
- *        transferred
- *  @param[out] resp_cnt - The number of recordData bytes returned in this
- *        response
- *  @param[out] record_data - PDR data bytes of length resp_cnt, or NULL to
- *        skip the copy and place the actual length in resp_cnt.
- *  @param[in] record_data_length - Length of record_data
- *  @param[out] transfer_crc - A CRC-8 for the overall PDR. This is present only
- *        in the last part of a PDR being transferred
- *  @return pldm_completion_codes
- */
-int decode_get_pdr_resp(const struct pldm_msg *msg, size_t payload_length,
-			uint8_t *completion_code, uint32_t *next_record_hndl,
-			uint32_t *next_data_transfer_hndl,
-			uint8_t *transfer_flag, uint16_t *resp_cnt,
-			uint8_t *record_data, size_t record_data_length,
-			uint8_t *transfer_crc);
-
-/* SetStateEffecterStates */
-
-/** @brief Create a PLDM request message for SetStateEffecterStates
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] effecter_id - used to identify and access the effecter
- *  @param[in] comp_effecter_count - number of individual sets of effecter
- *         information. Upto eight sets of state effecter info can be accessed
- *         for a given effecter.
- *  @param[in] field - each unit is an instance of the stateField structure
- *         that is used to set the requested state for a particular effecter
- *         within the state effecter. This field holds the starting address of
- *         the stateField values. The user is responsible to allocate the
- *         memory prior to calling this command. The user has to allocate the
- *         field parameter as sizeof(set_effecter_state_field) *
- *         comp_effecter_count
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-
-int encode_set_state_effecter_states_req(uint8_t instance_id,
-					 uint16_t effecter_id,
-					 uint8_t comp_effecter_count,
-					 set_effecter_state_field *field,
-					 struct pldm_msg *msg);
-
-/** @brief Decode SetStateEffecterStates response data
- *
- *  Note:
- *  * If the return value is not PLDM_SUCCESS, it represents a
- * transport layer error.
- *  * If the completion_code value is not PLDM_SUCCESS, it represents a
- * protocol layer error and all the out-parameters are invalid.
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - PLDM completion code
- *  @return pldm_completion_codes
- */
-int decode_set_state_effecter_states_resp(const struct pldm_msg *msg,
-					  size_t payload_length,
-					  uint8_t *completion_code);
-
-/* SetNumericEffecterValue */
-
-/** @brief Create a PLDM request message for SetNumericEffecterValue
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] effecter_id - used to identify and access the effecter
- *  @param[in] effecter_data_size - The bit width and format of the setting
- * 				value for the effecter.
- * 				value:{uint8,sint8,uint16,sint16,uint32,sint32}
- *  @param[in] effecter_value - The setting value of numeric effecter being
- * 				requested.
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @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,
-    uint8_t *effecter_value, struct pldm_msg *msg, size_t payload_length);
-
-/** @brief Decode SetNumericEffecterValue response data
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - PLDM completion code
- *  @return pldm_completion_codes
- */
-int decode_set_numeric_effecter_value_resp(const struct pldm_msg *msg,
-					   size_t payload_length,
-					   uint8_t *completion_code);
-
-/** @brief Create a PLDM request message for GetStateSensorReadings
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] sensor_id - used to identify and access the simple or composite
- *         sensor
- *  @param[in] sensorRearm - Each bit location in this field corresponds to a
- *         particular sensor within the state sensor, where bit [0] corresponds
- *         to the first state sensor (sensor offset 0) and bit [7] corresponds
- *         to the eighth sensor (sensor offset 7), sequentially
- *  @param[in] reserved - value: 0x00
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_state_sensor_readings_req(uint8_t instance_id,
-					 uint16_t sensor_id,
-					 bitfield8_t sensor_rearm,
-					 uint8_t reserved,
-					 struct pldm_msg *msg);
-
-/** @brief Decode GetStateSensorReadings response data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[in,out] comp_sensor_count - The number of individual sets of sensor
- *         information that this command accesses
- *  @param[out] field - Each stateField is an instance of a stateField structure
- *         that is used to return the present operational state setting and the
- *         present state and event state for a particular set of sensor
- *         information contained within the state sensor
- *  @return pldm_completion_codes
- */
-
-int decode_get_state_sensor_readings_resp(const struct pldm_msg *msg,
-					  size_t payload_length,
-					  uint8_t *completion_code,
-					  uint8_t *comp_sensor_count,
-					  get_sensor_state_field *field);
-
-/* PlatformEventMessage */
-
-/** @brief Decode PlatformEventMessage request data
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] format_version - Version of the event format
- *  @param[out] tid - Terminus ID for the terminus that originated the event
- * message
- *  @param[out] event_class - The class of event being sent
- *  @param[out] event_data_offset - Offset where the event data should be read
- * from pldm msg
- *  @return pldm_completion_codes
- */
-int decode_platform_event_message_req(const struct pldm_msg *msg,
-				      size_t payload_length,
-				      uint8_t *format_version, uint8_t *tid,
-				      uint8_t *event_class,
-				      size_t *event_data_offset);
-
-/** @brief Encode PlatformEventMessage response data
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[in] platform_event_status - Response status of the event message
- * command
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_platform_event_message_resp(uint8_t instance_id,
-				       uint8_t completion_code,
-				       uint8_t platform_event_status,
-				       struct pldm_msg *msg);
-
-/** @brief Encode PlatformEventMessage request data
- * @param[in] instance_id - Message's instance id
- * @param[in] format_version - Version of the event format
- * @param[in] tid - Terminus ID for the terminus that originated the event
- * message
- * @param[in] event_class - The class of event being sent
- * @param[in] event_data - the event data should be read from pldm msg
- * @param[in] event_data_length - Length of the event data
- * @param[out] msg - Request message
- * @return pldm_completion_codes
- * @note Caller is responsible for memory alloc and dealloc of param
- * '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);
-
-/** @brief Decode PlatformEventMessage response data
- * @param[in] msg - Request message
- * @param[in] payload_length - Length of Response message payload
- * @param[out] completion_code - PLDM completion code
- * @param[out] platform_event_status - Response status of the event message
- * command
- * @return pldm_completion_codes
- */
-int decode_platform_event_message_resp(const struct pldm_msg *msg,
-				       size_t payload_length,
-				       uint8_t *completion_code,
-				       uint8_t *platform_event_status);
-
-/** @brief Decode sensorEventData response data
- *
- *  @param[in] event_data - event data from the response message
- *  @param[in] event_data_length - length of the event data
- *  @param[out] sensor_id -  sensorID value of the sensor
- *  @param[out] sensor_event_class_type - Type of sensor event class
- *  @param[out] event_class_data_offset - Offset where the event class data
- * should be read from event data
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'event_data'
- */
-int decode_sensor_event_data(const uint8_t *event_data,
-			     size_t event_data_length, uint16_t *sensor_id,
-			     uint8_t *sensor_event_class_type,
-			     size_t *event_class_data_offset);
-
-/** @brief Decode sensorOpState response data
- *
- *  @param[in] sensor_data - sensor_data for sensorEventClass = sensorOpState
- *  @param[in] sensor_data_length - Length of sensor_data
- *  @param[out] present_op_state - The sensorOperationalState value from the
- * state change that triggered the event message
- *  @param[out] previous_op_state - The sensorOperationalState value for the
- * state from which the present state was entered
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'sensor_data'
- */
-int decode_sensor_op_data(const uint8_t *sensor_data, size_t sensor_data_length,
-			  uint8_t *present_op_state,
-			  uint8_t *previous_op_state);
-
-/** @brief Decode stateSensorState response data
- *
- *  @param[in] sensor_data - sensor_data for sensorEventClass = stateSensorState
- *  @param[in] sensor_data_length - Length of sensor_data
- *  @param[out] sensor_offset - Identifies which state sensor within a composite
- * state sensor the event is being returned for
- *  @param[out] event_state - The event state value from the state change that
- * triggered the event message
- *  @param[out] previous_event_state - The event state value for the state from
- * which the present event state was entered
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'sensor_data'
- */
-int decode_state_sensor_data(const uint8_t *sensor_data,
-			     size_t sensor_data_length, uint8_t *sensor_offset,
-			     uint8_t *event_state,
-			     uint8_t *previous_event_state);
-
-/** @brief Decode numericSensorState response data
- *
- *  @param[in] sensor_data - sensor_data for sensorEventClass =
- * numericSensorState
- *  @param[in] sensor_data_length - Length of sensor_data
- *  @param[out] event_state - The eventState value from the state change that
- * triggered the event message
- *  @param[out] previous_event_state - The eventState value for the state from
- * which the present state was entered
- *  @param[out] sensor_data_size - The bit width and format of reading and
- * threshold values that the sensor returns
- *  @param[out] present_reading - The present value indicated by the sensor
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'sensor_data'
- */
-int decode_numeric_sensor_data(const uint8_t *sensor_data,
-			       size_t sensor_data_length, uint8_t *event_state,
-			       uint8_t *previous_event_state,
-			       uint8_t *sensor_data_size,
-			       uint32_t *present_reading);
-
-/* GetNumericEffecterValue */
-
-/** @brief Create a PLDM request message for GetNumericEffecterValue
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] effecter_id - used to identify and access the effecter
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         'msg.payload'
- */
-int encode_get_numeric_effecter_value_req(uint8_t instance_id,
-					  uint16_t effecter_id,
-					  struct pldm_msg *msg);
-
-/** @brief Create a PLDM response message for GetNumericEffecterValue
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of request message payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] effecter_data_size - The bit width and format of the setting
- *		value for the effecter.
- *		value:{uint8,sint8,uint16,sint16,uint32,sint32}
- *  @param[out] effecter_oper_state - The state of the effecter itself
- *  @param[out] pending_value - The pending numeric value setting of the
- *              effecter. The effecterDataSize field indicates the number of
- *              bits used for this field
- *  @param[out] present_value - The present numeric value setting of the
- *              effecter. The effecterDataSize indicates the number of bits
- *              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);
-
-/** @brief Decode pldmPDRRepositoryChgEvent response data
- *
- *  @param[in] event_data - eventData for pldmPDRRepositoryChgEvent
- *  @param[in] event_data_size - Length of event_data
- *  @param[out] event_data_format - This field indicates if the changedRecords
- * are of PDR Types or PDR Record Handles
- *  @param[out] number_of_change_records - The number of changeRecords following
- * this field
- *  @param[out] change_record_data_offset - Identifies where changeRecord data
- * is located within event_data
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         '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);
-
-/** @brief Encode PLDM PDR Repository Change eventData
- *  @param[in] event_data_format - Format of this event data (e.g.
- * FORMAT_IS_PDR_HANDLES)
- *  @param[in] number_of_change_records - Number of changeRecords in this
- * eventData
- *  @param[in] event_data_operations - Array of eventDataOperations
- *      (e.g. RECORDS_ADDED) for each changeRecord in this eventData. This array
- * should contain number_of_change_records elements.
- *  @param[in] numbers_of_change_entries - Array of numbers of changeEntrys
- *      for each changeRecord in this eventData. This array should contain
- *      number_of_change_records elements.
- *  @param[in] change_entries - 2-dimensional array of arrays of changeEntrys,
- *      one array per changeRecord in this eventData. The toplevel array should
- *      contain number_of_change_records elements. Each subarray [i] should
- *      contain numbers_of_change_entries[i] elements.
- *  @param[in] event_data - The eventData will be encoded into this. This entire
- *      structure must be max_change_records_size long. It must be large enough
- *      to accomodate the data to be encoded. The caller is responsible for
- *      allocating and deallocating it, including the variable-size
- *      'event_data.change_records' field. If this parameter is NULL,
- *      PLDM_SUCCESS will be returned and actual_change_records_size will be set
- *      to reflect the required size of the structure.
- *  @param[out] actual_change_records_size - The actual number of meaningful
- *      encoded bytes in event_data. The caller can over-allocate memory and use
- *      this output to determine the real size of the structure.
- *  @param[in] max_change_records_size - The size of event_data in bytes. If the
- *      encoded message would be larger than this value, an error is returned.
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- * '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);
-
-/** @brief Encode event data for a PLDM Sensor Event
- *
- *  @param[out] event_data              The object to store the encoded event in
- *  @param[in] event_data_size          Size of the allocation for event_data
- *  @param[in] sensor_id                Sensor ID
- *  @param[in] sensor_event_class       Sensor event class
- *  @param[in] sensor_offset            Offset
- *  @param[in] event_state              Event state
- *  @param[in] previous_event_state     Previous event state
- *  @param[out] actual_event_data_size  The real size in bytes of the event_data
- *  @return int pldm_completion_codes   PLDM_SUCCESS/PLDM_ERROR_INVALID_LENGTH
- *  @note If event_data is NULL, then *actual_event_data_size will be set to
- *        reflect the size of the event data, and PLDM_SUCCESS will be returned.
- *  @note The caller is responsible for allocating and deallocating the
- *        event_data
- */
-int encode_sensor_event_data(struct pldm_sensor_event_data *event_data,
-			     size_t event_data_size, uint16_t sensor_id,
-			     enum sensor_event_class_states sensor_event_class,
-			     uint8_t sensor_offset, uint8_t event_state,
-			     uint8_t previous_event_state,
-			     size_t *actual_event_data_size);
-
-/** @brief Decode PldmPDRRepositoryChangeRecord response data
- *
- *  @param[in] change_record_data - changeRecordData for
- * pldmPDRRepositoryChgEvent
- *  @param[in] change_record_data_size - Length of change_record_data
- *  @param[out] event_data_operation - This field indicates the changeEntries
- * operation types
- *  @param[out] number_of_change_entries - The number of changeEntries following
- * this field
- *  @param[out] change_entry_data_offset - Identifies where changeEntries data
- * is located within change_record_data
- *  @return pldm_completion_codes
- *  @note  Caller is responsible for memory alloc and dealloc of param
- *         '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);
-
-/* GetSensorReading */
-
-/** @brief Encode GetSensorReading request data
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] sensor_id - A handle that is used to identify and access the
- *         sensor
- *  @param[in] rearm_event_state - true =  manually re-arm EventState after
- *         responding to this request, false = no manual re-arm
- *  @param[out] msg - Message will be written to this
- *  @return pldm_completion_codes
- *  @note	Caller is responsible for memory alloc and dealloc of param
- * 		'msg.payload'
- */
-int encode_get_sensor_reading_req(uint8_t instance_id, uint16_t sensor_id,
-				  bool8_t rearm_event_state,
-				  struct pldm_msg *msg);
-
-/** @brief Decode GetSensorReading response data
- *
- *  @param[in] msg - Request message
- *  @param[in] payload_length - Length of response message payload
- *  @param[out] completion_code - PLDM completion code
- *  @param[out] sensor_data_size - The bit width and format of reading and
- *         threshold values
- *  @param[out] sensor_operational_state - The state of the sensor itself
- *  @param[out] sensor_event_message_enable - value: { noEventGeneration,
- *         eventsDisabled, eventsEnabled, opEventsOnlyEnabled,
- *         stateEventsOnlyEnabled }
- *  @param[out] present_state - The most recently assessed state value monitored
- *         by the sensor
- *  @param[out] previous_state - The state that the presentState was entered
- *         from
- *  @param[out] event_state - Indicates which threshold crossing assertion
- *         events have been detected
- *  @param[out] present_reading - The present value indicated by the sensor
- *  @return pldm_completion_codes
- */
-
-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);
-
-/** @brief Encode the SetEventReceiver request message
- *
- * @param[in] instance_id - Message's instance id
- * @param[in] event_message_global_enable - This value is used to enable or
- *        disable event message generation from the terminus value: {
- *        disable, enableAsync, enablePolling, enableAsyncKeepAlive }
- * @param[in] transport_protocol_type - This value is provided in the request
- *        to help the responder verify that the content of the
- *        eventReceiverAddressInfo field used in this request is correct for
- *        the messaging protocol supported by the terminus.
- * @param[in] event_receiver_address_info - this value is a medium and
- *        protocol-specific address that the responder should use when
- *        transmitting event messages using the indicated protocol
- * @param[in] heartbeat_timer - Amount of time in seconds after each elapsing
- *        of which the terminus shall emit a heartbeat event to the receiver
- * @param[out] msg - Argument to capture the Message
- * @return pldm_completion_codes
- */
-int encode_set_event_receiver_req(uint8_t instance_id,
-				  uint8_t event_message_global_enable,
-				  uint8_t transport_protocol_type,
-				  uint8_t event_receiver_address_info,
-				  uint16_t heartbeat_timer,
-				  struct pldm_msg *msg);
-
-/** @brief Decode the SetEventReceiver response message
- *
- * @param[in] msg - Request message
- * @param[in] payload_length - Length of response message payload
- * @param[out] completion_code - PLDM completion code
- * @return pldm_completion_codes
- */
-int decode_set_event_receiver_resp(const struct pldm_msg *msg,
-				   size_t payload_length,
-				   uint8_t *completion_code);
-
-/** @brief Decode the SetEventReceiver request message
- *
- * @param[in] msg - Request message
- * @param[in] payload_length - Length of request message payload
- * @param[out] event_message_global_enable - This value is used to enable or
- *        disable event message generation from the terminus value: {
- *        disable, enableAsync, enablePolling, enableAsyncKeepAlive }
- * @param[out] transport_protocol_type - This value is provided in the request
- *        to help the responder verify that the content of the
- *        eventReceiverAddressInfo field used in this request is correct for
- *        the messaging protocol supported by the terminus.
- * @param[out] event_receiver_address_info - This value is a medium and
- *        protocol-specific address that the responder should use when
- *        transmitting event messages using the indicated protocol
- * @param[out] heartbeat_timer - Amount of time in seconds after each elapsing
- *        of which the terminus shall emit a heartbeat event to the receiver
- * @return pldm_completion_codes
- */
-int decode_set_event_receiver_req(const struct pldm_msg *msg,
-				  size_t payload_length,
-				  uint8_t *event_message_global_enable,
-				  uint8_t *transport_protocol_type,
-				  uint8_t *event_receiver_address_info,
-				  uint16_t *heartbeat_timer);
-
-/** @brief Encode the SetEventReceiver response message
- *
- *  @param[in] instance_id - Message's instance id
- *  @param[in] completion_code - PLDM completion code
- *  @param[out] msg - Argument to capture the Message
- *  @return pldm_completion_codes
- */
-int encode_set_event_receiver_resp(uint8_t instance_id, uint8_t completion_code,
-				   struct pldm_msg *msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* PLATFORM_H */
diff --git a/subprojects/libpldm/include/libpldm/pldm.h b/subprojects/libpldm/include/libpldm/pldm.h
deleted file mode 120000
index 7d352b9..0000000
--- a/subprojects/libpldm/include/libpldm/pldm.h
+++ /dev/null
@@ -1 +0,0 @@
-requester/pldm.h
\ No newline at end of file
diff --git a/subprojects/libpldm/include/libpldm/pldm_types.h b/subprojects/libpldm/include/libpldm/pldm_types.h
deleted file mode 100644
index e48cb8c..0000000
--- a/subprojects/libpldm/include/libpldm/pldm_types.h
+++ /dev/null
@@ -1,165 +0,0 @@
-#ifndef PLDM_TYPES_H
-#define PLDM_TYPES_H
-
-#include <stdint.h>
-
-typedef union {
-	uint8_t byte;
-	struct {
-		uint8_t bit0 : 1;
-		uint8_t bit1 : 1;
-		uint8_t bit2 : 1;
-		uint8_t bit3 : 1;
-		uint8_t bit4 : 1;
-		uint8_t bit5 : 1;
-		uint8_t bit6 : 1;
-		uint8_t bit7 : 1;
-	} __attribute__((packed)) bits;
-} bitfield8_t;
-
-/** @struct pldm_version
- *
- *
- */
-typedef struct pldm_version {
-	uint8_t alpha;
-	uint8_t update;
-	uint8_t minor;
-	uint8_t major;
-} __attribute__((packed)) ver32_t;
-
-typedef uint8_t bool8_t;
-
-typedef union {
-	uint16_t value;
-	struct {
-		uint8_t bit0 : 1;
-		uint8_t bit1 : 1;
-		uint8_t bit2 : 1;
-		uint8_t bit3 : 1;
-		uint8_t bit4 : 1;
-		uint8_t bit5 : 1;
-		uint8_t bit6 : 1;
-		uint8_t bit7 : 1;
-		uint8_t bit8 : 1;
-		uint8_t bit9 : 1;
-		uint8_t bit10 : 1;
-		uint8_t bit11 : 1;
-		uint8_t bit12 : 1;
-		uint8_t bit13 : 1;
-		uint8_t bit14 : 1;
-		uint8_t bit15 : 1;
-	} __attribute__((packed)) bits;
-} bitfield16_t;
-
-typedef union {
-	uint32_t value;
-	struct {
-		uint8_t bit0 : 1;
-		uint8_t bit1 : 1;
-		uint8_t bit2 : 1;
-		uint8_t bit3 : 1;
-		uint8_t bit4 : 1;
-		uint8_t bit5 : 1;
-		uint8_t bit6 : 1;
-		uint8_t bit7 : 1;
-		uint8_t bit8 : 1;
-		uint8_t bit9 : 1;
-		uint8_t bit10 : 1;
-		uint8_t bit11 : 1;
-		uint8_t bit12 : 1;
-		uint8_t bit13 : 1;
-		uint8_t bit14 : 1;
-		uint8_t bit15 : 1;
-		uint8_t bit16 : 1;
-		uint8_t bit17 : 1;
-		uint8_t bit18 : 1;
-		uint8_t bit19 : 1;
-		uint8_t bit20 : 1;
-		uint8_t bit21 : 1;
-		uint8_t bit22 : 1;
-		uint8_t bit23 : 1;
-		uint8_t bit24 : 1;
-		uint8_t bit25 : 1;
-		uint8_t bit26 : 1;
-		uint8_t bit27 : 1;
-		uint8_t bit28 : 1;
-		uint8_t bit29 : 1;
-		uint8_t bit30 : 1;
-		uint8_t bit31 : 1;
-	} __attribute__((packed)) bits;
-} bitfield32_t;
-
-typedef union {
-	uint64_t value;
-	struct {
-		uint8_t bit0 : 1;
-		uint8_t bit1 : 1;
-		uint8_t bit2 : 1;
-		uint8_t bit3 : 1;
-		uint8_t bit4 : 1;
-		uint8_t bit5 : 1;
-		uint8_t bit6 : 1;
-		uint8_t bit7 : 1;
-		uint8_t bit8 : 1;
-		uint8_t bit9 : 1;
-		uint8_t bit10 : 1;
-		uint8_t bit11 : 1;
-		uint8_t bit12 : 1;
-		uint8_t bit13 : 1;
-		uint8_t bit14 : 1;
-		uint8_t bit15 : 1;
-		uint8_t bit16 : 1;
-		uint8_t bit17 : 1;
-		uint8_t bit18 : 1;
-		uint8_t bit19 : 1;
-		uint8_t bit20 : 1;
-		uint8_t bit21 : 1;
-		uint8_t bit22 : 1;
-		uint8_t bit23 : 1;
-		uint8_t bit24 : 1;
-		uint8_t bit25 : 1;
-		uint8_t bit26 : 1;
-		uint8_t bit27 : 1;
-		uint8_t bit28 : 1;
-		uint8_t bit29 : 1;
-		uint8_t bit30 : 1;
-		uint8_t bit31 : 1;
-		uint8_t bit32 : 1;
-		uint8_t bit33 : 1;
-		uint8_t bit34 : 1;
-		uint8_t bit35 : 1;
-		uint8_t bit36 : 1;
-		uint8_t bit37 : 1;
-		uint8_t bit38 : 1;
-		uint8_t bit39 : 1;
-		uint8_t bit40 : 1;
-		uint8_t bit41 : 1;
-		uint8_t bit42 : 1;
-		uint8_t bit43 : 1;
-		uint8_t bit44 : 1;
-		uint8_t bit45 : 1;
-		uint8_t bit46 : 1;
-		uint8_t bit47 : 1;
-		uint8_t bit48 : 1;
-		uint8_t bit49 : 1;
-		uint8_t bit50 : 1;
-		uint8_t bit51 : 1;
-		uint8_t bit52 : 1;
-		uint8_t bit53 : 1;
-		uint8_t bit54 : 1;
-		uint8_t bit55 : 1;
-		uint8_t bit56 : 1;
-		uint8_t bit57 : 1;
-		uint8_t bit58 : 1;
-		uint8_t bit59 : 1;
-		uint8_t bit60 : 1;
-		uint8_t bit61 : 1;
-		uint8_t bit62 : 1;
-		uint8_t bit63 : 1;
-	} __attribute__((packed)) bits;
-} bitfield64_t;
-
-typedef float real32_t;
-
-#endif /* PLDM_TYPES_H */
diff --git a/subprojects/libpldm/include/libpldm/requester/pldm.h b/subprojects/libpldm/include/libpldm/requester/pldm.h
deleted file mode 100644
index 9c5c71e..0000000
--- a/subprojects/libpldm/include/libpldm/requester/pldm.h
+++ /dev/null
@@ -1,113 +0,0 @@
-#ifndef MCTP_H
-#define MCTP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-#include <stdint.h>
-
-typedef uint8_t mctp_eid_t;
-
-typedef enum pldm_requester_error_codes {
-	PLDM_REQUESTER_SUCCESS = 0,
-	PLDM_REQUESTER_OPEN_FAIL = -1,
-	PLDM_REQUESTER_NOT_PLDM_MSG = -2,
-	PLDM_REQUESTER_NOT_RESP_MSG = -3,
-	PLDM_REQUESTER_NOT_REQ_MSG = -4,
-	PLDM_REQUESTER_RESP_MSG_TOO_SMALL = -5,
-	PLDM_REQUESTER_INSTANCE_ID_MISMATCH = -6,
-	PLDM_REQUESTER_SEND_FAIL = -7,
-	PLDM_REQUESTER_RECV_FAIL = -8,
-	PLDM_REQUESTER_INVALID_RECV_LEN = -9,
-} pldm_requester_rc_t;
-
-/**
- * @brief Connect to the MCTP socket and provide an fd to it. The fd can be
- *        used to pass as input to other APIs below, or can be polled.
- *
- * @return fd on success, pldm_requester_rc_t on error (errno may be set)
- */
-pldm_requester_rc_t pldm_open();
-
-/**
- * @brief Send a PLDM request message. Wait for corresponding response message,
- *        which once received, is returned to the caller.
- *
- * @param[in] eid - destination MCTP eid
- * @param[in] mctp_fd - MCTP socket fd
- * @param[in] pldm_req_msg - caller owned pointer to PLDM request msg
- * @param[in] req_msg_len - size of PLDM request msg
- * @param[out] pldm_resp_msg - *pldm_resp_msg will point to PLDM response msg,
- *             this function allocates memory, caller to free(*pldm_resp_msg) on
- *             success.
- * @param[out] resp_msg_len - caller owned pointer that will be made point to
- *             the size of the PLDM response msg.
- *
- * @return pldm_requester_rc_t (errno may be set)
- */
-pldm_requester_rc_t pldm_send_recv(mctp_eid_t eid, int mctp_fd,
-				   const uint8_t *pldm_req_msg,
-				   size_t req_msg_len, uint8_t **pldm_resp_msg,
-				   size_t *resp_msg_len);
-
-/**
- * @brief Send a PLDM request message, don't wait for response. Essentially an
- *        async API. A user of this would typically have added the MCTP fd to an
- *        event loop for polling. Once there's data available, the user would
- *        invoke pldm_recv().
- *
- * @param[in] eid - destination MCTP eid
- * @param[in] mctp_fd - MCTP socket fd
- * @param[in] pldm_req_msg - caller owned pointer to PLDM request msg
- * @param[in] req_msg_len - size of PLDM request msg
- *
- * @return pldm_requester_rc_t (errno may be set)
- */
-pldm_requester_rc_t pldm_send(mctp_eid_t eid, int mctp_fd,
-			      const uint8_t *pldm_req_msg, size_t req_msg_len);
-
-/**
- * @brief Read MCTP socket. If there's data available, return success only if
- *        data is a PLDM response message that matches eid and instance_id.
- *
- * @param[in] eid - destination MCTP eid
- * @param[in] mctp_fd - MCTP socket fd
- * @param[in] instance_id - PLDM instance id of previously sent PLDM request msg
- * @param[out] pldm_resp_msg - *pldm_resp_msg will point to PLDM response msg,
- *             this function allocates memory, caller to free(*pldm_resp_msg) on
- *             success.
- * @param[out] resp_msg_len - caller owned pointer that will be made point to
- *             the size of the PLDM response msg.
- *
- * @return pldm_requester_rc_t (errno may be set). failure is returned even
- *         when data was read, but didn't match eid or instance_id.
- */
-pldm_requester_rc_t pldm_recv(mctp_eid_t eid, int mctp_fd, uint8_t instance_id,
-			      uint8_t **pldm_resp_msg, size_t *resp_msg_len);
-
-/**
- * @brief Read MCTP socket. If there's data available, return success only if
- *        data is a PLDM response message.
- *
- * @param[in] eid - destination MCTP eid
- * @param[in] mctp_fd - MCTP socket fd
- * @param[out] pldm_resp_msg - *pldm_resp_msg will point to PLDM response msg,
- *             this function allocates memory, caller to free(*pldm_resp_msg) on
- *             success.
- * @param[out] resp_msg_len - caller owned pointer that will be made point to
- *             the size of the PLDM response msg.
- *
- * @return pldm_requester_rc_t (errno may be set). failure is returned even
- *         when data was read, but wasn't a PLDM response message
- */
-pldm_requester_rc_t pldm_recv_any(mctp_eid_t eid, int mctp_fd,
-				  uint8_t **pldm_resp_msg,
-				  size_t *resp_msg_len);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MCTP_H */
diff --git a/subprojects/libpldm/include/libpldm/state_set.h b/subprojects/libpldm/include/libpldm/state_set.h
deleted file mode 100644
index 23fd91c..0000000
--- a/subprojects/libpldm/include/libpldm/state_set.h
+++ /dev/null
@@ -1,236 +0,0 @@
-#ifndef STATE_SET_H
-#define STATE_SET_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @brief PLDM State Set IDs in DSP0249_1.1.0 specification
- */
-enum pldm_state_set_ids {
-
-	/* Table 1 - General State Sets */
-	PLDM_STATE_SET_HEALTH_STATE = 1,
-	PLDM_STATE_SET_AVAILABILITY = 2,
-	PLDM_STATE_SET_PREDICTIVE_CONDITION = 3,
-	PLDM_STATE_SET_REDUNDANCY_STATUS = 4,
-	PLDM_STATE_SET_HEALTH_REDUNDANCY_TREND = 5,
-	PLDM_STATE_SET_GROUP_RESOURCE_LEVEL = 6,
-	PLDM_STATE_SET_REDUNDANCY_ENTITY_ROLE = 7,
-	PLDM_STATE_SET_OPERATIONAL_STATUS = 8,
-	PLDM_STATE_SET_OPERATIONAL_STRESS_STATUS = 9,
-	PLDM_STATE_SET_OPERATIONAL_FAULT_STATUS = 10,
-	PLDM_STATE_SET_OPERATIONAL_RUNNING_STATUS = 11,
-	PLDM_STATE_SET_OPERATIONAL_CONNECTION_STATUS = 12,
-	PLDM_STATE_SET_PRESENCE = 13,
-	PLDM_STATE_SET_PERFORMANCE = 14,
-	PLDM_STATE_SET_CONFIGURATION_STATE = 15,
-	PLDM_STATE_SET_CHANGED_CONFIGURATION = 16,
-	PLDM_STATE_SET_IDENTIFY_STATE = 17,
-	PLDM_STATE_SET_VERSION = 18,
-	PLDM_STATE_SET_ALARM_STATE = 19,
-	PLDM_STATE_SET_DEVICE_INITIALIZATION = 20,
-	PLDM_STATE_SET_THERMAL_TRIP = 21,
-
-	/* Table 2 - Communication State Sets */
-	PLDM_STATE_SET_HEARTBEAT = 32,
-	PLDM_STATE_SET_LINK_STATE = 33,
-
-	/* Table 3 - General Sensor State Sets */
-	PLDM_STATE_SET_SMOKE_STATE = 64,
-	PLDM_STATE_SET_HUMIDITY_STATE = 65,
-	PLDM_STATE_SET_DOOR_STATE = 66,
-	PLDM_STATE_SET_SWITCH_STATE = 67,
-
-	/* Table 4 - Security-Related State Sets */
-	PLDM_STATE_SET_LOCK_STATE = 96,
-	PLDM_STATE_SET_PHYSICAL_SECURITY = 97,
-	PLDM_STATE_SET_DOCK_AUTHORIZATION = 98,
-	PLDM_STATE_SET_HW_SECURITY = 99,
-	PLDM_STATE_SET_PHYSICAL_COMM_CONNECTION = 100,
-	PLDM_STATE_SET_COMM_LEASH_STATUS = 101,
-	PLDM_STATE_SET_FOREIGN_NW_DETECTION_STATUS = 102,
-	PLDM_STATE_SET_PASSWORD_PROTECTED_ACCESS_SECURITY = 103,
-	PLDM_STATE_SET_SECURITY_ACCESS_PRIVILEGE_LEVEL = 104,
-	PLDM_STATE_SET_SESSION_AUDIT = 105,
-
-	/* Table 5 - Software-Related State Sets */
-	PLDM_STATE_SET_SW_TERMINATION_STATUS = 129,
-
-	/* Table 6 - Redundant Storage Media (RAID) State Sets */
-	PLDM_STATE_SET_STORAGE_MEDIA_ACTIVITY = 160,
-
-	/* Table 7 - Boot-Related State Sets */
-	PLDM_STATE_SET_BOOT_RESTART_CAUSE = 192,
-	PLDM_STATE_SET_BOOT_RESTART_REQUEST = 193,
-	PLDM_STATE_SET_ENTITY_BOOT_STATUS = 194,
-	PLDM_STATE_SET_BOOT_ERROR_STATUS = 195,
-	PLDM_STATE_SET_BOOT_PROGRESS = 196,
-	PLDM_STATE_SET_SYS_FIRMWARE_HANG = 197,
-	PLDM_STATE_SET_POST_ERRORS = 198,
-
-	/* Table 8 - Monitored System-Related State Sets */
-	PLDM_STATE_SET_LOG_FILL_STATUS = 225,
-	PLDM_STATE_SET_LOG_FILTER_STATUS = 226,
-	PLDM_STATE_SET_LOG_TIMESTAMP_CHANGE = 227,
-	PLDM_STATE_SET_INTERRUPT_REQUESTED = 228,
-	PLDM_STATE_SET_INTERRUPT_RECEIVED = 229,
-	PLDM_STATE_SET_DIAGNOSTIC_INTERRUPT_REQUESTED = 230,
-	PLDM_STATE_SET_DIAGNOSTIC_INTERRUPT_RECEIVED = 231,
-	PLDM_STATE_SET_IO_CHANNEL_CHECK_NMI_REQUESTED = 232,
-	PLDM_STATE_SET_IO_CHANNEL_CHECK_NMI_RECEIVED = 233,
-	PLDM_STATE_SET_FATAL_NMI_REQUESTED = 234,
-	PLDM_STATE_SET_FATAL_NMI_RECEIVED = 235,
-	PLDM_STATE_SET_SOFTWARE_NMI_REQUESTED = 236,
-	PLDM_STATE_SET_SOFTWARE_NMI_RECEIVED = 237,
-	PLDM_STATE_SET_SMI_REQUESTED = 238,
-	PLDM_STATE_SET_SMI_RECEIVED = 238,
-	PLDM_STATE_SET_PCI_PERR_REQUESTED = 239,
-	PLDM_STATE_SET_PCI_PERR_RECEIVED = 240,
-	PLDM_STATE_SET_PCI_SERR_REQUESTED = 241,
-	PLDM_STATE_SET_PCI_SERR_RECEIVED = 242,
-	PLDM_STATE_SET_BUS_ERROR_STATUS = 243,
-	PLDM_STATE_SET_WATCHDOG_STATUS = 244,
-
-	/* Table 9 - Power-Related State Sets */
-	PLDM_STATE_SET_POWER_SUPPLY_STATE = 256,
-	PLDM_STATE_SET_DEVICE_POWER_STATE = 257,
-	PLDM_STATE_SET_ACPI_POWER_STATE = 258,
-	PLDM_STATE_SET_BACKUP_POWER_SOURCE = 259,
-	PLDM_STATE_SET_SYSTEM_POWER_STATE = 260,
-	PLDM_STATE_SET_BATTERY_ACTIVITY = 261,
-	PLDM_STATE_SET_BATTERY_STATE = 262,
-
-	/* Table 10 - Processor-Related State Sets */
-	PLDM_STATE_SET_PROC_POWER_STATE = 288,
-	PLDM_STATE_SET_POWER_PERFORMANCE_STATE = 289,
-	PLDM_STATE_SET_PROC_ERROR_STATUS = 290,
-	PLDM_STATE_SET_BIST_FAILURE_STATUS = 291,
-	PLDM_STATE_SET_IBIST_FAILURE_STATUS = 292,
-	PLDM_STATE_SET_PROC_HANG_IN_POST = 293,
-	PLDM_STATE_SET_PROC_STARTUP_FAILURE = 294,
-	PLDM_STATE_SET_UNCORRECTABLE_CPU_ERROR = 295,
-	PLDM_STATE_SET_MACHINE_CHECK_ERROR = 296,
-	PLDM_STATE_SET_CORRECTED_MACHINE_CHECK = 297,
-
-	/* Table 11 - Memory-Related State Sets */
-	PLDM_STATE_SET_CACHE_STATUS = 320,
-	PLDM_STATE_SET_MEMORY_ERROR_STATUS = 321,
-	PLDM_STATE_SET_REDUNDANT_MEMORY_ACTIVITY_STATUS = 322,
-
-	/* Table 12 - Storage Device State Sets */
-	PLDM_STATE_SET_ERROR_DETECTION_STATUS = 330,
-	PLDM_STATE_SET_STUCK_BIT_STATUS = 331,
-	PLDM_STATE_SET_SCRUB_STATUS = 332,
-
-	/* Table 13 - Slot/Module State Sets */
-	PLDM_STATE_SET_SLOT_OCCUPANCY = 352,
-	PLDM_STATE_SET_SLOT_STATE = 353,
-};
-
-/* @brief List of states for the Health State state set (ID 1).
- */
-enum pldm_state_set_health_state_values {
-	PLDM_STATE_SET_HEALTH_STATE_NORMAL = 1,
-	PLDM_STATE_SET_HEALTH_STATE_NON_CRITICAL = 2,
-	PLDM_STATE_SET_HEALTH_STATE_CRITICAL = 3,
-	PLDM_STATE_SET_HEALTH_STATE_FATAL = 4,
-	PLDM_STATE_SET_HEALTH_STATE_UPPER_NON_CRITICAL = 5,
-	PLDM_STATE_SET_HEALTH_STATE_LOWER_NON_CRITICAL = 6,
-	PLDM_STATE_SET_HEALTH_STATE_UPPER_CRITICAL = 7,
-	PLDM_STATE_SET_HEALTH_STATE_LOWER_CRITICAL = 8,
-	PLDM_STATE_SET_HEALTH_STATE_UPPER_FATAL = 9,
-	PLDM_STATE_SET_HEALTH_STATE_LOWER_FATAL = 10,
-};
-
-/* @brief List of states for the State Set Availability (ID 2),
- */
-enum pldm_state_set_availability_values {
-	PLDM_STATE_SET_AVAILABILITY_REBOOTING = 8
-};
-
-/* @brief List of states for the Operational Fault status (ID 10).
- */
-enum pldm_state_set_operational_fault_status_values {
-	PLDM_STATE_SET_OPERATIONAL_FAULT_STATUS_NORMAL = 1,
-	PLDM_STATE_SET_OPERATIONAL_FAULT_STATUS_STRESSED = 2,
-};
-
-/* @brief List of states for the Operational Running Status state set (ID 11).
- */
-enum pldm_state_set_operational_running_status_values {
-	PLDM_STATE_SET_OPERATIONAL_RUNNING_STATUS_STARTING = 1,
-	PLDM_STATE_SET_OPERATIONAL_RUNNING_STATUS_STOPPING = 2,
-	PLDM_STATE_SET_OPERATIONAL_RUNNING_STATUS_STOPPED = 3,
-	PLDM_STATE_SET_OPERATIONAL_RUNNING_STATUS_IN_SERVICE = 4,
-	PLDM_STATE_SET_OPERATIONAL_RUNNING_STATUS_ABORTED = 5,
-	PLDM_STATE_SET_OPERATIONAL_RUNNING_STATUS_DORMANT = 6
-};
-
-/* @brief List of states for the Set Identify state (ID 17).
- */
-enum pldm_state_set_identify_state_values {
-	PLDM_STATE_SET_IDENTIFY_STATE_UNASSERTED = 1,
-	PLDM_STATE_SET_IDENTIFY_STATE_ASSERTED = 2,
-};
-
-/* @brief List of states for the Set Thermal Trip state set (ID 21).
- */
-enum pldm_state_set_thermal_trip_values {
-	PLDM_STATE_SET_THERMAL_TRIP_STATUS_NORMAL = 1,
-	PLDM_STATE_SET_THERMAL_TRIP_STATUS_THERMAL_TRIP = 2,
-};
-
-/* @brief List of states for the Software-related state set (ID 129).
- */
-enum pldm_software_termination_status_values {
-	PLDM_SW_TERM_NORMAL = 1,
-	PLDM_SW_TERM_SOFTWARE_TERMINATION_DETECTED = 2,
-	PLDM_SW_TERM_CRITICAL_STOP_DURING_LOAD_INITIALIZATION = 3,
-	PLDM_SW_TERM_RUN_TIME_CRITICAL_STOP = 4,
-	PLDM_SW_TERM_GRACEFUL_SHUTDOWN_REQUESTED = 5,
-	PLDM_SW_TERM_GRACEFUL_RESTART_REQUESTED = 6,
-	PLDM_SW_TERM_GRACEFUL_SHUTDOWN = 7,
-	PLDM_SW_TERM_TERMINATION_REQUEST_FAILED = 8,
-};
-
-/* @brief List of states for the Boot Restart Cause state set (ID 192).
- */
-enum pldm_state_set_boot_restart_cause_values {
-	PLDM_STATE_SET_BOOT_RESTART_CAUSE_POWERED_UP = 1,
-	PLDM_STATE_SET_BOOT_RESTART_CAUSE_HARD_RESET = 2,
-	PLDM_STATE_SET_BOOT_RESTART_CAUSE_WARM_RESET = 3,
-	PLDM_STATE_SET_BOOT_RESTART_CAUSE_MANUAL_HARD_RESET = 4,
-	PLDM_STATE_SET_BOOT_RESTART_CAUSE_MANUAL_WARM_RESET = 5,
-	PLDM_STATE_SET_BOOT_RESTART_CAUSE_SYSTEM_RESTART = 6,
-	PLDM_STATE_SET_BOOT_RESTART_CAUSE_WATCHDOG_TIMEOUT = 7
-};
-
-/* @brief List of states for the Boot Progress state set (ID 196).
- */
-enum pldm_state_set_boot_progress_state_values {
-	PLDM_STATE_SET_BOOT_PROG_STATE_NOT_ACTIVE = 1,
-	PLDM_STATE_SET_BOOT_PROG_STATE_COMPLETED = 2,
-	PLDM_STATE_SET_BOOT_PROG_STATE_MEM_INITIALIZATION = 3,
-	PLDM_STATE_SET_BOOT_PROG_STATE_SEC_PROC_INITIALIZATION = 5,
-	PLDM_STATE_SET_BOOT_PROG_STATE_PCI_RESORUCE_CONFIG = 9,
-	PLDM_STATE_SET_BOOT_PROG_STATE_STARTING_OP_SYS = 21,
-	PLDM_STATE_SET_BOOT_PROG_STATE_BASE_BOARD_INITIALIZATION = 22,
-	PLDM_STATE_SET_BOOT_PROG_STATE_PRIMARY_PROC_INITIALIZATION = 26,
-};
-
-/* @brief List of states for the System Power State set (ID 260).
- */
-enum pldm_state_set_system_power_state_values {
-	PLDM_STATE_SET_SYS_POWER_STATE_OFF_SOFT_GRACEFUL = 9
-};
-
-/* OEM ranges */
-#define PLDM_OEM_STATE_SET_ID_START 32768
-#define PLDM_OEM_STATE_SET_ID_END 65535
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* STATE_SET_H */
diff --git a/subprojects/libpldm/include/libpldm/states.h b/subprojects/libpldm/include/libpldm/states.h
deleted file mode 100644
index a89648d..0000000
--- a/subprojects/libpldm/include/libpldm/states.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef STATES_H
-#define STATES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "pldm_types.h"
-
-/** @brief PLDM enums for the boot progress state set
- */
-enum pldm_boot_progress_states {
-	PLDM_BOOT_NOT_ACTIVE = 1,
-	PLDM_BOOT_COMPLETED = 2,
-};
-
-/** @brief PLDM enums for system power states
- */
-enum pldm_system_power_states {
-	PLDM_OFF_SOFT_GRACEFUL = 9,
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* STATES_H */
diff --git a/subprojects/libpldm/include/libpldm/utils.h b/subprojects/libpldm/include/libpldm/utils.h
deleted file mode 100644
index 35b039b..0000000
--- a/subprojects/libpldm/include/libpldm/utils.h
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef UTILS_H__
-#define UTILS_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "pldm_types.h"
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-
-/** @struct variable_field
- *
- *  Structure representing variable field in the pldm message
- */
-struct variable_field {
-	const uint8_t *ptr;
-	size_t length;
-};
-
-/** @brief Compute Crc8(same as the one used by SMBUS)
- *
- *  @param[in] data - Pointer to the target data
- *  @param[in] size - Size of the data
- *  @return The checksum
- */
-uint8_t crc8(const void *data, size_t size);
-
-/** @brief Compute Crc32(same as the one used by IEEE802.3)
- *
- *  @param[in] data - Pointer to the target data
- *  @param[in] size - Size of the data
- *  @return The checksum
- */
-uint32_t crc32(const void *data, size_t size);
-
-/** @brief Convert ver32_t to string
- *  @param[in] version - Pointer to ver32_t
- *  @param[out] buffer - Pointer to the buffer
- *  @param[in] buffer_size - Size of the buffer
- *  @return The number of characters(excluding the null byte) or negative if
- * error is encountered
- */
-int ver2str(const ver32_t *version, char *buffer, size_t buffer_size);
-
-/** @brief Convert bcd number(uint8_t) to decimal
- *  @param[in] bcd - bcd number
- *  @return the decimal number
- */
-uint8_t bcd2dec8(uint8_t bcd);
-
-/** @brief Convert decimal number(uint8_t) to bcd
- *  @param[in] dec - decimal number
- *  @return the bcd number
- */
-uint8_t dec2bcd8(uint8_t dec);
-
-/** @brief Convert bcd number(uint16_t) to decimal
- *  @param[in] bcd - bcd number
- *  @return the decimal number
- */
-uint16_t bcd2dec16(uint16_t bcd);
-
-/** @brief Convert decimal number(uint16_t) to bcd
- *  @param[in] dec - decimal number
- *  @return the bcd number
- */
-uint16_t dec2bcd16(uint16_t dec);
-
-/** @brief Convert bcd number(uint32_t) to decimal
- *  @param[in] bcd - bcd number
- *  @return the decimal number
- */
-uint32_t bcd2dec32(uint32_t bcd);
-
-/** @brief Convert decimal number(uint32_t) to bcd
- *  @param[in] dec - decimal number
- *  @return the bcd number
- */
-uint32_t dec2bcd32(uint32_t dec);
-
-/** @brief Check whether the input time is legal
- *
- *  @param[in] seconds. Value range 0~59
- *  @param[in] minutes. Value range 0~59
- *  @param[in] hours. Value range 0~23
- *  @param[in] day. Value range 1~31
- *  @param[in] month. Value range 1~12
- *  @param[in] year. Value range 1970~
- *  @return true if time is legal,false if time is illegal
- */
-bool is_time_legal(uint8_t seconds, uint8_t minutes, uint8_t hours, uint8_t day,
-		   uint8_t month, uint16_t year);
-
-/** @brief Check whether transfer flag is valid
- *
- *  @param[in] transfer_flag - TransferFlag
- *
- *  @return true if transfer flag is valid, false if not
- */
-bool is_transfer_flag_valid(uint8_t transfer_flag);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/subprojects/libpldm/libpldm.pc.in b/subprojects/libpldm/libpldm.pc.in
deleted file mode 100644
index d6bdcf8..0000000
--- a/subprojects/libpldm/libpldm.pc.in
+++ /dev/null
@@ -1,14 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: libpldm
-Description: PLDM encode/decode C library
-URL: https://github.com/openbmc/pldm/libpldm
-Version: @VERSION@
-Requires: @AX_PACKAGE_REQUIRES@
-Requires.private: @AX_PACKAGE_REQUIRES_PRIVATE@
-Libs: -L@libdir@ -lpldm
-Cflags: -I@includedir@
-
diff --git a/subprojects/libpldm/meson.build b/subprojects/libpldm/meson.build
deleted file mode 100644
index fe06a35..0000000
--- a/subprojects/libpldm/meson.build
+++ /dev/null
@@ -1,50 +0,0 @@
-project('libpldm', ['c','cpp'],
-    default_options: [
-      'buildtype=debugoptimized',
-      'warning_level=3',
-      'werror=true',
-      'cpp_std=c++20',
-      'c_std=c17',
-      'tests=' + (meson.is_subproject() ? 'disabled' : 'enabled'),
-    ],
-    version: '0.1.0',
-    meson_version: '>=0.63.0',
-)
-
-add_project_arguments('-D_DEFAULT_SOURCE',language:['c'])
-
-libpldm_sources = files()
-subdir('src')
-
-libpldm_include_dir = ['include']
-libpldm_headers = files()
-
-subdir('include/libpldm')
-
-libpldm = library(
-  'pldm',
-   libpldm_sources,
-   implicit_include_directories: false,
-   include_directories: libpldm_include_dir,
-   version: meson.project_version(),
-   install: true
-   )
-
-install_headers(
-  libpldm_headers,
-  subdir:'libpldm'
-  )
-
-libpldm_dep = declare_dependency(
-  include_directories: libpldm_include_dir,
-  link_with: libpldm)
-
-import('pkgconfig').generate(
-  name: 'libpldm',
-  description: 'PLDM protocol encode/decode C lib',
-  version: meson.project_version(),
-  libraries: libpldm)
-
-if get_option('tests').enabled()
-  subdir('tests')
-endif
diff --git a/subprojects/libpldm/meson_options.txt b/subprojects/libpldm/meson_options.txt
deleted file mode 100644
index 0197fa9..0000000
--- a/subprojects/libpldm/meson_options.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-option('tests', type: 'feature', description: 'Build tests', value: 'enabled')
-option('oem-ibm', type: 'feature', description: 'Enable IBM OEM PLDM', yield: true)
-option('requester-api', type: 'feature', description: 'Enable libpldm requester API', value: 'enabled')
diff --git a/subprojects/libpldm/src/base.c b/subprojects/libpldm/src/base.c
deleted file mode 100644
index 9a5ae09..0000000
--- a/subprojects/libpldm/src/base.c
+++ /dev/null
@@ -1,488 +0,0 @@
-#include <endian.h>
-#include <string.h>
-
-#include "base.h"
-
-uint8_t pack_pldm_header(const struct pldm_header_info *hdr,
-			 struct pldm_msg_hdr *msg)
-{
-	if (msg == NULL || hdr == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (hdr->msg_type != PLDM_RESPONSE && hdr->msg_type != PLDM_REQUEST &&
-	    hdr->msg_type != PLDM_ASYNC_REQUEST_NOTIFY) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (hdr->instance > PLDM_INSTANCE_MAX) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (hdr->pldm_type > (PLDM_MAX_TYPES - 1)) {
-		return PLDM_ERROR_INVALID_PLDM_TYPE;
-	}
-
-	uint8_t datagram = (hdr->msg_type == PLDM_ASYNC_REQUEST_NOTIFY) ? 1 : 0;
-
-	if (hdr->msg_type == PLDM_RESPONSE) {
-		msg->request = PLDM_RESPONSE;
-	} else if (hdr->msg_type == PLDM_REQUEST ||
-		   hdr->msg_type == PLDM_ASYNC_REQUEST_NOTIFY) {
-		msg->request = PLDM_REQUEST;
-	}
-	msg->datagram = datagram;
-	msg->reserved = 0;
-	msg->instance_id = hdr->instance;
-	msg->header_ver = PLDM_CURRENT_VERSION;
-	msg->type = hdr->pldm_type;
-	msg->command = hdr->command;
-
-	return PLDM_SUCCESS;
-}
-
-uint8_t unpack_pldm_header(const struct pldm_msg_hdr *msg,
-			   struct pldm_header_info *hdr)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (msg->request == PLDM_RESPONSE) {
-		hdr->msg_type = PLDM_RESPONSE;
-	} else {
-		hdr->msg_type =
-		    msg->datagram ? PLDM_ASYNC_REQUEST_NOTIFY : PLDM_REQUEST;
-	}
-
-	hdr->instance = msg->instance_id;
-	hdr->pldm_type = msg->type;
-	hdr->command = msg->command;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_types_req(uint8_t instance_id, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.command = PLDM_GET_PLDM_TYPES;
-
-	return pack_pldm_header(&header, &(msg->hdr));
-}
-
-int encode_get_commands_req(uint8_t instance_id, uint8_t type, ver32_t version,
-			    struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.command = PLDM_GET_PLDM_COMMANDS;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_commands_req *request =
-	    (struct pldm_get_commands_req *)msg->payload;
-
-	request->type = type;
-	request->version = version;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_types_resp(uint8_t instance_id, uint8_t completion_code,
-			  const bitfield8_t *types, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.command = PLDM_GET_PLDM_TYPES;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_types_resp *response =
-	    (struct pldm_get_types_resp *)msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-		if (types == NULL) {
-			return PLDM_ERROR_INVALID_DATA;
-		}
-		memcpy(response->types, &(types->byte), PLDM_MAX_TYPES / 8);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_commands_req(const struct pldm_msg *msg, size_t payload_length,
-			    uint8_t *type, ver32_t *version)
-{
-	if (msg == NULL || type == NULL || version == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_COMMANDS_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_commands_req *request =
-	    (struct pldm_get_commands_req *)msg->payload;
-	*type = request->type;
-	*version = request->version;
-	return PLDM_SUCCESS;
-}
-
-int encode_get_commands_resp(uint8_t instance_id, uint8_t completion_code,
-			     const bitfield8_t *commands, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.command = PLDM_GET_PLDM_COMMANDS;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_commands_resp *response =
-	    (struct pldm_get_commands_resp *)msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-		if (commands == NULL) {
-			return PLDM_ERROR_INVALID_DATA;
-		}
-		memcpy(response->commands, &(commands->byte),
-		       PLDM_MAX_CMDS_PER_TYPE / 8);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_types_resp(const struct pldm_msg *msg, size_t payload_length,
-			  uint8_t *completion_code, bitfield8_t *types)
-{
-	if (msg == NULL || types == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != PLDM_GET_TYPES_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_types_resp *response =
-	    (struct pldm_get_types_resp *)msg->payload;
-
-	memcpy(&(types->byte), response->types, PLDM_MAX_TYPES / 8);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_commands_resp(const struct pldm_msg *msg, size_t payload_length,
-			     uint8_t *completion_code, bitfield8_t *commands)
-{
-	if (msg == NULL || commands == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != PLDM_GET_COMMANDS_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_commands_resp *response =
-	    (struct pldm_get_commands_resp *)msg->payload;
-
-	memcpy(&(commands->byte), response->commands,
-	       PLDM_MAX_CMDS_PER_TYPE / 8);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_version_req(uint8_t instance_id, uint32_t transfer_handle,
-			   uint8_t transfer_opflag, uint8_t type,
-			   struct pldm_msg *msg)
-{
-	if (NULL == msg) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_BASE;
-	header.command = PLDM_GET_PLDM_VERSION;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_version_req *request =
-	    (struct pldm_get_version_req *)msg->payload;
-	transfer_handle = htole32(transfer_handle);
-	request->transfer_handle = transfer_handle;
-	request->transfer_opflag = transfer_opflag;
-	request->type = type;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_version_resp(uint8_t instance_id, uint8_t completion_code,
-			    uint32_t next_transfer_handle,
-			    uint8_t transfer_flag, const ver32_t *version_data,
-			    size_t version_size, struct pldm_msg *msg)
-{
-	if (NULL == msg) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_BASE;
-	header.command = PLDM_GET_PLDM_VERSION;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_version_resp *response =
-	    (struct pldm_get_version_resp *)msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->next_transfer_handle = htole32(next_transfer_handle);
-		response->transfer_flag = transfer_flag;
-		memcpy(response->version_data, (uint8_t *)version_data,
-		       version_size);
-	}
-	return PLDM_SUCCESS;
-}
-
-int decode_get_version_req(const struct pldm_msg *msg, size_t payload_length,
-			   uint32_t *transfer_handle, uint8_t *transfer_opflag,
-			   uint8_t *type)
-{
-
-	if (payload_length != PLDM_GET_VERSION_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_version_req *request =
-	    (struct pldm_get_version_req *)msg->payload;
-	*transfer_handle = le32toh(request->transfer_handle);
-	*transfer_opflag = request->transfer_opflag;
-	*type = request->type;
-	return PLDM_SUCCESS;
-}
-
-int decode_get_version_resp(const struct pldm_msg *msg, size_t payload_length,
-			    uint8_t *completion_code,
-			    uint32_t *next_transfer_handle,
-			    uint8_t *transfer_flag, ver32_t *version)
-{
-	if (msg == NULL || next_transfer_handle == NULL ||
-	    transfer_flag == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length < PLDM_GET_VERSION_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_version_resp *response =
-	    (struct pldm_get_version_resp *)msg->payload;
-
-	*next_transfer_handle = le32toh(response->next_transfer_handle);
-	*transfer_flag = response->transfer_flag;
-	memcpy(version, (uint8_t *)response->version_data, sizeof(ver32_t));
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_tid_req(uint8_t instance_id, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.command = PLDM_GET_TID;
-
-	return pack_pldm_header(&header, &(msg->hdr));
-}
-int encode_get_tid_resp(uint8_t instance_id, uint8_t completion_code,
-			uint8_t tid, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.command = PLDM_GET_TID;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_tid_resp *response =
-	    (struct pldm_get_tid_resp *)msg->payload;
-	response->completion_code = completion_code;
-	response->tid = tid;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_tid_resp(const struct pldm_msg *msg, size_t payload_length,
-			uint8_t *completion_code, uint8_t *tid)
-{
-	if (msg == NULL || tid == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != PLDM_GET_TID_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_tid_resp *response =
-	    (struct pldm_get_tid_resp *)msg->payload;
-
-	*tid = response->tid;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || pldm_type == NULL || transfer_opflag == NULL ||
-	    transfer_ctx == NULL || transfer_handle == NULL ||
-	    section_offset == NULL || section_length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_MULTIPART_RECEIVE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_multipart_receive_req *request =
-	    (struct pldm_multipart_receive_req *)msg->payload;
-
-	if (request->pldm_type != PLDM_BASE) {
-		return PLDM_ERROR_INVALID_PLDM_TYPE;
-	}
-
-	// Any enum value above PLDM_XFER_CURRENT_PART is invalid.
-	if (request->transfer_opflag > PLDM_XFER_CURRENT_PART) {
-		return PLDM_INVALID_TRANSFER_OPERATION_FLAG;
-	}
-
-	// A section offset of 0 is only valid on FIRST_PART or COMPLETE Xfers.
-	uint32_t sec_offset = le32toh(request->section_offset);
-	if (sec_offset == 0 &&
-	    (request->transfer_opflag != PLDM_XFER_FIRST_PART &&
-	     request->transfer_opflag != PLDM_XFER_COMPLETE)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	uint32_t handle = le32toh(request->transfer_handle);
-	if (handle == 0 && request->transfer_opflag != PLDM_XFER_COMPLETE) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*pldm_type = request->pldm_type;
-	*transfer_opflag = request->transfer_opflag;
-	*transfer_ctx = request->transfer_ctx;
-	*transfer_handle = handle;
-	*section_offset = sec_offset;
-	*section_length = le32toh(request->section_length);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_cc_only_resp(uint8_t instance_id, uint8_t type, uint8_t command,
-			uint8_t cc, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = type;
-	header.command = command;
-
-	uint8_t rc = pack_pldm_header(&header, &msg->hdr);
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	msg->payload[0] = cc;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_pldm_header_only(uint8_t msg_type, uint8_t instance_id,
-			    uint8_t pldm_type, uint8_t command,
-			    struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = msg_type;
-	header.instance = instance_id;
-	header.pldm_type = pldm_type;
-	header.command = command;
-	return pack_pldm_header(&header, &(msg->hdr));
-}
diff --git a/subprojects/libpldm/src/bios.c b/subprojects/libpldm/src/bios.c
deleted file mode 100644
index 8d93a6a..0000000
--- a/subprojects/libpldm/src/bios.c
+++ /dev/null
@@ -1,668 +0,0 @@
-#include "bios.h"
-#include "utils.h"
-#include <endian.h>
-#include <stdbool.h>
-#include <string.h>
-
-int encode_get_date_time_req(uint8_t instance_id, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_GET_DATE_TIME;
-	return pack_pldm_header(&header, &(msg->hdr));
-}
-
-int encode_get_date_time_resp(uint8_t instance_id, uint8_t completion_code,
-			      uint8_t seconds, uint8_t minutes, uint8_t hours,
-			      uint8_t day, uint8_t month, uint16_t year,
-			      struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_GET_DATE_TIME;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_date_time_resp *response =
-	    (struct pldm_get_date_time_resp *)msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->completion_code = completion_code;
-		response->seconds = seconds;
-		response->minutes = minutes;
-		response->hours = hours;
-		response->day = day;
-		response->month = month;
-		response->year = htole16(year);
-	}
-	return PLDM_SUCCESS;
-}
-
-int decode_get_date_time_resp(const struct pldm_msg *msg, size_t payload_length,
-			      uint8_t *completion_code, uint8_t *seconds,
-			      uint8_t *minutes, uint8_t *hours, uint8_t *day,
-			      uint8_t *month, uint16_t *year)
-{
-	if (msg == NULL || seconds == NULL || minutes == NULL ||
-	    hours == NULL || day == NULL || month == NULL || year == NULL ||
-	    completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != PLDM_GET_DATE_TIME_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_date_time_resp *response =
-	    (struct pldm_get_date_time_resp *)msg->payload;
-
-	*seconds = response->seconds;
-	*minutes = response->minutes;
-	*hours = response->hours;
-	*day = response->day;
-	*month = response->month;
-	*year = le16toh(response->year);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_date_time_req(uint8_t instance_id, uint8_t seconds,
-			     uint8_t minutes, uint8_t hours, uint8_t day,
-			     uint8_t month, uint16_t year, struct pldm_msg *msg,
-			     size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (payload_length != sizeof(struct pldm_set_date_time_req)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if (!is_time_legal(seconds, minutes, hours, day, month, year)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_SET_DATE_TIME;
-
-	uint8_t rc = pack_pldm_header(&header, &msg->hdr);
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_set_date_time_req *request =
-	    (struct pldm_set_date_time_req *)msg->payload;
-	request->seconds = dec2bcd8(seconds);
-	request->minutes = dec2bcd8(minutes);
-	request->hours = dec2bcd8(hours);
-	request->day = dec2bcd8(day);
-	request->month = dec2bcd8(month);
-	request->year = htole16(dec2bcd16(year));
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_date_time_req(const struct pldm_msg *msg, size_t payload_length,
-			     uint8_t *seconds, uint8_t *minutes, uint8_t *hours,
-			     uint8_t *day, uint8_t *month, uint16_t *year)
-{
-	if (msg == NULL || seconds == NULL || minutes == NULL ||
-	    hours == NULL || day == NULL || month == NULL || year == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (payload_length != sizeof(struct pldm_set_date_time_req)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	const struct pldm_set_date_time_req *request =
-	    (struct pldm_set_date_time_req *)msg->payload;
-
-	*seconds = bcd2dec8(request->seconds);
-	*minutes = bcd2dec8(request->minutes);
-	*hours = bcd2dec8(request->hours);
-	*day = bcd2dec8(request->day);
-	*month = bcd2dec8(request->month);
-	*year = bcd2dec16(le16toh(request->year));
-
-	if (!is_time_legal(*seconds, *minutes, *hours, *day, *month, *year)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_date_time_resp(uint8_t instance_id, uint8_t completion_code,
-			      struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (payload_length != sizeof(struct pldm_only_cc_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_SET_DATE_TIME;
-
-	uint8_t rc = pack_pldm_header(&header, &msg->hdr);
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_only_cc_resp *response =
-	    (struct pldm_only_cc_resp *)msg->payload;
-	response->completion_code = completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_date_time_resp(const struct pldm_msg *msg, size_t payload_length,
-			      uint8_t *completion_code)
-{
-	if (msg == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != sizeof(struct pldm_only_cc_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_bios_table_resp(uint8_t instance_id, uint8_t completion_code,
-			       uint32_t next_transfer_handle,
-			       uint8_t transfer_flag, uint8_t *table_data,
-			       size_t payload_length, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_GET_BIOS_TABLE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_bios_table_resp *response =
-	    (struct pldm_get_bios_table_resp *)msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-
-		response->next_transfer_handle = htole32(next_transfer_handle);
-		response->transfer_flag = transfer_flag;
-		if (table_data != NULL &&
-		    payload_length > (sizeof(struct pldm_msg_hdr) +
-				      PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES)) {
-			memcpy(response->table_data, table_data,
-			       payload_length -
-				   (sizeof(struct pldm_msg_hdr) +
-				    PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES));
-		}
-	}
-	return PLDM_SUCCESS;
-}
-
-int encode_get_bios_table_req(uint8_t instance_id, uint32_t transfer_handle,
-			      uint8_t transfer_op_flag, uint8_t table_type,
-			      struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_GET_BIOS_TABLE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_bios_table_req *request =
-	    (struct pldm_get_bios_table_req *)msg->payload;
-
-	request->transfer_handle = htole32(transfer_handle);
-	request->transfer_op_flag = transfer_op_flag;
-	request->table_type = table_type;
-	return PLDM_SUCCESS;
-}
-
-int decode_get_bios_table_req(const struct pldm_msg *msg, size_t payload_length,
-			      uint32_t *transfer_handle,
-			      uint8_t *transfer_op_flag, uint8_t *table_type)
-{
-	if (msg == NULL || transfer_op_flag == NULL || table_type == NULL ||
-	    transfer_handle == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_BIOS_TABLE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_bios_table_req *request =
-	    (struct pldm_get_bios_table_req *)msg->payload;
-	*transfer_handle = le32toh(request->transfer_handle);
-	*transfer_op_flag = request->transfer_op_flag;
-	*table_type = request->table_type;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_bios_table_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint32_t *next_transfer_handle,
-			       uint8_t *transfer_flag,
-			       size_t *bios_table_offset)
-
-{
-	if (msg == NULL || transfer_flag == NULL ||
-	    next_transfer_handle == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (payload_length <= PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_bios_table_resp *response =
-	    (struct pldm_get_bios_table_resp *)msg->payload;
-
-	*completion_code = response->completion_code;
-
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	*next_transfer_handle = le32toh(response->next_transfer_handle);
-	*transfer_flag = response->transfer_flag;
-
-	*bios_table_offset = sizeof(*completion_code) +
-			     sizeof(*next_transfer_handle) +
-			     sizeof(*transfer_flag);
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_GET_BIOS_ATTRIBUTE_CURRENT_VALUE_BY_HANDLE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_bios_attribute_current_value_by_handle_req *request =
-	    (struct pldm_get_bios_attribute_current_value_by_handle_req *)
-		msg->payload;
-
-	request->transfer_handle = htole32(transfer_handle);
-	request->transfer_op_flag = transfer_op_flag;
-	request->attribute_handle = htole16(attribute_handle);
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || transfer_flag == NULL ||
-	    next_transfer_handle == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_get_bios_attribute_current_value_by_handle_resp *response =
-	    (struct pldm_get_bios_attribute_current_value_by_handle_resp *)
-		msg->payload;
-
-	*completion_code = response->completion_code;
-
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length <=
-	    PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_MIN_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	*next_transfer_handle = le32toh(response->next_transfer_handle);
-	*transfer_flag = response->transfer_flag;
-
-	attribute_data->ptr = response->attribute_data;
-	attribute_data->length = payload_length - sizeof(*response) + 1;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || transfer_handle == NULL ||
-	    transfer_op_flag == NULL || attribute_handle == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_bios_attribute_current_value_by_handle_req *request =
-	    (struct pldm_get_bios_attribute_current_value_by_handle_req *)
-		msg->payload;
-	*transfer_handle = le32toh(request->transfer_handle);
-	*transfer_op_flag = request->transfer_op_flag;
-	*attribute_handle = le16toh(request->attribute_handle);
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || attribute_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_GET_BIOS_ATTRIBUTE_CURRENT_VALUE_BY_HANDLE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_bios_attribute_current_value_by_handle_resp *response =
-	    (struct pldm_get_bios_attribute_current_value_by_handle_resp *)
-		msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-
-		response->next_transfer_handle = htole32(next_transfer_handle);
-		response->transfer_flag = transfer_flag;
-		if (attribute_data != NULL) {
-			memcpy(response->attribute_data, attribute_data,
-			       attribute_length);
-		}
-	}
-	return PLDM_SUCCESS;
-}
-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_lenth)
-{
-	if (msg == NULL || attribute_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES + attribute_length !=
-	    payload_lenth) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_SET_BIOS_ATTRIBUTE_CURRENT_VALUE;
-
-	uint8_t rc = pack_pldm_header(&header, &msg->hdr);
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_set_bios_attribute_current_value_req *request =
-	    (struct pldm_set_bios_attribute_current_value_req *)msg->payload;
-	request->transfer_handle = htole32(transfer_handle);
-	request->transfer_flag = transfer_flag;
-	memcpy(request->attribute_data, attribute_data, attribute_length);
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    next_transfer_handle == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_set_bios_attribute_current_value_resp *response =
-	    (struct pldm_set_bios_attribute_current_value_resp *)msg->payload;
-
-	*next_transfer_handle = le32toh(response->next_transfer_handle);
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || transfer_handle == NULL || transfer_flag == NULL ||
-	    attribute == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (payload_length < PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_set_bios_attribute_current_value_req *request =
-	    (struct pldm_set_bios_attribute_current_value_req *)msg->payload;
-	*transfer_handle = le32toh(request->transfer_handle);
-	*transfer_flag = request->transfer_flag;
-	attribute->length =
-	    payload_length - PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES;
-	attribute->ptr = request->attribute_data;
-	return PLDM_SUCCESS;
-}
-
-int encode_set_bios_attribute_current_value_resp(uint8_t instance_id,
-						 uint8_t completion_code,
-						 uint32_t next_transfer_handle,
-						 struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_SET_BIOS_ATTRIBUTE_CURRENT_VALUE;
-
-	uint8_t rc = pack_pldm_header(&header, &msg->hdr);
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_set_bios_attribute_current_value_resp *response =
-	    (struct pldm_set_bios_attribute_current_value_resp *)msg->payload;
-	response->completion_code = completion_code;
-	response->next_transfer_handle = htole32(next_transfer_handle);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_bios_table_req(uint8_t instance_id, uint32_t transfer_handle,
-			      uint8_t transfer_flag, uint8_t table_type,
-			      const uint8_t *table_data, size_t table_length,
-			      struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL || table_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES + table_length !=
-	    payload_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_SET_BIOS_TABLE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_set_bios_table_req *request =
-	    (struct pldm_set_bios_table_req *)msg->payload;
-	request->transfer_handle = htole32(transfer_handle);
-	request->transfer_flag = transfer_flag;
-	request->table_type = table_type;
-	memcpy(request->table_data, table_data, table_length);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_bios_table_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint32_t *next_transfer_handle)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    next_transfer_handle == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != PLDM_SET_BIOS_TABLE_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_set_bios_table_resp *response =
-	    (struct pldm_set_bios_table_resp *)msg->payload;
-
-	*next_transfer_handle = le32toh(response->next_transfer_handle);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_bios_table_resp(uint8_t instance_id, uint8_t completion_code,
-			       uint32_t next_transfer_handle,
-			       struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_BIOS;
-	header.command = PLDM_SET_BIOS_TABLE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_set_bios_table_resp *response =
-	    (struct pldm_set_bios_table_resp *)msg->payload;
-	response->completion_code = completion_code;
-	response->next_transfer_handle = htole32(next_transfer_handle);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_bios_table_req(const struct pldm_msg *msg, size_t payload_length,
-			      uint32_t *transfer_handle, uint8_t *transfer_flag,
-			      uint8_t *table_type, struct variable_field *table)
-{
-	if (msg == NULL || transfer_handle == NULL || transfer_flag == NULL ||
-	    table_type == NULL || table == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length < PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_set_bios_table_req *request =
-	    (struct pldm_set_bios_table_req *)msg->payload;
-	*transfer_handle = le32toh(request->transfer_handle);
-	*transfer_flag = request->transfer_flag;
-	*table_type = request->table_type;
-	table->length = payload_length - PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES;
-	table->ptr = request->table_data;
-
-	return PLDM_SUCCESS;
-}
diff --git a/subprojects/libpldm/src/bios_table.c b/subprojects/libpldm/src/bios_table.c
deleted file mode 100644
index ea9f669..0000000
--- a/subprojects/libpldm/src/bios_table.c
+++ /dev/null
@@ -1,1126 +0,0 @@
-#include <assert.h>
-#include <endian.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "bios.h"
-#include "bios_table.h"
-
-#define POINTER_CHECK(pointer)                                                 \
-	do {                                                                   \
-		if (pointer == NULL)                                           \
-			return PLDM_ERROR_INVALID_DATA;                        \
-	} while (0)
-
-#define ATTR_TYPE_EXPECT(type, expected)                                       \
-	do {                                                                   \
-		if (type != expected && type != (expected | 0x80))             \
-			return PLDM_ERROR_INVALID_DATA;                        \
-	} while (0)
-
-#define BUFFER_SIZE_EXPECT(current_size, expected_size)                        \
-	do {                                                                   \
-		if (current_size < expected_size)                              \
-			return PLDM_ERROR_INVALID_LENGTH;                      \
-	} while (0)
-
-#define MEMBER_SIZE(type, member) sizeof(((struct type *)0)->member)
-
-static void set_errmsg(const char **errmsg, const char *msg)
-{
-	if (errmsg != NULL)
-		*errmsg = msg;
-}
-
-static uint16_t get_bios_string_handle()
-{
-	static uint16_t handle = 0;
-	assert(handle != UINT16_MAX);
-
-	return handle++;
-}
-
-size_t pldm_bios_table_string_entry_encode_length(uint16_t string_length)
-{
-	return sizeof(struct pldm_bios_string_table_entry) -
-	       MEMBER_SIZE(pldm_bios_string_table_entry, name) + string_length;
-}
-
-void pldm_bios_table_string_entry_encode(void *entry, size_t entry_length,
-					 const char *str, uint16_t str_length)
-{
-	size_t length = pldm_bios_table_string_entry_encode_length(str_length);
-	assert(length <= entry_length);
-	struct pldm_bios_string_table_entry *string_entry = entry;
-	string_entry->string_handle = htole16(get_bios_string_handle());
-	string_entry->string_length = htole16(str_length);
-	memcpy(string_entry->name, str, str_length);
-}
-
-int pldm_bios_table_string_entry_encode_check(void *entry, size_t entry_length,
-					      const char *str,
-					      uint16_t str_length)
-{
-	if (str_length == 0)
-		return PLDM_ERROR_INVALID_DATA;
-	POINTER_CHECK(entry);
-	POINTER_CHECK(str);
-	size_t length = pldm_bios_table_string_entry_encode_length(str_length);
-	BUFFER_SIZE_EXPECT(entry_length, length);
-	pldm_bios_table_string_entry_encode(entry, entry_length, str,
-					    str_length);
-	return PLDM_SUCCESS;
-}
-
-uint16_t pldm_bios_table_string_entry_decode_handle(
-    const struct pldm_bios_string_table_entry *entry)
-{
-	return le16toh(entry->string_handle);
-}
-
-uint16_t pldm_bios_table_string_entry_decode_string_length(
-    const struct pldm_bios_string_table_entry *entry)
-{
-	return le16toh(entry->string_length);
-}
-
-uint16_t pldm_bios_table_string_entry_decode_string(
-    const struct pldm_bios_string_table_entry *entry, char *buffer, size_t size)
-{
-	uint16_t length =
-	    pldm_bios_table_string_entry_decode_string_length(entry);
-	length = length < (size - 1) ? length : (size - 1);
-	memcpy(buffer, entry->name, length);
-	buffer[length] = 0;
-	return length;
-}
-
-int pldm_bios_table_string_entry_decode_string_check(
-    const struct pldm_bios_string_table_entry *entry, char *buffer, size_t size)
-{
-	POINTER_CHECK(entry);
-	POINTER_CHECK(buffer);
-	size_t length =
-	    pldm_bios_table_string_entry_decode_string_length(entry);
-	BUFFER_SIZE_EXPECT(size, length + 1);
-	pldm_bios_table_string_entry_decode_string(entry, buffer, size);
-	return PLDM_SUCCESS;
-}
-
-static size_t string_table_entry_length(const void *table_entry)
-{
-	const struct pldm_bios_string_table_entry *entry = table_entry;
-	return sizeof(*entry) - sizeof(entry->name) +
-	       pldm_bios_table_string_entry_decode_string_length(entry);
-}
-
-static uint16_t get_bios_attr_handle()
-{
-	static uint16_t handle = 0;
-	assert(handle != UINT16_MAX);
-
-	return handle++;
-}
-
-static void attr_table_entry_encode_header(void *entry, size_t length,
-					   uint8_t attr_type,
-					   uint16_t string_handle)
-{
-	struct pldm_bios_attr_table_entry *attr_entry = entry;
-	assert(sizeof(*attr_entry) <= length);
-	attr_entry->attr_handle = htole16(get_bios_attr_handle());
-	attr_entry->attr_type = attr_type;
-	attr_entry->string_handle = htole16(string_handle);
-}
-
-uint16_t pldm_bios_table_attr_entry_decode_attribute_handle(
-    const struct pldm_bios_attr_table_entry *entry)
-{
-	return le16toh(entry->attr_handle);
-}
-
-uint8_t pldm_bios_table_attr_entry_decode_attribute_type(
-    const struct pldm_bios_attr_table_entry *entry)
-{
-	return entry->attr_type;
-}
-
-uint16_t pldm_bios_table_attr_entry_decode_string_handle(
-    const struct pldm_bios_attr_table_entry *entry)
-{
-	return le16toh(entry->string_handle);
-}
-
-size_t pldm_bios_table_attr_entry_enum_encode_length(uint8_t pv_num,
-						     uint8_t def_num)
-{
-	return sizeof(struct pldm_bios_attr_table_entry) -
-	       MEMBER_SIZE(pldm_bios_attr_table_entry, metadata) +
-	       sizeof(pv_num) + pv_num * sizeof(uint16_t) + sizeof(def_num) +
-	       def_num;
-}
-
-void pldm_bios_table_attr_entry_enum_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_enum_info *info)
-{
-	size_t length = pldm_bios_table_attr_entry_enum_encode_length(
-	    info->pv_num, info->def_num);
-	assert(length <= entry_length);
-	uint8_t attr_type = info->read_only ? PLDM_BIOS_ENUMERATION_READ_ONLY
-					    : PLDM_BIOS_ENUMERATION;
-	attr_table_entry_encode_header(entry, entry_length, attr_type,
-				       info->name_handle);
-	struct pldm_bios_attr_table_entry *attr_entry = entry;
-	attr_entry->metadata[0] = info->pv_num;
-	uint16_t *pv_hdls =
-	    (uint16_t *)(attr_entry->metadata + 1 /* sizeof(pv num) */);
-	size_t i;
-	for (i = 0; i < info->pv_num; i++)
-		pv_hdls[i] = htole16(info->pv_handle[i]);
-	attr_entry->metadata[1 + info->pv_num * sizeof(uint16_t)] =
-	    info->def_num;
-	memcpy(attr_entry->metadata + 1 /* sizeof(pv num) */ +
-		   info->pv_num * sizeof(uint16_t) + 1 /* sizeof(def num)*/,
-	       info->def_index, info->def_num);
-}
-
-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)
-{
-	POINTER_CHECK(entry);
-	POINTER_CHECK(info);
-	size_t length = pldm_bios_table_attr_entry_enum_encode_length(
-	    info->pv_num, info->def_num);
-	BUFFER_SIZE_EXPECT(entry_length, length);
-	pldm_bios_table_attr_entry_enum_encode(entry, entry_length, info);
-	return PLDM_SUCCESS;
-}
-
-#define ATTR_TYPE_EXPECT(type, expected)                                       \
-	do {                                                                   \
-		if (type != expected && type != (expected | 0x80))             \
-			return PLDM_ERROR_INVALID_DATA;                        \
-	} while (0)
-
-uint8_t pldm_bios_table_attr_entry_enum_decode_pv_num(
-    const struct pldm_bios_attr_table_entry *entry)
-{
-	return entry->metadata[0];
-}
-
-int pldm_bios_table_attr_entry_enum_decode_pv_num_check(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *pv_num)
-{
-	POINTER_CHECK(entry);
-	POINTER_CHECK(pv_num);
-	ATTR_TYPE_EXPECT(entry->attr_type, PLDM_BIOS_ENUMERATION);
-	*pv_num = pldm_bios_table_attr_entry_enum_decode_pv_num(entry);
-	return PLDM_SUCCESS;
-}
-
-uint8_t pldm_bios_table_attr_entry_enum_decode_def_num(
-    const struct pldm_bios_attr_table_entry *entry)
-{
-	uint8_t pv_num = pldm_bios_table_attr_entry_enum_decode_pv_num(entry);
-	return entry->metadata[sizeof(uint8_t) /* pv_num */ +
-			       sizeof(uint16_t) * pv_num];
-}
-
-int pldm_bios_table_attr_entry_enum_decode_def_num_check(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *def_num)
-{
-	POINTER_CHECK(entry);
-	POINTER_CHECK(def_num);
-	ATTR_TYPE_EXPECT(entry->attr_type, PLDM_BIOS_ENUMERATION);
-	*def_num = pldm_bios_table_attr_entry_enum_decode_def_num(entry);
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	uint8_t num = pldm_bios_table_attr_entry_enum_decode_pv_num(entry);
-	num = num < pv_num ? num : pv_num;
-	size_t i;
-	for (i = 0; i < num; i++) {
-		uint16_t *hdl = (uint16_t *)(entry->metadata + sizeof(uint8_t) +
-					     i * sizeof(uint16_t));
-		pv_hdls[i] = le16toh(*hdl);
-	}
-	return num;
-}
-
-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)
-{
-	POINTER_CHECK(entry);
-	POINTER_CHECK(pv_hdls);
-	ATTR_TYPE_EXPECT(entry->attr_type, PLDM_BIOS_ENUMERATION);
-	uint8_t num = pldm_bios_table_attr_entry_enum_decode_pv_num(entry);
-	if (num != pv_num)
-		return PLDM_ERROR_INVALID_DATA;
-	pldm_bios_table_attr_entry_enum_decode_pv_hdls(entry, pv_hdls, pv_num);
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	uint8_t num = pldm_bios_table_attr_entry_enum_decode_def_num(entry);
-	num = num < def_num ? num : def_num;
-	uint8_t pv_num = pldm_bios_table_attr_entry_enum_decode_pv_num(entry);
-	const uint8_t *p = entry->metadata +
-			   sizeof(uint8_t) /* number of possible values*/
-			   + pv_num * sizeof(uint16_t) /* possible values */
-			   + sizeof(uint8_t); /* number of default values */
-	memcpy(def_indices, p, num);
-	return num;
-}
-
-/** @brief Get length of an enum attribute entry
- */
-static size_t attr_table_entry_length_enum(const void *entry)
-{
-	uint8_t pv_num = pldm_bios_table_attr_entry_enum_decode_pv_num(entry);
-	uint8_t def_num = pldm_bios_table_attr_entry_enum_decode_def_num(entry);
-	return pldm_bios_table_attr_entry_enum_encode_length(pv_num, def_num);
-}
-
-struct attr_table_string_entry_fields {
-	uint8_t string_type;
-	uint16_t min_length;
-	uint16_t max_length;
-	uint16_t def_length;
-	uint8_t def_string[1];
-} __attribute__((packed));
-
-size_t pldm_bios_table_attr_entry_string_encode_length(uint16_t def_str_len)
-{
-	return sizeof(struct pldm_bios_attr_table_entry) -
-	       MEMBER_SIZE(pldm_bios_attr_table_entry, metadata) +
-	       sizeof(struct attr_table_string_entry_fields) -
-	       MEMBER_SIZE(attr_table_string_entry_fields, def_string) +
-	       def_str_len;
-}
-
-void pldm_bios_table_attr_entry_string_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_string_info *info)
-{
-	size_t length =
-	    pldm_bios_table_attr_entry_string_encode_length(info->def_length);
-	assert(length <= entry_length);
-	uint8_t attr_type =
-	    info->read_only ? PLDM_BIOS_STRING_READ_ONLY : PLDM_BIOS_STRING;
-	attr_table_entry_encode_header(entry, entry_length, attr_type,
-				       info->name_handle);
-	struct pldm_bios_attr_table_entry *attr_entry = entry;
-	struct attr_table_string_entry_fields *attr_fields =
-	    (struct attr_table_string_entry_fields *)attr_entry->metadata;
-	attr_fields->string_type = info->string_type;
-	attr_fields->min_length = htole16(info->min_length);
-	attr_fields->max_length = htole16(info->max_length);
-	attr_fields->def_length = htole16(info->def_length);
-	if (info->def_length != 0 && info->def_string != NULL)
-		memcpy(attr_fields->def_string, info->def_string,
-		       info->def_length);
-}
-
-#define PLDM_STRING_TYPE_MAX 5
-#define PLDM_STRING_TYPE_VENDOR 0xff
-
-int pldm_bios_table_attr_entry_string_info_check(
-    const struct pldm_bios_table_attr_entry_string_info *info,
-    const char **errmsg)
-{
-	if (info->min_length > info->max_length) {
-		set_errmsg(errmsg, "MinimumStingLength should not be greater "
-				   "than MaximumStringLength");
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (info->min_length == info->max_length &&
-	    info->def_length != info->min_length) {
-		set_errmsg(errmsg, "Wrong DefaultStringLength");
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (info->def_length > info->max_length ||
-	    info->def_length < info->min_length) {
-		set_errmsg(errmsg, "Wrong DefaultStringLength");
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (info->string_type > PLDM_STRING_TYPE_MAX &&
-	    info->string_type != PLDM_STRING_TYPE_VENDOR) {
-		set_errmsg(errmsg, "Wrong StringType");
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (info->def_length != strlen(info->def_string)) {
-		set_errmsg(errmsg, "Length of DefaultString should be equal to "
-				   "DefaultStringLength");
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	POINTER_CHECK(entry);
-	POINTER_CHECK(info);
-	size_t length =
-	    pldm_bios_table_attr_entry_string_encode_length(info->def_length);
-	BUFFER_SIZE_EXPECT(entry_length, length);
-	if (pldm_bios_table_attr_entry_string_info_check(info, NULL) !=
-	    PLDM_SUCCESS)
-		return PLDM_ERROR_INVALID_DATA;
-	pldm_bios_table_attr_entry_string_encode(entry, entry_length, info);
-	return PLDM_SUCCESS;
-}
-
-uint16_t pldm_bios_table_attr_entry_string_decode_def_string_length(
-    const struct pldm_bios_attr_table_entry *entry)
-{
-	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
-	return le16toh(fields->def_length);
-}
-
-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)
-{
-	POINTER_CHECK(entry);
-	POINTER_CHECK(def_string_length);
-	ATTR_TYPE_EXPECT(entry->attr_type, PLDM_BIOS_STRING);
-	*def_string_length =
-	    pldm_bios_table_attr_entry_string_decode_def_string_length(entry);
-	return PLDM_SUCCESS;
-}
-
-uint8_t pldm_bios_table_attr_entry_string_decode_string_type(
-    const struct pldm_bios_attr_table_entry *entry)
-{
-	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
-	return fields->string_type;
-}
-
-uint16_t pldm_bios_table_attr_entry_string_decode_max_length(
-    const struct pldm_bios_attr_table_entry *entry)
-{
-	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
-	return le16toh(fields->max_length);
-}
-
-uint16_t pldm_bios_table_attr_entry_string_decode_min_length(
-    const struct pldm_bios_attr_table_entry *entry)
-{
-	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
-	return le16toh(fields->min_length);
-}
-
-uint16_t pldm_bios_table_attr_entry_string_decode_def_string(
-    const struct pldm_bios_attr_table_entry *entry, char *buffer, size_t size)
-{
-	uint16_t length =
-	    pldm_bios_table_attr_entry_string_decode_def_string_length(entry);
-	length = length < (size - 1) ? length : (size - 1);
-	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
-	memcpy(buffer, fields->def_string, length);
-	buffer[length] = 0;
-	return length;
-}
-
-/** @brief Get length of a string attribute entry
- */
-static size_t attr_table_entry_length_string(const void *entry)
-{
-	uint16_t def_str_len =
-	    pldm_bios_table_attr_entry_string_decode_def_string_length(entry);
-	return pldm_bios_table_attr_entry_string_encode_length(def_str_len);
-}
-
-struct attr_table_integer_entry_fields {
-	uint64_t lower_bound;
-	uint64_t upper_bound;
-	uint32_t scalar_increment;
-	uint64_t default_value;
-} __attribute__((packed));
-
-size_t pldm_bios_table_attr_entry_integer_encode_length()
-{
-	return sizeof(struct pldm_bios_attr_table_entry) - 1 +
-	       sizeof(struct attr_table_integer_entry_fields);
-}
-
-void pldm_bios_table_attr_entry_integer_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_integer_info *info)
-{
-	size_t length = pldm_bios_table_attr_entry_integer_encode_length();
-	assert(length <= entry_length);
-	uint8_t attr_type =
-	    info->read_only ? PLDM_BIOS_INTEGER_READ_ONLY : PLDM_BIOS_INTEGER;
-	attr_table_entry_encode_header(entry, entry_length, attr_type,
-				       info->name_handle);
-	struct pldm_bios_attr_table_entry *attr_entry = entry;
-	struct attr_table_integer_entry_fields *attr_fields =
-	    (struct attr_table_integer_entry_fields *)attr_entry->metadata;
-	attr_fields->lower_bound = htole64(info->lower_bound);
-	attr_fields->upper_bound = htole64(info->upper_bound);
-	attr_fields->scalar_increment = htole32(info->scalar_increment);
-	attr_fields->default_value = htole64(info->default_value);
-}
-
-int pldm_bios_table_attr_entry_integer_info_check(
-    const struct pldm_bios_table_attr_entry_integer_info *info,
-    const char **errmsg)
-{
-	if (info->lower_bound == info->upper_bound) {
-		if (info->default_value != info->lower_bound) {
-			set_errmsg(errmsg, "Wrong DefaultValue");
-			return PLDM_ERROR_INVALID_DATA;
-		}
-		if (info->scalar_increment != 0) {
-			set_errmsg(errmsg, "Wrong ScalarIncrement");
-			return PLDM_ERROR_INVALID_DATA;
-		}
-		return PLDM_SUCCESS;
-	}
-	if (info->lower_bound > info->upper_bound) {
-		set_errmsg(errmsg,
-			   "LowerBound should not be greater than UpperBound");
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (info->default_value > info->upper_bound ||
-	    info->default_value < info->lower_bound) {
-		set_errmsg(errmsg, "Wrong DefaultValue");
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (info->scalar_increment == 0) {
-		set_errmsg(errmsg, "ScalarIncrement should not be zero when "
-				   "lower_bound != upper_bound");
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if ((info->default_value - info->lower_bound) %
-		info->scalar_increment !=
-	    0) {
-		set_errmsg(errmsg, "Wrong DefaultValue or ScalarIncrement");
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	POINTER_CHECK(entry);
-	POINTER_CHECK(info);
-	size_t length = pldm_bios_table_attr_entry_integer_encode_length();
-	BUFFER_SIZE_EXPECT(entry_length, length);
-	if (pldm_bios_table_attr_entry_integer_info_check(info, NULL) !=
-	    PLDM_SUCCESS)
-		return PLDM_ERROR_INVALID_DATA;
-	pldm_bios_table_attr_entry_integer_encode(entry, entry_length, info);
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	struct attr_table_integer_entry_fields *fields =
-	    (struct attr_table_integer_entry_fields *)entry->metadata;
-	*lower = le64toh(fields->lower_bound);
-	*upper = le64toh(fields->upper_bound);
-	*scalar = le32toh(fields->scalar_increment);
-	*def = le64toh(fields->default_value);
-}
-
-static size_t attr_table_entry_length_integer(const void *entry)
-{
-	(void)entry;
-	return pldm_bios_table_attr_entry_integer_encode_length();
-}
-
-struct table_entry_length {
-	uint8_t attr_type;
-	size_t (*entry_length_handler)(const void *);
-};
-
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
-
-static const struct table_entry_length *find_table_entry_length_by_type(
-    uint8_t attr_type, const struct table_entry_length *handlers, size_t count)
-{
-	size_t i;
-	for (i = 0; i < count; i++) {
-		if (attr_type == handlers[i].attr_type)
-			return &handlers[i];
-	}
-	return NULL;
-}
-
-static const struct table_entry_length attr_table_entries[] = {
-    {.attr_type = PLDM_BIOS_ENUMERATION,
-     .entry_length_handler = attr_table_entry_length_enum},
-    {.attr_type = PLDM_BIOS_ENUMERATION_READ_ONLY,
-     .entry_length_handler = attr_table_entry_length_enum},
-    {.attr_type = PLDM_BIOS_STRING,
-     .entry_length_handler = attr_table_entry_length_string},
-    {.attr_type = PLDM_BIOS_STRING_READ_ONLY,
-     .entry_length_handler = attr_table_entry_length_string},
-    {.attr_type = PLDM_BIOS_INTEGER,
-     .entry_length_handler = attr_table_entry_length_integer},
-    {.attr_type = PLDM_BIOS_INTEGER_READ_ONLY,
-     .entry_length_handler = attr_table_entry_length_integer},
-};
-
-static size_t attr_table_entry_length(const void *table_entry)
-{
-	const struct pldm_bios_attr_table_entry *entry = table_entry;
-	const struct table_entry_length *attr_table_entry =
-	    find_table_entry_length_by_type(entry->attr_type,
-					    attr_table_entries,
-					    ARRAY_SIZE(attr_table_entries));
-	assert(attr_table_entry != NULL);
-	assert(attr_table_entry->entry_length_handler != NULL);
-
-	return attr_table_entry->entry_length_handler(entry);
-}
-
-uint16_t pldm_bios_table_attr_value_entry_decode_attribute_handle(
-    const struct pldm_bios_attr_val_table_entry *entry)
-{
-	return le16toh(entry->attr_handle);
-}
-
-uint8_t pldm_bios_table_attr_value_entry_decode_attribute_type(
-    const struct pldm_bios_attr_val_table_entry *entry)
-{
-	return entry->attr_type;
-}
-
-size_t pldm_bios_table_attr_value_entry_encode_enum_length(uint8_t count)
-{
-	return sizeof(struct pldm_bios_attr_val_table_entry) - 1 +
-	       sizeof(count) + count;
-}
-
-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)
-{
-	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_enum_length(count);
-	assert(length <= entry_length);
-
-	struct pldm_bios_attr_val_table_entry *table_entry = entry;
-	table_entry->attr_handle = htole16(attr_handle);
-	table_entry->attr_type = attr_type;
-	table_entry->value[0] = count;
-	if (count != 0)
-		memcpy(&table_entry->value[1], handles, count);
-}
-
-uint8_t pldm_bios_table_attr_value_entry_enum_decode_number(
-    const struct pldm_bios_attr_val_table_entry *entry)
-{
-	return entry->value[0];
-}
-
-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)
-{
-	uint8_t curr_num =
-	    pldm_bios_table_attr_value_entry_enum_decode_number(entry);
-	number = number < curr_num ? number : curr_num;
-	memcpy(handles, &entry->value[1], number);
-
-	return number;
-}
-
-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)
-{
-	POINTER_CHECK(entry);
-	if (count != 0 && handles == NULL)
-		return PLDM_ERROR_INVALID_DATA;
-	ATTR_TYPE_EXPECT(attr_type, PLDM_BIOS_ENUMERATION);
-	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_enum_length(count);
-	BUFFER_SIZE_EXPECT(entry_length, length);
-	pldm_bios_table_attr_value_entry_encode_enum(
-	    entry, entry_length, attr_handle, attr_type, count, handles);
-	return PLDM_SUCCESS;
-}
-
-static size_t attr_value_table_entry_length_enum(const void *entry)
-{
-	uint8_t number =
-	    pldm_bios_table_attr_value_entry_enum_decode_number(entry);
-	return pldm_bios_table_attr_value_entry_encode_enum_length(number);
-}
-
-size_t
-pldm_bios_table_attr_value_entry_encode_string_length(uint16_t string_length)
-{
-	return sizeof(struct pldm_bios_attr_val_table_entry) - 1 +
-	       sizeof(string_length) + string_length;
-}
-
-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 *str)
-{
-	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_string_length(str_length);
-	assert(length <= entry_length);
-
-	struct pldm_bios_attr_val_table_entry *table_entry = entry;
-	table_entry->attr_handle = htole16(attr_handle);
-	table_entry->attr_type = attr_type;
-	if (str_length != 0)
-		memcpy(table_entry->value + sizeof(str_length), str,
-		       str_length);
-	str_length = htole16(str_length);
-	memcpy(table_entry->value, &str_length, sizeof(str_length));
-}
-
-uint16_t pldm_bios_table_attr_value_entry_string_decode_length(
-    const struct pldm_bios_attr_val_table_entry *entry)
-{
-	uint16_t str_length = 0;
-	memcpy(&str_length, entry->value, sizeof(str_length));
-	return le16toh(str_length);
-}
-
-void pldm_bios_table_attr_value_entry_string_decode_string(
-    const struct pldm_bios_attr_val_table_entry *entry,
-    struct variable_field *current_string)
-{
-	current_string->length =
-	    pldm_bios_table_attr_value_entry_string_decode_length(entry);
-	current_string->ptr =
-	    entry->value + sizeof(uint16_t); // sizeof(CurrentStringLength)
-}
-
-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 *str)
-{
-	POINTER_CHECK(entry);
-	if (str_length != 0 && str == NULL)
-		return PLDM_ERROR_INVALID_DATA;
-	ATTR_TYPE_EXPECT(attr_type, PLDM_BIOS_STRING);
-	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_string_length(str_length);
-	BUFFER_SIZE_EXPECT(entry_length, length);
-	pldm_bios_table_attr_value_entry_encode_string(
-	    entry, entry_length, attr_handle, attr_type, str_length, str);
-	return PLDM_SUCCESS;
-}
-
-static size_t attr_value_table_entry_length_string(const void *entry)
-{
-	uint16_t str_length =
-	    pldm_bios_table_attr_value_entry_string_decode_length(entry);
-	return pldm_bios_table_attr_value_entry_encode_string_length(
-	    str_length);
-}
-
-size_t pldm_bios_table_attr_value_entry_encode_integer_length()
-{
-	return sizeof(struct pldm_bios_attr_val_table_entry) - 1 +
-	       sizeof(uint64_t);
-}
-void pldm_bios_table_attr_value_entry_encode_integer(void *entry,
-						     size_t entry_length,
-						     uint16_t attr_handle,
-						     uint8_t attr_type,
-						     uint64_t cv)
-{
-	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_integer_length();
-	assert(length <= entry_length);
-
-	struct pldm_bios_attr_val_table_entry *table_entry = entry;
-	table_entry->attr_handle = htole16(attr_handle);
-	table_entry->attr_type = attr_type;
-	cv = htole64(cv);
-	memcpy(table_entry->value, &cv, sizeof(uint64_t));
-}
-
-int pldm_bios_table_attr_value_entry_encode_integer_check(void *entry,
-							  size_t entry_length,
-							  uint16_t attr_handle,
-							  uint8_t attr_type,
-							  uint64_t cv)
-{
-	POINTER_CHECK(entry);
-	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_integer_length();
-	ATTR_TYPE_EXPECT(attr_type, PLDM_BIOS_INTEGER);
-	BUFFER_SIZE_EXPECT(entry_length, length);
-	pldm_bios_table_attr_value_entry_encode_integer(
-	    entry, entry_length, attr_handle, attr_type, cv);
-	return PLDM_SUCCESS;
-}
-
-uint64_t pldm_bios_table_attr_value_entry_integer_decode_cv(
-    const struct pldm_bios_attr_val_table_entry *entry)
-{
-	uint64_t cv = 0;
-	memcpy(&cv, entry->value, sizeof(cv));
-	cv = le64toh(cv);
-	return cv;
-}
-
-static size_t attr_value_table_entry_length_integer(const void *entry)
-{
-	(void)entry;
-	return pldm_bios_table_attr_value_entry_encode_integer_length();
-}
-
-static const struct table_entry_length attr_value_table_entries[] = {
-    {.attr_type = PLDM_BIOS_ENUMERATION,
-     .entry_length_handler = attr_value_table_entry_length_enum},
-    {.attr_type = PLDM_BIOS_ENUMERATION_READ_ONLY,
-     .entry_length_handler = attr_value_table_entry_length_enum},
-    {.attr_type = PLDM_BIOS_STRING,
-     .entry_length_handler = attr_value_table_entry_length_string},
-    {.attr_type = PLDM_BIOS_STRING_READ_ONLY,
-     .entry_length_handler = attr_value_table_entry_length_string},
-    {.attr_type = PLDM_BIOS_INTEGER,
-     .entry_length_handler = attr_value_table_entry_length_integer},
-    {.attr_type = PLDM_BIOS_INTEGER_READ_ONLY,
-     .entry_length_handler = attr_value_table_entry_length_integer},
-};
-
-static size_t attr_value_table_entry_length(const void *table_entry)
-{
-	const struct pldm_bios_attr_val_table_entry *entry = table_entry;
-	const struct table_entry_length *entry_length =
-	    find_table_entry_length_by_type(
-		entry->attr_type, attr_value_table_entries,
-		ARRAY_SIZE(attr_value_table_entries));
-	assert(entry_length != NULL);
-	assert(entry_length->entry_length_handler != NULL);
-
-	return entry_length->entry_length_handler(entry);
-}
-
-size_t pldm_bios_table_attr_value_entry_length(
-    const struct pldm_bios_attr_val_table_entry *entry)
-{
-	return attr_value_table_entry_length(entry);
-}
-
-uint16_t pldm_bios_table_attr_value_entry_decode_handle(
-    const struct pldm_bios_attr_val_table_entry *entry)
-{
-	return le16toh(entry->attr_handle);
-}
-
-static size_t pad_size_get(size_t size_without_pad)
-{
-	return ((size_without_pad % 4) ? (4 - size_without_pad % 4) : 0);
-}
-
-static uint8_t *pad_append(uint8_t *table_end, size_t pad_size)
-{
-	while (pad_size--)
-		*table_end++ = 0;
-
-	return table_end;
-}
-
-static uint8_t *checksum_append(uint8_t *table_end, uint32_t checksum)
-{
-	checksum = htole32(checksum);
-	memcpy(table_end, &checksum, sizeof(checksum));
-
-	return table_end + sizeof(checksum);
-}
-
-size_t pldm_bios_table_pad_checksum_size(size_t size_without_pad)
-{
-	size_t size = pad_size_get(size_without_pad) +
-		      sizeof(uint32_t) /*sizeof(checksum)*/;
-	return size;
-}
-
-size_t pldm_bios_table_append_pad_checksum(void *table, size_t size,
-					   size_t size_without_pad)
-{
-
-	size_t pad_checksum_size =
-	    pldm_bios_table_pad_checksum_size(size_without_pad);
-	size_t total_length = size_without_pad + pad_checksum_size;
-	assert(size >= total_length);
-
-	uint8_t *table_end = (uint8_t *)table + size_without_pad;
-	size_t pad_size = pad_size_get(size_without_pad);
-	table_end = pad_append(table_end, pad_size);
-
-	uint32_t checksum = crc32(table, size_without_pad + pad_size);
-	checksum_append(table_end, checksum);
-
-	return total_length;
-}
-
-struct pldm_bios_table_iter {
-	const uint8_t *table_data;
-	size_t table_len;
-	size_t current_pos;
-	size_t (*entry_length_handler)(const void *table_entry);
-};
-
-struct pldm_bios_table_iter *
-pldm_bios_table_iter_create(const void *table, size_t length,
-			    enum pldm_bios_table_types type)
-{
-	struct pldm_bios_table_iter *iter = malloc(sizeof(*iter));
-	assert(iter != NULL);
-	iter->table_data = table;
-	iter->table_len = length;
-	iter->current_pos = 0;
-	iter->entry_length_handler = NULL;
-	switch (type) {
-	case PLDM_BIOS_STRING_TABLE:
-		iter->entry_length_handler = string_table_entry_length;
-		break;
-	case PLDM_BIOS_ATTR_TABLE:
-		iter->entry_length_handler = attr_table_entry_length;
-		break;
-	case PLDM_BIOS_ATTR_VAL_TABLE:
-		iter->entry_length_handler = attr_value_table_entry_length;
-		break;
-	}
-
-	return iter;
-}
-
-void pldm_bios_table_iter_free(struct pldm_bios_table_iter *iter)
-{
-	free(iter);
-}
-
-#define pad_and_check_max 7
-bool pldm_bios_table_iter_is_end(const struct pldm_bios_table_iter *iter)
-{
-	if (iter->table_len - iter->current_pos <= pad_and_check_max)
-		return true;
-	return false;
-}
-
-void pldm_bios_table_iter_next(struct pldm_bios_table_iter *iter)
-{
-	if (pldm_bios_table_iter_is_end(iter))
-		return;
-	const void *entry = iter->table_data + iter->current_pos;
-	iter->current_pos += iter->entry_length_handler(entry);
-}
-
-const void *pldm_bios_table_iter_value(struct pldm_bios_table_iter *iter)
-{
-	return iter->table_data + iter->current_pos;
-}
-
-typedef bool (*equal_handler)(const void *entry, const void *key);
-
-static const void *
-pldm_bios_table_entry_find_by_iter(struct pldm_bios_table_iter *iter,
-				   const void *key, equal_handler equal)
-{
-	const void *entry;
-	while (!pldm_bios_table_iter_is_end(iter)) {
-		entry = pldm_bios_table_iter_value(iter);
-		if (equal(entry, key))
-			return entry;
-		pldm_bios_table_iter_next(iter);
-	}
-	return NULL;
-}
-
-static const void *
-pldm_bios_table_entry_find_from_table(const void *table, size_t length,
-				      enum pldm_bios_table_types type,
-				      equal_handler equal, const void *key)
-{
-	struct pldm_bios_table_iter *iter =
-	    pldm_bios_table_iter_create(table, length, type);
-	const void *entry =
-	    pldm_bios_table_entry_find_by_iter(iter, key, equal);
-	pldm_bios_table_iter_free(iter);
-	return entry;
-}
-
-static bool string_table_handle_equal(const void *entry, const void *key)
-{
-	const struct pldm_bios_string_table_entry *string_entry = entry;
-	uint16_t handle = *(uint16_t *)key;
-	if (pldm_bios_table_string_entry_decode_handle(string_entry) == handle)
-		return true;
-	return false;
-}
-
-const struct pldm_bios_string_table_entry *
-pldm_bios_table_string_find_by_handle(const void *table, size_t length,
-				      uint16_t handle)
-{
-	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_STRING_TABLE, string_table_handle_equal,
-	    &handle);
-}
-
-struct string_equal_arg {
-	uint16_t str_length;
-	const char *str;
-};
-
-static bool string_table_string_equal(const void *entry, const void *key)
-{
-	const struct pldm_bios_string_table_entry *string_entry = entry;
-	const struct string_equal_arg *arg = key;
-	if (arg->str_length !=
-	    pldm_bios_table_string_entry_decode_string_length(string_entry))
-		return false;
-	if (memcmp(string_entry->name, arg->str, arg->str_length) != 0)
-		return false;
-	return true;
-}
-
-const struct pldm_bios_string_table_entry *
-pldm_bios_table_string_find_by_string(const void *table, size_t length,
-				      const char *str)
-{
-	uint16_t str_length = strlen(str);
-	struct string_equal_arg arg = {str_length, str};
-	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_STRING_TABLE, string_table_string_equal,
-	    &arg);
-}
-
-static bool attr_table_handle_equal(const void *entry, const void *key)
-{
-	uint16_t handle = *(uint16_t *)key;
-	return pldm_bios_table_attr_entry_decode_attribute_handle(entry) ==
-	       handle;
-}
-
-const struct pldm_bios_attr_table_entry *
-pldm_bios_table_attr_find_by_handle(const void *table, size_t length,
-				    uint16_t handle)
-{
-	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_ATTR_TABLE, attr_table_handle_equal,
-	    &handle);
-}
-
-static bool attr_table_string_handle_equal(const void *entry, const void *key)
-{
-	uint16_t handle = *(uint16_t *)key;
-	return pldm_bios_table_attr_entry_decode_string_handle(entry) == handle;
-}
-
-const struct pldm_bios_attr_table_entry *
-pldm_bios_table_attr_find_by_string_handle(const void *table, size_t length,
-					   uint16_t handle)
-{
-	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_ATTR_TABLE, attr_table_string_handle_equal,
-	    &handle);
-}
-
-static bool attr_value_table_handle_equal(const void *entry, const void *key)
-{
-	uint16_t handle = *(uint16_t *)key;
-	return pldm_bios_table_attr_value_entry_decode_handle(entry) == handle;
-}
-
-const struct pldm_bios_attr_val_table_entry *
-pldm_bios_table_attr_value_find_by_handle(const void *table, size_t length,
-					  uint16_t handle)
-{
-	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_ATTR_VAL_TABLE,
-	    attr_value_table_handle_equal, &handle);
-}
-
-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)
-{
-	struct pldm_bios_table_iter *iter = pldm_bios_table_iter_create(
-	    src_table, src_length, PLDM_BIOS_ATTR_VAL_TABLE);
-
-	int rc = PLDM_SUCCESS;
-	const struct pldm_bios_attr_val_table_entry *tmp, *to_update = entry;
-	size_t buffer_length = *dest_length, copied_length = 0, length = 0;
-	while (!pldm_bios_table_iter_is_end(iter)) {
-		tmp = pldm_bios_table_iter_attr_value_entry_value(iter);
-		length = attr_value_table_entry_length(tmp);
-
-		/* we need the tmp's entry_length here, iter_next will calculate
-		 * it too, use current_pos directly to avoid calculating it
-		 * twice */
-		iter->current_pos += length;
-		if (tmp->attr_handle == to_update->attr_handle) {
-			if (tmp->attr_type != to_update->attr_type) {
-				rc = PLDM_ERROR_INVALID_DATA;
-				goto out;
-			}
-			length = entry_length;
-			tmp = entry;
-		}
-		if (copied_length + length > buffer_length) {
-			rc = PLDM_ERROR_INVALID_LENGTH;
-			goto out;
-		}
-		memcpy((uint8_t *)dest_table + copied_length, tmp, length);
-		copied_length += length;
-	}
-
-	size_t pad_checksum_size =
-	    pldm_bios_table_pad_checksum_size(copied_length);
-	if ((pad_checksum_size + copied_length) > buffer_length) {
-		rc = PLDM_ERROR_INVALID_LENGTH;
-		goto out;
-	}
-
-	*dest_length = pldm_bios_table_append_pad_checksum(
-	    dest_table, buffer_length, copied_length);
-out:
-	pldm_bios_table_iter_free(iter);
-	return rc;
-}
-
-bool pldm_bios_table_checksum(const uint8_t *table, size_t size)
-{
-	if (table == NULL)
-		return false;
-
-	// 12: BIOSStringHandle(uint16) + BIOSStringLength(uint16) +
-	//     Variable(4) + checksum(uint32)
-	if (size < 12)
-		return false;
-
-	uint32_t src_crc = le32toh(*(uint32_t *)(table + size - 4));
-	uint32_t dst_crc = crc32(table, size - 4);
-
-	return src_crc == dst_crc;
-}
diff --git a/subprojects/libpldm/src/firmware_update.c b/subprojects/libpldm/src/firmware_update.c
deleted file mode 100644
index 59d1f9d..0000000
--- a/subprojects/libpldm/src/firmware_update.c
+++ /dev/null
@@ -1,1568 +0,0 @@
-#include "firmware_update.h"
-#include <endian.h>
-#include <string.h>
-
-/** @brief Check whether string type value is valid
- *
- *  @return true if string type value is valid, false if not
- */
-static bool is_string_type_valid(uint8_t string_type)
-{
-	switch (string_type) {
-	case PLDM_STR_TYPE_UNKNOWN:
-		return false;
-	case PLDM_STR_TYPE_ASCII:
-	case PLDM_STR_TYPE_UTF_8:
-	case PLDM_STR_TYPE_UTF_16:
-	case PLDM_STR_TYPE_UTF_16LE:
-	case PLDM_STR_TYPE_UTF_16BE:
-		return true;
-	default:
-		return false;
-	}
-}
-
-/** @brief Return the length of the descriptor type described in firmware update
- *         specification
- *
- *  @return length of the descriptor type if descriptor type is valid else
- *          return 0
- */
-static uint16_t get_descriptor_type_length(uint16_t descriptor_type)
-{
-	switch (descriptor_type) {
-
-	case PLDM_FWUP_PCI_VENDOR_ID:
-		return PLDM_FWUP_PCI_VENDOR_ID_LENGTH;
-	case PLDM_FWUP_IANA_ENTERPRISE_ID:
-		return PLDM_FWUP_IANA_ENTERPRISE_ID_LENGTH;
-	case PLDM_FWUP_UUID:
-		return PLDM_FWUP_UUID_LENGTH;
-	case PLDM_FWUP_PNP_VENDOR_ID:
-		return PLDM_FWUP_PNP_VENDOR_ID_LENGTH;
-	case PLDM_FWUP_ACPI_VENDOR_ID:
-		return PLDM_FWUP_ACPI_VENDOR_ID_LENGTH;
-	case PLDM_FWUP_IEEE_ASSIGNED_COMPANY_ID:
-		return PLDM_FWUP_IEEE_ASSIGNED_COMPANY_ID_LENGTH;
-	case PLDM_FWUP_SCSI_VENDOR_ID:
-		return PLDM_FWUP_SCSI_VENDOR_ID_LENGTH;
-	case PLDM_FWUP_PCI_DEVICE_ID:
-		return PLDM_FWUP_PCI_DEVICE_ID_LENGTH;
-	case PLDM_FWUP_PCI_SUBSYSTEM_VENDOR_ID:
-		return PLDM_FWUP_PCI_SUBSYSTEM_VENDOR_ID_LENGTH;
-	case PLDM_FWUP_PCI_SUBSYSTEM_ID:
-		return PLDM_FWUP_PCI_SUBSYSTEM_ID_LENGTH;
-	case PLDM_FWUP_PCI_REVISION_ID:
-		return PLDM_FWUP_PCI_REVISION_ID_LENGTH;
-	case PLDM_FWUP_PNP_PRODUCT_IDENTIFIER:
-		return PLDM_FWUP_PNP_PRODUCT_IDENTIFIER_LENGTH;
-	case PLDM_FWUP_ACPI_PRODUCT_IDENTIFIER:
-		return PLDM_FWUP_ACPI_PRODUCT_IDENTIFIER_LENGTH;
-	case PLDM_FWUP_ASCII_MODEL_NUMBER_LONG_STRING:
-		return PLDM_FWUP_ASCII_MODEL_NUMBER_LONG_STRING_LENGTH;
-	case PLDM_FWUP_ASCII_MODEL_NUMBER_SHORT_STRING:
-		return PLDM_FWUP_ASCII_MODEL_NUMBER_SHORT_STRING_LENGTH;
-	case PLDM_FWUP_SCSI_PRODUCT_ID:
-		return PLDM_FWUP_SCSI_PRODUCT_ID_LENGTH;
-	case PLDM_FWUP_UBM_CONTROLLER_DEVICE_CODE:
-		return PLDM_FWUP_UBM_CONTROLLER_DEVICE_CODE_LENGTH;
-	default:
-		return 0;
-	}
-}
-
-/** @brief Check whether ComponentResponse is valid
- *
- *  @return true if ComponentResponse is valid, false if not
- */
-static bool is_comp_resp_valid(uint8_t comp_resp)
-{
-	switch (comp_resp) {
-	case PLDM_CR_COMP_CAN_BE_UPDATED:
-	case PLDM_CR_COMP_MAY_BE_UPDATEABLE:
-		return true;
-
-	default:
-		return false;
-	}
-}
-
-/** @brief Check whether ComponentResponseCode is valid
- *
- *  @return true if ComponentResponseCode is valid, false if not
- */
-static bool is_comp_resp_code_valid(uint8_t comp_resp_code)
-{
-	switch (comp_resp_code) {
-	case PLDM_CRC_COMP_CAN_BE_UPDATED:
-	case PLDM_CRC_COMP_COMPARISON_STAMP_IDENTICAL:
-	case PLDM_CRC_COMP_COMPARISON_STAMP_LOWER:
-	case PLDM_CRC_INVALID_COMP_COMPARISON_STAMP:
-	case PLDM_CRC_COMP_CONFLICT:
-	case PLDM_CRC_COMP_PREREQUISITES_NOT_MET:
-	case PLDM_CRC_COMP_NOT_SUPPORTED:
-	case PLDM_CRC_COMP_SECURITY_RESTRICTIONS:
-	case PLDM_CRC_INCOMPLETE_COMP_IMAGE_SET:
-	case PLDM_CRC_ACTIVE_IMAGE_NOT_UPDATEABLE_SUBSEQUENTLY:
-	case PLDM_CRC_COMP_VER_STR_IDENTICAL:
-	case PLDM_CRC_COMP_VER_STR_LOWER:
-		return true;
-
-	default:
-		if (comp_resp_code >=
-			PLDM_CRC_VENDOR_COMP_RESP_CODE_RANGE_MIN &&
-		    comp_resp_code <=
-			PLDM_CRC_VENDOR_COMP_RESP_CODE_RANGE_MAX) {
-			return true;
-		}
-		return false;
-	}
-}
-
-/** @brief Check whether ComponentCompatibilityResponse is valid
- *
- *  @return true if ComponentCompatibilityResponse is valid, false if not
- */
-static bool is_comp_compatibility_resp_valid(uint8_t comp_compatibility_resp)
-{
-	switch (comp_compatibility_resp) {
-	case PLDM_CCR_COMP_CAN_BE_UPDATED:
-	case PLDM_CCR_COMP_CANNOT_BE_UPDATED:
-		return true;
-
-	default:
-		return false;
-	}
-}
-
-/** @brief Check whether ComponentCompatibilityResponse Code is valid
- *
- *  @return true if ComponentCompatibilityResponse Code is valid, false if not
- */
-static bool
-is_comp_compatibility_resp_code_valid(uint8_t comp_compatibility_resp_code)
-{
-	switch (comp_compatibility_resp_code) {
-	case PLDM_CCRC_NO_RESPONSE_CODE:
-	case PLDM_CCRC_COMP_COMPARISON_STAMP_IDENTICAL:
-	case PLDM_CCRC_COMP_COMPARISON_STAMP_LOWER:
-	case PLDM_CCRC_INVALID_COMP_COMPARISON_STAMP:
-	case PLDM_CCRC_COMP_CONFLICT:
-	case PLDM_CCRC_COMP_PREREQUISITES_NOT_MET:
-	case PLDM_CCRC_COMP_NOT_SUPPORTED:
-	case PLDM_CCRC_COMP_SECURITY_RESTRICTIONS:
-	case PLDM_CRC_INCOMPLETE_COMP_IMAGE_SET:
-	case PLDM_CCRC_COMP_INFO_NO_MATCH:
-	case PLDM_CCRC_COMP_VER_STR_IDENTICAL:
-	case PLDM_CCRC_COMP_VER_STR_LOWER:
-		return true;
-
-	default:
-		if (comp_compatibility_resp_code >=
-			PLDM_CCRC_VENDOR_COMP_RESP_CODE_RANGE_MIN &&
-		    comp_compatibility_resp_code <=
-			PLDM_CCRC_VENDOR_COMP_RESP_CODE_RANGE_MAX) {
-			return true;
-		}
-		return false;
-	}
-}
-
-/** @brief Check whether SelfContainedActivationRequest is valid
- *
- *  @return true if SelfContainedActivationRequest is valid, false if not
- */
-static bool
-is_self_contained_activation_req_valid(bool8_t self_contained_activation_req)
-{
-	switch (self_contained_activation_req) {
-	case PLDM_NOT_ACTIVATE_SELF_CONTAINED_COMPONENTS:
-	case PLDM_ACTIVATE_SELF_CONTAINED_COMPONENTS:
-		return true;
-
-	default:
-		return false;
-	}
-}
-
-/** @brief Check if current or previous status in GetStatus command response is
- *         valid
- *
- *	@param[in] state - current or previous different state machine state of
- *                     the FD
- *	@return true if state is valid, false if not
- */
-static bool is_state_valid(uint8_t state)
-{
-	switch (state) {
-	case PLDM_FD_STATE_IDLE:
-	case PLDM_FD_STATE_LEARN_COMPONENTS:
-	case PLDM_FD_STATE_READY_XFER:
-	case PLDM_FD_STATE_DOWNLOAD:
-	case PLDM_FD_STATE_VERIFY:
-	case PLDM_FD_STATE_APPLY:
-	case PLDM_FD_STATE_ACTIVATE:
-		return true;
-
-	default:
-		return false;
-	}
-}
-
-/** @brief Check if aux state in GetStatus command response is valid
- *
- *  @param[in] aux_state - provides additional information to the UA to describe
- *                         the current operation state of the FD/FDP
- *
- *	@return true if aux state is valid, false if not
- */
-static bool is_aux_state_valid(uint8_t aux_state)
-{
-	switch (aux_state) {
-	case PLDM_FD_OPERATION_IN_PROGRESS:
-	case PLDM_FD_OPERATION_SUCCESSFUL:
-	case PLDM_FD_OPERATION_FAILED:
-	case PLDM_FD_IDLE_LEARN_COMPONENTS_READ_XFER:
-		return true;
-
-	default:
-		return false;
-	}
-}
-
-/** @brief Check if aux state status in GetStatus command response is valid
- *
- *	@param[in] aux_state_status - aux state status
- *
- *	@return true if aux state status is valid, false if not
- */
-static bool is_aux_state_status_valid(uint8_t aux_state_status)
-{
-	if (aux_state_status == PLDM_FD_AUX_STATE_IN_PROGRESS_OR_SUCCESS ||
-	    aux_state_status == PLDM_FD_TIMEOUT ||
-	    aux_state_status == PLDM_FD_GENERIC_ERROR) {
-		return true;
-	} else if (aux_state_status >=
-		       PLDM_FD_VENDOR_DEFINED_STATUS_CODE_START &&
-		   aux_state_status <= PLDM_FD_VENDOR_DEFINED_STATUS_CODE_END) {
-		return true;
-	}
-
-	return false;
-}
-
-/** @brief Check if reason code in GetStatus command response is valid
- *
- *	@param[in] reason_code - provides the reason for why the current state
- *                           entered the IDLE state
- *
- *	@return true if reason code is valid, false if not
- */
-static bool is_reason_code_valid(uint8_t reason_code)
-{
-
-	switch (reason_code) {
-	case PLDM_FD_INITIALIZATION:
-	case PLDM_FD_ACTIVATE_FW:
-	case PLDM_FD_CANCEL_UPDATE:
-	case PLDM_FD_TIMEOUT_LEARN_COMPONENT:
-	case PLDM_FD_TIMEOUT_READY_XFER:
-	case PLDM_FD_TIMEOUT_DOWNLOAD:
-	case PLDM_FD_TIMEOUT_VERIFY:
-	case PLDM_FD_TIMEOUT_APPLY:
-		return true;
-
-	default:
-		if (reason_code >= PLDM_FD_STATUS_VENDOR_DEFINED_MIN) {
-			return true;
-		}
-		return false;
-	}
-}
-
-/** @brief Check if non functioning component indication in CancelUpdate
- *         response is valid
- *
- *  @return true if non functioning component indication is valid, false if not
- */
-static bool is_non_functioning_component_indication_valid(
-    bool8_t non_functioning_component_indication)
-{
-	switch (non_functioning_component_indication) {
-	case PLDM_FWUP_COMPONENTS_FUNCTIONING:
-	case PLDM_FWUP_COMPONENTS_NOT_FUNCTIONING:
-		return true;
-
-	default:
-		return false;
-	}
-}
-
-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)
-{
-	if (data == NULL || package_header_info == NULL ||
-	    package_version_str == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length < sizeof(struct pldm_package_header_information)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_package_header_information *data_header =
-	    (struct pldm_package_header_information *)(data);
-
-	if (!is_string_type_valid(data_header->package_version_string_type) ||
-	    (data_header->package_version_string_length == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length < sizeof(struct pldm_package_header_information) +
-			 data_header->package_version_string_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if ((data_header->component_bitmap_bit_length %
-	     PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE) != 0) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	memcpy(package_header_info->uuid, data_header->uuid,
-	       sizeof(data_header->uuid));
-	package_header_info->package_header_format_version =
-	    data_header->package_header_format_version;
-	package_header_info->package_header_size =
-	    le16toh(data_header->package_header_size);
-	memcpy(package_header_info->package_release_date_time,
-	       data_header->package_release_date_time,
-	       sizeof(data_header->package_release_date_time));
-	package_header_info->component_bitmap_bit_length =
-	    le16toh(data_header->component_bitmap_bit_length);
-	package_header_info->package_version_string_type =
-	    data_header->package_version_string_type;
-	package_header_info->package_version_string_length =
-	    data_header->package_version_string_length;
-	package_version_str->ptr =
-	    data + sizeof(struct pldm_package_header_information);
-	package_version_str->length =
-	    package_header_info->package_version_string_length;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (data == NULL || fw_device_id_record == NULL ||
-	    applicable_components == NULL ||
-	    comp_image_set_version_str == NULL || record_descriptors == NULL ||
-	    fw_device_pkg_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length < sizeof(struct pldm_firmware_device_id_record)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if ((component_bitmap_bit_length %
-	     PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE) != 0) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_firmware_device_id_record *data_record =
-	    (struct pldm_firmware_device_id_record *)(data);
-
-	if (!is_string_type_valid(
-		data_record->comp_image_set_version_string_type) ||
-	    (data_record->comp_image_set_version_string_length == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	fw_device_id_record->record_length =
-	    le16toh(data_record->record_length);
-	fw_device_id_record->descriptor_count = data_record->descriptor_count;
-	fw_device_id_record->device_update_option_flags.value =
-	    le32toh(data_record->device_update_option_flags.value);
-	fw_device_id_record->comp_image_set_version_string_type =
-	    data_record->comp_image_set_version_string_type;
-	fw_device_id_record->comp_image_set_version_string_length =
-	    data_record->comp_image_set_version_string_length;
-	fw_device_id_record->fw_device_pkg_data_length =
-	    le16toh(data_record->fw_device_pkg_data_length);
-
-	if (length < fw_device_id_record->record_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	uint16_t applicable_components_length =
-	    component_bitmap_bit_length / PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE;
-	uint16_t calc_min_record_length =
-	    sizeof(struct pldm_firmware_device_id_record) +
-	    applicable_components_length +
-	    data_record->comp_image_set_version_string_length +
-	    PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN +
-	    fw_device_id_record->fw_device_pkg_data_length;
-
-	if (fw_device_id_record->record_length < calc_min_record_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	applicable_components->ptr =
-	    data + sizeof(struct pldm_firmware_device_id_record);
-	applicable_components->length = applicable_components_length;
-
-	comp_image_set_version_str->ptr =
-	    applicable_components->ptr + applicable_components->length;
-	comp_image_set_version_str->length =
-	    fw_device_id_record->comp_image_set_version_string_length;
-
-	record_descriptors->ptr = comp_image_set_version_str->ptr +
-				  comp_image_set_version_str->length;
-	record_descriptors->length =
-	    fw_device_id_record->record_length -
-	    sizeof(struct pldm_firmware_device_id_record) -
-	    applicable_components_length -
-	    fw_device_id_record->comp_image_set_version_string_length -
-	    fw_device_id_record->fw_device_pkg_data_length;
-
-	if (fw_device_id_record->fw_device_pkg_data_length) {
-		fw_device_pkg_data->ptr =
-		    record_descriptors->ptr + record_descriptors->length;
-		fw_device_pkg_data->length =
-		    fw_device_id_record->fw_device_pkg_data_length;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_descriptor_type_length_value(const uint8_t *data, size_t length,
-					uint16_t *descriptor_type,
-					struct variable_field *descriptor_data)
-{
-	uint16_t descriptor_length = 0;
-
-	if (data == NULL || descriptor_type == NULL ||
-	    descriptor_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length < PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_descriptor_tlv *entry =
-	    (struct pldm_descriptor_tlv *)(data);
-
-	*descriptor_type = le16toh(entry->descriptor_type);
-	descriptor_length = le16toh(entry->descriptor_length);
-	if (*descriptor_type != PLDM_FWUP_VENDOR_DEFINED) {
-		if (descriptor_length !=
-		    get_descriptor_type_length(*descriptor_type)) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-	}
-
-	if (length < (sizeof(*descriptor_type) + sizeof(descriptor_length) +
-		      descriptor_length)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	descriptor_data->ptr = entry->descriptor_data;
-	descriptor_data->length = descriptor_length;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (data == NULL || descriptor_title_str_type == NULL ||
-	    descriptor_title_str == NULL || descriptor_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length < sizeof(struct pldm_vendor_defined_descriptor_title_data)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_vendor_defined_descriptor_title_data *entry =
-	    (struct pldm_vendor_defined_descriptor_title_data *)(data);
-	if (!is_string_type_valid(
-		entry->vendor_defined_descriptor_title_str_type) ||
-	    (entry->vendor_defined_descriptor_title_str_len == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	// Assuming atleast 1 byte of VendorDefinedDescriptorData
-	if (length < (sizeof(struct pldm_vendor_defined_descriptor_title_data) +
-		      entry->vendor_defined_descriptor_title_str_len)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	*descriptor_title_str_type =
-	    entry->vendor_defined_descriptor_title_str_type;
-	descriptor_title_str->ptr = entry->vendor_defined_descriptor_title_str;
-	descriptor_title_str->length =
-	    entry->vendor_defined_descriptor_title_str_len;
-
-	descriptor_data->ptr =
-	    descriptor_title_str->ptr + descriptor_title_str->length;
-	descriptor_data->length =
-	    length - sizeof(entry->vendor_defined_descriptor_title_str_type) -
-	    sizeof(entry->vendor_defined_descriptor_title_str_len) -
-	    descriptor_title_str->length;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (data == NULL || pldm_comp_image_info == NULL ||
-	    comp_version_str == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length < sizeof(struct pldm_component_image_information)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_component_image_information *data_header =
-	    (struct pldm_component_image_information *)(data);
-
-	if (!is_string_type_valid(data_header->comp_version_string_type) ||
-	    (data_header->comp_version_string_length == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length < sizeof(struct pldm_component_image_information) +
-			 data_header->comp_version_string_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	pldm_comp_image_info->comp_classification =
-	    le16toh(data_header->comp_classification);
-	pldm_comp_image_info->comp_identifier =
-	    le16toh(data_header->comp_identifier);
-	pldm_comp_image_info->comp_comparison_stamp =
-	    le32toh(data_header->comp_comparison_stamp);
-	pldm_comp_image_info->comp_options.value =
-	    le16toh(data_header->comp_options.value);
-	pldm_comp_image_info->requested_comp_activation_method.value =
-	    le16toh(data_header->requested_comp_activation_method.value);
-	pldm_comp_image_info->comp_location_offset =
-	    le32toh(data_header->comp_location_offset);
-	pldm_comp_image_info->comp_size = le32toh(data_header->comp_size);
-	pldm_comp_image_info->comp_version_string_type =
-	    data_header->comp_version_string_type;
-	pldm_comp_image_info->comp_version_string_length =
-	    data_header->comp_version_string_length;
-
-	if ((pldm_comp_image_info->comp_options.bits.bit1 == false &&
-	     pldm_comp_image_info->comp_comparison_stamp !=
-		 PLDM_FWUP_INVALID_COMPONENT_COMPARISON_TIMESTAMP)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (pldm_comp_image_info->comp_location_offset == 0 ||
-	    pldm_comp_image_info->comp_size == 0) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	comp_version_str->ptr =
-	    data + sizeof(struct pldm_component_image_information);
-	comp_version_str->length =
-	    pldm_comp_image_info->comp_version_string_length;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_query_device_identifiers_req(uint8_t instance_id,
-					size_t payload_length,
-					struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_QUERY_DEVICE_IDENTIFIERS_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	return encode_pldm_header_only(PLDM_REQUEST, instance_id, PLDM_FWUP,
-				       PLDM_QUERY_DEVICE_IDENTIFIERS, msg);
-}
-
-int decode_query_device_identifiers_resp(const struct pldm_msg *msg,
-					 size_t payload_length,
-					 uint8_t *completion_code,
-					 uint32_t *device_identifiers_len,
-					 uint8_t *descriptor_count,
-					 uint8_t **descriptor_data)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    device_identifiers_len == NULL || descriptor_count == NULL ||
-	    descriptor_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length <
-	    sizeof(struct pldm_query_device_identifiers_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_query_device_identifiers_resp *response =
-	    (struct pldm_query_device_identifiers_resp *)msg->payload;
-	*device_identifiers_len = le32toh(response->device_identifiers_len);
-
-	if (*device_identifiers_len < PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if (payload_length !=
-	    sizeof(struct pldm_query_device_identifiers_resp) +
-		*device_identifiers_len) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-	*descriptor_count = response->descriptor_count;
-
-	if (*descriptor_count == 0) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	*descriptor_data =
-	    (uint8_t *)(msg->payload +
-			sizeof(struct pldm_query_device_identifiers_resp));
-	return PLDM_SUCCESS;
-}
-
-int encode_get_firmware_parameters_req(uint8_t instance_id,
-				       size_t payload_length,
-				       struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_FIRMWARE_PARAMETERS_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	return encode_pldm_header_only(PLDM_REQUEST, instance_id, PLDM_FWUP,
-				       PLDM_GET_FIRMWARE_PARAMETERS, msg);
-}
-
-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)
-{
-	if (msg == NULL || resp_data == NULL ||
-	    active_comp_image_set_ver_str == NULL ||
-	    pending_comp_image_set_ver_str == NULL ||
-	    comp_parameter_table == NULL || !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	resp_data->completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != resp_data->completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length < sizeof(struct pldm_get_firmware_parameters_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_firmware_parameters_resp *response =
-	    (struct pldm_get_firmware_parameters_resp *)msg->payload;
-
-	if (!is_string_type_valid(
-		response->active_comp_image_set_ver_str_type) ||
-	    (response->active_comp_image_set_ver_str_len == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (response->pending_comp_image_set_ver_str_len == 0) {
-		if (response->pending_comp_image_set_ver_str_type !=
-		    PLDM_STR_TYPE_UNKNOWN) {
-			return PLDM_ERROR_INVALID_DATA;
-		}
-	} else {
-		if (!is_string_type_valid(
-			response->pending_comp_image_set_ver_str_type)) {
-			return PLDM_ERROR_INVALID_DATA;
-		}
-	}
-
-	size_t partial_response_length =
-	    sizeof(struct pldm_get_firmware_parameters_resp) +
-	    response->active_comp_image_set_ver_str_len +
-	    response->pending_comp_image_set_ver_str_len;
-
-	if (payload_length < partial_response_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	resp_data->capabilities_during_update.value =
-	    le32toh(response->capabilities_during_update.value);
-	resp_data->comp_count = le16toh(response->comp_count);
-	resp_data->active_comp_image_set_ver_str_type =
-	    response->active_comp_image_set_ver_str_type;
-	resp_data->active_comp_image_set_ver_str_len =
-	    response->active_comp_image_set_ver_str_len;
-	resp_data->pending_comp_image_set_ver_str_type =
-	    response->pending_comp_image_set_ver_str_type;
-	resp_data->pending_comp_image_set_ver_str_len =
-	    response->pending_comp_image_set_ver_str_len;
-
-	active_comp_image_set_ver_str->ptr =
-	    msg->payload + sizeof(struct pldm_get_firmware_parameters_resp);
-	active_comp_image_set_ver_str->length =
-	    resp_data->active_comp_image_set_ver_str_len;
-
-	if (resp_data->pending_comp_image_set_ver_str_len != 0) {
-		pending_comp_image_set_ver_str->ptr =
-		    msg->payload +
-		    sizeof(struct pldm_get_firmware_parameters_resp) +
-		    resp_data->active_comp_image_set_ver_str_len;
-		pending_comp_image_set_ver_str->length =
-		    resp_data->pending_comp_image_set_ver_str_len;
-	} else {
-		pending_comp_image_set_ver_str->ptr = NULL;
-		pending_comp_image_set_ver_str->length = 0;
-	}
-
-	if (payload_length > partial_response_length && resp_data->comp_count) {
-		comp_parameter_table->ptr =
-		    msg->payload +
-		    sizeof(struct pldm_get_firmware_parameters_resp) +
-		    resp_data->active_comp_image_set_ver_str_len +
-		    resp_data->pending_comp_image_set_ver_str_len;
-		comp_parameter_table->length =
-		    payload_length - partial_response_length;
-	} else {
-		comp_parameter_table->ptr = NULL;
-		comp_parameter_table->length = 0;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (data == NULL || component_data == NULL ||
-	    active_comp_ver_str == NULL || pending_comp_ver_str == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length < sizeof(struct pldm_component_parameter_entry)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_component_parameter_entry *entry =
-	    (struct pldm_component_parameter_entry *)(data);
-
-	size_t entry_length = sizeof(struct pldm_component_parameter_entry) +
-			      entry->active_comp_ver_str_len +
-			      entry->pending_comp_ver_str_len;
-
-	if (length < entry_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	component_data->comp_classification =
-	    le16toh(entry->comp_classification);
-	component_data->comp_identifier = le16toh(entry->comp_identifier);
-	component_data->comp_classification_index =
-	    entry->comp_classification_index;
-	component_data->active_comp_comparison_stamp =
-	    le32toh(entry->active_comp_comparison_stamp);
-	component_data->active_comp_ver_str_type =
-	    entry->active_comp_ver_str_type;
-	component_data->active_comp_ver_str_len =
-	    entry->active_comp_ver_str_len;
-	memcpy(component_data->active_comp_release_date,
-	       entry->active_comp_release_date,
-	       sizeof(entry->active_comp_release_date));
-	component_data->pending_comp_comparison_stamp =
-	    le32toh(entry->pending_comp_comparison_stamp);
-	component_data->pending_comp_ver_str_type =
-	    entry->pending_comp_ver_str_type;
-	component_data->pending_comp_ver_str_len =
-	    entry->pending_comp_ver_str_len;
-	memcpy(component_data->pending_comp_release_date,
-	       entry->pending_comp_release_date,
-	       sizeof(entry->pending_comp_release_date));
-	component_data->comp_activation_methods.value =
-	    le16toh(entry->comp_activation_methods.value);
-	component_data->capabilities_during_update.value =
-	    le32toh(entry->capabilities_during_update.value);
-
-	if (entry->active_comp_ver_str_len != 0) {
-		active_comp_ver_str->ptr =
-		    data + sizeof(struct pldm_component_parameter_entry);
-		active_comp_ver_str->length = entry->active_comp_ver_str_len;
-	} else {
-		active_comp_ver_str->ptr = NULL;
-		active_comp_ver_str->length = 0;
-	}
-
-	if (entry->pending_comp_ver_str_len != 0) {
-
-		pending_comp_ver_str->ptr =
-		    data + sizeof(struct pldm_component_parameter_entry) +
-		    entry->active_comp_ver_str_len;
-		pending_comp_ver_str->length = entry->pending_comp_ver_str_len;
-	} else {
-		pending_comp_ver_str->ptr = NULL;
-		pending_comp_ver_str->length = 0;
-	}
-	return PLDM_SUCCESS;
-}
-
-int encode_request_update_req(uint8_t instance_id, uint32_t max_transfer_size,
-			      uint16_t num_of_comp,
-			      uint8_t max_outstanding_transfer_req,
-			      uint16_t pkg_data_len,
-			      uint8_t comp_image_set_ver_str_type,
-			      uint8_t comp_image_set_ver_str_len,
-			      const struct variable_field *comp_img_set_ver_str,
-			      struct pldm_msg *msg, size_t payload_length)
-{
-	if (comp_img_set_ver_str == NULL || comp_img_set_ver_str->ptr == NULL ||
-	    msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(struct pldm_request_update_req) +
-				  comp_img_set_ver_str->length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if ((comp_image_set_ver_str_len == 0) ||
-	    (comp_image_set_ver_str_len != comp_img_set_ver_str->length)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if ((max_transfer_size < PLDM_FWUP_BASELINE_TRANSFER_SIZE) ||
-	    (max_outstanding_transfer_req < PLDM_FWUP_MIN_OUTSTANDING_REQ)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (!is_string_type_valid(comp_image_set_ver_str_type)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_REQUEST_UPDATE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	struct pldm_request_update_req *request =
-	    (struct pldm_request_update_req *)msg->payload;
-
-	request->max_transfer_size = htole32(max_transfer_size);
-	request->num_of_comp = htole16(num_of_comp);
-	request->max_outstanding_transfer_req = max_outstanding_transfer_req;
-	request->pkg_data_len = htole16(pkg_data_len);
-	request->comp_image_set_ver_str_type = comp_image_set_ver_str_type;
-	request->comp_image_set_ver_str_len = comp_image_set_ver_str_len;
-
-	memcpy(msg->payload + sizeof(struct pldm_request_update_req),
-	       comp_img_set_ver_str->ptr, comp_img_set_ver_str->length);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_request_update_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint16_t *fd_meta_data_len,
-			       uint8_t *fd_will_send_pkg_data)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    fd_meta_data_len == NULL || fd_will_send_pkg_data == NULL ||
-	    !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (*completion_code != PLDM_SUCCESS) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != sizeof(struct pldm_request_update_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_request_update_resp *response =
-	    (struct pldm_request_update_resp *)msg->payload;
-
-	*fd_meta_data_len = le16toh(response->fd_meta_data_len);
-	*fd_will_send_pkg_data = response->fd_will_send_pkg_data;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (comp_ver_str == NULL || comp_ver_str->ptr == NULL || msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(struct pldm_pass_component_table_req) +
-				  comp_ver_str->length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if ((comp_ver_str_len == 0) ||
-	    (comp_ver_str_len != comp_ver_str->length)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (!is_transfer_flag_valid(transfer_flag)) {
-		return PLDM_INVALID_TRANSFER_OPERATION_FLAG;
-	}
-
-	if (!is_string_type_valid(comp_ver_str_type)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_PASS_COMPONENT_TABLE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	struct pldm_pass_component_table_req *request =
-	    (struct pldm_pass_component_table_req *)msg->payload;
-
-	request->transfer_flag = transfer_flag;
-	request->comp_classification = htole16(comp_classification);
-	request->comp_identifier = htole16(comp_identifier);
-	request->comp_classification_index = comp_classification_index;
-	request->comp_comparison_stamp = htole32(comp_comparison_stamp);
-	request->comp_ver_str_type = comp_ver_str_type;
-	request->comp_ver_str_len = comp_ver_str_len;
-
-	memcpy(msg->payload + sizeof(struct pldm_pass_component_table_req),
-	       comp_ver_str->ptr, comp_ver_str->length);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_pass_component_table_resp(const struct pldm_msg *msg,
-				     const size_t payload_length,
-				     uint8_t *completion_code,
-				     uint8_t *comp_resp,
-				     uint8_t *comp_resp_code)
-{
-	if (msg == NULL || completion_code == NULL || comp_resp == NULL ||
-	    comp_resp_code == NULL || !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (*completion_code != PLDM_SUCCESS) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != sizeof(struct pldm_pass_component_table_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_pass_component_table_resp *response =
-	    (struct pldm_pass_component_table_resp *)msg->payload;
-
-	if (!is_comp_resp_valid(response->comp_resp)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (!is_comp_resp_code_valid(response->comp_resp_code)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*comp_resp = response->comp_resp;
-	*comp_resp_code = response->comp_resp_code;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (comp_ver_str == NULL || comp_ver_str->ptr == NULL || msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length !=
-	    sizeof(struct pldm_update_component_req) + comp_ver_str->length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if (!comp_image_size) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if ((comp_ver_str_len == 0) ||
-	    (comp_ver_str_len != comp_ver_str->length)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (!is_string_type_valid(comp_ver_str_type)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_UPDATE_COMPONENT;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	struct pldm_update_component_req *request =
-	    (struct pldm_update_component_req *)msg->payload;
-
-	request->comp_classification = htole16(comp_classification);
-	request->comp_identifier = htole16(comp_identifier);
-	request->comp_classification_index = comp_classification_index;
-	request->comp_comparison_stamp = htole32(comp_comparison_stamp);
-	request->comp_image_size = htole32(comp_image_size);
-	request->update_option_flags.value = htole32(update_option_flags.value);
-	request->comp_ver_str_type = comp_ver_str_type;
-	request->comp_ver_str_len = comp_ver_str_len;
-
-	memcpy(msg->payload + sizeof(struct pldm_update_component_req),
-	       comp_ver_str->ptr, comp_ver_str->length);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_update_component_resp(const struct pldm_msg *msg,
-				 size_t payload_length,
-				 uint8_t *completion_code,
-				 uint8_t *comp_compatibility_resp,
-				 uint8_t *comp_compatibility_resp_code,
-				 bitfield32_t *update_option_flags_enabled,
-				 uint16_t *time_before_req_fw_data)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    comp_compatibility_resp == NULL ||
-	    comp_compatibility_resp_code == NULL ||
-	    update_option_flags_enabled == NULL ||
-	    time_before_req_fw_data == NULL || !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (*completion_code != PLDM_SUCCESS) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != sizeof(struct pldm_update_component_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_update_component_resp *response =
-	    (struct pldm_update_component_resp *)msg->payload;
-
-	if (!is_comp_compatibility_resp_valid(
-		response->comp_compatibility_resp)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (!is_comp_compatibility_resp_code_valid(
-		response->comp_compatibility_resp_code)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*comp_compatibility_resp = response->comp_compatibility_resp;
-	*comp_compatibility_resp_code = response->comp_compatibility_resp_code;
-	update_option_flags_enabled->value =
-	    le32toh(response->update_option_flags_enabled.value);
-	*time_before_req_fw_data = le16toh(response->time_before_req_fw_data);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_request_firmware_data_req(const struct pldm_msg *msg,
-				     size_t payload_length, uint32_t *offset,
-				     uint32_t *length)
-{
-	if (msg == NULL || offset == NULL || length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (payload_length != sizeof(struct pldm_request_firmware_data_req)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-	struct pldm_request_firmware_data_req *request =
-	    (struct pldm_request_firmware_data_req *)msg->payload;
-	*offset = le32toh(request->offset);
-	*length = le32toh(request->length);
-
-	if (*length < PLDM_FWUP_BASELINE_TRANSFER_SIZE) {
-		return PLDM_FWUP_INVALID_TRANSFER_LENGTH;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_request_firmware_data_resp(uint8_t instance_id,
-				      uint8_t completion_code,
-				      struct pldm_msg *msg,
-				      size_t payload_length)
-{
-	if (msg == NULL || !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_REQUEST_FIRMWARE_DATA;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	msg->payload[0] = completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_transfer_complete_req(const struct pldm_msg *msg,
-				 size_t payload_length,
-				 uint8_t *transfer_result)
-{
-	if (msg == NULL || transfer_result == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(*transfer_result)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	*transfer_result = msg->payload[0];
-	return PLDM_SUCCESS;
-}
-
-int encode_transfer_complete_resp(uint8_t instance_id, uint8_t completion_code,
-				  struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(completion_code)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_TRANSFER_COMPLETE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	msg->payload[0] = completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_verify_complete_req(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *verify_result)
-{
-	if (msg == NULL || verify_result == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(*verify_result)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	*verify_result = msg->payload[0];
-	return PLDM_SUCCESS;
-}
-
-int encode_verify_complete_resp(uint8_t instance_id, uint8_t completion_code,
-				struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(completion_code)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_VERIFY_COMPLETE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	msg->payload[0] = completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_apply_complete_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *apply_result,
-    bitfield16_t *comp_activation_methods_modification)
-{
-	if (msg == NULL || apply_result == NULL ||
-	    comp_activation_methods_modification == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(struct pldm_apply_complete_req)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_apply_complete_req *request =
-	    (struct pldm_apply_complete_req *)msg->payload;
-
-	*apply_result = request->apply_result;
-	comp_activation_methods_modification->value =
-	    le16toh(request->comp_activation_methods_modification.value);
-
-	if ((*apply_result != PLDM_FWUP_APPLY_SUCCESS_WITH_ACTIVATION_METHOD) &&
-	    comp_activation_methods_modification->value) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_apply_complete_resp(uint8_t instance_id, uint8_t completion_code,
-			       struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(completion_code)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_APPLY_COMPLETE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	msg->payload[0] = completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_activate_firmware_req(uint8_t instance_id,
-				 bool8_t self_contained_activation_req,
-				 struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(struct pldm_activate_firmware_req)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if (!is_self_contained_activation_req_valid(
-		self_contained_activation_req)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_ACTIVATE_FIRMWARE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	struct pldm_activate_firmware_req *request =
-	    (struct pldm_activate_firmware_req *)msg->payload;
-
-	request->self_contained_activation_req = self_contained_activation_req;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_activate_firmware_resp(const struct pldm_msg *msg,
-				  size_t payload_length,
-				  uint8_t *completion_code,
-				  uint16_t *estimated_time_activation)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    estimated_time_activation == NULL || !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (*completion_code != PLDM_SUCCESS) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != sizeof(struct pldm_activate_firmware_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_activate_firmware_resp *response =
-	    (struct pldm_activate_firmware_resp *)msg->payload;
-
-	*estimated_time_activation =
-	    le16toh(response->estimated_time_activation);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_status_req(uint8_t instance_id, struct pldm_msg *msg,
-			  size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_STATUS_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_GET_STATUS;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_status_resp(const struct pldm_msg *msg, size_t payload_length,
-			   uint8_t *completion_code, uint8_t *current_state,
-			   uint8_t *previous_state, uint8_t *aux_state,
-			   uint8_t *aux_state_status, uint8_t *progress_percent,
-			   uint8_t *reason_code,
-			   bitfield32_t *update_option_flags_enabled)
-{
-	if (msg == NULL || completion_code == NULL || current_state == NULL ||
-	    previous_state == NULL || aux_state == NULL ||
-	    aux_state_status == NULL || progress_percent == NULL ||
-	    reason_code == NULL || update_option_flags_enabled == NULL ||
-	    !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (*completion_code != PLDM_SUCCESS) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != sizeof(struct pldm_get_status_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-	struct pldm_get_status_resp *response =
-	    (struct pldm_get_status_resp *)msg->payload;
-
-	if (!is_state_valid(response->current_state)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (!is_state_valid(response->previous_state)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (!is_aux_state_valid(response->aux_state)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (!is_aux_state_status_valid(response->aux_state_status)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (response->progress_percent > PLDM_FWUP_MAX_PROGRESS_PERCENT) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (!is_reason_code_valid(response->reason_code)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if ((response->current_state == PLDM_FD_STATE_IDLE) ||
-	    (response->current_state == PLDM_FD_STATE_LEARN_COMPONENTS) ||
-	    (response->current_state == PLDM_FD_STATE_READY_XFER)) {
-		if (response->aux_state !=
-		    PLDM_FD_IDLE_LEARN_COMPONENTS_READ_XFER) {
-			return PLDM_ERROR_INVALID_DATA;
-		}
-	}
-
-	*current_state = response->current_state;
-	*previous_state = response->previous_state;
-	*aux_state = response->aux_state;
-	*aux_state_status = response->aux_state_status;
-	*progress_percent = response->progress_percent;
-	*reason_code = response->reason_code;
-	update_option_flags_enabled->value =
-	    le32toh(response->update_option_flags_enabled.value);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_cancel_update_component_req(uint8_t instance_id,
-				       struct pldm_msg *msg,
-				       size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_CANCEL_UPDATE_COMPONENT_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_CANCEL_UPDATE_COMPONENT;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_cancel_update_component_resp(const struct pldm_msg *msg,
-					size_t payload_length,
-					uint8_t *completion_code)
-{
-	if (msg == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != sizeof(*completion_code)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	*completion_code = msg->payload[0];
-	return PLDM_SUCCESS;
-}
-
-int encode_cancel_update_req(uint8_t instance_id, struct pldm_msg *msg,
-			     size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_CANCEL_UPDATE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_FWUP;
-	header.command = PLDM_CANCEL_UPDATE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc) {
-		return rc;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_cancel_update_resp(const struct pldm_msg *msg, size_t payload_length,
-			      uint8_t *completion_code,
-			      bool8_t *non_functioning_component_indication,
-			      bitfield64_t *non_functioning_component_bitmap)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    non_functioning_component_indication == NULL ||
-	    non_functioning_component_bitmap == NULL || !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (*completion_code != PLDM_SUCCESS) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != sizeof(struct pldm_cancel_update_resp)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-	struct pldm_cancel_update_resp *response =
-	    (struct pldm_cancel_update_resp *)msg->payload;
-
-	if (!is_non_functioning_component_indication_valid(
-		response->non_functioning_component_indication)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*non_functioning_component_indication =
-	    response->non_functioning_component_indication;
-
-	if (*non_functioning_component_indication) {
-		non_functioning_component_bitmap->value =
-		    le64toh(response->non_functioning_component_bitmap);
-	}
-
-	return PLDM_SUCCESS;
-}
diff --git a/subprojects/libpldm/src/fru.c b/subprojects/libpldm/src/fru.c
deleted file mode 100644
index fa79f2b..0000000
--- a/subprojects/libpldm/src/fru.c
+++ /dev/null
@@ -1,548 +0,0 @@
-#include <assert.h>
-#include <endian.h>
-#include <stdbool.h>
-#include <string.h>
-
-#include "fru.h"
-
-int encode_get_fru_record_table_metadata_req(uint8_t instance_id,
-					     struct pldm_msg *msg,
-					     size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_FRU_RECORD_TABLE_METADATA_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_FRU;
-	header.command = PLDM_GET_FRU_RECORD_TABLE_METADATA;
-
-	return pack_pldm_header(&header, &(msg->hdr));
-}
-
-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)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    fru_data_major_version == NULL || fru_data_minor_version == NULL ||
-	    fru_table_maximum_size == NULL || fru_table_length == NULL ||
-	    total_record_set_identifiers == NULL ||
-	    total_table_records == NULL || checksum == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_fru_record_table_metadata_resp *response =
-	    (struct pldm_get_fru_record_table_metadata_resp *)msg->payload;
-
-	*fru_data_major_version = response->fru_data_major_version;
-	*fru_data_minor_version = response->fru_data_minor_version;
-	*fru_table_maximum_size = le32toh(response->fru_table_maximum_size);
-	*fru_table_length = le32toh(response->fru_table_length);
-	*total_record_set_identifiers =
-	    le16toh(response->total_record_set_identifiers);
-	*total_table_records = le16toh(response->total_table_records);
-	*checksum = le32toh(response->checksum);
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_FRU;
-	header.command = PLDM_GET_FRU_RECORD_TABLE_METADATA;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (PLDM_SUCCESS != rc) {
-		return rc;
-	}
-
-	struct pldm_get_fru_record_table_metadata_resp *response =
-	    (struct pldm_get_fru_record_table_metadata_resp *)msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->fru_data_major_version = fru_data_major_version;
-		response->fru_data_minor_version = fru_data_minor_version;
-		response->fru_table_maximum_size =
-		    htole32(fru_table_maximum_size);
-		response->fru_table_length = htole32(fru_table_length);
-		response->total_record_set_identifiers =
-		    htole16(total_record_set_identifiers);
-		response->total_table_records = htole16(total_table_records);
-		response->checksum = htole32(checksum);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_fru_record_table_req(const struct pldm_msg *msg,
-				    size_t payload_length,
-				    uint32_t *data_transfer_handle,
-				    uint8_t *transfer_operation_flag)
-{
-	if (msg == NULL || data_transfer_handle == NULL ||
-	    transfer_operation_flag == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_fru_record_table_req *req =
-	    (struct pldm_get_fru_record_table_req *)msg->payload;
-
-	*data_transfer_handle = le32toh(req->data_transfer_handle);
-	*transfer_operation_flag = req->transfer_operation_flag;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_fru_record_table_resp(uint8_t instance_id,
-				     uint8_t completion_code,
-				     uint32_t next_data_transfer_handle,
-				     uint8_t transfer_flag,
-				     struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_FRU;
-	header.command = PLDM_GET_FRU_RECORD_TABLE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc > PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_fru_record_table_resp *resp =
-	    (struct pldm_get_fru_record_table_resp *)msg->payload;
-
-	resp->completion_code = completion_code;
-
-	if (resp->completion_code == PLDM_SUCCESS) {
-
-		resp->next_data_transfer_handle =
-		    htole32(next_data_transfer_handle);
-		resp->transfer_flag = transfer_flag;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_fru_record(uint8_t *fru_table, size_t total_size, size_t *curr_size,
-		      uint16_t record_set_id, uint8_t record_type,
-		      uint8_t num_frus, uint8_t encoding, uint8_t *tlvs,
-		      size_t tlvs_size)
-{
-	size_t record_hdr_size = sizeof(struct pldm_fru_record_data_format) -
-				 sizeof(struct pldm_fru_record_tlv);
-
-	if (fru_table == NULL || curr_size == NULL || !tlvs_size) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if ((*curr_size + record_hdr_size + tlvs_size) != total_size) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_fru_record_data_format *record =
-	    (struct pldm_fru_record_data_format *)(fru_table + *curr_size);
-	record->record_set_id = htole16(record_set_id);
-	record->record_type = record_type;
-	record->num_fru_fields = num_frus;
-	record->encoding_type = encoding;
-	*curr_size += record_hdr_size;
-
-	if (tlvs) {
-		memcpy(fru_table + *curr_size, tlvs, tlvs_size);
-		*curr_size += tlvs_size;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-static bool is_table_end(const struct pldm_fru_record_data_format *p,
-			 const void *table, size_t table_size)
-{
-	return p ==
-	       (const struct pldm_fru_record_data_format *)((uint8_t *)table +
-							    table_size);
-}
-
-void get_fru_record_by_option(const uint8_t *table, size_t table_size,
-			      uint8_t *record_table, size_t *record_size,
-			      uint16_t rsi, uint8_t rt, uint8_t ft)
-{
-	const struct pldm_fru_record_data_format *record_data_src =
-	    (const struct pldm_fru_record_data_format *)table;
-	struct pldm_fru_record_data_format *record_data_dest;
-	int count = 0;
-
-	const struct pldm_fru_record_tlv *tlv;
-	size_t len;
-	uint8_t *pos = record_table;
-
-	while (!is_table_end(record_data_src, table, table_size)) {
-		if ((record_data_src->record_set_id != htole16(rsi) &&
-		     rsi != 0) ||
-		    (record_data_src->record_type != rt && rt != 0)) {
-			tlv = record_data_src->tlvs;
-			for (int i = 0; i < record_data_src->num_fru_fields;
-			     i++) {
-				len = sizeof(*tlv) - 1 + tlv->length;
-				tlv = (const struct pldm_fru_record_tlv
-					   *)((char *)tlv + len);
-			}
-			record_data_src =
-			    (const struct pldm_fru_record_data_format *)(tlv);
-			continue;
-		}
-
-		len = sizeof(struct pldm_fru_record_data_format) -
-		      sizeof(struct pldm_fru_record_tlv);
-
-		assert(pos - record_table + len < *record_size);
-		memcpy(pos, record_data_src, len);
-
-		record_data_dest = (struct pldm_fru_record_data_format *)pos;
-		pos += len;
-
-		tlv = record_data_src->tlvs;
-		count = 0;
-		for (int i = 0; i < record_data_src->num_fru_fields; i++) {
-			len = sizeof(*tlv) - 1 + tlv->length;
-			if (tlv->type == ft || ft == 0) {
-				assert(pos - record_table + len < *record_size);
-				memcpy(pos, tlv, len);
-				pos += len;
-				count++;
-			}
-			tlv = (const struct pldm_fru_record_tlv *)((char *)tlv +
-								   len);
-		}
-		record_data_dest->num_fru_fields = count;
-		record_data_src =
-		    (const struct pldm_fru_record_data_format *)(tlv);
-	}
-
-	*record_size = pos - record_table;
-}
-
-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)
-{
-
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length !=
-	    sizeof(struct pldm_get_fru_record_by_option_req)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_REQUEST;
-	header.pldm_type = PLDM_FRU;
-	header.command = PLDM_GET_FRU_RECORD_BY_OPTION;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_fru_record_by_option_req *req =
-	    (struct pldm_get_fru_record_by_option_req *)msg->payload;
-
-	req->data_transfer_handle = htole32(data_transfer_handle);
-	req->fru_table_handle = htole16(fru_table_handle);
-	req->record_set_identifier = htole16(record_set_identifier);
-	req->record_type = record_type;
-	req->field_type = field_type;
-	req->transfer_op_flag = transfer_op_flag;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || data_transfer_handle == NULL ||
-	    fru_table_handle == NULL || record_set_identifier == NULL ||
-	    record_type == NULL || field_type == NULL ||
-	    transfer_op_flag == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length !=
-	    sizeof(struct pldm_get_fru_record_by_option_req)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_fru_record_by_option_req *req =
-	    (struct pldm_get_fru_record_by_option_req *)msg->payload;
-
-	*data_transfer_handle = le32toh(req->data_transfer_handle);
-	*fru_table_handle = le16toh(req->fru_table_handle);
-	*record_set_identifier = le16toh(req->record_set_identifier);
-	*record_type = req->record_type;
-	*field_type = req->field_type;
-	*transfer_op_flag = req->transfer_op_flag;
-	return PLDM_SUCCESS;
-}
-
-int encode_get_fru_record_by_option_resp(uint8_t instance_id,
-					 uint8_t completion_code,
-					 uint32_t next_data_transfer_handle,
-					 uint8_t transfer_flag,
-					 const void *fru_structure_data,
-					 size_t data_size, struct pldm_msg *msg,
-					 size_t payload_length)
-{
-	if (msg == NULL || fru_structure_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length !=
-	    PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES + data_size) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_FRU;
-	header.command = PLDM_GET_FRU_RECORD_BY_OPTION;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_fru_record_by_option_resp *resp =
-	    (struct pldm_get_fru_record_by_option_resp *)msg->payload;
-
-	resp->completion_code = completion_code;
-	resp->next_data_transfer_handle = htole32(next_data_transfer_handle);
-	resp->transfer_flag = transfer_flag;
-
-	if (completion_code == PLDM_SUCCESS) {
-		memcpy(resp->fru_structure_data, fru_structure_data, data_size);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    next_transfer_handle == NULL || transfer_flag == NULL ||
-	    fru_structure_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length < PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_fru_record_by_option_resp *resp =
-	    (struct pldm_get_fru_record_by_option_resp *)msg->payload;
-
-	*next_transfer_handle = le32toh(resp->next_data_transfer_handle);
-	*transfer_flag = resp->transfer_flag;
-	fru_structure_data->ptr = resp->fru_structure_data;
-	fru_structure_data->length =
-	    payload_length - PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_fru_record_table_req(uint8_t instance_id,
-				    uint32_t data_transfer_handle,
-				    uint8_t transfer_operation_flag,
-				    struct pldm_msg *msg, size_t payload_length)
-
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (payload_length != sizeof(struct pldm_get_fru_record_table_req)) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_FRU;
-	header.command = PLDM_GET_FRU_RECORD_TABLE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_fru_record_table_req *req =
-	    (struct pldm_get_fru_record_table_req *)msg->payload;
-	req->data_transfer_handle = htole32(data_transfer_handle);
-	req->transfer_operation_flag = transfer_operation_flag;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    next_data_transfer_handle == NULL || transfer_flag == NULL ||
-	    fru_record_table_data == NULL || fru_record_table_length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-	if (payload_length <= PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_fru_record_table_resp *resp =
-	    (struct pldm_get_fru_record_table_resp *)msg->payload;
-
-	*next_data_transfer_handle = le32toh(resp->next_data_transfer_handle);
-	*transfer_flag = resp->transfer_flag;
-
-	*fru_record_table_length =
-	    payload_length - PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES;
-
-	if (*fru_record_table_length > max_fru_record_table_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	memcpy(fru_record_table_data, resp->fru_record_table_data,
-	       *fru_record_table_length);
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	return decode_get_fru_record_table_resp_safe(
-	    msg, payload_length, completion_code, next_data_transfer_handle,
-	    transfer_flag, fru_record_table_data, fru_record_table_length,
-	    (size_t)-1);
-}
-
-int decode_set_fru_record_table_req(const struct pldm_msg *msg,
-				    size_t payload_length,
-				    uint32_t *data_transfer_handle,
-				    uint8_t *transfer_flag,
-				    struct variable_field *fru_table_data)
-
-{
-	if (msg == NULL || data_transfer_handle == NULL ||
-	    transfer_flag == NULL || fru_table_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length <= PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_set_fru_record_table_req *req =
-	    (struct pldm_set_fru_record_table_req *)msg->payload;
-
-	*data_transfer_handle = le32toh(req->data_transfer_handle);
-	*transfer_flag = req->transfer_flag;
-	fru_table_data->length =
-	    payload_length - PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES;
-	fru_table_data->ptr = req->fru_record_table_data;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_fru_record_table_resp(uint8_t instance_id,
-				     uint8_t completion_code,
-				     uint32_t next_data_transfer_handle,
-				     size_t payload_length,
-				     struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (payload_length != PLDM_SET_FRU_RECORD_TABLE_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_FRU;
-	header.command = PLDM_SET_FRU_RECORD_TABLE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (PLDM_SUCCESS != rc) {
-		return rc;
-	}
-
-	struct pldm_set_fru_record_table_resp *response =
-	    (struct pldm_set_fru_record_table_resp *)msg->payload;
-	response->completion_code = completion_code;
-	response->next_data_transfer_handle =
-	    htole32(next_data_transfer_handle);
-
-	return PLDM_SUCCESS;
-}
diff --git a/subprojects/libpldm/src/meson.build b/subprojects/libpldm/src/meson.build
deleted file mode 100644
index fc44e8a..0000000
--- a/subprojects/libpldm/src/meson.build
+++ /dev/null
@@ -1,19 +0,0 @@
-
-libpldm_sources += files(
-  'base.c',
-  'bios.c',
-  'platform.c',
-  'bios_table.c',
-  'firmware_update.c',
-  'fru.c',
-  'pdr.c',
-  'utils.c'
-  )
-
-if get_option('oem-ibm').enabled()
-   subdir('oem/ibm')
-endif
-
-if get_option('requester-api').enabled()
-   subdir('requester')
-endif
diff --git a/subprojects/libpldm/src/oem/ibm/file_io.c b/subprojects/libpldm/src/oem/ibm/file_io.c
deleted file mode 100644
index b3464cb..0000000
--- a/subprojects/libpldm/src/oem/ibm/file_io.c
+++ /dev/null
@@ -1,1056 +0,0 @@
-#include "libpldm/file_io.h"
-#include <endian.h>
-#include <string.h>
-
-int decode_rw_file_memory_req(const struct pldm_msg *msg, size_t payload_length,
-			      uint32_t *file_handle, uint32_t *offset,
-			      uint32_t *length, uint64_t *address)
-{
-	if (msg == NULL || file_handle == NULL || offset == NULL ||
-	    length == NULL || address == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_RW_FILE_MEM_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_read_write_file_memory_req *request =
-	    (struct pldm_read_write_file_memory_req *)msg->payload;
-
-	*file_handle = le32toh(request->file_handle);
-	*offset = le32toh(request->offset);
-	*length = le32toh(request->length);
-	*address = le64toh(request->address);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_rw_file_memory_resp(uint8_t instance_id, uint8_t command,
-			       uint8_t completion_code, uint32_t length,
-			       struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = command;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_read_write_file_memory_resp *response =
-	    (struct pldm_read_write_file_memory_resp *)msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->length = htole32(length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_rw_file_memory_req(uint8_t instance_id, uint8_t command,
-			      uint32_t file_handle, uint32_t offset,
-			      uint32_t length, uint64_t address,
-			      struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = command;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_read_write_file_memory_req *req =
-	    (struct pldm_read_write_file_memory_req *)msg->payload;
-	req->file_handle = htole32(file_handle);
-	req->offset = htole32(offset);
-	req->length = htole32(length);
-	req->address = htole64(address);
-	return PLDM_SUCCESS;
-}
-
-int decode_rw_file_memory_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint32_t *length)
-{
-	if (msg == NULL || length == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_RW_FILE_MEM_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_read_write_file_memory_resp *response =
-	    (struct pldm_read_write_file_memory_resp *)msg->payload;
-	*completion_code = response->completion_code;
-	if (*completion_code == PLDM_SUCCESS) {
-		*length = le32toh(response->length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_file_table_req(const struct pldm_msg *msg, size_t payload_length,
-			      uint32_t *transfer_handle,
-			      uint8_t *transfer_opflag, uint8_t *table_type)
-{
-	if (msg == NULL || transfer_handle == NULL || transfer_opflag == NULL ||
-	    table_type == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_FILE_TABLE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_file_table_req *request =
-	    (struct pldm_get_file_table_req *)msg->payload;
-
-	*transfer_handle = le32toh(request->transfer_handle);
-	*transfer_opflag = request->operation_flag;
-	*table_type = request->table_type;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_file_table_resp(uint8_t instance_id, uint8_t completion_code,
-			       uint32_t next_transfer_handle,
-			       uint8_t transfer_flag, const uint8_t *table_data,
-			       size_t table_size, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_GET_FILE_TABLE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_file_table_resp *response =
-	    (struct pldm_get_file_table_resp *)msg->payload;
-	response->completion_code = completion_code;
-
-	if (completion_code == PLDM_SUCCESS) {
-		response->next_transfer_handle = htole32(next_transfer_handle);
-		response->transfer_flag = transfer_flag;
-		memcpy(response->table_data, table_data, table_size);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_file_table_req(uint8_t instance_id, uint32_t transfer_handle,
-			      uint8_t transfer_opflag, uint8_t table_type,
-			      struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_GET_FILE_TABLE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_file_table_req *request =
-	    (struct pldm_get_file_table_req *)msg->payload;
-
-	request->transfer_handle = htole32(transfer_handle);
-	request->operation_flag = transfer_opflag;
-	request->table_type = table_type;
-	return PLDM_SUCCESS;
-}
-
-int decode_get_file_table_resp(const struct pldm_msg *msg,
-			       size_t payload_length, uint8_t *completion_code,
-			       uint32_t *next_transfer_handle,
-			       uint8_t *transfer_flag,
-			       uint8_t *file_table_data_start_offset,
-			       size_t *file_table_length)
-{
-	if (msg == NULL || transfer_flag == NULL ||
-	    next_transfer_handle == NULL || completion_code == NULL ||
-	    file_table_data_start_offset == NULL || file_table_length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length <= PLDM_GET_FILE_TABLE_MIN_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	*completion_code = msg->payload[0];
-
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	struct pldm_get_file_table_resp *response =
-	    (struct pldm_get_file_table_resp *)msg->payload;
-
-	*next_transfer_handle = le32toh(response->next_transfer_handle);
-	*transfer_flag = response->transfer_flag;
-	*file_table_data_start_offset = sizeof(*completion_code) +
-					sizeof(*next_transfer_handle) +
-					sizeof(*transfer_flag);
-	*file_table_length =
-	    payload_length - PLDM_GET_FILE_TABLE_MIN_RESP_BYTES;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_read_file_req(const struct pldm_msg *msg, size_t payload_length,
-			 uint32_t *file_handle, uint32_t *offset,
-			 uint32_t *length)
-{
-	if (msg == NULL || file_handle == NULL || offset == NULL ||
-	    length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_READ_FILE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_read_file_req *request =
-	    (struct pldm_read_file_req *)msg->payload;
-
-	*file_handle = le32toh(request->file_handle);
-	*offset = le32toh(request->offset);
-	*length = le32toh(request->length);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_read_file_req(uint8_t instance_id, uint32_t file_handle,
-			 uint32_t offset, uint32_t length, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length == 0) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_READ_FILE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_read_file_req *request =
-	    (struct pldm_read_file_req *)msg->payload;
-
-	request->file_handle = htole32(file_handle);
-	request->offset = htole32(offset);
-	request->length = htole32(length);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_read_file_resp(const struct pldm_msg *msg, size_t payload_length,
-			  uint8_t *completion_code, uint32_t *length,
-			  size_t *file_data_offset)
-{
-	if (msg == NULL || completion_code == NULL || length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length < PLDM_READ_FILE_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_read_file_resp *response =
-	    (struct pldm_read_file_resp *)msg->payload;
-
-	*completion_code = response->completion_code;
-	if (*completion_code == PLDM_SUCCESS) {
-		*length = le32toh(response->length);
-		if (payload_length != PLDM_READ_FILE_RESP_BYTES + *length) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		*file_data_offset = sizeof(*completion_code) + sizeof(*length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_read_file_resp(uint8_t instance_id, uint8_t completion_code,
-			  uint32_t length, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_READ_FILE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_read_file_resp *response =
-	    (struct pldm_read_file_resp *)msg->payload;
-	response->completion_code = completion_code;
-
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->length = htole32(length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_write_file_req(const struct pldm_msg *msg, size_t payload_length,
-			  uint32_t *file_handle, uint32_t *offset,
-			  uint32_t *length, size_t *file_data_offset)
-{
-	if (msg == NULL || file_handle == NULL || length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length < PLDM_WRITE_FILE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_write_file_req *request =
-	    (struct pldm_write_file_req *)msg->payload;
-
-	*file_handle = le32toh(request->file_handle);
-	*offset = le32toh(request->offset);
-	*length = le32toh(request->length);
-	if (payload_length != PLDM_WRITE_FILE_REQ_BYTES + *length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-	*file_data_offset =
-	    sizeof(*file_handle) + sizeof(*offset) + sizeof(*length);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_write_file_req(uint8_t instance_id, uint32_t file_handle,
-			  uint32_t offset, uint32_t length,
-			  struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (length == 0) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_WRITE_FILE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_write_file_req *request =
-	    (struct pldm_write_file_req *)msg->payload;
-
-	request->file_handle = htole32(file_handle);
-	request->offset = htole32(offset);
-	request->length = htole32(length);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_write_file_resp(const struct pldm_msg *msg, size_t payload_length,
-			   uint8_t *completion_code, uint32_t *length)
-{
-	if (msg == NULL || completion_code == NULL || length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_WRITE_FILE_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_write_file_resp *response =
-	    (struct pldm_write_file_resp *)msg->payload;
-
-	*completion_code = le32toh(response->completion_code);
-	if (response->completion_code == PLDM_SUCCESS) {
-		*length = le32toh(response->length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_write_file_resp(uint8_t instance_id, uint8_t completion_code,
-			   uint32_t length, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_WRITE_FILE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_write_file_resp *response =
-	    (struct pldm_write_file_resp *)msg->payload;
-	response->completion_code = completion_code;
-
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->length = htole32(length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_rw_file_by_type_memory_req(const struct pldm_msg *msg,
-				      size_t payload_length,
-				      uint16_t *file_type,
-				      uint32_t *file_handle, uint32_t *offset,
-				      uint32_t *length, uint64_t *address)
-{
-	if (msg == NULL || file_type == NULL || file_handle == NULL ||
-	    offset == NULL || length == NULL || address == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_RW_FILE_BY_TYPE_MEM_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_read_write_file_by_type_memory_req *request =
-	    (struct pldm_read_write_file_by_type_memory_req *)msg->payload;
-	*file_type = le16toh(request->file_type);
-	*file_handle = le32toh(request->file_handle);
-	*offset = le32toh(request->offset);
-	*length = le32toh(request->length);
-	*address = le64toh(request->address);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_rw_file_by_type_memory_resp(uint8_t instance_id, uint8_t command,
-				       uint8_t completion_code, uint32_t length,
-				       struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = command;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_read_write_file_by_type_memory_resp *response =
-	    (struct pldm_read_write_file_by_type_memory_resp *)msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->length = htole32(length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_rw_file_by_type_memory_req(uint8_t instance_id, uint8_t command,
-				      uint16_t file_type, uint32_t file_handle,
-				      uint32_t offset, uint32_t length,
-				      uint64_t address, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = command;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_read_write_file_by_type_memory_req *req =
-	    (struct pldm_read_write_file_by_type_memory_req *)msg->payload;
-	req->file_type = htole16(file_type);
-	req->file_handle = htole32(file_handle);
-	req->offset = htole32(offset);
-	req->length = htole32(length);
-	req->address = htole64(address);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_rw_file_by_type_memory_resp(const struct pldm_msg *msg,
-				       size_t payload_length,
-				       uint8_t *completion_code,
-				       uint32_t *length)
-{
-	if (msg == NULL || length == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_RW_FILE_BY_TYPE_MEM_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_read_write_file_by_type_memory_resp *response =
-	    (struct pldm_read_write_file_by_type_memory_resp *)msg->payload;
-	*completion_code = response->completion_code;
-	if (*completion_code == PLDM_SUCCESS) {
-		*length = le32toh(response->length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_new_file_req(const struct pldm_msg *msg, size_t payload_length,
-			uint16_t *file_type, uint32_t *file_handle,
-			uint64_t *length)
-{
-	if (msg == NULL || file_type == NULL || file_handle == NULL ||
-	    length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_NEW_FILE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_new_file_req *request =
-	    (struct pldm_new_file_req *)msg->payload;
-	*file_type = le16toh(request->file_type);
-	*file_handle = le32toh(request->file_handle);
-	*length = le64toh(request->length);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_new_file_resp(uint8_t instance_id, uint8_t completion_code,
-			 struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_NEW_FILE_AVAILABLE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_new_file_resp *response =
-	    (struct pldm_new_file_resp *)msg->payload;
-	response->completion_code = completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_new_file_req(uint8_t instance_id, uint16_t file_type,
-			uint32_t file_handle, uint64_t length,
-			struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_NEW_FILE_AVAILABLE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_new_file_req *req =
-	    (struct pldm_new_file_req *)msg->payload;
-	req->file_type = htole16(file_type);
-	req->file_handle = htole32(file_handle);
-	req->length = htole64(length);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_new_file_resp(const struct pldm_msg *msg, size_t payload_length,
-			 uint8_t *completion_code)
-{
-	if (msg == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_NEW_FILE_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_new_file_resp *response =
-	    (struct pldm_new_file_resp *)msg->payload;
-	*completion_code = response->completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_rw_file_by_type_req(const struct pldm_msg *msg,
-			       size_t payload_length, uint16_t *file_type,
-			       uint32_t *file_handle, uint32_t *offset,
-			       uint32_t *length)
-{
-	if (msg == NULL || file_type == NULL || file_handle == NULL ||
-	    offset == NULL || length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length < PLDM_RW_FILE_BY_TYPE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_read_write_file_by_type_req *request =
-	    (struct pldm_read_write_file_by_type_req *)msg->payload;
-	*file_type = le16toh(request->file_type);
-	*file_handle = le32toh(request->file_handle);
-	*offset = le32toh(request->offset);
-	*length = le32toh(request->length);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_rw_file_by_type_resp(uint8_t instance_id, uint8_t command,
-				uint8_t completion_code, uint32_t length,
-				struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (command != PLDM_READ_FILE_BY_TYPE &&
-	    command != PLDM_WRITE_FILE_BY_TYPE) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = command;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_read_write_file_by_type_resp *response =
-	    (struct pldm_read_write_file_by_type_resp *)msg->payload;
-	response->completion_code = completion_code;
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->length = htole32(length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_rw_file_by_type_req(uint8_t instance_id, uint8_t command,
-			       uint16_t file_type, uint32_t file_handle,
-			       uint32_t offset, uint32_t length,
-			       struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (command != PLDM_READ_FILE_BY_TYPE &&
-	    command != PLDM_WRITE_FILE_BY_TYPE) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = command;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_read_write_file_by_type_req *req =
-	    (struct pldm_read_write_file_by_type_req *)msg->payload;
-	req->file_type = htole16(file_type);
-	req->file_handle = htole32(file_handle);
-	req->offset = htole32(offset);
-	req->length = htole32(length);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_rw_file_by_type_resp(const struct pldm_msg *msg,
-				size_t payload_length, uint8_t *completion_code,
-				uint32_t *length)
-{
-	if (msg == NULL || length == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_RW_FILE_BY_TYPE_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_read_write_file_by_type_resp *response =
-	    (struct pldm_read_write_file_by_type_resp *)msg->payload;
-	*completion_code = response->completion_code;
-	if (*completion_code == PLDM_SUCCESS) {
-		*length = le32toh(response->length);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_file_ack_req(const struct pldm_msg *msg, size_t payload_length,
-			uint16_t *file_type, uint32_t *file_handle,
-			uint8_t *file_status)
-{
-	if (msg == NULL || file_type == NULL || file_handle == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_FILE_ACK_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_file_ack_req *request =
-	    (struct pldm_file_ack_req *)msg->payload;
-	*file_type = le16toh(request->file_type);
-	*file_handle = le32toh(request->file_handle);
-	*file_status = request->file_status;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_file_ack_resp(uint8_t instance_id, uint8_t completion_code,
-			 struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_FILE_ACK;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_file_ack_resp *response =
-	    (struct pldm_file_ack_resp *)msg->payload;
-	response->completion_code = completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_file_ack_req(uint8_t instance_id, uint16_t file_type,
-			uint32_t file_handle, uint8_t file_status,
-			struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_FILE_ACK;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_file_ack_req *req =
-	    (struct pldm_file_ack_req *)msg->payload;
-	req->file_type = htole16(file_type);
-	req->file_handle = htole32(file_handle);
-	req->file_status = file_status;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_file_ack_resp(const struct pldm_msg *msg, size_t payload_length,
-			 uint8_t *completion_code)
-{
-	if (msg == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_FILE_ACK_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_file_ack_resp *response =
-	    (struct pldm_file_ack_resp *)msg->payload;
-	*completion_code = response->completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_FILE_ACK_WITH_META_DATA;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_file_ack_with_meta_data_req *req =
-	    (struct pldm_file_ack_with_meta_data_req *)msg->payload;
-	req->file_type = htole16(file_type);
-	req->file_handle = htole32(file_handle);
-	req->file_status = file_status;
-	req->file_meta_data_1 = htole32(file_meta_data_1);
-	req->file_meta_data_2 = htole32(file_meta_data_2);
-	req->file_meta_data_3 = htole32(file_meta_data_3);
-	req->file_meta_data_4 = htole32(file_meta_data_4);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_file_ack_with_meta_data_resp(const struct pldm_msg *msg,
-					size_t payload_length,
-					uint8_t *completion_code)
-{
-	if (msg == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_file_ack_with_meta_data_resp *response =
-	    (struct pldm_file_ack_with_meta_data_resp *)msg->payload;
-	*completion_code = response->completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || file_type == NULL || file_handle == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_FILE_ACK_WITH_META_DATA_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_file_ack_with_meta_data_req *request =
-	    (struct pldm_file_ack_with_meta_data_req *)msg->payload;
-	*file_type = le16toh(request->file_type);
-	*file_handle = le32toh(request->file_handle);
-	*file_status = request->file_status;
-	*file_meta_data_1 = le32toh(request->file_meta_data_1);
-	*file_meta_data_2 = le32toh(request->file_meta_data_2);
-	*file_meta_data_3 = le32toh(request->file_meta_data_3);
-	*file_meta_data_4 = le32toh(request->file_meta_data_4);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_file_ack_with_meta_data_resp(uint8_t instance_id,
-					uint8_t completion_code,
-					struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_FILE_ACK_WITH_META_DATA;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_file_ack_with_meta_data_resp *response =
-	    (struct pldm_file_ack_with_meta_data_resp *)msg->payload;
-	response->completion_code = completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_new_file_with_metadata_req *req =
-	    (struct pldm_new_file_with_metadata_req *)msg->payload;
-	req->file_type = htole16(file_type);
-	req->file_handle = htole32(file_handle);
-	req->length = htole64(length);
-	req->file_meta_data_1 = htole32(file_meta_data_1);
-	req->file_meta_data_2 = htole32(file_meta_data_2);
-	req->file_meta_data_3 = htole32(file_meta_data_3);
-	req->file_meta_data_4 = htole32(file_meta_data_4);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_new_file_with_metadata_resp(const struct pldm_msg *msg,
-				       size_t payload_length,
-				       uint8_t *completion_code)
-{
-	if (msg == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length !=
-	    PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_new_file_with_metadata_resp *response =
-	    (struct pldm_new_file_with_metadata_resp *)msg->payload;
-
-	*completion_code = msg->payload[0];
-	if (*completion_code == PLDM_SUCCESS) {
-		*completion_code = response->completion_code;
-	}
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || file_type == NULL || file_handle == NULL ||
-	    length == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length !=
-	    PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_new_file_with_metadata_req *request =
-	    (struct pldm_new_file_with_metadata_req *)msg->payload;
-	*file_type = le16toh(request->file_type);
-	*file_handle = le32toh(request->file_handle);
-	*length = le64toh(request->length);
-	*file_meta_data_1 = le32toh(request->file_meta_data_1);
-	*file_meta_data_2 = le32toh(request->file_meta_data_2);
-	*file_meta_data_3 = le32toh(request->file_meta_data_3);
-	*file_meta_data_4 = le32toh(request->file_meta_data_4);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_new_file_with_metadata_resp(uint8_t instance_id,
-				       uint8_t completion_code,
-				       struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_new_file_with_metadata_resp *response =
-	    (struct pldm_new_file_with_metadata_resp *)msg->payload;
-
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->completion_code = completion_code;
-	}
-
-	return PLDM_SUCCESS;
-}
diff --git a/subprojects/libpldm/src/oem/ibm/host.c b/subprojects/libpldm/src/oem/ibm/host.c
deleted file mode 100644
index d557a41..0000000
--- a/subprojects/libpldm/src/oem/ibm/host.c
+++ /dev/null
@@ -1,106 +0,0 @@
-#include <endian.h>
-#include <string.h>
-
-#include "libpldm/host.h"
-
-int encode_get_alert_status_req(uint8_t instance_id, uint8_t version_id,
-				struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if (payload_length != PLDM_GET_ALERT_STATUS_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_HOST_GET_ALERT_STATUS;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	msg->payload[0] = version_id;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_alert_status_resp(const struct pldm_msg *msg,
-				 size_t payload_length,
-				 uint8_t *completion_code, uint32_t *rack_entry,
-				 uint32_t *pri_cec_node)
-{
-	if (msg == NULL || completion_code == NULL || rack_entry == NULL ||
-	    pri_cec_node == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length != PLDM_GET_ALERT_STATUS_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_alert_status_resp *response =
-	    (struct pldm_get_alert_status_resp *)msg->payload;
-
-	*rack_entry = le32toh(response->rack_entry);
-	*pri_cec_node = le32toh(response->pri_cec_node);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_alert_status_req(const struct pldm_msg *msg,
-				size_t payload_length, uint8_t *version_id)
-{
-	if (msg == NULL || version_id == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_ALERT_STATUS_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	*version_id = msg->payload[0];
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_alert_status_resp(uint8_t instance_id, uint8_t completion_code,
-				 uint32_t rack_entry, uint32_t pri_cec_node,
-				 struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if (payload_length != PLDM_GET_ALERT_STATUS_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_OEM;
-	header.command = PLDM_HOST_GET_ALERT_STATUS;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_alert_status_resp *response =
-	    (struct pldm_get_alert_status_resp *)msg->payload;
-
-	response->completion_code = completion_code;
-	response->rack_entry = htole32(rack_entry);
-	response->pri_cec_node = htole32(pri_cec_node);
-
-	return PLDM_SUCCESS;
-}
diff --git a/subprojects/libpldm/src/oem/ibm/meson.build b/subprojects/libpldm/src/oem/ibm/meson.build
deleted file mode 100644
index 04bb24f..0000000
--- a/subprojects/libpldm/src/oem/ibm/meson.build
+++ /dev/null
@@ -1,5 +0,0 @@
-libpldm_sources += files(
-  'file_io.c',
-  'host.c',
-  'platform.c'
-  )
diff --git a/subprojects/libpldm/src/oem/ibm/platform.c b/subprojects/libpldm/src/oem/ibm/platform.c
deleted file mode 100644
index 15e9463..0000000
--- a/subprojects/libpldm/src/oem/ibm/platform.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "libpldm/platform.h"
-#include "libpldm/platform_oem_ibm.h"
-#include <string.h>
-
-int encode_bios_attribute_update_event_req(uint8_t instance_id,
-					   uint8_t format_version, uint8_t tid,
-					   uint8_t num_handles,
-					   const uint8_t *list_of_handles,
-					   size_t payload_length,
-					   struct pldm_msg *msg)
-{
-	if (format_version != 1) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (msg == NULL || list_of_handles == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (num_handles == 0) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length !=
-	    (PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES + sizeof(num_handles) +
-	     (num_handles * sizeof(uint16_t)))) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_PLATFORM_EVENT_MESSAGE;
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_bios_attribute_update_event_req *request =
-	    (struct pldm_bios_attribute_update_event_req *)msg->payload;
-	request->format_version = format_version;
-	request->tid = tid;
-	request->event_class = PLDM_EVENT_TYPE_OEM_EVENT_BIOS_ATTRIBUTE_UPDATE;
-	request->num_handles = num_handles;
-	memcpy(request->bios_attribute_handles, list_of_handles,
-	       num_handles * sizeof(uint16_t));
-
-	return PLDM_SUCCESS;
-}
diff --git a/subprojects/libpldm/src/pdr.c b/subprojects/libpldm/src/pdr.c
deleted file mode 100644
index b057e3d..0000000
--- a/subprojects/libpldm/src/pdr.c
+++ /dev/null
@@ -1,971 +0,0 @@
-#include "pdr.h"
-#include "platform.h"
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-typedef struct pldm_pdr_record {
-	uint32_t record_handle;
-	uint32_t size;
-	uint8_t *data;
-	struct pldm_pdr_record *next;
-	bool is_remote;
-	uint16_t terminus_handle;
-} pldm_pdr_record;
-
-typedef struct pldm_pdr {
-	uint32_t record_count;
-	uint32_t size;
-	pldm_pdr_record *first;
-	pldm_pdr_record *last;
-} pldm_pdr;
-
-static inline uint32_t get_next_record_handle(const pldm_pdr *repo,
-					      const pldm_pdr_record *record)
-{
-	assert(repo != NULL);
-	assert(record != NULL);
-
-	if (record == repo->last) {
-		return 0;
-	}
-	return record->next->record_handle;
-}
-
-static void add_record(pldm_pdr *repo, pldm_pdr_record *record)
-{
-	assert(repo != NULL);
-	assert(record != NULL);
-
-	if (repo->first == NULL) {
-		assert(repo->last == NULL);
-		repo->first = record;
-		repo->last = record;
-	} else {
-		repo->last->next = record;
-		repo->last = record;
-	}
-	repo->size += record->size;
-	++repo->record_count;
-}
-
-static inline uint32_t get_new_record_handle(const pldm_pdr *repo)
-{
-	assert(repo != NULL);
-	uint32_t last_used_hdl =
-	    repo->last != NULL ? repo->last->record_handle : 0;
-	assert(last_used_hdl != UINT32_MAX);
-
-	return last_used_hdl + 1;
-}
-
-static pldm_pdr_record *make_new_record(const pldm_pdr *repo,
-					const uint8_t *data, uint32_t size,
-					uint32_t record_handle, bool is_remote,
-					uint16_t terminus_handle)
-{
-	assert(repo != NULL);
-	assert(size != 0);
-
-	pldm_pdr_record *record = malloc(sizeof(pldm_pdr_record));
-	assert(record != NULL);
-	record->record_handle =
-	    record_handle == 0 ? get_new_record_handle(repo) : record_handle;
-	record->size = size;
-	record->is_remote = is_remote;
-	record->terminus_handle = terminus_handle;
-	if (data != NULL) {
-		record->data = malloc(size);
-		assert(record->data != NULL);
-		memcpy(record->data, data, size);
-		/* If record handle is 0, that is an indication for this API to
-		 * compute a new handle. For that reason, the computed handle
-		 * needs to be populated in the PDR header. For a case where the
-		 * caller supplied the record handle, it would exist in the
-		 * header already.
-		 */
-		if (!record_handle) {
-			struct pldm_pdr_hdr *hdr =
-			    (struct pldm_pdr_hdr *)(record->data);
-			hdr->record_handle = htole32(record->record_handle);
-		}
-	}
-	record->next = NULL;
-
-	return record;
-}
-
-uint32_t pldm_pdr_add(pldm_pdr *repo, const uint8_t *data, uint32_t size,
-		      uint32_t record_handle, bool is_remote,
-		      uint16_t terminus_handle)
-{
-	assert(size != 0);
-	assert(data != NULL);
-
-	pldm_pdr_record *record = make_new_record(
-	    repo, data, size, record_handle, is_remote, terminus_handle);
-	add_record(repo, record);
-
-	return record->record_handle;
-}
-
-pldm_pdr *pldm_pdr_init()
-{
-	pldm_pdr *repo = malloc(sizeof(pldm_pdr));
-	assert(repo != NULL);
-	repo->record_count = 0;
-	repo->size = 0;
-	repo->first = NULL;
-	repo->last = NULL;
-
-	return repo;
-}
-
-void pldm_pdr_destroy(pldm_pdr *repo)
-{
-	assert(repo != NULL);
-
-	pldm_pdr_record *record = repo->first;
-	while (record != NULL) {
-		pldm_pdr_record *next = record->next;
-		if (record->data) {
-			free(record->data);
-			record->data = NULL;
-		}
-		free(record);
-		record = next;
-	}
-	free(repo);
-}
-
-const pldm_pdr_record *pldm_pdr_find_record(const pldm_pdr *repo,
-					    uint32_t record_handle,
-					    uint8_t **data, uint32_t *size,
-					    uint32_t *next_record_handle)
-{
-	assert(repo != NULL);
-	assert(data != NULL);
-	assert(size != NULL);
-	assert(next_record_handle != NULL);
-
-	if (!record_handle && (repo->first != NULL)) {
-		record_handle = repo->first->record_handle;
-	}
-	pldm_pdr_record *record = repo->first;
-	while (record != NULL) {
-		if (record->record_handle == record_handle) {
-			*size = record->size;
-			*data = record->data;
-			*next_record_handle =
-			    get_next_record_handle(repo, record);
-			return record;
-		}
-		record = record->next;
-	}
-
-	*size = 0;
-	*next_record_handle = 0;
-	return NULL;
-}
-
-const pldm_pdr_record *
-pldm_pdr_get_next_record(const pldm_pdr *repo,
-			 const pldm_pdr_record *curr_record, uint8_t **data,
-			 uint32_t *size, uint32_t *next_record_handle)
-{
-	assert(repo != NULL);
-	assert(curr_record != NULL);
-	assert(data != NULL);
-	assert(size != NULL);
-	assert(next_record_handle != NULL);
-
-	if (curr_record == repo->last) {
-		*data = NULL;
-		*size = 0;
-		*next_record_handle = get_next_record_handle(repo, curr_record);
-		return NULL;
-	}
-
-	*next_record_handle = get_next_record_handle(repo, curr_record->next);
-	*data = curr_record->next->data;
-	*size = curr_record->next->size;
-	return curr_record->next;
-}
-
-const pldm_pdr_record *
-pldm_pdr_find_record_by_type(const pldm_pdr *repo, uint8_t pdr_type,
-			     const pldm_pdr_record *curr_record, uint8_t **data,
-			     uint32_t *size)
-{
-	assert(repo != NULL);
-
-	pldm_pdr_record *record = repo->first;
-	if (curr_record != NULL) {
-		record = curr_record->next;
-	}
-	while (record != NULL) {
-		struct pldm_pdr_hdr *hdr = (struct pldm_pdr_hdr *)record->data;
-		if (hdr->type == pdr_type) {
-			if (data && size) {
-				*size = record->size;
-				*data = record->data;
-			}
-			return record;
-		}
-		record = record->next;
-	}
-
-	if (size) {
-		*size = 0;
-	}
-	return NULL;
-}
-
-uint32_t pldm_pdr_get_record_count(const pldm_pdr *repo)
-{
-	assert(repo != NULL);
-
-	return repo->record_count;
-}
-
-uint32_t pldm_pdr_get_repo_size(const pldm_pdr *repo)
-{
-	assert(repo != NULL);
-
-	return repo->size;
-}
-
-uint32_t pldm_pdr_get_record_handle(const pldm_pdr *repo,
-				    const pldm_pdr_record *record)
-{
-	assert(repo != NULL);
-	assert(record != NULL);
-
-	return record->record_handle;
-}
-
-inline bool pldm_pdr_record_is_remote(const pldm_pdr_record *record)
-{
-	assert(record != NULL);
-
-	return record->is_remote;
-}
-
-uint32_t pldm_pdr_add_fru_record_set(pldm_pdr *repo, uint16_t terminus_handle,
-				     uint16_t fru_rsi, uint16_t entity_type,
-				     uint16_t entity_instance_num,
-				     uint16_t container_id,
-				     uint32_t bmc_record_handle)
-{
-	uint32_t size = sizeof(struct pldm_pdr_hdr) +
-			sizeof(struct pldm_pdr_fru_record_set);
-	uint8_t data[size];
-
-	struct pldm_pdr_hdr *hdr = (struct pldm_pdr_hdr *)&data;
-	hdr->version = 1;
-	hdr->record_handle = bmc_record_handle;
-	hdr->type = PLDM_PDR_FRU_RECORD_SET;
-	hdr->record_change_num = 0;
-	hdr->length = htole16(sizeof(struct pldm_pdr_fru_record_set));
-	struct pldm_pdr_fru_record_set *fru =
-	    (struct pldm_pdr_fru_record_set *)((uint8_t *)hdr +
-					       sizeof(struct pldm_pdr_hdr));
-	fru->terminus_handle = htole16(terminus_handle);
-	fru->fru_rsi = htole16(fru_rsi);
-	fru->entity_type = htole16(entity_type);
-	fru->entity_instance_num = htole16(entity_instance_num);
-	fru->container_id = htole16(container_id);
-
-	return pldm_pdr_add(repo, data, size, bmc_record_handle, false,
-			    terminus_handle);
-}
-
-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)
-{
-	assert(terminus_handle != NULL);
-	assert(entity_type != NULL);
-	assert(entity_instance_num != NULL);
-	assert(container_id != NULL);
-
-	uint8_t *data = NULL;
-	uint32_t size = 0;
-	const pldm_pdr_record *curr_record = pldm_pdr_find_record_by_type(
-	    repo, PLDM_PDR_FRU_RECORD_SET, NULL, &data, &size);
-	while (curr_record != NULL) {
-		struct pldm_pdr_fru_record_set *fru =
-		    (struct pldm_pdr_fru_record_set
-			 *)(data + sizeof(struct pldm_pdr_hdr));
-		if (fru->fru_rsi == htole16(fru_rsi)) {
-			*terminus_handle = le16toh(fru->terminus_handle);
-			*entity_type = le16toh(fru->entity_type);
-			*entity_instance_num =
-			    le16toh(fru->entity_instance_num);
-			*container_id = le16toh(fru->container_id);
-			return curr_record;
-		}
-		data = NULL;
-		curr_record = pldm_pdr_find_record_by_type(
-		    repo, PLDM_PDR_FRU_RECORD_SET, curr_record, &data, &size);
-	}
-
-	*terminus_handle = 0;
-	*entity_type = 0;
-	*entity_instance_num = 0;
-	*container_id = 0;
-
-	return NULL;
-}
-
-void pldm_pdr_update_TL_pdr(const pldm_pdr *repo, uint16_t terminusHandle,
-			    uint8_t tid, uint8_t tlEid, bool validBit)
-{
-	uint8_t *outData = NULL;
-	uint32_t size = 0;
-	const pldm_pdr_record *record;
-	record = pldm_pdr_find_record_by_type(repo, PLDM_TERMINUS_LOCATOR_PDR,
-					      NULL, &outData, &size);
-
-	do {
-		if (record != NULL) {
-			struct pldm_terminus_locator_pdr *pdr =
-			    (struct pldm_terminus_locator_pdr *)outData;
-			struct pldm_terminus_locator_type_mctp_eid *value =
-			    (struct pldm_terminus_locator_type_mctp_eid *)
-				pdr->terminus_locator_value;
-			if (pdr->terminus_handle == terminusHandle &&
-			    pdr->tid == tid && value->eid == tlEid) {
-				pdr->validity = validBit;
-				break;
-			}
-		}
-		record = pldm_pdr_find_record_by_type(
-		    repo, PLDM_TERMINUS_LOCATOR_PDR, record, &outData, &size);
-	} while (record);
-}
-
-typedef struct pldm_entity_association_tree {
-	pldm_entity_node *root;
-	uint16_t last_used_container_id;
-} pldm_entity_association_tree;
-
-typedef struct pldm_entity_node {
-	pldm_entity entity;
-	pldm_entity parent;
-	pldm_entity_node *first_child;
-	pldm_entity_node *next_sibling;
-	uint8_t association_type;
-} pldm_entity_node;
-
-static inline uint16_t next_container_id(pldm_entity_association_tree *tree)
-{
-	assert(tree != NULL);
-	assert(tree->last_used_container_id != UINT16_MAX);
-
-	return ++tree->last_used_container_id;
-}
-
-pldm_entity pldm_entity_extract(pldm_entity_node *node)
-{
-	assert(node != NULL);
-
-	return node->entity;
-}
-
-pldm_entity_association_tree *pldm_entity_association_tree_init()
-{
-	pldm_entity_association_tree *tree =
-	    malloc(sizeof(pldm_entity_association_tree));
-	assert(tree != NULL);
-	tree->root = NULL;
-	tree->last_used_container_id = 0;
-
-	return tree;
-}
-
-static pldm_entity_node *find_insertion_at(pldm_entity_node *start,
-					   uint16_t entity_type)
-{
-	assert(start != NULL);
-
-	/* Insert after the the last node that matches the input entity type, or
-	 * at the end if no such match occurrs
-	 */
-	while (start->next_sibling != NULL) {
-		uint16_t this_type = start->entity.entity_type;
-		pldm_entity_node *next = start->next_sibling;
-		if (this_type == entity_type &&
-		    (this_type != next->entity.entity_type)) {
-			break;
-		}
-		start = start->next_sibling;
-	}
-
-	return start;
-}
-
-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)
-{
-	assert(tree != NULL);
-	assert(entity != NULL);
-
-	if (entity_instance_number != 0xFFFF && parent != NULL) {
-		pldm_entity node;
-		node.entity_type = entity->entity_type;
-		node.entity_instance_num = entity_instance_number;
-		if (pldm_is_current_parent_child(parent, &node)) {
-			return NULL;
-		}
-	}
-
-	assert(association_type == PLDM_ENTITY_ASSOCIAION_PHYSICAL ||
-	       association_type == PLDM_ENTITY_ASSOCIAION_LOGICAL);
-	pldm_entity_node *node = malloc(sizeof(pldm_entity_node));
-	assert(node != NULL);
-	node->first_child = NULL;
-	node->next_sibling = NULL;
-	node->parent.entity_type = 0;
-	node->parent.entity_instance_num = 0;
-	node->parent.entity_container_id = 0;
-	node->entity.entity_type = entity->entity_type;
-	node->entity.entity_instance_num =
-	    entity_instance_number != 0xFFFF ? entity_instance_number : 1;
-	node->association_type = association_type;
-
-	if (tree->root == NULL) {
-		assert(parent == NULL);
-		tree->root = node;
-		/* container_id 0 here indicates this is the top-most entry */
-		node->entity.entity_container_id = 0;
-	} else if (parent != NULL && parent->first_child == NULL) {
-		parent->first_child = node;
-		node->parent = parent->entity;
-		node->entity.entity_container_id = next_container_id(tree);
-	} else {
-		pldm_entity_node *start =
-		    parent == NULL ? tree->root : parent->first_child;
-		pldm_entity_node *prev =
-		    find_insertion_at(start, entity->entity_type);
-		assert(prev != NULL);
-		pldm_entity_node *next = prev->next_sibling;
-		if (prev->entity.entity_type == entity->entity_type) {
-			assert(prev->entity.entity_instance_num != UINT16_MAX);
-			node->entity.entity_instance_num =
-			    entity_instance_number != 0xFFFF
-				? entity_instance_number
-				: prev->entity.entity_instance_num + 1;
-		}
-		prev->next_sibling = node;
-		node->parent = prev->parent;
-		node->next_sibling = next;
-		node->entity.entity_container_id =
-		    prev->entity.entity_container_id;
-	}
-	entity->entity_instance_num = node->entity.entity_instance_num;
-	entity->entity_container_id = node->entity.entity_container_id;
-
-	return node;
-}
-
-static void get_num_nodes(pldm_entity_node *node, size_t *num)
-{
-	if (node == NULL) {
-		return;
-	}
-
-	++(*num);
-	get_num_nodes(node->next_sibling, num);
-	get_num_nodes(node->first_child, num);
-}
-
-static void entity_association_tree_visit(pldm_entity_node *node,
-					  pldm_entity *entities, size_t *index)
-{
-	if (node == NULL) {
-		return;
-	}
-
-	pldm_entity *entity = &entities[*index];
-	++(*index);
-	entity->entity_type = node->entity.entity_type;
-	entity->entity_instance_num = node->entity.entity_instance_num;
-	entity->entity_container_id = node->entity.entity_container_id;
-
-	entity_association_tree_visit(node->next_sibling, entities, index);
-	entity_association_tree_visit(node->first_child, entities, index);
-}
-
-void pldm_entity_association_tree_visit(pldm_entity_association_tree *tree,
-					pldm_entity **entities, size_t *size)
-{
-	assert(tree != NULL);
-
-	*size = 0;
-	if (tree->root == NULL) {
-		return;
-	}
-
-	get_num_nodes(tree->root, size);
-	*entities = malloc(*size * sizeof(pldm_entity));
-	size_t index = 0;
-	entity_association_tree_visit(tree->root, *entities, &index);
-}
-
-static void entity_association_tree_destroy(pldm_entity_node *node)
-{
-	if (node == NULL) {
-		return;
-	}
-
-	entity_association_tree_destroy(node->next_sibling);
-	entity_association_tree_destroy(node->first_child);
-	free(node);
-}
-
-void pldm_entity_association_tree_destroy(pldm_entity_association_tree *tree)
-{
-	assert(tree != NULL);
-
-	entity_association_tree_destroy(tree->root);
-	free(tree);
-}
-
-inline bool pldm_entity_is_node_parent(pldm_entity_node *node)
-{
-	assert(node != NULL);
-
-	return node->first_child != NULL;
-}
-
-inline pldm_entity pldm_entity_get_parent(pldm_entity_node *node)
-{
-	assert(node != NULL);
-
-	return node->parent;
-}
-
-inline bool pldm_entity_is_exist_parent(pldm_entity_node *node)
-{
-	assert(node != NULL);
-
-	if (node->parent.entity_type == 0 &&
-	    node->parent.entity_instance_num == 0 &&
-	    node->parent.entity_container_id == 0) {
-		return false;
-	}
-
-	return true;
-}
-
-uint8_t pldm_entity_get_num_children(pldm_entity_node *node,
-				     uint8_t association_type)
-{
-	assert(node != NULL);
-	assert(association_type == PLDM_ENTITY_ASSOCIAION_PHYSICAL ||
-	       association_type == PLDM_ENTITY_ASSOCIAION_LOGICAL);
-
-	size_t count = 0;
-	pldm_entity_node *curr = node->first_child;
-	while (curr != NULL) {
-		if (curr->association_type == association_type) {
-			++count;
-		}
-		curr = curr->next_sibling;
-	}
-
-	assert(count < UINT8_MAX);
-	return count;
-}
-
-bool pldm_is_current_parent_child(pldm_entity_node *parent, pldm_entity *node)
-{
-	assert(parent != NULL);
-	assert(node != NULL);
-
-	pldm_entity_node *curr = parent->first_child;
-	while (curr != NULL) {
-		if (node->entity_type == curr->entity.entity_type &&
-		    node->entity_instance_num ==
-			curr->entity.entity_instance_num) {
-
-			return true;
-		}
-		curr = curr->next_sibling;
-	}
-
-	return false;
-}
-
-static void _entity_association_pdr_add_entry(pldm_entity_node *curr,
-					      pldm_pdr *repo, uint16_t size,
-					      uint8_t contained_count,
-					      uint8_t association_type,
-					      bool is_remote,
-					      uint16_t terminus_handle)
-{
-	uint8_t pdr[size];
-	uint8_t *start = pdr;
-
-	struct pldm_pdr_hdr *hdr = (struct pldm_pdr_hdr *)start;
-	hdr->version = 1;
-	hdr->record_handle = 0;
-	hdr->type = PLDM_PDR_ENTITY_ASSOCIATION;
-	hdr->record_change_num = 0;
-	hdr->length = htole16(size - sizeof(struct pldm_pdr_hdr));
-	start += sizeof(struct pldm_pdr_hdr);
-
-	uint16_t *container_id = (uint16_t *)start;
-	*container_id = htole16(curr->first_child->entity.entity_container_id);
-	start += sizeof(uint16_t);
-	*start = association_type;
-	start += sizeof(uint8_t);
-
-	pldm_entity *entity = (pldm_entity *)start;
-	entity->entity_type = htole16(curr->entity.entity_type);
-	entity->entity_instance_num = htole16(curr->entity.entity_instance_num);
-	entity->entity_container_id = htole16(curr->entity.entity_container_id);
-	start += sizeof(pldm_entity);
-
-	*start = contained_count;
-	start += sizeof(uint8_t);
-
-	pldm_entity_node *node = curr->first_child;
-	while (node != NULL) {
-		if (node->association_type == association_type) {
-			pldm_entity *entity = (pldm_entity *)start;
-			entity->entity_type = htole16(node->entity.entity_type);
-			entity->entity_instance_num =
-			    htole16(node->entity.entity_instance_num);
-			entity->entity_container_id =
-			    htole16(node->entity.entity_container_id);
-			start += sizeof(pldm_entity);
-		}
-		node = node->next_sibling;
-	}
-
-	pldm_pdr_add(repo, pdr, size, 0, is_remote, terminus_handle);
-}
-
-static void entity_association_pdr_add_entry(pldm_entity_node *curr,
-					     pldm_pdr *repo, bool is_remote,
-					     uint16_t terminus_handle)
-{
-	uint8_t num_logical_children =
-	    pldm_entity_get_num_children(curr, PLDM_ENTITY_ASSOCIAION_LOGICAL);
-	uint8_t num_physical_children =
-	    pldm_entity_get_num_children(curr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-
-	if (num_logical_children) {
-		uint16_t logical_pdr_size =
-		    sizeof(struct pldm_pdr_hdr) + sizeof(uint16_t) +
-		    sizeof(uint8_t) + sizeof(pldm_entity) + sizeof(uint8_t) +
-		    (num_logical_children * sizeof(pldm_entity));
-		_entity_association_pdr_add_entry(
-		    curr, repo, logical_pdr_size, num_logical_children,
-		    PLDM_ENTITY_ASSOCIAION_LOGICAL, is_remote, terminus_handle);
-	}
-
-	if (num_physical_children) {
-		uint16_t physical_pdr_size =
-		    sizeof(struct pldm_pdr_hdr) + sizeof(uint16_t) +
-		    sizeof(uint8_t) + sizeof(pldm_entity) + sizeof(uint8_t) +
-		    (num_physical_children * sizeof(pldm_entity));
-		_entity_association_pdr_add_entry(
-		    curr, repo, physical_pdr_size, num_physical_children,
-		    PLDM_ENTITY_ASSOCIAION_PHYSICAL, is_remote,
-		    terminus_handle);
-	}
-}
-
-bool is_present(pldm_entity entity, pldm_entity **entities, size_t num_entities)
-{
-	if (entities == NULL || num_entities == 0) {
-		return true;
-	}
-	size_t i = 0;
-	while (i < num_entities) {
-		if ((*entities + i)->entity_type == entity.entity_type) {
-			return true;
-		}
-		i++;
-	}
-	return false;
-}
-
-static void entity_association_pdr_add(pldm_entity_node *curr, pldm_pdr *repo,
-				       pldm_entity **entities,
-				       size_t num_entities, bool is_remote,
-				       uint16_t terminus_handle)
-{
-	if (curr == NULL) {
-		return;
-	}
-	bool to_add = true;
-	to_add = is_present(curr->entity, entities, num_entities);
-	if (to_add) {
-		entity_association_pdr_add_entry(curr, repo, is_remote,
-						 terminus_handle);
-	}
-	entity_association_pdr_add(curr->next_sibling, repo, entities,
-				   num_entities, is_remote, terminus_handle);
-	entity_association_pdr_add(curr->first_child, repo, entities,
-				   num_entities, is_remote, terminus_handle);
-}
-
-void pldm_entity_association_pdr_add(pldm_entity_association_tree *tree,
-				     pldm_pdr *repo, bool is_remote,
-				     uint16_t terminus_handle)
-{
-	assert(tree != NULL);
-	assert(repo != NULL);
-
-	entity_association_pdr_add(tree->root, repo, NULL, 0, is_remote,
-				   terminus_handle);
-}
-
-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)
-{
-	assert(repo != NULL);
-
-	entity_association_pdr_add(node, repo, entities, num_entities,
-				   is_remote, terminus_handle);
-}
-
-void find_entity_ref_in_tree(pldm_entity_node *tree_node, pldm_entity entity,
-			     pldm_entity_node **node)
-{
-	if (tree_node == NULL) {
-		return;
-	}
-
-	if (tree_node->entity.entity_type == entity.entity_type &&
-	    tree_node->entity.entity_instance_num ==
-		entity.entity_instance_num) {
-		*node = tree_node;
-		return;
-	}
-
-	find_entity_ref_in_tree(tree_node->first_child, entity, node);
-	find_entity_ref_in_tree(tree_node->next_sibling, entity, node);
-}
-
-void pldm_find_entity_ref_in_tree(pldm_entity_association_tree *tree,
-				  pldm_entity entity, pldm_entity_node **node)
-{
-	assert(tree != NULL);
-	find_entity_ref_in_tree(tree->root, entity, node);
-}
-
-void pldm_pdr_remove_pdrs_by_terminus_handle(pldm_pdr *repo,
-					     uint16_t terminus_handle)
-{
-	assert(repo != NULL);
-	bool removed = false;
-
-	pldm_pdr_record *record = repo->first;
-	pldm_pdr_record *prev = NULL;
-	while (record != NULL) {
-		pldm_pdr_record *next = record->next;
-		if (record->terminus_handle == terminus_handle) {
-			if (repo->first == record) {
-				repo->first = next;
-			} else {
-				prev->next = next;
-			}
-			if (repo->last == record) {
-				repo->last = prev;
-			}
-			if (record->data) {
-				free(record->data);
-			}
-			--repo->record_count;
-			repo->size -= record->size;
-			free(record);
-			removed = true;
-		} else {
-			prev = record;
-		}
-		record = next;
-	}
-
-	if (removed == true) {
-		record = repo->first;
-		uint32_t record_handle = 0;
-		while (record != NULL) {
-			record->record_handle = ++record_handle;
-			if (record->data != NULL) {
-				struct pldm_pdr_hdr *hdr =
-				    (struct pldm_pdr_hdr *)(record->data);
-				hdr->record_handle =
-				    htole32(record->record_handle);
-			}
-			record = record->next;
-		}
-	}
-}
-void pldm_pdr_remove_remote_pdrs(pldm_pdr *repo)
-{
-	assert(repo != NULL);
-	bool removed = false;
-
-	pldm_pdr_record *record = repo->first;
-	pldm_pdr_record *prev = NULL;
-	while (record != NULL) {
-		pldm_pdr_record *next = record->next;
-		if (record->is_remote == true) {
-			if (repo->first == record) {
-				repo->first = next;
-			} else {
-				prev->next = next;
-			}
-			if (repo->last == record) {
-				repo->last = prev;
-			}
-			if (record->data) {
-				free(record->data);
-			}
-			--repo->record_count;
-			repo->size -= record->size;
-			free(record);
-			removed = true;
-		} else {
-			prev = record;
-		}
-		record = next;
-	}
-
-	if (removed == true) {
-		record = repo->first;
-		uint32_t record_handle = 0;
-		while (record != NULL) {
-			record->record_handle = ++record_handle;
-			if (record->data != NULL) {
-				struct pldm_pdr_hdr *hdr =
-				    (struct pldm_pdr_hdr *)(record->data);
-				hdr->record_handle =
-				    htole32(record->record_handle);
-			}
-			record = record->next;
-		}
-	}
-}
-
-void entity_association_tree_find(pldm_entity_node *node, pldm_entity *entity,
-				  pldm_entity_node **out)
-{
-	if (node == NULL) {
-		return;
-	}
-
-	if (node->entity.entity_type == entity->entity_type &&
-	    node->entity.entity_instance_num == entity->entity_instance_num) {
-		entity->entity_container_id = node->entity.entity_container_id;
-		*out = node;
-		return;
-	}
-
-	entity_association_tree_find(node->next_sibling, entity, out);
-	entity_association_tree_find(node->first_child, entity, out);
-}
-
-pldm_entity_node *
-pldm_entity_association_tree_find(pldm_entity_association_tree *tree,
-				  pldm_entity *entity)
-{
-	assert(tree != NULL);
-
-	pldm_entity_node *node = NULL;
-	entity_association_tree_find(tree->root, entity, &node);
-	return node;
-}
-
-static void entity_association_tree_copy(pldm_entity_node *org_node,
-					 pldm_entity_node **new_node)
-{
-	if (org_node == NULL) {
-		return;
-	}
-	*new_node = malloc(sizeof(pldm_entity_node));
-	(*new_node)->parent = org_node->parent;
-	(*new_node)->entity = org_node->entity;
-	(*new_node)->association_type = org_node->association_type;
-	(*new_node)->first_child = NULL;
-	(*new_node)->next_sibling = NULL;
-	entity_association_tree_copy(org_node->first_child,
-				     &((*new_node)->first_child));
-	entity_association_tree_copy(org_node->next_sibling,
-				     &((*new_node)->next_sibling));
-}
-
-void pldm_entity_association_tree_copy_root(
-    pldm_entity_association_tree *org_tree,
-    pldm_entity_association_tree *new_tree)
-{
-	new_tree->last_used_container_id = org_tree->last_used_container_id;
-	entity_association_tree_copy(org_tree->root, &(new_tree->root));
-}
-
-void pldm_entity_association_tree_destroy_root(
-    pldm_entity_association_tree *tree)
-{
-	assert(tree != NULL);
-	entity_association_tree_destroy(tree->root);
-	tree->last_used_container_id = 0;
-	tree->root = NULL;
-}
-
-bool pldm_is_empty_entity_assoc_tree(pldm_entity_association_tree *tree)
-{
-	return ((tree->root == NULL) ? true : false);
-}
-
-void pldm_entity_association_pdr_extract(const uint8_t *pdr, uint16_t pdr_len,
-					 size_t *num_entities,
-					 pldm_entity **entities)
-{
-	assert(pdr != NULL);
-	assert(pdr_len >= sizeof(struct pldm_pdr_hdr) +
-			      sizeof(struct pldm_pdr_entity_association));
-
-	struct pldm_pdr_hdr *hdr = (struct pldm_pdr_hdr *)pdr;
-	assert(hdr->type == PLDM_PDR_ENTITY_ASSOCIATION);
-
-	const uint8_t *start = (uint8_t *)pdr;
-	const uint8_t *end =
-	    start + sizeof(struct pldm_pdr_hdr) + le16toh(hdr->length);
-	start += sizeof(struct pldm_pdr_hdr);
-	struct pldm_pdr_entity_association *entity_association_pdr =
-	    (struct pldm_pdr_entity_association *)start;
-	*num_entities = entity_association_pdr->num_children + 1;
-	assert(*num_entities >= 2);
-	*entities = malloc(sizeof(pldm_entity) * *num_entities);
-	assert(*entities != NULL);
-	assert(start + sizeof(struct pldm_pdr_entity_association) +
-		   sizeof(pldm_entity) * (*num_entities - 2) ==
-	       end);
-	(*entities)->entity_type =
-	    le16toh(entity_association_pdr->container.entity_type);
-	(*entities)->entity_instance_num =
-	    le16toh(entity_association_pdr->container.entity_instance_num);
-	(*entities)->entity_container_id =
-	    le16toh(entity_association_pdr->container.entity_container_id);
-	pldm_entity *curr_entity = entity_association_pdr->children;
-	size_t i = 1;
-	while (i < *num_entities) {
-		(*entities + i)->entity_type =
-		    le16toh(curr_entity->entity_type);
-		(*entities + i)->entity_instance_num =
-		    le16toh(curr_entity->entity_instance_num);
-		(*entities + i)->entity_container_id =
-		    le16toh(curr_entity->entity_container_id);
-		++curr_entity;
-		++i;
-	}
-}
diff --git a/subprojects/libpldm/src/platform.c b/subprojects/libpldm/src/platform.c
deleted file mode 100644
index 8b83747..0000000
--- a/subprojects/libpldm/src/platform.c
+++ /dev/null
@@ -1,1703 +0,0 @@
-#include <endian.h>
-#include <string.h>
-
-#include "platform.h"
-
-int encode_state_effecter_pdr(
-    struct pldm_state_effecter_pdr *const effecter,
-    const size_t allocation_size,
-    const struct state_effecter_possible_states *const possible_states,
-    const size_t possible_states_size, size_t *const actual_size)
-{
-	// Encode possible states
-
-	size_t calculated_possible_states_size = 0;
-
-	{
-		char *states_ptr = (char *)possible_states;
-		char *const begin_states_ptr = states_ptr;
-
-		for (int i = 0; i < effecter->composite_effecter_count; ++i) {
-			struct state_effecter_possible_states *states =
-			    (struct state_effecter_possible_states *)states_ptr;
-
-			HTOLE16(states->state_set_id);
-
-			states_ptr +=
-			    (sizeof(*states) - sizeof(states->states) +
-			     states->possible_states_size);
-		}
-
-		calculated_possible_states_size = states_ptr - begin_states_ptr;
-	}
-
-	// Check lengths
-
-	if (possible_states_size != calculated_possible_states_size) {
-		*actual_size = 0;
-		return PLDM_ERROR;
-	}
-
-	*actual_size =
-	    (sizeof(struct pldm_state_effecter_pdr) + possible_states_size -
-	     sizeof(effecter->possible_states));
-
-	if (allocation_size < *actual_size) {
-		*actual_size = 0;
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	// Encode rest of PDR
-
-	effecter->hdr.version = 1;
-	effecter->hdr.type = PLDM_STATE_EFFECTER_PDR;
-	effecter->hdr.length = *actual_size - sizeof(struct pldm_pdr_hdr);
-
-	memcpy(effecter->possible_states, possible_states,
-	       possible_states_size);
-
-	// Convert effecter PDR body
-	HTOLE16(effecter->terminus_handle);
-	HTOLE16(effecter->effecter_id);
-	HTOLE16(effecter->entity_type);
-	HTOLE16(effecter->entity_instance);
-	HTOLE16(effecter->container_id);
-	HTOLE16(effecter->effecter_semantic_id);
-
-	// Convert header
-	HTOLE32(effecter->hdr.record_handle);
-	HTOLE16(effecter->hdr.record_change_num);
-	HTOLE16(effecter->hdr.length);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_state_sensor_pdr(
-    struct pldm_state_sensor_pdr *const sensor, const size_t allocation_size,
-    const struct state_sensor_possible_states *const possible_states,
-    const size_t possible_states_size, size_t *const actual_size)
-{
-	// Encode possible states
-
-	size_t calculated_possible_states_size = 0;
-
-	{
-		char *states_ptr = (char *)possible_states,
-		     *const begin_states_ptr = states_ptr;
-
-		for (int i = 0; i < sensor->composite_sensor_count; ++i) {
-			struct state_sensor_possible_states *states =
-			    (struct state_sensor_possible_states *)states_ptr;
-
-			HTOLE16(states->state_set_id);
-
-			states_ptr +=
-			    (sizeof(*states) - sizeof(states->states) +
-			     states->possible_states_size);
-		}
-
-		calculated_possible_states_size = states_ptr - begin_states_ptr;
-	}
-
-	// Check lengths
-
-	if (possible_states_size != calculated_possible_states_size) {
-		*actual_size = 0;
-		return PLDM_ERROR;
-	}
-
-	*actual_size = (sizeof(struct pldm_state_sensor_pdr) +
-			possible_states_size - sizeof(sensor->possible_states));
-
-	if (allocation_size < *actual_size) {
-		*actual_size = 0;
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	// Encode rest of PDR
-
-	sensor->hdr.version = 1;
-	sensor->hdr.type = PLDM_STATE_SENSOR_PDR;
-	sensor->hdr.length = *actual_size - sizeof(struct pldm_pdr_hdr);
-
-	memcpy(sensor->possible_states, possible_states, possible_states_size);
-
-	// Convert sensor PDR body
-	HTOLE16(sensor->terminus_handle);
-	HTOLE16(sensor->sensor_id);
-	HTOLE16(sensor->entity_type);
-	HTOLE16(sensor->entity_instance);
-	HTOLE16(sensor->container_id);
-
-	// Convert header
-	HTOLE32(sensor->hdr.record_handle);
-	HTOLE16(sensor->hdr.record_change_num);
-	HTOLE16(sensor->hdr.length);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_state_effecter_states_resp(uint8_t instance_id,
-					  uint8_t completion_code,
-					  struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_SET_STATE_EFFECTER_STATES;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	msg->payload[0] = completion_code;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_state_effecter_states_req(uint8_t instance_id,
-					 uint16_t effecter_id,
-					 uint8_t comp_effecter_count,
-					 set_effecter_state_field *field,
-					 struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (comp_effecter_count < 0x1 || comp_effecter_count > 0x8 ||
-	    field == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_SET_STATE_EFFECTER_STATES;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_set_state_effecter_states_req *request =
-	    (struct pldm_set_state_effecter_states_req *)msg->payload;
-	effecter_id = htole16(effecter_id);
-	request->effecter_id = effecter_id;
-	request->comp_effecter_count = comp_effecter_count;
-	memcpy(request->field, field,
-	       (sizeof(set_effecter_state_field) * comp_effecter_count));
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_state_effecter_states_resp(const struct pldm_msg *msg,
-					  size_t payload_length,
-					  uint8_t *completion_code)
-{
-	if (msg == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length > PLDM_SET_STATE_EFFECTER_STATES_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_state_effecter_states_req(const struct pldm_msg *msg,
-					 size_t payload_length,
-					 uint16_t *effecter_id,
-					 uint8_t *comp_effecter_count,
-					 set_effecter_state_field *field)
-{
-	if (msg == NULL || effecter_id == NULL || comp_effecter_count == NULL ||
-	    field == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length > PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_set_state_effecter_states_req *request =
-	    (struct pldm_set_state_effecter_states_req *)msg->payload;
-
-	*effecter_id = le16toh(request->effecter_id);
-	*comp_effecter_count = request->comp_effecter_count;
-	memcpy(field, request->field,
-	       (sizeof(set_effecter_state_field) * (*comp_effecter_count)));
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_pdr_req(const struct pldm_msg *msg, size_t payload_length,
-		       uint32_t *record_hndl, uint32_t *data_transfer_hndl,
-		       uint8_t *transfer_op_flag, uint16_t *request_cnt,
-		       uint16_t *record_chg_num)
-{
-	if (msg == NULL || record_hndl == NULL || data_transfer_hndl == NULL ||
-	    transfer_op_flag == NULL || request_cnt == NULL ||
-	    record_chg_num == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (payload_length != PLDM_GET_PDR_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_pdr_req *request =
-	    (struct pldm_get_pdr_req *)msg->payload;
-	*record_hndl = le32toh(request->record_handle);
-	*data_transfer_hndl = le32toh(request->data_transfer_handle);
-	*transfer_op_flag = request->transfer_op_flag;
-	*request_cnt = le16toh(request->request_count);
-	*record_chg_num = le16toh(request->record_change_number);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_pdr_resp(uint8_t instance_id, uint8_t completion_code,
-			uint32_t next_record_hndl,
-			uint32_t next_data_transfer_hndl, uint8_t transfer_flag,
-			uint16_t resp_cnt, const uint8_t *record_data,
-			uint8_t transfer_crc, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_GET_PDR;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_pdr_resp *response =
-	    (struct pldm_get_pdr_resp *)msg->payload;
-	response->completion_code = completion_code;
-
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->next_record_handle = htole32(next_record_hndl);
-		response->next_data_transfer_handle =
-		    htole32(next_data_transfer_hndl);
-		response->transfer_flag = transfer_flag;
-		response->response_count = htole16(resp_cnt);
-		if (record_data != NULL && resp_cnt > 0) {
-			memcpy(response->record_data, record_data, resp_cnt);
-		}
-		if (transfer_flag == PLDM_END) {
-			uint8_t *dst = msg->payload;
-			dst +=
-			    (sizeof(struct pldm_get_pdr_resp) - 1) + resp_cnt;
-			*dst = transfer_crc;
-		}
-	}
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_GET_PDR_REPOSITORY_INFO;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_pdr_repository_info_resp *response =
-	    (struct pldm_pdr_repository_info_resp *)msg->payload;
-	response->completion_code = completion_code;
-
-	if (response->completion_code == PLDM_SUCCESS) {
-		response->repository_state = repository_state;
-		if (update_time != NULL) {
-			memcpy(response->update_time, update_time,
-			       PLDM_TIMESTAMP104_SIZE);
-		}
-		if (oem_update_time != NULL) {
-			memcpy(response->oem_update_time, oem_update_time,
-			       PLDM_TIMESTAMP104_SIZE);
-		}
-		response->record_count = htole32(record_count);
-		response->repository_size = htole32(repository_size);
-		response->largest_record_size = htole32(largest_record_size);
-		response->data_transfer_handle_timeout =
-		    data_transfer_handle_timeout;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_pdr_req(uint8_t instance_id, uint32_t record_hndl,
-		       uint32_t data_transfer_hndl, uint8_t transfer_op_flag,
-		       uint16_t request_cnt, uint16_t record_chg_num,
-		       struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_PDR_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_GET_PDR;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_pdr_req *request =
-	    (struct pldm_get_pdr_req *)msg->payload;
-	request->record_handle = htole32(record_hndl);
-	request->data_transfer_handle = htole32(data_transfer_hndl);
-	request->transfer_op_flag = transfer_op_flag;
-	request->request_count = htole16(request_cnt);
-	request->record_change_number = htole16(record_chg_num);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_pdr_resp(const struct pldm_msg *msg, size_t payload_length,
-			uint8_t *completion_code, uint32_t *next_record_hndl,
-			uint32_t *next_data_transfer_hndl,
-			uint8_t *transfer_flag, uint16_t *resp_cnt,
-			uint8_t *record_data, size_t record_data_length,
-			uint8_t *transfer_crc)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    next_record_hndl == NULL || next_data_transfer_hndl == NULL ||
-	    transfer_flag == NULL || resp_cnt == NULL || transfer_crc == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length < PLDM_GET_PDR_MIN_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_pdr_resp *response =
-	    (struct pldm_get_pdr_resp *)msg->payload;
-
-	*next_record_hndl = le32toh(response->next_record_handle);
-	*next_data_transfer_hndl = le32toh(response->next_data_transfer_handle);
-	*transfer_flag = response->transfer_flag;
-	*resp_cnt = le16toh(response->response_count);
-
-	if (*transfer_flag != PLDM_END &&
-	    (int)payload_length != PLDM_GET_PDR_MIN_RESP_BYTES + *resp_cnt) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if (*transfer_flag == PLDM_END &&
-	    (int)payload_length !=
-		PLDM_GET_PDR_MIN_RESP_BYTES + *resp_cnt + 1) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if (*resp_cnt > 0 && record_data != NULL) {
-		if (record_data_length < *resp_cnt) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		memcpy(record_data, response->record_data, *resp_cnt);
-	}
-
-	if (*transfer_flag == PLDM_END) {
-		*transfer_crc =
-		    msg->payload[PLDM_GET_PDR_MIN_RESP_BYTES + *resp_cnt];
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_numeric_effecter_value_req(const struct pldm_msg *msg,
-					  size_t payload_length,
-					  uint16_t *effecter_id,
-					  uint8_t *effecter_data_size,
-					  uint8_t *effecter_value)
-{
-	if (msg == NULL || effecter_id == NULL || effecter_data_size == NULL ||
-	    effecter_value == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length < PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_set_numeric_effecter_value_req *request =
-	    (struct pldm_set_numeric_effecter_value_req *)msg->payload;
-	*effecter_id = le16toh(request->effecter_id);
-	*effecter_data_size = request->effecter_data_size;
-
-	if (*effecter_data_size > PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (*effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT8 ||
-	    *effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT8) {
-
-		if (payload_length !=
-		    PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-
-		*effecter_value = request->effecter_value[0];
-	}
-
-	if (*effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT16 ||
-	    *effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT16) {
-
-		if (payload_length !=
-		    PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES + 1) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-
-		memcpy(effecter_value, request->effecter_value, 2);
-		uint16_t *val = (uint16_t *)(effecter_value);
-		*val = le16toh(*val);
-	}
-
-	if (*effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT32 ||
-	    *effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT32) {
-
-		if (payload_length !=
-		    PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES + 3) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-
-		memcpy(effecter_value, request->effecter_value, 4);
-		uint32_t *val = (uint32_t *)(effecter_value);
-		*val = le32toh(*val);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_numeric_effecter_value_resp(uint8_t instance_id,
-					   uint8_t completion_code,
-					   struct pldm_msg *msg,
-					   size_t payload_length)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_SET_NUMERIC_EFFECTER_VALUE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	msg->payload[0] = completion_code;
-
-	return rc;
-}
-
-int encode_set_numeric_effecter_value_req(
-    uint8_t instance_id, uint16_t effecter_id, uint8_t effecter_data_size,
-    uint8_t *effecter_value, struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL || effecter_value == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (effecter_data_size > PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_SET_NUMERIC_EFFECTER_VALUE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_set_numeric_effecter_value_req *request =
-	    (struct pldm_set_numeric_effecter_value_req *)msg->payload;
-	if (effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT8 ||
-	    effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT8) {
-		if (payload_length !=
-		    PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		request->effecter_value[0] = *effecter_value;
-	} else if (effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT16 ||
-		   effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT16) {
-		if (payload_length !=
-		    PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES + 1) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-
-		uint16_t val = *(uint16_t *)(effecter_value);
-		val = htole16(val);
-		memcpy(request->effecter_value, &val, sizeof(uint16_t));
-
-	} else if (effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT32 ||
-		   effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		if (payload_length !=
-		    PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES + 3) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-
-		uint32_t val = *(uint32_t *)(effecter_value);
-		val = htole32(val);
-		memcpy(request->effecter_value, &val, sizeof(uint32_t));
-	}
-
-	request->effecter_id = htole16(effecter_id);
-	request->effecter_data_size = effecter_data_size;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_numeric_effecter_value_resp(const struct pldm_msg *msg,
-					   size_t payload_length,
-					   uint8_t *completion_code)
-{
-	if (msg == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	*completion_code = msg->payload[0];
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_state_sensor_readings_resp(uint8_t instance_id,
-					  uint8_t completion_code,
-					  uint8_t comp_sensor_count,
-					  get_sensor_state_field *field,
-					  struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (comp_sensor_count < 0x1 || comp_sensor_count > 0x8) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_GET_STATE_SENSOR_READINGS;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_state_sensor_readings_resp *response =
-	    (struct pldm_get_state_sensor_readings_resp *)msg->payload;
-
-	response->completion_code = completion_code;
-	response->comp_sensor_count = comp_sensor_count;
-	memcpy(response->field, field,
-	       (sizeof(get_sensor_state_field) * comp_sensor_count));
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_state_sensor_readings_req(uint8_t instance_id,
-					 uint16_t sensor_id,
-					 bitfield8_t sensor_rearm,
-					 uint8_t reserved, struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_GET_STATE_SENSOR_READINGS;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_state_sensor_readings_req *request =
-	    (struct pldm_get_state_sensor_readings_req *)msg->payload;
-
-	request->sensor_id = htole16(sensor_id);
-	request->reserved = reserved;
-	request->sensor_rearm = sensor_rearm;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_state_sensor_readings_resp(const struct pldm_msg *msg,
-					  size_t payload_length,
-					  uint8_t *completion_code,
-					  uint8_t *comp_sensor_count,
-					  get_sensor_state_field *field)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    comp_sensor_count == NULL || field == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	struct pldm_get_state_sensor_readings_resp *response =
-	    (struct pldm_get_state_sensor_readings_resp *)msg->payload;
-
-	if (response->comp_sensor_count < 0x1 ||
-	    response->comp_sensor_count > 0x8) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length >
-	    PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES +
-		sizeof(get_sensor_state_field) * response->comp_sensor_count) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	*comp_sensor_count = response->comp_sensor_count;
-
-	memcpy(field, response->field,
-	       (sizeof(get_sensor_state_field) * (*comp_sensor_count)));
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_state_sensor_readings_req(const struct pldm_msg *msg,
-					 size_t payload_length,
-					 uint16_t *sensor_id,
-					 bitfield8_t *sensor_rearm,
-					 uint8_t *reserved)
-{
-	if (msg == NULL || sensor_id == NULL || sensor_rearm == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_state_sensor_readings_req *request =
-	    (struct pldm_get_state_sensor_readings_req *)msg->payload;
-
-	*sensor_id = le16toh(request->sensor_id);
-	*reserved = request->reserved;
-	memcpy(&(sensor_rearm->byte), &(request->sensor_rearm.byte),
-	       sizeof(request->sensor_rearm.byte));
-
-	return PLDM_SUCCESS;
-}
-
-int encode_sensor_event_data(
-    struct pldm_sensor_event_data *const event_data,
-    const size_t event_data_size, const uint16_t sensor_id,
-    const enum sensor_event_class_states sensor_event_class,
-    const uint8_t sensor_offset, const uint8_t event_state,
-    const uint8_t previous_event_state, size_t *const actual_event_data_size)
-{
-	*actual_event_data_size =
-	    (sizeof(*event_data) - sizeof(event_data->event_class) +
-	     sizeof(struct pldm_sensor_event_state_sensor_state));
-
-	if (!event_data) {
-		return PLDM_SUCCESS;
-	}
-
-	if (event_data_size < *actual_event_data_size) {
-		*actual_event_data_size = 0;
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	event_data->sensor_id = htole16(sensor_id);
-	event_data->sensor_event_class_type = sensor_event_class;
-
-	struct pldm_sensor_event_state_sensor_state *const state_data =
-	    (struct pldm_sensor_event_state_sensor_state *)
-		event_data->event_class;
-
-	state_data->sensor_offset = sensor_offset;
-	state_data->event_state = event_state;
-	state_data->previous_event_state = previous_event_state;
-
-	return PLDM_SUCCESS;
-}
-
-int decode_platform_event_message_req(const struct pldm_msg *msg,
-				      size_t payload_length,
-				      uint8_t *format_version, uint8_t *tid,
-				      uint8_t *event_class,
-				      size_t *event_data_offset)
-{
-
-	if (msg == NULL || format_version == NULL || tid == NULL ||
-	    event_class == NULL || event_data_offset == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length <= PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-	struct pldm_platform_event_message_req *response =
-	    (struct pldm_platform_event_message_req *)msg->payload;
-
-	*format_version = response->format_version;
-	*tid = response->tid;
-	*event_class = response->event_class;
-	*event_data_offset =
-	    sizeof(*format_version) + sizeof(*tid) + sizeof(*event_class);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_platform_event_message_resp(uint8_t instance_id,
-				       uint8_t completion_code,
-				       uint8_t platform_event_status,
-				       struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (platform_event_status > PLDM_EVENT_LOGGING_REJECTED) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_PLATFORM_EVENT_MESSAGE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_platform_event_message_resp *response =
-	    (struct pldm_platform_event_message_resp *)msg->payload;
-	response->completion_code = completion_code;
-	response->platform_event_status = platform_event_status;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-
-{
-	if (format_version != 1) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (msg == NULL || event_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (event_data_length == 0) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length !=
-	    PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES + event_data_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	if (event_class > PLDM_HEARTBEAT_TIMER_ELAPSED_EVENT &&
-	    !(event_class >= 0xF0 && event_class <= 0xFE)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_PLATFORM_EVENT_MESSAGE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_platform_event_message_req *request =
-	    (struct pldm_platform_event_message_req *)msg->payload;
-	request->format_version = format_version;
-	request->tid = tid;
-	request->event_class = event_class;
-	memcpy(request->event_data, event_data, event_data_length);
-
-	return PLDM_SUCCESS;
-}
-
-int decode_platform_event_message_resp(const struct pldm_msg *msg,
-				       size_t payload_length,
-				       uint8_t *completion_code,
-				       uint8_t *platform_event_status)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    platform_event_status == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-	if (payload_length != PLDM_PLATFORM_EVENT_MESSAGE_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_platform_event_message_resp *response =
-	    (struct pldm_platform_event_message_resp *)msg->payload;
-	*platform_event_status = response->platform_event_status;
-
-	if (*platform_event_status > PLDM_EVENT_LOGGING_REJECTED) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_sensor_event_data(const uint8_t *event_data,
-			     size_t event_data_length, uint16_t *sensor_id,
-			     uint8_t *sensor_event_class_type,
-			     size_t *event_class_data_offset)
-{
-	if (event_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (event_data_length < PLDM_SENSOR_EVENT_DATA_MIN_LENGTH) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	size_t event_class_data_length =
-	    event_data_length - PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES;
-
-	struct pldm_sensor_event_data *sensor_event_data =
-	    (struct pldm_sensor_event_data *)event_data;
-	*sensor_id = sensor_event_data->sensor_id;
-	*sensor_event_class_type = sensor_event_data->sensor_event_class_type;
-	if (sensor_event_data->sensor_event_class_type ==
-	    PLDM_SENSOR_OP_STATE) {
-		if (event_class_data_length !=
-		    PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-	} else if (sensor_event_data->sensor_event_class_type ==
-		   PLDM_STATE_SENSOR_STATE) {
-		if (event_class_data_length !=
-		    PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-	} else if (sensor_event_data->sensor_event_class_type ==
-		   PLDM_NUMERIC_SENSOR_STATE) {
-		if (event_class_data_length <
-			PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH ||
-		    event_class_data_length >
-			PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-	} else {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	*event_class_data_offset =
-	    sizeof(*sensor_id) + sizeof(*sensor_event_class_type);
-	return PLDM_SUCCESS;
-}
-
-int decode_sensor_op_data(const uint8_t *sensor_data, size_t sensor_data_length,
-			  uint8_t *present_op_state, uint8_t *previous_op_state)
-{
-	if (sensor_data == NULL || present_op_state == NULL ||
-	    previous_op_state == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (sensor_data_length !=
-	    PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_sensor_event_sensor_op_state *sensor_op_data =
-	    (struct pldm_sensor_event_sensor_op_state *)sensor_data;
-	*present_op_state = sensor_op_data->present_op_state;
-	*previous_op_state = sensor_op_data->previous_op_state;
-	return PLDM_SUCCESS;
-}
-
-int decode_state_sensor_data(const uint8_t *sensor_data,
-			     size_t sensor_data_length, uint8_t *sensor_offset,
-			     uint8_t *event_state,
-			     uint8_t *previous_event_state)
-{
-	if (sensor_data == NULL || sensor_offset == NULL ||
-	    event_state == NULL || previous_event_state == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (sensor_data_length !=
-	    PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_sensor_event_state_sensor_state *sensor_state_data =
-	    (struct pldm_sensor_event_state_sensor_state *)sensor_data;
-	*sensor_offset = sensor_state_data->sensor_offset;
-	*event_state = sensor_state_data->event_state;
-	*previous_event_state = sensor_state_data->previous_event_state;
-	return PLDM_SUCCESS;
-}
-
-int decode_numeric_sensor_data(const uint8_t *sensor_data,
-			       size_t sensor_data_length, uint8_t *event_state,
-			       uint8_t *previous_event_state,
-			       uint8_t *sensor_data_size,
-			       uint32_t *present_reading)
-{
-	if (sensor_data == NULL || sensor_data_size == NULL ||
-	    event_state == NULL || previous_event_state == NULL ||
-	    present_reading == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (sensor_data_length <
-		PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH ||
-	    sensor_data_length >
-		PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-	struct pldm_sensor_event_numeric_sensor_state *numeric_sensor_data =
-	    (struct pldm_sensor_event_numeric_sensor_state *)sensor_data;
-	*event_state = numeric_sensor_data->event_state;
-	*previous_event_state = numeric_sensor_data->previous_event_state;
-	*sensor_data_size = numeric_sensor_data->sensor_data_size;
-	uint8_t *present_reading_ptr = numeric_sensor_data->present_reading;
-
-	switch (*sensor_data_size) {
-	case PLDM_SENSOR_DATA_SIZE_UINT8:
-	case PLDM_SENSOR_DATA_SIZE_SINT8:
-		if (sensor_data_length !=
-		    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_8BIT_DATA_LENGTH) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		*present_reading = present_reading_ptr[0];
-		break;
-	case PLDM_SENSOR_DATA_SIZE_UINT16:
-	case PLDM_SENSOR_DATA_SIZE_SINT16:
-		if (sensor_data_length !=
-		    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_16BIT_DATA_LENGTH) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		*present_reading = le16toh(present_reading_ptr[1] |
-					   (present_reading_ptr[0] << 8));
-		break;
-	case PLDM_SENSOR_DATA_SIZE_UINT32:
-	case PLDM_SENSOR_DATA_SIZE_SINT32:
-		if (sensor_data_length !=
-		    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_32BIT_DATA_LENGTH) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		*present_reading = le32toh(present_reading_ptr[3] |
-					   (present_reading_ptr[2] << 8) |
-					   (present_reading_ptr[1] << 16) |
-					   (present_reading_ptr[0] << 24));
-		break;
-	default:
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	return PLDM_SUCCESS;
-}
-
-int encode_get_numeric_effecter_value_req(uint8_t instance_id,
-					  uint16_t effecter_id,
-					  struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_GET_NUMERIC_EFFECTER_VALUE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_numeric_effecter_value_req *request =
-	    (struct pldm_get_numeric_effecter_value_req *)msg->payload;
-	request->effecter_id = htole16(effecter_id);
-
-	return PLDM_SUCCESS;
-}
-
-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, uint8_t *pending_value, uint8_t *present_value,
-    struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL || pending_value == NULL || present_value == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (effecter_data_size > PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (effecter_oper_state > EFFECTER_OPER_STATE_INTEST) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_GET_NUMERIC_EFFECTER_VALUE;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_numeric_effecter_value_resp *response =
-	    (struct pldm_get_numeric_effecter_value_resp *)msg->payload;
-
-	response->completion_code = completion_code;
-	response->effecter_data_size = effecter_data_size;
-	response->effecter_oper_state = effecter_oper_state;
-
-	if (effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT8 ||
-	    effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT8) {
-		if (payload_length !=
-		    PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		response->pending_and_present_values[0] = *pending_value;
-		response->pending_and_present_values[1] = *present_value;
-
-	} else if (effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT16 ||
-		   effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT16) {
-		if (payload_length !=
-		    PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES + 2) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		uint16_t val_pending = *(uint16_t *)pending_value;
-		val_pending = htole16(val_pending);
-		memcpy(response->pending_and_present_values, &val_pending,
-		       sizeof(uint16_t));
-		uint16_t val_present = *(uint16_t *)present_value;
-		val_present = htole16(val_present);
-		memcpy(
-		    (response->pending_and_present_values + sizeof(uint16_t)),
-		    &val_present, sizeof(uint16_t));
-
-	} else if (effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT32 ||
-		   effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		if (payload_length !=
-		    PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES + 6) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		uint32_t val_pending = *(uint32_t *)pending_value;
-		val_pending = htole32(val_pending);
-		memcpy(response->pending_and_present_values, &val_pending,
-		       sizeof(uint32_t));
-		uint32_t val_present = *(uint32_t *)present_value;
-		val_present = htole32(val_present);
-		memcpy(
-		    (response->pending_and_present_values + sizeof(uint32_t)),
-		    &val_present, sizeof(uint32_t));
-	}
-	return PLDM_SUCCESS;
-}
-
-int decode_get_numeric_effecter_value_req(const struct pldm_msg *msg,
-					  size_t payload_length,
-					  uint16_t *effecter_id)
-{
-	if (msg == NULL || effecter_id == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_NUMERIC_EFFECTER_VALUE_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_numeric_effecter_value_req *request =
-	    (struct pldm_get_numeric_effecter_value_req *)msg->payload;
-
-	*effecter_id = le16toh(request->effecter_id);
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || effecter_data_size == NULL ||
-	    effecter_oper_state == NULL || pending_value == NULL ||
-	    present_value == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length < PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_numeric_effecter_value_resp *response =
-	    (struct pldm_get_numeric_effecter_value_resp *)msg->payload;
-
-	*effecter_data_size = response->effecter_data_size;
-	*effecter_oper_state = response->effecter_oper_state;
-
-	if (*effecter_data_size > PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (*effecter_oper_state > EFFECTER_OPER_STATE_INTEST) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (*effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT8 ||
-	    *effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT8) {
-		if (payload_length !=
-		    PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		memcpy(pending_value, response->pending_and_present_values, 1);
-		memcpy(present_value, &response->pending_and_present_values[1],
-		       1);
-
-	} else if (*effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT16 ||
-		   *effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT16) {
-		if (payload_length !=
-		    PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES + 2) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		memcpy(pending_value, response->pending_and_present_values,
-		       sizeof(uint16_t));
-		uint16_t *val_pending = (uint16_t *)pending_value;
-		*val_pending = le16toh(*val_pending);
-		memcpy(
-		    present_value,
-		    (response->pending_and_present_values + sizeof(uint16_t)),
-		    sizeof(uint16_t));
-		uint16_t *val_present = (uint16_t *)present_value;
-		*val_present = le16toh(*val_present);
-
-	} else if (*effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT32 ||
-		   *effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		if (payload_length !=
-		    PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES + 6) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		memcpy(pending_value, response->pending_and_present_values,
-		       sizeof(uint32_t));
-		uint32_t *val_pending = (uint32_t *)pending_value;
-		*val_pending = le32toh(*val_pending);
-		memcpy(
-		    present_value,
-		    (response->pending_and_present_values + sizeof(uint32_t)),
-		    sizeof(uint32_t));
-		uint32_t *val_present = (uint32_t *)present_value;
-		*val_present = le32toh(*val_present);
-	}
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (event_data_operations == NULL ||
-	    numbers_of_change_entries == NULL || change_entries == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	size_t expected_size =
-	    sizeof(event_data_format) + sizeof(number_of_change_records);
-
-	expected_size +=
-	    sizeof(*event_data_operations) * number_of_change_records;
-	expected_size +=
-	    sizeof(*numbers_of_change_entries) * number_of_change_records;
-
-	for (uint8_t i = 0; i < number_of_change_records; ++i) {
-		expected_size +=
-		    sizeof(*change_entries[0]) * numbers_of_change_entries[i];
-	}
-
-	*actual_change_records_size = expected_size;
-
-	if (event_data == NULL) {
-		return PLDM_SUCCESS;
-	}
-
-	if (max_change_records_size < expected_size) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	event_data->event_data_format = event_data_format;
-	event_data->number_of_change_records = number_of_change_records;
-
-	struct pldm_pdr_repository_change_record_data *record_data =
-	    (struct pldm_pdr_repository_change_record_data *)
-		event_data->change_records;
-
-	for (uint8_t i = 0; i < number_of_change_records; ++i) {
-		record_data->event_data_operation = event_data_operations[i];
-		record_data->number_of_change_entries =
-		    numbers_of_change_entries[i];
-
-		for (uint8_t j = 0; j < record_data->number_of_change_entries;
-		     ++j) {
-			record_data->change_entry[j] =
-			    htole32(change_entries[i][j]);
-		}
-
-		record_data = (struct pldm_pdr_repository_change_record_data
-				   *)(record_data->change_entry +
-				      record_data->number_of_change_entries);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (event_data == NULL || event_data_format == NULL ||
-	    number_of_change_records == NULL ||
-	    change_record_data_offset == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (event_data_size < PLDM_PDR_REPOSITORY_CHG_EVENT_MIN_LENGTH) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_pdr_repository_chg_event_data
-	    *pdr_repository_chg_event_data =
-		(struct pldm_pdr_repository_chg_event_data *)event_data;
-
-	*event_data_format = pdr_repository_chg_event_data->event_data_format;
-	*number_of_change_records =
-	    pdr_repository_chg_event_data->number_of_change_records;
-	*change_record_data_offset =
-	    sizeof(*event_data_format) + sizeof(*number_of_change_records);
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (change_record_data == NULL || event_data_operation == NULL ||
-	    number_of_change_entries == NULL ||
-	    change_entry_data_offset == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-	if (change_record_data_size <
-	    PLDM_PDR_REPOSITORY_CHANGE_RECORD_MIN_LENGTH) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_pdr_repository_change_record_data
-	    *pdr_repository_change_record_data =
-		(struct pldm_pdr_repository_change_record_data *)
-		    change_record_data;
-
-	*event_data_operation =
-	    pdr_repository_change_record_data->event_data_operation;
-	*number_of_change_entries =
-	    pdr_repository_change_record_data->number_of_change_entries;
-	*change_entry_data_offset =
-	    sizeof(*event_data_operation) + sizeof(*number_of_change_entries);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_sensor_reading_req(uint8_t instance_id, uint16_t sensor_id,
-				  uint8_t rearm_event_state,
-				  struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_GET_SENSOR_READING;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_sensor_reading_req *request =
-	    (struct pldm_get_sensor_reading_req *)msg->payload;
-
-	request->sensor_id = htole16(sensor_id);
-	request->rearm_event_state = rearm_event_state;
-
-	return PLDM_SUCCESS;
-}
-
-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)
-{
-	if (msg == NULL || completion_code == NULL ||
-	    sensor_data_size == NULL || sensor_operational_state == NULL ||
-	    sensor_event_message_enable == NULL || present_state == NULL ||
-	    previous_state == NULL || event_state == NULL ||
-	    present_reading == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length < PLDM_GET_SENSOR_READING_MIN_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_sensor_reading_resp *response =
-	    (struct pldm_get_sensor_reading_resp *)msg->payload;
-
-	if (response->sensor_data_size > PLDM_SENSOR_DATA_SIZE_SINT32) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*sensor_data_size = response->sensor_data_size;
-	*sensor_operational_state = response->sensor_operational_state;
-	*sensor_event_message_enable = response->sensor_event_message_enable;
-	*present_state = response->present_state;
-	*previous_state = response->previous_state;
-	*event_state = response->event_state;
-
-	if (*sensor_data_size == PLDM_EFFECTER_DATA_SIZE_UINT8 ||
-	    *sensor_data_size == PLDM_EFFECTER_DATA_SIZE_SINT8) {
-		if (payload_length != PLDM_GET_SENSOR_READING_MIN_RESP_BYTES) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		*present_reading = response->present_reading[0];
-
-	} else if (*sensor_data_size == PLDM_EFFECTER_DATA_SIZE_UINT16 ||
-		   *sensor_data_size == PLDM_EFFECTER_DATA_SIZE_SINT16) {
-		if (payload_length !=
-		    PLDM_GET_SENSOR_READING_MIN_RESP_BYTES + 1) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		memcpy(present_reading, response->present_reading, 2);
-		uint16_t *val = (uint16_t *)(present_reading);
-		*val = le16toh(*val);
-
-	} else if (*sensor_data_size == PLDM_EFFECTER_DATA_SIZE_UINT32 ||
-		   *sensor_data_size == PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		if (payload_length !=
-		    PLDM_GET_SENSOR_READING_MIN_RESP_BYTES + 3) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		memcpy(present_reading, response->present_reading, 4);
-		uint32_t *val = (uint32_t *)(present_reading);
-		*val = le32toh(*val);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int encode_get_sensor_reading_resp(
-    uint8_t instance_id, 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, struct pldm_msg *msg, size_t payload_length)
-{
-	if (msg == NULL || present_reading == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (sensor_data_size > PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_RESPONSE;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_GET_SENSOR_READING;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_get_sensor_reading_resp *response =
-	    (struct pldm_get_sensor_reading_resp *)msg->payload;
-
-	response->completion_code = completion_code;
-	response->sensor_data_size = sensor_data_size;
-	response->sensor_operational_state = sensor_operational_state;
-	response->sensor_event_message_enable = sensor_event_message_enable;
-	response->present_state = present_state;
-	response->previous_state = previous_state;
-	response->event_state = event_state;
-
-	if (sensor_data_size == PLDM_EFFECTER_DATA_SIZE_UINT8 ||
-	    sensor_data_size == PLDM_EFFECTER_DATA_SIZE_SINT8) {
-		if (payload_length != PLDM_GET_SENSOR_READING_MIN_RESP_BYTES) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		response->present_reading[0] = *present_reading;
-
-	} else if (sensor_data_size == PLDM_EFFECTER_DATA_SIZE_UINT16 ||
-		   sensor_data_size == PLDM_EFFECTER_DATA_SIZE_SINT16) {
-		if (payload_length !=
-		    PLDM_GET_SENSOR_READING_MIN_RESP_BYTES + 1) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		uint16_t val = *(uint16_t *)present_reading;
-		val = htole16(val);
-		memcpy(response->present_reading, &val, 2);
-
-	} else if (sensor_data_size == PLDM_EFFECTER_DATA_SIZE_UINT32 ||
-		   sensor_data_size == PLDM_EFFECTER_DATA_SIZE_SINT32) {
-		if (payload_length !=
-		    PLDM_GET_SENSOR_READING_MIN_RESP_BYTES + 3) {
-			return PLDM_ERROR_INVALID_LENGTH;
-		}
-		uint32_t val = *(uint32_t *)present_reading;
-		val = htole32(val);
-		memcpy(response->present_reading, &val, 4);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_get_sensor_reading_req(const struct pldm_msg *msg,
-				  size_t payload_length, uint16_t *sensor_id,
-				  uint8_t *rearm_event_state)
-{
-	if (msg == NULL || sensor_id == NULL || rearm_event_state == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_GET_SENSOR_READING_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_get_sensor_reading_req *request =
-	    (struct pldm_get_sensor_reading_req *)msg->payload;
-
-	*sensor_id = le16toh(request->sensor_id);
-	*rearm_event_state = request->rearm_event_state;
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_event_receiver_req(uint8_t instance_id,
-				  uint8_t event_message_global_enable,
-				  uint8_t transport_protocol_type,
-				  uint8_t event_receiver_address_info,
-				  uint16_t heartbeat_timer,
-				  struct pldm_msg *msg)
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (transport_protocol_type != PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.msg_type = PLDM_REQUEST;
-	header.instance = instance_id;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_SET_EVENT_RECEIVER;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_set_event_receiver_req *request =
-	    (struct pldm_set_event_receiver_req *)msg->payload;
-	request->event_message_global_enable = event_message_global_enable;
-
-	request->transport_protocol_type = transport_protocol_type;
-	request->event_receiver_address_info = event_receiver_address_info;
-
-	if (event_message_global_enable ==
-	    PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE) {
-		if (heartbeat_timer == 0) {
-			return PLDM_ERROR_INVALID_DATA;
-		}
-		request->heartbeat_timer = htole16(heartbeat_timer);
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_event_receiver_resp(const struct pldm_msg *msg,
-				   size_t payload_length,
-				   uint8_t *completion_code)
-{
-	if (msg == NULL || completion_code == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*completion_code = msg->payload[0];
-	if (PLDM_SUCCESS != *completion_code) {
-		return PLDM_SUCCESS;
-	}
-
-	if (payload_length > PLDM_SET_EVENT_RECEIVER_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	return PLDM_SUCCESS;
-}
-
-int decode_set_event_receiver_req(const struct pldm_msg *msg,
-				  size_t payload_length,
-				  uint8_t *event_message_global_enable,
-				  uint8_t *transport_protocol_type,
-				  uint8_t *event_receiver_address_info,
-				  uint16_t *heartbeat_timer)
-
-{
-	if (msg == NULL || event_message_global_enable == NULL ||
-	    transport_protocol_type == NULL ||
-	    event_receiver_address_info == NULL || heartbeat_timer == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	if (payload_length != PLDM_SET_EVENT_RECEIVER_REQ_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_set_event_receiver_req *request =
-	    (struct pldm_set_event_receiver_req *)msg->payload;
-
-	if ((*event_message_global_enable ==
-	     PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE) &&
-	    (*heartbeat_timer == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	*event_message_global_enable = request->event_message_global_enable,
-	*transport_protocol_type = request->transport_protocol_type,
-	*event_receiver_address_info = request->event_receiver_address_info,
-	*heartbeat_timer = le16toh(request->heartbeat_timer);
-
-	return PLDM_SUCCESS;
-}
-
-int encode_set_event_receiver_resp(uint8_t instance_id, uint8_t completion_code,
-				   struct pldm_msg *msg)
-
-{
-	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
-	}
-
-	struct pldm_header_info header = {0};
-	header.instance = instance_id;
-	header.msg_type = PLDM_RESPONSE;
-	header.pldm_type = PLDM_PLATFORM;
-	header.command = PLDM_SET_EVENT_RECEIVER;
-
-	uint8_t rc = pack_pldm_header(&header, &(msg->hdr));
-	if (rc != PLDM_SUCCESS) {
-		return rc;
-	}
-
-	msg->payload[0] = completion_code;
-
-	return PLDM_SUCCESS;
-}
diff --git a/subprojects/libpldm/src/requester/meson.build b/subprojects/libpldm/src/requester/meson.build
deleted file mode 100644
index 6798d02..0000000
--- a/subprojects/libpldm/src/requester/meson.build
+++ /dev/null
@@ -1,3 +0,0 @@
-libpldm_sources += files(
-  'pldm.c'
-  )
diff --git a/subprojects/libpldm/src/requester/pldm.c b/subprojects/libpldm/src/requester/pldm.c
deleted file mode 100644
index 932f55e..0000000
--- a/subprojects/libpldm/src/requester/pldm.c
+++ /dev/null
@@ -1,188 +0,0 @@
-#include "pldm.h"
-#include "base.h"
-
-#include <errno.h>
-#include <stdlib.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <sys/un.h>
-#include <unistd.h>
-
-const uint8_t MCTP_MSG_TYPE_PLDM = 1;
-
-pldm_requester_rc_t pldm_open()
-{
-	int fd = -1;
-	int rc = -1;
-
-	fd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
-	if (-1 == fd) {
-		return fd;
-	}
-
-	const char path[] = "\0mctp-mux";
-	struct sockaddr_un addr;
-	addr.sun_family = AF_UNIX;
-	memcpy(addr.sun_path, path, sizeof(path) - 1);
-	rc = connect(fd, (struct sockaddr *)&addr,
-		     sizeof(path) + sizeof(addr.sun_family) - 1);
-	if (-1 == rc) {
-		return PLDM_REQUESTER_OPEN_FAIL;
-	}
-	rc = write(fd, &MCTP_MSG_TYPE_PLDM, sizeof(MCTP_MSG_TYPE_PLDM));
-	if (-1 == rc) {
-		return PLDM_REQUESTER_OPEN_FAIL;
-	}
-
-	return fd;
-}
-
-/**
- * @brief Read MCTP socket. If there's data available, return success only if
- *        data is a PLDM message.
- *
- * @param[in] eid - destination MCTP eid
- * @param[in] mctp_fd - MCTP socket fd
- * @param[out] pldm_resp_msg - *pldm_resp_msg will point to PLDM msg,
- *             this function allocates memory, caller to free(*pldm_resp_msg) on
- *             success.
- * @param[out] resp_msg_len - caller owned pointer that will be made point to
- *             the size of the PLDM msg.
- *
- * @return pldm_requester_rc_t (errno may be set). failure is returned even
- *         when data was read, but wasn't a PLDM response message
- */
-static pldm_requester_rc_t mctp_recv(mctp_eid_t eid, int mctp_fd,
-				     uint8_t **pldm_resp_msg,
-				     size_t *resp_msg_len)
-{
-	ssize_t min_len = sizeof(eid) + sizeof(MCTP_MSG_TYPE_PLDM) +
-			  sizeof(struct pldm_msg_hdr);
-	ssize_t length = recv(mctp_fd, NULL, 0, MSG_PEEK | MSG_TRUNC);
-	if (length <= 0) {
-		return PLDM_REQUESTER_RECV_FAIL;
-	} else if (length < min_len) {
-		/* read and discard */
-		uint8_t buf[length];
-		recv(mctp_fd, buf, length, 0);
-		return PLDM_REQUESTER_INVALID_RECV_LEN;
-	} else {
-		struct iovec iov[2];
-		size_t mctp_prefix_len =
-		    sizeof(eid) + sizeof(MCTP_MSG_TYPE_PLDM);
-		uint8_t mctp_prefix[mctp_prefix_len];
-		size_t pldm_len = length - mctp_prefix_len;
-		iov[0].iov_len = mctp_prefix_len;
-		iov[0].iov_base = mctp_prefix;
-		*pldm_resp_msg = malloc(pldm_len);
-		iov[1].iov_len = pldm_len;
-		iov[1].iov_base = *pldm_resp_msg;
-		struct msghdr msg = {0};
-		msg.msg_iov = iov;
-		msg.msg_iovlen = sizeof(iov) / sizeof(iov[0]);
-		ssize_t bytes = recvmsg(mctp_fd, &msg, 0);
-		if (length != bytes) {
-			free(*pldm_resp_msg);
-			return PLDM_REQUESTER_INVALID_RECV_LEN;
-		}
-		if ((mctp_prefix[0] != eid) ||
-		    (mctp_prefix[1] != MCTP_MSG_TYPE_PLDM)) {
-			free(*pldm_resp_msg);
-			return PLDM_REQUESTER_NOT_PLDM_MSG;
-		}
-		*resp_msg_len = pldm_len;
-		return PLDM_REQUESTER_SUCCESS;
-	}
-}
-
-pldm_requester_rc_t pldm_recv_any(mctp_eid_t eid, int mctp_fd,
-				  uint8_t **pldm_resp_msg, size_t *resp_msg_len)
-{
-	pldm_requester_rc_t rc =
-	    mctp_recv(eid, mctp_fd, pldm_resp_msg, resp_msg_len);
-	if (rc != PLDM_REQUESTER_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_msg_hdr *hdr = (struct pldm_msg_hdr *)(*pldm_resp_msg);
-	if (hdr->request != PLDM_RESPONSE) {
-		free(*pldm_resp_msg);
-		return PLDM_REQUESTER_NOT_RESP_MSG;
-	}
-
-	uint8_t pldm_rc = 0;
-	if (*resp_msg_len < (sizeof(struct pldm_msg_hdr) + sizeof(pldm_rc))) {
-		free(*pldm_resp_msg);
-		return PLDM_REQUESTER_RESP_MSG_TOO_SMALL;
-	}
-
-	return PLDM_REQUESTER_SUCCESS;
-}
-
-pldm_requester_rc_t pldm_recv(mctp_eid_t eid, int mctp_fd, uint8_t instance_id,
-			      uint8_t **pldm_resp_msg, size_t *resp_msg_len)
-{
-	pldm_requester_rc_t rc =
-	    pldm_recv_any(eid, mctp_fd, pldm_resp_msg, resp_msg_len);
-	if (rc != PLDM_REQUESTER_SUCCESS) {
-		return rc;
-	}
-
-	struct pldm_msg_hdr *hdr = (struct pldm_msg_hdr *)(*pldm_resp_msg);
-	if (hdr->instance_id != instance_id) {
-		free(*pldm_resp_msg);
-		return PLDM_REQUESTER_INSTANCE_ID_MISMATCH;
-	}
-
-	return PLDM_REQUESTER_SUCCESS;
-}
-
-pldm_requester_rc_t pldm_send_recv(mctp_eid_t eid, int mctp_fd,
-				   const uint8_t *pldm_req_msg,
-				   size_t req_msg_len, uint8_t **pldm_resp_msg,
-				   size_t *resp_msg_len)
-{
-	struct pldm_msg_hdr *hdr = (struct pldm_msg_hdr *)pldm_req_msg;
-	if ((hdr->request != PLDM_REQUEST) &&
-	    (hdr->request != PLDM_ASYNC_REQUEST_NOTIFY)) {
-		return PLDM_REQUESTER_NOT_REQ_MSG;
-	}
-
-	pldm_requester_rc_t rc =
-	    pldm_send(eid, mctp_fd, pldm_req_msg, req_msg_len);
-	if (rc != PLDM_REQUESTER_SUCCESS) {
-		return rc;
-	}
-
-	while (1) {
-		rc = pldm_recv(eid, mctp_fd, hdr->instance_id, pldm_resp_msg,
-			       resp_msg_len);
-		if (rc == PLDM_REQUESTER_SUCCESS) {
-			break;
-		}
-	}
-
-	return rc;
-}
-
-pldm_requester_rc_t pldm_send(mctp_eid_t eid, int mctp_fd,
-			      const uint8_t *pldm_req_msg, size_t req_msg_len)
-{
-	uint8_t hdr[2] = {eid, MCTP_MSG_TYPE_PLDM};
-
-	struct iovec iov[2];
-	iov[0].iov_base = hdr;
-	iov[0].iov_len = sizeof(hdr);
-	iov[1].iov_base = (uint8_t *)pldm_req_msg;
-	iov[1].iov_len = req_msg_len;
-
-	struct msghdr msg = {0};
-	msg.msg_iov = iov;
-	msg.msg_iovlen = sizeof(iov) / sizeof(iov[0]);
-
-	ssize_t rc = sendmsg(mctp_fd, &msg, 0);
-	if (rc == -1) {
-		return PLDM_REQUESTER_SEND_FAIL;
-	}
-	return PLDM_REQUESTER_SUCCESS;
-}
diff --git a/subprojects/libpldm/src/utils.c b/subprojects/libpldm/src/utils.c
deleted file mode 100644
index 0a1e33c..0000000
--- a/subprojects/libpldm/src/utils.c
+++ /dev/null
@@ -1,211 +0,0 @@
-#include "utils.h"
-#include "base.h"
-#include <stdio.h>
-
-/** CRC32 code derived from work by Gary S. Brown.
- *  http://web.mit.edu/freebsd/head/sys/libkern/crc32.c
- *
- *  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
- *  code or tables extracted from it, as desired without restriction.
- *
- */
-static uint32_t crc32_tab[] = {
-    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
-    0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-    0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
-    0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
-    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-    0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
-    0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
-    0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
-    0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
-    0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-    0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
-    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
-    0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-    0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
-    0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
-    0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-    0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
-    0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
-    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-    0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
-    0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
-    0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
-    0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
-    0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-    0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
-    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
-    0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-    0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
-    0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
-    0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-    0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d};
-
-/* 0x07(polynomial: x8+x2+x1+1)
- */
-static const uint8_t crc8_table[] = {
-    0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31,
-    0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,
-    0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9,
-    0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
-    0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1,
-    0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2,
-    0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe,
-    0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
-    0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16,
-    0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42,
-    0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80,
-    0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
-    0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8,
-    0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,
-    0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10,
-    0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
-    0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f,
-    0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b,
-    0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7,
-    0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
-    0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef,
-    0xfa, 0xfd, 0xf4, 0xf3};
-
-uint32_t crc32(const void *data, size_t size)
-{
-	const uint8_t *p = data;
-	uint32_t crc = ~0U;
-	while (size--)
-		crc = crc32_tab[(crc ^ *p++) & 0xff] ^ (crc >> 8);
-	return crc ^ ~0U;
-}
-
-uint8_t crc8(const void *data, size_t size)
-{
-	const uint8_t *p = data;
-	uint8_t crc = 0x00;
-	while (size--)
-		crc = crc8_table[crc ^ *p++];
-	return crc;
-}
-
-static int print_version_field(uint8_t bcd, char *buffer, size_t buffer_size)
-{
-	int v;
-	if (bcd == 0xff)
-		return 0;
-	if ((bcd & 0xf0) == 0xf0) {
-		v = bcd & 0x0f;
-		return snprintf(buffer, buffer_size, "%d", v);
-	}
-	v = ((bcd >> 4) * 10) + (bcd & 0x0f);
-	return snprintf(buffer, buffer_size, "%02d", v);
-}
-
-#define POINTER_MOVE(rc, buffer, buffer_size, original_size)                   \
-	do {                                                                   \
-		if (rc < 0)                                                    \
-			return rc;                                             \
-		if ((size_t)rc >= buffer_size)                                 \
-			return original_size - 1;                              \
-		buffer += rc;                                                  \
-		buffer_size -= rc;                                             \
-	} while (0)
-
-int ver2str(const ver32_t *version, char *buffer, size_t buffer_size)
-{
-	int rc;
-	size_t original_size = buffer_size;
-	rc = print_version_field(version->major, buffer, buffer_size);
-	POINTER_MOVE(rc, buffer, buffer_size, original_size);
-	rc = snprintf(buffer, buffer_size, ".");
-	POINTER_MOVE(rc, buffer, buffer_size, original_size);
-	rc = print_version_field(version->minor, buffer, buffer_size);
-	POINTER_MOVE(rc, buffer, buffer_size, original_size);
-	if (version->update != 0xff) {
-		rc = snprintf(buffer, buffer_size, ".");
-		POINTER_MOVE(rc, buffer, buffer_size, original_size);
-		rc = print_version_field(version->update, buffer, buffer_size);
-		POINTER_MOVE(rc, buffer, buffer_size, original_size);
-	}
-	if (version->alpha != 0) {
-		rc = snprintf(buffer, buffer_size, "%c", version->alpha);
-		POINTER_MOVE(rc, buffer, buffer_size, original_size);
-	}
-	return original_size - buffer_size;
-}
-
-uint8_t bcd2dec8(uint8_t bcd)
-{
-	uint8_t dec = (bcd >> 4) * 10 + (bcd & 0x0f);
-	return dec;
-}
-
-uint8_t dec2bcd8(uint8_t dec)
-{
-	uint8_t bcd = (dec % 10) | (dec / 10) << 4;
-	return bcd;
-}
-
-uint16_t bcd2dec16(uint16_t bcd)
-{
-	return bcd2dec8(bcd >> 8) * 100 + bcd2dec8(bcd & 0xff);
-}
-
-uint16_t dec2bcd16(uint16_t dec)
-{
-	return dec2bcd8(dec % 100) | dec2bcd8(dec / 100) << 8;
-}
-
-uint32_t bcd2dec32(uint32_t bcd)
-{
-	return bcd2dec16(bcd >> 16) * 10000 + bcd2dec16(bcd & 0xffff);
-}
-
-uint32_t dec2bcd32(uint32_t dec)
-{
-	return dec2bcd16(dec % 10000) | dec2bcd16(dec / 10000) << 16;
-}
-
-bool is_time_legal(uint8_t seconds, uint8_t minutes, uint8_t hours, uint8_t day,
-		   uint8_t month, uint16_t year)
-{
-	if (month < 1 || month > 12) {
-		return false;
-	}
-	static const int days[13] = {0,	 31, 28, 31, 30, 31, 30,
-				     31, 31, 30, 31, 30, 31};
-	int rday = days[month];
-	if (month == 2 &&
-	    ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
-		rday += 1;
-	}
-	if (year < 1970 || day < 1 || day > rday || seconds > 59 ||
-	    minutes > 59 || hours > 23) {
-		return false;
-	}
-	return true;
-}
-
-bool is_transfer_flag_valid(uint8_t transfer_flag)
-{
-	switch (transfer_flag) {
-	case PLDM_START:
-	case PLDM_MIDDLE:
-	case PLDM_END:
-	case PLDM_START_AND_END:
-		return true;
-
-	default:
-		return false;
-	}
-}
diff --git a/subprojects/libpldm/subprojects/googletest.wrap b/subprojects/libpldm/subprojects/googletest.wrap
deleted file mode 100644
index 56da9ef..0000000
--- a/subprojects/libpldm/subprojects/googletest.wrap
+++ /dev/null
@@ -1,3 +0,0 @@
-[wrap-git]
-url = https://github.com/google/googletest
-revision = HEAD
diff --git a/subprojects/libpldm/tests/.clang-format b/subprojects/libpldm/tests/.clang-format
deleted file mode 100644
index ae9ad39..0000000
--- a/subprojects/libpldm/tests/.clang-format
+++ /dev/null
@@ -1,98 +0,0 @@
----
-Language:        Cpp
-# BasedOnStyle:  LLVM
-AccessModifierOffset: -2
-AlignAfterOpenBracket: Align
-AlignConsecutiveAssignments: false
-AlignConsecutiveDeclarations: false
-AlignEscapedNewlinesLeft: false
-AlignOperands:   true
-AlignTrailingComments: true
-AllowAllParametersOfDeclarationOnNextLine: true
-AllowShortBlocksOnASingleLine: false
-AllowShortCaseLabelsOnASingleLine: false
-AllowShortFunctionsOnASingleLine: None
-AllowShortIfStatementsOnASingleLine: false
-AllowShortLoopsOnASingleLine: false
-AlwaysBreakAfterDefinitionReturnType: None
-AlwaysBreakAfterReturnType: None
-AlwaysBreakBeforeMultilineStrings: false
-AlwaysBreakTemplateDeclarations: true
-BinPackArguments: true
-BinPackParameters: true
-BraceWrapping:
-  AfterClass:      true
-  AfterControlStatement: true
-  AfterEnum:       true
-  AfterFunction:   true
-  AfterNamespace:  true
-  AfterObjCDeclaration: true
-  AfterStruct:     true
-  AfterUnion:      true
-  BeforeCatch:     true
-  BeforeElse:      true
-  IndentBraces:    false
-BreakBeforeBinaryOperators: None
-BreakBeforeBraces: Custom
-BreakBeforeTernaryOperators: true
-BreakConstructorInitializers: AfterColon
-ColumnLimit:     80
-CommentPragmas:  '^ IWYU pragma:'
-ConstructorInitializerAllOnOneLineOrOnePerLine: false
-ConstructorInitializerIndentWidth: 4
-ContinuationIndentWidth: 4
-Cpp11BracedListStyle: true
-DerivePointerAlignment: false
-PointerAlignment: Left
-DisableFormat:   false
-ExperimentalAutoDetectBinPacking: false
-FixNamespaceComments: true
-ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
-IncludeBlocks: Regroup
-IncludeCategories:
-  - Regex:           '^[<"](gtest|gmock)'
-    Priority:        5
-  - Regex:           '^"config.h"'
-    Priority:        -1
-  - Regex:           '^".*\.hpp"'
-    Priority:        1
-  - Regex:           '^<.*\.h>'
-    Priority:        2
-  - Regex:           '^<.*'
-    Priority:        3
-  - Regex:           '.*'
-    Priority:        4
-IndentCaseLabels: true
-IndentWidth:     4
-IndentWrappedFunctionNames: true
-KeepEmptyLinesAtTheStartOfBlocks: true
-MacroBlockBegin: ''
-MacroBlockEnd:   ''
-MaxEmptyLinesToKeep: 1
-NamespaceIndentation: None
-ObjCBlockIndentWidth: 2
-ObjCSpaceAfterProperty: false
-ObjCSpaceBeforeProtocolList: true
-PenaltyBreakBeforeFirstCallParameter: 19
-PenaltyBreakComment: 300
-PenaltyBreakFirstLessLess: 120
-PenaltyBreakString: 1000
-PenaltyExcessCharacter: 1000000
-PenaltyReturnTypeOnItsOwnLine: 60
-ReflowComments:  true
-SortIncludes:    true
-SortUsingDeclarations: true
-SpaceAfterCStyleCast: false
-SpaceBeforeAssignmentOperators: true
-SpaceBeforeParens: ControlStatements
-SpaceInEmptyParentheses: false
-SpacesBeforeTrailingComments: 1
-SpacesInAngles:  false
-SpacesInContainerLiterals: true
-SpacesInCStyleCastParentheses: false
-SpacesInParentheses: false
-SpacesInSquareBrackets: false
-Standard:        Cpp11
-TabWidth:        4
-UseTab:          Never
-...
diff --git a/subprojects/libpldm/tests/libpldm_base_test.cpp b/subprojects/libpldm/tests/libpldm_base_test.cpp
deleted file mode 100644
index b3b1383..0000000
--- a/subprojects/libpldm/tests/libpldm_base_test.cpp
+++ /dev/null
@@ -1,760 +0,0 @@
-#include <string.h>
-
-#include <array>
-#include <cstring>
-#include <vector>
-
-#include "libpldm/base.h"
-
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-
-using testing::ElementsAreArray;
-
-constexpr auto hdrSize = sizeof(pldm_msg_hdr);
-
-TEST(PackPLDMMessage, BadPathTest)
-{
-    struct pldm_header_info hdr;
-    struct pldm_header_info* hdr_ptr = NULL;
-    pldm_msg_hdr msg{};
-
-    // PLDM header information pointer is NULL
-    auto rc = pack_pldm_header(hdr_ptr, &msg);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // PLDM message pointer is NULL
-    rc = pack_pldm_header(&hdr, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // PLDM header information pointer and PLDM message pointer is NULL
-    rc = pack_pldm_header(hdr_ptr, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // RESERVED message type
-    hdr.msg_type = PLDM_RESERVED;
-    rc = pack_pldm_header(&hdr, &msg);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Instance ID out of range
-    hdr.msg_type = PLDM_REQUEST;
-    hdr.instance = 32;
-    rc = pack_pldm_header(&hdr, &msg);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // PLDM type out of range
-    hdr.msg_type = PLDM_REQUEST;
-    hdr.instance = 31;
-    hdr.pldm_type = 64;
-    rc = pack_pldm_header(&hdr, &msg);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_PLDM_TYPE);
-}
-
-TEST(PackPLDMMessage, RequestMessageGoodPath)
-{
-    struct pldm_header_info hdr;
-    pldm_msg_hdr msg{};
-
-    // Message type is REQUEST and lower range of the field values
-    hdr.msg_type = PLDM_REQUEST;
-    hdr.instance = 0;
-    hdr.pldm_type = 0;
-    hdr.command = 0;
-
-    auto rc = pack_pldm_header(&hdr, &msg);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(msg.request, 1);
-    EXPECT_EQ(msg.datagram, 0);
-    EXPECT_EQ(msg.instance_id, 0);
-    EXPECT_EQ(msg.type, 0);
-    EXPECT_EQ(msg.command, 0);
-
-    // Message type is REQUEST and upper range of the field values
-    hdr.instance = 31;
-    hdr.pldm_type = 63;
-    hdr.command = 255;
-
-    rc = pack_pldm_header(&hdr, &msg);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(msg.request, 1);
-    EXPECT_EQ(msg.datagram, 0);
-    EXPECT_EQ(msg.instance_id, 31);
-    EXPECT_EQ(msg.type, 63);
-    EXPECT_EQ(msg.command, 255);
-
-    // Message type is PLDM_ASYNC_REQUEST_NOTIFY
-    hdr.msg_type = PLDM_ASYNC_REQUEST_NOTIFY;
-
-    rc = pack_pldm_header(&hdr, &msg);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(msg.request, 1);
-    EXPECT_EQ(msg.datagram, 1);
-    EXPECT_EQ(msg.instance_id, 31);
-    EXPECT_EQ(msg.type, 63);
-    EXPECT_EQ(msg.command, 255);
-}
-
-TEST(PackPLDMMessage, ResponseMessageGoodPath)
-{
-    struct pldm_header_info hdr;
-    pldm_msg_hdr msg{};
-
-    // Message type is PLDM_RESPONSE and lower range of the field values
-    hdr.msg_type = PLDM_RESPONSE;
-    hdr.instance = 0;
-    hdr.pldm_type = 0;
-    hdr.command = 0;
-
-    auto rc = pack_pldm_header(&hdr, &msg);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(msg.request, 0);
-    EXPECT_EQ(msg.datagram, 0);
-    EXPECT_EQ(msg.instance_id, 0);
-    EXPECT_EQ(msg.type, 0);
-    EXPECT_EQ(msg.command, 0);
-
-    // Message type is PLDM_RESPONSE and upper range of the field values
-    hdr.instance = 31;
-    hdr.pldm_type = 63;
-    hdr.command = 255;
-
-    rc = pack_pldm_header(&hdr, &msg);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(msg.request, 0);
-    EXPECT_EQ(msg.datagram, 0);
-    EXPECT_EQ(msg.instance_id, 31);
-    EXPECT_EQ(msg.type, 63);
-    EXPECT_EQ(msg.command, 255);
-}
-
-TEST(UnpackPLDMMessage, BadPathTest)
-{
-    struct pldm_header_info hdr;
-
-    // PLDM message pointer is NULL
-    auto rc = unpack_pldm_header(nullptr, &hdr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(UnpackPLDMMessage, RequestMessageGoodPath)
-{
-    struct pldm_header_info hdr;
-    pldm_msg_hdr msg{};
-
-    // Unpack PLDM request message and lower range of field values
-    msg.request = 1;
-    auto rc = unpack_pldm_header(&msg, &hdr);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(hdr.msg_type, PLDM_REQUEST);
-    EXPECT_EQ(hdr.instance, 0);
-    EXPECT_EQ(hdr.pldm_type, 0);
-    EXPECT_EQ(hdr.command, 0);
-
-    // Unpack PLDM async request message and lower range of field values
-    msg.datagram = 1;
-    rc = unpack_pldm_header(&msg, &hdr);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(hdr.msg_type, PLDM_ASYNC_REQUEST_NOTIFY);
-
-    // Unpack PLDM request message and upper range of field values
-    msg.datagram = 0;
-    msg.instance_id = 31;
-    msg.type = 63;
-    msg.command = 255;
-    rc = unpack_pldm_header(&msg, &hdr);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(hdr.msg_type, PLDM_REQUEST);
-    EXPECT_EQ(hdr.instance, 31);
-    EXPECT_EQ(hdr.pldm_type, 63);
-    EXPECT_EQ(hdr.command, 255);
-}
-
-TEST(UnpackPLDMMessage, ResponseMessageGoodPath)
-{
-    struct pldm_header_info hdr;
-    pldm_msg_hdr msg{};
-
-    // Unpack PLDM response message and lower range of field values
-    auto rc = unpack_pldm_header(&msg, &hdr);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(hdr.msg_type, PLDM_RESPONSE);
-    EXPECT_EQ(hdr.instance, 0);
-    EXPECT_EQ(hdr.pldm_type, 0);
-    EXPECT_EQ(hdr.command, 0);
-
-    // Unpack PLDM response message and upper range of field values
-    msg.instance_id = 31;
-    msg.type = 63;
-    msg.command = 255;
-    rc = unpack_pldm_header(&msg, &hdr);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(hdr.msg_type, PLDM_RESPONSE);
-    EXPECT_EQ(hdr.instance, 31);
-    EXPECT_EQ(hdr.pldm_type, 63);
-    EXPECT_EQ(hdr.command, 255);
-}
-
-TEST(GetPLDMCommands, testEncodeRequest)
-{
-    uint8_t pldmType = 0x05;
-    ver32_t version{0xFF, 0xFF, 0xFF, 0xFF};
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_COMMANDS_REQ_BYTES>
-        requestMsg{};
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_get_commands_req(0, pldmType, version, request);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(0, memcmp(request->payload, &pldmType, sizeof(pldmType)));
-    EXPECT_EQ(0, memcmp(request->payload + sizeof(pldmType), &version,
-                        sizeof(version)));
-}
-
-TEST(GetPLDMCommands, testDecodeRequest)
-{
-    uint8_t pldmType = 0x05;
-    ver32_t version{0xFF, 0xFF, 0xFF, 0xFF};
-    uint8_t pldmTypeOut{};
-    ver32_t versionOut{0xFF, 0xFF, 0xFF, 0xFF};
-    std::array<uint8_t, hdrSize + PLDM_GET_COMMANDS_REQ_BYTES> requestMsg{};
-
-    memcpy(requestMsg.data() + hdrSize, &pldmType, sizeof(pldmType));
-    memcpy(requestMsg.data() + sizeof(pldmType) + hdrSize, &version,
-           sizeof(version));
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = decode_get_commands_req(request, requestMsg.size() - hdrSize,
-                                      &pldmTypeOut, &versionOut);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(pldmTypeOut, pldmType);
-    EXPECT_EQ(0, memcmp(&versionOut, &version, sizeof(version)));
-}
-
-TEST(GetPLDMCommands, testEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_COMMANDS_RESP_BYTES>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    std::array<bitfield8_t, PLDM_MAX_CMDS_PER_TYPE / 8> commands{};
-    commands[0].byte = 1;
-    commands[1].byte = 2;
-    commands[2].byte = 3;
-
-    auto rc =
-        encode_get_commands_resp(0, PLDM_SUCCESS, commands.data(), response);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    uint8_t* payload_ptr = response->payload;
-    EXPECT_EQ(completionCode, payload_ptr[0]);
-    EXPECT_EQ(1, payload_ptr[sizeof(completionCode)]);
-    EXPECT_EQ(2,
-              payload_ptr[sizeof(completionCode) + sizeof(commands[0].byte)]);
-    EXPECT_EQ(3, payload_ptr[sizeof(completionCode) + sizeof(commands[0].byte) +
-                             sizeof(commands[1].byte)]);
-}
-
-TEST(GetPLDMTypes, testEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_TYPES_RESP_BYTES>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    std::array<bitfield8_t, PLDM_MAX_TYPES / 8> types{};
-    types[0].byte = 1;
-    types[1].byte = 2;
-    types[2].byte = 3;
-
-    auto rc = encode_get_types_resp(0, PLDM_SUCCESS, types.data(), response);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    uint8_t* payload_ptr = response->payload;
-    EXPECT_EQ(completionCode, payload_ptr[0]);
-    EXPECT_EQ(1, payload_ptr[sizeof(completionCode)]);
-    EXPECT_EQ(2, payload_ptr[sizeof(completionCode) + sizeof(types[0].byte)]);
-    EXPECT_EQ(3, payload_ptr[sizeof(completionCode) + sizeof(types[0].byte) +
-                             sizeof(types[1].byte)]);
-}
-
-TEST(GetPLDMTypes, testGoodDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_TYPES_RESP_BYTES> responseMsg{};
-    responseMsg[1 + hdrSize] = 1;
-    responseMsg[2 + hdrSize] = 2;
-    responseMsg[3 + hdrSize] = 3;
-    std::array<bitfield8_t, PLDM_MAX_TYPES / 8> outTypes{};
-
-    uint8_t completion_code;
-    responseMsg[hdrSize] = PLDM_SUCCESS;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_get_types_resp(response, responseMsg.size() - hdrSize,
-                                    &completion_code, outTypes.data());
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completion_code, PLDM_SUCCESS);
-    EXPECT_EQ(responseMsg[1 + hdrSize], outTypes[0].byte);
-    EXPECT_EQ(responseMsg[2 + hdrSize], outTypes[1].byte);
-    EXPECT_EQ(responseMsg[3 + hdrSize], outTypes[2].byte);
-}
-
-TEST(GetPLDMTypes, testBadDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_TYPES_RESP_BYTES> responseMsg{};
-    responseMsg[1 + hdrSize] = 1;
-    responseMsg[2 + hdrSize] = 2;
-    responseMsg[3 + hdrSize] = 3;
-    std::array<bitfield8_t, PLDM_MAX_TYPES / 8> outTypes{};
-
-    uint8_t retcompletion_code = 0;
-    responseMsg[hdrSize] = PLDM_SUCCESS;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_get_types_resp(response, responseMsg.size() - hdrSize - 1,
-                                    &retcompletion_code, outTypes.data());
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetPLDMCommands, testGoodDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_COMMANDS_RESP_BYTES> responseMsg{};
-    responseMsg[1 + hdrSize] = 1;
-    responseMsg[2 + hdrSize] = 2;
-    responseMsg[3 + hdrSize] = 3;
-    std::array<bitfield8_t, PLDM_MAX_CMDS_PER_TYPE / 8> outTypes{};
-
-    uint8_t completion_code;
-    responseMsg[hdrSize] = PLDM_SUCCESS;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_get_commands_resp(response, responseMsg.size() - hdrSize,
-                                       &completion_code, outTypes.data());
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completion_code, PLDM_SUCCESS);
-    EXPECT_EQ(responseMsg[1 + hdrSize], outTypes[0].byte);
-    EXPECT_EQ(responseMsg[2 + hdrSize], outTypes[1].byte);
-    EXPECT_EQ(responseMsg[3 + hdrSize], outTypes[2].byte);
-}
-
-TEST(GetPLDMCommands, testBadDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_COMMANDS_RESP_BYTES> responseMsg{};
-    responseMsg[1 + hdrSize] = 1;
-    responseMsg[2 + hdrSize] = 2;
-    responseMsg[3 + hdrSize] = 3;
-    std::array<bitfield8_t, PLDM_MAX_CMDS_PER_TYPE / 8> outTypes{};
-
-    uint8_t retcompletion_code = 0;
-    responseMsg[hdrSize] = PLDM_SUCCESS;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc =
-        decode_get_commands_resp(response, responseMsg.size() - hdrSize - 1,
-                                 &retcompletion_code, outTypes.data());
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetPLDMVersion, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_REQ_BYTES>
-        requestMsg{};
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    uint8_t pldmType = 0x03;
-    uint32_t transferHandle = 0x0;
-    uint8_t opFlag = 0x01;
-
-    auto rc =
-        encode_get_version_req(0, transferHandle, opFlag, pldmType, request);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(
-        0, memcmp(request->payload, &transferHandle, sizeof(transferHandle)));
-    EXPECT_EQ(0, memcmp(request->payload + sizeof(transferHandle), &opFlag,
-                        sizeof(opFlag)));
-    EXPECT_EQ(0,
-              memcmp(request->payload + sizeof(transferHandle) + sizeof(opFlag),
-                     &pldmType, sizeof(pldmType)));
-}
-
-TEST(GetPLDMVersion, testBadEncodeRequest)
-{
-    uint8_t pldmType = 0x03;
-    uint32_t transferHandle = 0x0;
-    uint8_t opFlag = 0x01;
-
-    auto rc =
-        encode_get_version_req(0, transferHandle, opFlag, pldmType, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetPLDMVersion, testEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    uint32_t transferHandle = 0;
-    uint8_t flag = PLDM_START_AND_END;
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_RESP_BYTES>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    ver32_t version = {0xFF, 0xFF, 0xFF, 0xFF};
-
-    auto rc = encode_get_version_resp(0, PLDM_SUCCESS, 0, PLDM_START_AND_END,
-                                      &version, sizeof(ver32_t), response);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, response->payload[0]);
-    EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]),
-                        &transferHandle, sizeof(transferHandle)));
-    EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(transferHandle),
-                        &flag, sizeof(flag)));
-    EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(transferHandle) + sizeof(flag),
-                        &version, sizeof(version)));
-}
-
-TEST(GetPLDMVersion, testDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_VERSION_REQ_BYTES> requestMsg{};
-    uint32_t transferHandle = 0x0;
-    uint32_t retTransferHandle = 0x0;
-    uint8_t flag = PLDM_GET_FIRSTPART;
-    uint8_t retFlag = PLDM_GET_FIRSTPART;
-    uint8_t pldmType = PLDM_BASE;
-    uint8_t retType = PLDM_BASE;
-
-    memcpy(requestMsg.data() + hdrSize, &transferHandle,
-           sizeof(transferHandle));
-    memcpy(requestMsg.data() + sizeof(transferHandle) + hdrSize, &flag,
-           sizeof(flag));
-    memcpy(requestMsg.data() + sizeof(transferHandle) + sizeof(flag) + hdrSize,
-           &pldmType, sizeof(pldmType));
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = decode_get_version_req(request, requestMsg.size() - hdrSize,
-                                     &retTransferHandle, &retFlag, &retType);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(transferHandle, retTransferHandle);
-    EXPECT_EQ(flag, retFlag);
-    EXPECT_EQ(pldmType, retType);
-}
-
-TEST(GetPLDMVersion, testDecodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_RESP_BYTES>
-        responseMsg{};
-    uint32_t transferHandle = 0x0;
-    uint32_t retTransferHandle = 0x0;
-    uint8_t flag = PLDM_START_AND_END;
-    uint8_t retFlag = PLDM_START_AND_END;
-    uint8_t completionCode = 0;
-    ver32_t version = {0xFF, 0xFF, 0xFF, 0xFF};
-    ver32_t versionOut;
-    uint8_t completion_code;
-
-    memcpy(responseMsg.data() + sizeof(completionCode) + hdrSize,
-           &transferHandle, sizeof(transferHandle));
-    memcpy(responseMsg.data() + sizeof(completionCode) +
-               sizeof(transferHandle) + hdrSize,
-           &flag, sizeof(flag));
-    memcpy(responseMsg.data() + sizeof(completionCode) +
-               sizeof(transferHandle) + sizeof(flag) + hdrSize,
-           &version, sizeof(version));
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_get_version_resp(response, responseMsg.size() - hdrSize,
-                                      &completion_code, &retTransferHandle,
-                                      &retFlag, &versionOut);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(transferHandle, retTransferHandle);
-    EXPECT_EQ(flag, retFlag);
-
-    EXPECT_EQ(versionOut.major, version.major);
-    EXPECT_EQ(versionOut.minor, version.minor);
-    EXPECT_EQ(versionOut.update, version.update);
-    EXPECT_EQ(versionOut.alpha, version.alpha);
-}
-
-TEST(GetTID, testEncodeRequest)
-{
-    pldm_msg request{};
-
-    auto rc = encode_get_tid_req(0, &request);
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-}
-
-TEST(GetTID, testEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_TID_RESP_BYTES>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    uint8_t tid = 1;
-
-    auto rc = encode_get_tid_resp(0, PLDM_SUCCESS, tid, response);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    uint8_t* payload = response->payload;
-    EXPECT_EQ(completionCode, payload[0]);
-    EXPECT_EQ(1, payload[sizeof(completionCode)]);
-}
-
-TEST(GetTID, testDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_TID_RESP_BYTES> responseMsg{};
-    responseMsg[1 + hdrSize] = 1;
-
-    uint8_t tid;
-    uint8_t completion_code;
-    responseMsg[hdrSize] = PLDM_SUCCESS;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_get_tid_resp(response, responseMsg.size() - hdrSize,
-                                  &completion_code, &tid);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completion_code, PLDM_SUCCESS);
-    EXPECT_EQ(tid, 1);
-}
-
-TEST(MultipartReceive, testDecodeRequestPass)
-{
-    constexpr uint8_t kPldmType = PLDM_BASE;
-    constexpr uint8_t kFlag = PLDM_XFER_FIRST_PART;
-    constexpr uint32_t kTransferCtx = 0x01;
-    constexpr uint32_t kTransferHandle = 0x10;
-    constexpr uint32_t kSectionOffset = 0x0;
-    constexpr uint32_t kSectionLength = 0x10;
-    uint8_t pldm_type = 0x0;
-    uint8_t flag = PLDM_GET_FIRSTPART;
-    uint32_t transfer_ctx;
-    uint32_t transfer_handle;
-    uint32_t section_offset;
-    uint32_t section_length;
-
-    // Header values don't matter for this test.
-    pldm_msg_hdr hdr{};
-    // Assign values to the packet struct and memcpy to ensure correct byte
-    // ordering.
-    pldm_multipart_receive_req req_pkt = {
-        .pldm_type = kPldmType,
-        .transfer_opflag = kFlag,
-        .transfer_ctx = kTransferCtx,
-        .transfer_handle = kTransferHandle,
-        .section_offset = kSectionOffset,
-        .section_length = kSectionLength,
-    };
-    std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
-    std::memcpy(req.data(), &hdr, sizeof(hdr));
-    std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
-
-    pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
-    int rc = decode_multipart_receive_req(
-        pldm_request, req.size() - hdrSize, &pldm_type, &flag, &transfer_ctx,
-        &transfer_handle, &section_offset, &section_length);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(pldm_type, kPldmType);
-    EXPECT_EQ(flag, kFlag);
-    EXPECT_EQ(transfer_ctx, kTransferCtx);
-    EXPECT_EQ(transfer_handle, kTransferHandle);
-    EXPECT_EQ(section_offset, kSectionOffset);
-    EXPECT_EQ(section_length, kSectionLength);
-}
-
-TEST(MultipartReceive, testDecodeRequestFailNullData)
-{
-    EXPECT_EQ(decode_multipart_receive_req(NULL, 0, NULL, NULL, NULL, NULL,
-                                           NULL, NULL),
-              PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(MultipartReceive, testDecodeRequestFailBadLength)
-{
-    constexpr uint8_t kPldmType = PLDM_BASE;
-    constexpr uint8_t kFlag = PLDM_XFER_FIRST_PART;
-    uint8_t pldm_type;
-    uint8_t flag;
-    uint32_t transfer_ctx;
-    uint32_t transfer_handle;
-    uint32_t section_offset;
-    uint32_t section_length;
-
-    // Header values don't matter for this test.
-    pldm_msg_hdr hdr{};
-    // Assign values to the packet struct and memcpy to ensure correct byte
-    // ordering.
-    pldm_multipart_receive_req req_pkt{};
-    req_pkt.pldm_type = kPldmType;
-    req_pkt.transfer_opflag = kFlag;
-
-    std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
-    std::memcpy(req.data(), &hdr, sizeof(hdr));
-    std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
-
-    pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
-    EXPECT_EQ(decode_multipart_receive_req(
-                  pldm_request, (req.size() - hdrSize) + 1, &pldm_type, &flag,
-                  &transfer_ctx, &transfer_handle, &section_offset,
-                  &section_length),
-              PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(MultipartReceive, testDecodeRequestFailBadPldmType)
-{
-    constexpr uint8_t kPldmType = 0xff;
-    constexpr uint8_t kFlag = PLDM_XFER_FIRST_PART;
-    uint8_t pldm_type;
-    uint8_t flag;
-    uint32_t transfer_ctx;
-    uint32_t transfer_handle;
-    uint32_t section_offset;
-    uint32_t section_length;
-
-    // Header values don't matter for this test.
-    pldm_msg_hdr hdr{};
-    // Assign values to the packet struct and memcpy to ensure correct byte
-    // ordering.
-    pldm_multipart_receive_req req_pkt{};
-    req_pkt.pldm_type = kPldmType;
-    req_pkt.transfer_opflag = kFlag;
-
-    std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
-    std::memcpy(req.data(), &hdr, sizeof(hdr));
-    std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
-
-    pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
-    EXPECT_EQ(decode_multipart_receive_req(pldm_request, req.size() - hdrSize,
-                                           &pldm_type, &flag, &transfer_ctx,
-                                           &transfer_handle, &section_offset,
-                                           &section_length),
-              PLDM_ERROR_INVALID_PLDM_TYPE);
-}
-
-TEST(MultipartReceive, testDecodeRequestFailBadTransferFlag)
-{
-    constexpr uint8_t kPldmType = PLDM_BASE;
-    constexpr uint8_t kFlag = PLDM_XFER_CURRENT_PART + 0x10;
-    uint8_t pldm_type;
-    uint8_t flag;
-    uint32_t transfer_ctx;
-    uint32_t transfer_handle;
-    uint32_t section_offset;
-    uint32_t section_length;
-
-    // Header values don't matter for this test.
-    pldm_msg_hdr hdr{};
-    // Assign values to the packet struct and memcpy to ensure correct byte
-    // ordering.
-    pldm_multipart_receive_req req_pkt{};
-    req_pkt.pldm_type = kPldmType;
-    req_pkt.transfer_opflag = kFlag;
-
-    std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
-    std::memcpy(req.data(), &hdr, sizeof(hdr));
-    std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
-
-    pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
-    EXPECT_EQ(decode_multipart_receive_req(pldm_request, req.size() - hdrSize,
-                                           &pldm_type, &flag, &transfer_ctx,
-                                           &transfer_handle, &section_offset,
-                                           &section_length),
-              PLDM_INVALID_TRANSFER_OPERATION_FLAG);
-}
-
-TEST(MultipartReceive, testDecodeRequestFailBadOffset)
-{
-    constexpr uint8_t kPldmType = PLDM_BASE;
-    constexpr uint8_t kFlag = PLDM_XFER_NEXT_PART;
-    constexpr uint32_t kTransferHandle = 0x01;
-    constexpr uint32_t kSectionOffset = 0x0;
-    uint8_t pldm_type;
-    uint8_t flag;
-    uint32_t transfer_ctx;
-    uint32_t transfer_handle;
-    uint32_t section_offset;
-    uint32_t section_length;
-
-    // Header values don't matter for this test.
-    pldm_msg_hdr hdr{};
-    // Assign values to the packet struct and memcpy to ensure correct byte
-    // ordering.
-    pldm_multipart_receive_req req_pkt{};
-    req_pkt.pldm_type = kPldmType;
-    req_pkt.transfer_opflag = kFlag;
-    req_pkt.transfer_handle = kTransferHandle;
-    req_pkt.section_offset = kSectionOffset;
-
-    std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
-    std::memcpy(req.data(), &hdr, sizeof(hdr));
-    std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
-
-    pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
-    EXPECT_EQ(decode_multipart_receive_req(pldm_request, req.size() - hdrSize,
-                                           &pldm_type, &flag, &transfer_ctx,
-                                           &transfer_handle, &section_offset,
-                                           &section_length),
-              PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(MultipartReceive, testDecodeRequestFailBadHandle)
-{
-    constexpr uint8_t kPldmType = PLDM_BASE;
-    constexpr uint8_t kFlag = PLDM_XFER_NEXT_PART;
-    constexpr uint32_t kSectionOffset = 0x100;
-    constexpr uint32_t kTransferHandle = 0x0;
-    uint8_t pldm_type;
-    uint8_t flag;
-    uint32_t transfer_ctx;
-    uint32_t transfer_handle;
-    uint32_t section_offset;
-    uint32_t section_length;
-
-    // Header values don't matter for this test.
-    pldm_msg_hdr hdr{};
-    // Assign values to the packet struct and memcpy to ensure correct byte
-    // ordering.
-    pldm_multipart_receive_req req_pkt{};
-    req_pkt.pldm_type = kPldmType;
-    req_pkt.transfer_opflag = kFlag;
-    req_pkt.transfer_handle = kTransferHandle;
-    req_pkt.section_offset = kSectionOffset;
-
-    std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
-    std::memcpy(req.data(), &hdr, sizeof(hdr));
-    std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
-
-    pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
-    EXPECT_EQ(decode_multipart_receive_req(pldm_request, req.size() - hdrSize,
-                                           &pldm_type, &flag, &transfer_ctx,
-                                           &transfer_handle, &section_offset,
-                                           &section_length),
-              PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(CcOnlyResponse, testEncode)
-{
-    struct pldm_msg responseMsg;
-
-    auto rc =
-        encode_cc_only_resp(0 /*instance id*/, 1 /*pldm type*/, 2 /*command*/,
-                            3 /*complection code*/, &responseMsg);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    auto p = reinterpret_cast<uint8_t*>(&responseMsg);
-    EXPECT_THAT(std::vector<uint8_t>(p, p + sizeof(responseMsg)),
-                ElementsAreArray({0, 1, 2, 3}));
-
-    rc = encode_cc_only_resp(PLDM_INSTANCE_MAX + 1, 1, 2, 3, &responseMsg);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_cc_only_resp(0, 1, 2, 3, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
diff --git a/subprojects/libpldm/tests/libpldm_bios_table_test.cpp b/subprojects/libpldm/tests/libpldm_bios_table_test.cpp
deleted file mode 100644
index a307264..0000000
--- a/subprojects/libpldm/tests/libpldm_bios_table_test.cpp
+++ /dev/null
@@ -1,1136 +0,0 @@
-#include <endian.h>
-#include <string.h>
-
-#include <cstring>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "libpldm/base.h"
-#include "libpldm/bios.h"
-#include "libpldm/bios_table.h"
-#include "libpldm/utils.h"
-
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-
-using testing::ElementsAreArray;
-using Table = std::vector<uint8_t>;
-
-void buildTable(Table& table)
-{
-    auto padSize = ((table.size() % 4) ? (4 - table.size() % 4) : 0);
-    table.insert(table.end(), padSize, 0);
-    uint32_t checksum = crc32(table.data(), table.size());
-    checksum = htole32(checksum);
-    uint8_t a[4];
-    std::memcpy(a, &checksum, sizeof(checksum));
-    table.insert(table.end(), std::begin(a), std::end(a));
-}
-
-template <typename First, typename... Rest>
-void buildTable(Table& table, First& first, Rest&... rest)
-{
-    table.insert(table.end(), first.begin(), first.end());
-    buildTable(table, rest...);
-}
-
-TEST(AttrTable, HeaderDecodeTest)
-{
-    std::vector<uint8_t> enumEntry{
-        2, 0, /* attr handle */
-        0,    /* attr type */
-        1, 0, /* attr name handle (string handle) */
-        2,    /* number of possible value */
-        2, 0, /* possible value handle */
-        3, 0, /* possible value handle */
-        1,    /* number of default value */
-        0     /* defaut value string handle index */
-    };
-    auto entry =
-        reinterpret_cast<struct pldm_bios_attr_table_entry*>(enumEntry.data());
-    auto attrHandle = pldm_bios_table_attr_entry_decode_attribute_handle(entry);
-    EXPECT_EQ(attrHandle, 2);
-    auto attrType = pldm_bios_table_attr_entry_decode_attribute_type(entry);
-    EXPECT_EQ(attrType, 0);
-    auto stringHandle = pldm_bios_table_attr_entry_decode_string_handle(entry);
-    EXPECT_EQ(stringHandle, 1);
-}
-
-TEST(AttrTable, EnumEntryDecodeTest)
-{
-    std::vector<uint8_t> enumEntry{
-        0, 0, /* attr handle */
-        0,    /* attr type */
-        1, 0, /* attr name handle */
-        2,    /* number of possible value */
-        2, 0, /* possible value handle */
-        3, 0, /* possible value handle */
-        1,    /* number of default value */
-        1     /* defaut value string handle index */
-    };
-
-    auto entry =
-        reinterpret_cast<struct pldm_bios_attr_table_entry*>(enumEntry.data());
-    uint8_t pvNumber = pldm_bios_table_attr_entry_enum_decode_pv_num(entry);
-    EXPECT_EQ(pvNumber, 2);
-    pvNumber = 0;
-    auto rc =
-        pldm_bios_table_attr_entry_enum_decode_pv_num_check(entry, &pvNumber);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(pvNumber, 2);
-
-    std::vector<uint16_t> pvHandles(pvNumber, 0);
-    pvNumber = pldm_bios_table_attr_entry_enum_decode_pv_hdls(
-        entry, pvHandles.data(), pvHandles.size());
-    EXPECT_EQ(pvNumber, 2);
-    EXPECT_EQ(pvHandles[0], 2);
-    EXPECT_EQ(pvHandles[1], 3);
-    pvHandles.resize(1);
-    pvNumber = pldm_bios_table_attr_entry_enum_decode_pv_hdls(
-        entry, pvHandles.data(), pvHandles.size());
-    EXPECT_EQ(pvNumber, 1);
-    EXPECT_EQ(pvHandles[0], 2);
-
-    pvHandles.resize(2);
-    rc = pldm_bios_table_attr_entry_enum_decode_pv_hdls_check(
-        entry, pvHandles.data(), pvHandles.size());
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(pvHandles[0], 2);
-    EXPECT_EQ(pvHandles[1], 3);
-    rc = pldm_bios_table_attr_entry_enum_decode_pv_hdls_check(
-        entry, pvHandles.data(), 1);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint8_t defNumber = pldm_bios_table_attr_entry_enum_decode_def_num(entry);
-    EXPECT_EQ(defNumber, 1);
-    std::vector<uint8_t> defIndices(defNumber);
-    rc = pldm_bios_table_attr_entry_enum_decode_def_indices(
-        entry, defIndices.data(), defIndices.size());
-    EXPECT_EQ(rc, defNumber);
-    EXPECT_THAT(defIndices, ElementsAreArray({1}));
-
-    defNumber = 0;
-    rc =
-        pldm_bios_table_attr_entry_enum_decode_def_num_check(entry, &defNumber);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(defNumber, 1);
-
-    rc =
-        pldm_bios_table_attr_entry_enum_decode_pv_num_check(nullptr, &pvNumber);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = pldm_bios_table_attr_entry_enum_decode_def_num_check(entry, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    entry->attr_type = PLDM_BIOS_STRING;
-    rc = pldm_bios_table_attr_entry_enum_decode_pv_num_check(entry, &pvNumber);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc =
-        pldm_bios_table_attr_entry_enum_decode_def_num_check(entry, &defNumber);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc =
-        pldm_bios_table_attr_entry_enum_decode_pv_hdls_check(entry, nullptr, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(AttrTable, EnumEntryEncodeTest)
-{
-    std::vector<uint8_t> enumEntry{
-        0, 0, /* attr handle */
-        0,    /* attr type */
-        1, 0, /* attr name handle */
-        2,    /* number of possible value */
-        2, 0, /* possible value handle */
-        3, 0, /* possible value handle */
-        1,    /* number of default value */
-        0     /* defaut value string handle index */
-    };
-
-    std::vector<uint16_t> pv_hdls{2, 3};
-    std::vector<uint8_t> defs{0};
-
-    struct pldm_bios_table_attr_entry_enum_info info = {
-        1,              /* name handle */
-        false,          /* read only */
-        2,              /* pv number */
-        pv_hdls.data(), /* pv handle */
-        1,              /*def number */
-        defs.data()     /*def index*/
-    };
-    auto encodeLength = pldm_bios_table_attr_entry_enum_encode_length(2, 1);
-    EXPECT_EQ(encodeLength, enumEntry.size());
-
-    std::vector<uint8_t> encodeEntry(encodeLength, 0);
-    pldm_bios_table_attr_entry_enum_encode(encodeEntry.data(),
-                                           encodeEntry.size(), &info);
-    // set attr handle = 0
-    encodeEntry[0] = 0;
-    encodeEntry[1] = 0;
-
-    EXPECT_EQ(enumEntry, encodeEntry);
-
-    EXPECT_DEATH(pldm_bios_table_attr_entry_enum_encode(
-                     encodeEntry.data(), encodeEntry.size() - 1, &info),
-                 "length <= entry_length");
-    auto rc = pldm_bios_table_attr_entry_enum_encode_check(
-        encodeEntry.data(), encodeEntry.size(), &info);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    // set attr handle = 0
-    encodeEntry[0] = 0;
-    encodeEntry[1] = 0;
-
-    EXPECT_EQ(enumEntry, encodeEntry);
-    rc = pldm_bios_table_attr_entry_enum_encode_check(
-        encodeEntry.data(), encodeEntry.size() - 1, &info);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(AttrTable, StringEntryDecodeTest)
-{
-    std::vector<uint8_t> stringEntry{
-        1,   0,       /* attr handle */
-        1,            /* attr type */
-        12,  0,       /* attr name handle */
-        1,            /* string type */
-        1,   0,       /* minimum length of the string in bytes */
-        100, 0,       /* maximum length of the string in bytes */
-        3,   0,       /* length of default string in length */
-        'a', 'b', 'c' /* default string  */
-    };
-
-    auto entry = reinterpret_cast<struct pldm_bios_attr_table_entry*>(
-        stringEntry.data());
-    auto stringType =
-        pldm_bios_table_attr_entry_string_decode_string_type(entry);
-    EXPECT_EQ(stringType, 1);
-    auto minLength = pldm_bios_table_attr_entry_string_decode_min_length(entry);
-    EXPECT_EQ(minLength, 1);
-    auto maxLength = pldm_bios_table_attr_entry_string_decode_max_length(entry);
-    EXPECT_EQ(maxLength, 100);
-
-    uint16_t defStringLength =
-        pldm_bios_table_attr_entry_string_decode_def_string_length(entry);
-    EXPECT_EQ(defStringLength, 3);
-    std::vector<char> defString(defStringLength + 1);
-    auto rc = pldm_bios_table_attr_entry_string_decode_def_string(
-        entry, defString.data(), defString.size());
-    EXPECT_EQ(rc, 3);
-    EXPECT_STREQ(defString.data(), "abc");
-    rc = pldm_bios_table_attr_entry_string_decode_def_string(
-        entry, defString.data(), defString.size() - 1);
-    EXPECT_EQ(rc, 2);
-    EXPECT_STREQ(defString.data(), "ab");
-
-    defStringLength = 0;
-    rc = pldm_bios_table_attr_entry_string_decode_def_string_length_check(
-        entry, &defStringLength);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(defStringLength, 3);
-
-    rc = pldm_bios_table_attr_entry_string_decode_def_string_length_check(
-        entry, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = pldm_bios_table_attr_entry_string_decode_def_string_length_check(
-        nullptr, &defStringLength);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    entry->attr_type = PLDM_BIOS_INTEGER;
-    rc = pldm_bios_table_attr_entry_string_decode_def_string_length_check(
-        entry, &defStringLength);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = pldm_bios_table_attr_entry_string_decode_def_string_length_check(
-        nullptr, &defStringLength);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(AttrTable, StringEntryEncodeTest)
-{
-    std::vector<uint8_t> stringEntry{
-        0,   0,        /* attr handle */
-        1,             /* attr type */
-        3,   0,        /* attr name handle */
-        1,             /* string type */
-        1,   0,        /* min string length */
-        100, 0,        /* max string length */
-        3,   0,        /* default string length */
-        'a', 'b', 'c', /* defaul string */
-    };
-
-    struct pldm_bios_table_attr_entry_string_info info = {
-        3,     /* name handle */
-        false, /* read only */
-        1,     /* string type ascii */
-        1,     /* min length */
-        100,   /* max length */
-        3,     /* def length */
-        "abc", /* def string */
-    };
-    auto encodeLength = pldm_bios_table_attr_entry_string_encode_length(3);
-    EXPECT_EQ(encodeLength, stringEntry.size());
-
-    std::vector<uint8_t> encodeEntry(encodeLength, 0);
-    pldm_bios_table_attr_entry_string_encode(encodeEntry.data(),
-                                             encodeEntry.size(), &info);
-    // set attr handle = 0
-    encodeEntry[0] = 0;
-    encodeEntry[1] = 0;
-
-    EXPECT_EQ(stringEntry, encodeEntry);
-
-    EXPECT_DEATH(pldm_bios_table_attr_entry_string_encode(
-                     encodeEntry.data(), encodeEntry.size() - 1, &info),
-                 "length <= entry_length");
-    auto rc = pldm_bios_table_attr_entry_string_encode_check(
-        encodeEntry.data(), encodeEntry.size(), &info);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    // set attr handle = 0
-    encodeEntry[0] = 0;
-    encodeEntry[1] = 0;
-
-    EXPECT_EQ(stringEntry, encodeEntry);
-    rc = pldm_bios_table_attr_entry_string_encode_check(
-        encodeEntry.data(), encodeEntry.size() - 1, &info);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-    std::swap(info.max_length, info.min_length);
-    const char* errmsg;
-    rc = pldm_bios_table_attr_entry_string_info_check(&info, &errmsg);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    EXPECT_STREQ(
-        "MinimumStingLength should not be greater than MaximumStringLength",
-        errmsg);
-    rc = pldm_bios_table_attr_entry_string_encode_check(
-        encodeEntry.data(), encodeEntry.size(), &info);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    std::swap(info.max_length, info.min_length);
-
-    std::vector<uint8_t> stringEntryLength0{
-        0,   0, /* attr handle */
-        1,      /* attr type */
-        3,   0, /* attr name handle */
-        1,      /* string type */
-        1,   0, /* min string length */
-        100, 0, /* max string length */
-        0,   0, /* default string length */
-    };
-
-    info.def_length = 0;
-    info.def_string = nullptr;
-
-    encodeLength = pldm_bios_table_attr_entry_string_encode_length(0);
-    EXPECT_EQ(encodeLength, stringEntryLength0.size());
-
-    encodeEntry.resize(encodeLength);
-    pldm_bios_table_attr_entry_string_encode(encodeEntry.data(),
-                                             encodeEntry.size(), &info);
-    // set attr handle = 0
-    encodeEntry[0] = 0;
-    encodeEntry[1] = 0;
-
-    EXPECT_EQ(stringEntryLength0, encodeEntry);
-}
-
-TEST(AttrTable, integerEntryEncodeTest)
-{
-    std::vector<uint8_t> integerEntry{
-        0,  0,                   /* attr handle */
-        3,                       /* attr type */
-        1,  0,                   /* attr name handle */
-        1,  0, 0, 0, 0, 0, 0, 0, /* lower bound */
-        10, 0, 0, 0, 0, 0, 0, 0, /* upper bound */
-        2,  0, 0, 0,             /* scalar increment */
-        3,  0, 0, 0, 0, 0, 0, 0, /* defaut value */
-    };
-
-    std::vector<uint16_t> pv_hdls{2, 3};
-    std::vector<uint8_t> defs{0};
-
-    struct pldm_bios_table_attr_entry_integer_info info = {
-        1,     /* name handle */
-        false, /* read only */
-        1,     /* lower bound */
-        10,    /* upper bound */
-        2,     /* sacalar increment */
-        3      /* default value */
-    };
-    auto encodeLength = pldm_bios_table_attr_entry_integer_encode_length();
-    EXPECT_EQ(encodeLength, integerEntry.size());
-
-    std::vector<uint8_t> encodeEntry(encodeLength, 0);
-    pldm_bios_table_attr_entry_integer_encode(encodeEntry.data(),
-                                              encodeEntry.size(), &info);
-    // set attr handle = 0
-    encodeEntry[0] = 0;
-    encodeEntry[1] = 0;
-
-    EXPECT_EQ(integerEntry, encodeEntry);
-
-    EXPECT_DEATH(pldm_bios_table_attr_entry_integer_encode(
-                     encodeEntry.data(), encodeEntry.size() - 1, &info),
-                 "length <= entry_length");
-
-    auto rc = pldm_bios_table_attr_entry_integer_encode_check(
-        encodeEntry.data(), encodeEntry.size(), &info);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    // set attr handle = 0
-    encodeEntry[0] = 0;
-    encodeEntry[1] = 0;
-
-    EXPECT_EQ(integerEntry, encodeEntry);
-
-    rc = pldm_bios_table_attr_entry_integer_encode_check(
-        encodeEntry.data(), encodeEntry.size() - 1, &info);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    info.lower_bound = 100;
-    info.upper_bound = 50;
-    const char* errmsg;
-    rc = pldm_bios_table_attr_entry_integer_info_check(&info, &errmsg);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    EXPECT_STREQ("LowerBound should not be greater than UpperBound", errmsg);
-    rc = pldm_bios_table_attr_entry_integer_encode_check(
-        encodeEntry.data(), encodeEntry.size(), &info);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(AttrTable, integerEntryDecodeTest)
-{
-    std::vector<uint8_t> integerEntry{
-        0,  0,                   /* attr handle */
-        3,                       /* attr type */
-        1,  0,                   /* attr name handle */
-        1,  0, 0, 0, 0, 0, 0, 0, /* lower bound */
-        10, 0, 0, 0, 0, 0, 0, 0, /* upper bound */
-        2,  0, 0, 0,             /* scalar increment */
-        3,  0, 0, 0, 0, 0, 0, 0, /* defaut value */
-    };
-
-    uint64_t lower, upper, def;
-    uint32_t scalar;
-    auto entry = reinterpret_cast<struct pldm_bios_attr_table_entry*>(
-        integerEntry.data());
-    pldm_bios_table_attr_entry_integer_decode(entry, &lower, &upper, &scalar,
-                                              &def);
-    EXPECT_EQ(lower, 1u);
-    EXPECT_EQ(upper, 10u);
-    EXPECT_EQ(scalar, 2u);
-    EXPECT_EQ(def, 3u);
-}
-
-TEST(AttrTable, ItearatorTest)
-{
-    std::vector<uint8_t> enumEntry{
-        0, 0, /* attr handle */
-        0,    /* attr type */
-        1, 0, /* attr name handle */
-        2,    /* number of possible value */
-        2, 0, /* possible value handle */
-        3, 0, /* possible value handle */
-        1,    /* number of default value */
-        0     /* defaut value string handle index */
-    };
-    std::vector<uint8_t> stringEntry{
-        1,   0,       /* attr handle */
-        1,            /* attr type */
-        12,  0,       /* attr name handle */
-        1,            /* string type */
-        1,   0,       /* minimum length of the string in bytes */
-        100, 0,       /* maximum length of the string in bytes */
-        3,   0,       /* length of default string in length */
-        'a', 'b', 'c' /* default string  */
-    };
-    std::vector<uint8_t> integerEntry{
-        0,  0,                   /* attr handle */
-        3,                       /* attr type */
-        1,  0,                   /* attr name handle */
-        1,  0, 0, 0, 0, 0, 0, 0, /* lower bound */
-        10, 0, 0, 0, 0, 0, 0, 0, /* upper bound */
-        2,  0, 0, 0,             /* scalar increment */
-        3,  0, 0, 0, 0, 0, 0, 0, /* defaut value */
-    };
-
-    Table table;
-    buildTable(table, enumEntry, stringEntry, integerEntry, enumEntry);
-    auto iter = pldm_bios_table_iter_create(table.data(), table.size(),
-                                            PLDM_BIOS_ATTR_TABLE);
-    auto entry = pldm_bios_table_iter_attr_entry_value(iter);
-    auto rc = std::memcmp(entry, enumEntry.data(), enumEntry.size());
-    EXPECT_EQ(rc, 0);
-
-    pldm_bios_table_iter_next(iter);
-    entry = pldm_bios_table_iter_attr_entry_value(iter);
-    rc = std::memcmp(entry, stringEntry.data(), stringEntry.size());
-    EXPECT_EQ(rc, 0);
-
-    pldm_bios_table_iter_next(iter);
-    entry = pldm_bios_table_iter_attr_entry_value(iter);
-    rc = std::memcmp(entry, integerEntry.data(), integerEntry.size());
-    EXPECT_EQ(rc, 0);
-
-    pldm_bios_table_iter_next(iter);
-    entry = pldm_bios_table_iter_attr_entry_value(iter);
-    rc = std::memcmp(entry, enumEntry.data(), enumEntry.size());
-    EXPECT_EQ(rc, 0);
-
-    pldm_bios_table_iter_next(iter);
-    EXPECT_TRUE(pldm_bios_table_iter_is_end(iter));
-    pldm_bios_table_iter_free(iter);
-}
-
-TEST(AttrTable, FindTest)
-{
-    std::vector<uint8_t> enumEntry{
-        0, 0, /* attr handle */
-        0,    /* attr type */
-        1, 0, /* attr name handle */
-        2,    /* number of possible value */
-        2, 0, /* possible value handle */
-        3, 0, /* possible value handle */
-        1,    /* number of default value */
-        0     /* defaut value string handle index */
-    };
-    std::vector<uint8_t> stringEntry{
-        1,   0,       /* attr handle */
-        1,            /* attr type */
-        2,   0,       /* attr name handle */
-        1,            /* string type */
-        1,   0,       /* minimum length of the string in bytes */
-        100, 0,       /* maximum length of the string in bytes */
-        3,   0,       /* length of default string in length */
-        'a', 'b', 'c' /* default string  */
-    };
-    std::vector<uint8_t> integerEntry{
-        0,  0,                   /* attr handle */
-        3,                       /* attr type */
-        3,  0,                   /* attr name handle */
-        1,  0, 0, 0, 0, 0, 0, 0, /* lower bound */
-        10, 0, 0, 0, 0, 0, 0, 0, /* upper bound */
-        2,  0, 0, 0,             /* scalar increment */
-        3,  0, 0, 0, 0, 0, 0, 0, /* defaut value */
-    };
-
-    Table table;
-    buildTable(table, enumEntry, stringEntry, integerEntry, enumEntry);
-
-    auto entry =
-        pldm_bios_table_attr_find_by_handle(table.data(), table.size(), 1);
-    EXPECT_NE(entry, nullptr);
-    auto p = reinterpret_cast<const uint8_t*>(entry);
-    EXPECT_THAT(std::vector<uint8_t>(p, p + stringEntry.size()),
-                ElementsAreArray(stringEntry));
-
-    entry = pldm_bios_table_attr_find_by_handle(table.data(), table.size(), 3);
-    EXPECT_EQ(entry, nullptr);
-
-    entry = pldm_bios_table_attr_find_by_string_handle(table.data(),
-                                                       table.size(), 2);
-    EXPECT_NE(entry, nullptr);
-    p = reinterpret_cast<const uint8_t*>(entry);
-    EXPECT_THAT(std::vector<uint8_t>(p, p + stringEntry.size()),
-                ElementsAreArray(stringEntry));
-
-    entry = pldm_bios_table_attr_find_by_string_handle(table.data(),
-                                                       table.size(), 4);
-    EXPECT_EQ(entry, nullptr);
-}
-
-TEST(AttrValTable, HeaderDecodeTest)
-{
-    std::vector<uint8_t> enumEntry{
-        1, 0, /* attr handle */
-        0,    /* attr type */
-        2,    /* number of current value */
-        0,    /* current value string handle index */
-        1,    /* current value string handle index */
-    };
-    auto entry = reinterpret_cast<struct pldm_bios_attr_val_table_entry*>(
-        enumEntry.data());
-    auto attrHandle =
-        pldm_bios_table_attr_value_entry_decode_attribute_handle(entry);
-    EXPECT_EQ(attrHandle, 1);
-    auto attrType =
-        pldm_bios_table_attr_value_entry_decode_attribute_type(entry);
-    EXPECT_EQ(attrType, 0);
-}
-
-TEST(AttrValTable, EnumEntryEncodeTest)
-{
-    std::vector<uint8_t> enumEntry{
-        0, 0, /* attr handle */
-        0,    /* attr type */
-        2,    /* number of current value */
-        0,    /* current value string handle index */
-        1,    /* current value string handle index */
-    };
-
-    auto length = pldm_bios_table_attr_value_entry_encode_enum_length(2);
-    EXPECT_EQ(length, enumEntry.size());
-    std::vector<uint8_t> encodeEntry(length, 0);
-    uint8_t handles[] = {0, 1};
-    pldm_bios_table_attr_value_entry_encode_enum(
-        encodeEntry.data(), encodeEntry.size(), 0, 0, 2, handles);
-    EXPECT_EQ(encodeEntry, enumEntry);
-
-    EXPECT_DEATH(
-        pldm_bios_table_attr_value_entry_encode_enum(
-            encodeEntry.data(), encodeEntry.size() - 1, 0, 0, 2, handles),
-        "length <= entry_length");
-
-    auto rc = pldm_bios_table_attr_value_entry_encode_enum_check(
-        encodeEntry.data(), encodeEntry.size(), 0, PLDM_BIOS_ENUMERATION, 2,
-        handles);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(encodeEntry, enumEntry);
-    auto entry = reinterpret_cast<struct pldm_bios_attr_val_table_entry*>(
-        enumEntry.data());
-    entry->attr_type = PLDM_BIOS_ENUMERATION_READ_ONLY;
-    rc = pldm_bios_table_attr_value_entry_encode_enum_check(
-        encodeEntry.data(), encodeEntry.size(), 0,
-        PLDM_BIOS_ENUMERATION_READ_ONLY, 2, handles);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(encodeEntry, enumEntry);
-    rc = pldm_bios_table_attr_value_entry_encode_enum_check(
-        encodeEntry.data(), encodeEntry.size(), 0, PLDM_BIOS_PASSWORD, 2,
-        handles);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = pldm_bios_table_attr_value_entry_encode_enum_check(
-        encodeEntry.data(), encodeEntry.size() - 1, 0, PLDM_BIOS_ENUMERATION, 2,
-        handles);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(AttrValTable, EnumEntryDecodeTest)
-{
-    std::vector<uint8_t> enumEntry{
-        0, 0, /* attr handle */
-        0,    /* attr type */
-        2,    /* number of current value */
-        0,    /* current value string handle index */
-        1,    /* current value string handle index */
-    };
-
-    auto entry = reinterpret_cast<struct pldm_bios_attr_val_table_entry*>(
-        enumEntry.data());
-    auto number = pldm_bios_table_attr_value_entry_enum_decode_number(entry);
-    EXPECT_EQ(2, number);
-
-    std::vector<uint8_t> handles(2, 0);
-    auto rc = pldm_bios_table_attr_value_entry_enum_decode_handles(
-        entry, handles.data(), handles.size());
-    EXPECT_EQ(rc, 2);
-    EXPECT_EQ(handles[0], 0);
-    EXPECT_EQ(handles[1], 1);
-}
-
-TEST(AttrValTable, stringEntryEncodeTest)
-{
-    std::vector<uint8_t> stringEntry{
-        0,   0,        /* attr handle */
-        1,             /* attr type */
-        3,   0,        /* current string length */
-        'a', 'b', 'c', /* defaut value string handle index */
-    };
-
-    auto length = pldm_bios_table_attr_value_entry_encode_string_length(3);
-    EXPECT_EQ(length, stringEntry.size());
-    std::vector<uint8_t> encodeEntry(length, 0);
-    pldm_bios_table_attr_value_entry_encode_string(
-        encodeEntry.data(), encodeEntry.size(), 0, 1, 3, "abc");
-    EXPECT_EQ(encodeEntry, stringEntry);
-
-    EXPECT_DEATH(
-        pldm_bios_table_attr_value_entry_encode_string(
-            encodeEntry.data(), encodeEntry.size() - 1, 0, 1, 3, "abc"),
-        "length <= entry_length");
-
-    auto rc = pldm_bios_table_attr_value_entry_encode_string_check(
-        encodeEntry.data(), encodeEntry.size(), 0, PLDM_BIOS_STRING, 3, "abc");
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(encodeEntry, stringEntry);
-    auto entry = reinterpret_cast<struct pldm_bios_attr_val_table_entry*>(
-        stringEntry.data());
-    entry->attr_type = PLDM_BIOS_STRING_READ_ONLY;
-    rc = pldm_bios_table_attr_value_entry_encode_string_check(
-        encodeEntry.data(), encodeEntry.size(), 0, PLDM_BIOS_STRING_READ_ONLY,
-        3, "abc");
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(encodeEntry, stringEntry);
-    rc = pldm_bios_table_attr_value_entry_encode_string_check(
-        encodeEntry.data(), encodeEntry.size(), 0, PLDM_BIOS_PASSWORD, 3,
-        "abc");
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = pldm_bios_table_attr_value_entry_encode_string_check(
-        encodeEntry.data(), encodeEntry.size() - 1, 0, PLDM_BIOS_STRING, 3,
-        "abc");
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(AttrValTable, StringEntryDecodeTest)
-{
-    std::vector<uint8_t> stringEntry{
-        0,   0,        /* attr handle */
-        1,             /* attr type */
-        3,   0,        /* current string length */
-        'a', 'b', 'c', /* defaut value string handle index */
-    };
-
-    auto entry = reinterpret_cast<struct pldm_bios_attr_val_table_entry*>(
-        stringEntry.data());
-    auto length = pldm_bios_table_attr_value_entry_string_decode_length(entry);
-    EXPECT_EQ(3, length);
-
-    auto handle = pldm_bios_table_attr_value_entry_decode_handle(entry);
-    EXPECT_EQ(0, handle);
-
-    auto entryLength = pldm_bios_table_attr_value_entry_length(entry);
-    EXPECT_EQ(stringEntry.size(), entryLength);
-
-    variable_field currentString{};
-    pldm_bios_table_attr_value_entry_string_decode_string(entry,
-                                                          &currentString);
-    EXPECT_THAT(std::vector<uint8_t>(currentString.ptr,
-                                     currentString.ptr + currentString.length),
-                ElementsAreArray(std::vector<uint8_t>{'a', 'b', 'c'}));
-}
-
-TEST(AttrValTable, integerEntryEncodeTest)
-{
-    std::vector<uint8_t> integerEntry{
-        0,  0,                   /* attr handle */
-        3,                       /* attr type */
-        10, 0, 0, 0, 0, 0, 0, 0, /* current value */
-    };
-
-    auto length = pldm_bios_table_attr_value_entry_encode_integer_length();
-    EXPECT_EQ(length, integerEntry.size());
-    std::vector<uint8_t> encodeEntry(length, 0);
-    pldm_bios_table_attr_value_entry_encode_integer(
-        encodeEntry.data(), encodeEntry.size(), 0, PLDM_BIOS_INTEGER, 10);
-    EXPECT_EQ(encodeEntry, integerEntry);
-
-    EXPECT_DEATH(pldm_bios_table_attr_value_entry_encode_integer(
-                     encodeEntry.data(), encodeEntry.size() - 1, 0,
-                     PLDM_BIOS_INTEGER, 10),
-                 "length <= entry_length");
-
-    auto rc = pldm_bios_table_attr_value_entry_encode_integer_check(
-        encodeEntry.data(), encodeEntry.size(), 0, PLDM_BIOS_INTEGER, 10);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(encodeEntry, integerEntry);
-    auto entry = reinterpret_cast<struct pldm_bios_attr_val_table_entry*>(
-        integerEntry.data());
-    entry->attr_type = PLDM_BIOS_INTEGER_READ_ONLY;
-    rc = pldm_bios_table_attr_value_entry_encode_integer_check(
-        encodeEntry.data(), encodeEntry.size(), 0, PLDM_BIOS_INTEGER_READ_ONLY,
-        10);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(encodeEntry, integerEntry);
-
-    rc = pldm_bios_table_attr_value_entry_encode_integer_check(
-        encodeEntry.data(), encodeEntry.size(), 0, PLDM_BIOS_PASSWORD, 10);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = pldm_bios_table_attr_value_entry_encode_integer_check(
-        encodeEntry.data(), encodeEntry.size() - 1, 0,
-        PLDM_BIOS_INTEGER_READ_ONLY, 10);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(AttrValTable, integerEntryDecodeTest)
-{
-    std::vector<uint8_t> integerEntry{
-        0,  0,                   /* attr handle */
-        3,                       /* attr type */
-        10, 0, 0, 0, 0, 0, 0, 0, /* current value */
-    };
-
-    auto entry = reinterpret_cast<struct pldm_bios_attr_val_table_entry*>(
-        integerEntry.data());
-    auto cv = pldm_bios_table_attr_value_entry_integer_decode_cv(entry);
-    EXPECT_EQ(cv, 10u);
-}
-
-TEST(AttrValTable, IteratorTest)
-{
-    std::vector<uint8_t> enumEntry{
-        0, 0, /* attr handle */
-        0,    /* attr type */
-        2,    /* number of current value */
-        0,    /* current value string handle index */
-        1,    /* current value string handle index */
-    };
-    std::vector<uint8_t> stringEntry{
-        0,   0,        /* attr handle */
-        1,             /* attr type */
-        3,   0,        /* current string length */
-        'a', 'b', 'c', /* defaut value string handle index */
-    };
-    std::vector<uint8_t> integerEntry{
-        0,  0,                   /* attr handle */
-        3,                       /* attr type */
-        10, 0, 0, 0, 0, 0, 0, 0, /* current value */
-    };
-
-    Table table;
-    buildTable(table, enumEntry, stringEntry, integerEntry, enumEntry);
-
-    auto iter = pldm_bios_table_iter_create(table.data(), table.size(),
-                                            PLDM_BIOS_ATTR_VAL_TABLE);
-    auto entry = pldm_bios_table_iter_attr_value_entry_value(iter);
-
-    auto p = reinterpret_cast<const uint8_t*>(entry);
-    EXPECT_THAT(std::vector<uint8_t>(p, p + enumEntry.size()),
-                ElementsAreArray(enumEntry));
-
-    pldm_bios_table_iter_next(iter);
-    entry = pldm_bios_table_iter_attr_value_entry_value(iter);
-    p = reinterpret_cast<const uint8_t*>(entry);
-    EXPECT_THAT(std::vector<uint8_t>(p, p + stringEntry.size()),
-                ElementsAreArray(stringEntry));
-
-    pldm_bios_table_iter_next(iter);
-    entry = pldm_bios_table_iter_attr_value_entry_value(iter);
-    p = reinterpret_cast<const uint8_t*>(entry);
-    EXPECT_THAT(std::vector<uint8_t>(p, p + integerEntry.size()),
-                ElementsAreArray(integerEntry));
-
-    pldm_bios_table_iter_next(iter);
-    entry = pldm_bios_table_iter_attr_value_entry_value(iter);
-    p = reinterpret_cast<const uint8_t*>(entry);
-    EXPECT_THAT(std::vector<uint8_t>(p, p + enumEntry.size()),
-                ElementsAreArray(enumEntry));
-
-    pldm_bios_table_iter_next(iter);
-    EXPECT_TRUE(pldm_bios_table_iter_is_end(iter));
-
-    pldm_bios_table_iter_free(iter);
-}
-
-TEST(AttrValTable, FindTest)
-{
-    std::vector<uint8_t> enumEntry{
-        0, 0, /* attr handle */
-        0,    /* attr type */
-        2,    /* number of current value */
-        0,    /* current value string handle index */
-        1,    /* current value string handle index */
-    };
-    std::vector<uint8_t> stringEntry{
-        1,   0,        /* attr handle */
-        1,             /* attr type */
-        3,   0,        /* current string length */
-        'a', 'b', 'c', /* defaut value string handle index */
-    };
-    std::vector<uint8_t> integerEntry{
-        2,  0,                   /* attr handle */
-        3,                       /* attr type */
-        10, 0, 0, 0, 0, 0, 0, 0, /* current value */
-    };
-
-    Table table;
-    buildTable(table, enumEntry, stringEntry, integerEntry);
-
-    auto entry = pldm_bios_table_attr_value_find_by_handle(table.data(),
-                                                           table.size(), 1);
-    EXPECT_NE(entry, nullptr);
-    auto p = reinterpret_cast<const uint8_t*>(entry);
-    EXPECT_THAT(std::vector<uint8_t>(p, p + stringEntry.size()),
-                ElementsAreArray(stringEntry));
-
-    entry = pldm_bios_table_attr_value_find_by_handle(table.data(),
-                                                      table.size(), 3);
-    EXPECT_EQ(entry, nullptr);
-
-    auto firstEntry =
-        reinterpret_cast<struct pldm_bios_attr_val_table_entry*>(table.data());
-    firstEntry->attr_type = PLDM_BIOS_PASSWORD;
-    EXPECT_DEATH(pldm_bios_table_attr_value_find_by_handle(table.data(),
-                                                           table.size(), 1),
-                 "entry_length != NULL");
-}
-
-TEST(AttrValTable, CopyAndUpdateTest)
-{
-    std::vector<uint8_t> enumEntry{
-        0, 0, /* attr handle */
-        0,    /* attr type */
-        2,    /* number of current value */
-        0,    /* current value string handle index */
-        1,    /* current value string handle index */
-    };
-    std::vector<uint8_t> stringEntry{
-        1,   0,        /* attr handle */
-        1,             /* attr type */
-        3,   0,        /* current string length */
-        'a', 'b', 'c', /* defaut value string handle index */
-    };
-    std::vector<uint8_t> integerEntry{
-        2,  0,                   /* attr handle */
-        3,                       /* attr type */
-        10, 0, 0, 0, 0, 0, 0, 0, /* current value */
-    };
-
-    Table srcTable;
-    buildTable(srcTable, enumEntry, stringEntry, integerEntry);
-
-    std::vector<uint8_t> stringEntry1{
-        1,   0,        /* attr handle */
-        1,             /* attr type */
-        3,   0,        /* current string length */
-        'd', 'e', 'f', /* defaut value string handle index */
-    };
-
-    Table expectTable;
-    buildTable(expectTable, enumEntry, stringEntry1, integerEntry);
-    Table destTable(expectTable.size() + 10);
-    auto destLength = destTable.size();
-    auto rc = pldm_bios_table_attr_value_copy_and_update(
-        srcTable.data(), srcTable.size(), destTable.data(), &destLength,
-        stringEntry1.data(), stringEntry1.size());
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(destLength, expectTable.size());
-    destTable.resize(destLength);
-    EXPECT_THAT(destTable, ElementsAreArray(expectTable));
-
-    std::vector<uint8_t> stringEntry2{
-        1,   0,                  /* attr handle */
-        1,                       /* attr type */
-        5,   0,                  /* current string length */
-        'd', 'e', 'f', 'a', 'b', /* defaut value string handle index */
-    };
-    expectTable.resize(0);
-    buildTable(expectTable, enumEntry, stringEntry2, integerEntry);
-    destTable.resize(expectTable.size() + 10);
-    destLength = destTable.size();
-    rc = pldm_bios_table_attr_value_copy_and_update(
-        srcTable.data(), srcTable.size(), destTable.data(), &destLength,
-        stringEntry2.data(), stringEntry2.size());
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(destLength, expectTable.size());
-    destTable.resize(destLength);
-    EXPECT_THAT(destTable, ElementsAreArray(expectTable));
-
-    std::vector<uint8_t> stringEntry3{
-        1,   0, /* attr handle */
-        1,      /* attr type */
-        1,   0, /* current string length */
-        'd',    /* defaut value string handle index */
-    };
-    expectTable.resize(0);
-    buildTable(expectTable, enumEntry, stringEntry3, integerEntry);
-    destTable.resize(expectTable.size() + 10);
-    destLength = destTable.size();
-    rc = pldm_bios_table_attr_value_copy_and_update(
-        srcTable.data(), srcTable.size(), destTable.data(), &destLength,
-        stringEntry3.data(), stringEntry3.size());
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(destLength, expectTable.size());
-    destTable.resize(destLength);
-    EXPECT_THAT(destTable, ElementsAreArray(expectTable));
-
-    stringEntry3[2] = PLDM_BIOS_INTEGER; // set attribute type to integer
-    rc = pldm_bios_table_attr_value_copy_and_update(
-        srcTable.data(), srcTable.size(), destTable.data(), &destLength,
-        stringEntry3.data(), stringEntry3.size());
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    stringEntry3[2] = PLDM_BIOS_STRING; // set attribute type to string
-
-    destTable.resize(expectTable.size() - 1);
-    destLength = destTable.size();
-    rc = pldm_bios_table_attr_value_copy_and_update(
-        srcTable.data(), srcTable.size(), destTable.data(), &destLength,
-        stringEntry3.data(), stringEntry3.size());
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(StringTable, EntryEncodeTest)
-{
-    std::vector<uint8_t> stringEntry{
-        0,   0,                            /* string handle*/
-        7,   0,                            /* string length */
-        'A', 'l', 'l', 'o', 'w', 'e', 'd', /* string */
-    };
-
-    const char* str = "Allowed";
-    auto str_length = std::strlen(str);
-    auto encodeLength = pldm_bios_table_string_entry_encode_length(str_length);
-    EXPECT_EQ(encodeLength, stringEntry.size());
-
-    std::vector<uint8_t> encodeEntry(encodeLength, 0);
-    pldm_bios_table_string_entry_encode(encodeEntry.data(), encodeEntry.size(),
-                                        str, str_length);
-    // set string handle = 0
-    encodeEntry[0] = 0;
-    encodeEntry[1] = 0;
-
-    EXPECT_EQ(stringEntry, encodeEntry);
-
-    EXPECT_DEATH(pldm_bios_table_string_entry_encode(encodeEntry.data(),
-                                                     encodeEntry.size() - 1,
-                                                     str, str_length),
-                 "length <= entry_length");
-    auto rc = pldm_bios_table_string_entry_encode_check(
-        encodeEntry.data(), encodeEntry.size() - 1, str, str_length);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(StringTable, EntryDecodeTest)
-{
-    std::vector<uint8_t> stringEntry{
-        4,   0,                            /* string handle*/
-        7,   0,                            /* string length */
-        'A', 'l', 'l', 'o', 'w', 'e', 'd', /* string */
-    };
-    auto entry = reinterpret_cast<struct pldm_bios_string_table_entry*>(
-        stringEntry.data());
-    auto handle = pldm_bios_table_string_entry_decode_handle(entry);
-    EXPECT_EQ(handle, 4);
-    auto strLength = pldm_bios_table_string_entry_decode_string_length(entry);
-    EXPECT_EQ(strLength, 7);
-
-    std::vector<char> buffer(strLength + 1, 0);
-    auto decodedLength = pldm_bios_table_string_entry_decode_string(
-        entry, buffer.data(), buffer.size());
-    EXPECT_EQ(decodedLength, strLength);
-    EXPECT_EQ(std::strcmp("Allowed", buffer.data()), 0);
-    decodedLength = pldm_bios_table_string_entry_decode_string(
-        entry, buffer.data(), 2 + 1 /* sizeof '\0'*/);
-    EXPECT_EQ(decodedLength, 2);
-    EXPECT_EQ(std::strcmp("Al", buffer.data()), 0);
-
-    auto rc = pldm_bios_table_string_entry_decode_string_check(
-        entry, buffer.data(), buffer.size());
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(std::strcmp("Allowed", buffer.data()), 0);
-
-    rc = pldm_bios_table_string_entry_decode_string_check(entry, buffer.data(),
-                                                          buffer.size() - 1);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(StringTable, IteratorTest)
-{
-    std::vector<uint8_t> stringHello{
-        0,   0,                  /* string handle*/
-        5,   0,                  /* string length */
-        'H', 'e', 'l', 'l', 'o', /* string */
-    };
-    std::vector<uint8_t> stringWorld{
-        1,   0,                       /* string handle*/
-        6,   0,                       /* string length */
-        'W', 'o', 'r', 'l', 'd', '!', /* string */
-    };
-
-    Table table;
-    buildTable(table, stringHello, stringWorld);
-
-    auto iter = pldm_bios_table_iter_create(table.data(), table.size(),
-                                            PLDM_BIOS_STRING_TABLE);
-    auto entry = pldm_bios_table_iter_string_entry_value(iter);
-    auto rc = std::memcmp(entry, stringHello.data(), stringHello.size());
-    EXPECT_EQ(rc, 0);
-    pldm_bios_table_iter_next(iter);
-    entry = pldm_bios_table_iter_string_entry_value(iter);
-    rc = std::memcmp(entry, stringWorld.data(), stringWorld.size());
-    EXPECT_EQ(rc, 0);
-    pldm_bios_table_iter_next(iter);
-    EXPECT_TRUE(pldm_bios_table_iter_is_end(iter));
-    pldm_bios_table_iter_free(iter);
-}
-
-TEST(StringTable, FindTest)
-{
-    std::vector<uint8_t> stringHello{
-        1,   0,                  /* string handle*/
-        5,   0,                  /* string length */
-        'H', 'e', 'l', 'l', 'o', /* string */
-    };
-    std::vector<uint8_t> stringWorld{
-        2,   0,                       /* string handle*/
-        6,   0,                       /* string length */
-        'W', 'o', 'r', 'l', 'd', '!', /* string */
-    };
-    std::vector<uint8_t> stringHi{
-        3,   0,   /* string handle*/
-        2,   0,   /* string length */
-        'H', 'i', /* string */
-    };
-
-    Table table;
-    buildTable(table, stringHello, stringWorld, stringHi);
-
-    auto entry = pldm_bios_table_string_find_by_string(table.data(),
-                                                       table.size(), "World!");
-    EXPECT_NE(entry, nullptr);
-    auto handle = pldm_bios_table_string_entry_decode_handle(entry);
-    EXPECT_EQ(handle, 2);
-
-    entry = pldm_bios_table_string_find_by_string(table.data(), table.size(),
-                                                  "Worl");
-    EXPECT_EQ(entry, nullptr);
-
-    entry =
-        pldm_bios_table_string_find_by_handle(table.data(), table.size(), 3);
-    EXPECT_NE(entry, nullptr);
-    auto str_length = pldm_bios_table_string_entry_decode_string_length(entry);
-    EXPECT_EQ(str_length, 2);
-    std::vector<char> strBuf(str_length + 1, 0);
-    auto rc = pldm_bios_table_string_entry_decode_string_check(
-        entry, strBuf.data(), strBuf.size());
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(std::strcmp("Hi", strBuf.data()), 0);
-
-    entry =
-        pldm_bios_table_string_find_by_handle(table.data(), table.size(), 4);
-    EXPECT_EQ(entry, nullptr);
-}
-
-TEST(Itearator, DeathTest)
-{
-
-    Table table(256, 0);
-
-    /* first entry */
-    auto attr_entry =
-        reinterpret_cast<struct pldm_bios_attr_table_entry*>(table.data());
-    auto iter = pldm_bios_table_iter_create(table.data(), table.size(),
-                                            PLDM_BIOS_ATTR_TABLE);
-    attr_entry->attr_type = PLDM_BIOS_PASSWORD;
-    EXPECT_DEATH(pldm_bios_table_iter_next(iter), "attr_table_entry != NULL");
-    pldm_bios_table_iter_free(iter);
-}
-
-TEST(PadAndChecksum, PadAndChecksum)
-{
-    EXPECT_EQ(4u, pldm_bios_table_pad_checksum_size(0));
-    EXPECT_EQ(7u, pldm_bios_table_pad_checksum_size(1));
-    EXPECT_EQ(6u, pldm_bios_table_pad_checksum_size(2));
-    EXPECT_EQ(5u, pldm_bios_table_pad_checksum_size(3));
-    EXPECT_EQ(4u, pldm_bios_table_pad_checksum_size(4));
-
-    // The table is borrowed from
-    // https://github.com/openbmc/pldm/commit/69d3e7fb2d9935773f4fbf44326c33f3fc0a3c38
-    // refer to the commit message
-    Table attrValTable = {0x09, 0x00, 0x01, 0x02, 0x00, 0x65, 0x66};
-    auto sizeWithoutPad = attrValTable.size();
-    attrValTable.resize(sizeWithoutPad +
-                        pldm_bios_table_pad_checksum_size(sizeWithoutPad));
-    pldm_bios_table_append_pad_checksum(attrValTable.data(),
-                                        attrValTable.size(), sizeWithoutPad);
-    Table expectedTable = {0x09, 0x00, 0x01, 0x02, 0x00, 0x65,
-                           0x66, 0x00, 0x6d, 0x81, 0x4a, 0xb6};
-    EXPECT_EQ(attrValTable, expectedTable);
-}
-
-TEST(BIOSTableChecksum, testBIOSTableChecksum)
-{
-    std::vector<uint8_t> stringTable{
-        1,   0,                  /* string handle*/
-        5,   0,                  /* string length */
-        'T', 'a', 'b', 'l', 'e', /* string */
-    };
-
-    buildTable(stringTable);
-
-    EXPECT_EQ(true,
-              pldm_bios_table_checksum(stringTable.data(), stringTable.size()));
-}
diff --git a/subprojects/libpldm/tests/libpldm_bios_test.cpp b/subprojects/libpldm/tests/libpldm_bios_test.cpp
deleted file mode 100644
index 4733f2d..0000000
--- a/subprojects/libpldm/tests/libpldm_bios_test.cpp
+++ /dev/null
@@ -1,1093 +0,0 @@
-#include <string.h>
-
-#include <array>
-
-#include "libpldm/base.h"
-#include "libpldm/bios.h"
-#include "libpldm/utils.h"
-
-#include <gtest/gtest.h>
-
-constexpr auto hdrSize = sizeof(pldm_msg_hdr);
-
-TEST(GetDateTime, testEncodeRequest)
-{
-    pldm_msg request{};
-
-    auto rc = encode_get_date_time_req(0, &request);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-}
-
-TEST(GetDateTime, testEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    uint8_t seconds = 50;
-    uint8_t minutes = 20;
-    uint8_t hours = 5;
-    uint8_t day = 23;
-    uint8_t month = 11;
-    uint16_t year = 2019;
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_DATE_TIME_RESP_BYTES>
-        responseMsg{};
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_get_date_time_resp(0, PLDM_SUCCESS, seconds, minutes,
-                                        hours, day, month, year, response);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, response->payload[0]);
-
-    EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]),
-                        &seconds, sizeof(seconds)));
-    EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(seconds),
-                        &minutes, sizeof(minutes)));
-    EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(seconds) + sizeof(minutes),
-                        &hours, sizeof(hours)));
-    EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(seconds) + sizeof(minutes) + sizeof(hours),
-                        &day, sizeof(day)));
-    EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(seconds) + sizeof(minutes) + sizeof(hours) +
-                            sizeof(day),
-                        &month, sizeof(month)));
-    uint16_t yearLe = htole16(year);
-    EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(seconds) + sizeof(minutes) + sizeof(hours) +
-                            sizeof(day) + sizeof(month),
-                        &yearLe, sizeof(yearLe)));
-}
-
-TEST(GetDateTime, testDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_DATE_TIME_RESP_BYTES> responseMsg{};
-
-    uint8_t completionCode = 0;
-
-    uint8_t seconds = 55;
-    uint8_t minutes = 2;
-    uint8_t hours = 8;
-    uint8_t day = 9;
-    uint8_t month = 7;
-    uint16_t year = 2020;
-    uint16_t yearLe = htole16(year);
-
-    uint8_t retSeconds = 0;
-    uint8_t retMinutes = 0;
-    uint8_t retHours = 0;
-    uint8_t retDay = 0;
-    uint8_t retMonth = 0;
-    uint16_t retYear = 0;
-
-    memcpy(responseMsg.data() + sizeof(completionCode) + hdrSize, &seconds,
-           sizeof(seconds));
-    memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
-               hdrSize,
-           &minutes, sizeof(minutes));
-    memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
-               sizeof(minutes) + hdrSize,
-           &hours, sizeof(hours));
-    memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
-               sizeof(minutes) + sizeof(hours) + hdrSize,
-           &day, sizeof(day));
-    memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
-               sizeof(minutes) + sizeof(hours) + sizeof(day) + hdrSize,
-           &month, sizeof(month));
-    memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
-               sizeof(minutes) + sizeof(hours) + sizeof(day) + sizeof(month) +
-               hdrSize,
-           &yearLe, sizeof(yearLe));
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_get_date_time_resp(
-        response, responseMsg.size() - hdrSize, &completionCode, &retSeconds,
-        &retMinutes, &retHours, &retDay, &retMonth, &retYear);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(seconds, retSeconds);
-    EXPECT_EQ(minutes, retMinutes);
-    EXPECT_EQ(hours, retHours);
-    EXPECT_EQ(day, retDay);
-    EXPECT_EQ(month, retMonth);
-    EXPECT_EQ(year, retYear);
-}
-
-TEST(SetDateTime, testGoodEncodeResponse)
-{
-    uint8_t instanceId = 0;
-    uint8_t completionCode = PLDM_SUCCESS;
-
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_only_cc_resp)>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_set_date_time_resp(instanceId, completionCode, response,
-                                        responseMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_only_cc_resp* resp =
-        reinterpret_cast<struct pldm_only_cc_resp*>(response->payload);
-    EXPECT_EQ(completionCode, resp->completion_code);
-}
-
-TEST(SetDateTime, testBadEncodeResponse)
-{
-
-    uint8_t instanceId = 10;
-    uint8_t completionCode = PLDM_SUCCESS;
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_only_cc_resp)>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    auto rc = encode_set_date_time_resp(instanceId, completionCode, nullptr,
-                                        responseMsg.size() - hdrSize);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = encode_set_date_time_resp(instanceId, completionCode, response,
-                                   responseMsg.size() - hdrSize - 1);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetDateTime, testGoodDecodeResponse)
-{
-    uint8_t completionCode = PLDM_SUCCESS;
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_only_cc_resp)>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    struct pldm_only_cc_resp* resp =
-        reinterpret_cast<struct pldm_only_cc_resp*>(response->payload);
-
-    resp->completion_code = completionCode;
-
-    uint8_t retCompletionCode;
-    auto rc = decode_set_date_time_resp(response, responseMsg.size() - hdrSize,
-                                        &retCompletionCode);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, retCompletionCode);
-}
-
-TEST(SetDateTime, testBadDecodeResponse)
-{
-    uint8_t completionCode = PLDM_SUCCESS;
-
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_only_cc_resp)>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    auto rc = decode_set_date_time_resp(nullptr, responseMsg.size() - hdrSize,
-                                        &completionCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_set_date_time_resp(response, responseMsg.size() - hdrSize - 1,
-                                   &completionCode);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetDateTime, testGoodEncodeRequset)
-{
-    uint8_t instanceId = 0;
-    uint8_t seconds = 50;
-    uint8_t minutes = 20;
-    uint8_t hours = 10;
-    uint8_t day = 11;
-    uint8_t month = 11;
-    uint16_t year = 2019;
-
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_set_date_time_req)>
-        requestMsg{};
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_set_date_time_req(instanceId, seconds, minutes, hours, day,
-                                       month, year, request,
-                                       requestMsg.size() - hdrSize);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_set_date_time_req* req =
-        reinterpret_cast<struct pldm_set_date_time_req*>(request->payload);
-    EXPECT_EQ(seconds, bcd2dec8(req->seconds));
-    EXPECT_EQ(minutes, bcd2dec8(req->minutes));
-    EXPECT_EQ(hours, bcd2dec8(req->hours));
-    EXPECT_EQ(day, bcd2dec8(req->day));
-    EXPECT_EQ(month, bcd2dec8(req->month));
-    EXPECT_EQ(year, bcd2dec16(le16toh(req->year)));
-}
-
-TEST(SetDateTime, testBadEncodeRequset)
-{
-    uint8_t instanceId = 0;
-
-    uint8_t seconds = 50;
-    uint8_t minutes = 20;
-    uint8_t hours = 10;
-    uint8_t day = 13;
-    uint8_t month = 11;
-    uint16_t year = 2019;
-
-    uint8_t erday = 43;
-
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_set_date_time_req)>
-        requestMsg{};
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_set_date_time_req(instanceId, seconds, minutes, hours, day,
-                                       month, year, nullptr,
-                                       requestMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_set_date_time_req(instanceId, seconds, minutes, hours, erday,
-                                  month, year, request,
-                                  requestMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_set_date_time_req(instanceId, seconds, minutes, hours, day,
-                                  month, year, request,
-                                  requestMsg.size() - hdrSize - 4);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetDateTime, testGoodDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_set_date_time_req)>
-        requestMsg{};
-    uint8_t seconds = 0x50;
-    uint8_t minutes = 0x20;
-    uint8_t hours = 0x10;
-    uint8_t day = 0x11;
-    uint8_t month = 0x11;
-    uint16_t year = 0x2019;
-
-    auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
-    struct pldm_set_date_time_req* req =
-        reinterpret_cast<struct pldm_set_date_time_req*>(request->payload);
-    req->seconds = seconds;
-    req->minutes = minutes;
-    req->hours = hours;
-    req->day = day;
-    req->month = month;
-    req->year = htole16(year);
-
-    uint8_t retseconds;
-    uint8_t retminutes;
-    uint8_t rethours;
-    uint8_t retday;
-    uint8_t retmonth;
-    uint16_t retyear;
-
-    auto rc = decode_set_date_time_req(request, requestMsg.size() - hdrSize,
-                                       &retseconds, &retminutes, &rethours,
-                                       &retday, &retmonth, &retyear);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retseconds, 50);
-    EXPECT_EQ(retminutes, 20);
-    EXPECT_EQ(rethours, 10);
-    EXPECT_EQ(retday, 11);
-    EXPECT_EQ(retmonth, 11);
-    EXPECT_EQ(retyear, 2019);
-}
-
-TEST(SetDateTime, testBadDecodeRequest)
-{
-    uint8_t seconds = 0x50;
-    uint8_t minutes = 0x20;
-    uint8_t hours = 0x10;
-    uint8_t day = 0x11;
-    uint8_t month = 0x11;
-    uint16_t year = htole16(0x2019);
-
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_set_date_time_req)>
-        requestMsg{};
-
-    auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
-
-    decode_set_date_time_req(request, requestMsg.size() - hdrSize, &seconds,
-                             &minutes, &hours, &day, &month, &year);
-
-    auto rc =
-        decode_set_date_time_req(nullptr, requestMsg.size() - hdrSize, &seconds,
-                                 &minutes, &hours, &day, &month, &year);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_set_date_time_req(request, requestMsg.size() - hdrSize, nullptr,
-                                  nullptr, nullptr, nullptr, nullptr, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_set_date_time_req(request, requestMsg.size() - hdrSize - 4,
-                                  &seconds, &minutes, &hours, &day, &month,
-                                  &year);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetBIOSTable, testGoodEncodeResponse)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES + 4>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t nextTransferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    std::array<uint8_t, 4> tableData{1, 2, 3, 4};
-
-    auto rc = encode_get_bios_table_resp(
-        0, PLDM_SUCCESS, nextTransferHandle, transferFlag, tableData.data(),
-        sizeof(pldm_msg_hdr) + PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES + 4,
-        response);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_get_bios_table_resp* resp =
-        reinterpret_cast<struct pldm_get_bios_table_resp*>(response->payload);
-
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(nextTransferHandle, le32toh(resp->next_transfer_handle));
-    EXPECT_EQ(transferFlag, resp->transfer_flag);
-    EXPECT_EQ(0, memcmp(tableData.data(), resp->table_data, tableData.size()));
-}
-
-TEST(GetBIOSTable, testBadEncodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    std::array<uint8_t, 4> tableData{1, 2, 3, 4};
-
-    auto rc = encode_get_bios_table_resp(
-        0, PLDM_SUCCESS, nextTransferHandle, transferFlag, tableData.data(),
-        sizeof(pldm_msg_hdr) + PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES + 4, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetBIOSTable, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_BIOS_TABLE_REQ_BYTES>
-        requestMsg{};
-    uint32_t transferHandle = 0x0;
-    uint8_t transferOpFlag = 0x01;
-    uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_get_bios_table_req(0, transferHandle, transferOpFlag,
-                                        tableType, request);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_get_bios_table_req* req =
-        reinterpret_cast<struct pldm_get_bios_table_req*>(request->payload);
-    EXPECT_EQ(transferHandle, le32toh(req->transfer_handle));
-    EXPECT_EQ(transferOpFlag, req->transfer_op_flag);
-    EXPECT_EQ(tableType, req->table_type);
-}
-
-TEST(GetBIOSTable, testBadEncodeRequest)
-{
-    uint32_t transferHandle = 0x0;
-    uint8_t transferOpFlag = 0x01;
-    uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
-
-    auto rc = encode_get_bios_table_req(0, transferHandle, transferOpFlag,
-                                        tableType, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetBIOSTable, testGoodDecodeRequest)
-{
-    const auto hdr_size = sizeof(pldm_msg_hdr);
-    std::array<uint8_t, hdr_size + PLDM_GET_BIOS_TABLE_REQ_BYTES> requestMsg{};
-    uint32_t transferHandle = 31;
-    uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
-    uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
-    uint32_t retTransferHandle = 0;
-    uint8_t retTransferOpFlag = 0;
-    uint8_t retTableType = 0;
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_get_bios_table_req* request =
-        reinterpret_cast<struct pldm_get_bios_table_req*>(req->payload);
-
-    request->transfer_handle = htole32(transferHandle);
-    request->transfer_op_flag = transferOpFlag;
-    request->table_type = tableType;
-
-    auto rc = decode_get_bios_table_req(req, requestMsg.size() - hdr_size,
-                                        &retTransferHandle, &retTransferOpFlag,
-                                        &retTableType);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(transferHandle, retTransferHandle);
-    EXPECT_EQ(transferOpFlag, retTransferOpFlag);
-    EXPECT_EQ(tableType, retTableType);
-}
-TEST(GetBIOSTable, testBadDecodeRequest)
-{
-    const auto hdr_size = sizeof(pldm_msg_hdr);
-    std::array<uint8_t, hdr_size + PLDM_GET_BIOS_TABLE_REQ_BYTES> requestMsg{};
-    uint32_t transferHandle = 31;
-    uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
-    uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
-    uint32_t retTransferHandle = 0;
-    uint8_t retTransferOpFlag = 0;
-    uint8_t retTableType = 0;
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_get_bios_table_req* request =
-        reinterpret_cast<struct pldm_get_bios_table_req*>(req->payload);
-
-    request->transfer_handle = htole32(transferHandle);
-    request->transfer_op_flag = transferOpFlag;
-    request->table_type = tableType;
-
-    auto rc = decode_get_bios_table_req(req, requestMsg.size() - hdr_size,
-                                        &retTransferHandle, &retTransferOpFlag,
-                                        &retTableType);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(transferHandle, retTransferHandle);
-    EXPECT_EQ(transferOpFlag, retTransferOpFlag);
-    EXPECT_EQ(tableType, retTableType);
-}
-/*
-TEST(GetBIOSTable, testBadDecodeRequest)
-{
-    const auto hdr_size = sizeof(pldm_msg_hdr);
-    std::array<uint8_t, hdr_size + PLDM_GET_BIOS_TABLE_REQ_BYTES> requestMsg{};
-    uint32_t transferHandle = 31;
-    uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
-    uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
-    uint32_t retTransferHandle = 0;
-    uint8_t retTransferOpFlag = 0;
-    uint8_t retTableType = 0;
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_get_bios_table_req* request =
-        reinterpret_cast<struct pldm_get_bios_table_req*>(req->payload);
-
-    request->transfer_handle = htole32(transferHandle);
-    request->transfer_op_flag = transferOpFlag;
-    request->table_type = tableType;
-
-    auto rc = decode_get_bios_table_req(req, requestMsg.size() - hdr_size - 3,
-                                        &retTransferHandle, &retTransferOpFlag,
-                                        &retTableType);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}*/
-
-TEST(GetBIOSAttributeCurrentValueByHandle, testGoodDecodeRequest)
-{
-    uint32_t transferHandle = 45;
-    uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
-    uint16_t attributehandle = 10;
-    uint32_t retTransferHandle = 0;
-    uint8_t retTransferOpFlag = 0;
-    uint16_t retattributehandle = 0;
-    std::array<uint8_t, hdrSize + sizeof(transferHandle) +
-                            sizeof(transferOpFlag) + sizeof(attributehandle)>
-        requestMsg{};
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_get_bios_attribute_current_value_by_handle_req* request =
-        reinterpret_cast<
-            struct pldm_get_bios_attribute_current_value_by_handle_req*>(
-            req->payload);
-
-    request->transfer_handle = htole32(transferHandle);
-    request->transfer_op_flag = transferOpFlag;
-    request->attribute_handle = htole16(attributehandle);
-
-    auto rc = decode_get_bios_attribute_current_value_by_handle_req(
-        req, requestMsg.size() - hdrSize, &retTransferHandle,
-        &retTransferOpFlag, &retattributehandle);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(transferHandle, retTransferHandle);
-    EXPECT_EQ(transferOpFlag, retTransferOpFlag);
-    EXPECT_EQ(attributehandle, retattributehandle);
-}
-
-TEST(GetBIOSAttributeCurrentValueByHandle, testBadDecodeRequest)
-{
-
-    uint32_t transferHandle = 0;
-    uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
-    uint16_t attribute_handle = 0;
-    uint32_t retTransferHandle = 0;
-    uint8_t retTransferOpFlag = 0;
-    uint16_t retattribute_handle = 0;
-    std::array<uint8_t, hdrSize + sizeof(transferHandle) +
-                            sizeof(transferOpFlag) + sizeof(attribute_handle)>
-        requestMsg{};
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_get_bios_attribute_current_value_by_handle_req* request =
-        reinterpret_cast<
-            struct pldm_get_bios_attribute_current_value_by_handle_req*>(
-            req->payload);
-
-    request->transfer_handle = htole32(transferHandle);
-    request->transfer_op_flag = transferOpFlag;
-    request->attribute_handle = attribute_handle;
-
-    auto rc = decode_get_bios_attribute_current_value_by_handle_req(
-        NULL, requestMsg.size() - hdrSize, &retTransferHandle,
-        &retTransferOpFlag, &retattribute_handle);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    transferHandle = 31;
-    request->transfer_handle = htole32(transferHandle);
-
-    rc = decode_get_bios_attribute_current_value_by_handle_req(
-        req, 0, &retTransferHandle, &retTransferOpFlag, &retattribute_handle);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetBIOSAttributeCurrentValueByHandle, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) +
-                            PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_REQ_BYTES>
-        requestMsg{};
-    uint32_t transferHandle = 45;
-    uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
-    uint8_t attributeHandle = 10;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_get_bios_attribute_current_value_by_handle_req(
-        0, transferHandle, transferOpFlag, attributeHandle, request);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_get_bios_attribute_current_value_by_handle_req* req =
-        reinterpret_cast<
-            struct pldm_get_bios_attribute_current_value_by_handle_req*>(
-            request->payload);
-    EXPECT_EQ(transferHandle, le32toh(req->transfer_handle));
-    EXPECT_EQ(transferOpFlag, req->transfer_op_flag);
-    EXPECT_EQ(attributeHandle, le16toh(req->attribute_handle));
-}
-
-TEST(GetBIOSAttributeCurrentValueByHandle, testBadEncodeRequest)
-{
-    uint32_t transferHandle = 0;
-    uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
-    uint8_t attributeHandle = 0;
-
-    auto rc = encode_get_bios_attribute_current_value_by_handle_req(
-        0, transferHandle, transferOpFlag, attributeHandle, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetBIOSAttributeCurrentValueByHandle, testGoodEncodeResponse)
-{
-
-    uint8_t instanceId = 10;
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t nextTransferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint8_t attributeData = 44;
-    std::array<uint8_t,
-               hdrSize +
-                   sizeof(pldm_get_bios_attribute_current_value_by_handle_resp)>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_get_bios_current_value_by_handle_resp(
-        instanceId, completionCode, nextTransferHandle, transferFlag,
-        &attributeData, sizeof(attributeData), response);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_get_bios_attribute_current_value_by_handle_resp* resp =
-        reinterpret_cast<
-            struct pldm_get_bios_attribute_current_value_by_handle_resp*>(
-            response->payload);
-
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(nextTransferHandle, le32toh(resp->next_transfer_handle));
-    EXPECT_EQ(transferFlag, resp->transfer_flag);
-    EXPECT_EQ(
-        0, memcmp(&attributeData, resp->attribute_data, sizeof(attributeData)));
-}
-
-TEST(GetBIOSAttributeCurrentValueByHandle, testBadEncodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint8_t attributeData = 44;
-
-    auto rc = encode_get_bios_current_value_by_handle_resp(
-        0, PLDM_SUCCESS, nextTransferHandle, transferFlag, &attributeData,
-        sizeof(attributeData), nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t,
-               hdrSize +
-                   sizeof(pldm_get_bios_attribute_current_value_by_handle_resp)>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    rc = encode_get_bios_current_value_by_handle_resp(
-        0, PLDM_SUCCESS, nextTransferHandle, transferFlag, nullptr,
-        sizeof(attributeData), response);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(SetBiosAttributeCurrentValue, testGoodEncodeRequest)
-{
-    uint8_t instanceId = 10;
-    uint32_t transferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint32_t attributeData = 44;
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES +
-                            sizeof(attributeData)>
-        requestMsg{};
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_set_bios_attribute_current_value_req(
-        instanceId, transferHandle, transferFlag,
-        reinterpret_cast<uint8_t*>(&attributeData), sizeof(attributeData),
-        request, requestMsg.size() - hdrSize);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_set_bios_attribute_current_value_req* req =
-        reinterpret_cast<struct pldm_set_bios_attribute_current_value_req*>(
-            request->payload);
-    EXPECT_EQ(htole32(transferHandle), req->transfer_handle);
-    EXPECT_EQ(transferFlag, req->transfer_flag);
-    EXPECT_EQ(
-        0, memcmp(&attributeData, req->attribute_data, sizeof(attributeData)));
-}
-
-TEST(SetBiosAttributeCurrentValue, testBadEncodeRequest)
-{
-    uint8_t instanceId = 10;
-    uint32_t transferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint32_t attributeData = 44;
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES>
-        requestMsg{};
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_set_bios_attribute_current_value_req(
-        instanceId, transferHandle, transferFlag, nullptr, 0, nullptr, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = encode_set_bios_attribute_current_value_req(
-        instanceId, transferHandle, transferFlag,
-        reinterpret_cast<uint8_t*>(&attributeData), sizeof(attributeData),
-        request, requestMsg.size() - hdrSize);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetBiosAttributeCurrentValue, testGoodDecodeRequest)
-{
-    uint32_t transferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint32_t attributeData = 44;
-
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES +
-                            sizeof(attributeData)>
-        requestMsg{};
-    auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
-    struct pldm_set_bios_attribute_current_value_req* req =
-        reinterpret_cast<struct pldm_set_bios_attribute_current_value_req*>(
-            request->payload);
-    req->transfer_handle = htole32(transferHandle);
-    req->transfer_flag = transferFlag;
-    memcpy(req->attribute_data, &attributeData, sizeof(attributeData));
-
-    uint32_t retTransferHandle;
-    uint8_t retTransferFlag;
-    struct variable_field attribute;
-    auto rc = decode_set_bios_attribute_current_value_req(
-        request, requestMsg.size() - hdrSize, &retTransferHandle,
-        &retTransferFlag, &attribute);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retTransferHandle, transferHandle);
-    EXPECT_EQ(retTransferFlag, transferFlag);
-    EXPECT_EQ(attribute.length, sizeof(attributeData));
-    EXPECT_EQ(0, memcmp(attribute.ptr, &attributeData, sizeof(attributeData)));
-}
-
-TEST(SetBiosAttributeCurrentValue, testBadDecodeRequest)
-{
-    uint32_t transferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    struct variable_field attribute;
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES - 1>
-        requestMsg{};
-    auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
-
-    auto rc = decode_set_bios_attribute_current_value_req(
-        nullptr, 0, &transferHandle, &transferFlag, &attribute);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = decode_set_bios_attribute_current_value_req(
-        request, requestMsg.size() - hdrSize, &transferHandle, &transferFlag,
-        &attribute);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetBiosAttributeCurrentValue, testGoodEncodeResponse)
-{
-    uint8_t instanceId = 10;
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    auto rc = encode_set_bios_attribute_current_value_resp(
-        instanceId, completionCode, nextTransferHandle, response);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_set_bios_attribute_current_value_resp* resp =
-        reinterpret_cast<struct pldm_set_bios_attribute_current_value_resp*>(
-            response->payload);
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(htole32(nextTransferHandle), resp->next_transfer_handle);
-}
-
-TEST(SetBiosAttributeCurrentValue, testBadEncodeResponse)
-{
-    uint8_t instanceId = 10;
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-    auto rc = encode_set_bios_attribute_current_value_resp(
-        instanceId, completionCode, nextTransferHandle, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-TEST(SetBiosAttributeCurrentValue, testGoodDecodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    struct pldm_set_bios_attribute_current_value_resp* resp =
-        reinterpret_cast<struct pldm_set_bios_attribute_current_value_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->next_transfer_handle = htole32(nextTransferHandle);
-
-    uint8_t retCompletionCode;
-    uint32_t retNextTransferHandle;
-    auto rc = decode_set_bios_attribute_current_value_resp(
-        response, responseMsg.size() - hdrSize, &retCompletionCode,
-        &retNextTransferHandle);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, retCompletionCode);
-    EXPECT_EQ(nextTransferHandle, retNextTransferHandle);
-}
-
-TEST(SetBiosAttributeCurrentValue, testBadDecodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    struct pldm_set_bios_attribute_current_value_resp* resp =
-        reinterpret_cast<struct pldm_set_bios_attribute_current_value_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->next_transfer_handle = htole32(nextTransferHandle);
-
-    auto rc = decode_set_bios_attribute_current_value_resp(
-        nullptr, 0, &completionCode, &nextTransferHandle);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_set_bios_attribute_current_value_resp(
-        response, responseMsg.size() - hdrSize - 1, &completionCode,
-        &nextTransferHandle);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetBIOSTable, testDecodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t transfer_flag = PLDM_START_AND_END;
-
-    std::array<uint8_t, hdrSize + PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-
-    struct pldm_get_bios_table_resp* resp =
-        reinterpret_cast<struct pldm_get_bios_table_resp*>(response->payload);
-
-    resp->completion_code = completionCode;
-    resp->next_transfer_handle = htole32(nextTransferHandle);
-    resp->transfer_flag = transfer_flag;
-    size_t biosTableOffset = sizeof(completionCode) +
-                             sizeof(nextTransferHandle) + sizeof(transfer_flag);
-
-    uint8_t retCompletionCode;
-    uint32_t retNextTransferHandle;
-    uint8_t retransfer_flag;
-    size_t rebiosTableOffset = 0;
-    auto rc = decode_get_bios_table_resp(
-        response, responseMsg.size(), &retCompletionCode,
-        &retNextTransferHandle, &retransfer_flag, &rebiosTableOffset);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-    ASSERT_EQ(nextTransferHandle, retNextTransferHandle);
-    ASSERT_EQ(transfer_flag, retransfer_flag);
-    ASSERT_EQ(biosTableOffset, rebiosTableOffset);
-}
-
-TEST(GetBIOSAttributeCurrentValueByHandle, testDecodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t transfer_flag = PLDM_START_AND_END;
-    uint32_t attributeData = 44;
-
-    std::array<uint8_t,
-               hdrSize + PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_MIN_RESP_BYTES +
-                   sizeof(attributeData)>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-
-    struct pldm_get_bios_attribute_current_value_by_handle_resp* resp =
-        reinterpret_cast<
-            struct pldm_get_bios_attribute_current_value_by_handle_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->next_transfer_handle = htole32(nextTransferHandle);
-    resp->transfer_flag = transfer_flag;
-    memcpy(resp->attribute_data, &attributeData, sizeof(attributeData));
-
-    uint8_t retCompletionCode;
-    uint32_t retNextTransferHandle;
-    uint8_t retransfer_flag;
-    struct variable_field retAttributeData;
-    auto rc = decode_get_bios_attribute_current_value_by_handle_resp(
-        response, responseMsg.size() - hdrSize, &retCompletionCode,
-        &retNextTransferHandle, &retransfer_flag, &retAttributeData);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, retCompletionCode);
-    EXPECT_EQ(nextTransferHandle, retNextTransferHandle);
-    EXPECT_EQ(transfer_flag, retransfer_flag);
-    EXPECT_EQ(sizeof(attributeData), retAttributeData.length);
-    EXPECT_EQ(
-        0, memcmp(retAttributeData.ptr, &attributeData, sizeof(attributeData)));
-}
-
-TEST(SetBIOSTable, testGoodEncodeRequest)
-{
-    uint8_t instanceId = 10;
-    uint32_t transferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint8_t tableType = PLDM_BIOS_STRING_TABLE;
-    uint32_t tableData = 44;
-    std::array<uint8_t,
-               hdrSize + PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES + sizeof(tableData)>
-        requestMsg{};
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_set_bios_table_req(
-        instanceId, transferHandle, transferFlag, tableType,
-        reinterpret_cast<uint8_t*>(&tableData), sizeof(tableData), request,
-        requestMsg.size() - hdrSize);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_set_bios_table_req* req =
-        reinterpret_cast<struct pldm_set_bios_table_req*>(request->payload);
-
-    EXPECT_EQ(htole32(transferHandle), req->transfer_handle);
-    EXPECT_EQ(transferFlag, req->transfer_flag);
-    EXPECT_EQ(tableType, req->table_type);
-    EXPECT_EQ(0, memcmp(&tableData, req->table_data, sizeof(tableData)));
-}
-
-TEST(SetBIOSTable, testBadEncodeRequest)
-{
-    uint8_t instanceId = 10;
-    uint32_t transferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint8_t tableType = PLDM_BIOS_STRING_TABLE;
-    uint32_t tableData = 44;
-    std::array<uint8_t,
-               hdrSize + PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES + sizeof(tableData)>
-        requestMsg{};
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_set_bios_table_req(
-        instanceId, transferHandle, transferFlag, tableType, NULL,
-        sizeof(tableData), request, requestMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_set_bios_table_req(
-        instanceId, transferHandle, transferFlag, tableType,
-        reinterpret_cast<uint8_t*>(&tableData), sizeof(tableData), request,
-        requestMsg.size() - hdrSize + 1);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetBIOSTable, testGoodDecodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_TABLE_RESP_BYTES> responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    struct pldm_set_bios_table_resp* resp =
-        reinterpret_cast<struct pldm_set_bios_table_resp*>(response->payload);
-
-    resp->completion_code = completionCode;
-    resp->next_transfer_handle = htole32(nextTransferHandle);
-
-    uint8_t retCompletionCode;
-    uint32_t retNextTransferHandle;
-    auto rc =
-        decode_set_bios_table_resp(response, responseMsg.size() - hdrSize,
-                                   &retCompletionCode, &retNextTransferHandle);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, retCompletionCode);
-    EXPECT_EQ(nextTransferHandle, retNextTransferHandle);
-}
-
-TEST(SetBIOSTable, testBadDecodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_TABLE_RESP_BYTES> responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    struct pldm_set_bios_table_resp* resp =
-        reinterpret_cast<struct pldm_set_bios_table_resp*>(response->payload);
-
-    resp->completion_code = completionCode;
-    resp->next_transfer_handle = htole32(nextTransferHandle);
-
-    uint8_t retCompletionCode;
-    uint32_t retNextTransferHandle;
-
-    auto rc = decode_set_bios_table_resp(NULL, responseMsg.size() - hdrSize,
-                                         NULL, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_set_bios_table_resp(response, responseMsg.size() - hdrSize + 1,
-                                    &retCompletionCode, &retNextTransferHandle);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetBIOSTable, testGoodEncodeResponse)
-{
-    uint8_t instanceId = 10;
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-
-    std::array<uint8_t, hdrSize + PLDM_SET_BIOS_TABLE_RESP_BYTES> responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    auto rc = encode_set_bios_table_resp(instanceId, completionCode,
-                                         nextTransferHandle, response);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_set_bios_table_resp* resp =
-        reinterpret_cast<struct pldm_set_bios_table_resp*>(response->payload);
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(htole32(nextTransferHandle), resp->next_transfer_handle);
-}
-
-TEST(SetBIOSTable, testBadEncodeResponse)
-{
-    auto rc = encode_set_bios_table_resp(0, PLDM_SUCCESS, 1, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(SetBIOSTable, testGoodDecodeRequest)
-{
-    uint32_t transferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint8_t tableType = PLDM_BIOS_STRING_TABLE;
-    uint32_t tableData = 44;
-
-    std::array<uint8_t,
-               hdrSize + PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES + sizeof(tableData)>
-        requestMsg{};
-    auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
-    struct pldm_set_bios_table_req* req =
-        reinterpret_cast<struct pldm_set_bios_table_req*>(request->payload);
-    req->transfer_handle = htole32(transferHandle);
-    req->transfer_flag = transferFlag;
-    req->table_type = tableType;
-    memcpy(req->table_data, &tableData, sizeof(tableData));
-
-    uint32_t retTransferHandle;
-    uint8_t retTransferFlag;
-    uint8_t retTableType;
-    struct variable_field table;
-    auto rc = decode_set_bios_table_req(request, requestMsg.size() - hdrSize,
-                                        &retTransferHandle, &retTransferFlag,
-                                        &retTableType, &table);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retTransferHandle, transferHandle);
-    EXPECT_EQ(retTransferFlag, transferFlag);
-    EXPECT_EQ(retTableType, tableType);
-    EXPECT_EQ(table.length, sizeof(tableData));
-    EXPECT_EQ(0, memcmp(table.ptr, &tableData, sizeof(tableData)));
-}
-
-TEST(SetBIOSTable, testBadDecodeRequest)
-{
-    uint32_t transferHandle = 32;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint8_t tableType = PLDM_BIOS_STRING_TABLE;
-    uint32_t tableData = 44;
-
-    std::array<uint8_t,
-               hdrSize + PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES + sizeof(tableData)>
-        requestMsg{};
-    auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
-    struct pldm_set_bios_table_req* req =
-        reinterpret_cast<struct pldm_set_bios_table_req*>(request->payload);
-    req->transfer_handle = htole32(transferHandle);
-    req->transfer_flag = transferFlag;
-    req->table_type = tableType;
-    memcpy(req->table_data, &tableData, sizeof(tableData));
-
-    uint32_t retTransferHandle;
-    uint8_t retTransferFlag;
-    uint8_t retTableType;
-
-    auto rc = decode_set_bios_table_req(request, requestMsg.size() - hdrSize,
-                                        &retTransferHandle, &retTransferFlag,
-                                        &retTableType, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    struct variable_field table;
-    rc = decode_set_bios_table_req(
-        request, requestMsg.size() - hdrSize - sizeof(tableData) - 1,
-        &retTransferHandle, &retTransferFlag, &retTableType, &table);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
\ No newline at end of file
diff --git a/subprojects/libpldm/tests/libpldm_firmware_update_test.cpp b/subprojects/libpldm/tests/libpldm_firmware_update_test.cpp
deleted file mode 100644
index 756097f..0000000
--- a/subprojects/libpldm/tests/libpldm_firmware_update_test.cpp
+++ /dev/null
@@ -1,2924 +0,0 @@
-#include <bitset>
-#include <cstring>
-
-#include "libpldm/base.h"
-#include "libpldm/firmware_update.h"
-
-#include <gtest/gtest.h>
-
-constexpr auto hdrSize = sizeof(pldm_msg_hdr);
-
-TEST(DecodePackageHeaderInfo, goodPath)
-{
-    // Package header identifier for Version 1.0.x
-    constexpr std::array<uint8_t, PLDM_FWUP_UUID_LENGTH> uuid{
-        0xf0, 0x18, 0x87, 0x8c, 0xcb, 0x7d, 0x49, 0x43,
-        0x98, 0x00, 0xa0, 0x2F, 0x05, 0x9a, 0xca, 0x02};
-    // Package header version for DSP0267 version 1.0.x
-    constexpr uint8_t pkgHeaderFormatRevision = 0x01;
-    // Random PackageHeaderSize
-    constexpr uint16_t pkgHeaderSize = 303;
-    // PackageReleaseDateTime - "25/12/2021 00:00:00"
-    std::array<uint8_t, PLDM_TIMESTAMP104_SIZE> package_release_date_time{
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x19, 0x0c, 0xe5, 0x07, 0x00};
-    constexpr uint16_t componentBitmapBitLength = 8;
-    // PackageVersionString
-    constexpr std::string_view packageVersionStr{"OpenBMCv1.0"};
-    constexpr size_t packagerHeaderSize =
-        sizeof(pldm_package_header_information) + packageVersionStr.size();
-
-    constexpr std::array<uint8_t, packagerHeaderSize> packagerHeaderInfo{
-        0xf0, 0x18, 0x87, 0x8c, 0xcb, 0x7d, 0x49, 0x43, 0x98, 0x00, 0xa0, 0x2F,
-        0x05, 0x9a, 0xca, 0x02, 0x01, 0x2f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x19, 0x0c, 0xe5, 0x07, 0x00, 0x08, 0x00, 0x01, 0x0b,
-        0x4f, 0x70, 0x65, 0x6e, 0x42, 0x4d, 0x43, 0x76, 0x31, 0x2e, 0x30};
-    pldm_package_header_information pkgHeader{};
-    variable_field packageVersion{};
-
-    auto rc = decode_pldm_package_header_info(packagerHeaderInfo.data(),
-                                              packagerHeaderInfo.size(),
-                                              &pkgHeader, &packageVersion);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(true,
-              std::equal(pkgHeader.uuid, pkgHeader.uuid + PLDM_FWUP_UUID_LENGTH,
-                         uuid.begin(), uuid.end()));
-    EXPECT_EQ(pkgHeader.package_header_format_version, pkgHeaderFormatRevision);
-    EXPECT_EQ(pkgHeader.package_header_size, pkgHeaderSize);
-    EXPECT_EQ(true, std::equal(pkgHeader.package_release_date_time,
-                               pkgHeader.package_release_date_time +
-                                   PLDM_TIMESTAMP104_SIZE,
-                               package_release_date_time.begin(),
-                               package_release_date_time.end()));
-    EXPECT_EQ(pkgHeader.component_bitmap_bit_length, componentBitmapBitLength);
-    EXPECT_EQ(pkgHeader.package_version_string_type, PLDM_STR_TYPE_ASCII);
-    EXPECT_EQ(pkgHeader.package_version_string_length,
-              packageVersionStr.size());
-    std::string packageVersionString(
-        reinterpret_cast<const char*>(packageVersion.ptr),
-        packageVersion.length);
-    EXPECT_EQ(packageVersionString, packageVersionStr);
-}
-
-TEST(DecodePackageHeaderInfo, errorPaths)
-{
-    int rc = 0;
-    constexpr std::string_view packageVersionStr{"OpenBMCv1.0"};
-    constexpr size_t packagerHeaderSize =
-        sizeof(pldm_package_header_information) + packageVersionStr.size();
-
-    // Invalid Package Version String Type - 0x06
-    constexpr std::array<uint8_t, packagerHeaderSize>
-        invalidPackagerHeaderInfo1{
-            0xf0, 0x18, 0x87, 0x8c, 0xcb, 0x7d, 0x49, 0x43, 0x98, 0x00,
-            0xa0, 0x2F, 0x05, 0x9a, 0xca, 0x02, 0x02, 0x2f, 0x01, 0x00,
-            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x0c, 0xe5,
-            0x07, 0x00, 0x08, 0x00, 0x06, 0x0b, 0x4f, 0x70, 0x65, 0x6e,
-            0x42, 0x4d, 0x43, 0x76, 0x31, 0x2e, 0x30};
-
-    pldm_package_header_information packageHeader{};
-    variable_field packageVersion{};
-
-    rc = decode_pldm_package_header_info(nullptr,
-                                         invalidPackagerHeaderInfo1.size(),
-                                         &packageHeader, &packageVersion);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pldm_package_header_info(invalidPackagerHeaderInfo1.data(),
-                                         invalidPackagerHeaderInfo1.size(),
-                                         nullptr, &packageVersion);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pldm_package_header_info(invalidPackagerHeaderInfo1.data(),
-                                         invalidPackagerHeaderInfo1.size(),
-                                         &packageHeader, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pldm_package_header_info(
-        invalidPackagerHeaderInfo1.data(),
-        sizeof(pldm_package_header_information) - 1, &packageHeader,
-        &packageVersion);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_pldm_package_header_info(invalidPackagerHeaderInfo1.data(),
-                                         invalidPackagerHeaderInfo1.size(),
-                                         &packageHeader, &packageVersion);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Invalid Package Version String Length - 0x00
-    constexpr std::array<uint8_t, packagerHeaderSize>
-        invalidPackagerHeaderInfo2{
-            0xf0, 0x18, 0x87, 0x8c, 0xcb, 0x7d, 0x49, 0x43, 0x98, 0x00,
-            0xa0, 0x2F, 0x05, 0x9a, 0xca, 0x02, 0x02, 0x2f, 0x01, 0x00,
-            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x0c, 0xe5,
-            0x07, 0x00, 0x08, 0x00, 0x01, 0x00, 0x4f, 0x70, 0x65, 0x6e,
-            0x42, 0x4d, 0x43, 0x76, 0x31, 0x2e, 0x30};
-    rc = decode_pldm_package_header_info(invalidPackagerHeaderInfo2.data(),
-                                         invalidPackagerHeaderInfo2.size(),
-                                         &packageHeader, &packageVersion);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Package version string length less than in the header information
-    constexpr std::array<uint8_t, packagerHeaderSize - 1>
-        invalidPackagerHeaderInfo3{
-            0xf0, 0x18, 0x87, 0x8c, 0xcb, 0x7d, 0x49, 0x43, 0x98, 0x00,
-            0xa0, 0x2F, 0x05, 0x9a, 0xca, 0x02, 0x02, 0x2f, 0x01, 0x00,
-            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x0c, 0xe5,
-            0x07, 0x00, 0x08, 0x00, 0x01, 0x0b, 0x4f, 0x70, 0x65, 0x6e,
-            0x42, 0x4d, 0x43, 0x76, 0x31, 0x2e};
-    rc = decode_pldm_package_header_info(invalidPackagerHeaderInfo3.data(),
-                                         invalidPackagerHeaderInfo3.size(),
-                                         &packageHeader, &packageVersion);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    // ComponentBitmapBitLength not a multiple of 8
-    constexpr std::array<uint8_t, packagerHeaderSize>
-        invalidPackagerHeaderInfo4{
-            0xf0, 0x18, 0x87, 0x8c, 0xcb, 0x7d, 0x49, 0x43, 0x98, 0x00,
-            0xa0, 0x2F, 0x05, 0x9a, 0xca, 0x02, 0x02, 0x2f, 0x01, 0x00,
-            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x0c, 0xe5,
-            0x07, 0x00, 0x09, 0x00, 0x01, 0x0b, 0x4f, 0x70, 0x65, 0x6e,
-            0x42, 0x4d, 0x43, 0x76, 0x31, 0x2e, 0x30};
-    rc = decode_pldm_package_header_info(invalidPackagerHeaderInfo4.data(),
-                                         invalidPackagerHeaderInfo4.size(),
-                                         &packageHeader, &packageVersion);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(DecodeFirmwareDeviceIdRecord, goodPath)
-{
-    constexpr uint8_t descriptorCount = 1;
-    // Continue component updates after failure
-    constexpr std::bitset<32> deviceUpdateFlag{1};
-    constexpr uint16_t componentBitmapBitLength = 16;
-    // Applicable Components - 1,2,5,8,9
-    std::vector<std::bitset<8>> applicableComponentsBitfield{0x93, 0x01};
-    // ComponentImageSetVersionString
-    constexpr std::string_view imageSetVersionStr{"VersionString1"};
-    // Initial descriptor - UUID
-    constexpr std::array<uint8_t, PLDM_FWUP_UUID_LENGTH> uuid{
-        0x12, 0x44, 0xd2, 0x64, 0x8d, 0x7d, 0x47, 0x18,
-        0xa0, 0x30, 0xfc, 0x8a, 0x56, 0x58, 0x7d, 0x5b};
-    constexpr uint16_t fwDevicePkgDataLen = 2;
-    // FirmwareDevicePackageData
-    constexpr std::array<uint8_t, fwDevicePkgDataLen> fwDevicePkgData{0xab,
-                                                                      0xcd};
-    // Size of the firmware device ID record
-    constexpr uint16_t recordLen =
-        sizeof(pldm_firmware_device_id_record) +
-        (componentBitmapBitLength / PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE) +
-        imageSetVersionStr.size() + sizeof(pldm_descriptor_tlv) - 1 +
-        uuid.size() + fwDevicePkgData.size();
-    // Firmware device ID record
-    constexpr std::array<uint8_t, recordLen> record{
-        0x31, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x02,
-        0x00, 0x93, 0x01, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
-        0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x31, 0x02, 0x00, 0x10,
-        0x00, 0x12, 0x44, 0xd2, 0x64, 0x8d, 0x7d, 0x47, 0x18, 0xa0,
-        0x30, 0xfc, 0x8a, 0x56, 0x58, 0x7d, 0x5b, 0xab, 0xcd};
-
-    pldm_firmware_device_id_record deviceIdRecHeader{};
-    variable_field applicableComponents{};
-    variable_field outCompImageSetVersionStr{};
-    variable_field recordDescriptors{};
-    variable_field outFwDevicePkgData{};
-
-    auto rc = decode_firmware_device_id_record(
-        record.data(), record.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, &outCompImageSetVersionStr,
-        &recordDescriptors, &outFwDevicePkgData);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(deviceIdRecHeader.record_length, recordLen);
-    EXPECT_EQ(deviceIdRecHeader.descriptor_count, descriptorCount);
-    EXPECT_EQ(deviceIdRecHeader.device_update_option_flags.value,
-              deviceUpdateFlag);
-    EXPECT_EQ(deviceIdRecHeader.comp_image_set_version_string_type,
-              PLDM_STR_TYPE_ASCII);
-    EXPECT_EQ(deviceIdRecHeader.comp_image_set_version_string_length,
-              imageSetVersionStr.size());
-    EXPECT_EQ(deviceIdRecHeader.fw_device_pkg_data_length, fwDevicePkgDataLen);
-
-    EXPECT_EQ(applicableComponents.length, applicableComponentsBitfield.size());
-    EXPECT_EQ(true,
-              std::equal(applicableComponents.ptr,
-                         applicableComponents.ptr + applicableComponents.length,
-                         applicableComponentsBitfield.begin(),
-                         applicableComponentsBitfield.end()));
-
-    EXPECT_EQ(outCompImageSetVersionStr.length, imageSetVersionStr.size());
-    std::string compImageSetVersionStr(
-        reinterpret_cast<const char*>(outCompImageSetVersionStr.ptr),
-        outCompImageSetVersionStr.length);
-    EXPECT_EQ(compImageSetVersionStr, imageSetVersionStr);
-
-    uint16_t descriptorType = 0;
-    uint16_t descriptorLen = 0;
-    variable_field descriptorData{};
-    // DescriptorCount is 1, so decode_descriptor_type_length_value called once
-    rc = decode_descriptor_type_length_value(recordDescriptors.ptr,
-                                             recordDescriptors.length,
-                                             &descriptorType, &descriptorData);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(recordDescriptors.length, sizeof(descriptorType) +
-                                            sizeof(descriptorLen) +
-                                            descriptorData.length);
-    EXPECT_EQ(descriptorType, PLDM_FWUP_UUID);
-    EXPECT_EQ(descriptorData.length, PLDM_FWUP_UUID_LENGTH);
-    EXPECT_EQ(true, std::equal(descriptorData.ptr,
-                               descriptorData.ptr + descriptorData.length,
-                               uuid.begin(), uuid.end()));
-
-    EXPECT_EQ(outFwDevicePkgData.length, fwDevicePkgData.size());
-    EXPECT_EQ(true,
-              std::equal(outFwDevicePkgData.ptr,
-                         outFwDevicePkgData.ptr + outFwDevicePkgData.length,
-                         fwDevicePkgData.begin(), fwDevicePkgData.end()));
-}
-
-TEST(DecodeFirmwareDeviceIdRecord, goodPathNofwDevicePkgData)
-{
-    constexpr uint8_t descriptorCount = 1;
-    // Continue component updates after failure
-    constexpr std::bitset<32> deviceUpdateFlag{1};
-    constexpr uint16_t componentBitmapBitLength = 8;
-    // Applicable Components - 1,2
-    std::vector<std::bitset<8>> applicableComponentsBitfield{0x03};
-    // ComponentImageSetVersionString
-    constexpr std::string_view imageSetVersionStr{"VersionString1"};
-    // Initial descriptor - UUID
-    constexpr std::array<uint8_t, PLDM_FWUP_UUID_LENGTH> uuid{
-        0x12, 0x44, 0xd2, 0x64, 0x8d, 0x7d, 0x47, 0x18,
-        0xa0, 0x30, 0xfc, 0x8a, 0x56, 0x58, 0x7d, 0x5b};
-    constexpr uint16_t fwDevicePkgDataLen = 0;
-
-    // Size of the firmware device ID record
-    constexpr uint16_t recordLen =
-        sizeof(pldm_firmware_device_id_record) +
-        (componentBitmapBitLength / PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE) +
-        imageSetVersionStr.size() +
-        sizeof(pldm_descriptor_tlv().descriptor_type) +
-        sizeof(pldm_descriptor_tlv().descriptor_length) + uuid.size() +
-        fwDevicePkgDataLen;
-    // Firmware device ID record
-    constexpr std::array<uint8_t, recordLen> record{
-        0x2e, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x03,
-        0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e,
-        0x67, 0x31, 0x02, 0x00, 0x10, 0x00, 0x12, 0x44, 0xd2, 0x64, 0x8d, 0x7d,
-        0x47, 0x18, 0xa0, 0x30, 0xfc, 0x8a, 0x56, 0x58, 0x7d, 0x5b};
-
-    pldm_firmware_device_id_record deviceIdRecHeader{};
-    variable_field applicableComponents{};
-    variable_field outCompImageSetVersionStr{};
-    variable_field recordDescriptors{};
-    variable_field outFwDevicePkgData{};
-
-    auto rc = decode_firmware_device_id_record(
-        record.data(), record.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, &outCompImageSetVersionStr,
-        &recordDescriptors, &outFwDevicePkgData);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(deviceIdRecHeader.record_length, recordLen);
-    EXPECT_EQ(deviceIdRecHeader.descriptor_count, descriptorCount);
-    EXPECT_EQ(deviceIdRecHeader.device_update_option_flags.value,
-              deviceUpdateFlag);
-    EXPECT_EQ(deviceIdRecHeader.comp_image_set_version_string_type,
-              PLDM_STR_TYPE_ASCII);
-    EXPECT_EQ(deviceIdRecHeader.comp_image_set_version_string_length,
-              imageSetVersionStr.size());
-    EXPECT_EQ(deviceIdRecHeader.fw_device_pkg_data_length, 0);
-
-    EXPECT_EQ(applicableComponents.length, applicableComponentsBitfield.size());
-    EXPECT_EQ(true,
-              std::equal(applicableComponents.ptr,
-                         applicableComponents.ptr + applicableComponents.length,
-                         applicableComponentsBitfield.begin(),
-                         applicableComponentsBitfield.end()));
-
-    EXPECT_EQ(outCompImageSetVersionStr.length, imageSetVersionStr.size());
-    std::string compImageSetVersionStr(
-        reinterpret_cast<const char*>(outCompImageSetVersionStr.ptr),
-        outCompImageSetVersionStr.length);
-    EXPECT_EQ(compImageSetVersionStr, imageSetVersionStr);
-
-    uint16_t descriptorType = 0;
-    uint16_t descriptorLen = 0;
-    variable_field descriptorData{};
-    // DescriptorCount is 1, so decode_descriptor_type_length_value called once
-    rc = decode_descriptor_type_length_value(recordDescriptors.ptr,
-                                             recordDescriptors.length,
-                                             &descriptorType, &descriptorData);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(recordDescriptors.length, sizeof(descriptorType) +
-                                            sizeof(descriptorLen) +
-                                            descriptorData.length);
-    EXPECT_EQ(descriptorType, PLDM_FWUP_UUID);
-    EXPECT_EQ(descriptorData.length, PLDM_FWUP_UUID_LENGTH);
-    EXPECT_EQ(true, std::equal(descriptorData.ptr,
-                               descriptorData.ptr + descriptorData.length,
-                               uuid.begin(), uuid.end()));
-
-    EXPECT_EQ(outFwDevicePkgData.ptr, nullptr);
-    EXPECT_EQ(outFwDevicePkgData.length, 0);
-}
-
-TEST(DecodeFirmwareDeviceIdRecord, ErrorPaths)
-{
-    constexpr uint16_t componentBitmapBitLength = 8;
-    // Invalid ComponentImageSetVersionStringType
-    constexpr std::array<uint8_t, 11> invalidRecord1{
-        0x0b, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00};
-
-    int rc = 0;
-    pldm_firmware_device_id_record deviceIdRecHeader{};
-    variable_field applicableComponents{};
-    variable_field outCompImageSetVersionStr{};
-    variable_field recordDescriptors{};
-    variable_field outFwDevicePkgData{};
-
-    rc = decode_firmware_device_id_record(
-        nullptr, invalidRecord1.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, &outCompImageSetVersionStr,
-        &recordDescriptors, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_firmware_device_id_record(
-        invalidRecord1.data(), invalidRecord1.size(), componentBitmapBitLength,
-        nullptr, &applicableComponents, &outCompImageSetVersionStr,
-        &recordDescriptors, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_firmware_device_id_record(
-        invalidRecord1.data(), invalidRecord1.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, nullptr, &outCompImageSetVersionStr,
-        &recordDescriptors, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_firmware_device_id_record(
-        invalidRecord1.data(), invalidRecord1.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, nullptr, &recordDescriptors,
-        &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_firmware_device_id_record(
-        invalidRecord1.data(), invalidRecord1.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, &outCompImageSetVersionStr,
-        nullptr, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_firmware_device_id_record(
-        invalidRecord1.data(), invalidRecord1.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, &outCompImageSetVersionStr,
-        &recordDescriptors, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_firmware_device_id_record(
-        invalidRecord1.data(), invalidRecord1.size() - 1,
-        componentBitmapBitLength, &deviceIdRecHeader, &applicableComponents,
-        &outCompImageSetVersionStr, &recordDescriptors, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_firmware_device_id_record(
-        invalidRecord1.data(), invalidRecord1.size(),
-        componentBitmapBitLength + 1, &deviceIdRecHeader, &applicableComponents,
-        &outCompImageSetVersionStr, &recordDescriptors, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_firmware_device_id_record(
-        invalidRecord1.data(), invalidRecord1.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, &outCompImageSetVersionStr,
-        &recordDescriptors, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Invalid ComponentImageSetVersionStringLength
-    constexpr std::array<uint8_t, 11> invalidRecord2{
-        0x0b, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00};
-    rc = decode_firmware_device_id_record(
-        invalidRecord2.data(), invalidRecord2.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, &outCompImageSetVersionStr,
-        &recordDescriptors, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // invalidRecord3 size is less than RecordLength
-    constexpr std::array<uint8_t, 11> invalidRecord3{
-        0x2e, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00};
-    rc = decode_firmware_device_id_record(
-        invalidRecord3.data(), invalidRecord3.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, &outCompImageSetVersionStr,
-        &recordDescriptors, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    // RecordLength is less than the calculated RecordLength
-    constexpr std::array<uint8_t, 11> invalidRecord4{
-        0x15, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x02, 0x00};
-    rc = decode_firmware_device_id_record(
-        invalidRecord4.data(), invalidRecord4.size(), componentBitmapBitLength,
-        &deviceIdRecHeader, &applicableComponents, &outCompImageSetVersionStr,
-        &recordDescriptors, &outFwDevicePkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(DecodeDescriptors, goodPath3Descriptors)
-{
-    // In the descriptor data there are 3 descriptor entries
-    // 1) IANA enterprise ID
-    constexpr std::array<uint8_t, PLDM_FWUP_IANA_ENTERPRISE_ID_LENGTH> iana{
-        0x0a, 0x0b, 0x0c, 0xd};
-    // 2) UUID
-    constexpr std::array<uint8_t, PLDM_FWUP_UUID_LENGTH> uuid{
-        0x12, 0x44, 0xd2, 0x64, 0x8d, 0x7d, 0x47, 0x18,
-        0xa0, 0x30, 0xfc, 0x8a, 0x56, 0x58, 0x7d, 0x5b};
-    // 3) Vendor Defined
-    constexpr std::string_view vendorTitle{"OpenBMC"};
-    constexpr size_t vendorDescriptorLen = 2;
-    constexpr std::array<uint8_t, vendorDescriptorLen> vendorDescriptorData{
-        0x01, 0x02};
-
-    constexpr size_t vendorDefinedDescriptorLen =
-        sizeof(pldm_vendor_defined_descriptor_title_data()
-                   .vendor_defined_descriptor_title_str_type) +
-        sizeof(pldm_vendor_defined_descriptor_title_data()
-                   .vendor_defined_descriptor_title_str_len) +
-        vendorTitle.size() + vendorDescriptorData.size();
-
-    constexpr size_t descriptorsLength =
-        3 * (sizeof(pldm_descriptor_tlv().descriptor_type) +
-             sizeof(pldm_descriptor_tlv().descriptor_length)) +
-        iana.size() + uuid.size() + vendorDefinedDescriptorLen;
-
-    constexpr std::array<uint8_t, descriptorsLength> descriptors{
-        0x01, 0x00, 0x04, 0x00, 0x0a, 0x0b, 0x0c, 0x0d, 0x02, 0x00, 0x10,
-        0x00, 0x12, 0x44, 0xd2, 0x64, 0x8d, 0x7d, 0x47, 0x18, 0xa0, 0x30,
-        0xfc, 0x8a, 0x56, 0x58, 0x7d, 0x5b, 0xFF, 0xFF, 0x0B, 0x00, 0x01,
-        0x07, 0x4f, 0x70, 0x65, 0x6e, 0x42, 0x4d, 0x43, 0x01, 0x02};
-
-    size_t descriptorCount = 1;
-    size_t descriptorsRemainingLength = descriptorsLength;
-    int rc = 0;
-
-    while (descriptorsRemainingLength && (descriptorCount <= 3))
-    {
-        uint16_t descriptorType = 0;
-        uint16_t descriptorLen = 0;
-        variable_field descriptorData{};
-
-        rc = decode_descriptor_type_length_value(
-            descriptors.data() + descriptorsLength - descriptorsRemainingLength,
-            descriptorsRemainingLength, &descriptorType, &descriptorData);
-        EXPECT_EQ(rc, PLDM_SUCCESS);
-
-        if (descriptorCount == 1)
-        {
-            EXPECT_EQ(descriptorType, PLDM_FWUP_IANA_ENTERPRISE_ID);
-            EXPECT_EQ(descriptorData.length,
-                      PLDM_FWUP_IANA_ENTERPRISE_ID_LENGTH);
-            EXPECT_EQ(true,
-                      std::equal(descriptorData.ptr,
-                                 descriptorData.ptr + descriptorData.length,
-                                 iana.begin(), iana.end()));
-        }
-        else if (descriptorCount == 2)
-        {
-            EXPECT_EQ(descriptorType, PLDM_FWUP_UUID);
-            EXPECT_EQ(descriptorData.length, PLDM_FWUP_UUID_LENGTH);
-            EXPECT_EQ(true,
-                      std::equal(descriptorData.ptr,
-                                 descriptorData.ptr + descriptorData.length,
-                                 uuid.begin(), uuid.end()));
-        }
-        else if (descriptorCount == 3)
-        {
-            EXPECT_EQ(descriptorType, PLDM_FWUP_VENDOR_DEFINED);
-            EXPECT_EQ(descriptorData.length, vendorDefinedDescriptorLen);
-
-            uint8_t descriptorTitleStrType = 0;
-            variable_field descriptorTitleStr{};
-            variable_field vendorDefinedDescriptorData{};
-
-            rc = decode_vendor_defined_descriptor_value(
-                descriptorData.ptr, descriptorData.length,
-                &descriptorTitleStrType, &descriptorTitleStr,
-                &vendorDefinedDescriptorData);
-            EXPECT_EQ(rc, PLDM_SUCCESS);
-
-            EXPECT_EQ(descriptorTitleStrType, PLDM_STR_TYPE_ASCII);
-            EXPECT_EQ(descriptorTitleStr.length, vendorTitle.size());
-            std::string vendorTitleStr(
-                reinterpret_cast<const char*>(descriptorTitleStr.ptr),
-                descriptorTitleStr.length);
-            EXPECT_EQ(vendorTitleStr, vendorTitle);
-
-            EXPECT_EQ(vendorDefinedDescriptorData.length,
-                      vendorDescriptorData.size());
-            EXPECT_EQ(true, std::equal(vendorDefinedDescriptorData.ptr,
-                                       vendorDefinedDescriptorData.ptr +
-                                           vendorDefinedDescriptorData.length,
-                                       vendorDescriptorData.begin(),
-                                       vendorDescriptorData.end()));
-        }
-
-        descriptorsRemainingLength -= sizeof(descriptorType) +
-                                      sizeof(descriptorLen) +
-                                      descriptorData.length;
-        descriptorCount++;
-    }
-}
-
-TEST(DecodeDescriptors, errorPathDecodeDescriptorTLV)
-{
-    int rc = 0;
-    // IANA Enterprise ID descriptor length incorrect
-    constexpr std::array<uint8_t, 7> invalidIANADescriptor1{
-        0x01, 0x00, 0x03, 0x00, 0x0a, 0x0b, 0x0c};
-    uint16_t descriptorType = 0;
-    variable_field descriptorData{};
-
-    rc = decode_descriptor_type_length_value(nullptr,
-                                             invalidIANADescriptor1.size(),
-                                             &descriptorType, &descriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_descriptor_type_length_value(invalidIANADescriptor1.data(),
-                                             invalidIANADescriptor1.size(),
-                                             nullptr, &descriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_descriptor_type_length_value(invalidIANADescriptor1.data(),
-                                             invalidIANADescriptor1.size(),
-                                             &descriptorType, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_descriptor_type_length_value(
-        invalidIANADescriptor1.data(), PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN - 1,
-        &descriptorType, &descriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_descriptor_type_length_value(invalidIANADescriptor1.data(),
-                                             invalidIANADescriptor1.size(),
-                                             &descriptorType, &descriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    // IANA Enterprise ID descriptor data less than length
-    std::array<uint8_t, 7> invalidIANADescriptor2{0x01, 0x00, 0x04, 0x00,
-                                                  0x0a, 0x0b, 0x0c};
-    rc = decode_descriptor_type_length_value(invalidIANADescriptor2.data(),
-                                             invalidIANADescriptor2.size(),
-                                             &descriptorType, &descriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(DecodeDescriptors, errorPathVendorDefinedDescriptor)
-{
-    int rc = 0;
-    // VendorDefinedDescriptorTitleStringType is invalid
-    constexpr std::array<uint8_t, 9> invalidVendorDescriptor1{
-        0x06, 0x07, 0x4f, 0x70, 0x65, 0x6e, 0x42, 0x4d, 0x43};
-    uint8_t descriptorStringType = 0;
-    variable_field descriptorTitleStr{};
-    variable_field vendorDefinedDescriptorData{};
-
-    rc = decode_vendor_defined_descriptor_value(
-        nullptr, invalidVendorDescriptor1.size(), &descriptorStringType,
-        &descriptorTitleStr, &vendorDefinedDescriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_vendor_defined_descriptor_value(
-        invalidVendorDescriptor1.data(), invalidVendorDescriptor1.size(),
-        &descriptorStringType, &descriptorTitleStr,
-        &vendorDefinedDescriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_vendor_defined_descriptor_value(
-        invalidVendorDescriptor1.data(), invalidVendorDescriptor1.size(),
-        nullptr, &descriptorTitleStr, &vendorDefinedDescriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_vendor_defined_descriptor_value(
-        invalidVendorDescriptor1.data(), invalidVendorDescriptor1.size(),
-        &descriptorStringType, nullptr, &vendorDefinedDescriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_vendor_defined_descriptor_value(
-        invalidVendorDescriptor1.data(), invalidVendorDescriptor1.size(),
-        &descriptorStringType, &descriptorTitleStr, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_vendor_defined_descriptor_value(
-        invalidVendorDescriptor1.data(),
-        sizeof(pldm_vendor_defined_descriptor_title_data) - 1,
-        &descriptorStringType, &descriptorTitleStr,
-        &vendorDefinedDescriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_vendor_defined_descriptor_value(
-        invalidVendorDescriptor1.data(), invalidVendorDescriptor1.size(),
-        &descriptorStringType, &descriptorTitleStr,
-        &vendorDefinedDescriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // VendorDefinedDescriptorTitleStringLength is 0
-    std::array<uint8_t, 9> invalidVendorDescriptor2{
-        0x01, 0x00, 0x4f, 0x70, 0x65, 0x6e, 0x42, 0x4d, 0x43};
-    rc = decode_vendor_defined_descriptor_value(
-        invalidVendorDescriptor2.data(), invalidVendorDescriptor2.size(),
-        &descriptorStringType, &descriptorTitleStr,
-        &vendorDefinedDescriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // VendorDefinedDescriptorData not present in the data
-    std::array<uint8_t, 9> invalidVendorDescriptor3{
-        0x01, 0x07, 0x4f, 0x70, 0x65, 0x6e, 0x42, 0x4d, 0x43};
-    rc = decode_vendor_defined_descriptor_value(
-        invalidVendorDescriptor3.data(), invalidVendorDescriptor3.size(),
-        &descriptorStringType, &descriptorTitleStr,
-        &vendorDefinedDescriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(DecodeComponentImageInfo, goodPath)
-{
-    // Firmware
-    constexpr uint16_t compClassification = 16;
-    constexpr uint16_t compIdentifier = 300;
-    constexpr uint32_t compComparisonStamp = 0xFFFFFFFF;
-    // Force update
-    constexpr std::bitset<16> compOptions{1};
-    // System reboot[Bit position 3] & Medium-specific reset[Bit position 2]
-    constexpr std::bitset<16> reqCompActivationMethod{0x0c};
-    // Random ComponentLocationOffset
-    constexpr uint32_t compLocOffset = 357;
-    // Random ComponentSize
-    constexpr uint32_t compSize = 27;
-    // ComponentVersionString
-    constexpr std::string_view compVersionStr{"VersionString1"};
-    constexpr size_t compImageInfoSize =
-        sizeof(pldm_component_image_information) + compVersionStr.size();
-
-    constexpr std::array<uint8_t, compImageInfoSize> compImageInfo{
-        0x10, 0x00, 0x2c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x0c, 0x00,
-        0x65, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x56, 0x65,
-        0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x31};
-    pldm_component_image_information outCompImageInfo{};
-    variable_field outCompVersionStr{};
-
-    auto rc =
-        decode_pldm_comp_image_info(compImageInfo.data(), compImageInfo.size(),
-                                    &outCompImageInfo, &outCompVersionStr);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outCompImageInfo.comp_classification, compClassification);
-    EXPECT_EQ(outCompImageInfo.comp_identifier, compIdentifier);
-    EXPECT_EQ(outCompImageInfo.comp_comparison_stamp, compComparisonStamp);
-    EXPECT_EQ(outCompImageInfo.comp_options.value, compOptions);
-    EXPECT_EQ(outCompImageInfo.requested_comp_activation_method.value,
-              reqCompActivationMethod);
-    EXPECT_EQ(outCompImageInfo.comp_location_offset, compLocOffset);
-    EXPECT_EQ(outCompImageInfo.comp_size, compSize);
-    EXPECT_EQ(outCompImageInfo.comp_version_string_type, PLDM_STR_TYPE_ASCII);
-    EXPECT_EQ(outCompImageInfo.comp_version_string_length,
-              compVersionStr.size());
-
-    EXPECT_EQ(outCompVersionStr.length,
-              outCompImageInfo.comp_version_string_length);
-    std::string componentVersionString(
-        reinterpret_cast<const char*>(outCompVersionStr.ptr),
-        outCompVersionStr.length);
-    EXPECT_EQ(componentVersionString, compVersionStr);
-}
-
-TEST(DecodeComponentImageInfo, errorPaths)
-{
-    int rc = 0;
-    // ComponentVersionString
-    constexpr std::string_view compVersionStr{"VersionString1"};
-    constexpr size_t compImageInfoSize =
-        sizeof(pldm_component_image_information) + compVersionStr.size();
-    // Invalid ComponentVersionStringType - 0x06
-    constexpr std::array<uint8_t, compImageInfoSize> invalidCompImageInfo1{
-        0x10, 0x00, 0x2c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x0c, 0x00,
-        0x65, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x06, 0x0e, 0x56, 0x65,
-        0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x31};
-    pldm_component_image_information outCompImageInfo{};
-    variable_field outCompVersionStr{};
-
-    rc = decode_pldm_comp_image_info(nullptr, invalidCompImageInfo1.size(),
-                                     &outCompImageInfo, &outCompVersionStr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pldm_comp_image_info(invalidCompImageInfo1.data(),
-                                     invalidCompImageInfo1.size(), nullptr,
-                                     &outCompVersionStr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pldm_comp_image_info(invalidCompImageInfo1.data(),
-                                     invalidCompImageInfo1.size(),
-                                     &outCompImageInfo, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pldm_comp_image_info(invalidCompImageInfo1.data(),
-                                     sizeof(pldm_component_image_information) -
-                                         1,
-                                     &outCompImageInfo, &outCompVersionStr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_pldm_comp_image_info(invalidCompImageInfo1.data(),
-                                     invalidCompImageInfo1.size(),
-                                     &outCompImageInfo, &outCompVersionStr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Invalid ComponentVersionStringLength - 0x00
-    constexpr std::array<uint8_t, compImageInfoSize> invalidCompImageInfo2{
-        0x10, 0x00, 0x2c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x0c, 0x00,
-        0x65, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x56, 0x65,
-        0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x31};
-    rc = decode_pldm_comp_image_info(invalidCompImageInfo2.data(),
-                                     invalidCompImageInfo2.size(),
-                                     &outCompImageInfo, &outCompVersionStr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Use Component Comparison Stamp is not set, but ComponentComparisonStamp
-    // is not 0xFFFFFFFF
-    constexpr std::array<uint8_t, compImageInfoSize> invalidCompImageInfo3{
-        0x10, 0x00, 0x2c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00,
-        0x65, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x56, 0x65,
-        0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x31};
-
-    rc = decode_pldm_comp_image_info(invalidCompImageInfo3.data(),
-                                     invalidCompImageInfo3.size() - 1,
-                                     &outCompImageInfo, &outCompVersionStr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_pldm_comp_image_info(invalidCompImageInfo3.data(),
-                                     invalidCompImageInfo3.size(),
-                                     &outCompImageInfo, &outCompVersionStr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Invalid ComponentLocationOffset - 0
-    constexpr std::array<uint8_t, compImageInfoSize> invalidCompImageInfo4{
-        0x10, 0x00, 0x2c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x0c, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x56, 0x65,
-        0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x31};
-    rc = decode_pldm_comp_image_info(invalidCompImageInfo4.data(),
-                                     invalidCompImageInfo4.size(),
-                                     &outCompImageInfo, &outCompVersionStr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Invalid ComponentSize - 0
-    constexpr std::array<uint8_t, compImageInfoSize> invalidCompImageInfo5{
-        0x10, 0x00, 0x2c, 0x01, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x0c, 0x00,
-        0x65, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x56, 0x65,
-        0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x31};
-    rc = decode_pldm_comp_image_info(invalidCompImageInfo5.data(),
-                                     invalidCompImageInfo5.size(),
-                                     &outCompImageInfo, &outCompVersionStr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(QueryDeviceIdentifiers, goodPathEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr)> requestMsg{};
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    uint8_t instanceId = 0x01;
-
-    auto rc = encode_query_device_identifiers_req(
-        instanceId, PLDM_QUERY_DEVICE_IDENTIFIERS_REQ_BYTES, requestPtr);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(requestPtr->hdr.request, PLDM_REQUEST);
-    EXPECT_EQ(requestPtr->hdr.instance_id, instanceId);
-    EXPECT_EQ(requestPtr->hdr.type, PLDM_FWUP);
-    EXPECT_EQ(requestPtr->hdr.command, PLDM_QUERY_DEVICE_IDENTIFIERS);
-}
-
-TEST(QueryDeviceIdentifiers, goodPathDecodeResponse)
-{
-    // descriptorDataLen is not fixed here taking it as 6
-    constexpr uint8_t descriptorDataLen = 6;
-    std::array<uint8_t, hdrSize +
-                            sizeof(struct pldm_query_device_identifiers_resp) +
-                            descriptorDataLen>
-        responseMsg{};
-    auto inResp = reinterpret_cast<struct pldm_query_device_identifiers_resp*>(
-        responseMsg.data() + hdrSize);
-
-    inResp->completion_code = PLDM_SUCCESS;
-    inResp->device_identifiers_len = htole32(descriptorDataLen);
-    inResp->descriptor_count = 1;
-
-    // filling descriptor data
-    std::fill_n(responseMsg.data() + hdrSize +
-                    sizeof(struct pldm_query_device_identifiers_resp),
-                descriptorDataLen, 0xFF);
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t deviceIdentifiersLen = 0;
-    uint8_t descriptorCount = 0;
-    uint8_t* outDescriptorData = nullptr;
-
-    auto rc = decode_query_device_identifiers_resp(
-        response, responseMsg.size() - hdrSize, &completionCode,
-        &deviceIdentifiersLen, &descriptorCount, &outDescriptorData);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(deviceIdentifiersLen, inResp->device_identifiers_len);
-    EXPECT_EQ(descriptorCount, inResp->descriptor_count);
-    EXPECT_EQ(true,
-              std::equal(outDescriptorData,
-                         outDescriptorData + deviceIdentifiersLen,
-                         responseMsg.begin() + hdrSize +
-                             sizeof(struct pldm_query_device_identifiers_resp),
-                         responseMsg.end()));
-}
-
-TEST(GetFirmwareParameters, goodPathEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr)> requestMsg{};
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    uint8_t instanceId = 0x01;
-
-    auto rc = encode_get_firmware_parameters_req(
-        instanceId, PLDM_GET_FIRMWARE_PARAMETERS_REQ_BYTES, requestPtr);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(requestPtr->hdr.request, PLDM_REQUEST);
-    EXPECT_EQ(requestPtr->hdr.instance_id, instanceId);
-    EXPECT_EQ(requestPtr->hdr.type, PLDM_FWUP);
-    EXPECT_EQ(requestPtr->hdr.command, PLDM_GET_FIRMWARE_PARAMETERS);
-}
-
-TEST(GetFirmwareParameters, decodeResponse)
-{
-    // CapabilitiesDuringUpdate of the firmware device
-    // Firmware device downgrade restrictions [Bit position 8] &
-    // Firmware Device Partial Updates [Bit position 3]
-    constexpr std::bitset<32> fdCapabilities{0x00000104};
-    constexpr uint16_t compCount = 1;
-    constexpr std::string_view activeCompImageSetVersion{"VersionString1"};
-    constexpr std::string_view pendingCompImageSetVersion{"VersionString2"};
-
-    // constexpr uint16_t compClassification = 16;
-    // constexpr uint16_t compIdentifier = 300;
-    // constexpr uint8_t compClassificationIndex = 20;
-    // constexpr uint32_t activeCompComparisonStamp = 0xABCDEFAB;
-    // constexpr std::array<uint8_t, 8> activeComponentReleaseData = {
-    //     0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
-    // constexpr uint32_t pendingCompComparisonStamp = 0x12345678;
-    // constexpr std::array<uint8_t, 8> pendingComponentReleaseData = {
-    //     0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01};
-    constexpr std::string_view activeCompVersion{"VersionString3"};
-    constexpr std::string_view pendingCompVersion{"VersionString4"};
-    // ComponentActivationMethods
-    // DC Power cycle [Bit position 4] & Self-Contained[Bit position 2]
-    constexpr std::bitset<16> compActivationMethod{0x12};
-    // CapabilitiesDuringUpdate of the firmware component
-    // Component downgrade capability [Bit position 2]
-    constexpr std::bitset<32> compCapabilities{0x02};
-
-    constexpr size_t compParamTableSize =
-        sizeof(pldm_component_parameter_entry) + activeCompVersion.size() +
-        pendingCompVersion.size();
-
-    constexpr std::array<uint8_t, compParamTableSize> compParamTable{
-        0x10, 0x00, 0x2c, 0x01, 0x14, 0xAB, 0xEF, 0xCD, 0xAB, 0x01, 0x0e, 0x01,
-        0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x78, 0x56, 0x34, 0x12, 0x01,
-        0x0e, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x12, 0x00, 0x02,
-        0x00, 0x00, 0x00, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74,
-        0x72, 0x69, 0x6e, 0x67, 0x33, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
-        0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x34};
-
-    constexpr size_t getFwParamsPayloadLen =
-        sizeof(pldm_get_firmware_parameters_resp) +
-        activeCompImageSetVersion.size() + pendingCompImageSetVersion.size() +
-        compParamTableSize;
-
-    constexpr std::array<uint8_t, hdrSize + getFwParamsPayloadLen>
-        getFwParamsResponse{
-            0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01,
-            0x0e, 0x01, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53,
-            0x74, 0x72, 0x69, 0x6e, 0x67, 0x31, 0x56, 0x65, 0x72, 0x73, 0x69,
-            0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x10, 0x00,
-            0x2c, 0x01, 0x14, 0xAB, 0xEF, 0xCD, 0xAB, 0x01, 0x0e, 0x01, 0x02,
-            0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x78, 0x56, 0x34, 0x12, 0x01,
-            0x0e, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x12, 0x00,
-            0x02, 0x00, 0x00, 0x00, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
-            0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x33, 0x56, 0x65, 0x72, 0x73,
-            0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x34};
-
-    auto responseMsg =
-        reinterpret_cast<const pldm_msg*>(getFwParamsResponse.data());
-    pldm_get_firmware_parameters_resp outResp{};
-    variable_field outActiveCompImageSetVersion{};
-    variable_field outPendingCompImageSetVersion{};
-    variable_field outCompParameterTable{};
-
-    auto rc = decode_get_firmware_parameters_resp(
-        responseMsg, getFwParamsPayloadLen, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outResp.completion_code, PLDM_SUCCESS);
-    EXPECT_EQ(outResp.capabilities_during_update.value, fdCapabilities);
-    EXPECT_EQ(outResp.comp_count, compCount);
-    EXPECT_EQ(outResp.active_comp_image_set_ver_str_type, PLDM_STR_TYPE_ASCII);
-    EXPECT_EQ(outResp.active_comp_image_set_ver_str_len,
-              activeCompImageSetVersion.size());
-    EXPECT_EQ(outResp.pending_comp_image_set_ver_str_type, PLDM_STR_TYPE_ASCII);
-    EXPECT_EQ(outResp.pending_comp_image_set_ver_str_len,
-              pendingCompImageSetVersion.size());
-    std::string activeCompImageSetVersionStr(
-        reinterpret_cast<const char*>(outActiveCompImageSetVersion.ptr),
-        outActiveCompImageSetVersion.length);
-    EXPECT_EQ(activeCompImageSetVersionStr, activeCompImageSetVersion);
-    std::string pendingCompImageSetVersionStr(
-        reinterpret_cast<const char*>(outPendingCompImageSetVersion.ptr),
-        outPendingCompImageSetVersion.length);
-    EXPECT_EQ(pendingCompImageSetVersionStr, pendingCompImageSetVersion);
-    EXPECT_EQ(outCompParameterTable.length, compParamTableSize);
-    EXPECT_EQ(true, std::equal(outCompParameterTable.ptr,
-                               outCompParameterTable.ptr +
-                                   outCompParameterTable.length,
-                               compParamTable.begin(), compParamTable.end()));
-}
-
-TEST(GetFirmwareParameters, decodeResponseZeroCompCount)
-{
-    // CapabilitiesDuringUpdate of the firmware device
-    // FD Host Functionality during Firmware Update [Bit position 2] &
-    // Component Update Failure Retry Capability [Bit position 1]
-    constexpr std::bitset<32> fdCapabilities{0x06};
-    constexpr uint16_t compCount = 0;
-    constexpr std::string_view activeCompImageSetVersion{"VersionString1"};
-    constexpr std::string_view pendingCompImageSetVersion{"VersionString2"};
-
-    constexpr size_t getFwParamsPayloadLen =
-        sizeof(pldm_get_firmware_parameters_resp) +
-        activeCompImageSetVersion.size() + pendingCompImageSetVersion.size();
-
-    constexpr std::array<uint8_t, hdrSize + getFwParamsPayloadLen>
-        getFwParamsResponse{
-            0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-            0x0e, 0x01, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53,
-            0x74, 0x72, 0x69, 0x6e, 0x67, 0x31, 0x56, 0x65, 0x72, 0x73, 0x69,
-            0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32};
-
-    auto responseMsg =
-        reinterpret_cast<const pldm_msg*>(getFwParamsResponse.data());
-    pldm_get_firmware_parameters_resp outResp{};
-    variable_field outActiveCompImageSetVersion{};
-    variable_field outPendingCompImageSetVersion{};
-    variable_field outCompParameterTable{};
-
-    auto rc = decode_get_firmware_parameters_resp(
-        responseMsg, getFwParamsPayloadLen, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outResp.completion_code, PLDM_SUCCESS);
-    EXPECT_EQ(outResp.capabilities_during_update.value, fdCapabilities);
-    EXPECT_EQ(outResp.comp_count, compCount);
-    EXPECT_EQ(outResp.active_comp_image_set_ver_str_type, PLDM_STR_TYPE_ASCII);
-    EXPECT_EQ(outResp.active_comp_image_set_ver_str_len,
-              activeCompImageSetVersion.size());
-    EXPECT_EQ(outResp.pending_comp_image_set_ver_str_type, PLDM_STR_TYPE_ASCII);
-    EXPECT_EQ(outResp.pending_comp_image_set_ver_str_len,
-              pendingCompImageSetVersion.size());
-    std::string activeCompImageSetVersionStr(
-        reinterpret_cast<const char*>(outActiveCompImageSetVersion.ptr),
-        outActiveCompImageSetVersion.length);
-    EXPECT_EQ(activeCompImageSetVersionStr, activeCompImageSetVersion);
-    std::string pendingCompImageSetVersionStr(
-        reinterpret_cast<const char*>(outPendingCompImageSetVersion.ptr),
-        outPendingCompImageSetVersion.length);
-    EXPECT_EQ(pendingCompImageSetVersionStr, pendingCompImageSetVersion);
-    EXPECT_EQ(outCompParameterTable.ptr, nullptr);
-    EXPECT_EQ(outCompParameterTable.length, 0);
-}
-
-TEST(GetFirmwareParameters,
-     decodeResponseNoPendingCompImageVersionStrZeroCompCount)
-{
-    // CapabilitiesDuringUpdate of the firmware device
-    // FD Host Functionality during Firmware Update [Bit position 2] &
-    // Component Update Failure Retry Capability [Bit position 1]
-    constexpr std::bitset<32> fdCapabilities{0x06};
-    constexpr uint16_t compCount = 0;
-    constexpr std::string_view activeCompImageSetVersion{"VersionString"};
-
-    constexpr size_t getFwParamsPayloadLen =
-        sizeof(pldm_get_firmware_parameters_resp) +
-        activeCompImageSetVersion.size();
-
-    constexpr std::array<uint8_t, hdrSize + getFwParamsPayloadLen>
-        getFwParamsResponse{0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
-                            0x00, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x00,
-                            0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
-                            0x53, 0x74, 0x72, 0x69, 0x6e, 0x67};
-
-    auto responseMsg =
-        reinterpret_cast<const pldm_msg*>(getFwParamsResponse.data());
-    pldm_get_firmware_parameters_resp outResp{};
-    variable_field outActiveCompImageSetVersion{};
-    variable_field outPendingCompImageSetVersion{};
-    variable_field outCompParameterTable{};
-
-    auto rc = decode_get_firmware_parameters_resp(
-        responseMsg, getFwParamsPayloadLen, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outResp.completion_code, PLDM_SUCCESS);
-    EXPECT_EQ(outResp.capabilities_during_update.value, fdCapabilities);
-    EXPECT_EQ(outResp.comp_count, compCount);
-    EXPECT_EQ(outResp.active_comp_image_set_ver_str_type, PLDM_STR_TYPE_ASCII);
-    EXPECT_EQ(outResp.active_comp_image_set_ver_str_len,
-              activeCompImageSetVersion.size());
-    EXPECT_EQ(outResp.pending_comp_image_set_ver_str_type,
-              PLDM_STR_TYPE_UNKNOWN);
-    EXPECT_EQ(outResp.pending_comp_image_set_ver_str_len, 0);
-    std::string activeCompImageSetVersionStr(
-        reinterpret_cast<const char*>(outActiveCompImageSetVersion.ptr),
-        outActiveCompImageSetVersion.length);
-    EXPECT_EQ(activeCompImageSetVersionStr, activeCompImageSetVersion);
-    EXPECT_EQ(outPendingCompImageSetVersion.ptr, nullptr);
-    EXPECT_EQ(outPendingCompImageSetVersion.length, 0);
-    EXPECT_EQ(outCompParameterTable.ptr, nullptr);
-    EXPECT_EQ(outCompParameterTable.length, 0);
-}
-
-TEST(GetFirmwareParameters, decodeResponseErrorCompletionCode)
-{
-    constexpr std::array<uint8_t, hdrSize + sizeof(uint8_t)>
-        getFwParamsResponse{0x00, 0x00, 0x00, 0x01};
-
-    auto responseMsg =
-        reinterpret_cast<const pldm_msg*>(getFwParamsResponse.data());
-    pldm_get_firmware_parameters_resp outResp{};
-    variable_field outActiveCompImageSetVersion{};
-    variable_field outPendingCompImageSetVersion{};
-    variable_field outCompParameterTable{};
-
-    auto rc = decode_get_firmware_parameters_resp(
-        responseMsg, getFwParamsResponse.size(), &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outResp.completion_code, PLDM_ERROR);
-}
-
-TEST(GetFirmwareParameters, errorPathdecodeResponse)
-{
-    int rc = 0;
-    // Invalid ActiveComponentImageSetVersionStringType
-    constexpr std::array<uint8_t, 14> invalidGetFwParamsResponse1{
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00};
-
-    auto responseMsg =
-        reinterpret_cast<const pldm_msg*>(invalidGetFwParamsResponse1.data());
-    pldm_get_firmware_parameters_resp outResp{};
-    variable_field outActiveCompImageSetVersion{};
-    variable_field outPendingCompImageSetVersion{};
-    variable_field outCompParameterTable{};
-
-    rc = decode_get_firmware_parameters_resp(
-        nullptr, invalidGetFwParamsResponse1.size() - hdrSize, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse1.size() - hdrSize, nullptr,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse1.size() - hdrSize, &outResp,
-        nullptr, &outPendingCompImageSetVersion, &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse1.size() - hdrSize, &outResp,
-        &outActiveCompImageSetVersion, nullptr, &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse1.size() - hdrSize, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, 0, &outResp, &outActiveCompImageSetVersion,
-        &outPendingCompImageSetVersion, &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse1.size() - 1 - hdrSize, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse1.size() - hdrSize, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Invalid ActiveComponentImageSetVersionStringLength
-    constexpr std::array<uint8_t, 14> invalidGetFwParamsResponse2{
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00};
-    responseMsg =
-        reinterpret_cast<const pldm_msg*>(invalidGetFwParamsResponse2.data());
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse2.size() - hdrSize, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Invalid PendingComponentImageSetVersionStringType &
-    // PendingComponentImageSetVersionStringLength
-    constexpr std::array<uint8_t, 14> invalidGetFwParamsResponse3{
-        0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x01, 0x0e, 0x01, 0x00};
-    responseMsg =
-        reinterpret_cast<const pldm_msg*>(invalidGetFwParamsResponse3.data());
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse3.size() - hdrSize, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Invalid PendingComponentImageSetVersionStringType &
-    // PendingComponentImageSetVersionStringLength
-    constexpr std::array<uint8_t, 14> invalidGetFwParamsResponse4{
-        0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x01, 0x0e, 0x06, 0x0e};
-    responseMsg =
-        reinterpret_cast<const pldm_msg*>(invalidGetFwParamsResponse4.data());
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse4.size() - hdrSize, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Total payload length less than expected
-    constexpr std::array<uint8_t, 14> invalidGetFwParamsResponse5{
-        0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x01, 0x0e, 0x01, 0x0e};
-    responseMsg =
-        reinterpret_cast<const pldm_msg*>(invalidGetFwParamsResponse5.data());
-    rc = decode_get_firmware_parameters_resp(
-        responseMsg, invalidGetFwParamsResponse5.size() - hdrSize, &outResp,
-        &outActiveCompImageSetVersion, &outPendingCompImageSetVersion,
-        &outCompParameterTable);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetFirmwareParameters, goodPathDecodeComponentParameterEntry)
-{
-    // Random value for component classification
-    constexpr uint16_t compClassification = 0x0A0B;
-    // Random value for component classification
-    constexpr uint16_t compIdentifier = 0x0C0D;
-    // Random value for component classification
-    constexpr uint32_t timestamp = 0X12345678;
-    // Random value for component activation methods
-    constexpr uint16_t compActivationMethods = 0xBBDD;
-    // Random value for capabilities during update
-    constexpr uint32_t capabilitiesDuringUpdate = 0xBADBEEFE;
-
-    // ActiveCompImageSetVerStrLen is not fixed here taking it as 8
-    constexpr uint8_t activeCompVerStrLen = 8;
-    // PendingCompImageSetVerStrLen is not fixed here taking it as 8
-    constexpr uint8_t pendingCompVerStrLen = 8;
-    constexpr size_t entryLength =
-        sizeof(struct pldm_component_parameter_entry) + activeCompVerStrLen +
-        pendingCompVerStrLen;
-    std::array<uint8_t, entryLength> entry{};
-
-    auto inEntry =
-        reinterpret_cast<struct pldm_component_parameter_entry*>(entry.data());
-
-    inEntry->comp_classification = htole16(compClassification);
-    inEntry->comp_identifier = htole16(compIdentifier);
-    inEntry->comp_classification_index = 0x0F;
-    inEntry->active_comp_comparison_stamp = htole32(timestamp);
-    inEntry->active_comp_ver_str_type = 1;
-    inEntry->active_comp_ver_str_len = activeCompVerStrLen;
-    std::fill_n(inEntry->active_comp_release_date,
-                sizeof(inEntry->active_comp_release_date), 0xFF);
-    inEntry->pending_comp_comparison_stamp = htole32(timestamp);
-    inEntry->pending_comp_ver_str_type = 1;
-    inEntry->pending_comp_ver_str_len = pendingCompVerStrLen;
-    std::fill_n(inEntry->pending_comp_release_date,
-                sizeof(inEntry->pending_comp_release_date), 0xFF);
-    inEntry->comp_activation_methods.value = htole16(compActivationMethods);
-    inEntry->capabilities_during_update.value =
-        htole32(capabilitiesDuringUpdate);
-    constexpr auto activeCompVerStrPos =
-        sizeof(struct pldm_component_parameter_entry);
-    std::fill_n(entry.data() + activeCompVerStrPos, activeCompVerStrLen, 0xAA);
-    constexpr auto pendingCompVerStrPos =
-        activeCompVerStrPos + activeCompVerStrLen;
-    std::fill_n(entry.data() + pendingCompVerStrPos, pendingCompVerStrLen,
-                0xBB);
-
-    struct pldm_component_parameter_entry outEntry;
-    struct variable_field outActiveCompVerStr;
-    struct variable_field outPendingCompVerStr;
-
-    auto rc = decode_get_firmware_parameters_resp_comp_entry(
-        entry.data(), entryLength, &outEntry, &outActiveCompVerStr,
-        &outPendingCompVerStr);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    EXPECT_EQ(outEntry.comp_classification, compClassification);
-    EXPECT_EQ(outEntry.comp_identifier, compIdentifier);
-    EXPECT_EQ(inEntry->comp_classification_index,
-              outEntry.comp_classification_index);
-    EXPECT_EQ(outEntry.active_comp_comparison_stamp, timestamp);
-    EXPECT_EQ(inEntry->active_comp_ver_str_type,
-              outEntry.active_comp_ver_str_type);
-    EXPECT_EQ(inEntry->active_comp_ver_str_len,
-              outEntry.active_comp_ver_str_len);
-    EXPECT_EQ(0, memcmp(inEntry->active_comp_release_date,
-                        outEntry.active_comp_release_date,
-                        sizeof(inEntry->active_comp_release_date)));
-    EXPECT_EQ(outEntry.pending_comp_comparison_stamp, timestamp);
-    EXPECT_EQ(inEntry->pending_comp_ver_str_type,
-              outEntry.pending_comp_ver_str_type);
-    EXPECT_EQ(inEntry->pending_comp_ver_str_len,
-              outEntry.pending_comp_ver_str_len);
-    EXPECT_EQ(0, memcmp(inEntry->pending_comp_release_date,
-                        outEntry.pending_comp_release_date,
-                        sizeof(inEntry->pending_comp_release_date)));
-    EXPECT_EQ(outEntry.comp_activation_methods.value, compActivationMethods);
-    EXPECT_EQ(outEntry.capabilities_during_update.value,
-              capabilitiesDuringUpdate);
-
-    EXPECT_EQ(0, memcmp(outActiveCompVerStr.ptr,
-                        entry.data() + activeCompVerStrPos,
-                        outActiveCompVerStr.length));
-    EXPECT_EQ(0, memcmp(outPendingCompVerStr.ptr,
-                        entry.data() + pendingCompVerStrPos,
-                        outPendingCompVerStr.length));
-}
-
-TEST(RequestUpdate, goodPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 1;
-    constexpr uint32_t maxTransferSize = 512;
-    constexpr uint16_t numOfComp = 3;
-    constexpr uint8_t maxOutstandingTransferReq = 2;
-    constexpr uint16_t pkgDataLen = 0x1234;
-    constexpr std::string_view compImgSetVerStr = "0penBmcv1.0";
-    constexpr uint8_t compImgSetVerStrLen =
-        static_cast<uint8_t>(compImgSetVerStr.size());
-    variable_field compImgSetVerStrInfo{};
-    compImgSetVerStrInfo.ptr =
-        reinterpret_cast<const uint8_t*>(compImgSetVerStr.data());
-    compImgSetVerStrInfo.length = compImgSetVerStrLen;
-
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_request_update_req) +
-                            compImgSetVerStrLen>
-        request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_request_update_req(
-        instanceId, maxTransferSize, numOfComp, maxOutstandingTransferReq,
-        pkgDataLen, PLDM_STR_TYPE_ASCII, compImgSetVerStrLen,
-        &compImgSetVerStrInfo, requestMsg,
-        sizeof(struct pldm_request_update_req) + compImgSetVerStrLen);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_request_update_req) +
-                            compImgSetVerStrLen>
-        outRequest{0x81, 0x05, 0x10, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00,
-                   0x02, 0x34, 0x12, 0x01, 0x0b, 0x30, 0x70, 0x65, 0x6e,
-                   0x42, 0x6d, 0x63, 0x76, 0x31, 0x2e, 0x30};
-    EXPECT_EQ(request, outRequest);
-}
-
-TEST(RequestUpdate, errorPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 1;
-    uint32_t maxTransferSize = 512;
-    constexpr uint16_t numOfComp = 3;
-    uint8_t maxOutstandingTransferReq = 2;
-    constexpr uint16_t pkgDataLen = 0x1234;
-    constexpr std::string_view compImgSetVerStr = "0penBmcv1.0";
-    uint8_t compImgSetVerStrLen = static_cast<uint8_t>(compImgSetVerStr.size());
-    variable_field compImgSetVerStrInfo{};
-    compImgSetVerStrInfo.ptr =
-        reinterpret_cast<const uint8_t*>(compImgSetVerStr.data());
-    compImgSetVerStrInfo.length = compImgSetVerStrLen;
-
-    std::array<uint8_t, hdrSize + sizeof(struct pldm_request_update_req) +
-                            compImgSetVerStr.size()>
-        request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_request_update_req(
-        instanceId, maxTransferSize, numOfComp, maxOutstandingTransferReq,
-        pkgDataLen, PLDM_STR_TYPE_ASCII, compImgSetVerStrLen, nullptr,
-        requestMsg,
-        sizeof(struct pldm_request_update_req) + compImgSetVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    compImgSetVerStrInfo.ptr = nullptr;
-    rc = encode_request_update_req(
-        instanceId, maxTransferSize, numOfComp, maxOutstandingTransferReq,
-        pkgDataLen, PLDM_STR_TYPE_ASCII, compImgSetVerStrLen,
-        &compImgSetVerStrInfo, requestMsg,
-        sizeof(struct pldm_request_update_req) + compImgSetVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    compImgSetVerStrInfo.ptr =
-        reinterpret_cast<const uint8_t*>(compImgSetVerStr.data());
-
-    rc = encode_request_update_req(
-        instanceId, maxTransferSize, numOfComp, maxOutstandingTransferReq,
-        pkgDataLen, PLDM_STR_TYPE_ASCII, compImgSetVerStrLen,
-        &compImgSetVerStrInfo, nullptr,
-        sizeof(struct pldm_request_update_req) + compImgSetVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_request_update_req(instanceId, maxTransferSize, numOfComp,
-                                   maxOutstandingTransferReq, pkgDataLen,
-                                   PLDM_STR_TYPE_ASCII, compImgSetVerStrLen,
-                                   &compImgSetVerStrInfo, requestMsg, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    compImgSetVerStrLen = 0;
-    rc = encode_request_update_req(
-        instanceId, maxTransferSize, numOfComp, maxOutstandingTransferReq,
-        pkgDataLen, PLDM_STR_TYPE_ASCII, 0, &compImgSetVerStrInfo, nullptr,
-        sizeof(struct pldm_request_update_req) + compImgSetVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    compImgSetVerStrLen = static_cast<uint8_t>(compImgSetVerStr.size());
-
-    compImgSetVerStrInfo.length = 0xFFFF;
-    rc = encode_request_update_req(
-        instanceId, maxTransferSize, numOfComp, maxOutstandingTransferReq,
-        pkgDataLen, PLDM_STR_TYPE_ASCII, compImgSetVerStrLen,
-        &compImgSetVerStrInfo, nullptr,
-        sizeof(struct pldm_request_update_req) + compImgSetVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    compImgSetVerStrInfo.length = compImgSetVerStrLen;
-
-    maxTransferSize = PLDM_FWUP_BASELINE_TRANSFER_SIZE - 1;
-    rc = encode_request_update_req(
-        instanceId, maxTransferSize, numOfComp, maxOutstandingTransferReq,
-        pkgDataLen, PLDM_STR_TYPE_ASCII, compImgSetVerStrLen,
-        &compImgSetVerStrInfo, nullptr,
-        sizeof(struct pldm_request_update_req) + compImgSetVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    maxTransferSize = PLDM_FWUP_BASELINE_TRANSFER_SIZE;
-
-    maxOutstandingTransferReq = PLDM_FWUP_MIN_OUTSTANDING_REQ - 1;
-    rc = encode_request_update_req(
-        instanceId, maxTransferSize, numOfComp, maxOutstandingTransferReq,
-        pkgDataLen, PLDM_STR_TYPE_ASCII, compImgSetVerStrLen,
-        &compImgSetVerStrInfo, nullptr,
-        sizeof(struct pldm_request_update_req) + compImgSetVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    maxOutstandingTransferReq = PLDM_FWUP_MIN_OUTSTANDING_REQ;
-
-    rc = encode_request_update_req(
-        instanceId, maxTransferSize, numOfComp, maxOutstandingTransferReq,
-        pkgDataLen, PLDM_STR_TYPE_UNKNOWN, compImgSetVerStrLen,
-        &compImgSetVerStrInfo, nullptr,
-        sizeof(struct pldm_request_update_req) + compImgSetVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(RequestUpdate, goodPathDecodeResponse)
-{
-    constexpr uint16_t fdMetaDataLen = 1024;
-    constexpr uint8_t fdWillSendPkgData = 1;
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_request_update_resp)>
-        requestUpdateResponse1{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01};
-
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(requestUpdateResponse1.data());
-    uint8_t outCompletionCode = 0;
-    uint16_t outFdMetaDataLen = 0;
-    uint8_t outFdWillSendPkgData = 0;
-
-    auto rc = decode_request_update_resp(
-        responseMsg1, requestUpdateResponse1.size() - hdrSize,
-        &outCompletionCode, &outFdMetaDataLen, &outFdWillSendPkgData);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outCompletionCode, PLDM_SUCCESS);
-    EXPECT_EQ(outFdMetaDataLen, fdMetaDataLen);
-    EXPECT_EQ(outFdWillSendPkgData, fdWillSendPkgData);
-
-    outCompletionCode = 0;
-    outFdMetaDataLen = 0;
-    outFdWillSendPkgData = 0;
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(outCompletionCode)>
-        requestUpdateResponse2{0x00, 0x00, 0x00, 0x81};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(requestUpdateResponse2.data());
-    rc = decode_request_update_resp(
-        responseMsg2, requestUpdateResponse2.size() - hdrSize,
-        &outCompletionCode, &outFdMetaDataLen, &outFdWillSendPkgData);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outCompletionCode, PLDM_FWUP_ALREADY_IN_UPDATE_MODE);
-}
-
-TEST(RequestUpdate, errorPathDecodeResponse)
-{
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_request_update_resp) - 1>
-        requestUpdateResponse{0x00, 0x00, 0x00, 0x00, 0x00, 0x04};
-
-    auto responseMsg =
-        reinterpret_cast<const pldm_msg*>(requestUpdateResponse.data());
-    uint8_t outCompletionCode = 0;
-    uint16_t outFdMetaDataLen = 0;
-    uint8_t outFdWillSendPkgData = 0;
-
-    auto rc = decode_request_update_resp(
-        nullptr, requestUpdateResponse.size() - hdrSize, &outCompletionCode,
-        &outFdMetaDataLen, &outFdWillSendPkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_request_update_resp(
-        responseMsg, requestUpdateResponse.size() - hdrSize, nullptr,
-        &outFdMetaDataLen, &outFdWillSendPkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_request_update_resp(
-        responseMsg, requestUpdateResponse.size() - hdrSize, &outCompletionCode,
-        nullptr, &outFdWillSendPkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_request_update_resp(
-        responseMsg, requestUpdateResponse.size() - hdrSize, &outCompletionCode,
-        &outFdMetaDataLen, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_request_update_resp(responseMsg, 0, &outCompletionCode,
-                                    &outFdMetaDataLen, &outFdWillSendPkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_request_update_resp(
-        responseMsg, requestUpdateResponse.size() - hdrSize, &outCompletionCode,
-        &outFdMetaDataLen, &outFdWillSendPkgData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(PassComponentTable, goodPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 1;
-    constexpr uint16_t compIdentifier = 400;
-    constexpr uint8_t compClassificationIndex = 40;
-    constexpr uint32_t compComparisonStamp = 0x12345678;
-    constexpr std::string_view compVerStr = "0penBmcv1.1";
-    constexpr uint8_t compVerStrLen = static_cast<uint8_t>(compVerStr.size());
-    variable_field compVerStrInfo{};
-    compVerStrInfo.ptr = reinterpret_cast<const uint8_t*>(compVerStr.data());
-    compVerStrInfo.length = compVerStrLen;
-
-    std::array<uint8_t,
-               hdrSize + sizeof(pldm_pass_component_table_req) + compVerStrLen>
-        request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_pass_component_table_req(
-        instanceId, PLDM_START_AND_END, PLDM_COMP_FIRMWARE, compIdentifier,
-        compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_ASCII,
-        compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_pass_component_table_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    std::array<uint8_t,
-               hdrSize + sizeof(pldm_pass_component_table_req) + compVerStrLen>
-        outRequest{0x81, 0x05, 0x13, 0x05, 0x0A, 0x00, 0x90, 0x01, 0x28,
-                   0x78, 0x56, 0x34, 0x12, 0x01, 0x0B, 0x30, 0x70, 0x65,
-                   0x6E, 0x42, 0x6D, 0x63, 0x76, 0x31, 0x2E, 0x31};
-    EXPECT_EQ(request, outRequest);
-}
-
-TEST(PassComponentTable, errorPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 1;
-    constexpr uint16_t compIdentifier = 400;
-    constexpr uint8_t compClassificationIndex = 40;
-    constexpr uint32_t compComparisonStamp = 0x12345678;
-    constexpr std::string_view compVerStr = "0penBmcv1.1";
-    constexpr uint8_t compVerStrLen = static_cast<uint8_t>(compVerStr.size());
-    variable_field compVerStrInfo{};
-    compVerStrInfo.ptr = reinterpret_cast<const uint8_t*>(compVerStr.data());
-    compVerStrInfo.length = compVerStrLen;
-
-    std::array<uint8_t,
-               hdrSize + sizeof(pldm_pass_component_table_req) + compVerStrLen>
-        request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_pass_component_table_req(
-        instanceId, PLDM_START_AND_END, PLDM_COMP_FIRMWARE, compIdentifier,
-        compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_ASCII,
-        compVerStrLen, nullptr, requestMsg,
-        sizeof(pldm_pass_component_table_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    compVerStrInfo.ptr = nullptr;
-    rc = encode_pass_component_table_req(
-        instanceId, PLDM_START_AND_END, PLDM_COMP_FIRMWARE, compIdentifier,
-        compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_ASCII,
-        compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_pass_component_table_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    compVerStrInfo.ptr = reinterpret_cast<const uint8_t*>(compVerStr.data());
-
-    rc = encode_pass_component_table_req(
-        instanceId, PLDM_START_AND_END, PLDM_COMP_FIRMWARE, compIdentifier,
-        compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_ASCII,
-        compVerStrLen, &compVerStrInfo, nullptr,
-        sizeof(pldm_pass_component_table_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_pass_component_table_req(
-        instanceId, PLDM_START_AND_END, PLDM_COMP_FIRMWARE, compIdentifier,
-        compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_ASCII,
-        compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_pass_component_table_req));
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = encode_pass_component_table_req(
-        instanceId, PLDM_START_AND_END, PLDM_COMP_FIRMWARE, compIdentifier,
-        compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_ASCII, 0,
-        &compVerStrInfo, requestMsg,
-        sizeof(pldm_pass_component_table_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_pass_component_table_req(
-        instanceId, PLDM_START_AND_END, PLDM_COMP_FIRMWARE, compIdentifier,
-        compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_ASCII,
-        compVerStrLen - 1, &compVerStrInfo, requestMsg,
-        sizeof(pldm_pass_component_table_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_pass_component_table_req(
-        instanceId, PLDM_START_AND_END + 1, PLDM_COMP_FIRMWARE, compIdentifier,
-        compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_ASCII,
-        compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_pass_component_table_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_INVALID_TRANSFER_OPERATION_FLAG);
-
-    rc = encode_pass_component_table_req(
-        instanceId, PLDM_START_AND_END, PLDM_COMP_FIRMWARE, compIdentifier,
-        compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_UNKNOWN,
-        compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_pass_component_table_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(PassComponentTable, goodPathDecodeResponse)
-{
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_pass_component_table_resp)>
-        passCompTableResponse1{0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(passCompTableResponse1.data());
-
-    uint8_t completionCode = 0;
-    uint8_t compResp = 0;
-    uint8_t compRespCode = 0;
-
-    auto rc = decode_pass_component_table_resp(
-        responseMsg1, sizeof(pldm_pass_component_table_resp), &completionCode,
-        &compResp, &compRespCode);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(compResp, PLDM_CR_COMP_CAN_BE_UPDATED);
-    EXPECT_EQ(compRespCode, PLDM_CRC_COMP_COMPARISON_STAMP_IDENTICAL);
-
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_pass_component_table_resp)>
-        passCompTableResponse2{0x00, 0x00, 0x00, 0x00, 0x00, 0xD0};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(passCompTableResponse2.data());
-    rc = decode_pass_component_table_resp(
-        responseMsg2, sizeof(pldm_pass_component_table_resp), &completionCode,
-        &compResp, &compRespCode);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(compResp, PLDM_CR_COMP_CAN_BE_UPDATED);
-    EXPECT_EQ(compRespCode, PLDM_CRC_VENDOR_COMP_RESP_CODE_RANGE_MIN);
-
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_pass_component_table_resp)>
-        passCompTableResponse3{0x00, 0x00, 0x00, 0x80};
-    auto responseMsg3 =
-        reinterpret_cast<const pldm_msg*>(passCompTableResponse3.data());
-
-    rc = decode_pass_component_table_resp(
-        responseMsg3, sizeof(pldm_pass_component_table_resp), &completionCode,
-        &compResp, &compRespCode);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_FWUP_NOT_IN_UPDATE_MODE);
-}
-
-TEST(PassComponentTable, errorPathDecodeResponse)
-{
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_pass_component_table_resp) - 1>
-        passCompTableResponse1{0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(passCompTableResponse1.data());
-
-    uint8_t completionCode = 0;
-    uint8_t compResp = 0;
-    uint8_t compRespCode = 0;
-
-    auto rc = decode_pass_component_table_resp(
-        nullptr, sizeof(pldm_pass_component_table_resp) - 1, &completionCode,
-        &compResp, &compRespCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pass_component_table_resp(
-        responseMsg1, sizeof(pldm_pass_component_table_resp) - 1, nullptr,
-        &compResp, &compRespCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pass_component_table_resp(
-        responseMsg1, sizeof(pldm_pass_component_table_resp) - 1,
-        &completionCode, nullptr, &compRespCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pass_component_table_resp(
-        responseMsg1, sizeof(pldm_pass_component_table_resp) - 1,
-        &completionCode, &compResp, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pass_component_table_resp(responseMsg1, 0, &completionCode,
-                                          &compResp, &compRespCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_pass_component_table_resp(
-        responseMsg1, sizeof(pldm_pass_component_table_resp) - 1,
-        &completionCode, &compResp, &compRespCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_pass_component_table_resp)>
-        passCompTableResponse2{0x00, 0x00, 0x00, 0x00, 0x02, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(passCompTableResponse2.data());
-    rc = decode_pass_component_table_resp(
-        responseMsg2, sizeof(pldm_pass_component_table_resp), &completionCode,
-        &compResp, &compRespCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_pass_component_table_resp)>
-        passCompTableResponse3{0x00, 0x00, 0x00, 0x00, 0x00, 0x0C};
-    auto responseMsg3 =
-        reinterpret_cast<const pldm_msg*>(passCompTableResponse3.data());
-    rc = decode_pass_component_table_resp(
-        responseMsg3, sizeof(pldm_pass_component_table_resp), &completionCode,
-        &compResp, &compRespCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_pass_component_table_resp)>
-        passCompTableResponse4{0x00, 0x00, 0x00, 0x00, 0x00, 0xF0};
-    auto responseMsg4 =
-        reinterpret_cast<const pldm_msg*>(passCompTableResponse4.data());
-    rc = decode_pass_component_table_resp(
-        responseMsg4, sizeof(pldm_pass_component_table_resp), &completionCode,
-        &compResp, &compRespCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(UpdateComponent, goodPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 2;
-    constexpr uint16_t compIdentifier = 500;
-    constexpr uint8_t compClassificationIndex = 50;
-    constexpr uint32_t compComparisonStamp = 0x89ABCDEF;
-    constexpr uint32_t compImageSize = 4096;
-    constexpr bitfield32_t updateOptionFlags{1};
-    constexpr std::string_view compVerStr = "OpenBmcv2.2";
-    constexpr uint8_t compVerStrLen = static_cast<uint8_t>(compVerStr.size());
-    variable_field compVerStrInfo{};
-    compVerStrInfo.ptr = reinterpret_cast<const uint8_t*>(compVerStr.data());
-    compVerStrInfo.length = compVerStrLen;
-
-    std::array<uint8_t,
-               hdrSize + sizeof(pldm_update_component_req) + compVerStrLen>
-        request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_update_component_req(
-        instanceId, PLDM_COMP_FIRMWARE, compIdentifier, compClassificationIndex,
-        compComparisonStamp, compImageSize, updateOptionFlags,
-        PLDM_STR_TYPE_ASCII, compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_update_component_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    std::array<uint8_t,
-               hdrSize + sizeof(pldm_update_component_req) + compVerStrLen>
-        outRequest{0x82, 0x05, 0x14, 0x0A, 0x00, 0xF4, 0x01, 0x32, 0xEF,
-                   0xCD, 0xAB, 0x89, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00,
-                   0x00, 0x00, 0x01, 0x0B, 0x4f, 0x70, 0x65, 0x6E, 0x42,
-                   0x6D, 0x63, 0x76, 0x32, 0x2E, 0x32};
-    EXPECT_EQ(request, outRequest);
-}
-
-TEST(UpdateComponent, errorPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 2;
-    constexpr uint16_t compIdentifier = 500;
-    constexpr uint8_t compClassificationIndex = 50;
-    constexpr uint32_t compComparisonStamp = 0x89ABCDEF;
-    constexpr uint32_t compImageSize = 4096;
-    constexpr bitfield32_t updateOptionFlags{1};
-    constexpr std::string_view compVerStr = "OpenBmcv2.2";
-    constexpr uint8_t compVerStrLen = static_cast<uint8_t>(compVerStr.size());
-    variable_field compVerStrInfo{};
-    compVerStrInfo.ptr = reinterpret_cast<const uint8_t*>(compVerStr.data());
-    compVerStrInfo.length = compVerStrLen;
-
-    std::array<uint8_t,
-               hdrSize + sizeof(pldm_update_component_req) + compVerStrLen>
-        request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_update_component_req(
-        instanceId, PLDM_COMP_FIRMWARE, compIdentifier, compClassificationIndex,
-        compComparisonStamp, compImageSize, updateOptionFlags,
-        PLDM_STR_TYPE_ASCII, compVerStrLen, nullptr, requestMsg,
-        sizeof(pldm_update_component_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    compVerStrInfo.ptr = nullptr;
-    rc = encode_update_component_req(
-        instanceId, PLDM_COMP_FIRMWARE, compIdentifier, compClassificationIndex,
-        compComparisonStamp, compImageSize, updateOptionFlags,
-        PLDM_STR_TYPE_ASCII, compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_update_component_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    compVerStrInfo.ptr = reinterpret_cast<const uint8_t*>(compVerStr.data());
-
-    rc = encode_update_component_req(
-        instanceId, PLDM_COMP_FIRMWARE, compIdentifier, compClassificationIndex,
-        compComparisonStamp, compImageSize, updateOptionFlags,
-        PLDM_STR_TYPE_ASCII, compVerStrLen, &compVerStrInfo, nullptr,
-        sizeof(pldm_update_component_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_update_component_req(
-        instanceId, PLDM_COMP_FIRMWARE, compIdentifier, compClassificationIndex,
-        compComparisonStamp, compImageSize, updateOptionFlags,
-        PLDM_STR_TYPE_ASCII, compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_update_component_req));
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = encode_update_component_req(
-        instanceId, PLDM_COMP_FIRMWARE, compIdentifier, compClassificationIndex,
-        compComparisonStamp, 0, updateOptionFlags, PLDM_STR_TYPE_ASCII,
-        compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_update_component_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_update_component_req(
-        instanceId, PLDM_COMP_FIRMWARE, compIdentifier, compClassificationIndex,
-        compComparisonStamp, compImageSize, updateOptionFlags,
-        PLDM_STR_TYPE_ASCII, 0, &compVerStrInfo, requestMsg,
-        sizeof(pldm_update_component_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_update_component_req(
-        instanceId, PLDM_COMP_FIRMWARE, compIdentifier, compClassificationIndex,
-        compComparisonStamp, compImageSize, updateOptionFlags,
-        PLDM_STR_TYPE_ASCII, compVerStrLen - 1, &compVerStrInfo, requestMsg,
-        sizeof(pldm_update_component_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_update_component_req(
-        instanceId, PLDM_COMP_FIRMWARE, compIdentifier, compClassificationIndex,
-        compComparisonStamp, compImageSize, updateOptionFlags,
-        PLDM_STR_TYPE_UNKNOWN, compVerStrLen, &compVerStrInfo, requestMsg,
-        sizeof(pldm_update_component_req) + compVerStrLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(UpdateComponent, goodPathDecodeResponse)
-{
-    constexpr std::bitset<32> forceUpdateComp{1};
-    constexpr uint16_t timeBeforeSendingReqFwData100s = 100;
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_update_component_resp)>
-        updateComponentResponse1{0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                                 0x01, 0x00, 0x00, 0x00, 0x64, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(updateComponentResponse1.data());
-
-    uint8_t completionCode = 0;
-    uint8_t compCompatibilityResp = 0;
-    uint8_t compCompatibilityRespCode = 0;
-    bitfield32_t updateOptionFlagsEnabled{};
-    uint16_t timeBeforeReqFWData = 0;
-
-    auto rc = decode_update_component_resp(
-        responseMsg1, sizeof(pldm_update_component_resp), &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, &timeBeforeReqFWData);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(compCompatibilityResp, PLDM_CCR_COMP_CAN_BE_UPDATED);
-    EXPECT_EQ(compCompatibilityRespCode, PLDM_CCRC_NO_RESPONSE_CODE);
-    EXPECT_EQ(updateOptionFlagsEnabled.value, forceUpdateComp);
-    EXPECT_EQ(timeBeforeReqFWData, timeBeforeSendingReqFwData100s);
-
-    constexpr std::bitset<32> noFlags{};
-    constexpr uint16_t timeBeforeSendingReqFwData0s = 0;
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_update_component_resp)>
-        updateComponentResponse2{0x00, 0x00, 0x00, 0x00, 0x01, 0x09,
-                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(updateComponentResponse2.data());
-    rc = decode_update_component_resp(
-        responseMsg2, sizeof(pldm_update_component_resp), &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, &timeBeforeReqFWData);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(compCompatibilityResp, PLDM_CCR_COMP_CANNOT_BE_UPDATED);
-    EXPECT_EQ(compCompatibilityRespCode, PLDM_CCRC_COMP_INFO_NO_MATCH);
-    EXPECT_EQ(updateOptionFlagsEnabled.value, noFlags);
-    EXPECT_EQ(timeBeforeReqFWData, timeBeforeSendingReqFwData0s);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_update_component_resp)>
-        updateComponentResponse3{0x00, 0x00, 0x00, 0x80};
-    auto responseMsg3 =
-        reinterpret_cast<const pldm_msg*>(updateComponentResponse3.data());
-
-    rc = decode_update_component_resp(
-        responseMsg3, sizeof(pldm_update_component_resp), &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, &timeBeforeReqFWData);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_FWUP_NOT_IN_UPDATE_MODE);
-}
-
-TEST(UpdateComponent, errorPathDecodeResponse)
-{
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_update_component_resp) - 1>
-        updateComponentResponse1{0x00, 0x00, 0x00, 0x00, 0x01, 0x09,
-                                 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(updateComponentResponse1.data());
-
-    uint8_t completionCode = 0;
-    uint8_t compCompatibilityResp = 0;
-    uint8_t compCompatibilityRespCode = 0;
-    bitfield32_t updateOptionFlagsEnabled{};
-    uint16_t timeBeforeReqFWData = 0;
-
-    auto rc = decode_update_component_resp(
-        nullptr, sizeof(pldm_update_component_resp) - 1, &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_update_component_resp(
-        responseMsg1, sizeof(pldm_update_component_resp) - 1, nullptr,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_update_component_resp(
-        responseMsg1, sizeof(pldm_update_component_resp) - 1, &completionCode,
-        nullptr, &compCompatibilityRespCode, &updateOptionFlagsEnabled,
-        &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_update_component_resp(
-        responseMsg1, sizeof(pldm_update_component_resp) - 1, &completionCode,
-        &compCompatibilityResp, nullptr, &updateOptionFlagsEnabled,
-        &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_update_component_resp(
-        responseMsg1, sizeof(pldm_update_component_resp) - 1, &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode, nullptr,
-        &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_update_component_resp(
-        responseMsg1, sizeof(pldm_update_component_resp) - 1, &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_update_component_resp(
-        responseMsg1, 0, &completionCode, &compCompatibilityResp,
-        &compCompatibilityRespCode, &updateOptionFlagsEnabled,
-        &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_update_component_resp(
-        responseMsg1, sizeof(pldm_update_component_resp) - 1, &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_update_component_resp)>
-        updateComponentResponse2{0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
-                                 0x01, 0x00, 0x00, 0x00, 0x64, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(updateComponentResponse2.data());
-    rc = decode_update_component_resp(
-        responseMsg2, sizeof(pldm_update_component_resp), &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_update_component_resp)>
-        updateComponentResponse3{0x00, 0x00, 0x00, 0x00, 0x00, 0x0C,
-                                 0x01, 0x00, 0x00, 0x00, 0x64, 0x00};
-    auto responseMsg3 =
-        reinterpret_cast<const pldm_msg*>(updateComponentResponse3.data());
-    rc = decode_update_component_resp(
-        responseMsg3, sizeof(pldm_update_component_resp), &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_update_component_resp)>
-        updateComponentResponse4{0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
-                                 0x01, 0x00, 0x00, 0x00, 0x64, 0x00};
-    auto responseMsg4 =
-        reinterpret_cast<const pldm_msg*>(updateComponentResponse4.data());
-    rc = decode_update_component_resp(
-        responseMsg4, sizeof(pldm_update_component_resp), &completionCode,
-        &compCompatibilityResp, &compCompatibilityRespCode,
-        &updateOptionFlagsEnabled, &timeBeforeReqFWData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(RequestFirmwareData, goodPathDecodeRequest)
-{
-    constexpr uint32_t offset = 300;
-    constexpr uint32_t length = 255;
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_request_firmware_data_req)>
-        reqFWDataReq{0x00, 0x00, 0x00, 0x2C, 0x01, 0x00,
-                     0x00, 0xFF, 0x00, 0x00, 0x00};
-    auto requestMsg = reinterpret_cast<const pldm_msg*>(reqFWDataReq.data());
-
-    uint32_t outOffset = 0;
-    uint32_t outLength = 0;
-    auto rc = decode_request_firmware_data_req(
-        requestMsg, sizeof(pldm_request_firmware_data_req), &outOffset,
-        &outLength);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outOffset, offset);
-    EXPECT_EQ(outLength, length);
-}
-
-TEST(RequestFirmwareData, errorPathDecodeRequest)
-{
-    constexpr std::array<uint8_t,
-                         hdrSize + sizeof(pldm_request_firmware_data_req)>
-        reqFWDataReq{0x00, 0x00, 0x00, 0x2C, 0x01, 0x00,
-                     0x00, 0x1F, 0x00, 0x00, 0x00};
-    auto requestMsg = reinterpret_cast<const pldm_msg*>(reqFWDataReq.data());
-
-    uint32_t outOffset = 0;
-    uint32_t outLength = 0;
-    auto rc = decode_request_firmware_data_req(
-        nullptr, sizeof(pldm_request_firmware_data_req), &outOffset,
-        &outLength);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_request_firmware_data_req(
-        requestMsg, sizeof(pldm_request_firmware_data_req), nullptr,
-        &outLength);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_request_firmware_data_req(
-        requestMsg, sizeof(pldm_request_firmware_data_req), &outOffset,
-        nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_request_firmware_data_req(
-        requestMsg, sizeof(pldm_request_firmware_data_req) - 1, &outOffset,
-        &outLength);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_request_firmware_data_req(
-        requestMsg, sizeof(pldm_request_firmware_data_req), &outOffset,
-        &outLength);
-    EXPECT_EQ(rc, PLDM_FWUP_INVALID_TRANSFER_LENGTH);
-}
-
-TEST(RequestFirmwareData, goodPathEncodeResponse)
-{
-    constexpr uint8_t instanceId = 3;
-    constexpr uint8_t completionCode = PLDM_SUCCESS;
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode) +
-                                      PLDM_FWUP_BASELINE_TRANSFER_SIZE>
-        outReqFwDataResponse1{0x03, 0x05, 0x15, 0x00, 0x01, 0x02, 0x03, 0x04,
-                              0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
-                              0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,
-                              0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,
-                              0x1D, 0x1E, 0x1F, 0x20};
-    std::array<uint8_t, hdrSize + sizeof(completionCode) +
-                            PLDM_FWUP_BASELINE_TRANSFER_SIZE>
-        reqFwDataResponse1{0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
-                           0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
-                           0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,
-                           0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,
-                           0x1D, 0x1E, 0x1F, 0x20};
-    auto responseMsg1 = reinterpret_cast<pldm_msg*>(reqFwDataResponse1.data());
-    auto rc = encode_request_firmware_data_resp(
-        instanceId, completionCode, responseMsg1,
-        sizeof(completionCode) + PLDM_FWUP_BASELINE_TRANSFER_SIZE);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(reqFwDataResponse1, outReqFwDataResponse1);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        outReqFwDataResponse2{0x03, 0x05, 0x15, 0x82};
-    std::array<uint8_t, hdrSize + sizeof(completionCode)> reqFwDataResponse2{
-        0x00, 0x00, 0x00, 0x00};
-    auto responseMsg2 = reinterpret_cast<pldm_msg*>(reqFwDataResponse2.data());
-    rc = encode_request_firmware_data_resp(
-        instanceId, PLDM_FWUP_DATA_OUT_OF_RANGE, responseMsg2,
-        sizeof(completionCode));
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(reqFwDataResponse2, outReqFwDataResponse2);
-}
-
-TEST(RequestFirmwareData, errorPathEncodeResponse)
-{
-    std::array<uint8_t, hdrSize> reqFwDataResponse{0x00, 0x00, 0x00};
-    auto responseMsg = reinterpret_cast<pldm_msg*>(reqFwDataResponse.data());
-    auto rc = encode_request_firmware_data_resp(0, PLDM_SUCCESS, nullptr, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_request_firmware_data_resp(0, PLDM_SUCCESS, responseMsg, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(TransferComplete, goodPathDecodeRequest)
-{
-    constexpr uint8_t transferResult = PLDM_FWUP_TRANSFER_SUCCESS;
-    constexpr std::array<uint8_t, hdrSize + sizeof(transferResult)>
-        transferCompleteReq1{0x00, 0x00, 0x00, 0x00};
-    auto requestMsg1 =
-        reinterpret_cast<const pldm_msg*>(transferCompleteReq1.data());
-    uint8_t outTransferResult = 0;
-
-    auto rc = decode_transfer_complete_req(requestMsg1, sizeof(transferResult),
-                                           &outTransferResult);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outTransferResult, transferResult);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(transferResult)>
-        transferCompleteReq2{0x00, 0x00, 0x00, 0x02};
-    auto requestMsg2 =
-        reinterpret_cast<const pldm_msg*>(transferCompleteReq2.data());
-    rc = decode_transfer_complete_req(requestMsg2, sizeof(transferResult),
-                                      &outTransferResult);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outTransferResult, PLDM_FWUP_TRANSFER_ERROR_IMAGE_CORRUPT);
-}
-
-TEST(TransferComplete, errorPathDecodeRequest)
-{
-    constexpr std::array<uint8_t, hdrSize> transferCompleteReq{0x00, 0x00,
-                                                               0x00};
-    auto requestMsg =
-        reinterpret_cast<const pldm_msg*>(transferCompleteReq.data());
-    uint8_t outTransferResult = 0;
-
-    auto rc = decode_transfer_complete_req(nullptr, 0, &outTransferResult);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_transfer_complete_req(requestMsg, 0, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_transfer_complete_req(requestMsg, 0, &outTransferResult);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(TransferComplete, goodPathEncodeResponse)
-{
-    constexpr uint8_t instanceId = 4;
-    constexpr uint8_t completionCode = PLDM_SUCCESS;
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        outTransferCompleteResponse1{0x04, 0x05, 0x16, 0x00};
-    std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        transferCompleteResponse1{0x00, 0x00, 0x00, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<pldm_msg*>(transferCompleteResponse1.data());
-    auto rc = encode_transfer_complete_resp(
-        instanceId, completionCode, responseMsg1, sizeof(completionCode));
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(transferCompleteResponse1, outTransferCompleteResponse1);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        outTransferCompleteResponse2{0x04, 0x05, 0x16, 0x88};
-    std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        transferCompleteResponse2{0x00, 0x00, 0x00, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<pldm_msg*>(transferCompleteResponse2.data());
-    rc = encode_transfer_complete_resp(instanceId,
-                                       PLDM_FWUP_COMMAND_NOT_EXPECTED,
-                                       responseMsg2, sizeof(completionCode));
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(transferCompleteResponse2, outTransferCompleteResponse2);
-}
-
-TEST(TransferComplete, errorPathEncodeResponse)
-{
-    std::array<uint8_t, hdrSize> transferCompleteResponse{0x00, 0x00, 0x00};
-    auto responseMsg =
-        reinterpret_cast<pldm_msg*>(transferCompleteResponse.data());
-    auto rc = encode_transfer_complete_resp(0, PLDM_SUCCESS, nullptr, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_transfer_complete_resp(0, PLDM_SUCCESS, responseMsg, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(VerifyComplete, goodPathDecodeRequest)
-{
-    constexpr uint8_t verifyResult = PLDM_FWUP_VERIFY_SUCCESS;
-    constexpr std::array<uint8_t, hdrSize + sizeof(verifyResult)>
-        verifyCompleteReq1{0x00, 0x00, 0x00, 0x00};
-    auto requestMsg1 =
-        reinterpret_cast<const pldm_msg*>(verifyCompleteReq1.data());
-    uint8_t outVerifyResult = 0;
-
-    auto rc = decode_verify_complete_req(requestMsg1, sizeof(verifyResult),
-                                         &outVerifyResult);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outVerifyResult, verifyResult);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(verifyResult)>
-        verifyCompleteReq2{0x00, 0x00, 0x00, 0x03};
-    auto requestMsg2 =
-        reinterpret_cast<const pldm_msg*>(verifyCompleteReq2.data());
-    rc = decode_verify_complete_req(requestMsg2, sizeof(verifyResult),
-                                    &outVerifyResult);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outVerifyResult, PLDM_FWUP_VERIFY_FAILED_FD_SECURITY_CHECKS);
-}
-
-TEST(VerifyComplete, errorPathDecodeRequest)
-{
-    constexpr std::array<uint8_t, hdrSize> verifyCompleteReq{0x00, 0x00, 0x00};
-    auto requestMsg =
-        reinterpret_cast<const pldm_msg*>(verifyCompleteReq.data());
-    uint8_t outVerifyResult = 0;
-
-    auto rc = decode_verify_complete_req(nullptr, 0, &outVerifyResult);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_verify_complete_req(requestMsg, 0, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_verify_complete_req(requestMsg, 0, &outVerifyResult);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(VerifyComplete, goodPathEncodeResponse)
-{
-    constexpr uint8_t instanceId = 5;
-    constexpr uint8_t completionCode = PLDM_SUCCESS;
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        outVerifyCompleteResponse1{0x05, 0x05, 0x17, 0x00};
-    std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        verifyCompleteResponse1{0x00, 0x00, 0x00, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<pldm_msg*>(verifyCompleteResponse1.data());
-    auto rc = encode_verify_complete_resp(instanceId, completionCode,
-                                          responseMsg1, sizeof(completionCode));
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(verifyCompleteResponse1, outVerifyCompleteResponse1);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        outVerifyCompleteResponse2{0x05, 0x05, 0x17, 0x88};
-    std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        verifyCompleteResponse2{0x00, 0x00, 0x00, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<pldm_msg*>(verifyCompleteResponse2.data());
-    rc = encode_verify_complete_resp(instanceId, PLDM_FWUP_COMMAND_NOT_EXPECTED,
-                                     responseMsg2, sizeof(completionCode));
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(verifyCompleteResponse2, outVerifyCompleteResponse2);
-}
-
-TEST(VerifyComplete, errorPathEncodeResponse)
-{
-    std::array<uint8_t, hdrSize> verifyCompleteResponse{0x00, 0x00, 0x00};
-    auto responseMsg =
-        reinterpret_cast<pldm_msg*>(verifyCompleteResponse.data());
-    auto rc = encode_verify_complete_resp(0, PLDM_SUCCESS, nullptr, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_verify_complete_resp(0, PLDM_SUCCESS, responseMsg, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ApplyComplete, goodPathDecodeRequest)
-{
-    constexpr uint8_t applyResult1 =
-        PLDM_FWUP_APPLY_SUCCESS_WITH_ACTIVATION_METHOD;
-    // DC power cycle [Bit position 4] & AC power cycle [Bit position 5]
-    constexpr std::bitset<16> compActivationModification1{0x30};
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_apply_complete_req)>
-        applyCompleteReq1{0x00, 0x00, 0x00, 0x01, 0x30, 0x00};
-    auto requestMsg1 =
-        reinterpret_cast<const pldm_msg*>(applyCompleteReq1.data());
-    uint8_t outApplyResult = 0;
-    bitfield16_t outCompActivationModification{};
-    auto rc = decode_apply_complete_req(
-        requestMsg1, sizeof(pldm_apply_complete_req), &outApplyResult,
-        &outCompActivationModification);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outApplyResult, applyResult1);
-    EXPECT_EQ(outCompActivationModification.value, compActivationModification1);
-
-    constexpr uint8_t applyResult2 = PLDM_FWUP_APPLY_SUCCESS;
-    constexpr std::bitset<16> compActivationModification2{};
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_apply_complete_req)>
-        applyCompleteReq2{0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto requestMsg2 =
-        reinterpret_cast<const pldm_msg*>(applyCompleteReq2.data());
-    rc = decode_apply_complete_req(requestMsg2, sizeof(pldm_apply_complete_req),
-                                   &outApplyResult,
-                                   &outCompActivationModification);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(outApplyResult, applyResult2);
-    EXPECT_EQ(outCompActivationModification.value, compActivationModification2);
-}
-
-TEST(ApplyComplete, errorPathDecodeRequest)
-{
-    constexpr std::array<uint8_t, hdrSize> applyCompleteReq1{0x00, 0x00, 0x00};
-    auto requestMsg1 =
-        reinterpret_cast<const pldm_msg*>(applyCompleteReq1.data());
-    uint8_t outApplyResult = 0;
-    bitfield16_t outCompActivationModification{};
-
-    auto rc = decode_apply_complete_req(
-        nullptr, sizeof(pldm_apply_complete_req), &outApplyResult,
-        &outCompActivationModification);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_apply_complete_req(requestMsg1, sizeof(pldm_apply_complete_req),
-                                   nullptr, &outCompActivationModification);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_apply_complete_req(requestMsg1, sizeof(pldm_apply_complete_req),
-                                   &outApplyResult, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_apply_complete_req(requestMsg1, 0, &outApplyResult,
-                                   &outCompActivationModification);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_apply_complete_req)>
-        applyCompleteReq2{0x00, 0x00, 0x00, 0x00, 0x01, 0x00};
-    auto requestMsg2 =
-        reinterpret_cast<const pldm_msg*>(applyCompleteReq2.data());
-    rc = decode_apply_complete_req(requestMsg2, sizeof(pldm_apply_complete_req),
-                                   &outApplyResult,
-                                   &outCompActivationModification);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(ApplyComplete, goodPathEncodeResponse)
-{
-    constexpr uint8_t instanceId = 6;
-    constexpr uint8_t completionCode = PLDM_SUCCESS;
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        outApplyCompleteResponse1{0x06, 0x05, 0x18, 0x00};
-    std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        applyCompleteResponse1{0x00, 0x00, 0x00, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<pldm_msg*>(applyCompleteResponse1.data());
-    auto rc = encode_apply_complete_resp(instanceId, completionCode,
-                                         responseMsg1, sizeof(completionCode));
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(applyCompleteResponse1, outApplyCompleteResponse1);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        outApplyCompleteResponse2{0x06, 0x05, 0x18, 0x88};
-    std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        applyCompleteResponse2{0x00, 0x00, 0x00, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<pldm_msg*>(applyCompleteResponse2.data());
-    rc = encode_apply_complete_resp(instanceId, PLDM_FWUP_COMMAND_NOT_EXPECTED,
-                                    responseMsg2, sizeof(completionCode));
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(applyCompleteResponse2, outApplyCompleteResponse2);
-}
-
-TEST(ApplyComplete, errorPathEncodeResponse)
-{
-    std::array<uint8_t, hdrSize> applyCompleteResponse{0x00, 0x00, 0x00};
-    auto responseMsg =
-        reinterpret_cast<pldm_msg*>(applyCompleteResponse.data());
-    auto rc = encode_apply_complete_resp(0, PLDM_SUCCESS, nullptr, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_apply_complete_resp(0, PLDM_SUCCESS, responseMsg, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ActivateFirmware, goodPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 7;
-
-    std::array<uint8_t, hdrSize + sizeof(pldm_activate_firmware_req)> request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_activate_firmware_req(
-        instanceId, PLDM_ACTIVATE_SELF_CONTAINED_COMPONENTS, requestMsg,
-        sizeof(pldm_activate_firmware_req));
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    std::array<uint8_t, hdrSize + sizeof(pldm_activate_firmware_req)>
-        outRequest{0x87, 0x05, 0x1A, 0x01};
-    EXPECT_EQ(request, outRequest);
-}
-
-TEST(ActivateFirmware, errorPathEncodeRequest)
-{
-    std::array<uint8_t, hdrSize + sizeof(pldm_activate_firmware_req)> request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_activate_firmware_req(
-        0, PLDM_ACTIVATE_SELF_CONTAINED_COMPONENTS, nullptr,
-        sizeof(pldm_activate_firmware_req));
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_activate_firmware_req(
-        0, PLDM_ACTIVATE_SELF_CONTAINED_COMPONENTS, requestMsg, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = encode_activate_firmware_req(0, 2, requestMsg,
-                                      sizeof(pldm_activate_firmware_req));
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(ActivateFirmware, goodPathDecodeResponse)
-{
-    constexpr uint16_t estimatedTimeForActivation100s = 100;
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_activate_firmware_resp)>
-        activateFirmwareResponse1{0x00, 0x00, 0x00, 0x00, 0x64, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(activateFirmwareResponse1.data());
-
-    uint8_t completionCode = 0;
-    uint16_t estimatedTimeForActivation = 0;
-
-    auto rc = decode_activate_firmware_resp(
-        responseMsg1, sizeof(pldm_activate_firmware_resp), &completionCode,
-        &estimatedTimeForActivation);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(estimatedTimeForActivation, estimatedTimeForActivation100s);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        activateFirmwareResponse2{0x00, 0x00, 0x00, 0x85};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(activateFirmwareResponse2.data());
-
-    rc = decode_activate_firmware_resp(responseMsg2, sizeof(completionCode),
-                                       &completionCode,
-                                       &estimatedTimeForActivation);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_FWUP_INCOMPLETE_UPDATE);
-}
-
-TEST(ActivateFirmware, errorPathDecodeResponse)
-{
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_activate_firmware_resp)>
-        activateFirmwareResponse{0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg =
-        reinterpret_cast<const pldm_msg*>(activateFirmwareResponse.data());
-
-    uint8_t completionCode = 0;
-    uint16_t estimatedTimeForActivation = 0;
-
-    auto rc = decode_activate_firmware_resp(
-        nullptr, sizeof(pldm_activate_firmware_resp), &completionCode,
-        &estimatedTimeForActivation);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_activate_firmware_resp(responseMsg,
-                                       sizeof(pldm_activate_firmware_resp),
-                                       nullptr, &estimatedTimeForActivation);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_activate_firmware_resp(responseMsg,
-                                       sizeof(pldm_activate_firmware_resp),
-                                       &completionCode, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_activate_firmware_resp(responseMsg, 0, &completionCode,
-                                       &estimatedTimeForActivation);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_activate_firmware_resp(
-        responseMsg, sizeof(pldm_activate_firmware_resp) - 1, &completionCode,
-        &estimatedTimeForActivation);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetStatus, goodPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 8;
-    std::array<uint8_t, hdrSize> request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_get_status_req(instanceId, requestMsg,
-                                    PLDM_GET_STATUS_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    constexpr std::array<uint8_t, hdrSize> outRequest{0x88, 0x05, 0x1B};
-    EXPECT_EQ(request, outRequest);
-}
-
-TEST(GetStatus, errorPathEncodeRequest)
-{
-    std::array<uint8_t, hdrSize + sizeof(uint8_t)> request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_get_status_req(0, nullptr, PLDM_GET_STATUS_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_get_status_req(0, requestMsg, PLDM_GET_STATUS_REQ_BYTES + 1);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetStatus, goodPathDecodeResponse)
-{
-    constexpr std::bitset<32> updateOptionFlagsEnabled1{0};
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp)>
-        getStatusResponse1{0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
-                           0x09, 0x65, 0x05, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse1.data());
-
-    uint8_t completionCode = 0;
-    uint8_t currentState = 0;
-    uint8_t previousState = 0;
-    uint8_t auxState = 0;
-    uint8_t auxStateStatus = 0;
-    uint8_t progressPercent = 0;
-    uint8_t reasonCode = 0;
-    bitfield32_t updateOptionFlagsEnabled{0};
-
-    auto rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(currentState, PLDM_FD_STATE_IDLE);
-    EXPECT_EQ(previousState, PLDM_FD_STATE_DOWNLOAD);
-    EXPECT_EQ(auxState, PLDM_FD_IDLE_LEARN_COMPONENTS_READ_XFER);
-    EXPECT_EQ(auxStateStatus, PLDM_FD_TIMEOUT);
-    EXPECT_EQ(progressPercent, PLDM_FWUP_MAX_PROGRESS_PERCENT);
-    EXPECT_EQ(reasonCode, PLDM_FD_TIMEOUT_DOWNLOAD);
-    EXPECT_EQ(updateOptionFlagsEnabled.value, updateOptionFlagsEnabled1);
-
-    // Bit position 0 - Force update of component – FD will perform a force
-    // update of the component.
-    constexpr std::bitset<32> updateOptionFlagsEnabled2{1};
-    constexpr uint8_t progressPercent2 = 50;
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp)>
-        getStatusResponse2{0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
-                           0x70, 0x32, 0x05, 0x01, 0x00, 0x00, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse2.data());
-
-    rc = decode_get_status_resp(
-        responseMsg2, getStatusResponse2.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(currentState, PLDM_FD_STATE_VERIFY);
-    EXPECT_EQ(previousState, PLDM_FD_STATE_DOWNLOAD);
-    EXPECT_EQ(auxState, PLDM_FD_OPERATION_IN_PROGRESS);
-    EXPECT_EQ(auxStateStatus, PLDM_FD_VENDOR_DEFINED_STATUS_CODE_START);
-    EXPECT_EQ(progressPercent, progressPercent2);
-    EXPECT_EQ(reasonCode, PLDM_FD_TIMEOUT_DOWNLOAD);
-    EXPECT_EQ(updateOptionFlagsEnabled.value, updateOptionFlagsEnabled2);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        getStatusResponse3{0x00, 0x00, 0x00, 0x04};
-    auto responseMsg3 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse3.data());
-    rc = decode_get_status_resp(
-        responseMsg3, getStatusResponse3.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_ERROR_NOT_READY);
-}
-
-TEST(GetStatus, errorPathDecodeResponse)
-{
-    uint8_t completionCode = 0;
-    uint8_t currentState = 0;
-    uint8_t previousState = 0;
-    uint8_t auxState = 0;
-    uint8_t auxStateStatus = 0;
-    uint8_t progressPercent = 0;
-    uint8_t reasonCode = 0;
-    bitfield32_t updateOptionFlagsEnabled{0};
-
-    constexpr std::array<uint8_t, hdrSize> getStatusResponse1{0x00, 0x00, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse1.data());
-
-    auto rc = decode_get_status_resp(
-        nullptr, getStatusResponse1.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, nullptr,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, &completionCode,
-        nullptr, &previousState, &auxState, &auxStateStatus, &progressPercent,
-        &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, &completionCode,
-        &currentState, nullptr, &auxState, &auxStateStatus, &progressPercent,
-        &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, &completionCode,
-        &currentState, &previousState, nullptr, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, nullptr, &progressPercent,
-        &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus, nullptr,
-        &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, nullptr, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_status_resp(
-        responseMsg1, getStatusResponse1.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp) - 1>
-        getStatusResponse2{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                           0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse2.data());
-    rc = decode_get_status_resp(
-        responseMsg2, getStatusResponse2.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp)>
-        getStatusResponse3{0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
-                           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg3 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse3.data());
-    rc = decode_get_status_resp(
-        responseMsg3, getStatusResponse3.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp)>
-        getStatusResponse4{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
-                           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg4 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse4.data());
-    rc = decode_get_status_resp(
-        responseMsg4, getStatusResponse4.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp)>
-        getStatusResponse5{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
-                           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg5 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse5.data());
-    rc = decode_get_status_resp(
-        responseMsg5, getStatusResponse5.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp)>
-        getStatusResponse6{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                           0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg6 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse6.data());
-    rc = decode_get_status_resp(
-        responseMsg6, getStatusResponse6.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp)>
-        getStatusResponse7{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                           0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg7 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse7.data());
-    rc = decode_get_status_resp(
-        responseMsg7, getStatusResponse7.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp)>
-        getStatusResponse8{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                           0x00, 0x00, 0xC7, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg8 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse8.data());
-    rc = decode_get_status_resp(
-        responseMsg8, getStatusResponse8.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // AuxState is not PLDM_FD_IDLE_LEARN_COMPONENTS_READ_XFER when the state is
-    // IDLE
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_get_status_resp)>
-        getStatusResponse9{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-                           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg9 =
-        reinterpret_cast<const pldm_msg*>(getStatusResponse9.data());
-    rc = decode_get_status_resp(
-        responseMsg9, getStatusResponse9.size() - hdrSize, &completionCode,
-        &currentState, &previousState, &auxState, &auxStateStatus,
-        &progressPercent, &reasonCode, &updateOptionFlagsEnabled);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(CancelUpdateComponent, goodPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 9;
-    std::array<uint8_t, hdrSize> request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_cancel_update_component_req(
-        instanceId, requestMsg, PLDM_CANCEL_UPDATE_COMPONENT_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    constexpr std::array<uint8_t, hdrSize> outRequest{0x89, 0x05, 0x1C};
-    EXPECT_EQ(request, outRequest);
-}
-
-TEST(CancelUpdateComponent, errorPathEncodeRequest)
-{
-    std::array<uint8_t, hdrSize + sizeof(uint8_t)> request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_cancel_update_component_req(
-        0, nullptr, PLDM_CANCEL_UPDATE_COMPONENT_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_cancel_update_component_req(
-        0, requestMsg, PLDM_CANCEL_UPDATE_COMPONENT_REQ_BYTES + 1);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(CancelUpdateComponent, testGoodDecodeResponse)
-{
-    uint8_t completionCode = 0;
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        cancelUpdateComponentResponse1{0x00, 0x00, 0x00, 0x00};
-    auto responseMsg1 = reinterpret_cast<const pldm_msg*>(
-        cancelUpdateComponentResponse1.data());
-    auto rc = decode_cancel_update_component_resp(
-        responseMsg1, cancelUpdateComponentResponse1.size() - hdrSize,
-        &completionCode);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        cancelUpdateComponentResponse2{0x00, 0x00, 0x00, 0x86};
-    auto responseMsg2 = reinterpret_cast<const pldm_msg*>(
-        cancelUpdateComponentResponse2.data());
-    rc = decode_cancel_update_component_resp(
-        responseMsg2, cancelUpdateComponentResponse2.size() - hdrSize,
-        &completionCode);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_FWUP_BUSY_IN_BACKGROUND);
-}
-
-TEST(CancelUpdateComponent, testBadDecodeResponse)
-{
-    uint8_t completionCode = 0;
-    constexpr std::array<uint8_t, hdrSize> cancelUpdateComponentResponse{
-        0x00, 0x00, 0x00};
-    auto responseMsg =
-        reinterpret_cast<const pldm_msg*>(cancelUpdateComponentResponse.data());
-
-    auto rc = decode_cancel_update_component_resp(
-        nullptr, cancelUpdateComponentResponse.size() - hdrSize,
-        &completionCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_cancel_update_component_resp(
-        responseMsg, cancelUpdateComponentResponse.size() - hdrSize, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_cancel_update_component_resp(
-        responseMsg, cancelUpdateComponentResponse.size() - hdrSize,
-        &completionCode);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(CancelUpdate, goodPathEncodeRequest)
-{
-    constexpr uint8_t instanceId = 10;
-    std::array<uint8_t, hdrSize> request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_cancel_update_req(instanceId, requestMsg,
-                                       PLDM_CANCEL_UPDATE_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    constexpr std::array<uint8_t, hdrSize> outRequest{0x8A, 0x05, 0x1D};
-    EXPECT_EQ(request, outRequest);
-}
-
-TEST(CancelUpdate, errorPathEncodeRequest)
-{
-    std::array<uint8_t, hdrSize + sizeof(uint8_t)> request{};
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc =
-        encode_cancel_update_req(0, nullptr, PLDM_CANCEL_UPDATE_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_cancel_update_req(0, requestMsg,
-                                  PLDM_CANCEL_UPDATE_REQ_BYTES + 1);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(CancelUpdate, goodPathDecodeResponse)
-{
-    constexpr std::bitset<64> nonFunctioningComponentBitmap1{0};
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_cancel_update_resp)>
-        cancelUpdateResponse1{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(cancelUpdateResponse1.data());
-    uint8_t completionCode = 0;
-    bool8_t nonFunctioningComponentIndication = 0;
-    bitfield64_t nonFunctioningComponentBitmap{0};
-    auto rc = decode_cancel_update_resp(
-        responseMsg1, cancelUpdateResponse1.size() - hdrSize, &completionCode,
-        &nonFunctioningComponentIndication, &nonFunctioningComponentBitmap);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(nonFunctioningComponentIndication,
-              PLDM_FWUP_COMPONENTS_FUNCTIONING);
-    EXPECT_EQ(nonFunctioningComponentBitmap.value,
-              nonFunctioningComponentBitmap1);
-
-    constexpr std::bitset<64> nonFunctioningComponentBitmap2{0x0101};
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_cancel_update_resp)>
-        cancelUpdateResponse2{0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
-                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(cancelUpdateResponse2.data());
-    rc = decode_cancel_update_resp(
-        responseMsg2, cancelUpdateResponse2.size() - hdrSize, &completionCode,
-        &nonFunctioningComponentIndication, &nonFunctioningComponentBitmap);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_SUCCESS);
-    EXPECT_EQ(nonFunctioningComponentIndication,
-              PLDM_FWUP_COMPONENTS_NOT_FUNCTIONING);
-    EXPECT_EQ(nonFunctioningComponentBitmap.value,
-              nonFunctioningComponentBitmap2);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        cancelUpdateResponse3{0x00, 0x00, 0x00, 0x86};
-    auto responseMsg3 =
-        reinterpret_cast<const pldm_msg*>(cancelUpdateResponse3.data());
-    rc = decode_cancel_update_resp(
-        responseMsg3, cancelUpdateResponse3.size() - hdrSize, &completionCode,
-        &nonFunctioningComponentIndication, &nonFunctioningComponentBitmap);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, PLDM_FWUP_BUSY_IN_BACKGROUND);
-}
-
-TEST(CancelUpdate, errorPathDecodeResponse)
-{
-    constexpr std::array<uint8_t, hdrSize> cancelUpdateResponse1{0x00, 0x00,
-                                                                 0x00};
-    auto responseMsg1 =
-        reinterpret_cast<const pldm_msg*>(cancelUpdateResponse1.data());
-    uint8_t completionCode = 0;
-    bool8_t nonFunctioningComponentIndication = 0;
-    bitfield64_t nonFunctioningComponentBitmap{0};
-
-    auto rc = decode_cancel_update_resp(
-        nullptr, cancelUpdateResponse1.size() - hdrSize, &completionCode,
-        &nonFunctioningComponentIndication, &nonFunctioningComponentBitmap);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_cancel_update_resp(
-        responseMsg1, cancelUpdateResponse1.size() - hdrSize, nullptr,
-        &nonFunctioningComponentIndication, &nonFunctioningComponentBitmap);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_cancel_update_resp(
-        responseMsg1, cancelUpdateResponse1.size() - hdrSize, &completionCode,
-        nullptr, &nonFunctioningComponentBitmap);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_cancel_update_resp(
-        responseMsg1, cancelUpdateResponse1.size() - hdrSize, &completionCode,
-        &nonFunctioningComponentIndication, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_cancel_update_resp(
-        responseMsg1, cancelUpdateResponse1.size() - hdrSize, &completionCode,
-        &nonFunctioningComponentIndication, &nonFunctioningComponentBitmap);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(completionCode)>
-        cancelUpdateResponse2{0x00, 0x00, 0x00, 0x00};
-    auto responseMsg2 =
-        reinterpret_cast<const pldm_msg*>(cancelUpdateResponse2.data());
-    rc = decode_cancel_update_resp(
-        responseMsg2, cancelUpdateResponse2.size() - hdrSize, &completionCode,
-        &nonFunctioningComponentIndication, &nonFunctioningComponentBitmap);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    constexpr std::array<uint8_t, hdrSize + sizeof(pldm_cancel_update_resp)>
-        cancelUpdateResponse3{0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
-                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    auto responseMsg3 =
-        reinterpret_cast<const pldm_msg*>(cancelUpdateResponse3.data());
-    rc = decode_cancel_update_resp(
-        responseMsg3, cancelUpdateResponse3.size() - hdrSize, &completionCode,
-        &nonFunctioningComponentIndication, &nonFunctioningComponentBitmap);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
diff --git a/subprojects/libpldm/tests/libpldm_fru_test.cpp b/subprojects/libpldm/tests/libpldm_fru_test.cpp
deleted file mode 100644
index 0419826..0000000
--- a/subprojects/libpldm/tests/libpldm_fru_test.cpp
+++ /dev/null
@@ -1,887 +0,0 @@
-#include <string.h>
-
-#include <array>
-#include <cstring>
-
-#include "libpldm/base.h"
-#include "libpldm/fru.h"
-
-#include <gtest/gtest.h>
-
-TEST(GetFruRecordTableMetadata, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr)> requestMsg{};
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_get_fru_record_table_metadata_req(
-        0, requestPtr, PLDM_GET_FRU_RECORD_TABLE_METADATA_REQ_BYTES);
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(requestPtr->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(requestPtr->hdr.instance_id, 0u);
-    ASSERT_EQ(requestPtr->hdr.type, PLDM_FRU);
-    ASSERT_EQ(requestPtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE_METADATA);
-}
-
-TEST(GetFruRecordTableMetadata, testBadEncodeRequest)
-{
-    auto rc = encode_get_fru_record_table_metadata_req(0, NULL, 0);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    std::array<uint8_t, sizeof(pldm_msg_hdr)> requestMsg{};
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    rc = encode_get_fru_record_table_metadata_req(0, requestPtr, 1);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetFruRecordTableMetadata, testGoodDecodeResponse)
-{
-
-    std::vector<uint8_t> responseMsg(
-        sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES);
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response = reinterpret_cast<pldm_get_fru_record_table_metadata_resp*>(
-        responsePtr->payload);
-
-    responsePtr->hdr.request = PLDM_RESPONSE;
-    responsePtr->hdr.instance_id = 0;
-    responsePtr->hdr.type = PLDM_FRU;
-    responsePtr->hdr.command = PLDM_GET_FRU_RECORD_TABLE_METADATA;
-    response->completion_code = PLDM_SUCCESS;
-    response->fru_data_major_version = 0x12;
-    response->fru_data_minor_version = 0x21;
-    response->fru_table_maximum_size = htole32(0x1234ABCD);
-    response->fru_table_length = htole32(0x56781234);
-    response->total_record_set_identifiers = htole16(0x34EF);
-    response->total_table_records = htole16(0xEEEF);
-    response->checksum = htole32(0x6543FA71);
-
-    uint8_t completion_code = 0xFF;
-    uint8_t fru_data_major_version = 0x00;
-    uint8_t fru_data_minor_version = 0x00;
-    uint32_t fru_table_maximum_size = htole32(0x00000000);
-    uint32_t fru_table_length = htole32(0x00000000);
-    uint16_t total_record_set_identifiers = htole16(0x0000);
-    uint16_t total_table_records = htole16(0x0000);
-    uint32_t checksum = htole32(0x00000000);
-
-    auto rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, payload_length, &completion_code, &fru_data_major_version,
-        &fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
-        &total_record_set_identifiers, &total_table_records, &checksum);
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completion_code, PLDM_SUCCESS);
-    ASSERT_EQ(fru_data_major_version, 0x12u);
-    ASSERT_EQ(fru_data_minor_version, 0x21u);
-    ASSERT_EQ(fru_table_maximum_size, 0x1234ABCDu);
-    ASSERT_EQ(fru_table_length, 0x56781234u);
-    ASSERT_EQ(total_record_set_identifiers, 0x34EFu);
-    ASSERT_EQ(total_table_records, 0xEEEFu);
-    ASSERT_EQ(checksum, 0x6543FA71u);
-
-    response->fru_data_major_version = 0x00;
-    response->fru_data_minor_version = 0x00;
-    response->fru_table_maximum_size = htole32(0x00000000);
-    response->fru_table_length = htole32(0x00000000);
-    response->total_record_set_identifiers = htole16(0x0000);
-    response->total_table_records = htole16(0x0000);
-    response->checksum = htole32(0x00000000);
-    fru_data_major_version = 0x00;
-    fru_data_minor_version = 0x00;
-    fru_table_maximum_size = htole32(0x00000000);
-    fru_table_length = htole32(0x00000000);
-    total_record_set_identifiers = htole16(0x0000);
-    total_table_records = htole16(0x0000);
-    checksum = htole32(0x00000000);
-    response->completion_code = PLDM_ERROR_INVALID_LENGTH;
-    rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, payload_length, &completion_code, &fru_data_major_version,
-        &fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
-        &total_record_set_identifiers, &total_table_records, &checksum);
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(responsePtr->hdr.instance_id, 0u);
-    ASSERT_EQ(responsePtr->hdr.type, PLDM_FRU);
-    ASSERT_EQ(responsePtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE_METADATA);
-    ASSERT_EQ(completion_code, PLDM_ERROR_INVALID_LENGTH);
-    ASSERT_EQ(fru_data_major_version, 0x00u);
-    ASSERT_EQ(fru_data_minor_version, 0x00u);
-    ASSERT_EQ(fru_table_maximum_size, 0x00000000u);
-    ASSERT_EQ(fru_table_length, 0x00000000u);
-    ASSERT_EQ(total_record_set_identifiers, 0x0000u);
-    ASSERT_EQ(total_table_records, 0x0000u);
-    ASSERT_EQ(checksum, 0x00000000u);
-}
-
-TEST(GetFruRecordTableMetadata, testBadDecodeResponse)
-{
-    std::vector<uint8_t> responseMsg(
-        sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES);
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response = reinterpret_cast<pldm_get_fru_record_table_metadata_resp*>(
-        responsePtr->payload);
-
-    response->completion_code = PLDM_SUCCESS;
-    response->fru_data_major_version = 0x12;
-    response->fru_data_minor_version = 0x21;
-    response->fru_table_maximum_size = htole32(0x1234ABCD);
-    response->fru_table_length = htole32(0x56781234);
-    response->total_record_set_identifiers = htole16(0x34EF);
-    response->total_table_records = htole16(0xEEEF);
-    response->checksum = htole32(0x6543FA71);
-
-    uint8_t completion_code = 0xFF;
-    uint8_t fru_data_major_version = 0x00;
-    uint8_t fru_data_minor_version = 0x00;
-    uint32_t fru_table_maximum_size = htole32(0x00000000);
-    uint32_t fru_table_length = htole32(0x00000000);
-    uint16_t total_record_set_identifiers = htole16(0x0000);
-    uint16_t total_table_records = htole16(0x0000);
-    uint32_t checksum = htole32(0x00000000);
-
-    auto rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES + 2,
-        &completion_code, &fru_data_major_version, &fru_data_minor_version,
-        &fru_table_maximum_size, &fru_table_length,
-        &total_record_set_identifiers, &total_table_records, &checksum);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, payload_length, &completion_code, NULL,
-        &fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
-        &total_record_set_identifiers, &total_table_records, &checksum);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, payload_length, &completion_code, &fru_data_major_version,
-        NULL, &fru_table_maximum_size, &fru_table_length,
-        &total_record_set_identifiers, &total_table_records, &checksum);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, payload_length, &completion_code, &fru_data_major_version,
-        &fru_data_minor_version, NULL, &fru_table_length,
-        &total_record_set_identifiers, &total_table_records, &checksum);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, payload_length, &completion_code, &fru_data_major_version,
-        &fru_data_minor_version, &fru_table_maximum_size, NULL,
-        &total_record_set_identifiers, &total_table_records, &checksum);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, payload_length, &completion_code, &fru_data_major_version,
-        &fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
-        NULL, &total_table_records, &checksum);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, payload_length, &completion_code, &fru_data_major_version,
-        &fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
-        &total_record_set_identifiers, NULL, &checksum);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_fru_record_table_metadata_resp(
-        responsePtr, payload_length, &completion_code, &fru_data_major_version,
-        &fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
-        &total_record_set_identifiers, &total_table_records, NULL);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetFruRecordTableMetadata, testGoodEncodeResponse)
-{
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) +
-                            PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES>
-        responseMsg{};
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    responsePtr->hdr.request = PLDM_RESPONSE;
-    responsePtr->hdr.instance_id = 0;
-    responsePtr->hdr.type = PLDM_FRU;
-    responsePtr->hdr.command = PLDM_GET_FRU_RECORD_TABLE_METADATA;
-
-    uint8_t completion_code = PLDM_SUCCESS;
-    uint8_t fru_data_major_version = 0x12;
-    uint8_t fru_data_minor_version = 0x21;
-    uint32_t fru_table_maximum_size = htole32(0x1234ABCD);
-    uint32_t fru_table_length = htole32(0x56781234);
-    uint16_t total_record_set_identifiers = htole16(0x34EF);
-    uint16_t total_table_records = htole16(0xEEEF);
-    uint32_t checksum = htole32(0x6543FA71);
-
-    auto rc = encode_get_fru_record_table_metadata_resp(
-        0, completion_code, fru_data_major_version, fru_data_minor_version,
-        fru_table_maximum_size, fru_table_length, total_record_set_identifiers,
-        total_table_records, checksum, responsePtr);
-
-    auto response = reinterpret_cast<pldm_get_fru_record_table_metadata_resp*>(
-        responsePtr->payload);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(responsePtr->hdr.instance_id, 0u);
-    ASSERT_EQ(responsePtr->hdr.type, PLDM_FRU);
-    ASSERT_EQ(responsePtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE_METADATA);
-    ASSERT_EQ(response->completion_code, PLDM_SUCCESS);
-    ASSERT_EQ(response->fru_data_major_version, 0x12u);
-    ASSERT_EQ(response->fru_data_minor_version, 0x21u);
-    ASSERT_EQ(response->fru_table_maximum_size, 0x1234ABCDu);
-    ASSERT_EQ(response->fru_table_length, 0x56781234u);
-    ASSERT_EQ(response->total_record_set_identifiers, 0x34EFu);
-    ASSERT_EQ(response->total_table_records, 0xEEEFu);
-    ASSERT_EQ(response->checksum, 0x6543FA71u);
-
-    response->fru_data_major_version = 0;
-    response->fru_data_major_version = 0x00;
-    response->fru_data_minor_version = 0x00;
-    response->fru_table_maximum_size = htole32(0x00000000);
-    response->fru_table_length = htole32(0x00000000);
-    response->total_record_set_identifiers = htole16(0x0000);
-    response->total_table_records = htole16(0x0000);
-    response->checksum = htole32(0x00000000);
-    completion_code = PLDM_ERROR_INVALID_DATA;
-    rc = encode_get_fru_record_table_metadata_resp(
-        0, completion_code, fru_data_major_version, fru_data_minor_version,
-        fru_table_maximum_size, fru_table_length, total_record_set_identifiers,
-        total_table_records, checksum, responsePtr);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(responsePtr->hdr.instance_id, 0u);
-    ASSERT_EQ(responsePtr->hdr.type, PLDM_FRU);
-    ASSERT_EQ(responsePtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE_METADATA);
-    ASSERT_EQ(completion_code, PLDM_ERROR_INVALID_DATA);
-    ASSERT_EQ(response->fru_data_major_version, 0x00u);
-    ASSERT_EQ(response->fru_data_minor_version, 0x00u);
-    ASSERT_EQ(response->fru_table_maximum_size, 0x00000000u);
-    ASSERT_EQ(response->fru_table_length, 0x00000000u);
-    ASSERT_EQ(response->total_record_set_identifiers, 0x0000u);
-    ASSERT_EQ(response->total_table_records, 0x0000u);
-    ASSERT_EQ(response->checksum, 0x00000000u);
-}
-
-TEST(GetFruRecordTableMetadata, testBadEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) +
-                            PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES>
-        responseMsg{};
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    uint8_t completion_code = PLDM_SUCCESS;
-    uint8_t fru_data_major_version = 0x12;
-    uint8_t fru_data_minor_version = 0x21;
-    uint32_t fru_table_maximum_size = htole32(0x1234ABCD);
-    uint32_t fru_table_length = htole32(0x56781234);
-    uint16_t total_record_set_identifiers = htole16(0x34EF);
-    uint16_t total_table_records = htole16(0xEEEF);
-    uint32_t checksum = htole32(0x6543FA71);
-
-    auto rc = encode_get_fru_record_table_metadata_resp(
-        0, completion_code, fru_data_major_version, fru_data_minor_version,
-        fru_table_maximum_size, fru_table_length, total_record_set_identifiers,
-        total_table_records, checksum, NULL);
-
-    auto response = reinterpret_cast<pldm_get_fru_record_table_metadata_resp*>(
-        responsePtr->payload);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    ASSERT_EQ(completion_code, PLDM_SUCCESS);
-    ASSERT_EQ(response->fru_data_major_version, 0x00u);
-    ASSERT_EQ(response->fru_data_minor_version, 0x00u);
-    ASSERT_EQ(response->fru_table_maximum_size, 0x00000000u);
-    ASSERT_EQ(response->fru_table_length, 0x00000000u);
-    ASSERT_EQ(response->total_record_set_identifiers, 0x0000u);
-    ASSERT_EQ(response->total_table_records, 0x0000u);
-    ASSERT_EQ(response->checksum, 0x00000000u);
-}
-
-TEST(GetFruRecordTable, testGoodDecodeRequest)
-{
-    uint32_t data_transfer_handle = 31;
-    uint8_t transfer_operation_flag = PLDM_GET_FIRSTPART;
-    std::array<uint8_t,
-               PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    size_t payload_length = requestMsg.size() - sizeof(pldm_msg_hdr);
-    auto request =
-        reinterpret_cast<pldm_get_fru_record_table_req*>(requestPtr->payload);
-
-    request->data_transfer_handle = htole32(data_transfer_handle);
-    request->transfer_operation_flag = transfer_operation_flag;
-
-    uint32_t ret_data_transfer_handle = 0;
-    uint8_t ret_transfer_operation_flag = 0;
-
-    // Invoke decode get FRU record table request api
-    auto rc = decode_get_fru_record_table_req(requestPtr, payload_length,
-                                              &ret_data_transfer_handle,
-                                              &ret_transfer_operation_flag);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(data_transfer_handle, ret_data_transfer_handle);
-    ASSERT_EQ(transfer_operation_flag, ret_transfer_operation_flag);
-}
-
-TEST(GetFruRecordTable, testBadDecodeRequest)
-{
-    uint32_t data_transfer_handle = 0x0;
-    uint8_t transfer_operation_flag = PLDM_GET_FIRSTPART;
-
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES>
-        requestMsg{};
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Payload message is missing
-    auto rc = decode_get_fru_record_table_req(NULL, 0, &data_transfer_handle,
-                                              &transfer_operation_flag);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_get_fru_record_table_req(requestPtr, 0, &data_transfer_handle,
-                                         &transfer_operation_flag);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetFruRecordTable, testGoodEncodeResponse)
-{
-    uint8_t completion_code = 0;
-    uint32_t next_data_transfer_handle = 32;
-    uint8_t transfer_flag = PLDM_START_AND_END;
-
-    std::vector<uint8_t> responseMsg(sizeof(pldm_msg_hdr) +
-                                     PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES);
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    auto response =
-        reinterpret_cast<pldm_get_fru_record_table_resp*>(responsePtr->payload);
-
-    // Invoke encode get FRU record table response api
-    auto rc = encode_get_fru_record_table_resp(0, completion_code,
-                                               next_data_transfer_handle,
-                                               transfer_flag, responsePtr);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(responsePtr->hdr.instance_id, 0u);
-    ASSERT_EQ(responsePtr->hdr.type, PLDM_FRU);
-    ASSERT_EQ(responsePtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE);
-    ASSERT_EQ(response->completion_code, PLDM_SUCCESS);
-    ASSERT_EQ(le32toh(response->next_data_transfer_handle),
-              next_data_transfer_handle);
-    ASSERT_EQ(response->transfer_flag, transfer_flag);
-}
-
-TEST(GetFruRecordTable, testBadEncodeResponse)
-{
-    uint32_t next_data_transfer_handle = 32;
-    uint8_t transfer_flag = PLDM_START_AND_END;
-
-    std::vector<uint8_t> responseMsg(sizeof(pldm_msg_hdr) +
-                                     PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES);
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    auto rc = encode_get_fru_record_table_resp(
-        0, PLDM_ERROR, next_data_transfer_handle, transfer_flag, responsePtr);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(responsePtr->hdr.instance_id, 0u);
-    ASSERT_EQ(responsePtr->hdr.type, PLDM_FRU);
-    ASSERT_EQ(responsePtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE);
-    ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR);
-
-    rc = encode_get_fru_record_table_resp(
-        0, PLDM_SUCCESS, next_data_transfer_handle, transfer_flag, nullptr);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetFruRecordTable, testGoodEncodeRequest)
-
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto request =
-        reinterpret_cast<pldm_get_fru_record_table_req*>(requestPtr->payload);
-
-    // Random value for data transfer handle and transfer operation flag
-    uint32_t data_transfer_handle = 32;
-    uint8_t transfer_operation_flag = PLDM_GET_FIRSTPART;
-
-    // Invoke encode get FRU record table request api
-    auto rc = encode_get_fru_record_table_req(
-        0, data_transfer_handle, transfer_operation_flag, requestPtr,
-        requestMsg.size() - sizeof(pldm_msg_hdr));
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(requestPtr->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(requestPtr->hdr.instance_id, 0u);
-    ASSERT_EQ(requestPtr->hdr.type, PLDM_FRU);
-    ASSERT_EQ(requestPtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE);
-    ASSERT_EQ(le32toh(data_transfer_handle), request->data_transfer_handle);
-    ASSERT_EQ(transfer_operation_flag, request->transfer_operation_flag);
-}
-
-TEST(GetFruRecordTable, testBadEncodeRequest)
-
-{
-    uint32_t data_transfer_handle = 0x0;
-    uint8_t transfer_operation_flag = PLDM_GET_FIRSTPART;
-
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES>
-        requestMsg{};
-    auto rc = encode_get_fru_record_table_req(
-        0, data_transfer_handle, transfer_operation_flag, NULL,
-        requestMsg.size() - sizeof(pldm_msg_hdr));
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetFruRecordTable, testGoodDecodeResponse)
-{
-    uint8_t completion_code = PLDM_SUCCESS;
-    uint32_t next_data_transfer_handle = 0x16;
-    uint8_t transfer_flag = PLDM_START_AND_END;
-    std::vector<uint8_t> fru_record_table_data = {1, 2, 3, 4, 5, 6, 7, 8, 9};
-
-    std::vector<uint8_t> responseMsg(sizeof(pldm_msg_hdr) +
-                                     PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES +
-                                     fru_record_table_data.size());
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response =
-        reinterpret_cast<pldm_get_fru_record_table_resp*>(responsePtr->payload);
-
-    response->completion_code = completion_code;
-    response->next_data_transfer_handle = htole32(next_data_transfer_handle);
-    response->transfer_flag = transfer_flag;
-    memcpy(response->fru_record_table_data, fru_record_table_data.data(),
-           fru_record_table_data.size());
-
-    uint8_t ret_completion_code = 0;
-    uint32_t ret_next_data_transfer_handle = 0;
-    uint8_t ret_transfer_flag = 0;
-    std::vector<uint8_t> ret_fru_record_table_data(9, 0);
-    size_t ret_fru_record_table_length = 0;
-
-    // Invoke decode get FRU record table response api
-    auto rc = decode_get_fru_record_table_resp(
-        responsePtr, payload_length, &ret_completion_code,
-        &ret_next_data_transfer_handle, &ret_transfer_flag,
-        ret_fru_record_table_data.data(), &ret_fru_record_table_length);
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completion_code, ret_completion_code);
-    ASSERT_EQ(next_data_transfer_handle, ret_next_data_transfer_handle);
-    ASSERT_EQ(transfer_flag, ret_transfer_flag);
-    ASSERT_EQ(0, memcmp(fru_record_table_data.data(),
-                        ret_fru_record_table_data.data(),
-                        ret_fru_record_table_length));
-    ASSERT_EQ(fru_record_table_data.size(), ret_fru_record_table_length);
-}
-
-TEST(GetFruRecordTable, testBadDecodeResponse)
-{
-    uint8_t completion_code = 0;
-    uint32_t next_data_transfer_handle = 0;
-    uint8_t transfer_flag = PLDM_START_AND_END;
-    std::vector<uint8_t> fru_record_table_data(9, 0);
-    size_t fru_record_table_length = 0;
-
-    std::vector<uint8_t> responseMsg(sizeof(pldm_msg_hdr) +
-                                     PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES +
-                                     fru_record_table_data.size());
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Payload message is missing
-    auto rc = decode_get_fru_record_table_resp(
-        NULL, 0, &completion_code, &next_data_transfer_handle, &transfer_flag,
-        fru_record_table_data.data(), &fru_record_table_length);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_get_fru_record_table_resp(
-        responsePtr, 0, &completion_code, &next_data_transfer_handle,
-        &transfer_flag, fru_record_table_data.data(), &fru_record_table_length);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetFRURecordByOption, testGoodEncodeRequest)
-{
-    uint8_t instanceId = 2;
-    uint32_t dataTransferHandle = 3;
-    uint16_t fruTableHandle = 4;
-    uint16_t recordSetIdentifier = 5;
-    uint8_t recordType = 6;
-    uint8_t fieldType = 7;
-    uint8_t transferOpFlag = 0;
-
-    constexpr auto payLoadLength = sizeof(pldm_get_fru_record_by_option_req);
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + payLoadLength> request;
-    auto reqMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_get_fru_record_by_option_req(
-        instanceId, dataTransferHandle, fruTableHandle, recordSetIdentifier,
-        recordType, fieldType, transferOpFlag, reqMsg, payLoadLength);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(instanceId, reqMsg->hdr.instance_id);
-
-    auto payLoadMsg =
-        reinterpret_cast<pldm_get_fru_record_by_option_req*>(reqMsg->payload);
-
-    EXPECT_EQ(le32toh(payLoadMsg->data_transfer_handle), dataTransferHandle);
-    EXPECT_EQ(le16toh(payLoadMsg->fru_table_handle), fruTableHandle);
-    EXPECT_EQ(le16toh(payLoadMsg->record_set_identifier), recordSetIdentifier);
-    EXPECT_EQ(payLoadMsg->record_type, recordType);
-    EXPECT_EQ(payLoadMsg->field_type, fieldType);
-    EXPECT_EQ(payLoadMsg->transfer_op_flag, transferOpFlag);
-}
-
-TEST(GetFRURecordByOption, testBadEncodeRequest)
-{
-
-    constexpr auto payLoadLength = sizeof(pldm_get_fru_record_by_option_req);
-
-    auto rc = encode_get_fru_record_by_option_req(1, 2, 3, 4, 5, 6, 0, nullptr,
-                                                  payLoadLength);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + payLoadLength> request;
-    auto reqMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    rc = encode_get_fru_record_by_option_req(1, 2, 3, 4, 5, 6, 0, reqMsg,
-                                             payLoadLength - 1);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetFRURecordByOption, testGoodDecodeRequest)
-{
-    uint8_t instanceId = 2;
-    uint32_t dataTransferHandle = 3;
-    uint16_t fruTableHandle = 4;
-    uint16_t recordSetIdentifier = 5;
-    uint8_t recordType = 6;
-    uint8_t fieldType = 7;
-    uint8_t transferOpFlag = 0;
-
-    constexpr auto payLoadLength = sizeof(pldm_get_fru_record_by_option_req);
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + payLoadLength> request;
-    auto reqMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    auto rc = encode_get_fru_record_by_option_req(
-        instanceId, dataTransferHandle, fruTableHandle, recordSetIdentifier,
-        recordType, fieldType, transferOpFlag, reqMsg, payLoadLength);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    uint32_t retDataTransferHandle{};
-    uint16_t retFruTableHandle{};
-    uint16_t retRecordSetIdentifier{};
-    uint8_t retRecordType{};
-    uint8_t retFieldType{};
-    uint8_t retTransferOpFlag{};
-
-    rc = decode_get_fru_record_by_option_req(
-        reqMsg, payLoadLength, &retDataTransferHandle, &retFruTableHandle,
-        &retRecordSetIdentifier, &retRecordType, &retFieldType,
-        &retTransferOpFlag);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retDataTransferHandle, dataTransferHandle);
-    EXPECT_EQ(retFruTableHandle, fruTableHandle);
-    EXPECT_EQ(retRecordSetIdentifier, recordSetIdentifier);
-    EXPECT_EQ(retRecordType, recordType);
-    EXPECT_EQ(retFieldType, fieldType);
-    EXPECT_EQ(retTransferOpFlag, transferOpFlag);
-}
-
-TEST(GetFRURecordByOption, testBadDecodeRequest)
-{
-    constexpr auto payLoadLength = sizeof(pldm_get_fru_record_by_option_req);
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + payLoadLength> request{};
-    auto reqMsg = reinterpret_cast<pldm_msg*>(request.data());
-
-    uint32_t retDataTransferHandle{};
-    uint16_t retFruTableHandle{};
-    uint16_t retRecordSetIdentifier{};
-    uint8_t retRecordType{};
-    uint8_t retFieldType{};
-    uint8_t retTransferOpFlag{};
-
-    auto rc = decode_get_fru_record_by_option_req(
-        reqMsg, payLoadLength - 1, &retDataTransferHandle, &retFruTableHandle,
-        &retRecordSetIdentifier, &retRecordType, &retFieldType,
-        &retTransferOpFlag);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_get_fru_record_by_option_req(
-        reqMsg, payLoadLength - 1, nullptr, &retFruTableHandle,
-        &retRecordSetIdentifier, &retRecordType, &retFieldType,
-        &retTransferOpFlag);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetFruRecordByOption, testGoodEncodeResponse)
-{
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t instanceId = 2;
-    uint32_t dataTransferHandle = 3;
-    uint8_t transferFlag = 5;
-
-    std::array<uint8_t, 5> fruData = {1, 2, 3, 4, 5};
-    constexpr auto payLoadLength =
-        sizeof(pldm_get_fru_record_by_option_resp) - 1 + fruData.size();
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + payLoadLength> response;
-    auto respMsg = reinterpret_cast<pldm_msg*>(response.data());
-
-    auto rc = encode_get_fru_record_by_option_resp(
-        instanceId, completionCode, dataTransferHandle, transferFlag,
-        fruData.data(), fruData.size(), respMsg, payLoadLength);
-
-    auto payLoadMsg =
-        reinterpret_cast<pldm_get_fru_record_by_option_resp*>(respMsg->payload);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(payLoadMsg->completion_code, completionCode);
-    EXPECT_EQ(payLoadMsg->next_data_transfer_handle,
-              htole32(dataTransferHandle));
-    EXPECT_EQ(payLoadMsg->transfer_flag, transferFlag);
-
-    EXPECT_EQ(std::memcmp(payLoadMsg->fru_structure_data, fruData.data(),
-                          fruData.size()),
-              0);
-}
-
-TEST(GetFruRecordByOption, testBadEncodeResponse)
-{
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t instanceId = 2;
-    uint32_t dataTransferHandle = 3;
-    uint8_t transferFlag = 5;
-
-    std::array<uint8_t, 5> fruData = {1, 2, 3, 4, 5};
-    constexpr auto payLoadLength =
-        sizeof(pldm_get_fru_record_by_option_resp) - 1 + fruData.size();
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + payLoadLength> response;
-    auto respMsg = reinterpret_cast<pldm_msg*>(response.data());
-
-    auto rc = encode_get_fru_record_by_option_resp(
-        instanceId, completionCode, dataTransferHandle, transferFlag, nullptr,
-        fruData.size(), respMsg, payLoadLength);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_get_fru_record_by_option_resp(
-        instanceId, completionCode, dataTransferHandle, transferFlag,
-        fruData.data(), fruData.size(), respMsg, payLoadLength - 1);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetFruRecordByOption, testGoodDecodeResponse)
-{
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t instanceId = 2;
-    uint32_t dataTransferHandle = 3;
-    uint8_t transferFlag = 5;
-
-    std::array<uint8_t, 5> fruData = {1, 2, 3, 4, 5};
-    constexpr auto payLoadLength =
-        sizeof(pldm_get_fru_record_by_option_resp) - 1 + fruData.size();
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + payLoadLength> response;
-    auto respMsg = reinterpret_cast<pldm_msg*>(response.data());
-
-    auto rc = encode_get_fru_record_by_option_resp(
-        instanceId, completionCode, dataTransferHandle, transferFlag,
-        fruData.data(), fruData.size(), respMsg, payLoadLength);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    uint8_t retCompletionCode;
-    uint32_t retDataTransferHandle;
-    uint8_t retTransferFlag;
-    variable_field retFruData;
-
-    rc = decode_get_fru_record_by_option_resp(
-        respMsg, payLoadLength, &retCompletionCode, &retDataTransferHandle,
-        &retTransferFlag, &retFruData);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retCompletionCode, completionCode);
-    EXPECT_EQ(retDataTransferHandle, dataTransferHandle);
-    EXPECT_EQ(retTransferFlag, transferFlag);
-    EXPECT_EQ(retFruData.length, fruData.size());
-    EXPECT_EQ(std::memcmp(fruData.data(), retFruData.ptr, fruData.size()), 0);
-}
-
-TEST(GetFruRecordByOption, testBadDecodeResponse)
-{
-
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t instanceId = 2;
-    uint32_t dataTransferHandle = 3;
-    uint8_t transferFlag = 5;
-
-    std::array<uint8_t, 5> fruData = {1, 2, 3, 4, 5};
-    constexpr auto payLoadLength =
-        sizeof(pldm_get_fru_record_by_option_resp) - 1 + fruData.size();
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + payLoadLength> response;
-    auto respMsg = reinterpret_cast<pldm_msg*>(response.data());
-
-    auto rc = encode_get_fru_record_by_option_resp(
-        instanceId, completionCode, dataTransferHandle, transferFlag,
-        fruData.data(), fruData.size(), respMsg, payLoadLength);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    uint8_t retCompletionCode;
-    uint32_t retDataTransferHandle;
-    uint8_t retTransferFlag;
-    variable_field retFruData;
-
-    rc = decode_get_fru_record_by_option_resp(respMsg, payLoadLength, nullptr,
-                                              &retDataTransferHandle,
-                                              &retTransferFlag, &retFruData);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_fru_record_by_option_resp(
-        respMsg, PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES - 1,
-        &retCompletionCode, &retDataTransferHandle, &retTransferFlag,
-        &retFruData);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetFRURecordTable, testGoodEncodeResponse)
-{
-    uint8_t instanceId = 2;
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t nextDataTransferHandle = 32;
-
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_SET_FRU_RECORD_TABLE_RESP_BYTES>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-    auto rc = encode_set_fru_record_table_resp(
-        instanceId, completionCode, nextDataTransferHandle,
-        responseMsg.size() - sizeof(pldm_msg_hdr), response);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_set_fru_record_table_resp* resp =
-        reinterpret_cast<struct pldm_set_fru_record_table_resp*>(
-            response->payload);
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(htole32(nextDataTransferHandle), resp->next_data_transfer_handle);
-}
-
-TEST(SetFRURecordTable, testBadEncodeResponse)
-{
-    uint8_t instanceId = 0;
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t nextDataTransferHandle = 1;
-
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_SET_FRU_RECORD_TABLE_RESP_BYTES>
-        responseMsg{};
-    struct pldm_msg* response =
-        reinterpret_cast<struct pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_set_fru_record_table_resp(
-        instanceId, completionCode, nextDataTransferHandle,
-        responseMsg.size() - sizeof(pldm_msg_hdr), NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_set_fru_record_table_resp(
-        instanceId, completionCode, nextDataTransferHandle,
-        responseMsg.size() - sizeof(pldm_msg_hdr) - 1, response);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetFRURecordTable, testGoodDecodeRequest)
-{
-    uint32_t transferHandle = 1;
-    uint8_t transferFlag = PLDM_GET_FIRSTPART;
-    uint32_t tableData = 44;
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) +
-                            PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES +
-                            sizeof(tableData)>
-        requestMsg{};
-    auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
-    struct pldm_set_fru_record_table_req* req =
-        reinterpret_cast<struct pldm_set_fru_record_table_req*>(
-            request->payload);
-    req->data_transfer_handle = htole32(transferHandle);
-    req->transfer_flag = transferFlag;
-    memcpy(req->fru_record_table_data, &tableData, sizeof(tableData));
-
-    uint32_t retTransferHandle;
-    uint8_t retTransferFlag;
-    struct variable_field table;
-
-    auto rc = decode_set_fru_record_table_req(
-        request, requestMsg.size() - sizeof(pldm_msg_hdr), &retTransferHandle,
-        &retTransferFlag, &table);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retTransferHandle, transferHandle);
-    EXPECT_EQ(retTransferFlag, transferFlag);
-    EXPECT_EQ(table.length, sizeof(tableData));
-    EXPECT_EQ(0, memcmp(table.ptr, &tableData, sizeof(tableData)));
-}
-
-TEST(SetFRURecordTable, testBadDecodeRequest)
-{
-    uint32_t transferHandle = 1;
-    uint8_t transferFlag = PLDM_GET_FIRSTPART;
-    uint32_t tableData = 44;
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) +
-                            PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES +
-                            sizeof(tableData)>
-        requestMsg{};
-    auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
-    struct pldm_set_fru_record_table_req* req =
-        reinterpret_cast<struct pldm_set_fru_record_table_req*>(
-            request->payload);
-    req->data_transfer_handle = htole32(transferHandle);
-    req->transfer_flag = transferFlag;
-    memcpy(req->fru_record_table_data, &tableData, sizeof(tableData));
-
-    uint32_t retTransferHandle;
-    uint8_t retTransferFlag;
-
-    auto rc = decode_set_fru_record_table_req(
-        request, requestMsg.size() - sizeof(pldm_msg_hdr), &retTransferHandle,
-        &retTransferFlag, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    struct variable_field table;
-    rc = decode_set_fru_record_table_req(
-        request,
-        requestMsg.size() - sizeof(pldm_msg_hdr) - sizeof(tableData) - 1,
-        &retTransferHandle, &retTransferFlag, &table);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
diff --git a/subprojects/libpldm/tests/libpldm_pdr_test.cpp b/subprojects/libpldm/tests/libpldm_pdr_test.cpp
deleted file mode 100644
index 666145a..0000000
--- a/subprojects/libpldm/tests/libpldm_pdr_test.cpp
+++ /dev/null
@@ -1,1529 +0,0 @@
-#include <array>
-
-#include "libpldm/pdr.h"
-#include "libpldm/platform.h"
-
-#include <gtest/gtest.h>
-
-TEST(PDRAccess, testInit)
-{
-    auto repo = pldm_pdr_init();
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 0u);
-    EXPECT_EQ(pldm_pdr_get_repo_size(repo), 0u);
-    pldm_pdr_destroy(repo);
-}
-
-TEST(PDRUpdate, testAdd)
-{
-    auto repo = pldm_pdr_init();
-
-    std::array<uint8_t, 10> data{};
-    auto handle = pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    EXPECT_EQ(handle, 1u);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    EXPECT_EQ(pldm_pdr_get_repo_size(repo), data.size());
-
-    handle = pldm_pdr_add(repo, data.data(), data.size(), 0u, false, 1);
-    EXPECT_EQ(handle, 2u);
-    handle = pldm_pdr_add(repo, data.data(), data.size(), 0u, false, 1);
-    EXPECT_EQ(handle, 3u);
-    handle = pldm_pdr_add(repo, data.data(), data.size(), htole32(0xdeeddeedu),
-                          false, 1);
-    EXPECT_EQ(handle, htole32(0xdeeddeed));
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 4u);
-    EXPECT_EQ(pldm_pdr_get_repo_size(repo), data.size() * 4u);
-
-    pldm_pdr_destroy(repo);
-}
-
-TEST(PDRRemoveByTerminus, testRemoveByTerminus)
-{
-    std::array<uint8_t, 10> data{};
-
-    auto repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_remove_pdrs_by_terminus_handle(repo, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 0u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 2);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 2u);
-    pldm_pdr_remove_pdrs_by_terminus_handle(repo, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 2);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 2);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 3u);
-    pldm_pdr_remove_pdrs_by_terminus_handle(repo, 2);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 2);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 3u);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    pldm_pdr_remove_pdrs_by_terminus_handle(repo, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    pldm_pdr_remove_pdrs_by_terminus_handle(repo, 2);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 0u);
-    pldm_pdr_destroy(repo);
-}
-
-TEST(PDRUpdate, testRemove)
-{
-    std::array<uint8_t, 10> data{};
-
-    auto repo = pldm_pdr_init();
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 0u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 0u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 0u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 2u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 4u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 6u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 3u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 5u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 3u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 5u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 2u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 4u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 3u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 5u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 2u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 4u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 3u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 3u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 2u);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 4u);
-    pldm_pdr_destroy(repo);
-
-    repo = pldm_pdr_init();
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    pldm_pdr_remove_remote_pdrs(repo);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 2u);
-    auto handle = pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    EXPECT_EQ(handle, 3u);
-    handle = pldm_pdr_add(repo, data.data(), data.size(), 0, true, 1);
-    EXPECT_EQ(handle, 4u);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 4u);
-    pldm_pdr_destroy(repo);
-}
-
-TEST(PDRAccess, testGet)
-{
-    auto repo = pldm_pdr_init();
-
-    std::array<uint32_t, 10> in{100, 345, 3, 6, 89, 0, 11, 45, 23434, 123123};
-    pldm_pdr_add(repo, reinterpret_cast<uint8_t*>(in.data()), sizeof(in), 1,
-                 false, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    EXPECT_EQ(pldm_pdr_get_repo_size(repo), sizeof(in));
-    uint32_t size{};
-    uint32_t nextRecHdl{};
-    uint8_t* outData = nullptr;
-    auto hdl = pldm_pdr_find_record(repo, 0, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(in));
-    EXPECT_EQ(nextRecHdl, 0u);
-    EXPECT_EQ(memcmp(outData, in.data(), sizeof(in)), 0);
-    outData = nullptr;
-
-    auto hdl2 = pldm_pdr_find_record(repo, 1, &outData, &size, &nextRecHdl);
-    EXPECT_EQ(hdl, hdl2);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(in));
-    EXPECT_EQ(nextRecHdl, 0u);
-    EXPECT_EQ(memcmp(outData, in.data(), sizeof(in)), 0);
-    outData = nullptr;
-
-    hdl = pldm_pdr_find_record(repo, htole32(0xdeaddead), &outData, &size,
-                               &nextRecHdl);
-    EXPECT_EQ(hdl, nullptr);
-    EXPECT_EQ(size, 0u);
-    EXPECT_EQ(nextRecHdl, 0u);
-    EXPECT_EQ(outData, nullptr);
-    outData = nullptr;
-
-    std::array<uint32_t, 10> in2{1000, 3450, 30,  60,     890,
-                                 0,    110,  450, 234034, 123123};
-    pldm_pdr_add(repo, reinterpret_cast<uint8_t*>(in2.data()), sizeof(in2), 2,
-                 false, 1);
-    pldm_pdr_add(repo, reinterpret_cast<uint8_t*>(in2.data()), sizeof(in2), 3,
-                 false, 1);
-    pldm_pdr_add(repo, reinterpret_cast<uint8_t*>(in2.data()), sizeof(in2), 4,
-                 true, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 4u);
-    EXPECT_EQ(pldm_pdr_get_repo_size(repo), sizeof(in2) * 4);
-    hdl = pldm_pdr_find_record(repo, 0, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(in));
-    EXPECT_EQ(nextRecHdl, 2u);
-    EXPECT_EQ(memcmp(outData, in.data(), sizeof(in)), 0);
-    outData = nullptr;
-    hdl2 = pldm_pdr_find_record(repo, 1, &outData, &size, &nextRecHdl);
-    EXPECT_EQ(hdl, hdl2);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(in));
-    EXPECT_EQ(nextRecHdl, 2u);
-    EXPECT_EQ(memcmp(outData, in.data(), sizeof(in)), 0);
-    outData = nullptr;
-    hdl = pldm_pdr_find_record(repo, 2, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(in2));
-    EXPECT_EQ(nextRecHdl, 3u);
-    EXPECT_EQ(memcmp(outData, in2.data(), sizeof(in2)), 0);
-    outData = nullptr;
-    hdl = pldm_pdr_find_record(repo, 3, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(pldm_pdr_record_is_remote(hdl), false);
-    EXPECT_EQ(size, sizeof(in2));
-    EXPECT_EQ(nextRecHdl, 4u);
-    EXPECT_EQ(memcmp(outData, in2.data(), sizeof(in2)), 0);
-    outData = nullptr;
-    hdl = pldm_pdr_find_record(repo, 4, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(pldm_pdr_record_is_remote(hdl), true);
-    EXPECT_EQ(size, sizeof(in2));
-    EXPECT_EQ(nextRecHdl, 0u);
-    EXPECT_EQ(memcmp(outData, in2.data(), sizeof(in2)), 0);
-    outData = nullptr;
-
-    pldm_pdr_destroy(repo);
-}
-
-TEST(PDRAccess, testGetNext)
-{
-    auto repo = pldm_pdr_init();
-
-    std::array<uint32_t, 10> in{100, 345, 3, 6, 89, 0, 11, 45, 23434, 123123};
-    pldm_pdr_add(repo, reinterpret_cast<uint8_t*>(in.data()), sizeof(in), 1,
-                 false, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    EXPECT_EQ(pldm_pdr_get_repo_size(repo), sizeof(in));
-    uint32_t size{};
-    uint32_t nextRecHdl{};
-    uint8_t* outData = nullptr;
-    auto hdl = pldm_pdr_find_record(repo, 0, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(in));
-    EXPECT_EQ(nextRecHdl, 0u);
-    EXPECT_EQ(memcmp(outData, in.data(), sizeof(in)), 0);
-    outData = nullptr;
-
-    std::array<uint32_t, 10> in2{1000, 3450, 30,  60,     890,
-                                 0,    110,  450, 234034, 123123};
-    pldm_pdr_add(repo, reinterpret_cast<uint8_t*>(in2.data()), sizeof(in2), 2,
-                 false, 1);
-    pldm_pdr_add(repo, reinterpret_cast<uint8_t*>(in2.data()), sizeof(in2), 3,
-                 false, 1);
-    pldm_pdr_add(repo, reinterpret_cast<uint8_t*>(in2.data()), sizeof(in2), 4,
-                 false, 1);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 4u);
-    EXPECT_EQ(pldm_pdr_get_repo_size(repo), sizeof(in2) * 4);
-    hdl = pldm_pdr_get_next_record(repo, hdl, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(in2));
-    EXPECT_EQ(nextRecHdl, 3u);
-    EXPECT_EQ(memcmp(outData, in2.data(), sizeof(in2)), 0);
-    outData = nullptr;
-    hdl = pldm_pdr_get_next_record(repo, hdl, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(in2));
-    EXPECT_EQ(nextRecHdl, 4u);
-    EXPECT_EQ(memcmp(outData, in2.data(), sizeof(in2)), 0);
-    outData = nullptr;
-    hdl = pldm_pdr_get_next_record(repo, hdl, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(in2));
-    EXPECT_EQ(nextRecHdl, 0u);
-    EXPECT_EQ(memcmp(outData, in2.data(), sizeof(in2)), 0);
-    outData = nullptr;
-
-    pldm_pdr_destroy(repo);
-}
-
-TEST(PDRAccess, testFindByType)
-{
-    auto repo = pldm_pdr_init();
-
-    std::array<uint8_t, sizeof(pldm_pdr_hdr)> data{};
-    pldm_pdr_hdr* hdr = reinterpret_cast<pldm_pdr_hdr*>(data.data());
-    hdr->type = 1;
-    auto first = pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    hdr->type = 2;
-    auto second = pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    hdr->type = 3;
-    auto third = pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-    hdr->type = 4;
-    auto fourth = pldm_pdr_add(repo, data.data(), data.size(), 0, false, 1);
-
-    uint8_t* outData = nullptr;
-    uint32_t size{};
-    auto firstRec =
-        pldm_pdr_find_record_by_type(repo, 1, nullptr, &outData, &size);
-    EXPECT_EQ(pldm_pdr_get_record_handle(repo, firstRec), first);
-    outData = nullptr;
-    auto secondRec =
-        pldm_pdr_find_record_by_type(repo, 2, nullptr, &outData, &size);
-    EXPECT_EQ(pldm_pdr_get_record_handle(repo, secondRec), second);
-    outData = nullptr;
-    auto thirdRec =
-        pldm_pdr_find_record_by_type(repo, 3, nullptr, &outData, &size);
-    EXPECT_EQ(pldm_pdr_get_record_handle(repo, thirdRec), third);
-    outData = nullptr;
-    auto fourthRec =
-        pldm_pdr_find_record_by_type(repo, 4, nullptr, &outData, &size);
-    EXPECT_EQ(pldm_pdr_get_record_handle(repo, fourthRec), fourth);
-    outData = nullptr;
-    auto fifthRec =
-        pldm_pdr_find_record_by_type(repo, 5, nullptr, &outData, &size);
-    EXPECT_EQ(fifthRec, nullptr);
-    EXPECT_EQ(outData, nullptr);
-    EXPECT_EQ(size, 0u);
-
-    auto rec =
-        pldm_pdr_find_record_by_type(repo, 3, secondRec, &outData, &size);
-    EXPECT_EQ(pldm_pdr_get_record_handle(repo, rec), third);
-    outData = nullptr;
-    rec = pldm_pdr_find_record_by_type(repo, 4, secondRec, &outData, &size);
-    EXPECT_EQ(pldm_pdr_get_record_handle(repo, rec), fourth);
-    outData = nullptr;
-    rec = pldm_pdr_find_record_by_type(repo, 2, firstRec, &outData, &size);
-    EXPECT_EQ(pldm_pdr_get_record_handle(repo, rec), second);
-    outData = nullptr;
-
-    pldm_pdr_destroy(repo);
-}
-
-TEST(PDRUpdate, testAddFruRecordSet)
-{
-    auto repo = pldm_pdr_init();
-
-    auto handle = pldm_pdr_add_fru_record_set(repo, 1, 10, 1, 0, 100, 0);
-    EXPECT_EQ(handle, 1u);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 1u);
-    EXPECT_EQ(pldm_pdr_get_repo_size(repo),
-              sizeof(pldm_pdr_hdr) + sizeof(pldm_pdr_fru_record_set));
-    uint32_t size{};
-    uint32_t nextRecHdl{};
-    uint8_t* outData = nullptr;
-    auto hdl = pldm_pdr_find_record(repo, 0, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(pldm_pdr_hdr) + sizeof(pldm_pdr_fru_record_set));
-    EXPECT_EQ(nextRecHdl, 0u);
-    pldm_pdr_hdr* hdr = reinterpret_cast<pldm_pdr_hdr*>(outData);
-    EXPECT_EQ(hdr->version, 1u);
-    EXPECT_EQ(hdr->type, PLDM_PDR_FRU_RECORD_SET);
-    EXPECT_EQ(hdr->length, htole16(sizeof(pldm_pdr_fru_record_set)));
-    EXPECT_EQ(hdr->record_handle, htole32(1));
-    pldm_pdr_fru_record_set* fru = reinterpret_cast<pldm_pdr_fru_record_set*>(
-        outData + sizeof(pldm_pdr_hdr));
-    EXPECT_EQ(fru->terminus_handle, htole16(1));
-    EXPECT_EQ(fru->fru_rsi, htole16(10));
-    EXPECT_EQ(fru->entity_type, htole16(1));
-    EXPECT_EQ(fru->entity_instance_num, htole16(0));
-    EXPECT_EQ(fru->container_id, htole16(100));
-    outData = nullptr;
-
-    handle = pldm_pdr_add_fru_record_set(repo, 2, 11, 2, 1, 101, 0);
-    EXPECT_EQ(handle, 2u);
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 2u);
-    EXPECT_EQ(pldm_pdr_get_repo_size(repo),
-              2 * (sizeof(pldm_pdr_hdr) + sizeof(pldm_pdr_fru_record_set)));
-    hdl = pldm_pdr_find_record(repo, 2, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(pldm_pdr_hdr) + sizeof(pldm_pdr_fru_record_set));
-    EXPECT_EQ(nextRecHdl, 0u);
-    hdr = reinterpret_cast<pldm_pdr_hdr*>(outData);
-    EXPECT_EQ(hdr->version, 1u);
-    EXPECT_EQ(hdr->type, PLDM_PDR_FRU_RECORD_SET);
-    EXPECT_EQ(hdr->length, htole16(sizeof(pldm_pdr_fru_record_set)));
-    EXPECT_EQ(hdr->record_handle, htole32(2));
-    fru = reinterpret_cast<pldm_pdr_fru_record_set*>(outData +
-                                                     sizeof(pldm_pdr_hdr));
-    EXPECT_EQ(fru->terminus_handle, htole16(2));
-    EXPECT_EQ(fru->fru_rsi, htole16(11));
-    EXPECT_EQ(fru->entity_type, htole16(2));
-    EXPECT_EQ(fru->entity_instance_num, htole16(1));
-    EXPECT_EQ(fru->container_id, htole16(101));
-    outData = nullptr;
-
-    hdl = pldm_pdr_find_record(repo, 1, &outData, &size, &nextRecHdl);
-    EXPECT_NE(hdl, nullptr);
-    EXPECT_EQ(size, sizeof(pldm_pdr_hdr) + sizeof(pldm_pdr_fru_record_set));
-    EXPECT_EQ(nextRecHdl, 2u);
-    hdr = reinterpret_cast<pldm_pdr_hdr*>(outData);
-    EXPECT_EQ(hdr->version, 1u);
-    EXPECT_EQ(hdr->type, PLDM_PDR_FRU_RECORD_SET);
-    EXPECT_EQ(hdr->length, htole16(sizeof(pldm_pdr_fru_record_set)));
-    EXPECT_EQ(hdr->record_handle, htole32(1));
-    fru = reinterpret_cast<pldm_pdr_fru_record_set*>(outData +
-                                                     sizeof(pldm_pdr_hdr));
-    EXPECT_EQ(fru->terminus_handle, htole16(1));
-    EXPECT_EQ(fru->fru_rsi, htole16(10));
-    EXPECT_EQ(fru->entity_type, htole16(1));
-    EXPECT_EQ(fru->entity_instance_num, htole16(0));
-    EXPECT_EQ(fru->container_id, htole16(100));
-    outData = nullptr;
-
-    pldm_pdr_destroy(repo);
-}
-
-TEST(PDRUpdate, tesFindtFruRecordSet)
-{
-    auto repo = pldm_pdr_init();
-
-    uint16_t terminusHdl{};
-    uint16_t entityType{};
-    uint16_t entityInstanceNum{};
-    uint16_t containerId{};
-    auto first = pldm_pdr_add_fru_record_set(repo, 1, 1, 1, 0, 100, 1);
-    auto second = pldm_pdr_add_fru_record_set(repo, 1, 2, 1, 1, 100, 2);
-    auto third = pldm_pdr_add_fru_record_set(repo, 1, 3, 1, 2, 100, 3);
-    EXPECT_EQ(first, pldm_pdr_get_record_handle(
-                         repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                   repo, 1, &terminusHdl, &entityType,
-                                   &entityInstanceNum, &containerId)));
-    EXPECT_EQ(second, pldm_pdr_get_record_handle(
-                          repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                    repo, 2, &terminusHdl, &entityType,
-                                    &entityInstanceNum, &containerId)));
-    EXPECT_EQ(third, pldm_pdr_get_record_handle(
-                         repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                   repo, 3, &terminusHdl, &entityType,
-                                   &entityInstanceNum, &containerId)));
-    EXPECT_EQ(terminusHdl, 1u);
-    EXPECT_EQ(entityType, 1u);
-    EXPECT_EQ(entityInstanceNum, 2u);
-    EXPECT_EQ(containerId, 100u);
-    EXPECT_EQ(nullptr, pldm_pdr_fru_record_set_find_by_rsi(
-                           repo, 4, &terminusHdl, &entityType,
-                           &entityInstanceNum, &containerId));
-
-    pldm_pdr_destroy(repo);
-}
-
-TEST(EntityAssociationPDR, testInit)
-{
-    auto tree = pldm_entity_association_tree_init();
-    EXPECT_NE(tree, nullptr);
-    pldm_entity_association_tree_destroy(tree);
-}
-
-TEST(EntityAssociationPDR, testBuild)
-{
-    //        1
-    //        |
-    //        2--3--4
-    //        |
-    //        5--6--7
-    //        |  |
-    //        9  8
-
-    pldm_entity entities[9]{};
-
-    entities[0].entity_type = 1;
-    entities[1].entity_type = 2;
-    entities[2].entity_type = 2;
-    entities[3].entity_type = 3;
-    entities[4].entity_type = 4;
-    entities[5].entity_type = 5;
-    entities[6].entity_type = 5;
-    entities[7].entity_type = 6;
-    entities[8].entity_type = 7;
-
-    auto tree = pldm_entity_association_tree_init();
-
-    auto l1 = pldm_entity_association_tree_add(
-        tree, &entities[0], 0xFFFF, nullptr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l1, nullptr);
-    auto l2a = pldm_entity_association_tree_add(
-        tree, &entities[1], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2a, nullptr);
-    auto l2b = pldm_entity_association_tree_add(
-        tree, &entities[2], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2b, nullptr);
-    auto l2c = pldm_entity_association_tree_add(
-        tree, &entities[3], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2c, nullptr);
-    auto l3a = pldm_entity_association_tree_add(
-        tree, &entities[4], 0xFFFF, l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l3a, nullptr);
-    auto l3b = pldm_entity_association_tree_add(
-        tree, &entities[5], 0xFFFF, l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l3b, nullptr);
-    auto l3c = pldm_entity_association_tree_add(
-        tree, &entities[6], 0xFFFF, l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l3b, nullptr);
-    auto l4a = pldm_entity_association_tree_add(
-        tree, &entities[7], 0xFFFF, l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l4a, nullptr);
-    auto l4b = pldm_entity_association_tree_add(
-        tree, &entities[8], 0xFFFF, l3b, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l4b, nullptr);
-
-    EXPECT_EQ(pldm_entity_is_node_parent(l1), true);
-    EXPECT_EQ(pldm_entity_is_node_parent(l2a), true);
-    EXPECT_EQ(pldm_entity_is_node_parent(l3a), true);
-    EXPECT_EQ(pldm_entity_is_node_parent(l3b), true);
-
-    EXPECT_EQ(pldm_entity_is_node_parent(l2b), false);
-    EXPECT_EQ(pldm_entity_is_node_parent(l2c), false);
-    EXPECT_EQ(pldm_entity_is_node_parent(l3c), false);
-    EXPECT_EQ(pldm_entity_is_node_parent(l4a), false);
-    EXPECT_EQ(pldm_entity_is_node_parent(l4b), false);
-
-    EXPECT_EQ(pldm_entity_is_exist_parent(l1), false);
-
-    pldm_entity nodeL1 = pldm_entity_extract(l1);
-    pldm_entity parentL2a = pldm_entity_get_parent(l2a);
-    pldm_entity parentL2b = pldm_entity_get_parent(l2b);
-    pldm_entity parentL2c = pldm_entity_get_parent(l2c);
-    EXPECT_EQ(pldm_entity_is_exist_parent(l2a), true);
-    EXPECT_EQ(pldm_entity_is_exist_parent(l2b), true);
-    EXPECT_EQ(pldm_entity_is_exist_parent(l2c), true);
-    EXPECT_EQ(parentL2a.entity_type, nodeL1.entity_type);
-    EXPECT_EQ(parentL2a.entity_instance_num, nodeL1.entity_instance_num);
-    EXPECT_EQ(parentL2a.entity_container_id, nodeL1.entity_container_id);
-    EXPECT_EQ(parentL2b.entity_type, nodeL1.entity_type);
-    EXPECT_EQ(parentL2b.entity_instance_num, nodeL1.entity_instance_num);
-    EXPECT_EQ(parentL2b.entity_container_id, nodeL1.entity_container_id);
-    EXPECT_EQ(parentL2c.entity_type, nodeL1.entity_type);
-    EXPECT_EQ(parentL2c.entity_instance_num, nodeL1.entity_instance_num);
-    EXPECT_EQ(parentL2c.entity_container_id, nodeL1.entity_container_id);
-
-    pldm_entity nodeL2a = pldm_entity_extract(l2a);
-    pldm_entity parentL3a = pldm_entity_get_parent(l3a);
-    pldm_entity parentL3b = pldm_entity_get_parent(l3b);
-    pldm_entity parentL3c = pldm_entity_get_parent(l3c);
-    EXPECT_EQ(pldm_entity_is_exist_parent(l3a), true);
-    EXPECT_EQ(pldm_entity_is_exist_parent(l3b), true);
-    EXPECT_EQ(pldm_entity_is_exist_parent(l3c), true);
-    EXPECT_EQ(parentL3a.entity_type, nodeL2a.entity_type);
-    EXPECT_EQ(parentL3a.entity_instance_num, nodeL2a.entity_instance_num);
-    EXPECT_EQ(parentL3a.entity_container_id, nodeL2a.entity_container_id);
-    EXPECT_EQ(parentL3b.entity_type, nodeL2a.entity_type);
-    EXPECT_EQ(parentL3b.entity_instance_num, nodeL2a.entity_instance_num);
-    EXPECT_EQ(parentL3b.entity_container_id, nodeL2a.entity_container_id);
-    EXPECT_EQ(parentL3c.entity_type, nodeL2a.entity_type);
-    EXPECT_EQ(parentL3c.entity_instance_num, nodeL2a.entity_instance_num);
-    EXPECT_EQ(parentL3c.entity_container_id, nodeL2a.entity_container_id);
-
-    pldm_entity nodeL3a = pldm_entity_extract(l3a);
-    pldm_entity parentL4a = pldm_entity_get_parent(l4a);
-    EXPECT_EQ(pldm_entity_is_exist_parent(l4a), true);
-    EXPECT_EQ(parentL4a.entity_type, nodeL3a.entity_type);
-    EXPECT_EQ(parentL4a.entity_instance_num, nodeL3a.entity_instance_num);
-    EXPECT_EQ(parentL4a.entity_container_id, nodeL3a.entity_container_id);
-
-    pldm_entity nodeL3b = pldm_entity_extract(l3b);
-    pldm_entity parentL4b = pldm_entity_get_parent(l4b);
-    EXPECT_EQ(pldm_entity_is_exist_parent(l4b), true);
-    EXPECT_EQ(parentL4b.entity_type, nodeL3b.entity_type);
-    EXPECT_EQ(parentL4b.entity_instance_num, nodeL3b.entity_instance_num);
-    EXPECT_EQ(parentL4b.entity_container_id, nodeL3b.entity_container_id);
-
-    size_t num{};
-    pldm_entity* out = nullptr;
-    pldm_entity_association_tree_visit(tree, &out, &num);
-    EXPECT_EQ(num, 9u);
-
-    EXPECT_EQ(out[0].entity_type, 1u);
-    EXPECT_EQ(out[0].entity_instance_num, 1u);
-    EXPECT_EQ(out[0].entity_container_id, 0u);
-
-    EXPECT_EQ(out[1].entity_type, 2u);
-    EXPECT_EQ(out[1].entity_instance_num, 1u);
-    EXPECT_EQ(out[1].entity_container_id, 1u);
-    EXPECT_EQ(out[2].entity_type, 2u);
-    EXPECT_EQ(out[2].entity_instance_num, 2u);
-    EXPECT_EQ(out[2].entity_container_id, 1u);
-    EXPECT_EQ(out[3].entity_type, 3u);
-    EXPECT_EQ(out[3].entity_instance_num, 1u);
-    EXPECT_EQ(out[3].entity_container_id, 1u);
-
-    EXPECT_EQ(out[4].entity_type, 4u);
-    EXPECT_EQ(out[4].entity_instance_num, 1u);
-    EXPECT_EQ(out[4].entity_container_id, 2u);
-    EXPECT_EQ(out[5].entity_type, 5u);
-    EXPECT_EQ(out[5].entity_instance_num, 1u);
-    EXPECT_EQ(out[5].entity_container_id, 2u);
-    EXPECT_EQ(out[6].entity_type, 5u);
-    EXPECT_EQ(out[6].entity_instance_num, 2u);
-    EXPECT_EQ(out[6].entity_container_id, 2u);
-
-    EXPECT_EQ(out[7].entity_type, 7u);
-    EXPECT_EQ(out[7].entity_instance_num, 1u);
-    EXPECT_EQ(out[7].entity_container_id, 4u);
-    EXPECT_EQ(out[8].entity_type, 6u);
-    EXPECT_EQ(out[8].entity_instance_num, 1u);
-    EXPECT_EQ(out[8].entity_container_id, 3u);
-
-    free(out);
-
-    pldm_entity p1 = pldm_entity_extract(l1);
-    EXPECT_EQ(p1.entity_type, 1u);
-    EXPECT_EQ(p1.entity_instance_num, 1u);
-    EXPECT_EQ(p1.entity_container_id, 0u);
-
-    pldm_entity p2a = pldm_entity_extract(l2a);
-    EXPECT_EQ(p2a.entity_type, 2u);
-    EXPECT_EQ(p2a.entity_instance_num, 1u);
-    EXPECT_EQ(p2a.entity_container_id, 1u);
-    pldm_entity p2b = pldm_entity_extract(l2b);
-    EXPECT_EQ(p2b.entity_type, 2u);
-    EXPECT_EQ(p2b.entity_instance_num, 2u);
-    EXPECT_EQ(p2b.entity_container_id, 1u);
-    pldm_entity p2c = pldm_entity_extract(l2c);
-    EXPECT_EQ(p2c.entity_type, 3u);
-    EXPECT_EQ(p2c.entity_instance_num, 1u);
-    EXPECT_EQ(p2c.entity_container_id, 1u);
-
-    pldm_entity p3a = pldm_entity_extract(l3a);
-    EXPECT_EQ(p3a.entity_type, 4u);
-    EXPECT_EQ(p3a.entity_instance_num, 1u);
-    EXPECT_EQ(p3a.entity_container_id, 2u);
-    pldm_entity p3b = pldm_entity_extract(l3b);
-    EXPECT_EQ(p3b.entity_type, 5u);
-    EXPECT_EQ(p3b.entity_instance_num, 1u);
-    EXPECT_EQ(p3b.entity_container_id, 2u);
-    pldm_entity p3c = pldm_entity_extract(l3c);
-    EXPECT_EQ(p3c.entity_type, 5u);
-    EXPECT_EQ(p3c.entity_instance_num, 2u);
-    EXPECT_EQ(p3c.entity_container_id, 2u);
-
-    pldm_entity p4a = pldm_entity_extract(l4a);
-    EXPECT_EQ(p4a.entity_type, 6u);
-    EXPECT_EQ(p4a.entity_instance_num, 1u);
-    EXPECT_EQ(p4a.entity_container_id, 3u);
-    pldm_entity p4b = pldm_entity_extract(l4b);
-    EXPECT_EQ(p4b.entity_type, 7u);
-    EXPECT_EQ(p4b.entity_instance_num, 1u);
-    EXPECT_EQ(p4b.entity_container_id, 4u);
-
-    pldm_entity_association_tree_destroy(tree);
-}
-
-TEST(EntityAssociationPDR, testSpecialTrees)
-{
-    pldm_entity entities[3]{};
-
-    entities[0].entity_type = 1;
-    entities[1].entity_type = 2;
-    entities[2].entity_type = 1;
-
-    // A
-    auto tree = pldm_entity_association_tree_init();
-    auto node = pldm_entity_association_tree_add(
-        tree, &entities[0], 0xFFFF, nullptr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node, nullptr);
-    size_t num{};
-    pldm_entity* out = nullptr;
-    pldm_entity_association_tree_visit(tree, &out, &num);
-    EXPECT_EQ(num, 1u);
-    EXPECT_EQ(out[0].entity_type, 1u);
-    EXPECT_EQ(out[0].entity_instance_num, 1u);
-    EXPECT_EQ(out[0].entity_container_id, 0u);
-    free(out);
-    pldm_entity_association_tree_destroy(tree);
-
-    // A-A-A
-    tree = pldm_entity_association_tree_init();
-    node = pldm_entity_association_tree_add(tree, &entities[0], 0xFFFF, nullptr,
-                                            PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node, nullptr);
-    node = pldm_entity_association_tree_add(tree, &entities[1], 0xFFFF, nullptr,
-                                            PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node, nullptr);
-    node = pldm_entity_association_tree_add(tree, &entities[2], 0xFFFF, nullptr,
-                                            PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node, nullptr);
-    pldm_entity_association_tree_visit(tree, &out, &num);
-    EXPECT_EQ(num, 3u);
-    EXPECT_EQ(out[0].entity_type, 1u);
-    EXPECT_EQ(out[0].entity_instance_num, 1u);
-    EXPECT_EQ(out[0].entity_container_id, 0u);
-    EXPECT_EQ(out[1].entity_type, 1u);
-    EXPECT_EQ(out[1].entity_instance_num, 2u);
-    EXPECT_EQ(out[1].entity_container_id, 0u);
-    EXPECT_EQ(out[2].entity_type, 2u);
-    EXPECT_EQ(out[2].entity_instance_num, 1u);
-    EXPECT_EQ(out[2].entity_container_id, 0u);
-    free(out);
-    pldm_entity_association_tree_destroy(tree);
-
-    // A
-    // |
-    // A
-    // |
-    // A
-    tree = pldm_entity_association_tree_init();
-    node = pldm_entity_association_tree_add(tree, &entities[0], 0xFFFF, nullptr,
-                                            PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node, nullptr);
-    auto node1 = pldm_entity_association_tree_add(
-        tree, &entities[1], 0xFFFF, node, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node1, nullptr);
-    auto node2 = pldm_entity_association_tree_add(
-        tree, &entities[2], 0xFFFF, node1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node2, nullptr);
-    pldm_entity_association_tree_visit(tree, &out, &num);
-    EXPECT_EQ(num, 3u);
-    EXPECT_EQ(out[0].entity_type, 1u);
-    EXPECT_EQ(out[0].entity_instance_num, 1u);
-    EXPECT_EQ(out[0].entity_container_id, 0u);
-    EXPECT_EQ(out[1].entity_type, 2u);
-    EXPECT_EQ(out[1].entity_instance_num, 1u);
-    EXPECT_EQ(out[1].entity_container_id, 1u);
-    EXPECT_EQ(out[2].entity_type, 1u);
-    EXPECT_EQ(out[2].entity_instance_num, 1u);
-    EXPECT_EQ(out[2].entity_container_id, 2u);
-    free(out);
-    pldm_entity_association_tree_destroy(tree);
-
-    // A-A
-    //   |
-    //   A-A
-    tree = pldm_entity_association_tree_init();
-    node = pldm_entity_association_tree_add(tree, &entities[0], 0xFFFF, nullptr,
-                                            PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node, nullptr);
-    node = pldm_entity_association_tree_add(tree, &entities[0], 0xFFFF, nullptr,
-                                            PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node, nullptr);
-    node1 = pldm_entity_association_tree_add(tree, &entities[1], 0xFFFF, node,
-                                             PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node1, nullptr);
-    node2 = pldm_entity_association_tree_add(tree, &entities[2], 0xFFFF, node,
-                                             PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node2, nullptr);
-    pldm_entity_association_tree_visit(tree, &out, &num);
-    EXPECT_EQ(num, 4u);
-    EXPECT_EQ(out[0].entity_type, 1u);
-    EXPECT_EQ(out[0].entity_instance_num, 1u);
-    EXPECT_EQ(out[0].entity_container_id, 0u);
-    EXPECT_EQ(out[1].entity_type, 1u);
-    EXPECT_EQ(out[1].entity_instance_num, 2u);
-    EXPECT_EQ(out[1].entity_container_id, 0u);
-    EXPECT_EQ(out[2].entity_type, 2u);
-    EXPECT_EQ(out[2].entity_instance_num, 1u);
-    EXPECT_EQ(out[2].entity_container_id, 1u);
-    EXPECT_EQ(out[3].entity_type, 1u);
-    EXPECT_EQ(out[3].entity_instance_num, 1u);
-    EXPECT_EQ(out[3].entity_container_id, 1u);
-    free(out);
-    pldm_entity_association_tree_destroy(tree);
-}
-
-TEST(EntityAssociationPDR, testPDR)
-{
-    // e = entity type, c = container id, i = instance num
-
-    //        INPUT
-    //        1(e=1)--1a(e=2)
-    //        |
-    //        2(e=2)--3(e=2)--4(e=2)--5(e=3)
-    //        |
-    //        6(e=4)--7(e=5)--8(e=5)--9(e=5)
-    //        |       |
-    //        11(e=6) 10(e=7)
-
-    //        Expected OUTPUT
-    //        1(e=1,c=0,i=1)
-    //        |
-    //        2(e=2,c=1,i=1)--3(e=2,c=1,i=2)--4(e=3,c=1,i=1)--5(e=3,c=1,i=2)
-    //        |
-    //        6(e=4,c=2,i=1)--7(e=5,c=2,i=1)--8(e=5,c=2,i=2)--9(e=5,c=2,i=3)
-    //        |               |
-    //        10(e=6,c=3,i=1) 11(e=7,c=4,i=1)
-    pldm_entity entities[11]{};
-
-    entities[0].entity_type = 1;
-    entities[1].entity_type = 2;
-    entities[2].entity_type = 3;
-    entities[3].entity_type = 2;
-    entities[4].entity_type = 3;
-    entities[5].entity_type = 4;
-    entities[6].entity_type = 5;
-    entities[7].entity_type = 5;
-    entities[8].entity_type = 5;
-    entities[9].entity_type = 6;
-    entities[10].entity_type = 7;
-
-    auto tree = pldm_entity_association_tree_init();
-
-    auto l1 = pldm_entity_association_tree_add(
-        tree, &entities[0], 0xFFFF, nullptr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l1, nullptr);
-    auto l1a = pldm_entity_association_tree_add(
-        tree, &entities[1], 0xFFFF, nullptr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l1a, nullptr);
-
-    auto l2a = pldm_entity_association_tree_add(
-        tree, &entities[1], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2a, nullptr);
-    auto l2b = pldm_entity_association_tree_add(tree, &entities[2], 0xFFFF, l1,
-                                                PLDM_ENTITY_ASSOCIAION_LOGICAL);
-    EXPECT_NE(l2b, nullptr);
-    auto l2c = pldm_entity_association_tree_add(
-        tree, &entities[3], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2c, nullptr);
-    auto l2d = pldm_entity_association_tree_add(tree, &entities[4], 0xFFFF, l1,
-                                                PLDM_ENTITY_ASSOCIAION_LOGICAL);
-    EXPECT_NE(l2d, nullptr);
-
-    auto l3a = pldm_entity_association_tree_add(
-        tree, &entities[5], 0xFFFF, l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l3a, nullptr);
-    auto l3b = pldm_entity_association_tree_add(
-        tree, &entities[6], 0xFFFF, l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l3b, nullptr);
-    auto l3c = pldm_entity_association_tree_add(tree, &entities[7], 0xFFFF, l2a,
-                                                PLDM_ENTITY_ASSOCIAION_LOGICAL);
-    EXPECT_NE(l3c, nullptr);
-    auto l3d = pldm_entity_association_tree_add(tree, &entities[8], 0xFFFF, l2a,
-                                                PLDM_ENTITY_ASSOCIAION_LOGICAL);
-    EXPECT_NE(l3d, nullptr);
-
-    auto l4a = pldm_entity_association_tree_add(
-        tree, &entities[9], 0xFFFF, l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l4a, nullptr);
-    auto l4b = pldm_entity_association_tree_add(
-        tree, &entities[10], 0xFFFF, l3b, PLDM_ENTITY_ASSOCIAION_LOGICAL);
-    EXPECT_NE(l4b, nullptr);
-
-    EXPECT_EQ(pldm_entity_get_num_children(l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL),
-              2);
-    EXPECT_EQ(pldm_entity_get_num_children(l1, PLDM_ENTITY_ASSOCIAION_LOGICAL),
-              2);
-    EXPECT_EQ(
-        pldm_entity_get_num_children(l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL), 2);
-    EXPECT_EQ(
-        pldm_entity_get_num_children(l3b, PLDM_ENTITY_ASSOCIAION_PHYSICAL), 0);
-    EXPECT_EQ(pldm_entity_get_num_children(l3b, PLDM_ENTITY_ASSOCIAION_LOGICAL),
-              1);
-
-    auto repo = pldm_pdr_init();
-    pldm_entity_association_pdr_add(tree, repo, false, 1);
-
-    EXPECT_EQ(pldm_pdr_get_record_count(repo), 6u);
-
-    uint32_t currRecHandle{};
-    uint32_t nextRecHandle{};
-    uint8_t* data = nullptr;
-    uint32_t size{};
-    uint32_t commonSize = sizeof(struct pldm_pdr_hdr) + sizeof(uint16_t) +
-                          sizeof(uint8_t) + sizeof(pldm_entity) +
-                          sizeof(uint8_t);
-
-    pldm_pdr_find_record(repo, currRecHandle, &data, &size, &nextRecHandle);
-    EXPECT_EQ(size, commonSize + (pldm_entity_get_num_children(
-                                      l1, PLDM_ENTITY_ASSOCIAION_LOGICAL) *
-                                  sizeof(pldm_entity)));
-    uint8_t* start = data;
-    pldm_pdr_hdr* hdr = reinterpret_cast<pldm_pdr_hdr*>(start);
-    EXPECT_EQ(le32toh(hdr->record_handle), 1u);
-    EXPECT_EQ(hdr->type, PLDM_PDR_ENTITY_ASSOCIATION);
-    EXPECT_EQ(le16toh(hdr->length), size - sizeof(struct pldm_pdr_hdr));
-    start += sizeof(pldm_pdr_hdr);
-    uint16_t* containerId = reinterpret_cast<uint16_t*>(start);
-    EXPECT_EQ(le16toh(*containerId), 1u);
-    start += sizeof(uint16_t);
-    EXPECT_EQ(*start, PLDM_ENTITY_ASSOCIAION_LOGICAL);
-    start += sizeof(uint8_t);
-    pldm_entity* entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 1u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 0u);
-    start += sizeof(pldm_entity);
-    EXPECT_EQ(*start,
-              pldm_entity_get_num_children(l1, PLDM_ENTITY_ASSOCIAION_LOGICAL));
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 3u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 1u);
-    start += sizeof(pldm_entity);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 3u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 2u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 1u);
-    start += sizeof(pldm_entity);
-
-    currRecHandle = nextRecHandle;
-
-    pldm_pdr_find_record(repo, currRecHandle, &data, &size, &nextRecHandle);
-    EXPECT_EQ(size, commonSize + (pldm_entity_get_num_children(
-                                      l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL) *
-                                  sizeof(pldm_entity)));
-    start = data;
-    hdr = reinterpret_cast<pldm_pdr_hdr*>(start);
-    EXPECT_EQ(le32toh(hdr->record_handle), 2u);
-    EXPECT_EQ(hdr->type, PLDM_PDR_ENTITY_ASSOCIATION);
-    EXPECT_EQ(le16toh(hdr->length), size - sizeof(struct pldm_pdr_hdr));
-    start += sizeof(pldm_pdr_hdr);
-    containerId = reinterpret_cast<uint16_t*>(start);
-    EXPECT_EQ(le16toh(*containerId), 1u);
-    start += sizeof(uint16_t);
-    EXPECT_EQ(*start, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 1u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 0u);
-    start += sizeof(pldm_entity);
-    EXPECT_EQ(*start, pldm_entity_get_num_children(
-                          l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL));
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 2u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 1u);
-    start += sizeof(pldm_entity);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 2u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 2u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 1u);
-    start += sizeof(pldm_entity);
-
-    currRecHandle = nextRecHandle;
-
-    pldm_pdr_find_record(repo, currRecHandle, &data, &size, &nextRecHandle);
-    EXPECT_EQ(size, commonSize + (pldm_entity_get_num_children(
-                                      l2a, PLDM_ENTITY_ASSOCIAION_LOGICAL) *
-                                  sizeof(pldm_entity)));
-    start = data;
-    hdr = reinterpret_cast<pldm_pdr_hdr*>(start);
-    EXPECT_EQ(le32toh(hdr->record_handle), 3u);
-    EXPECT_EQ(hdr->type, PLDM_PDR_ENTITY_ASSOCIATION);
-    EXPECT_EQ(le16toh(hdr->length), size - sizeof(struct pldm_pdr_hdr));
-    start += sizeof(pldm_pdr_hdr);
-    containerId = reinterpret_cast<uint16_t*>(start);
-    EXPECT_EQ(le16toh(*containerId), 2u);
-    start += sizeof(uint16_t);
-    EXPECT_EQ(*start, PLDM_ENTITY_ASSOCIAION_LOGICAL);
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 2u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 1u);
-    start += sizeof(pldm_entity);
-    EXPECT_EQ(*start, pldm_entity_get_num_children(
-                          l2a, PLDM_ENTITY_ASSOCIAION_LOGICAL));
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 5);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 2u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 2u);
-    start += sizeof(pldm_entity);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 5u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 3u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 2u);
-    start += sizeof(pldm_entity);
-
-    currRecHandle = nextRecHandle;
-
-    pldm_pdr_find_record(repo, currRecHandle, &data, &size, &nextRecHandle);
-    EXPECT_EQ(size, commonSize + (pldm_entity_get_num_children(
-                                      l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL) *
-                                  sizeof(pldm_entity)));
-    start = data;
-    hdr = reinterpret_cast<pldm_pdr_hdr*>(start);
-    EXPECT_EQ(le32toh(hdr->record_handle), 4u);
-    EXPECT_EQ(hdr->type, PLDM_PDR_ENTITY_ASSOCIATION);
-    EXPECT_EQ(le16toh(hdr->length), size - sizeof(struct pldm_pdr_hdr));
-    start += sizeof(pldm_pdr_hdr);
-    containerId = reinterpret_cast<uint16_t*>(start);
-    EXPECT_EQ(le16toh(*containerId), 2u);
-    start += sizeof(uint16_t);
-    EXPECT_EQ(*start, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 2u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 1u);
-    start += sizeof(pldm_entity);
-    EXPECT_EQ(*start, pldm_entity_get_num_children(
-                          l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL));
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 4u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 2u);
-    start += sizeof(pldm_entity);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 5u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 2u);
-    start += sizeof(pldm_entity);
-
-    currRecHandle = nextRecHandle;
-
-    pldm_pdr_find_record(repo, currRecHandle, &data, &size, &nextRecHandle);
-    EXPECT_EQ(size, commonSize + (pldm_entity_get_num_children(
-                                      l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL) *
-                                  sizeof(pldm_entity)));
-    start = data;
-    hdr = reinterpret_cast<pldm_pdr_hdr*>(start);
-    EXPECT_EQ(le32toh(hdr->record_handle), 5u);
-    EXPECT_EQ(hdr->type, PLDM_PDR_ENTITY_ASSOCIATION);
-    EXPECT_EQ(le16toh(hdr->length), size - sizeof(struct pldm_pdr_hdr));
-    start += sizeof(pldm_pdr_hdr);
-    containerId = reinterpret_cast<uint16_t*>(start);
-    EXPECT_EQ(le16toh(*containerId), 3u);
-    start += sizeof(uint16_t);
-    EXPECT_EQ(*start, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 4u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 2u);
-    start += sizeof(pldm_entity);
-    EXPECT_EQ(*start, pldm_entity_get_num_children(
-                          l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL));
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 6u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 3u);
-    start += sizeof(pldm_entity);
-
-    currRecHandle = nextRecHandle;
-
-    pldm_pdr_find_record(repo, currRecHandle, &data, &size, &nextRecHandle);
-    EXPECT_EQ(size, commonSize + (pldm_entity_get_num_children(
-                                      l3b, PLDM_ENTITY_ASSOCIAION_LOGICAL) *
-                                  sizeof(pldm_entity)));
-    start = data;
-    hdr = reinterpret_cast<pldm_pdr_hdr*>(start);
-    EXPECT_EQ(le32toh(hdr->record_handle), 6u);
-    EXPECT_EQ(hdr->type, PLDM_PDR_ENTITY_ASSOCIATION);
-    EXPECT_EQ(le16toh(hdr->length), size - sizeof(struct pldm_pdr_hdr));
-    start += sizeof(pldm_pdr_hdr);
-    containerId = reinterpret_cast<uint16_t*>(start);
-    EXPECT_EQ(le16toh(*containerId), 4u);
-    start += sizeof(uint16_t);
-    EXPECT_EQ(*start, PLDM_ENTITY_ASSOCIAION_LOGICAL);
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 5u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 2u);
-    start += sizeof(pldm_entity);
-    EXPECT_EQ(*start, pldm_entity_get_num_children(
-                          l3b, PLDM_ENTITY_ASSOCIAION_LOGICAL));
-    start += sizeof(uint8_t);
-    entity = reinterpret_cast<pldm_entity*>(start);
-    EXPECT_EQ(le16toh(entity->entity_type), 7u);
-    EXPECT_EQ(le16toh(entity->entity_instance_num), 1u);
-    EXPECT_EQ(le16toh(entity->entity_container_id), 4u);
-
-    EXPECT_EQ(nextRecHandle, 0u);
-
-    pldm_pdr_destroy(repo);
-    pldm_entity_association_tree_destroy(tree);
-}
-
-TEST(EntityAssociationPDR, testFind)
-{
-    //        1
-    //        |
-    //        2--3--4
-    //        |
-    //        5--6--7
-    //        |  |
-    //        8  9
-
-    pldm_entity entities[9]{};
-
-    entities[0].entity_type = 1;
-    entities[1].entity_type = 2;
-    entities[2].entity_type = 2;
-    entities[3].entity_type = 3;
-    entities[4].entity_type = 4;
-    entities[5].entity_type = 5;
-    entities[6].entity_type = 5;
-    entities[7].entity_type = 6;
-    entities[8].entity_type = 7;
-
-    auto tree = pldm_entity_association_tree_init();
-
-    auto l1 = pldm_entity_association_tree_add(
-        tree, &entities[0], 0xFFFF, nullptr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l1, nullptr);
-    auto l2a = pldm_entity_association_tree_add(
-        tree, &entities[1], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2a, nullptr);
-    auto l2b = pldm_entity_association_tree_add(
-        tree, &entities[2], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2b, nullptr);
-    auto l2c = pldm_entity_association_tree_add(
-        tree, &entities[3], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2c, nullptr);
-    auto l3a = pldm_entity_association_tree_add(
-        tree, &entities[4], 0xFFFF, l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l3a, nullptr);
-    auto l3b = pldm_entity_association_tree_add(
-        tree, &entities[5], 0xFFFF, l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l3b, nullptr);
-    auto l3c = pldm_entity_association_tree_add(
-        tree, &entities[6], 0xFFFF, l2a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l3c, nullptr);
-    auto l4a = pldm_entity_association_tree_add(
-        tree, &entities[7], 0xFFFF, l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l4a, nullptr);
-    auto l4b = pldm_entity_association_tree_add(
-        tree, &entities[8], 0xFFFF, l3b, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l4b, nullptr);
-
-    pldm_entity entity{};
-
-    entity.entity_type = 1;
-    entity.entity_instance_num = 1;
-    auto result = pldm_entity_association_tree_find(tree, &entity);
-    EXPECT_EQ(result, l1);
-    EXPECT_EQ(entity.entity_container_id, 0);
-
-    entity.entity_type = 2;
-    entity.entity_instance_num = 1;
-    result = pldm_entity_association_tree_find(tree, &entity);
-    EXPECT_EQ(result, l2a);
-    EXPECT_EQ(entity.entity_container_id, 1);
-    entity.entity_type = 2;
-    entity.entity_instance_num = 2;
-    result = pldm_entity_association_tree_find(tree, &entity);
-    EXPECT_EQ(result, l2b);
-    EXPECT_EQ(entity.entity_container_id, 1);
-    entity.entity_type = 3;
-    entity.entity_instance_num = 1;
-    result = pldm_entity_association_tree_find(tree, &entity);
-    EXPECT_EQ(result, l2c);
-    EXPECT_EQ(entity.entity_container_id, 1);
-
-    entity.entity_type = 7;
-    entity.entity_instance_num = 1;
-    result = pldm_entity_association_tree_find(tree, &entity);
-    EXPECT_EQ(result, l4b);
-    EXPECT_EQ(entity.entity_container_id, 4);
-
-    pldm_entity_association_tree_destroy(tree);
-}
-
-TEST(EntityAssociationPDR, testCopyTree)
-{
-    pldm_entity entities[4]{};
-    entities[0].entity_type = 1;
-    entities[1].entity_type = 2;
-    entities[2].entity_type = 2;
-    entities[3].entity_type = 3;
-
-    auto orgTree = pldm_entity_association_tree_init();
-    auto newTree = pldm_entity_association_tree_init();
-    auto l1 =
-        pldm_entity_association_tree_add(orgTree, &entities[0], 0xFFFF, nullptr,
-                                         PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l1, nullptr);
-    auto l2a = pldm_entity_association_tree_add(
-        orgTree, &entities[1], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2a, nullptr);
-    auto l2b = pldm_entity_association_tree_add(
-        orgTree, &entities[2], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2b, nullptr);
-    auto l2c = pldm_entity_association_tree_add(
-        orgTree, &entities[3], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2c, nullptr);
-    size_t orgNum{};
-    pldm_entity* orgOut = nullptr;
-    pldm_entity_association_tree_visit(orgTree, &orgOut, &orgNum);
-    EXPECT_EQ(orgNum, 4u);
-
-    pldm_entity_association_tree_copy_root(orgTree, newTree);
-    size_t newNum{};
-    pldm_entity* newOut = nullptr;
-    pldm_entity_association_tree_visit(newTree, &newOut, &newNum);
-    EXPECT_EQ(newNum, orgNum);
-    EXPECT_EQ(newOut[0].entity_type, 1u);
-    EXPECT_EQ(newOut[0].entity_instance_num, 1u);
-    EXPECT_EQ(newOut[0].entity_container_id, 0u);
-    free(orgOut);
-    free(newOut);
-    pldm_entity_association_tree_destroy(orgTree);
-    pldm_entity_association_tree_destroy(newTree);
-}
-
-TEST(EntityAssociationPDR, testExtract)
-{
-    std::vector<uint8_t> pdr{};
-    pdr.resize(sizeof(pldm_pdr_hdr) + sizeof(pldm_pdr_entity_association) +
-               sizeof(pldm_entity) * 4);
-    pldm_pdr_hdr* hdr = reinterpret_cast<pldm_pdr_hdr*>(pdr.data());
-    hdr->type = PLDM_PDR_ENTITY_ASSOCIATION;
-    hdr->length =
-        htole16(sizeof(pldm_pdr_entity_association) + sizeof(pldm_entity) * 4);
-
-    pldm_pdr_entity_association* e =
-        reinterpret_cast<pldm_pdr_entity_association*>(pdr.data() +
-                                                       sizeof(pldm_pdr_hdr));
-    e->container_id = htole16(1);
-    e->num_children = 5;
-    e->container.entity_type = htole16(1);
-    e->container.entity_instance_num = htole16(1);
-    e->container.entity_container_id = htole16(0);
-
-    pldm_entity* entity = e->children;
-    entity->entity_type = htole16(2);
-    entity->entity_instance_num = htole16(1);
-    entity->entity_container_id = htole16(1);
-    ++entity;
-    entity->entity_type = htole16(3);
-    entity->entity_instance_num = htole16(1);
-    entity->entity_container_id = htole16(1);
-    ++entity;
-    entity->entity_type = htole16(4);
-    entity->entity_instance_num = htole16(1);
-    entity->entity_container_id = htole16(1);
-    ++entity;
-    entity->entity_type = htole16(5);
-    entity->entity_instance_num = htole16(1);
-    entity->entity_container_id = htole16(1);
-    ++entity;
-    entity->entity_type = htole16(6);
-    entity->entity_instance_num = htole16(1);
-    entity->entity_container_id = htole16(1);
-
-    size_t num{};
-    pldm_entity* out = nullptr;
-    pldm_entity_association_pdr_extract(pdr.data(), pdr.size(), &num, &out);
-    EXPECT_EQ(num, (unsigned)e->num_children + 1);
-    EXPECT_EQ(out[0].entity_type, 1u);
-    EXPECT_EQ(out[0].entity_instance_num, 1u);
-    EXPECT_EQ(out[0].entity_container_id, 0u);
-    EXPECT_EQ(out[1].entity_type, 2u);
-    EXPECT_EQ(out[1].entity_instance_num, 1u);
-    EXPECT_EQ(out[1].entity_container_id, 1u);
-    EXPECT_EQ(out[2].entity_type, 3u);
-    EXPECT_EQ(out[2].entity_instance_num, 1u);
-    EXPECT_EQ(out[2].entity_container_id, 1u);
-    EXPECT_EQ(out[3].entity_type, 4u);
-    EXPECT_EQ(out[3].entity_instance_num, 1u);
-    EXPECT_EQ(out[3].entity_container_id, 1u);
-    EXPECT_EQ(out[4].entity_type, 5u);
-    EXPECT_EQ(out[4].entity_instance_num, 1u);
-    EXPECT_EQ(out[4].entity_container_id, 1u);
-    EXPECT_EQ(out[5].entity_type, 6u);
-    EXPECT_EQ(out[5].entity_instance_num, 1u);
-    EXPECT_EQ(out[5].entity_container_id, 1u);
-
-    free(out);
-}
-
-TEST(EntityAssociationPDR, testGetChildren)
-{
-    pldm_entity entities[4]{};
-    entities[0].entity_type = 1;
-    entities[1].entity_type = 2;
-    entities[2].entity_type = 2;
-    entities[3].entity_type = 3;
-
-    auto tree = pldm_entity_association_tree_init();
-    auto l1 = pldm_entity_association_tree_add(
-        tree, &entities[0], 0xFFFF, nullptr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l1, nullptr);
-    auto l2a = pldm_entity_association_tree_add(
-        tree, &entities[1], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2a, nullptr);
-    auto l2b = pldm_entity_association_tree_add(
-        tree, &entities[2], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2b, nullptr);
-    auto l2c = pldm_entity_association_tree_add(
-        tree, &entities[3], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(l2c, nullptr);
-
-    pldm_entity et1;
-    et1.entity_type = 2;
-    et1.entity_instance_num = 1;
-    EXPECT_EQ(true, pldm_is_current_parent_child(l1, &et1));
-
-    pldm_entity et2;
-    et2.entity_type = 2;
-    et2.entity_instance_num = 2;
-    EXPECT_EQ(true, pldm_is_current_parent_child(l1, &et2));
-
-    pldm_entity et3;
-    et3.entity_type = 2;
-    et3.entity_instance_num = 3;
-    EXPECT_EQ(false, pldm_is_current_parent_child(l1, &et3));
-
-    pldm_entity_association_tree_destroy(tree);
-}
-
-TEST(EntityAssociationPDR, testEntityInstanceNumber)
-{
-    pldm_entity entities[9]{};
-
-    entities[0].entity_type = 1;
-    entities[1].entity_type = 2;
-    entities[2].entity_type = 2;
-    entities[3].entity_type = 2;
-    entities[4].entity_type = 2;
-    entities[5].entity_type = 2;
-    entities[6].entity_type = 2;
-    entities[7].entity_type = 3;
-    entities[8].entity_type = 3;
-
-    auto tree = pldm_entity_association_tree_init();
-    auto repo = pldm_pdr_init();
-
-    uint16_t terminusHdl{};
-    uint16_t entityType{};
-    uint16_t entityInstanceNum{};
-    uint16_t containerId{};
-
-    auto node = pldm_entity_association_tree_add(
-        tree, &entities[0], 0xFFFF, nullptr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_NE(node, nullptr);
-
-    auto l1 = pldm_entity_association_tree_add(tree, &entities[1], 63, node,
-                                               PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    auto first = pldm_pdr_add_fru_record_set(
-        repo, 1, 1, entities[1].entity_type, entities[1].entity_instance_num,
-        entities[1].entity_container_id, 1);
-    EXPECT_NE(l1, nullptr);
-    EXPECT_EQ(entities[1].entity_instance_num, 63);
-    EXPECT_EQ(first, pldm_pdr_get_record_handle(
-                         repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                   repo, 1, &terminusHdl, &entityType,
-                                   &entityInstanceNum, &containerId)));
-    EXPECT_EQ(entityType, 2);
-    EXPECT_EQ(entityInstanceNum, 63);
-
-    auto l2 = pldm_entity_association_tree_add(tree, &entities[2], 37, node,
-                                               PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    auto second = pldm_pdr_add_fru_record_set(
-        repo, 1, 2, entities[2].entity_type, entities[2].entity_instance_num,
-        entities[2].entity_container_id, 2);
-    EXPECT_NE(l2, nullptr);
-    EXPECT_EQ(entities[2].entity_instance_num, 37);
-    EXPECT_EQ(second, pldm_pdr_get_record_handle(
-                          repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                    repo, 2, &terminusHdl, &entityType,
-                                    &entityInstanceNum, &containerId)));
-    EXPECT_EQ(entityType, 2);
-    EXPECT_EQ(entityInstanceNum, 37);
-
-    auto l3 = pldm_entity_association_tree_add(tree, &entities[3], 44, node,
-                                               PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    auto third = pldm_pdr_add_fru_record_set(
-        repo, 1, 3, entities[3].entity_type, entities[3].entity_instance_num,
-        entities[3].entity_container_id, 3);
-    EXPECT_NE(l3, nullptr);
-    EXPECT_EQ(entities[3].entity_instance_num, 44);
-    EXPECT_EQ(third, pldm_pdr_get_record_handle(
-                         repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                   repo, 3, &terminusHdl, &entityType,
-                                   &entityInstanceNum, &containerId)));
-    EXPECT_EQ(entityType, 2);
-    EXPECT_EQ(entityInstanceNum, 44);
-
-    auto l4 = pldm_entity_association_tree_add(tree, &entities[4], 89, node,
-                                               PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    auto fourth = pldm_pdr_add_fru_record_set(
-        repo, 1, 4, entities[4].entity_type, entities[4].entity_instance_num,
-        entities[4].entity_container_id, 4);
-    EXPECT_NE(l4, nullptr);
-    EXPECT_EQ(entities[4].entity_instance_num, 89);
-    EXPECT_EQ(fourth, pldm_pdr_get_record_handle(
-                          repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                    repo, 4, &terminusHdl, &entityType,
-                                    &entityInstanceNum, &containerId)));
-    EXPECT_EQ(entityType, 2);
-    EXPECT_EQ(entityInstanceNum, 89);
-
-    auto l5 = pldm_entity_association_tree_add(tree, &entities[5], 0xFFFF, node,
-                                               PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    auto fifth = pldm_pdr_add_fru_record_set(
-        repo, 1, 5, entities[5].entity_type, entities[5].entity_instance_num,
-        entities[5].entity_container_id, 5);
-    EXPECT_NE(l5, nullptr);
-    EXPECT_EQ(entities[5].entity_instance_num, 90);
-    EXPECT_EQ(fifth, pldm_pdr_get_record_handle(
-                         repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                   repo, 5, &terminusHdl, &entityType,
-                                   &entityInstanceNum, &containerId)));
-    EXPECT_EQ(entityType, 2);
-    EXPECT_EQ(entityInstanceNum, 90);
-
-    auto l6 = pldm_entity_association_tree_add(tree, &entities[6], 90, node,
-                                               PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    EXPECT_EQ(l6, nullptr);
-
-    auto l7 = pldm_entity_association_tree_add(tree, &entities[7], 100, l1,
-                                               PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    auto seventh = pldm_pdr_add_fru_record_set(
-        repo, 1, 7, entities[7].entity_type, entities[7].entity_instance_num,
-        entities[7].entity_container_id, 7);
-    EXPECT_NE(l7, nullptr);
-    EXPECT_EQ(entities[7].entity_instance_num, 100);
-    EXPECT_EQ(seventh, pldm_pdr_get_record_handle(
-                           repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                     repo, 7, &terminusHdl, &entityType,
-                                     &entityInstanceNum, &containerId)));
-    EXPECT_EQ(entityType, 3);
-    EXPECT_EQ(entityInstanceNum, 100);
-
-    auto l8 = pldm_entity_association_tree_add(tree, &entities[8], 100, l2,
-                                               PLDM_ENTITY_ASSOCIAION_PHYSICAL);
-    auto eighth = pldm_pdr_add_fru_record_set(
-        repo, 1, 8, entities[8].entity_type, entities[8].entity_instance_num,
-        entities[8].entity_container_id, 8);
-    EXPECT_NE(l8, nullptr);
-    EXPECT_EQ(entities[8].entity_instance_num, 100);
-    EXPECT_EQ(eighth, pldm_pdr_get_record_handle(
-                          repo, pldm_pdr_fru_record_set_find_by_rsi(
-                                    repo, 8, &terminusHdl, &entityType,
-                                    &entityInstanceNum, &containerId)));
-    EXPECT_EQ(entityType, 3);
-    EXPECT_EQ(entityInstanceNum, 100);
-
-    pldm_pdr_destroy(repo);
-    pldm_entity_association_tree_destroy(tree);
-}
diff --git a/subprojects/libpldm/tests/libpldm_platform_test.cpp b/subprojects/libpldm/tests/libpldm_platform_test.cpp
deleted file mode 100644
index c785e3f..0000000
--- a/subprojects/libpldm/tests/libpldm_platform_test.cpp
+++ /dev/null
@@ -1,2089 +0,0 @@
-#include <string.h>
-
-#include <array>
-
-#include "libpldm/base.h"
-#include "libpldm/platform.h"
-
-#include <gtest/gtest.h>
-
-constexpr auto hdrSize = sizeof(pldm_msg_hdr);
-
-TEST(SetStateEffecterStates, testEncodeResponse)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_SET_STATE_EFFECTER_STATES_RESP_BYTES>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    uint8_t completionCode = 0;
-
-    auto rc = encode_set_state_effecter_states_resp(0, PLDM_SUCCESS, response);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, response->payload[0]);
-}
-
-TEST(SetStateEffecterStates, testEncodeRequest)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES>
-        requestMsg{};
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    uint16_t effecterId = 0x0A;
-    uint8_t compEffecterCnt = 0x2;
-    std::array<set_effecter_state_field, 8> stateField{};
-    stateField[0] = {PLDM_REQUEST_SET, 2};
-    stateField[1] = {PLDM_REQUEST_SET, 3};
-
-    auto rc = encode_set_state_effecter_states_req(
-        0, effecterId, compEffecterCnt, stateField.data(), request);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(effecterId, request->payload[0]);
-    EXPECT_EQ(compEffecterCnt, request->payload[sizeof(effecterId)]);
-    EXPECT_EQ(stateField[0].set_request,
-              request->payload[sizeof(effecterId) + sizeof(compEffecterCnt)]);
-    EXPECT_EQ(stateField[0].effecter_state,
-              request->payload[sizeof(effecterId) + sizeof(compEffecterCnt) +
-                               sizeof(stateField[0].set_request)]);
-    EXPECT_EQ(stateField[1].set_request,
-              request->payload[sizeof(effecterId) + sizeof(compEffecterCnt) +
-                               sizeof(stateField[0])]);
-    EXPECT_EQ(stateField[1].effecter_state,
-              request->payload[sizeof(effecterId) + sizeof(compEffecterCnt) +
-                               sizeof(stateField[0]) +
-                               sizeof(stateField[1].set_request)]);
-}
-
-TEST(SetStateEffecterStates, testGoodDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_SET_STATE_EFFECTER_STATES_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t retcompletion_code = 0;
-
-    responseMsg[hdrSize] = PLDM_SUCCESS;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_set_state_effecter_states_resp(
-        response, responseMsg.size() - hdrSize, &retcompletion_code);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(PLDM_SUCCESS, retcompletion_code);
-}
-
-TEST(SetStateEffecterStates, testGoodDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t effecterId = 0x32;
-    uint16_t effecterIdLE = htole16(effecterId);
-    uint8_t compEffecterCnt = 0x2;
-
-    std::array<set_effecter_state_field, 8> stateField{};
-    stateField[0] = {PLDM_REQUEST_SET, 3};
-    stateField[1] = {PLDM_REQUEST_SET, 4};
-
-    uint16_t retEffecterId = 0;
-    uint8_t retCompEffecterCnt = 0;
-
-    std::array<set_effecter_state_field, 8> retStateField{};
-
-    memcpy(requestMsg.data() + hdrSize, &effecterIdLE, sizeof(effecterIdLE));
-    memcpy(requestMsg.data() + sizeof(effecterIdLE) + hdrSize, &compEffecterCnt,
-           sizeof(compEffecterCnt));
-    memcpy(requestMsg.data() + sizeof(effecterIdLE) + sizeof(compEffecterCnt) +
-               hdrSize,
-           &stateField, sizeof(stateField));
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = decode_set_state_effecter_states_req(
-        request, requestMsg.size() - hdrSize, &retEffecterId,
-        &retCompEffecterCnt, retStateField.data());
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(effecterId, retEffecterId);
-    EXPECT_EQ(retCompEffecterCnt, compEffecterCnt);
-    EXPECT_EQ(retStateField[0].set_request, stateField[0].set_request);
-    EXPECT_EQ(retStateField[0].effecter_state, stateField[0].effecter_state);
-    EXPECT_EQ(retStateField[1].set_request, stateField[1].set_request);
-    EXPECT_EQ(retStateField[1].effecter_state, stateField[1].effecter_state);
-}
-
-TEST(SetStateEffecterStates, testBadDecodeRequest)
-{
-    const struct pldm_msg* msg = NULL;
-
-    auto rc = decode_set_state_effecter_states_req(msg, sizeof(*msg), NULL,
-                                                   NULL, NULL);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(SetStateEffecterStates, testBadDecodeResponse)
-{
-    std::array<uint8_t, PLDM_SET_STATE_EFFECTER_STATES_RESP_BYTES>
-        responseMsg{};
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_set_state_effecter_states_resp(response,
-                                                    responseMsg.size(), NULL);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetPDR, testGoodEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    uint32_t nextRecordHndl = 0x12;
-    uint32_t nextDataTransferHndl = 0x13;
-    uint8_t transferFlag = PLDM_END;
-    uint16_t respCnt = 0x5;
-    std::vector<uint8_t> recordData{1, 2, 3, 4, 5};
-    uint8_t transferCRC = 6;
-
-    // + size of record data and transfer CRC
-    std::vector<uint8_t> responseMsg(hdrSize + PLDM_GET_PDR_MIN_RESP_BYTES +
-                                     recordData.size() + 1);
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_get_pdr_resp(0, PLDM_SUCCESS, nextRecordHndl,
-                                  nextDataTransferHndl, transferFlag, respCnt,
-                                  recordData.data(), transferCRC, response);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    struct pldm_get_pdr_resp* resp =
-        reinterpret_cast<struct pldm_get_pdr_resp*>(response->payload);
-
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(nextRecordHndl, le32toh(resp->next_record_handle));
-    EXPECT_EQ(nextDataTransferHndl, le32toh(resp->next_data_transfer_handle));
-    EXPECT_EQ(transferFlag, resp->transfer_flag);
-    EXPECT_EQ(respCnt, le16toh(resp->response_count));
-    EXPECT_EQ(0,
-              memcmp(recordData.data(), resp->record_data, recordData.size()));
-    EXPECT_EQ(*(response->payload + sizeof(pldm_get_pdr_resp) - 1 +
-                recordData.size()),
-              transferCRC);
-
-    transferFlag = PLDM_START_AND_END; // No CRC in this case
-    responseMsg.resize(responseMsg.size() - sizeof(transferCRC));
-    rc = encode_get_pdr_resp(0, PLDM_SUCCESS, nextRecordHndl,
-                             nextDataTransferHndl, transferFlag, respCnt,
-                             recordData.data(), transferCRC, response);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-}
-
-TEST(GetPDR, testBadEncodeResponse)
-{
-    uint32_t nextRecordHndl = 0x12;
-    uint32_t nextDataTransferHndl = 0x13;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    uint16_t respCnt = 0x5;
-    std::vector<uint8_t> recordData{1, 2, 3, 4, 5};
-    uint8_t transferCRC = 0;
-
-    auto rc = encode_get_pdr_resp(0, PLDM_SUCCESS, nextRecordHndl,
-                                  nextDataTransferHndl, transferFlag, respCnt,
-                                  recordData.data(), transferCRC, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetPDR, testGoodDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_PDR_REQ_BYTES> requestMsg{};
-
-    uint32_t recordHndl = 0x32;
-    uint32_t dataTransferHndl = 0x11;
-    uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
-    uint16_t requestCnt = 0x5;
-    uint16_t recordChangeNum = 0x01;
-
-    uint32_t retRecordHndl = 0;
-    uint32_t retDataTransferHndl = 0;
-    uint8_t retTransferOpFlag = 0;
-    uint16_t retRequestCnt = 0;
-    uint16_t retRecordChangeNum = 0;
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_get_pdr_req* request =
-        reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
-
-    request->record_handle = htole32(recordHndl);
-    request->data_transfer_handle = htole32(dataTransferHndl);
-    request->transfer_op_flag = transferOpFlag;
-    request->request_count = htole16(requestCnt);
-    request->record_change_number = htole16(recordChangeNum);
-
-    auto rc = decode_get_pdr_req(
-        req, requestMsg.size() - hdrSize, &retRecordHndl, &retDataTransferHndl,
-        &retTransferOpFlag, &retRequestCnt, &retRecordChangeNum);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retRecordHndl, recordHndl);
-    EXPECT_EQ(retDataTransferHndl, dataTransferHndl);
-    EXPECT_EQ(retTransferOpFlag, transferOpFlag);
-    EXPECT_EQ(retRequestCnt, requestCnt);
-    EXPECT_EQ(retRecordChangeNum, recordChangeNum);
-}
-
-TEST(GetPDR, testBadDecodeRequest)
-{
-    std::array<uint8_t, PLDM_GET_PDR_REQ_BYTES> requestMsg{};
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = decode_get_pdr_req(req, requestMsg.size(), NULL, NULL, NULL, NULL,
-                                 NULL);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetPDR, testGoodEncodeRequest)
-{
-    uint32_t record_hndl = 0;
-    uint32_t data_transfer_hndl = 0;
-    uint8_t transfer_op_flag = PLDM_GET_FIRSTPART;
-    uint16_t request_cnt = 20;
-    uint16_t record_chg_num = 0;
-
-    std::vector<uint8_t> requestMsg(hdrSize + PLDM_GET_PDR_REQ_BYTES);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_get_pdr_req(0, record_hndl, data_transfer_hndl,
-                                 transfer_op_flag, request_cnt, record_chg_num,
-                                 request, PLDM_GET_PDR_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    struct pldm_get_pdr_req* req =
-        reinterpret_cast<struct pldm_get_pdr_req*>(request->payload);
-    EXPECT_EQ(record_hndl, le32toh(req->record_handle));
-    EXPECT_EQ(data_transfer_hndl, le32toh(req->data_transfer_handle));
-    EXPECT_EQ(transfer_op_flag, req->transfer_op_flag);
-    EXPECT_EQ(request_cnt, le16toh(req->request_count));
-    EXPECT_EQ(record_chg_num, le16toh(req->record_change_number));
-}
-
-TEST(GetPDR, testBadEncodeRequest)
-{
-    uint32_t record_hndl = 0;
-    uint32_t data_transfer_hndl = 0;
-    uint8_t transfer_op_flag = PLDM_GET_FIRSTPART;
-    uint16_t request_cnt = 32;
-    uint16_t record_chg_num = 0;
-
-    std::vector<uint8_t> requestMsg(hdrSize + PLDM_GET_PDR_REQ_BYTES);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_get_pdr_req(0, record_hndl, data_transfer_hndl,
-                                 transfer_op_flag, request_cnt, record_chg_num,
-                                 nullptr, PLDM_GET_PDR_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_get_pdr_req(0, record_hndl, data_transfer_hndl,
-                            transfer_op_flag, request_cnt, record_chg_num,
-                            request, PLDM_GET_PDR_REQ_BYTES + 1);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetPDR, testGoodDecodeResponse)
-{
-    const char* recordData = "123456789";
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t nextRecordHndl = 0;
-    uint32_t nextDataTransferHndl = 0;
-    uint8_t transferFlag = PLDM_END;
-    constexpr uint16_t respCnt = 9;
-    uint8_t transferCRC = 96;
-    size_t recordDataLength = 32;
-    std::array<uint8_t, hdrSize + PLDM_GET_PDR_MIN_RESP_BYTES + respCnt +
-                            sizeof(transferCRC)>
-        responseMsg{};
-
-    uint8_t retCompletionCode = 0;
-    uint8_t retRecordData[32] = {0};
-    uint32_t retNextRecordHndl = 0;
-    uint32_t retNextDataTransferHndl = 0;
-    uint8_t retTransferFlag = 0;
-    uint16_t retRespCnt = 0;
-    uint8_t retTransferCRC = 0;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_get_pdr_resp* resp =
-        reinterpret_cast<struct pldm_get_pdr_resp*>(response->payload);
-    resp->completion_code = completionCode;
-    resp->next_record_handle = htole32(nextRecordHndl);
-    resp->next_data_transfer_handle = htole32(nextDataTransferHndl);
-    resp->transfer_flag = transferFlag;
-    resp->response_count = htole16(respCnt);
-    memcpy(resp->record_data, recordData, respCnt);
-    response->payload[PLDM_GET_PDR_MIN_RESP_BYTES + respCnt] = transferCRC;
-
-    auto rc = decode_get_pdr_resp(
-        response, responseMsg.size() - hdrSize, &retCompletionCode,
-        &retNextRecordHndl, &retNextDataTransferHndl, &retTransferFlag,
-        &retRespCnt, retRecordData, recordDataLength, &retTransferCRC);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retCompletionCode, completionCode);
-    EXPECT_EQ(retNextRecordHndl, nextRecordHndl);
-    EXPECT_EQ(retNextDataTransferHndl, nextDataTransferHndl);
-    EXPECT_EQ(retTransferFlag, transferFlag);
-    EXPECT_EQ(retRespCnt, respCnt);
-    EXPECT_EQ(retTransferCRC, transferCRC);
-    EXPECT_EQ(0, memcmp(recordData, resp->record_data, respCnt));
-}
-
-TEST(GetPDR, testBadDecodeResponse)
-{
-    const char* recordData = "123456789";
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t nextRecordHndl = 0;
-    uint32_t nextDataTransferHndl = 0;
-    uint8_t transferFlag = PLDM_END;
-    constexpr uint16_t respCnt = 9;
-    uint8_t transferCRC = 96;
-    size_t recordDataLength = 32;
-    std::array<uint8_t, hdrSize + PLDM_GET_PDR_MIN_RESP_BYTES + respCnt +
-                            sizeof(transferCRC)>
-        responseMsg{};
-
-    uint8_t retCompletionCode = 0;
-    uint8_t retRecordData[32] = {0};
-    uint32_t retNextRecordHndl = 0;
-    uint32_t retNextDataTransferHndl = 0;
-    uint8_t retTransferFlag = 0;
-    uint16_t retRespCnt = 0;
-    uint8_t retTransferCRC = 0;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_get_pdr_resp* resp =
-        reinterpret_cast<struct pldm_get_pdr_resp*>(response->payload);
-    resp->completion_code = completionCode;
-    resp->next_record_handle = htole32(nextRecordHndl);
-    resp->next_data_transfer_handle = htole32(nextDataTransferHndl);
-    resp->transfer_flag = transferFlag;
-    resp->response_count = htole16(respCnt);
-    memcpy(resp->record_data, recordData, respCnt);
-    response->payload[PLDM_GET_PDR_MIN_RESP_BYTES + respCnt] = transferCRC;
-
-    auto rc = decode_get_pdr_resp(response, responseMsg.size() - hdrSize, NULL,
-                                  NULL, NULL, NULL, NULL, NULL, 0, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_pdr_resp(
-        response, responseMsg.size() - hdrSize - 1, &retCompletionCode,
-        &retNextRecordHndl, &retNextDataTransferHndl, &retTransferFlag,
-        &retRespCnt, retRecordData, recordDataLength, &retTransferCRC);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetPDRRepositoryInfo, testGoodEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    uint8_t repositoryState = PLDM_AVAILABLE;
-    uint8_t updateTime[PLDM_TIMESTAMP104_SIZE] = {0};
-    uint8_t oemUpdateTime[PLDM_TIMESTAMP104_SIZE] = {0};
-    uint32_t recordCount = 100;
-    uint32_t repositorySize = 100;
-    uint32_t largestRecordSize = UINT32_MAX;
-    uint8_t dataTransferHandleTimeout = PLDM_NO_TIMEOUT;
-
-    std::vector<uint8_t> responseMsg(hdrSize +
-                                     PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES);
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_get_pdr_repository_info_resp(
-        0, PLDM_SUCCESS, repositoryState, updateTime, oemUpdateTime,
-        recordCount, repositorySize, largestRecordSize,
-        dataTransferHandleTimeout, response);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    struct pldm_pdr_repository_info_resp* resp =
-        reinterpret_cast<struct pldm_pdr_repository_info_resp*>(
-            response->payload);
-
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(repositoryState, resp->repository_state);
-    EXPECT_EQ(0, memcmp(updateTime, resp->update_time, PLDM_TIMESTAMP104_SIZE));
-    EXPECT_EQ(0, memcmp(oemUpdateTime, resp->oem_update_time,
-                        PLDM_TIMESTAMP104_SIZE));
-    EXPECT_EQ(recordCount, le32toh(resp->record_count));
-    EXPECT_EQ(repositorySize, le32toh(resp->repository_size));
-    EXPECT_EQ(largestRecordSize, le32toh(resp->largest_record_size));
-    EXPECT_EQ(dataTransferHandleTimeout, resp->data_transfer_handle_timeout);
-}
-
-TEST(GetPDRRepositoryInfo, testBadEncodeResponse)
-{
-    uint8_t repositoryState = PLDM_AVAILABLE;
-    uint8_t updateTime[PLDM_TIMESTAMP104_SIZE] = {0};
-    uint8_t oemUpdateTime[PLDM_TIMESTAMP104_SIZE] = {0};
-    uint32_t recordCount = 100;
-    uint32_t repositorySize = 100;
-    uint32_t largestRecordSize = UINT32_MAX;
-    uint8_t dataTransferHandleTimeout = PLDM_NO_TIMEOUT;
-
-    auto rc = encode_get_pdr_repository_info_resp(
-        0, PLDM_SUCCESS, repositoryState, updateTime, oemUpdateTime,
-        recordCount, repositorySize, largestRecordSize,
-        dataTransferHandleTimeout, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(SetNumericEffecterValue, testGoodDecodeRequest)
-{
-    std::array<uint8_t,
-               hdrSize + PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES + 3>
-        requestMsg{};
-
-    uint16_t effecter_id = 32768;
-    uint8_t effecter_data_size = PLDM_EFFECTER_DATA_SIZE_UINT32;
-    uint32_t effecter_value = 123456789;
-
-    uint16_t reteffecter_id;
-    uint8_t reteffecter_data_size;
-    uint8_t reteffecter_value[4];
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_set_numeric_effecter_value_req* request =
-        reinterpret_cast<struct pldm_set_numeric_effecter_value_req*>(
-            req->payload);
-
-    request->effecter_id = htole16(effecter_id);
-    request->effecter_data_size = effecter_data_size;
-    uint32_t effecter_value_le = htole32(effecter_value);
-    memcpy(request->effecter_value, &effecter_value_le,
-           sizeof(effecter_value_le));
-
-    auto rc = decode_set_numeric_effecter_value_req(
-        req, requestMsg.size() - hdrSize, &reteffecter_id,
-        &reteffecter_data_size, reteffecter_value);
-
-    uint32_t value = *(reinterpret_cast<uint32_t*>(reteffecter_value));
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(reteffecter_id, effecter_id);
-    EXPECT_EQ(reteffecter_data_size, effecter_data_size);
-    EXPECT_EQ(value, effecter_value);
-}
-
-TEST(SetNumericEffecterValue, testBadDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES>
-        requestMsg{};
-
-    auto rc = decode_set_numeric_effecter_value_req(
-        NULL, requestMsg.size() - hdrSize, NULL, NULL, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint16_t effecter_id = 0x10;
-    uint8_t effecter_data_size = PLDM_EFFECTER_DATA_SIZE_UINT8;
-    uint8_t effecter_value = 1;
-
-    uint16_t reteffecter_id;
-    uint8_t reteffecter_data_size;
-    uint8_t reteffecter_value[4];
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_set_numeric_effecter_value_req* request =
-        reinterpret_cast<struct pldm_set_numeric_effecter_value_req*>(
-            req->payload);
-
-    request->effecter_id = effecter_id;
-    request->effecter_data_size = effecter_data_size;
-    memcpy(request->effecter_value, &effecter_value, sizeof(effecter_value));
-
-    rc = decode_set_numeric_effecter_value_req(
-        req, requestMsg.size() - hdrSize - 1, &reteffecter_id,
-        &reteffecter_data_size, reinterpret_cast<uint8_t*>(&reteffecter_value));
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetNumericEffecterValue, testGoodEncodeRequest)
-{
-    uint16_t effecter_id = 0;
-    uint8_t effecter_data_size = PLDM_EFFECTER_DATA_SIZE_UINT16;
-    uint16_t effecter_value = 65534;
-
-    std::vector<uint8_t> requestMsg(
-        hdrSize + PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES + 1);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_set_numeric_effecter_value_req(
-        0, effecter_id, effecter_data_size,
-        reinterpret_cast<uint8_t*>(&effecter_value), request,
-        PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES + 1);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_set_numeric_effecter_value_req* req =
-        reinterpret_cast<struct pldm_set_numeric_effecter_value_req*>(
-            request->payload);
-    EXPECT_EQ(effecter_id, req->effecter_id);
-    EXPECT_EQ(effecter_data_size, req->effecter_data_size);
-    uint16_t* val = (uint16_t*)req->effecter_value;
-    *val = le16toh(*val);
-    EXPECT_EQ(effecter_value, *val);
-}
-
-TEST(SetNumericEffecterValue, testBadEncodeRequest)
-{
-    std::vector<uint8_t> requestMsg(
-        hdrSize + PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_set_numeric_effecter_value_req(
-        0, 0, 0, NULL, NULL, PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint16_t effecter_value;
-    rc = encode_set_numeric_effecter_value_req(
-        0, 0, 6, reinterpret_cast<uint8_t*>(&effecter_value), request,
-        PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(SetNumericEffecterValue, testGoodDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t completion_code = 0xA0;
-
-    uint8_t retcompletion_code;
-
-    memcpy(responseMsg.data() + hdrSize, &completion_code,
-           sizeof(completion_code));
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_set_numeric_effecter_value_resp(
-        response, responseMsg.size() - hdrSize, &retcompletion_code);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completion_code, retcompletion_code);
-}
-
-TEST(SetNumericEffecterValue, testBadDecodeResponse)
-{
-    std::array<uint8_t, PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES>
-        responseMsg{};
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_set_numeric_effecter_value_resp(response,
-                                                     responseMsg.size(), NULL);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(SetNumericEffecterValue, testGoodEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) +
-                            PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    uint8_t completionCode = 0;
-
-    auto rc = encode_set_numeric_effecter_value_resp(
-        0, PLDM_SUCCESS, response, PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, response->payload[0]);
-}
-
-TEST(SetNumericEffecterValue, testBadEncodeResponse)
-{
-    auto rc = encode_set_numeric_effecter_value_resp(
-        0, PLDM_SUCCESS, NULL, PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetStateSensorReadings, testGoodEncodeResponse)
-{
-    std::array<uint8_t, hdrSize +
-                            PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES +
-                            sizeof(get_sensor_state_field) * 2>
-        responseMsg{};
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    uint8_t completionCode = 0;
-    uint8_t comp_sensorCnt = 0x2;
-
-    std::array<get_sensor_state_field, 2> stateField{};
-    stateField[0] = {PLDM_SENSOR_ENABLED, PLDM_SENSOR_NORMAL,
-                     PLDM_SENSOR_WARNING, PLDM_SENSOR_UNKNOWN};
-    stateField[1] = {PLDM_SENSOR_FAILED, PLDM_SENSOR_UPPERFATAL,
-                     PLDM_SENSOR_UPPERCRITICAL, PLDM_SENSOR_FATAL};
-
-    auto rc = encode_get_state_sensor_readings_resp(
-        0, PLDM_SUCCESS, comp_sensorCnt, stateField.data(), response);
-
-    struct pldm_get_state_sensor_readings_resp* resp =
-        reinterpret_cast<struct pldm_get_state_sensor_readings_resp*>(
-            response->payload);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(comp_sensorCnt, resp->comp_sensor_count);
-    EXPECT_EQ(stateField[0].sensor_op_state, resp->field->sensor_op_state);
-    EXPECT_EQ(stateField[0].present_state, resp->field->present_state);
-    EXPECT_EQ(stateField[0].previous_state, resp->field->previous_state);
-    EXPECT_EQ(stateField[0].event_state, resp->field->event_state);
-    EXPECT_EQ(stateField[1].sensor_op_state, resp->field[1].sensor_op_state);
-    EXPECT_EQ(stateField[1].present_state, resp->field[1].present_state);
-    EXPECT_EQ(stateField[1].previous_state, resp->field[1].previous_state);
-    EXPECT_EQ(stateField[1].event_state, resp->field[1].event_state);
-}
-
-TEST(GetStateSensorReadings, testBadEncodeResponse)
-{
-    auto rc = encode_get_state_sensor_readings_resp(0, PLDM_SUCCESS, 0, nullptr,
-                                                    nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetStateSensorReadings, testGoodDecodeResponse)
-{
-    std::array<uint8_t, hdrSize +
-                            PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES +
-                            sizeof(get_sensor_state_field) * 2>
-        responseMsg{};
-
-    uint8_t completionCode = 0;
-    uint8_t comp_sensorCnt = 2;
-
-    std::array<get_sensor_state_field, 2> stateField{};
-    stateField[0] = {PLDM_SENSOR_DISABLED, PLDM_SENSOR_UNKNOWN,
-                     PLDM_SENSOR_UNKNOWN, PLDM_SENSOR_UNKNOWN};
-    stateField[1] = {PLDM_SENSOR_ENABLED, PLDM_SENSOR_LOWERFATAL,
-                     PLDM_SENSOR_LOWERCRITICAL, PLDM_SENSOR_WARNING};
-
-    uint8_t retcompletion_code = 0;
-    uint8_t retcomp_sensorCnt = 0;
-    std::array<get_sensor_state_field, 2> retstateField{};
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_get_state_sensor_readings_resp* resp =
-        reinterpret_cast<struct pldm_get_state_sensor_readings_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->comp_sensor_count = comp_sensorCnt;
-    memcpy(resp->field, &stateField,
-           (sizeof(get_sensor_state_field) * comp_sensorCnt));
-
-    auto rc = decode_get_state_sensor_readings_resp(
-        response, responseMsg.size() - hdrSize, &retcompletion_code,
-        &retcomp_sensorCnt, retstateField.data());
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, retcompletion_code);
-    EXPECT_EQ(comp_sensorCnt, retcomp_sensorCnt);
-    EXPECT_EQ(stateField[0].sensor_op_state, retstateField[0].sensor_op_state);
-    EXPECT_EQ(stateField[0].present_state, retstateField[0].present_state);
-    EXPECT_EQ(stateField[0].previous_state, retstateField[0].previous_state);
-    EXPECT_EQ(stateField[0].event_state, retstateField[0].event_state);
-    EXPECT_EQ(stateField[1].sensor_op_state, retstateField[1].sensor_op_state);
-    EXPECT_EQ(stateField[1].present_state, retstateField[1].present_state);
-    EXPECT_EQ(stateField[1].previous_state, retstateField[1].previous_state);
-    EXPECT_EQ(stateField[1].event_state, retstateField[1].event_state);
-}
-
-TEST(GetStateSensorReadings, testBadDecodeResponse)
-{
-    std::array<uint8_t, hdrSize +
-                            PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES +
-                            sizeof(get_sensor_state_field) * 2>
-        responseMsg{};
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_get_state_sensor_readings_resp(
-        response, responseMsg.size() - hdrSize, nullptr, nullptr, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint8_t completionCode = 0;
-    uint8_t comp_sensorCnt = 1;
-
-    std::array<get_sensor_state_field, 1> stateField{};
-    stateField[0] = {PLDM_SENSOR_ENABLED, PLDM_SENSOR_UPPERFATAL,
-                     PLDM_SENSOR_UPPERCRITICAL, PLDM_SENSOR_WARNING};
-
-    uint8_t retcompletion_code = 0;
-    uint8_t retcomp_sensorCnt = 0;
-    std::array<get_sensor_state_field, 1> retstateField{};
-
-    struct pldm_get_state_sensor_readings_resp* resp =
-        reinterpret_cast<struct pldm_get_state_sensor_readings_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->comp_sensor_count = comp_sensorCnt;
-    memcpy(resp->field, &stateField,
-           (sizeof(get_sensor_state_field) * comp_sensorCnt));
-
-    rc = decode_get_state_sensor_readings_resp(
-        response, responseMsg.size() - hdrSize + 1, &retcompletion_code,
-        &retcomp_sensorCnt, retstateField.data());
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetStateSensorReadings, testGoodEncodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t sensorId = 0xAB;
-    bitfield8_t sensorRearm;
-    sensorRearm.byte = 0x03;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_get_state_sensor_readings_req(0, sensorId, sensorRearm, 0,
-                                                   request);
-
-    struct pldm_get_state_sensor_readings_req* req =
-        reinterpret_cast<struct pldm_get_state_sensor_readings_req*>(
-            request->payload);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(sensorId, le16toh(req->sensor_id));
-    EXPECT_EQ(sensorRearm.byte, req->sensor_rearm.byte);
-}
-
-TEST(GetStateSensorReadings, testBadEncodeRequest)
-{
-    bitfield8_t sensorRearm;
-    sensorRearm.byte = 0x0;
-
-    auto rc =
-        encode_get_state_sensor_readings_req(0, 0, sensorRearm, 0, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetStateSensorReadings, testGoodDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t sensorId = 0xCD;
-    bitfield8_t sensorRearm;
-    sensorRearm.byte = 0x10;
-
-    uint16_t retsensorId;
-    bitfield8_t retsensorRearm;
-    uint8_t retreserved;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    struct pldm_get_state_sensor_readings_req* req =
-        reinterpret_cast<struct pldm_get_state_sensor_readings_req*>(
-            request->payload);
-
-    req->sensor_id = htole16(sensorId);
-    req->sensor_rearm.byte = sensorRearm.byte;
-
-    auto rc = decode_get_state_sensor_readings_req(
-        request, requestMsg.size() - hdrSize, &retsensorId, &retsensorRearm,
-        &retreserved);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(sensorId, retsensorId);
-    EXPECT_EQ(sensorRearm.byte, retsensorRearm.byte);
-    EXPECT_EQ(0, retreserved);
-}
-
-TEST(GetStateSensorReadings, testBadDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES>
-        requestMsg{};
-
-    auto rc = decode_get_state_sensor_readings_req(
-        nullptr, requestMsg.size() - hdrSize, nullptr, nullptr, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    uint16_t sensorId = 0x11;
-    bitfield8_t sensorRearm;
-    sensorRearm.byte = 0x04;
-
-    uint16_t retsensorId;
-    bitfield8_t retsensorRearm;
-    uint8_t retreserved;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    struct pldm_get_state_sensor_readings_req* req =
-        reinterpret_cast<struct pldm_get_state_sensor_readings_req*>(
-            request->payload);
-
-    req->sensor_id = htole16(sensorId);
-    req->sensor_rearm.byte = sensorRearm.byte;
-
-    rc = decode_get_state_sensor_readings_req(
-        request, requestMsg.size() - hdrSize - 1, &retsensorId, &retsensorRearm,
-        &retreserved);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(PlatformEventMessage, testGoodStateSensorDecodeRequest)
-{
-    std::array<uint8_t,
-               hdrSize + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
-                   PLDM_PLATFORM_EVENT_MESSAGE_STATE_SENSOR_STATE_REQ_BYTES>
-        requestMsg{};
-
-    uint8_t retFormatVersion = 0;
-    uint8_t retTid = 0;
-    uint8_t retEventClass = 0;
-    size_t retEventDataOffset = 0;
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_platform_event_message_req* request =
-        reinterpret_cast<struct pldm_platform_event_message_req*>(req->payload);
-
-    uint8_t formatVersion = 0x01;
-    uint8_t tid = 0x02;
-    // Sensor Event
-    uint8_t eventClass = 0x00;
-
-    request->format_version = formatVersion;
-    request->tid = tid;
-    request->event_class = eventClass;
-    size_t eventDataOffset =
-        sizeof(formatVersion) + sizeof(tid) + sizeof(eventClass);
-
-    auto rc = decode_platform_event_message_req(
-        req, requestMsg.size() - hdrSize, &retFormatVersion, &retTid,
-        &retEventClass, &retEventDataOffset);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retFormatVersion, formatVersion);
-    EXPECT_EQ(retTid, tid);
-    EXPECT_EQ(retEventClass, eventClass);
-    EXPECT_EQ(retEventDataOffset, eventDataOffset);
-}
-
-TEST(PlatformEventMessage, testBadDecodeRequest)
-{
-    const struct pldm_msg* msg = NULL;
-    std::array<uint8_t,
-               hdrSize + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
-                   PLDM_PLATFORM_EVENT_MESSAGE_STATE_SENSOR_STATE_REQ_BYTES - 1>
-        requestMsg{};
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    uint8_t retFormatVersion;
-    uint8_t retTid = 0;
-    uint8_t retEventClass = 0;
-    size_t retEventDataOffset;
-
-    auto rc = decode_platform_event_message_req(msg, sizeof(*msg), NULL, NULL,
-                                                NULL, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_platform_event_message_req(
-        req,
-        requestMsg.size() - hdrSize -
-            PLDM_PLATFORM_EVENT_MESSAGE_STATE_SENSOR_STATE_REQ_BYTES,
-        &retFormatVersion, &retTid, &retEventClass, &retEventDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(PlatformEventMessage, testGoodEncodeResponse)
-{
-    std::array<uint8_t,
-               hdrSize + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
-                   PLDM_PLATFORM_EVENT_MESSAGE_STATE_SENSOR_STATE_REQ_BYTES - 1>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    uint8_t completionCode = 0;
-    uint8_t instanceId = 0x01;
-    uint8_t platformEventStatus = 0x01;
-
-    auto rc = encode_platform_event_message_resp(instanceId, PLDM_SUCCESS,
-                                                 platformEventStatus, response);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, response->payload[0]);
-    EXPECT_EQ(platformEventStatus, response->payload[1]);
-}
-
-TEST(PlatformEventMessage, testBadEncodeResponse)
-{
-    auto rc = encode_platform_event_message_resp(0, PLDM_SUCCESS, 1, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(PlatformEventMessage, testGoodEncodeRequest)
-{
-    uint8_t formatVersion = 0x01;
-    uint8_t Tid = 0x03;
-    uint8_t eventClass = 0x00;
-    uint8_t eventData = 34;
-
-    std::array<uint8_t, hdrSize + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
-                            sizeof(eventData)>
-        requestMsg{};
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_platform_event_message_req(
-        0, formatVersion, Tid, eventClass,
-        reinterpret_cast<uint8_t*>(&eventData), sizeof(eventData), request,
-        sizeof(eventData) + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES);
-
-    struct pldm_platform_event_message_req* req =
-        reinterpret_cast<struct pldm_platform_event_message_req*>(
-            request->payload);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(formatVersion, req->format_version);
-    EXPECT_EQ(Tid, req->tid);
-    EXPECT_EQ(eventClass, req->event_class);
-    EXPECT_EQ(0, memcmp(&eventData, req->event_data, sizeof(eventData)));
-}
-
-TEST(PlatformEventMessage, testBadEncodeRequest)
-{
-    uint8_t Tid = 0x03;
-    uint8_t eventClass = 0x00;
-    uint8_t eventData = 34;
-    size_t sz_eventData = sizeof(eventData);
-    size_t payloadLen =
-        sz_eventData + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES;
-    uint8_t formatVersion = 0x01;
-
-    std::array<uint8_t, hdrSize + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
-                            sizeof(eventData)>
-        requestMsg{};
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_platform_event_message_req(
-        0, formatVersion, Tid, eventClass,
-        reinterpret_cast<uint8_t*>(&eventData), sz_eventData, nullptr,
-        payloadLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = encode_platform_event_message_req(
-        0, 0, Tid, eventClass, reinterpret_cast<uint8_t*>(&eventData),
-        sz_eventData, request, payloadLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = encode_platform_event_message_req(0, formatVersion, Tid, eventClass,
-                                           nullptr, 0, request, payloadLen);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-    rc = encode_platform_event_message_req(
-        0, formatVersion, Tid, eventClass,
-        reinterpret_cast<uint8_t*>(&eventData), sz_eventData, request, 0);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(PlatformEventMessage, testGoodDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_PLATFORM_EVENT_MESSAGE_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t platformEventStatus = 0x01;
-
-    uint8_t retcompletionCode;
-    uint8_t retplatformEventStatus;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_platform_event_message_resp* resp =
-        reinterpret_cast<struct pldm_platform_event_message_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->platform_event_status = platformEventStatus;
-
-    auto rc = decode_platform_event_message_resp(
-        response, responseMsg.size() - hdrSize, &retcompletionCode,
-        &retplatformEventStatus);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, retcompletionCode);
-    EXPECT_EQ(platformEventStatus, retplatformEventStatus);
-}
-
-TEST(PlatformEventMessage, testBadDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_PLATFORM_EVENT_MESSAGE_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t platformEventStatus = 0x01;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_platform_event_message_resp* resp =
-        reinterpret_cast<struct pldm_platform_event_message_resp*>(
-            response->payload);
-    resp->completion_code = completionCode;
-    resp->platform_event_status = platformEventStatus;
-
-    auto rc = decode_platform_event_message_resp(
-        nullptr, responseMsg.size() - hdrSize, nullptr, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_platform_event_message_resp(
-        response, responseMsg.size() - hdrSize - 1, &completionCode,
-        &platformEventStatus);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(PlatformEventMessage, testGoodSensorEventDataDecodeRequest)
-{
-    std::array<uint8_t, PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH +
-                            PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES>
-        eventDataArr{};
-    uint16_t sensorId = 0x1234;
-    uint8_t sensorEventClassType = PLDM_SENSOR_OP_STATE;
-
-    struct pldm_sensor_event_data* eventData =
-        (struct pldm_sensor_event_data*)eventDataArr.data();
-    eventData->sensor_id = sensorId;
-    eventData->sensor_event_class_type = sensorEventClassType;
-
-    size_t retSensorOpDataOffset;
-    uint16_t retSensorId = 0;
-    uint8_t retSensorEventClassType;
-    size_t sensorOpDataOffset = sizeof(sensorId) + sizeof(sensorEventClassType);
-    auto rc = decode_sensor_event_data(
-        reinterpret_cast<uint8_t*>(eventData), eventDataArr.size(),
-        &retSensorId, &retSensorEventClassType, &retSensorOpDataOffset);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retSensorId, sensorId);
-    EXPECT_EQ(retSensorEventClassType, sensorEventClassType);
-    EXPECT_EQ(retSensorOpDataOffset, sensorOpDataOffset);
-}
-
-TEST(PlatformEventMessage, testBadSensorEventDataDecodeRequest)
-{
-
-    std::array<uint8_t, PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH +
-                            PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES>
-        eventDataArr{};
-
-    struct pldm_sensor_event_data* eventData =
-        (struct pldm_sensor_event_data*)eventDataArr.data();
-
-    size_t retSensorOpDataOffset;
-    uint16_t retSensorId = 0;
-    uint8_t retSensorEventClassType;
-    auto rc = decode_sensor_event_data(NULL, eventDataArr.size(), &retSensorId,
-                                       &retSensorEventClassType,
-                                       &retSensorOpDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_sensor_event_data(
-        reinterpret_cast<uint8_t*>(eventDataArr.data()),
-        eventDataArr.size() -
-            PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH,
-        &retSensorId, &retSensorEventClassType, &retSensorOpDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    eventData->sensor_event_class_type = PLDM_SENSOR_OP_STATE;
-
-    rc = decode_sensor_event_data(
-        reinterpret_cast<uint8_t*>(eventDataArr.data()), eventDataArr.size(),
-        &retSensorId, &retSensorEventClassType, &retSensorOpDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    eventData->sensor_event_class_type = PLDM_STATE_SENSOR_STATE;
-    rc = decode_sensor_event_data(
-        reinterpret_cast<uint8_t*>(eventDataArr.data()), eventDataArr.size(),
-        &retSensorId, &retSensorEventClassType, &retSensorOpDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    eventData->sensor_event_class_type = PLDM_NUMERIC_SENSOR_STATE;
-    rc = decode_sensor_event_data(
-        reinterpret_cast<uint8_t*>(eventDataArr.data()),
-        eventDataArr.size() + 1, &retSensorId, &retSensorEventClassType,
-        &retSensorOpDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(PlatformEventMessage, testGoodSensorOpEventDataDecodeRequest)
-{
-    std::array<uint8_t, PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH>
-        eventDataArr{};
-
-    struct pldm_sensor_event_sensor_op_state* sensorData =
-        (struct pldm_sensor_event_sensor_op_state*)eventDataArr.data();
-    uint8_t presentState = PLDM_SENSOR_ENABLED;
-    uint8_t previousState = PLDM_SENSOR_INITIALIZING;
-    sensorData->present_op_state = presentState;
-    sensorData->previous_op_state = previousState;
-
-    uint8_t retPresentState;
-    uint8_t retPreviousState;
-    auto rc = decode_sensor_op_data(reinterpret_cast<uint8_t*>(sensorData),
-                                    eventDataArr.size(), &retPresentState,
-                                    &retPreviousState);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retPresentState, presentState);
-    EXPECT_EQ(retPreviousState, previousState);
-}
-
-TEST(PlatformEventMessage, testBadSensorOpEventDataDecodeRequest)
-{
-    uint8_t presentOpState;
-    uint8_t previousOpState;
-    size_t sensorDataLength = PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH;
-    auto rc = decode_sensor_op_data(NULL, sensorDataLength, &presentOpState,
-                                    &previousOpState);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH>
-        sensorData{};
-    rc = decode_sensor_op_data(reinterpret_cast<uint8_t*>(sensorData.data()),
-                               sensorDataLength + 1, &presentOpState,
-                               &previousOpState);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_sensor_op_data(reinterpret_cast<uint8_t*>(sensorData.data()),
-                               sensorDataLength, nullptr, &previousOpState);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(PlatformEventMessage, testGoodSensorStateEventDataDecodeRequest)
-{
-    std::array<uint8_t, PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH>
-        eventDataArr{};
-
-    struct pldm_sensor_event_state_sensor_state* sensorData =
-        (struct pldm_sensor_event_state_sensor_state*)eventDataArr.data();
-    uint8_t sensorOffset = 0x02;
-    uint8_t eventState = PLDM_SENSOR_SHUTTINGDOWN;
-    uint8_t previousEventState = PLDM_SENSOR_INTEST;
-    sensorData->sensor_offset = sensorOffset;
-    sensorData->event_state = eventState;
-    sensorData->previous_event_state = previousEventState;
-
-    uint8_t retSensorOffset;
-    uint8_t retEventState;
-    uint8_t retPreviousState;
-    auto rc = decode_state_sensor_data(reinterpret_cast<uint8_t*>(sensorData),
-                                       eventDataArr.size(), &retSensorOffset,
-                                       &retEventState, &retPreviousState);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retSensorOffset, sensorOffset);
-    EXPECT_EQ(retEventState, eventState);
-    EXPECT_EQ(retPreviousState, previousEventState);
-}
-
-TEST(PlatformEventMessage, testBadStateSensorEventDataDecodeRequest)
-{
-    uint8_t sensorOffset;
-    uint8_t eventState;
-    uint8_t previousEventState;
-    size_t sensorDataLength = PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH;
-    auto rc = decode_state_sensor_data(NULL, sensorDataLength, &sensorOffset,
-                                       &eventState, &previousEventState);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH>
-        sensorData{};
-    rc = decode_state_sensor_data(reinterpret_cast<uint8_t*>(sensorData.data()),
-                                  sensorDataLength - 1, &sensorOffset,
-                                  &eventState, &previousEventState);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    rc = decode_state_sensor_data(reinterpret_cast<uint8_t*>(sensorData.data()),
-                                  sensorDataLength, &sensorOffset, nullptr,
-                                  &previousEventState);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(PlatformEventMessage, testGoodNumericSensorEventDataDecodeRequest)
-{
-    std::array<uint8_t, PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH>
-        eventDataArr{};
-    struct pldm_sensor_event_numeric_sensor_state* sensorData =
-        (struct pldm_sensor_event_numeric_sensor_state*)eventDataArr.data();
-
-    size_t sensorDataLength =
-        PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_32BIT_DATA_LENGTH;
-    uint8_t eventState = PLDM_SENSOR_SHUTTINGDOWN;
-    uint8_t previousEventState = PLDM_SENSOR_INTEST;
-    uint8_t sensorDataSize = PLDM_SENSOR_DATA_SIZE_UINT32;
-    uint32_t presentReading = 305441741;
-    sensorData->event_state = eventState;
-    sensorData->previous_event_state = previousEventState;
-    sensorData->sensor_data_size = sensorDataSize;
-    sensorData->present_reading[3] =
-        static_cast<uint8_t>(htole32(presentReading) & (0x000000ff));
-    sensorData->present_reading[2] =
-        static_cast<uint8_t>((htole32(presentReading) & (0x0000ff00)) >> 8);
-    sensorData->present_reading[1] =
-        static_cast<uint8_t>((htole32(presentReading) & (0x00ff0000)) >> 16);
-    sensorData->present_reading[0] =
-        static_cast<uint8_t>((htole32(presentReading) & (0xff000000)) >> 24);
-
-    uint8_t retEventState;
-    uint8_t retPreviousEventState;
-    uint8_t retSensorDataSize;
-    uint32_t retPresentReading;
-
-    auto rc = decode_numeric_sensor_data(
-        reinterpret_cast<uint8_t*>(sensorData), sensorDataLength,
-        &retEventState, &retPreviousEventState, &retSensorDataSize,
-        &retPresentReading);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retEventState, eventState);
-    EXPECT_EQ(retPreviousEventState, previousEventState);
-    EXPECT_EQ(retSensorDataSize, sensorDataSize);
-    EXPECT_EQ(retPresentReading, presentReading);
-
-    int16_t presentReadingNew = -31432;
-    sensorData->present_reading[1] =
-        static_cast<uint8_t>(htole16(presentReadingNew) & (0x000000ff));
-    sensorData->present_reading[0] =
-        static_cast<uint8_t>((htole16(presentReadingNew) & (0x0000ff00)) >> 8);
-    sensorDataSize = PLDM_SENSOR_DATA_SIZE_SINT16;
-    sensorData->sensor_data_size = sensorDataSize;
-    sensorDataLength = PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_16BIT_DATA_LENGTH;
-
-    rc = decode_numeric_sensor_data(reinterpret_cast<uint8_t*>(sensorData),
-                                    sensorDataLength, &retEventState,
-                                    &retPreviousEventState, &retSensorDataSize,
-                                    &retPresentReading);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retEventState, eventState);
-    EXPECT_EQ(retPreviousEventState, previousEventState);
-    EXPECT_EQ(retSensorDataSize, sensorDataSize);
-    EXPECT_EQ(static_cast<int16_t>(retPresentReading), presentReadingNew);
-}
-
-TEST(PlatformEventMessage, testBadNumericSensorEventDataDecodeRequest)
-{
-    uint8_t eventState;
-    uint8_t previousEventState;
-    uint8_t sensorDataSize;
-    uint32_t presentReading;
-    size_t sensorDataLength =
-        PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH;
-    auto rc = decode_numeric_sensor_data(NULL, sensorDataLength, &eventState,
-                                         &previousEventState, &sensorDataSize,
-                                         &presentReading);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH>
-        sensorData{};
-    rc = decode_numeric_sensor_data(
-        reinterpret_cast<uint8_t*>(sensorData.data()), sensorDataLength - 1,
-        &eventState, &previousEventState, &sensorDataSize, &presentReading);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    struct pldm_sensor_event_numeric_sensor_state* numericSensorData =
-        (struct pldm_sensor_event_numeric_sensor_state*)sensorData.data();
-    numericSensorData->sensor_data_size = PLDM_SENSOR_DATA_SIZE_UINT8;
-    rc = decode_numeric_sensor_data(
-        reinterpret_cast<uint8_t*>(sensorData.data()), sensorDataLength,
-        &eventState, &previousEventState, &sensorDataSize, &presentReading);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    numericSensorData->sensor_data_size = PLDM_SENSOR_DATA_SIZE_UINT16;
-    rc = decode_numeric_sensor_data(
-        reinterpret_cast<uint8_t*>(sensorData.data()), sensorDataLength,
-        &eventState, &previousEventState, &sensorDataSize, &presentReading);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    numericSensorData->sensor_data_size = PLDM_SENSOR_DATA_SIZE_UINT32;
-    rc = decode_numeric_sensor_data(
-        reinterpret_cast<uint8_t*>(sensorData.data()), sensorDataLength - 1,
-        &eventState, &previousEventState, &sensorDataSize, &presentReading);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetNumericEffecterValue, testGoodEncodeRequest)
-{
-    std::vector<uint8_t> requestMsg(hdrSize +
-                                    PLDM_GET_NUMERIC_EFFECTER_VALUE_REQ_BYTES);
-
-    uint16_t effecter_id = 0xAB01;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_get_numeric_effecter_value_req(0, effecter_id, request);
-
-    struct pldm_get_numeric_effecter_value_req* req =
-        reinterpret_cast<struct pldm_get_numeric_effecter_value_req*>(
-            request->payload);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(effecter_id, le16toh(req->effecter_id));
-}
-
-TEST(GetNumericEffecterValue, testBadEncodeRequest)
-{
-    std::vector<uint8_t> requestMsg(
-        hdrSize + PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES);
-
-    auto rc = encode_get_numeric_effecter_value_req(0, 0, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetNumericEffecterValue, testGoodDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_NUMERIC_EFFECTER_VALUE_REQ_BYTES>
-        requestMsg{};
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_get_numeric_effecter_value_req* req =
-        reinterpret_cast<struct pldm_get_numeric_effecter_value_req*>(
-            request->payload);
-
-    uint16_t effecter_id = 0x12AB;
-    req->effecter_id = htole16(effecter_id);
-
-    uint16_t reteffecter_id;
-
-    auto rc = decode_get_numeric_effecter_value_req(
-        request, requestMsg.size() - hdrSize, &reteffecter_id);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(effecter_id, reteffecter_id);
-}
-
-TEST(GetNumericEffecterValue, testBadDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_NUMERIC_EFFECTER_VALUE_REQ_BYTES>
-        requestMsg{};
-
-    auto rc = decode_get_numeric_effecter_value_req(
-        nullptr, requestMsg.size() - hdrSize, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_set_numeric_effecter_value_req* req =
-        reinterpret_cast<struct pldm_set_numeric_effecter_value_req*>(
-            request->payload);
-
-    uint16_t effecter_id = 0x1A;
-    req->effecter_id = htole16(effecter_id);
-    uint16_t reteffecter_id;
-
-    rc = decode_get_numeric_effecter_value_req(
-        request, requestMsg.size() - hdrSize - 1, &reteffecter_id);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetNumericEffecterValue, testGoodEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    uint8_t effecter_dataSize = PLDM_EFFECTER_DATA_SIZE_UINT32;
-    uint8_t effecter_operState = EFFECTER_OPER_STATE_ENABLED_NOUPDATEPENDING;
-    uint32_t pendingValue = 0x12345678;
-    uint32_t presentValue = 0xABCDEF11;
-
-    std::array<uint8_t,
-               hdrSize + PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES + 6>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_get_numeric_effecter_value_resp(
-        0, completionCode, effecter_dataSize, effecter_operState,
-        reinterpret_cast<uint8_t*>(&pendingValue),
-        reinterpret_cast<uint8_t*>(&presentValue), response,
-        responseMsg.size() - hdrSize);
-
-    struct pldm_get_numeric_effecter_value_resp* resp =
-        reinterpret_cast<struct pldm_get_numeric_effecter_value_resp*>(
-            response->payload);
-
-    uint32_t* val_pending = (uint32_t*)(&resp->pending_and_present_values[0]);
-    *val_pending = le32toh(*val_pending);
-    uint32_t* val_present = (uint32_t*)(&resp->pending_and_present_values[4]);
-    *val_present = le32toh(*val_present);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(effecter_dataSize, resp->effecter_data_size);
-    EXPECT_EQ(effecter_operState, resp->effecter_oper_state);
-    EXPECT_EQ(pendingValue, *val_pending);
-    EXPECT_EQ(presentValue, *val_present);
-}
-
-TEST(GetNumericEffecterValue, testBadEncodeResponse)
-{
-    std::array<uint8_t,
-               hdrSize + PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES + 2>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    uint8_t pendingValue = 0x01;
-    uint8_t presentValue = 0x02;
-
-    auto rc = encode_get_numeric_effecter_value_resp(
-        0, PLDM_SUCCESS, 0, 0, nullptr, nullptr, nullptr,
-        responseMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_get_numeric_effecter_value_resp(
-        0, PLDM_SUCCESS, 6, 9, reinterpret_cast<uint8_t*>(&pendingValue),
-        reinterpret_cast<uint8_t*>(&presentValue), response,
-        responseMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint8_t effecter_dataSize = PLDM_EFFECTER_DATA_SIZE_UINT8;
-    uint8_t effecter_operState = EFFECTER_OPER_STATE_FAILED;
-
-    rc = encode_get_numeric_effecter_value_resp(
-        0, PLDM_SUCCESS, effecter_dataSize, effecter_operState,
-        reinterpret_cast<uint8_t*>(&pendingValue),
-        reinterpret_cast<uint8_t*>(&presentValue), response,
-        responseMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetNumericEffecterValue, testGoodDecodeResponse)
-{
-    std::array<uint8_t,
-               hdrSize + PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES + 2>
-        responseMsg{};
-
-    uint8_t completionCode = 0;
-    uint8_t effecter_dataSize = PLDM_EFFECTER_DATA_SIZE_UINT16;
-    uint8_t effecter_operState = EFFECTER_OPER_STATE_ENABLED_NOUPDATEPENDING;
-    uint16_t pendingValue = 0x4321;
-    uint16_t presentValue = 0xDCBA;
-
-    uint8_t retcompletionCode;
-    uint8_t reteffecter_dataSize;
-    uint8_t reteffecter_operState;
-    uint8_t retpendingValue[2];
-    uint8_t retpresentValue[2];
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_get_numeric_effecter_value_resp* resp =
-        reinterpret_cast<struct pldm_get_numeric_effecter_value_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->effecter_data_size = effecter_dataSize;
-    resp->effecter_oper_state = effecter_operState;
-
-    uint16_t pendingValue_le = htole16(pendingValue);
-    memcpy(resp->pending_and_present_values, &pendingValue_le,
-           sizeof(pendingValue_le));
-    uint16_t presentValue_le = htole16(presentValue);
-    memcpy(&resp->pending_and_present_values[2], &presentValue_le,
-           sizeof(presentValue_le));
-
-    auto rc = decode_get_numeric_effecter_value_resp(
-        response, responseMsg.size() - hdrSize, &retcompletionCode,
-        &reteffecter_dataSize, &reteffecter_operState, retpendingValue,
-        retpresentValue);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, retcompletionCode);
-    EXPECT_EQ(effecter_dataSize, reteffecter_dataSize);
-    EXPECT_EQ(effecter_operState, reteffecter_operState);
-    EXPECT_EQ(pendingValue, *(reinterpret_cast<uint16_t*>(retpendingValue)));
-    EXPECT_EQ(presentValue, *(reinterpret_cast<uint16_t*>(retpresentValue)));
-}
-
-TEST(GetNumericEffecterValue, testBadDecodeResponse)
-{
-    std::array<uint8_t,
-               hdrSize + PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES + 6>
-        responseMsg{};
-
-    auto rc = decode_get_numeric_effecter_value_resp(
-        nullptr, responseMsg.size() - hdrSize, nullptr, nullptr, nullptr,
-        nullptr, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint8_t completionCode = 0;
-    uint8_t effecter_dataSize = PLDM_EFFECTER_DATA_SIZE_SINT16;
-    uint8_t effecter_operState = EFFECTER_OPER_STATE_DISABLED;
-    uint16_t pendingValue = 0x5678;
-    uint16_t presentValue = 0xCDEF;
-
-    uint8_t retcompletionCode;
-    uint8_t reteffecter_dataSize;
-    uint8_t reteffecter_operState;
-    uint8_t retpendingValue[2];
-    uint8_t retpresentValue[2];
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_get_numeric_effecter_value_resp* resp =
-        reinterpret_cast<struct pldm_get_numeric_effecter_value_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->effecter_data_size = effecter_dataSize;
-    resp->effecter_oper_state = effecter_operState;
-
-    uint16_t pendingValue_le = htole16(pendingValue);
-    memcpy(resp->pending_and_present_values, &pendingValue_le,
-           sizeof(pendingValue_le));
-    uint16_t presentValue_le = htole16(presentValue);
-    memcpy(&resp->pending_and_present_values[2], &presentValue_le,
-           sizeof(presentValue_le));
-
-    rc = decode_get_numeric_effecter_value_resp(
-        response, responseMsg.size() - hdrSize, &retcompletionCode,
-        &reteffecter_dataSize, &reteffecter_operState, retpendingValue,
-        retpresentValue);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(PldmPDRRepositoryChgEventEvent, testGoodDecodeRequest)
-{
-    const uint8_t eventDataFormat = FORMAT_IS_PDR_HANDLES;
-    const uint8_t numberOfChangeRecords = 2;
-    uint8_t eventDataOperation1 = PLDM_RECORDS_DELETED;
-    const uint8_t numberOfChangeEntries1 = 2;
-    std::array<uint32_t, numberOfChangeEntries1> changeRecordArr1{
-        {0x00000000, 0x12345678}};
-    uint8_t eventDataOperation2 = PLDM_RECORDS_ADDED;
-    const uint8_t numberOfChangeEntries2 = 5;
-    std::array<uint32_t, numberOfChangeEntries2> changeRecordArr2{
-        {0x01234567, 0x11223344, 0x45678901, 0x21222324, 0x98765432}};
-    std::array<uint8_t, PLDM_PDR_REPOSITORY_CHG_EVENT_MIN_LENGTH +
-                            PLDM_PDR_REPOSITORY_CHANGE_RECORD_MIN_LENGTH *
-                                numberOfChangeRecords +
-                            (numberOfChangeEntries1 + numberOfChangeEntries2) *
-                                sizeof(uint32_t)>
-        eventDataArr{};
-
-    struct pldm_pdr_repository_chg_event_data* eventData =
-        reinterpret_cast<struct pldm_pdr_repository_chg_event_data*>(
-            eventDataArr.data());
-    eventData->event_data_format = eventDataFormat;
-    eventData->number_of_change_records = numberOfChangeRecords;
-    struct pldm_pdr_repository_change_record_data* changeRecord1 =
-        reinterpret_cast<struct pldm_pdr_repository_change_record_data*>(
-            eventData->change_records);
-    changeRecord1->event_data_operation = eventDataOperation1;
-    changeRecord1->number_of_change_entries = numberOfChangeEntries1;
-    memcpy(changeRecord1->change_entry, &changeRecordArr1[0],
-           changeRecordArr1.size() * sizeof(uint32_t));
-    struct pldm_pdr_repository_change_record_data* changeRecord2 =
-        reinterpret_cast<struct pldm_pdr_repository_change_record_data*>(
-            eventData->change_records +
-            PLDM_PDR_REPOSITORY_CHANGE_RECORD_MIN_LENGTH +
-            (changeRecordArr1.size() * sizeof(uint32_t)));
-    changeRecord2->event_data_operation = eventDataOperation2;
-    changeRecord2->number_of_change_entries = numberOfChangeEntries2;
-    memcpy(changeRecord2->change_entry, &changeRecordArr2[0],
-           changeRecordArr2.size() * sizeof(uint32_t));
-
-    uint8_t retEventDataFormat{};
-    uint8_t retNumberOfChangeRecords{};
-    size_t retChangeRecordDataOffset{0};
-    auto rc = decode_pldm_pdr_repository_chg_event_data(
-        reinterpret_cast<const uint8_t*>(eventData), eventDataArr.size(),
-        &retEventDataFormat, &retNumberOfChangeRecords,
-        &retChangeRecordDataOffset);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retEventDataFormat, FORMAT_IS_PDR_HANDLES);
-    EXPECT_EQ(retNumberOfChangeRecords, numberOfChangeRecords);
-
-    const uint8_t* changeRecordData =
-        reinterpret_cast<const uint8_t*>(changeRecord1);
-    size_t changeRecordDataSize =
-        eventDataArr.size() - PLDM_PDR_REPOSITORY_CHG_EVENT_MIN_LENGTH;
-    uint8_t retEventDataOperation;
-    uint8_t retNumberOfChangeEntries;
-    size_t retChangeEntryDataOffset;
-
-    rc = decode_pldm_pdr_repository_change_record_data(
-        reinterpret_cast<const uint8_t*>(changeRecordData),
-        changeRecordDataSize, &retEventDataOperation, &retNumberOfChangeEntries,
-        &retChangeEntryDataOffset);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retEventDataOperation, eventDataOperation1);
-    EXPECT_EQ(retNumberOfChangeEntries, numberOfChangeEntries1);
-    changeRecordData += retChangeEntryDataOffset;
-    EXPECT_EQ(0, memcmp(changeRecordData, &changeRecordArr1[0],
-                        sizeof(uint32_t) * retNumberOfChangeEntries));
-
-    changeRecordData += sizeof(uint32_t) * retNumberOfChangeEntries;
-    changeRecordDataSize -= sizeof(uint32_t) * retNumberOfChangeEntries -
-                            PLDM_PDR_REPOSITORY_CHANGE_RECORD_MIN_LENGTH;
-    rc = decode_pldm_pdr_repository_change_record_data(
-        reinterpret_cast<const uint8_t*>(changeRecordData),
-        changeRecordDataSize, &retEventDataOperation, &retNumberOfChangeEntries,
-        &retChangeEntryDataOffset);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retEventDataOperation, eventDataOperation2);
-    EXPECT_EQ(retNumberOfChangeEntries, numberOfChangeEntries2);
-    changeRecordData += retChangeEntryDataOffset;
-    EXPECT_EQ(0, memcmp(changeRecordData, &changeRecordArr2[0],
-                        sizeof(uint32_t) * retNumberOfChangeEntries));
-}
-
-TEST(PldmPDRRepositoryChgEventEvent, testBadDecodeRequest)
-{
-    uint8_t eventDataFormat{};
-    uint8_t numberOfChangeRecords{};
-    size_t changeRecordDataOffset{};
-    auto rc = decode_pldm_pdr_repository_chg_event_data(
-        NULL, 0, &eventDataFormat, &numberOfChangeRecords,
-        &changeRecordDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, 2> eventData{};
-    rc = decode_pldm_pdr_repository_chg_event_data(
-        reinterpret_cast<const uint8_t*>(eventData.data()), 0, &eventDataFormat,
-        &numberOfChangeRecords, &changeRecordDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    uint8_t eventDataOperation{};
-    uint8_t numberOfChangeEntries{};
-    size_t changeEntryDataOffset{};
-    rc = decode_pldm_pdr_repository_change_record_data(
-        NULL, 0, &eventDataOperation, &numberOfChangeEntries,
-        &changeEntryDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, 2> changeRecord{};
-    rc = decode_pldm_pdr_repository_change_record_data(
-        reinterpret_cast<const uint8_t*>(changeRecord.data()), 0,
-        &eventDataOperation, &numberOfChangeEntries, &changeEntryDataOffset);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetSensorReading, testGoodEncodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_SENSOR_READING_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t sensorId = 0x1234;
-    bool8_t rearmEventState = 0x01;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc =
-        encode_get_sensor_reading_req(0, sensorId, rearmEventState, request);
-
-    struct pldm_get_sensor_reading_req* req =
-        reinterpret_cast<struct pldm_get_sensor_reading_req*>(request->payload);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(sensorId, le16toh(req->sensor_id));
-    EXPECT_EQ(rearmEventState, req->rearm_event_state);
-}
-
-TEST(GetSensorReading, testBadEncodeRequest)
-{
-    auto rc = encode_get_sensor_reading_req(0, 0, 0, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetSensorReading, testGoodDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_SENSOR_READING_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t sensorId = 0xABCD;
-    bool8_t rearmEventState = 0xA;
-
-    uint16_t retsensorId;
-    bool8_t retrearmEventState;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    struct pldm_get_sensor_reading_req* req =
-        reinterpret_cast<struct pldm_get_sensor_reading_req*>(request->payload);
-
-    req->sensor_id = htole16(sensorId);
-    req->rearm_event_state = rearmEventState;
-
-    auto rc =
-        decode_get_sensor_reading_req(request, requestMsg.size() - hdrSize,
-                                      &retsensorId, &retrearmEventState);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(sensorId, retsensorId);
-    EXPECT_EQ(rearmEventState, retrearmEventState);
-}
-
-TEST(GetSensorReading, testBadDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_SENSOR_READING_REQ_BYTES>
-        requestMsg{};
-
-    auto rc = decode_get_sensor_reading_req(
-        nullptr, requestMsg.size() - hdrSize, nullptr, nullptr);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint16_t sensorId = 0xABCD;
-    bool8_t rearmEventState = 0xA;
-
-    uint16_t retsensorId;
-    bool8_t retrearmEventState;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    struct pldm_get_sensor_reading_req* req =
-        reinterpret_cast<struct pldm_get_sensor_reading_req*>(request->payload);
-
-    req->sensor_id = htole16(sensorId);
-    req->rearm_event_state = rearmEventState;
-
-    rc = decode_get_sensor_reading_req(request, requestMsg.size() - hdrSize - 1,
-                                       &retsensorId, &retrearmEventState);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetSensorReading, testGoodEncodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_SENSOR_READING_MIN_RESP_BYTES>
-        responseMsg{};
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    uint8_t completionCode = 0;
-    uint8_t sensor_dataSize = PLDM_EFFECTER_DATA_SIZE_UINT8;
-    uint8_t sensor_operationalState = PLDM_SENSOR_ENABLED;
-    uint8_t sensor_event_messageEnable = PLDM_NO_EVENT_GENERATION;
-    uint8_t presentState = PLDM_SENSOR_NORMAL;
-    uint8_t previousState = PLDM_SENSOR_WARNING;
-    uint8_t eventState = PLDM_SENSOR_UPPERWARNING;
-    uint8_t presentReading = 0x21;
-
-    auto rc = encode_get_sensor_reading_resp(
-        0, completionCode, sensor_dataSize, sensor_operationalState,
-        sensor_event_messageEnable, presentState, previousState, eventState,
-        reinterpret_cast<uint8_t*>(&presentReading), response,
-        responseMsg.size() - hdrSize);
-
-    struct pldm_get_sensor_reading_resp* resp =
-        reinterpret_cast<struct pldm_get_sensor_reading_resp*>(
-            response->payload);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(sensor_dataSize, resp->sensor_data_size);
-    EXPECT_EQ(sensor_operationalState, resp->sensor_operational_state);
-    EXPECT_EQ(sensor_event_messageEnable, resp->sensor_event_message_enable);
-    EXPECT_EQ(presentState, resp->present_state);
-    EXPECT_EQ(previousState, resp->previous_state);
-    EXPECT_EQ(eventState, resp->event_state);
-    EXPECT_EQ(presentReading,
-              *(reinterpret_cast<uint8_t*>(&resp->present_reading[0])));
-}
-
-TEST(GetSensorReading, testBadEncodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_SENSOR_READING_MIN_RESP_BYTES + 3>
-        responseMsg{};
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    uint8_t presentReading = 0x1;
-
-    auto rc = encode_get_sensor_reading_resp(0, PLDM_SUCCESS, 0, 0, 0, 0, 0, 0,
-                                             nullptr, nullptr,
-                                             responseMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = encode_get_sensor_reading_resp(
-        0, PLDM_SUCCESS, 6, 1, 1, 1, 1, 1,
-        reinterpret_cast<uint8_t*>(&presentReading), response,
-        responseMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint8_t sensor_dataSize = PLDM_EFFECTER_DATA_SIZE_UINT8;
-
-    rc = encode_get_sensor_reading_resp(
-        0, PLDM_SUCCESS, sensor_dataSize, 1, 1, 1, 1, 1,
-        reinterpret_cast<uint8_t*>(&presentReading), response,
-        responseMsg.size() - hdrSize);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetSensorReading, testGoodDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_SENSOR_READING_MIN_RESP_BYTES + 3>
-        responseMsg{};
-
-    uint8_t completionCode = 0;
-    uint8_t sensor_dataSize = PLDM_EFFECTER_DATA_SIZE_UINT32;
-    uint8_t sensor_operationalState = PLDM_SENSOR_STATUSUNKOWN;
-    uint8_t sensor_event_messageEnable = PLDM_EVENTS_ENABLED;
-    uint8_t presentState = PLDM_SENSOR_CRITICAL;
-    uint8_t previousState = PLDM_SENSOR_UPPERCRITICAL;
-    uint8_t eventState = PLDM_SENSOR_WARNING;
-    uint32_t presentReading = 0xABCDEF11;
-
-    uint8_t retcompletionCode;
-    uint8_t retsensor_dataSize = PLDM_SENSOR_DATA_SIZE_UINT32;
-    uint8_t retsensor_operationalState;
-    uint8_t retsensor_event_messageEnable;
-    uint8_t retpresentState;
-    uint8_t retpreviousState;
-    uint8_t reteventState;
-    uint8_t retpresentReading[4];
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_get_sensor_reading_resp* resp =
-        reinterpret_cast<struct pldm_get_sensor_reading_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->sensor_data_size = sensor_dataSize;
-    resp->sensor_operational_state = sensor_operationalState;
-    resp->sensor_event_message_enable = sensor_event_messageEnable;
-    resp->present_state = presentState;
-    resp->previous_state = previousState;
-    resp->event_state = eventState;
-
-    uint32_t presentReading_le = htole32(presentReading);
-    memcpy(resp->present_reading, &presentReading_le,
-           sizeof(presentReading_le));
-
-    auto rc = decode_get_sensor_reading_resp(
-        response, responseMsg.size() - hdrSize, &retcompletionCode,
-        &retsensor_dataSize, &retsensor_operationalState,
-        &retsensor_event_messageEnable, &retpresentState, &retpreviousState,
-        &reteventState, retpresentReading);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, retcompletionCode);
-    EXPECT_EQ(sensor_dataSize, retsensor_dataSize);
-    EXPECT_EQ(sensor_operationalState, retsensor_operationalState);
-    EXPECT_EQ(sensor_event_messageEnable, retsensor_event_messageEnable);
-    EXPECT_EQ(presentState, retpresentState);
-    EXPECT_EQ(previousState, retpreviousState);
-    EXPECT_EQ(eventState, reteventState);
-    EXPECT_EQ(presentReading,
-              *(reinterpret_cast<uint32_t*>(retpresentReading)));
-}
-
-TEST(GetSensorReading, testBadDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_SENSOR_READING_MIN_RESP_BYTES + 1>
-        responseMsg{};
-
-    auto rc = decode_get_sensor_reading_resp(
-        nullptr, responseMsg.size() - hdrSize, nullptr, nullptr, nullptr,
-        nullptr, nullptr, nullptr, nullptr, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint8_t completionCode = 0;
-    uint8_t sensor_dataSize = PLDM_EFFECTER_DATA_SIZE_UINT8;
-    uint8_t sensor_operationalState = PLDM_SENSOR_INTEST;
-    uint8_t sensor_event_messageEnable = PLDM_EVENTS_DISABLED;
-    uint8_t presentState = PLDM_SENSOR_FATAL;
-    uint8_t previousState = PLDM_SENSOR_UPPERFATAL;
-    uint8_t eventState = PLDM_SENSOR_WARNING;
-    uint8_t presentReading = 0xA;
-
-    uint8_t retcompletionCode;
-    uint8_t retsensor_dataSize = PLDM_SENSOR_DATA_SIZE_SINT16;
-    uint8_t retsensor_operationalState;
-    uint8_t retsensor_event_messageEnable;
-    uint8_t retpresent_state;
-    uint8_t retprevious_state;
-    uint8_t retevent_state;
-    uint8_t retpresentReading;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_get_sensor_reading_resp* resp =
-        reinterpret_cast<struct pldm_get_sensor_reading_resp*>(
-            response->payload);
-
-    resp->completion_code = completionCode;
-    resp->sensor_data_size = sensor_dataSize;
-    resp->sensor_operational_state = sensor_operationalState;
-    resp->sensor_event_message_enable = sensor_event_messageEnable;
-    resp->present_state = presentState;
-    resp->previous_state = previousState;
-    resp->event_state = eventState;
-    resp->present_reading[0] = presentReading;
-
-    rc = decode_get_sensor_reading_resp(
-        response, responseMsg.size() - hdrSize, &retcompletionCode,
-        &retsensor_dataSize, &retsensor_operationalState,
-        &retsensor_event_messageEnable, &retpresent_state, &retprevious_state,
-        &retevent_state, reinterpret_cast<uint8_t*>(&retpresentReading));
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(SetEventReceiver, testGoodEncodeRequest)
-{
-    uint8_t eventMessageGlobalEnable =
-        PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE;
-    uint8_t transportProtocolType = PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP;
-    uint8_t eventReceiverAddressInfo = 0x08;
-    uint16_t heartbeatTimer = 0x78;
-
-    std::vector<uint8_t> requestMsg(hdrSize +
-                                    PLDM_SET_EVENT_RECEIVER_REQ_BYTES);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_set_event_receiver_req(
-        0, eventMessageGlobalEnable, transportProtocolType,
-        eventReceiverAddressInfo, heartbeatTimer, request);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    struct pldm_set_event_receiver_req* req =
-        reinterpret_cast<struct pldm_set_event_receiver_req*>(request->payload);
-    EXPECT_EQ(eventMessageGlobalEnable, req->event_message_global_enable);
-    EXPECT_EQ(transportProtocolType, req->transport_protocol_type);
-    EXPECT_EQ(eventReceiverAddressInfo, req->event_receiver_address_info);
-    EXPECT_EQ(heartbeatTimer, le16toh(req->heartbeat_timer));
-}
-
-TEST(SetEventReceiver, testBadEncodeRequest)
-{
-    uint8_t eventMessageGlobalEnable =
-        PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE;
-    uint8_t transportProtocolType = PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP;
-    uint8_t eventReceiverAddressInfo = 0x08;
-    uint16_t heartbeatTimer = 0;
-
-    std::vector<uint8_t> requestMsg(hdrSize +
-                                    PLDM_SET_EVENT_RECEIVER_REQ_BYTES);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_set_event_receiver_req(
-        0, eventMessageGlobalEnable, transportProtocolType,
-        eventReceiverAddressInfo, heartbeatTimer, request);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(SetEventReceiver, testGoodDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_SET_EVENT_RECEIVER_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t retcompletion_code = 0;
-    responseMsg[hdrSize] = PLDM_SUCCESS;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    auto rc = decode_set_event_receiver_resp(
-        response, responseMsg.size() - sizeof(pldm_msg_hdr),
-        &retcompletion_code);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(PLDM_SUCCESS, retcompletion_code);
-}
-
-TEST(SetEventReceiver, testBadDecodeResponse)
-{
-    std::array<uint8_t, hdrSize + PLDM_SET_EVENT_RECEIVER_RESP_BYTES>
-        responseMsg{};
-    uint8_t retcompletion_code = 0;
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_set_event_receiver_resp(
-        response, responseMsg.size() - sizeof(pldm_msg_hdr), NULL);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_set_event_receiver_resp(
-        nullptr, responseMsg.size() - sizeof(pldm_msg_hdr),
-        &retcompletion_code);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(SetEventReceiver, testGoodEncodeResponse)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_SET_EVENT_RECEIVER_RESP_BYTES>
-        responseMsg{};
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    uint8_t completionCode = 0;
-
-    auto rc = encode_set_event_receiver_resp(0, PLDM_SUCCESS, response);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(completionCode, response->payload[0]);
-}
-
-TEST(SetEventReceiver, testBadEncodeResponse)
-{
-    auto rc = encode_set_event_receiver_resp(0, PLDM_SUCCESS, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(SetEventReceiver, testGoodDecodeRequest)
-{
-
-    std::array<uint8_t, hdrSize + PLDM_SET_EVENT_RECEIVER_REQ_BYTES>
-        requestMsg{};
-
-    uint8_t eventMessageGlobalEnable =
-        PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE;
-    uint8_t transportProtocolType = PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP;
-    uint8_t eventReceiverAddressInfo = 0x08;
-    uint16_t heartbeatTimer = 0x78;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_set_event_receiver_req* req =
-        reinterpret_cast<struct pldm_set_event_receiver_req*>(request->payload);
-
-    req->event_message_global_enable = eventMessageGlobalEnable;
-    req->transport_protocol_type = transportProtocolType;
-    req->event_receiver_address_info = eventReceiverAddressInfo;
-    req->heartbeat_timer = htole16(heartbeatTimer);
-
-    uint8_t reteventMessageGlobalEnable;
-    uint8_t rettransportProtocolType;
-    uint8_t reteventReceiverAddressInfo;
-    uint16_t retheartbeatTimer;
-    auto rc = decode_set_event_receiver_req(
-        request, requestMsg.size() - hdrSize, &reteventMessageGlobalEnable,
-        &rettransportProtocolType, &reteventReceiverAddressInfo,
-        &retheartbeatTimer);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(eventMessageGlobalEnable, reteventMessageGlobalEnable);
-    EXPECT_EQ(transportProtocolType, rettransportProtocolType);
-    EXPECT_EQ(eventReceiverAddressInfo, reteventReceiverAddressInfo);
-    EXPECT_EQ(heartbeatTimer, retheartbeatTimer);
-}
-
-TEST(SetEventReceiver, testBadDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_SET_EVENT_RECEIVER_REQ_BYTES>
-        requestMsg{};
-
-    auto rc = decode_set_event_receiver_req(NULL, requestMsg.size() - hdrSize,
-                                            NULL, NULL, NULL, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint8_t eventMessageGlobalEnable =
-        PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE;
-    uint8_t transportProtocolType = PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP;
-    uint8_t eventReceiverAddressInfo = 0x08;
-    uint16_t heartbeatTimer = 0x78;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    struct pldm_set_event_receiver_req* req =
-        reinterpret_cast<struct pldm_set_event_receiver_req*>(request->payload);
-
-    req->event_message_global_enable = eventMessageGlobalEnable;
-    req->transport_protocol_type = transportProtocolType;
-    req->event_receiver_address_info = eventReceiverAddressInfo;
-    req->heartbeat_timer = htole16(heartbeatTimer);
-
-    uint8_t reteventMessageGlobalEnable;
-    uint8_t rettransportProtocolType;
-    uint8_t reteventReceiverAddressInfo;
-    uint16_t retheartbeatTimer;
-    rc = decode_set_event_receiver_req(
-        request, requestMsg.size() - hdrSize - 1, &reteventMessageGlobalEnable,
-        &rettransportProtocolType, &reteventReceiverAddressInfo,
-        &retheartbeatTimer);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
diff --git a/subprojects/libpldm/tests/libpldm_utils_test.cpp b/subprojects/libpldm/tests/libpldm_utils_test.cpp
deleted file mode 100644
index a6212c0..0000000
--- a/subprojects/libpldm/tests/libpldm_utils_test.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-#include <cstring>
-#include <vector>
-
-#include "libpldm/utils.h"
-
-#include <gtest/gtest.h>
-
-TEST(Crc32, CheckSumTest)
-{
-    const char* password = "123456789";
-    auto checksum = crc32(password, 9);
-    EXPECT_EQ(checksum, 0xcbf43926);
-}
-
-TEST(Crc8, CheckSumTest)
-{
-    const char* data = "123456789";
-    auto checksum = crc8(data, 9);
-    EXPECT_EQ(checksum, 0xf4);
-}
-
-TEST(Ver2string, Ver2string)
-{
-    ver32_t version{0x61, 0x10, 0xf7, 0xf3};
-    const char* vstr = "3.7.10a";
-    char buffer[1024];
-    auto rc = ver2str(&version, buffer, sizeof(buffer));
-    EXPECT_EQ(rc, (signed)std::strlen(vstr));
-    EXPECT_STREQ(vstr, buffer);
-
-    version = {0x00, 0xf0, 0xf0, 0xf1};
-    vstr = "1.0.0";
-    rc = ver2str(&version, buffer, sizeof(buffer));
-    EXPECT_EQ(rc, (signed)std::strlen(vstr));
-    EXPECT_STREQ(vstr, buffer);
-
-    version = {0x00, 0xf7, 0x01, 0x10};
-    vstr = "10.01.7";
-    rc = ver2str(&version, buffer, sizeof(buffer));
-    EXPECT_EQ(rc, (signed)std::strlen(vstr));
-    EXPECT_STREQ(vstr, buffer);
-
-    version = {0x00, 0xff, 0xf1, 0xf3};
-    vstr = "3.1";
-    rc = ver2str(&version, buffer, sizeof(buffer));
-    EXPECT_EQ(rc, (signed)std::strlen(vstr));
-    EXPECT_STREQ(vstr, buffer);
-
-    version = {0x61, 0xff, 0xf0, 0xf1};
-    vstr = "1.0a";
-    rc = ver2str(&version, buffer, sizeof(buffer));
-    EXPECT_EQ(rc, (signed)std::strlen(vstr));
-    EXPECT_STREQ(vstr, buffer);
-
-    rc = ver2str(&version, buffer, 3);
-    EXPECT_EQ(rc, 2);
-    EXPECT_STREQ("1.", buffer);
-
-    rc = ver2str(&version, buffer, 1);
-    EXPECT_EQ(rc, 0);
-
-    rc = ver2str(&version, buffer, 0);
-    EXPECT_EQ(rc, -1);
-}
-
-TEST(BcdConversion, BcdCoversion)
-{
-    EXPECT_EQ(12u, bcd2dec8(0x12));
-    EXPECT_EQ(99u, bcd2dec8(0x99));
-    EXPECT_EQ(1234u, bcd2dec16(0x1234));
-    EXPECT_EQ(9999u, bcd2dec16(0x9999));
-    EXPECT_EQ(12345678u, bcd2dec32(0x12345678));
-    EXPECT_EQ(99999999u, bcd2dec32(0x99999999));
-
-    EXPECT_EQ(0x12u, dec2bcd8(12));
-    EXPECT_EQ(0x99u, dec2bcd8(99));
-    EXPECT_EQ(0x1234u, dec2bcd16(1234));
-    EXPECT_EQ(0x9999u, dec2bcd16(9999));
-    EXPECT_EQ(0x12345678u, dec2bcd32(12345678));
-    EXPECT_EQ(0x99999999u, dec2bcd32(99999999));
-}
-
-TEST(TimeLegal, TimeLegal)
-{
-    EXPECT_EQ(true, is_time_legal(30, 25, 16, 18, 8, 2019));
-    EXPECT_EQ(true, is_time_legal(30, 25, 16, 29, 2, 2020)); // leap year
-
-    EXPECT_EQ(false, is_time_legal(30, 25, 16, 18, 8, 1960));  // year illegal
-    EXPECT_EQ(false, is_time_legal(30, 25, 16, 18, 15, 2019)); // month illegal
-    EXPECT_EQ(false, is_time_legal(30, 25, 16, 18, 0, 2019));  // month illegal
-    EXPECT_EQ(false, is_time_legal(30, 25, 16, 0, 8, 2019));   // day illegal
-    EXPECT_EQ(false, is_time_legal(30, 25, 16, 29, 2, 2019));  // day illegal
-    EXPECT_EQ(false, is_time_legal(30, 25, 25, 18, 8, 2019));  // hours illegal
-    EXPECT_EQ(false, is_time_legal(30, 70, 16, 18, 8, 2019)); // minutes illegal
-    EXPECT_EQ(false, is_time_legal(80, 25, 16, 18, 8, 2019)); // seconds illegal
-}
diff --git a/subprojects/libpldm/tests/meson.build b/subprojects/libpldm/tests/meson.build
deleted file mode 100644
index 1955487..0000000
--- a/subprojects/libpldm/tests/meson.build
+++ /dev/null
@@ -1,43 +0,0 @@
-gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
-gmock_dep = dependency('gmock', disabler: true, required: false)
-if not gtest_dep.found() or not gmock_dep.found()
-    gtest_proj = import('cmake').subproject('googletest', required: true)
-    gtest_dep = declare_dependency(
-            dependencies: [
-                dependency('threads'),
-                gtest_proj.dependency('gtest'),
-                gtest_proj.dependency('gtest_main'),
-            ]
-        )
-        gmock_dep = gtest_proj.dependency('gmock')
-endif
-
-
-tests = [
-  'libpldm_base_test',
-  'libpldm_platform_test',
-  'libpldm_bios_test',
-  'libpldm_bios_table_test',
-  'libpldm_fru_test',
-  'libpldm_utils_test',
-  'libpldm_pdr_test',
-  'libpldm_firmware_update_test'
-]
-
-if get_option('oem-ibm').enabled()
-  tests += [
-    'oem/ibm/libpldm_fileio_test',
-    'oem/ibm/libpldm_host_test',
-  ]
-endif
-
-foreach t : tests
-  test(t, executable(t.underscorify(), t + '.cpp',
-                     implicit_include_directories: false,
-                     dependencies: [
-                         libpldm_dep,
-                         gtest_dep,
-                         gmock_dep]),
-       workdir: meson.current_source_dir())
-endforeach
-
diff --git a/subprojects/libpldm/tests/oem/ibm/libpldm_fileio_test.cpp b/subprojects/libpldm/tests/oem/ibm/libpldm_fileio_test.cpp
deleted file mode 100644
index f6c94e7..0000000
--- a/subprojects/libpldm/tests/oem/ibm/libpldm_fileio_test.cpp
+++ /dev/null
@@ -1,2124 +0,0 @@
-#include <string.h>
-
-#include <array>
-
-#include "libpldm/base.h"
-#include "libpldm/file_io.h"
-
-#include <gtest/gtest.h>
-
-constexpr auto hdrSize = sizeof(pldm_msg_hdr);
-
-TEST(ReadWriteFileMemory, testGoodDecodeRequest)
-{
-    std::array<uint8_t, PLDM_RW_FILE_MEM_REQ_BYTES + hdrSize> requestMsg{};
-
-    // Random value for fileHandle, offset, length, address
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x13245768;
-    uint64_t address = 0x124356879ACBDE0F;
-    uint32_t fileHandleLe = htole32(fileHandle);
-    uint32_t offsetLe = htole32(offset);
-    uint32_t lengthLe = htole32(length);
-    uint64_t addressLe = htole64(address);
-
-    memcpy(requestMsg.data() + hdrSize, &fileHandleLe, sizeof(fileHandleLe));
-    memcpy(requestMsg.data() + sizeof(fileHandleLe) + hdrSize, &offsetLe,
-           sizeof(offsetLe));
-    memcpy(requestMsg.data() + sizeof(fileHandleLe) + sizeof(offsetLe) +
-               hdrSize,
-           &lengthLe, sizeof(lengthLe));
-    memcpy(requestMsg.data() + sizeof(fileHandleLe) + sizeof(offsetLe) +
-               sizeof(lengthLe) + hdrSize,
-           &addressLe, sizeof(addressLe));
-
-    uint32_t retFileHandle = 0;
-    uint32_t retOffset = 0;
-    uint32_t retLength = 0;
-    uint64_t retAddress = 0;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Invoke decode the read file memory request
-    auto rc = decode_rw_file_memory_req(request, requestMsg.size() - hdrSize,
-                                        &retFileHandle, &retOffset, &retLength,
-                                        &retAddress);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(fileHandle, retFileHandle);
-    ASSERT_EQ(offset, retOffset);
-    ASSERT_EQ(length, retLength);
-    ASSERT_EQ(address, retAddress);
-}
-
-TEST(ReadWriteFileMemory, testBadDecodeRequest)
-{
-    uint32_t fileHandle = 0;
-    uint32_t offset = 0;
-    uint32_t length = 0;
-    uint64_t address = 0;
-
-    // Request payload message is missing
-    auto rc = decode_rw_file_memory_req(NULL, 0, &fileHandle, &offset, &length,
-                                        &address);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_RW_FILE_MEM_REQ_BYTES> requestMsg{};
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Address is NULL
-    rc = decode_rw_file_memory_req(request, requestMsg.size() - hdrSize,
-                                   &fileHandle, &offset, &length, NULL);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_rw_file_memory_req(request, 0, &fileHandle, &offset, &length,
-                                   &address);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadWriteFileMemory, testGoodEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_RW_FILE_MEM_RESP_BYTES>
-        responseMsg{};
-    uint32_t length = 0xFF00EE11;
-    uint32_t lengthLe = htole32(length);
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // ReadFileIntoMemory
-    auto rc = encode_rw_file_memory_resp(0, PLDM_READ_FILE_INTO_MEMORY,
-                                         PLDM_SUCCESS, length, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_READ_FILE_INTO_MEMORY);
-    ASSERT_EQ(response->payload[0], PLDM_SUCCESS);
-    ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]),
-                        &lengthLe, sizeof(lengthLe)));
-
-    // WriteFileFromMemory
-    rc = encode_rw_file_memory_resp(0, PLDM_WRITE_FILE_FROM_MEMORY,
-                                    PLDM_SUCCESS, length, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_WRITE_FILE_FROM_MEMORY);
-    ASSERT_EQ(response->payload[0], PLDM_SUCCESS);
-    ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]),
-                        &lengthLe, sizeof(lengthLe)));
-}
-
-TEST(ReadWriteFileMemory, testBadEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_RW_FILE_MEM_RESP_BYTES>
-        responseMsg{};
-    uint32_t length = 0;
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // ReadFileIntoMemory
-    auto rc = encode_rw_file_memory_resp(0, PLDM_READ_FILE_INTO_MEMORY,
-                                         PLDM_ERROR, length, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_READ_FILE_INTO_MEMORY);
-    ASSERT_EQ(response->payload[0], PLDM_ERROR);
-
-    // WriteFileFromMemory
-    rc = encode_rw_file_memory_resp(0, PLDM_WRITE_FILE_FROM_MEMORY, PLDM_ERROR,
-                                    length, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_WRITE_FILE_FROM_MEMORY);
-    ASSERT_EQ(response->payload[0], PLDM_ERROR);
-}
-
-TEST(ReadWriteFileIntoMemory, testGoodDecodeResponse)
-{
-    std::array<uint8_t, PLDM_RW_FILE_MEM_RESP_BYTES + hdrSize> responseMsg{};
-    // Random value for length
-    uint32_t length = 0xFF00EE12;
-    uint32_t lengthLe = htole32(length);
-    uint8_t completionCode = 0;
-
-    memcpy(responseMsg.data() + hdrSize, &completionCode,
-           sizeof(completionCode));
-    memcpy(responseMsg.data() + sizeof(completionCode) + hdrSize, &lengthLe,
-           sizeof(lengthLe));
-
-    uint8_t retCompletionCode = 0;
-    uint32_t retLength = 0;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Invoke decode the read file memory response
-    auto rc = decode_rw_file_memory_resp(response, responseMsg.size() - hdrSize,
-                                         &retCompletionCode, &retLength);
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-    ASSERT_EQ(length, retLength);
-}
-
-TEST(ReadWriteFileIntoMemory, testBadDecodeResponse)
-{
-    uint32_t length = 0;
-    uint8_t completionCode = 0;
-
-    // Request payload message is missing
-    auto rc = decode_rw_file_memory_resp(NULL, 0, &completionCode, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_RW_FILE_MEM_RESP_BYTES> responseMsg{};
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Payload length is invalid
-    rc = decode_rw_file_memory_resp(response, 0, &completionCode, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadWriteFileIntoMemory, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_RW_FILE_MEM_REQ_BYTES>
-        requestMsg{};
-
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x13245768;
-    uint64_t address = 0x124356879ACBDE0F;
-    uint32_t fileHandleLe = htole32(fileHandle);
-    uint32_t offsetLe = htole32(offset);
-    uint32_t lengthLe = htole32(length);
-    uint64_t addressLe = htole64(address);
-
-    pldm_msg* request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc =
-        encode_rw_file_memory_req(0, PLDM_READ_FILE_INTO_MEMORY, fileHandle,
-                                  offset, length, address, request);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(request->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(request->hdr.instance_id, 0);
-    ASSERT_EQ(request->hdr.type, PLDM_OEM);
-    ASSERT_EQ(request->hdr.command, PLDM_READ_FILE_INTO_MEMORY);
-
-    ASSERT_EQ(0, memcmp(request->payload, &fileHandleLe, sizeof(fileHandleLe)));
-
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileHandleLe), &offsetLe,
-                        sizeof(offsetLe)));
-    ASSERT_EQ(0,
-              memcmp(request->payload + sizeof(fileHandleLe) + sizeof(offsetLe),
-                     &lengthLe, sizeof(lengthLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileHandleLe) +
-                            sizeof(offsetLe) + sizeof(lengthLe),
-                        &addressLe, sizeof(addressLe)));
-}
-
-TEST(ReadWriteFileIntoMemory, testBadEncodeRequest)
-{
-    uint32_t fileHandle = 0;
-    uint32_t offset = 0;
-    uint32_t length = 0;
-    uint64_t address = 0;
-
-    auto rc =
-        encode_rw_file_memory_req(0, PLDM_READ_FILE_INTO_MEMORY, fileHandle,
-                                  offset, length, address, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetFileTable, GoodDecodeRequest)
-{
-    std::array<uint8_t, PLDM_GET_FILE_TABLE_REQ_BYTES + hdrSize> requestMsg{};
-
-    // Random value for DataTransferHandle, TransferOperationFlag, TableType
-    uint32_t transferHandle = 0x12345678;
-    uint32_t transferHandleLe = htole32(transferHandle);
-    uint8_t transferOpFlag = 1;
-    uint8_t tableType = 1;
-
-    memcpy(requestMsg.data() + hdrSize, &transferHandleLe,
-           sizeof(transferHandleLe));
-    memcpy(requestMsg.data() + sizeof(transferHandle) + hdrSize,
-           &transferOpFlag, sizeof(transferOpFlag));
-    memcpy(requestMsg.data() + sizeof(transferHandle) + sizeof(transferOpFlag) +
-               hdrSize,
-           &tableType, sizeof(tableType));
-
-    uint32_t retTransferHandle = 0;
-    uint8_t retTransferOpFlag = 0;
-    uint8_t retTableType = 0;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Invoke decode get file table request
-    auto rc = decode_get_file_table_req(request, requestMsg.size() - hdrSize,
-                                        &retTransferHandle, &retTransferOpFlag,
-                                        &retTableType);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(transferHandle, retTransferHandle);
-    ASSERT_EQ(transferOpFlag, retTransferOpFlag);
-    ASSERT_EQ(tableType, retTableType);
-}
-
-TEST(GetFileTable, BadDecodeRequest)
-{
-    uint32_t transferHandle = 0;
-    uint8_t transferOpFlag = 0;
-    uint8_t tableType = 0;
-
-    // Request payload message is missing
-    auto rc = decode_get_file_table_req(nullptr, 0, &transferHandle,
-                                        &transferOpFlag, &tableType);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_GET_FILE_TABLE_REQ_BYTES> requestMsg{};
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // TableType is NULL
-    rc = decode_get_file_table_req(request, requestMsg.size() - hdrSize,
-                                   &transferHandle, &transferOpFlag, nullptr);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_get_file_table_req(request, 0, &transferHandle, &transferOpFlag,
-                                   &tableType);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetFileTable, GoodEncodeResponse)
-{
-    // Random value for NextDataTransferHandle and TransferFlag
-    uint8_t completionCode = 0;
-    uint32_t nextTransferHandle = 0x87654321;
-    uint32_t nextTransferHandleLe = htole32(nextTransferHandle);
-    uint8_t transferFlag = 5;
-    // Mock file table contents of size 5
-    std::array<uint8_t, 5> fileTable = {1, 2, 3, 4, 5};
-    constexpr size_t responseSize = sizeof(completionCode) +
-                                    sizeof(nextTransferHandle) +
-                                    sizeof(transferFlag) + fileTable.size();
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + responseSize> responseMsg{};
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // GetFileTable
-    auto rc = encode_get_file_table_resp(0, PLDM_SUCCESS, nextTransferHandle,
-                                         transferFlag, fileTable.data(),
-                                         fileTable.size(), response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_GET_FILE_TABLE);
-    ASSERT_EQ(response->payload[0], PLDM_SUCCESS);
-    ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]),
-                        &nextTransferHandleLe, sizeof(nextTransferHandle)));
-    ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(nextTransferHandle),
-                        &transferFlag, sizeof(transferFlag)));
-    ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(nextTransferHandle),
-                        &transferFlag, sizeof(transferFlag)));
-    ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
-                            sizeof(nextTransferHandle) + sizeof(transferFlag),
-                        fileTable.data(), fileTable.size()));
-}
-
-TEST(GetFileTable, BadEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    uint32_t nextTransferHandle = 0;
-    uint8_t transferFlag = 0;
-    constexpr size_t responseSize = sizeof(completionCode) +
-                                    sizeof(nextTransferHandle) +
-                                    sizeof(transferFlag);
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + responseSize> responseMsg{};
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // GetFileTable
-    auto rc = encode_get_file_table_resp(0, PLDM_ERROR, nextTransferHandle,
-                                         transferFlag, nullptr, 0, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_GET_FILE_TABLE);
-    ASSERT_EQ(response->payload[0], PLDM_ERROR);
-}
-
-TEST(GetFileTable, GoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_FILE_TABLE_REQ_BYTES>
-        requestMsg{};
-    uint32_t transferHandle = 0x0;
-    uint8_t transferOpFlag = 0x01;
-    uint8_t tableType = PLDM_FILE_ATTRIBUTE_TABLE;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_get_file_table_req(0, transferHandle, transferOpFlag,
-                                        tableType, request);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-
-    struct pldm_get_file_table_req* req =
-        reinterpret_cast<struct pldm_get_file_table_req*>(request->payload);
-    EXPECT_EQ(transferHandle, le32toh(req->transfer_handle));
-    EXPECT_EQ(transferOpFlag, req->operation_flag);
-    EXPECT_EQ(tableType, req->table_type);
-}
-
-TEST(GetFileTable, BadEncodeRequest)
-{
-    uint32_t transferHandle = 0x0;
-    uint8_t transferOpFlag = 0x01;
-    uint8_t tableType = PLDM_FILE_ATTRIBUTE_TABLE;
-
-    auto rc = encode_get_file_table_req(0, transferHandle, transferOpFlag,
-                                        tableType, nullptr);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetFileTable, GoodDecodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    std::vector<uint8_t> fileTableData = {1, 2, 3, 4, 5, 6, 7, 8, 9};
-
-    std::vector<uint8_t> responseMsg(
-        hdrSize + PLDM_GET_FILE_TABLE_MIN_RESP_BYTES + fileTableData.size());
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - hdrSize;
-
-    auto resp = reinterpret_cast<struct pldm_get_file_table_resp*>(
-        responsePtr->payload);
-
-    resp->completion_code = completionCode;
-    resp->next_transfer_handle = htole32(nextTransferHandle);
-    resp->transfer_flag = transferFlag;
-    memcpy(resp->table_data, fileTableData.data(), fileTableData.size());
-
-    uint8_t retCompletionCode;
-    uint32_t retNextTransferHandle;
-    uint8_t retTransferFlag;
-    std::vector<uint8_t> retFileTableData(9, 0);
-    size_t retFileTableDataLength = 0;
-
-    auto rc = decode_get_file_table_resp(
-        responsePtr, payload_length, &retCompletionCode, &retNextTransferHandle,
-        &retTransferFlag, retFileTableData.data(), &retFileTableDataLength);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-    ASSERT_EQ(nextTransferHandle, retNextTransferHandle);
-    ASSERT_EQ(transferFlag, retTransferFlag);
-    ASSERT_EQ(0, memcmp(fileTableData.data(), resp->table_data,
-                        retFileTableDataLength));
-    ASSERT_EQ(fileTableData.size(), retFileTableDataLength);
-}
-
-TEST(GetFileTable, BadDecodeResponse)
-{
-    uint32_t nextTransferHandle = 32;
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint8_t transferFlag = PLDM_START_AND_END;
-    std::vector<uint8_t> fileTableData(9, 0);
-    size_t file_table_data_length = 0;
-
-    std::vector<uint8_t> responseMsg(
-        hdrSize + PLDM_GET_FILE_TABLE_MIN_RESP_BYTES + fileTableData.size());
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = decode_get_file_table_resp(
-        nullptr, 0, &completionCode, &nextTransferHandle, &transferFlag,
-        fileTableData.data(), &file_table_data_length);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    rc = decode_get_file_table_resp(
-        responsePtr, 0, &completionCode, &nextTransferHandle, &transferFlag,
-        fileTableData.data(), &file_table_data_length);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadFile, testGoodDecodeRequest)
-{
-    std::array<uint8_t, PLDM_READ_FILE_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    size_t payload_length = requestMsg.size() - sizeof(pldm_msg_hdr);
-    auto request = reinterpret_cast<pldm_read_file_req*>(requestPtr->payload);
-
-    // Random value for fileHandle, offset and length
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x13245768;
-
-    request->file_handle = htole32(fileHandle);
-    request->offset = htole32(offset);
-    request->length = htole32(length);
-
-    uint32_t retFileHandle = 0;
-    uint32_t retOffset = 0;
-    uint32_t retLength = 0;
-
-    // Invoke decode the read file request
-    auto rc = decode_read_file_req(requestPtr, payload_length, &retFileHandle,
-                                   &retOffset, &retLength);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(fileHandle, retFileHandle);
-    ASSERT_EQ(offset, retOffset);
-    ASSERT_EQ(length, retLength);
-}
-
-TEST(WriteFile, testGoodDecodeRequest)
-{
-    // Random value for fileHandle, offset, length and file data
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x467;
-
-    std::vector<uint8_t> requestMsg(PLDM_WRITE_FILE_REQ_BYTES +
-                                    sizeof(pldm_msg_hdr) + length);
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    size_t payload_length = requestMsg.size() - sizeof(pldm_msg_hdr);
-    auto request = reinterpret_cast<pldm_write_file_req*>(requestPtr->payload);
-
-    size_t fileDataOffset =
-        sizeof(fileHandle) + sizeof(offset) + sizeof(length);
-
-    request->file_handle = htole32(fileHandle);
-    request->offset = htole32(offset);
-    request->length = htole32(length);
-
-    uint32_t retFileHandle = 0;
-    uint32_t retOffset = 0;
-    uint32_t retLength = 0;
-    size_t retFileDataOffset = 0;
-
-    // Invoke decode the write file request
-    auto rc = decode_write_file_req(requestPtr, payload_length, &retFileHandle,
-                                    &retOffset, &retLength, &retFileDataOffset);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(fileHandle, retFileHandle);
-    ASSERT_EQ(offset, retOffset);
-    ASSERT_EQ(length, retLength);
-    ASSERT_EQ(fileDataOffset, retFileDataOffset);
-}
-
-TEST(ReadFile, testGoodDecodeResponse)
-{
-    // Random value for length
-    uint32_t length = 0x10;
-    uint8_t completionCode = PLDM_SUCCESS;
-
-    std::vector<uint8_t> responseMsg(PLDM_READ_FILE_RESP_BYTES +
-                                     sizeof(pldm_msg_hdr) + length);
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response =
-        reinterpret_cast<pldm_read_file_resp*>(responsePtr->payload);
-
-    response->completion_code = completionCode;
-    response->length = htole32(length);
-
-    size_t fileDataOffset = sizeof(completionCode) + sizeof(length);
-
-    uint32_t retLength = 0;
-    uint8_t retCompletionCode = 0;
-    size_t retFileDataOffset = 0;
-
-    // Invoke decode the read file response
-    auto rc =
-        decode_read_file_resp(responsePtr, payload_length, &retCompletionCode,
-                              &retLength, &retFileDataOffset);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-    ASSERT_EQ(length, retLength);
-    ASSERT_EQ(fileDataOffset, retFileDataOffset);
-}
-
-TEST(WriteFile, testGoodDecodeResponse)
-{
-    std::array<uint8_t, PLDM_WRITE_FILE_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response =
-        reinterpret_cast<pldm_write_file_resp*>(responsePtr->payload);
-
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t length = 0x4678;
-
-    response->completion_code = completionCode;
-    response->length = htole32(length);
-
-    uint32_t retLength = 0;
-    uint8_t retCompletionCode = 0;
-
-    // Invoke decode the write file response
-    auto rc = decode_write_file_resp(responsePtr, payload_length,
-                                     &retCompletionCode, &retLength);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-    ASSERT_EQ(length, retLength);
-}
-
-TEST(ReadWriteFile, testBadDecodeResponse)
-{
-    uint32_t length = 0;
-    uint8_t completionCode = 0;
-    size_t fileDataOffset = 0;
-
-    // Bad decode response for read file
-    std::vector<uint8_t> responseMsg(PLDM_READ_FILE_RESP_BYTES +
-                                     sizeof(pldm_msg_hdr) + length);
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Request payload message is missing
-    auto rc = decode_read_file_resp(NULL, 0, &completionCode, &length,
-                                    &fileDataOffset);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_read_file_resp(responsePtr, 0, &completionCode, &length,
-                               &fileDataOffset);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    // Bad decode response for write file
-    std::array<uint8_t, PLDM_WRITE_FILE_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsgWr{};
-    auto responseWr = reinterpret_cast<pldm_msg*>(responseMsgWr.data());
-
-    // Request payload message is missing
-    rc = decode_write_file_resp(NULL, 0, &completionCode, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_write_file_resp(responseWr, 0, &completionCode, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadWriteFile, testBadDecodeRequest)
-{
-    uint32_t fileHandle = 0;
-    uint32_t offset = 0;
-    uint32_t length = 0;
-
-    // Bad decode request for read file
-    std::array<uint8_t, PLDM_READ_FILE_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Request payload message is missing
-    auto rc = decode_read_file_req(NULL, 0, &fileHandle, &offset, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_read_file_req(requestPtr, 0, &fileHandle, &offset, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    // Bad decode request for write file
-    size_t fileDataOffset = 0;
-    std::array<uint8_t, PLDM_WRITE_FILE_REQ_BYTES> requestMsgWr{};
-    auto requestWr = reinterpret_cast<pldm_msg*>(requestMsgWr.data());
-
-    // Request payload message is missing
-    rc = decode_write_file_req(NULL, 0, &fileHandle, &offset, &length,
-                               &fileDataOffset);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_write_file_req(requestWr, 0, &fileHandle, &offset, &length,
-                               &fileDataOffset);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadFile, testGoodEncodeResponse)
-{
-    // Good encode response for read file
-    uint32_t length = 0x4;
-
-    std::vector<uint8_t> responseMsg(PLDM_READ_FILE_RESP_BYTES +
-                                     sizeof(pldm_msg_hdr) + length);
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    auto response =
-        reinterpret_cast<pldm_read_file_resp*>(responsePtr->payload);
-
-    // ReadFile
-    auto rc = encode_read_file_resp(0, PLDM_SUCCESS, length, responsePtr);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(responsePtr->hdr.instance_id, 0);
-    ASSERT_EQ(responsePtr->hdr.type, PLDM_OEM);
-    ASSERT_EQ(responsePtr->hdr.command, PLDM_READ_FILE);
-    ASSERT_EQ(response->completion_code, PLDM_SUCCESS);
-    ASSERT_EQ(le32toh(response->length), length);
-}
-
-TEST(WriteFile, testGoodEncodeResponse)
-{
-    uint32_t length = 0x467;
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_WRITE_FILE_RESP_BYTES>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    auto response =
-        reinterpret_cast<pldm_write_file_resp*>(responsePtr->payload);
-
-    // WriteFile
-    auto rc = encode_write_file_resp(0, PLDM_SUCCESS, length, responsePtr);
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(responsePtr->hdr.instance_id, 0);
-    ASSERT_EQ(responsePtr->hdr.type, PLDM_OEM);
-    ASSERT_EQ(responsePtr->hdr.command, PLDM_WRITE_FILE);
-    ASSERT_EQ(response->completion_code, PLDM_SUCCESS);
-    ASSERT_EQ(le32toh(response->length), length);
-}
-
-TEST(ReadFile, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_READ_FILE_REQ_BYTES>
-        requestMsg{};
-
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x13245768;
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto request = reinterpret_cast<pldm_read_file_req*>(requestPtr->payload);
-
-    // ReadFile
-    auto rc = encode_read_file_req(0, fileHandle, offset, length, requestPtr);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(requestPtr->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(requestPtr->hdr.instance_id, 0);
-    ASSERT_EQ(requestPtr->hdr.type, PLDM_OEM);
-    ASSERT_EQ(requestPtr->hdr.command, PLDM_READ_FILE);
-    ASSERT_EQ(le32toh(request->file_handle), fileHandle);
-    ASSERT_EQ(le32toh(request->offset), offset);
-    ASSERT_EQ(le32toh(request->length), length);
-}
-
-TEST(WriteFile, testGoodEncodeRequest)
-{
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x456;
-
-    std::vector<uint8_t> requestMsg(PLDM_WRITE_FILE_REQ_BYTES +
-                                    sizeof(pldm_msg_hdr) + length);
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto request = reinterpret_cast<pldm_write_file_req*>(requestPtr->payload);
-
-    // WriteFile
-    auto rc = encode_write_file_req(0, fileHandle, offset, length, requestPtr);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(requestPtr->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(requestPtr->hdr.instance_id, 0);
-    ASSERT_EQ(requestPtr->hdr.type, PLDM_OEM);
-    ASSERT_EQ(requestPtr->hdr.command, PLDM_WRITE_FILE);
-    ASSERT_EQ(le32toh(request->file_handle), fileHandle);
-    ASSERT_EQ(le32toh(request->offset), offset);
-    ASSERT_EQ(le32toh(request->length), length);
-}
-
-TEST(ReadWriteFile, testBadEncodeRequest)
-{
-    // Bad encode request for read file
-    uint32_t fileHandle = 0;
-    uint32_t offset = 0;
-    uint32_t length = 0;
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_READ_FILE_REQ_BYTES>
-        requestMsg{};
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // ReadFile check invalid file length
-    auto rc = encode_read_file_req(0, fileHandle, offset, length, requestPtr);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-
-    // Bad encode request for write file
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_WRITE_FILE_REQ_BYTES>
-        requestMsgWr{};
-    auto requestWr = reinterpret_cast<pldm_msg*>(requestMsgWr.data());
-
-    // WriteFile check for invalid file length
-    rc = encode_write_file_req(0, fileHandle, offset, length, requestWr);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadWriteFile, testBadEncodeResponse)
-{
-    // Bad encode response for read file
-    uint32_t length = 0;
-
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_READ_FILE_RESP_BYTES>
-        responseMsg{};
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // ReadFile
-    auto rc = encode_read_file_resp(0, PLDM_ERROR, length, responsePtr);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(responsePtr->hdr.instance_id, 0);
-    ASSERT_EQ(responsePtr->hdr.type, PLDM_OEM);
-    ASSERT_EQ(responsePtr->hdr.command, PLDM_READ_FILE);
-    ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR);
-
-    // Bad encode response for write file
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_WRITE_FILE_RESP_BYTES>
-        responseMsgWr{};
-    auto responseWr = reinterpret_cast<pldm_msg*>(responseMsgWr.data());
-
-    // WriteFile
-    rc = encode_write_file_resp(0, PLDM_ERROR, length, responseWr);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(responseWr->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(responseWr->hdr.instance_id, 0);
-    ASSERT_EQ(responseWr->hdr.type, PLDM_OEM);
-    ASSERT_EQ(responseWr->hdr.command, PLDM_WRITE_FILE);
-    ASSERT_EQ(responseWr->payload[0], PLDM_ERROR);
-}
-
-TEST(ReadWriteFileByTypeMemory, testGoodDecodeRequest)
-{
-    std::array<uint8_t,
-               PLDM_RW_FILE_BY_TYPE_MEM_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    size_t payload_length = requestMsg.size() - sizeof(pldm_msg_hdr);
-    auto request = reinterpret_cast<pldm_read_write_file_by_type_memory_req*>(
-        requestPtr->payload);
-
-    // Random value for fileHandle, offset and length
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x13245768;
-    uint64_t address = 0x124356879ACBD456;
-
-    request->file_type = htole16(fileType);
-    request->file_handle = htole32(fileHandle);
-    request->offset = htole32(offset);
-    request->length = htole32(length);
-    request->address = htole64(address);
-
-    uint16_t retFileType = 0x1;
-    uint32_t retFileHandle = 0;
-    uint32_t retOffset = 0;
-    uint32_t retLength = 0;
-    uint64_t retAddress = 0;
-
-    // Invoke decode the read file request
-    auto rc = decode_rw_file_by_type_memory_req(
-        requestPtr, payload_length, &retFileType, &retFileHandle, &retOffset,
-        &retLength, &retAddress);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(fileType, retFileType);
-    ASSERT_EQ(fileHandle, retFileHandle);
-    ASSERT_EQ(offset, retOffset);
-    ASSERT_EQ(length, retLength);
-    ASSERT_EQ(address, retAddress);
-}
-
-TEST(ReadWriteFileByTypeMemory, testGoodDecodeResponse)
-{
-    std::array<uint8_t,
-               PLDM_RW_FILE_BY_TYPE_MEM_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response = reinterpret_cast<pldm_read_write_file_by_type_memory_resp*>(
-        responsePtr->payload);
-
-    // Random value for completion code and length
-    uint8_t completionCode = 0x0;
-    uint32_t length = 0x13245768;
-
-    response->completion_code = completionCode;
-    response->length = htole32(length);
-
-    uint8_t retCompletionCode = 0x1;
-    uint32_t retLength = 0;
-
-    // Invoke decode the read/write file response
-    auto rc = decode_rw_file_by_type_memory_resp(
-        responsePtr, payload_length, &retCompletionCode, &retLength);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-    ASSERT_EQ(length, retLength);
-}
-
-TEST(ReadWriteFileByTypeMemory, testBadDecodeRequest)
-{
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0;
-    uint32_t offset = 0;
-    uint32_t length = 0;
-    uint64_t address = 0;
-
-    // Request payload message is missing
-    auto rc = decode_rw_file_by_type_memory_req(NULL, 0, &fileType, &fileHandle,
-                                                &offset, &length, &address);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t,
-               PLDM_RW_FILE_BY_TYPE_MEM_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Address is NULL
-    rc = decode_rw_file_by_type_memory_req(
-        requestPtr, requestMsg.size() - hdrSize, &fileType, &fileHandle,
-        &offset, &length, NULL);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_rw_file_by_type_memory_req(
-        requestPtr, 0, &fileType, &fileHandle, &offset, &length, &address);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadWriteFileByTypeMemory, testBadDecodeResponse)
-{
-    uint32_t length = 0;
-    uint8_t completionCode = 0;
-
-    // Request payload message is missing
-    auto rc =
-        decode_rw_file_by_type_memory_resp(NULL, 0, &completionCode, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t,
-               PLDM_RW_FILE_BY_TYPE_MEM_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Length is NULL
-    rc = decode_rw_file_by_type_memory_resp(
-        responsePtr, responseMsg.size() - hdrSize, &completionCode, NULL);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_rw_file_by_type_memory_resp(responsePtr, 0, &completionCode,
-                                            &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadWriteFileByTypeMemory, testGoodEncodeRequest)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_RW_FILE_BY_TYPE_MEM_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x13245768;
-    uint64_t address = 0x124356879ACBDE0F;
-    uint16_t fileTypeLe = htole16(fileType);
-    uint32_t fileHandleLe = htole32(fileHandle);
-    uint32_t offsetLe = htole32(offset);
-    uint32_t lengthLe = htole32(length);
-    uint64_t addressLe = htole64(address);
-
-    pldm_msg* request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_rw_file_by_type_memory_req(
-        0, PLDM_READ_FILE_BY_TYPE_INTO_MEMORY, fileType, fileHandle, offset,
-        length, address, request);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(request->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(request->hdr.instance_id, 0);
-    ASSERT_EQ(request->hdr.type, PLDM_OEM);
-    ASSERT_EQ(request->hdr.command, PLDM_READ_FILE_BY_TYPE_INTO_MEMORY);
-
-    ASSERT_EQ(0, memcmp(request->payload, &fileTypeLe, sizeof(fileTypeLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe), &fileHandleLe,
-                        sizeof(fileHandleLe)));
-
-    ASSERT_EQ(
-        0, memcmp(request->payload + sizeof(fileTypeLe) + sizeof(fileHandleLe),
-                  &offsetLe, sizeof(offsetLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(offsetLe),
-                        &lengthLe, sizeof(lengthLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(offsetLe) +
-                            sizeof(lengthLe),
-                        &addressLe, sizeof(addressLe)));
-}
-
-TEST(ReadWriteFileByTypeMemory, testGoodEncodeResponse)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_RW_FILE_BY_TYPE_MEM_RESP_BYTES>
-        responseMsg{};
-
-    uint32_t length = 0x13245768;
-    uint32_t lengthLe = htole32(length);
-    uint8_t completionCode = 0x0;
-
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_rw_file_by_type_memory_resp(
-        0, PLDM_READ_FILE_BY_TYPE_INTO_MEMORY, completionCode, length,
-        response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_READ_FILE_BY_TYPE_INTO_MEMORY);
-
-    ASSERT_EQ(
-        0, memcmp(response->payload, &completionCode, sizeof(completionCode)));
-    ASSERT_EQ(0, memcmp(response->payload + sizeof(completionCode), &lengthLe,
-                        sizeof(lengthLe)));
-}
-
-TEST(ReadWriteFileByTypeMemory, testBadEncodeResponse)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_RW_FILE_BY_TYPE_MEM_RESP_BYTES>
-        responseMsg{};
-    uint32_t length = 0;
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // completion code is PLDM_ERROR
-    auto rc = encode_rw_file_by_type_memory_resp(
-        0, PLDM_READ_FILE_BY_TYPE_INTO_MEMORY, PLDM_ERROR, length, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_READ_FILE_BY_TYPE_INTO_MEMORY);
-    ASSERT_EQ(response->payload[0], PLDM_ERROR);
-
-    // response is NULL pointer
-    rc = encode_rw_file_by_type_memory_resp(
-        0, PLDM_READ_FILE_BY_TYPE_INTO_MEMORY, PLDM_SUCCESS, length, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(ReadWriteFileByTypeMemory, testBadEncodeRequest)
-{
-    uint8_t fileType = 0;
-    uint32_t fileHandle = 0;
-    uint32_t offset = 0;
-    uint32_t length = 0;
-    uint64_t address = 0;
-
-    // request is NULL pointer
-    auto rc = encode_rw_file_by_type_memory_req(
-        0, PLDM_READ_FILE_BY_TYPE_INTO_MEMORY, fileType, fileHandle, offset,
-        length, address, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(NewFile, testGoodDecodeRequest)
-{
-    std::array<uint8_t, PLDM_NEW_FILE_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    size_t payload_length = requestMsg.size() - sizeof(pldm_msg_hdr);
-    auto request = reinterpret_cast<pldm_new_file_req*>(requestPtr->payload);
-
-    // Random value for fileHandle and length
-    uint16_t fileType = 0xFF;
-    uint32_t fileHandle = 0x12345678;
-    uint64_t length = 0x13245768;
-
-    request->file_type = htole16(fileType);
-    request->file_handle = htole32(fileHandle);
-    request->length = htole64(length);
-
-    uint16_t retFileType = 0xFF;
-    uint32_t retFileHandle = 0;
-    uint64_t retLength = 0;
-
-    // Invoke decode the read file request
-    auto rc = decode_new_file_req(requestPtr, payload_length, &retFileType,
-                                  &retFileHandle, &retLength);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(fileType, retFileType);
-    ASSERT_EQ(fileHandle, retFileHandle);
-    ASSERT_EQ(length, retLength);
-}
-
-TEST(NewFile, testGoodDecodeResponse)
-{
-    std::array<uint8_t, PLDM_NEW_FILE_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response = reinterpret_cast<pldm_new_file_resp*>(responsePtr->payload);
-
-    // Random value for completion code
-    uint8_t completionCode = 0x0;
-
-    response->completion_code = completionCode;
-
-    uint8_t retCompletionCode = PLDM_SUCCESS;
-
-    // Invoke decode the read/write file response
-    auto rc =
-        decode_new_file_resp(responsePtr, payload_length, &retCompletionCode);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-}
-
-TEST(NewFile, testBadDecodeRequest)
-{
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0;
-    uint64_t length = 0;
-
-    // Request payload message is missing
-    auto rc = decode_new_file_req(NULL, 0, &fileType, &fileHandle, &length);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_NEW_FILE_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Payload length is invalid
-    rc = decode_new_file_req(requestPtr, 0, &fileType, &fileHandle, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(NewFile, testBadDecodeResponse)
-{
-    uint8_t completionCode = 0;
-
-    // Request payload message is missing
-    auto rc = decode_new_file_resp(NULL, 0, &completionCode);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_NEW_FILE_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Payload length is invalid
-    rc = decode_new_file_resp(responsePtr, 0, &completionCode);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(NewFile, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_NEW_FILE_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t fileType = 0xFF;
-    uint32_t fileHandle = 0x12345678;
-    uint32_t length = 0x13245768;
-    uint16_t fileTypeLe = htole16(fileType);
-    uint32_t fileHandleLe = htole32(fileHandle);
-    uint32_t lengthLe = htole32(length);
-
-    pldm_msg* request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_new_file_req(0, fileType, fileHandle, length, request);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(request->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(request->hdr.instance_id, 0);
-    ASSERT_EQ(request->hdr.type, PLDM_OEM);
-    ASSERT_EQ(request->hdr.command, PLDM_NEW_FILE_AVAILABLE);
-    ASSERT_EQ(0, memcmp(request->payload, &fileTypeLe, sizeof(fileTypeLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe), &fileHandleLe,
-                        sizeof(fileHandleLe)));
-    ASSERT_EQ(
-        0, memcmp(request->payload + sizeof(fileTypeLe) + sizeof(fileHandleLe),
-                  &lengthLe, sizeof(lengthLe)));
-}
-
-TEST(NewFile, testGoodEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_NEW_FILE_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t completionCode = 0x0;
-
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_new_file_resp(0, completionCode, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_NEW_FILE_AVAILABLE);
-    ASSERT_EQ(
-        0, memcmp(response->payload, &completionCode, sizeof(completionCode)));
-}
-
-TEST(NewFile, testBadEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_NEW_FILE_RESP_BYTES>
-        responseMsg{};
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // completion code is PLDM_ERROR
-    auto rc = encode_new_file_resp(0, PLDM_ERROR, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_NEW_FILE_AVAILABLE);
-    ASSERT_EQ(response->payload[0], PLDM_ERROR);
-
-    // response is NULL pointer
-    rc = encode_new_file_resp(0, PLDM_SUCCESS, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(NewFile, testBadEncodeRequest)
-{
-    uint8_t fileType = 0xFF;
-    uint32_t fileHandle = 0;
-    uint32_t length = 0;
-
-    // request is NULL pointer
-    auto rc = encode_new_file_req(0, fileType, fileHandle, length, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(ReadWriteFileByType, testGoodDecodeRequest)
-{
-    std::array<uint8_t, PLDM_RW_FILE_BY_TYPE_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    size_t payload_length = requestMsg.size() - sizeof(pldm_msg_hdr);
-    auto request = reinterpret_cast<pldm_read_write_file_by_type_req*>(
-        requestPtr->payload);
-
-    // Random value for fileHandle, offset and length
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x13245768;
-
-    request->file_handle = htole32(fileHandle);
-    request->offset = htole32(offset);
-    request->length = htole32(length);
-
-    uint16_t retFileType = 0x1;
-    uint32_t retFileHandle = 0;
-    uint32_t retOffset = 0;
-    uint32_t retLength = 0;
-
-    // Invoke decode the read file request
-    auto rc =
-        decode_rw_file_by_type_req(requestPtr, payload_length, &retFileType,
-                                   &retFileHandle, &retOffset, &retLength);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(fileType, retFileType);
-    ASSERT_EQ(fileHandle, retFileHandle);
-    ASSERT_EQ(offset, retOffset);
-    ASSERT_EQ(length, retLength);
-}
-
-TEST(ReadWriteFileByType, testGoodDecodeResponse)
-{
-    std::array<uint8_t, PLDM_RW_FILE_BY_TYPE_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response = reinterpret_cast<pldm_read_write_file_by_type_resp*>(
-        responsePtr->payload);
-
-    // Random value for completion code and length
-    uint8_t completionCode = 0x0;
-    uint32_t length = 0x13245768;
-
-    response->completion_code = completionCode;
-    response->length = htole32(length);
-
-    uint8_t retCompletionCode = 0x1;
-    uint32_t retLength = 0;
-
-    // Invoke decode the read/write file response
-    auto rc = decode_rw_file_by_type_resp(responsePtr, payload_length,
-                                          &retCompletionCode, &retLength);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-    ASSERT_EQ(length, retLength);
-}
-
-TEST(ReadWriteFileByType, testBadDecodeRequest)
-{
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0;
-    uint32_t offset = 0;
-    uint32_t length = 0;
-
-    // Request payload message is missing
-    auto rc = decode_rw_file_by_type_req(NULL, 0, &fileType, &fileHandle,
-                                         &offset, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_RW_FILE_BY_TYPE_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Payload length is invalid
-    rc = decode_rw_file_by_type_req(requestPtr, 0, &fileType, &fileHandle,
-                                    &offset, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadWriteFileByType, testBadDecodeResponse)
-{
-    uint32_t length = 0;
-    uint8_t completionCode = 0;
-
-    // Request payload message is missing
-    auto rc = decode_rw_file_by_type_resp(NULL, 0, &completionCode, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_RW_FILE_BY_TYPE_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Length is NULL
-    rc = decode_rw_file_by_type_resp(responsePtr, responseMsg.size() - hdrSize,
-                                     &completionCode, NULL);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    // Payload length is invalid
-    rc = decode_rw_file_by_type_resp(responsePtr, 0, &completionCode, &length);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(ReadWriteFileByType, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_RW_FILE_BY_TYPE_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0x12345678;
-    uint32_t offset = 0x87654321;
-    uint32_t length = 0x13245768;
-    uint16_t fileTypeLe = htole16(fileType);
-    uint32_t fileHandleLe = htole32(fileHandle);
-    uint32_t offsetLe = htole32(offset);
-    uint32_t lengthLe = htole32(length);
-
-    pldm_msg* request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_rw_file_by_type_req(0, PLDM_READ_FILE_BY_TYPE, fileType,
-                                         fileHandle, offset, length, request);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(request->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(request->hdr.instance_id, 0);
-    ASSERT_EQ(request->hdr.type, PLDM_OEM);
-    ASSERT_EQ(request->hdr.command, PLDM_READ_FILE_BY_TYPE);
-
-    ASSERT_EQ(0, memcmp(request->payload, &fileTypeLe, sizeof(fileTypeLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe), &fileHandleLe,
-                        sizeof(fileHandleLe)));
-
-    ASSERT_EQ(
-        0, memcmp(request->payload + sizeof(fileTypeLe) + sizeof(fileHandleLe),
-                  &offsetLe, sizeof(offsetLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(offsetLe),
-                        &lengthLe, sizeof(lengthLe)));
-}
-
-TEST(ReadWriteFileByType, testGoodEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_RW_FILE_BY_TYPE_RESP_BYTES>
-        responseMsg{};
-
-    uint32_t length = 0x13245768;
-    uint32_t lengthLe = htole32(length);
-    uint8_t completionCode = 0x0;
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_rw_file_by_type_resp(0, PLDM_READ_FILE_BY_TYPE,
-                                          completionCode, length, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_READ_FILE_BY_TYPE);
-
-    ASSERT_EQ(
-        0, memcmp(response->payload, &completionCode, sizeof(completionCode)));
-    ASSERT_EQ(0, memcmp(response->payload + sizeof(completionCode), &lengthLe,
-                        sizeof(lengthLe)));
-}
-
-TEST(ReadWriteFileByType, testBadEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_RW_FILE_BY_TYPE_RESP_BYTES>
-        responseMsg{};
-    uint32_t length = 0;
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // completion code is PLDM_ERROR
-    auto rc = encode_rw_file_by_type_resp(0, PLDM_READ_FILE_BY_TYPE, PLDM_ERROR,
-                                          length, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_READ_FILE_BY_TYPE);
-    ASSERT_EQ(response->payload[0], PLDM_ERROR);
-
-    // response is NULL pointer
-    rc = encode_rw_file_by_type_resp(0, PLDM_READ_FILE_BY_TYPE, PLDM_SUCCESS,
-                                     length, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(ReadWriteFileByType, testBadEncodeRequest)
-{
-    uint8_t fileType = 0;
-    uint32_t fileHandle = 0;
-    uint32_t offset = 0;
-    uint32_t length = 0;
-
-    // request is NULL pointer
-    auto rc = encode_rw_file_by_type_req(0, PLDM_READ_FILE_BY_TYPE, fileType,
-                                         fileHandle, offset, length, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(FileAck, testGoodDecodeRequest)
-{
-    std::array<uint8_t, PLDM_FILE_ACK_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    size_t payload_length = requestMsg.size() - sizeof(pldm_msg_hdr);
-    auto request = reinterpret_cast<pldm_file_ack_req*>(requestPtr->payload);
-
-    // Random value for fileHandle
-    uint16_t fileType = 0xFFFF;
-    uint32_t fileHandle = 0x12345678;
-    uint8_t fileStatus = 0xFF;
-
-    request->file_type = htole16(fileType);
-    request->file_handle = htole32(fileHandle);
-    request->file_status = fileStatus;
-
-    uint16_t retFileType = 0xFF;
-    uint32_t retFileHandle = 0;
-    uint8_t retFileStatus = 0;
-
-    // Invoke decode the read file request
-    auto rc = decode_file_ack_req(requestPtr, payload_length, &retFileType,
-                                  &retFileHandle, &retFileStatus);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(fileType, retFileType);
-    ASSERT_EQ(fileHandle, retFileHandle);
-    ASSERT_EQ(fileStatus, retFileStatus);
-}
-
-TEST(FileAck, testGoodDecodeResponse)
-{
-    std::array<uint8_t, PLDM_FILE_ACK_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response = reinterpret_cast<pldm_file_ack_resp*>(responsePtr->payload);
-
-    // Random value for completion code
-    uint8_t completionCode = 0x0;
-
-    response->completion_code = completionCode;
-
-    uint8_t retCompletionCode = PLDM_SUCCESS;
-
-    // Invoke decode the read/write file response
-    auto rc =
-        decode_file_ack_resp(responsePtr, payload_length, &retCompletionCode);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-}
-
-TEST(FileAck, testBadDecodeRequest)
-{
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0;
-    uint8_t fileStatus = 0;
-
-    // Request payload message is missing
-    auto rc = decode_file_ack_req(NULL, 0, &fileType, &fileHandle, &fileStatus);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_FILE_ACK_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Payload length is invalid
-    rc =
-        decode_file_ack_req(requestPtr, 0, &fileType, &fileHandle, &fileStatus);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(FileAck, testBadDecodeResponse)
-{
-    uint8_t completionCode = 0;
-
-    // Request payload message is missing
-    auto rc = decode_file_ack_resp(NULL, 0, &completionCode);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_FILE_ACK_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Payload length is invalid
-    rc = decode_file_ack_resp(responsePtr, 0, &completionCode);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(FileAck, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_FILE_ACK_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t fileType = 0xFFFF;
-    uint32_t fileHandle = 0x12345678;
-    uint8_t fileStatus = 0xFF;
-    uint16_t fileTypeLe = htole16(fileType);
-    uint32_t fileHandleLe = htole32(fileHandle);
-
-    pldm_msg* request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_file_ack_req(0, fileType, fileHandle, fileStatus, request);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(request->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(request->hdr.instance_id, 0);
-    ASSERT_EQ(request->hdr.type, PLDM_OEM);
-    ASSERT_EQ(request->hdr.command, PLDM_FILE_ACK);
-    ASSERT_EQ(0, memcmp(request->payload, &fileTypeLe, sizeof(fileTypeLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe), &fileHandleLe,
-                        sizeof(fileHandleLe)));
-}
-
-TEST(FileAck, testGoodEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_FILE_ACK_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t completionCode = 0x0;
-
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_file_ack_resp(0, completionCode, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_FILE_ACK);
-    ASSERT_EQ(
-        0, memcmp(response->payload, &completionCode, sizeof(completionCode)));
-}
-
-TEST(FileAck, testBadEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_FILE_ACK_RESP_BYTES>
-        responseMsg{};
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // completion code is PLDM_ERROR
-    auto rc = encode_file_ack_resp(0, PLDM_ERROR, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_FILE_ACK);
-    ASSERT_EQ(response->payload[0], PLDM_ERROR);
-
-    // response is NULL pointer
-    rc = encode_file_ack_resp(0, PLDM_SUCCESS, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(FileAck, testBadEncodeRequest)
-{
-    uint8_t fileType = 0xFF;
-    uint32_t fileHandle = 0;
-    uint8_t fileStatus = 0;
-
-    // request is NULL pointer
-    auto rc = encode_file_ack_req(0, fileType, fileHandle, fileStatus, nullptr);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(FileAckWithMetadata, testGoodEncodeResponse)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t completionCode = 0x0;
-
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_file_ack_with_meta_data_resp(0, completionCode, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_FILE_ACK_WITH_META_DATA);
-    ASSERT_EQ(
-        0, memcmp(response->payload, &completionCode, sizeof(completionCode)));
-}
-
-TEST(FileAckWithMetadata, testBadEncodeResponse)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES>
-        responseMsg{};
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // completion code is PLDM_ERROR
-    auto rc = encode_file_ack_with_meta_data_resp(0, PLDM_ERROR, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_FILE_ACK_WITH_META_DATA);
-    ASSERT_EQ(response->payload[0], PLDM_ERROR);
-
-    // response is NULL pointer
-    rc = encode_file_ack_with_meta_data_resp(0, PLDM_SUCCESS, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(FileAckWithMetadata, testGoodDecodeResponse)
-{
-    std::array<uint8_t,
-               PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response = reinterpret_cast<pldm_file_ack_with_meta_data_resp*>(
-        responsePtr->payload);
-
-    // Random value for completion code
-    uint8_t completionCode = 0x0;
-
-    response->completion_code = completionCode;
-
-    uint8_t retCompletionCode = PLDM_SUCCESS;
-
-    // Invoke decode the read/write file response
-    auto rc = decode_file_ack_with_meta_data_resp(responsePtr, payload_length,
-                                                  &retCompletionCode);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-}
-
-TEST(FileAckWithMetadata, testBadDecodeResponse)
-{
-    uint8_t completionCode = 0;
-
-    // Request payload message is missing
-    auto rc = decode_file_ack_with_meta_data_resp(NULL, 0, &completionCode);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t,
-               PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES + sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Payload length is invalid
-    rc = decode_file_ack_with_meta_data_resp(responsePtr, 0, &completionCode);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(FileAckWithMetadata, testGoodEncodeRequest)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_FILE_ACK_WITH_META_DATA_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t fileType = 0xFFFF;
-    uint32_t fileHandle = 0x12345678;
-    uint8_t fileStatus = 0xFF;
-    uint32_t fileMetaData1 = 0xFFFFFFFF;
-    uint32_t fileMetaData2 = 0xFFFFFFFF;
-    uint32_t fileMetaData3 = 0xFFFFFFFF;
-    uint32_t fileMetaData4 = 0xFFFFFFFF;
-
-    uint16_t fileTypeLe = htole16(fileType);
-    uint32_t fileHandleLe = htole32(fileHandle);
-    uint32_t fileMetaData1Le = htole32(fileMetaData1);
-    uint32_t fileMetaData2Le = htole32(fileMetaData2);
-    uint32_t fileMetaData3Le = htole32(fileMetaData3);
-    uint32_t fileMetaData4Le = htole32(fileMetaData4);
-
-    pldm_msg* request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_file_ack_with_meta_data_req(
-        0, fileType, fileHandle, fileStatus, fileMetaData1, fileMetaData2,
-        fileMetaData3, fileMetaData4, request);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(request->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(request->hdr.instance_id, 0);
-    ASSERT_EQ(request->hdr.type, PLDM_OEM);
-    ASSERT_EQ(request->hdr.command, PLDM_FILE_ACK_WITH_META_DATA);
-    ASSERT_EQ(0, memcmp(request->payload, &fileTypeLe, sizeof(fileTypeLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe), &fileHandleLe,
-                        sizeof(fileHandleLe)));
-    ASSERT_EQ(
-        0, memcmp(request->payload + sizeof(fileTypeLe) + sizeof(fileHandleLe),
-                  &fileStatus, sizeof(fileStatus)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(fileStatus),
-                        &fileMetaData1Le, sizeof(fileMetaData1Le)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(fileStatus) +
-                            sizeof(fileMetaData1Le),
-                        &fileMetaData2Le, sizeof(fileMetaData2Le)));
-
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(fileStatus) +
-                            sizeof(fileMetaData1Le) + sizeof(fileMetaData2Le),
-                        &fileMetaData3Le, sizeof(fileMetaData3Le)));
-
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(fileStatus) +
-                            sizeof(fileMetaData1Le) + sizeof(fileMetaData2Le) +
-                            sizeof(fileMetaData3Le),
-                        &fileMetaData4Le, sizeof(fileMetaData4Le)));
-}
-
-TEST(FileAckWithMetadata, testBadEncodeRequest)
-{
-    uint8_t fileType = 0xFF;
-    uint32_t fileHandle = 0;
-    uint8_t fileStatus = 0;
-    uint32_t fileMetaData1 = 0;
-    uint32_t fileMetaData2 = 0;
-    uint32_t fileMetaData3 = 0;
-    uint32_t fileMetaData4 = 0;
-
-    // request is NULL pointer
-    auto rc = encode_file_ack_with_meta_data_req(
-        0, fileType, fileHandle, fileStatus, fileMetaData1, fileMetaData2,
-        fileMetaData3, fileMetaData4, nullptr);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(FileAckWithMetadata, testGoodDecodeRequest)
-{
-    std::array<uint8_t,
-               sizeof(pldm_msg_hdr) + PLDM_FILE_ACK_WITH_META_DATA_REQ_BYTES>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    size_t payload_length = requestMsg.size() - sizeof(pldm_msg_hdr);
-    auto request = reinterpret_cast<pldm_file_ack_with_meta_data_req*>(
-        requestPtr->payload);
-
-    uint16_t fileType = 0xFFFF;
-    uint32_t fileHandle = 0x12345678;
-    uint8_t fileStatus = 0xFF;
-    uint32_t fileMetaData1 = 0x12345678;
-    uint32_t fileMetaData2 = 0x87654321;
-    uint32_t fileMetaData3 = 0x22121117;
-    uint32_t fileMetaData4 = 0x12334345;
-
-    request->file_type = htole16(fileType);
-    request->file_handle = htole32(fileHandle);
-    request->file_status = fileStatus;
-    request->file_meta_data_1 = htole32(fileMetaData1);
-    request->file_meta_data_2 = htole32(fileMetaData2);
-    request->file_meta_data_3 = htole32(fileMetaData3);
-    request->file_meta_data_4 = htole32(fileMetaData4);
-
-    uint16_t retFileType = 0xFFFF;
-    uint32_t retFileHandle = 0;
-    uint8_t retFileStatus = 0;
-    uint32_t retFileMetaData1 = 0;
-    uint32_t retFileMetaData2 = 0;
-    uint32_t retFileMetaData3 = 0;
-    uint32_t retFileMetaData4 = 0;
-
-    auto rc = decode_file_ack_with_meta_data_req(
-        requestPtr, payload_length, &retFileType, &retFileHandle,
-        &retFileStatus, &retFileMetaData1, &retFileMetaData2, &retFileMetaData3,
-        &retFileMetaData4);
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(fileType, retFileType);
-    ASSERT_EQ(fileHandle, retFileHandle);
-    ASSERT_EQ(fileStatus, retFileStatus);
-    ASSERT_EQ(fileMetaData1, retFileMetaData1);
-    ASSERT_EQ(fileMetaData2, retFileMetaData2);
-    ASSERT_EQ(fileMetaData3, retFileMetaData3);
-    ASSERT_EQ(fileMetaData4, retFileMetaData4);
-}
-
-TEST(FileAckWithMetadata, testBadDecodeRequest)
-{
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0;
-    uint8_t fileStatus = 0;
-    uint32_t fileMetaData1 = 0;
-    uint32_t fileMetaData2 = 0;
-    uint32_t fileMetaData3 = 0;
-    uint32_t fileMetaData4 = 0;
-
-    // Request payload message is missing
-    auto rc = decode_file_ack_with_meta_data_req(
-        NULL, 0, &fileType, &fileHandle, &fileStatus, &fileMetaData1,
-        &fileMetaData2, &fileMetaData3, &fileMetaData4);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t,
-               PLDM_FILE_ACK_WITH_META_DATA_REQ_BYTES + sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Payload length is invalid
-    rc = decode_file_ack_with_meta_data_req(
-        requestPtr, 0, &fileType, &fileHandle, &fileStatus, &fileMetaData1,
-        &fileMetaData2, &fileMetaData3, &fileMetaData4);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(NewFileAvailableWithMetaData, testGoodEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) +
-                            PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t completionCode = 0x0;
-
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_new_file_with_metadata_resp(0, completionCode, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA);
-    ASSERT_EQ(
-        0, memcmp(response->payload, &completionCode, sizeof(completionCode)));
-}
-
-TEST(NewFileAvailableWithMetaData, testBadEncodeResponse)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) +
-                            PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_RESP_BYTES>
-        responseMsg{};
-    pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // completion code is PLDM_ERROR
-    auto rc = encode_new_file_with_metadata_resp(0, PLDM_ERROR, response);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(response->hdr.request, PLDM_RESPONSE);
-    ASSERT_EQ(response->hdr.instance_id, 0);
-    ASSERT_EQ(response->hdr.type, PLDM_OEM);
-    ASSERT_EQ(response->hdr.command, PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA);
-    ASSERT_EQ(response->payload[0], PLDM_ERROR);
-
-    // response is NULL pointer
-    rc = encode_new_file_resp(0, PLDM_SUCCESS, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(NewFileAvailableWithMetaData, testGoodDecodeResponse)
-{
-    std::array<uint8_t, PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_RESP_BYTES +
-                            sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
-    auto response = reinterpret_cast<pldm_file_ack_with_meta_data_resp*>(
-        responsePtr->payload);
-
-    // Random value for completion code
-    uint8_t completionCode = 0x0;
-
-    response->completion_code = completionCode;
-
-    uint8_t retCompletionCode = PLDM_SUCCESS;
-
-    // Invoke decode the read/write file response
-    auto rc = decode_new_file_with_metadata_resp(responsePtr, payload_length,
-                                                 &retCompletionCode);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(completionCode, retCompletionCode);
-}
-
-TEST(NewFileAvailableWithMetaData, testBadDecodeResponse)
-{
-    uint8_t completionCode = 0;
-
-    // Request payload message is missing
-    auto rc = decode_new_file_with_metadata_resp(NULL, 0, &completionCode);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_RESP_BYTES +
-                            sizeof(pldm_msg_hdr)>
-        responseMsg{};
-
-    auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    // Payload length is invalid
-    rc = decode_new_file_with_metadata_resp(responsePtr, 0, &completionCode);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(NewFileAvailableWithMetaData, testGoodEncodeRequest)
-{
-    std::array<uint8_t, sizeof(pldm_msg_hdr) +
-                            PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_REQ_BYTES>
-        requestMsg{};
-
-    uint16_t fileType = 0xFFFF;
-    uint32_t fileHandle = 0x12345678;
-    uint32_t length = 0x13245768;
-    uint64_t fileMetaData1 = 0xFFFFFFFF;
-    uint32_t fileMetaData2 = 0xFFFFFFFF;
-    uint32_t fileMetaData3 = 0xFFFFFFFF;
-    uint32_t fileMetaData4 = 0xFFFFFFFF;
-
-    uint16_t fileTypeLe = htole16(fileType);
-    uint32_t fileHandleLe = htole32(fileHandle);
-    uint64_t lengthLe = htole64(length);
-    uint32_t fileMetaData1Le = htole32(fileMetaData1);
-    uint32_t fileMetaData2Le = htole32(fileMetaData2);
-    uint32_t fileMetaData3Le = htole32(fileMetaData3);
-    uint32_t fileMetaData4Le = htole32(fileMetaData4);
-
-    pldm_msg* request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    auto rc = encode_new_file_with_metadata_req(
-        0, fileType, fileHandle, length, fileMetaData1, fileMetaData2,
-        fileMetaData3, fileMetaData4, request);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(request->hdr.request, PLDM_REQUEST);
-    ASSERT_EQ(request->hdr.instance_id, 0);
-    ASSERT_EQ(request->hdr.type, PLDM_OEM);
-    ASSERT_EQ(request->hdr.command, PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA);
-    ASSERT_EQ(0, memcmp(request->payload, &fileTypeLe, sizeof(fileTypeLe)));
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe), &fileHandleLe,
-                        sizeof(fileHandleLe)));
-    ASSERT_EQ(
-        0, memcmp(request->payload + sizeof(fileTypeLe) + sizeof(fileHandleLe),
-                  &lengthLe, sizeof(lengthLe)));
-
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(lengthLe),
-                        &fileMetaData1Le, sizeof(fileMetaData1Le)));
-
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(lengthLe) +
-                            sizeof(fileMetaData1Le),
-                        &fileMetaData2Le, sizeof(fileMetaData2Le)));
-
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(lengthLe) +
-                            sizeof(fileMetaData1Le) + sizeof(fileMetaData2Le),
-                        &fileMetaData3Le, sizeof(fileMetaData3Le)));
-
-    ASSERT_EQ(0, memcmp(request->payload + sizeof(fileTypeLe) +
-                            sizeof(fileHandleLe) + sizeof(lengthLe) +
-                            sizeof(fileMetaData1Le) + sizeof(fileMetaData2Le) +
-                            sizeof(fileMetaData3Le),
-                        &fileMetaData4Le, sizeof(fileMetaData4Le)));
-}
-
-TEST(NewFileAvailableWithMetaData, testBadEncodeRequest)
-{
-    uint8_t fileType = 0xFF;
-    uint32_t fileHandle = 0;
-    uint32_t length = 0;
-    uint32_t fileMetaData1 = 0;
-    uint32_t fileMetaData2 = 0;
-    uint32_t fileMetaData3 = 0;
-    uint32_t fileMetaData4 = 0;
-
-    // request is NULL pointer
-    auto rc = encode_new_file_with_metadata_req(
-        0, fileType, fileHandle, length, fileMetaData1, fileMetaData2,
-        fileMetaData3, fileMetaData4, NULL);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(NewFileAvailableWithMetaData, testGoodDecodeRequest)
-{
-    std::array<uint8_t, PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_REQ_BYTES +
-                            sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    size_t payload_length = requestMsg.size() - sizeof(pldm_msg_hdr);
-    auto request =
-        reinterpret_cast<pldm_new_file_with_metadata_req*>(requestPtr->payload);
-
-    // Random value for fileHandle and length
-    uint16_t fileType = 0xFFFF;
-    uint32_t fileHandle = 0x12345678;
-    uint64_t length = 0x13245768;
-    uint32_t fileMetaData1 = 0x12345678;
-    uint32_t fileMetaData2 = 0x87654321;
-    uint32_t fileMetaData3 = 0x22121117;
-    uint32_t fileMetaData4 = 0x12334345;
-
-    request->file_type = htole16(fileType);
-    request->file_handle = htole32(fileHandle);
-    request->length = htole64(length);
-    request->file_meta_data_1 = htole32(fileMetaData1);
-    request->file_meta_data_2 = htole32(fileMetaData2);
-    request->file_meta_data_3 = htole32(fileMetaData3);
-    request->file_meta_data_4 = htole32(fileMetaData4);
-
-    uint16_t retFileType = 0xFFFF;
-    uint32_t retFileHandle = 0;
-    uint64_t retLength = 0;
-    uint32_t retFileMetaData1 = 0;
-    uint32_t retFileMetaData2 = 0;
-    uint32_t retFileMetaData3 = 0;
-    uint32_t retFileMetaData4 = 0;
-
-    // Invoke decode the read file request
-    auto rc = decode_new_file_with_metadata_req(
-        requestPtr, payload_length, &retFileType, &retFileHandle, &retLength,
-        &retFileMetaData1, &retFileMetaData2, &retFileMetaData3,
-        &retFileMetaData4);
-
-    ASSERT_EQ(rc, PLDM_SUCCESS);
-    ASSERT_EQ(fileType, retFileType);
-    ASSERT_EQ(fileHandle, retFileHandle);
-    ASSERT_EQ(length, retLength);
-    ASSERT_EQ(fileMetaData1, retFileMetaData1);
-    ASSERT_EQ(fileMetaData2, retFileMetaData2);
-    ASSERT_EQ(fileMetaData3, retFileMetaData3);
-    ASSERT_EQ(fileMetaData4, retFileMetaData4);
-}
-
-TEST(NewFileAvailableWithMetaData, testBadDecodeRequest)
-{
-    uint16_t fileType = 0;
-    uint32_t fileHandle = 0;
-    uint64_t length = 0;
-    uint32_t fileMetaData1 = 0;
-    uint32_t fileMetaData2 = 0;
-    uint32_t fileMetaData3 = 0;
-    uint32_t fileMetaData4 = 0;
-
-    // Request payload message is missing
-    auto rc = decode_new_file_with_metadata_req(
-        NULL, 0, &fileType, &fileHandle, &length, &fileMetaData1,
-        &fileMetaData2, &fileMetaData3, &fileMetaData4);
-
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    std::array<uint8_t, PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_REQ_BYTES +
-                            sizeof(pldm_msg_hdr)>
-        requestMsg{};
-
-    auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    // Payload length is invalid
-    rc = decode_new_file_with_metadata_req(
-        requestPtr, 0, &fileType, &fileHandle, &length, &fileMetaData1,
-        &fileMetaData2, &fileMetaData3, &fileMetaData4);
-    ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
diff --git a/subprojects/libpldm/tests/oem/ibm/libpldm_host_test.cpp b/subprojects/libpldm/tests/oem/ibm/libpldm_host_test.cpp
deleted file mode 100644
index 26ae5aa..0000000
--- a/subprojects/libpldm/tests/oem/ibm/libpldm_host_test.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <string.h>
-
-#include <array>
-
-#include "oem/ibm/libpldm/host.h"
-
-#include <gtest/gtest.h>
-
-constexpr auto hdrSize = sizeof(pldm_msg_hdr);
-
-TEST(GetAlertStatus, testGoodEncodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_ALERT_STATUS_REQ_BYTES> requestMsg{};
-
-    uint8_t versionId = 0x0;
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_get_alert_status_req(0, versionId, request,
-                                          PLDM_GET_ALERT_STATUS_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(versionId, request->payload[0]);
-}
-
-TEST(GetAlertStatus, testBadEncodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_ALERT_STATUS_REQ_BYTES> requestMsg{};
-
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
-    auto rc = encode_get_alert_status_req(0, 0x0, request,
-                                          PLDM_GET_ALERT_STATUS_REQ_BYTES + 1);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetAlertStatus, testGoodDecodeResponse)
-{
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t rack_entry = 0xFF000030;
-    uint32_t pri_cec_node = 0x00008030;
-    std::array<uint8_t, hdrSize + PLDM_GET_ALERT_STATUS_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t retCompletionCode = 0;
-    uint32_t retRack_entry = 0;
-    uint32_t retPri_cec_node = 0;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_get_alert_status_resp* resp =
-        reinterpret_cast<struct pldm_get_alert_status_resp*>(response->payload);
-    resp->completion_code = completionCode;
-    resp->rack_entry = htole32(rack_entry);
-    resp->pri_cec_node = htole32(pri_cec_node);
-
-    auto rc = decode_get_alert_status_resp(
-        response, responseMsg.size() - hdrSize, &retCompletionCode,
-        &retRack_entry, &retPri_cec_node);
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retCompletionCode, completionCode);
-    EXPECT_EQ(retRack_entry, rack_entry);
-    EXPECT_EQ(retPri_cec_node, pri_cec_node);
-}
-
-TEST(GetAlertStatus, testBadDecodeResponse)
-{
-    auto rc = decode_get_alert_status_resp(NULL, 0, NULL, NULL, NULL);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-
-    uint8_t completionCode = PLDM_SUCCESS;
-    uint32_t rack_entry = 0xFF000030;
-    uint32_t pri_cec_node = 0x00008030;
-    std::array<uint8_t, hdrSize + PLDM_GET_ALERT_STATUS_RESP_BYTES>
-        responseMsg{};
-
-    uint8_t retCompletionCode = 0;
-    uint32_t retRack_entry = 0;
-    uint32_t retPri_cec_node = 0;
-
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-    struct pldm_get_alert_status_resp* resp =
-        reinterpret_cast<struct pldm_get_alert_status_resp*>(response->payload);
-    resp->completion_code = completionCode;
-    resp->rack_entry = htole32(rack_entry);
-    resp->pri_cec_node = htole32(pri_cec_node);
-
-    rc = decode_get_alert_status_resp(
-        response, responseMsg.size() - hdrSize + 1, &retCompletionCode,
-        &retRack_entry, &retPri_cec_node);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}
-
-TEST(GetAlertStatus, testGoodEncodeResponse)
-{
-    uint8_t completionCode = 0;
-    uint32_t rack_entry = 0xFF000030;
-    uint32_t pri_cec_node = 0x00008030;
-
-    std::vector<uint8_t> responseMsg(hdrSize +
-                                     PLDM_GET_ALERT_STATUS_RESP_BYTES);
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc =
-        encode_get_alert_status_resp(0, PLDM_SUCCESS, rack_entry, pri_cec_node,
-                                     response, responseMsg.size() - hdrSize);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    struct pldm_get_alert_status_resp* resp =
-        reinterpret_cast<struct pldm_get_alert_status_resp*>(response->payload);
-
-    EXPECT_EQ(completionCode, resp->completion_code);
-    EXPECT_EQ(rack_entry, le32toh(resp->rack_entry));
-    EXPECT_EQ(pri_cec_node, le32toh(resp->pri_cec_node));
-}
-
-TEST(GetAlertStatus, testBadEncodeResponse)
-{
-    uint32_t rack_entry = 0xFF000030;
-    uint32_t pri_cec_node = 0x00008030;
-
-    std::vector<uint8_t> responseMsg(hdrSize +
-                                     PLDM_GET_ALERT_STATUS_RESP_BYTES);
-    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
-
-    auto rc = encode_get_alert_status_resp(0, PLDM_SUCCESS, rack_entry,
-                                           pri_cec_node, response,
-                                           responseMsg.size() - hdrSize + 1);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
-}
-
-TEST(GetAlertStatus, testGoodDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_ALERT_STATUS_REQ_BYTES> requestMsg{};
-
-    uint8_t versionId = 0x0;
-    uint8_t retVersionId;
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    req->payload[0] = versionId;
-
-    auto rc = decode_get_alert_status_req(req, requestMsg.size() - hdrSize,
-                                          &retVersionId);
-
-    EXPECT_EQ(rc, PLDM_SUCCESS);
-    EXPECT_EQ(retVersionId, versionId);
-}
-
-TEST(GetAlertStatus, testBadDecodeRequest)
-{
-    std::array<uint8_t, hdrSize + PLDM_GET_ALERT_STATUS_REQ_BYTES> requestMsg{};
-
-    uint8_t versionId = 0x0;
-    uint8_t retVersionId;
-
-    auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
-
-    req->payload[0] = versionId;
-
-    auto rc = decode_get_alert_status_req(req, requestMsg.size() - hdrSize + 1,
-                                          &retVersionId);
-
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
-}