oem-ibm : Support New record to the backplane vpd
This commit is to support a new VPD record called PSPD that contains
few keywords called #D and VM. Since these keywords are typically
larger in size (4K bytes) than what is managed by PLDM, we are adding
a file into which these keywords will be extracted. This keyword file
is transferred to the HB PLDM layer with a readFileByType request
from HB.
This also includes transfer of PSPD record data via PLDM with
offset included.
Tested by using pldmtool to send read request command to PLDM
Change-Id: Iba814a802cbbd2c2d641ee5a4c81919c3b8bdf20
Signed-off-by: Varsha Kaverappa <vkaverap@in.ibm.com>
diff --git a/oem/ibm/libpldmresponder/file_io_type_vpd.hpp b/oem/ibm/libpldmresponder/file_io_type_vpd.hpp
new file mode 100644
index 0000000..d5cf412
--- /dev/null
+++ b/oem/ibm/libpldmresponder/file_io_type_vpd.hpp
@@ -0,0 +1,75 @@
+#pragma once
+
+#include "file_io_by_type.hpp"
+
+namespace pldm
+{
+namespace responder
+{
+using vpdFileType = uint16_t;
+/** @class keywordFileHandler
+ *
+ * @brief Inherits and implements FileHandler. This class is used
+ * to read #D keyword file
+ */
+class keywordHandler : public FileHandler
+{
+ public:
+ /** @brief Handler constructor
+ */
+ keywordHandler(uint32_t fileHandle, uint16_t fileType) :
+ FileHandler(fileHandle), vpdFileType(fileType)
+ {}
+ virtual int writeFromMemory(uint32_t /*offset*/, uint32_t /*length*/,
+ uint64_t /*address*/,
+ oem_platform::Handler* /*oemPlatformHandler*/)
+ {
+ return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
+ }
+ virtual int readIntoMemory(uint32_t /*offset*/, uint32_t& /*length*/,
+ uint64_t /*address*/,
+ oem_platform::Handler* /*oemPlatformHandler*/)
+ {
+ return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
+ }
+ virtual int read(uint32_t offset, uint32_t& length, Response& response,
+ oem_platform::Handler* /*oemPlatformHandler*/);
+ virtual int write(const char* /*buffer*/, uint32_t /*offset*/,
+ uint32_t& /*length*/,
+ oem_platform::Handler* /*oemPlatformHandler*/)
+ {
+ return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
+ }
+ virtual int fileAck(uint8_t /*fileStatus*/)
+ {
+ return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
+ }
+ virtual int newFileAvailable(uint64_t /*length*/)
+ {
+ return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
+ }
+ virtual int fileAckWithMetaData(uint8_t /*fileStatus*/,
+ uint32_t /*metaDataValue1*/,
+ uint32_t /*metaDataValue2*/,
+ uint32_t /*metaDataValue3*/,
+ uint32_t /*metaDataValue4*/)
+ {
+ return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
+ }
+ virtual int newFileAvailableWithMetaData(uint64_t /*length*/,
+ uint32_t /*metaDataValue1*/,
+ uint32_t /*metaDataValue2*/,
+ uint32_t /*metaDataValue3*/,
+ uint32_t /*metaDataValue4*/)
+ {
+ return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
+ }
+ /** @brief keywordHandler destructor
+ */
+ ~keywordHandler() {}
+
+ private:
+ uint16_t vpdFileType; //!< type of the VPD file
+};
+} // namespace responder
+} // namespace pldm