xref: /openbmc/pldm/oem/meta/libpldmresponder/file_io.hpp (revision bca95a5aa082281ffac81bdbaf6a22a0cff60405)
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