blob: 510d65027c4a9c7a9672a1264b04386f4a41cd4f [file] [log] [blame]
Sora Su972381f2025-07-18 18:11:26 +08001#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
11PHOSPHOR_LOG2_USING;
12
13namespace pldm::responder::oem_meta
14{
15
16class FileIOHandler : public CmdHandler
17{
18 public:
19 FileIOHandler()
20 {
21 handlers.emplace(
22 PLDM_OEM_META_FILE_IO_CMD_WRITE_FILE,
23 [this](pldm_tid_t tid, const pldm_msg* request,
24 size_t payloadLength) {
25 return this->writeFileIO(tid, request, payloadLength);
26 });
27 handlers.emplace(
28 PLDM_OEM_META_FILE_IO_CMD_READ_FILE,
29 [this](pldm_tid_t tid, const pldm_msg* request,
30 size_t payloadLength) {
31 return this->readFileIO(tid, request, payloadLength);
32 });
33 }
34
35 FileIOHandler(const FileIOHandler&) = delete;
36 FileIOHandler(FileIOHandler&&) = delete;
37 FileIOHandler& operator=(const FileIOHandler&) = delete;
38 FileIOHandler& operator=(FileIOHandler&&) = delete;
39 virtual ~FileIOHandler() = default;
40
41 private:
42 /** @brief Handler for writeFileIO command
43 *
44 * @param[in] tid - the device tid
45 * @param[in] request - pointer to PLDM request payload
46 * @param[in] payloadLength - length of the message
47 *
48 * @return PLDM response message
49 */
50 Response writeFileIO(pldm_tid_t tid, const pldm_msg* request,
51 size_t payloadLength);
52
53 /** @brief Handler for readFileIO command
54 *
55 * @param[in] tid - the device tid
56 * @param[in] request - pointer to PLDM request payload
57 * @param[in] payloadLength - length of the message
58 *
59 * @return PLDM response message
60 */
61 Response readFileIO(pldm_tid_t tid, const pldm_msg* request,
62 size_t payloadLength);
63
64 std::unique_ptr<FileHandler> getHandlerByType(pldm_tid_t tid,
65 FileIOType fileIOType);
66};
67
68} // namespace pldm::responder::oem_meta