1972381fcSSora Su #pragma once 2972381fcSSora Su 3972381fcSSora Su #include "common/utils.hpp" 4972381fcSSora Su #include "file_io_by_type.hpp" 5972381fcSSora Su #include "pldmd/handler.hpp" 6972381fcSSora Su 7972381fcSSora Su #include <libpldm/oem/meta/file_io.h> 8972381fcSSora Su 9972381fcSSora Su #include <phosphor-logging/lg2.hpp> 10972381fcSSora Su 11972381fcSSora Su PHOSPHOR_LOG2_USING; 12972381fcSSora Su 13972381fcSSora Su namespace pldm::responder::oem_meta 14972381fcSSora Su { 15972381fcSSora Su 16972381fcSSora Su class FileIOHandler : public CmdHandler 17972381fcSSora Su { 18972381fcSSora Su public: 19*bca95a5aSSora Su FileIOHandler() = delete; 20*bca95a5aSSora Su FileIOHandler(const FileIOHandler&) = delete; 21*bca95a5aSSora Su FileIOHandler(FileIOHandler&&) = delete; 22*bca95a5aSSora Su FileIOHandler& operator=(const FileIOHandler&) = delete; 23*bca95a5aSSora Su FileIOHandler& operator=(FileIOHandler&&) = delete; 24*bca95a5aSSora Su virtual ~FileIOHandler() = default; 25*bca95a5aSSora Su 26*bca95a5aSSora Su explicit FileIOHandler(const pldm::utils::DBusHandler* dBusHandler) : 27*bca95a5aSSora Su dBusHandler(dBusHandler) 28972381fcSSora Su { 29972381fcSSora Su handlers.emplace( 30972381fcSSora Su PLDM_OEM_META_FILE_IO_CMD_WRITE_FILE, 31972381fcSSora Su [this](pldm_tid_t tid, const pldm_msg* request, 32972381fcSSora Su size_t payloadLength) { 33972381fcSSora Su return this->writeFileIO(tid, request, payloadLength); 34972381fcSSora Su }); 35972381fcSSora Su handlers.emplace( 36972381fcSSora Su PLDM_OEM_META_FILE_IO_CMD_READ_FILE, 37972381fcSSora Su [this](pldm_tid_t tid, const pldm_msg* request, 38972381fcSSora Su size_t payloadLength) { 39972381fcSSora Su return this->readFileIO(tid, request, payloadLength); 40972381fcSSora Su }); 41972381fcSSora Su } 42972381fcSSora Su 43972381fcSSora Su private: 44972381fcSSora Su /** @brief Handler for writeFileIO command 45972381fcSSora Su * 46972381fcSSora Su * @param[in] tid - the device tid 47972381fcSSora Su * @param[in] request - pointer to PLDM request payload 48972381fcSSora Su * @param[in] payloadLength - length of the message 49972381fcSSora Su * 50972381fcSSora Su * @return PLDM response message 51972381fcSSora Su */ 52972381fcSSora Su Response writeFileIO(pldm_tid_t tid, const pldm_msg* request, 53972381fcSSora Su size_t payloadLength); 54972381fcSSora Su 55972381fcSSora Su /** @brief Handler for readFileIO command 56972381fcSSora Su * 57972381fcSSora Su * @param[in] tid - the device tid 58972381fcSSora Su * @param[in] request - pointer to PLDM request payload 59972381fcSSora Su * @param[in] payloadLength - length of the message 60972381fcSSora Su * 61972381fcSSora Su * @return PLDM response message 62972381fcSSora Su */ 63972381fcSSora Su Response readFileIO(pldm_tid_t tid, const pldm_msg* request, 64972381fcSSora Su size_t payloadLength); 65972381fcSSora Su 66972381fcSSora Su std::unique_ptr<FileHandler> getHandlerByType(pldm_tid_t tid, 67972381fcSSora Su FileIOType fileIOType); 68*bca95a5aSSora Su 69*bca95a5aSSora Su const pldm::utils::DBusHandler* dBusHandler; 70972381fcSSora Su }; 71972381fcSSora Su 72972381fcSSora Su } // namespace pldm::responder::oem_meta 73