1 #pragma once 2 3 #include "common/utils.hpp" 4 #include "file_io_by_type.hpp" 5 #include "pldmd/handler.hpp" 6 7 #include <libpldm/oem/meta/file_io.h> 8 9 #include <phosphor-logging/lg2.hpp> 10 11 PHOSPHOR_LOG2_USING; 12 13 namespace pldm::responder::oem_meta 14 { 15 16 class FileIOHandler : public CmdHandler 17 { 18 public: 19 FileIOHandler() = delete; 20 FileIOHandler(const FileIOHandler&) = delete; 21 FileIOHandler(FileIOHandler&&) = delete; 22 FileIOHandler& operator=(const FileIOHandler&) = delete; 23 FileIOHandler& operator=(FileIOHandler&&) = delete; 24 virtual ~FileIOHandler() = default; 25 FileIOHandler(const pldm::utils::DBusHandler * dBusHandler)26 explicit FileIOHandler(const pldm::utils::DBusHandler* dBusHandler) : 27 dBusHandler(dBusHandler) 28 { 29 handlers.emplace( 30 PLDM_OEM_META_FILE_IO_CMD_WRITE_FILE, 31 [this](pldm_tid_t tid, const pldm_msg* request, 32 size_t payloadLength) { 33 return this->writeFileIO(tid, request, payloadLength); 34 }); 35 handlers.emplace( 36 PLDM_OEM_META_FILE_IO_CMD_READ_FILE, 37 [this](pldm_tid_t tid, const pldm_msg* request, 38 size_t payloadLength) { 39 return this->readFileIO(tid, request, payloadLength); 40 }); 41 } 42 43 private: 44 /** @brief Handler for writeFileIO command 45 * 46 * @param[in] tid - the device tid 47 * @param[in] request - pointer to PLDM request payload 48 * @param[in] payloadLength - length of the message 49 * 50 * @return PLDM response message 51 */ 52 Response writeFileIO(pldm_tid_t tid, const pldm_msg* request, 53 size_t payloadLength); 54 55 /** @brief Handler for readFileIO command 56 * 57 * @param[in] tid - the device tid 58 * @param[in] request - pointer to PLDM request payload 59 * @param[in] payloadLength - length of the message 60 * 61 * @return PLDM response message 62 */ 63 Response readFileIO(pldm_tid_t tid, const pldm_msg* request, 64 size_t payloadLength); 65 66 std::unique_ptr<FileHandler> getHandlerByType(pldm_tid_t tid, 67 FileIOType fileIOType); 68 69 const pldm::utils::DBusHandler* dBusHandler; 70 }; 71 72 } // namespace pldm::responder::oem_meta 73