oem-meta: Add file IO responder
Support handling file I/O request from BIC.
Tested: Verified in yosemite4 platform.
Change-Id: I4a630bffc5ab3fddea0618130d970b4c7ecf59f0
Signed-off-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
Signed-off-by: Sora Su <baxiche@gmail.com>
diff --git a/oem/meta/libpldmresponder/file_io.hpp b/oem/meta/libpldmresponder/file_io.hpp
new file mode 100644
index 0000000..510d650
--- /dev/null
+++ b/oem/meta/libpldmresponder/file_io.hpp
@@ -0,0 +1,68 @@
+#pragma once
+
+#include "common/utils.hpp"
+#include "file_io_by_type.hpp"
+#include "pldmd/handler.hpp"
+
+#include <libpldm/oem/meta/file_io.h>
+
+#include <phosphor-logging/lg2.hpp>
+
+PHOSPHOR_LOG2_USING;
+
+namespace pldm::responder::oem_meta
+{
+
+class FileIOHandler : public CmdHandler
+{
+ public:
+ FileIOHandler()
+ {
+ handlers.emplace(
+ PLDM_OEM_META_FILE_IO_CMD_WRITE_FILE,
+ [this](pldm_tid_t tid, const pldm_msg* request,
+ size_t payloadLength) {
+ return this->writeFileIO(tid, request, payloadLength);
+ });
+ handlers.emplace(
+ PLDM_OEM_META_FILE_IO_CMD_READ_FILE,
+ [this](pldm_tid_t tid, const pldm_msg* request,
+ size_t payloadLength) {
+ return this->readFileIO(tid, request, payloadLength);
+ });
+ }
+
+ FileIOHandler(const FileIOHandler&) = delete;
+ FileIOHandler(FileIOHandler&&) = delete;
+ FileIOHandler& operator=(const FileIOHandler&) = delete;
+ FileIOHandler& operator=(FileIOHandler&&) = delete;
+ virtual ~FileIOHandler() = default;
+
+ private:
+ /** @brief Handler for writeFileIO command
+ *
+ * @param[in] tid - the device tid
+ * @param[in] request - pointer to PLDM request payload
+ * @param[in] payloadLength - length of the message
+ *
+ * @return PLDM response message
+ */
+ Response writeFileIO(pldm_tid_t tid, const pldm_msg* request,
+ size_t payloadLength);
+
+ /** @brief Handler for readFileIO command
+ *
+ * @param[in] tid - the device tid
+ * @param[in] request - pointer to PLDM request payload
+ * @param[in] payloadLength - length of the message
+ *
+ * @return PLDM response message
+ */
+ Response readFileIO(pldm_tid_t tid, const pldm_msg* request,
+ size_t payloadLength);
+
+ std::unique_ptr<FileHandler> getHandlerByType(pldm_tid_t tid,
+ FileIOType fileIOType);
+};
+
+} // namespace pldm::responder::oem_meta