1db12436aSJayashankar Padath #pragma once
2db12436aSJayashankar Padath 
3db12436aSJayashankar Padath #include "libpldm/platform.h"
4db12436aSJayashankar Padath 
5db12436aSJayashankar Padath #include "pldmd/dbus_impl_requester.hpp"
6db12436aSJayashankar Padath 
7db12436aSJayashankar Padath #include <filesystem>
8db12436aSJayashankar Padath #include <fstream>
9db12436aSJayashankar Padath #include <map>
10db12436aSJayashankar Padath 
11db12436aSJayashankar Padath using namespace pldm::dbus_api;
12db12436aSJayashankar Padath 
13db12436aSJayashankar Padath namespace pldm
14db12436aSJayashankar Padath {
15db12436aSJayashankar Padath namespace requester
16db12436aSJayashankar Padath {
17db12436aSJayashankar Padath namespace oem_ibm
18db12436aSJayashankar Padath {
19db12436aSJayashankar Padath 
20db12436aSJayashankar Padath /** @class DbusToFileHandler
21db12436aSJayashankar Padath  *  @brief This class can process resource dump parameters and send PLDM
22db12436aSJayashankar Padath  *         new file available cmd to the hypervisor. This class can be used
23db12436aSJayashankar Padath  *         as a pldm requester in oem-ibm path.
24db12436aSJayashankar Padath  */
25db12436aSJayashankar Padath class DbusToFileHandler
26db12436aSJayashankar Padath {
27db12436aSJayashankar Padath   public:
28db12436aSJayashankar Padath     DbusToFileHandler(const DbusToFileHandler&) = delete;
29db12436aSJayashankar Padath     DbusToFileHandler(DbusToFileHandler&&) = delete;
30db12436aSJayashankar Padath     DbusToFileHandler& operator=(const DbusToFileHandler&) = delete;
31db12436aSJayashankar Padath     DbusToFileHandler& operator=(DbusToFileHandler&&) = delete;
32db12436aSJayashankar Padath     ~DbusToFileHandler() = default;
33db12436aSJayashankar Padath 
34db12436aSJayashankar Padath     /** @brief Constructor
35db12436aSJayashankar Padath      *  @param[in] mctp_fd - fd of MCTP communications socket
36db12436aSJayashankar Padath      *  @param[in] mctp_eid - MCTP EID of host firmware
37db12436aSJayashankar Padath      *  @param[in] requester - pointer to a Requester object
38db12436aSJayashankar Padath      *  @param[in] resDumpCurrentObjPath - resource dump current object path
39db12436aSJayashankar Padath      */
40db12436aSJayashankar Padath     DbusToFileHandler(int mctp_fd, uint8_t mctp_eid,
41db12436aSJayashankar Padath                       dbus_api::Requester* requester,
42db12436aSJayashankar Padath                       sdbusplus::message::object_path resDumpCurrentObjPath);
43db12436aSJayashankar Padath 
44db12436aSJayashankar Padath     /** @brief Process the new resource dump request
45db12436aSJayashankar Padath      *  @param[in] vspString - vsp string
46db12436aSJayashankar Padath      *  @param[in] resDumpReqPass - resource dump password
47db12436aSJayashankar Padath      */
48db12436aSJayashankar Padath     void processNewResourceDump(const std::string& vspString,
49db12436aSJayashankar Padath                                 const std::string& resDumpReqPass);
50db12436aSJayashankar Padath 
51*219ace9aSVarsha Kaverappa     /** @brief Process the new CSR file available
52*219ace9aSVarsha Kaverappa      *  @param[in] csr - CSR string
53*219ace9aSVarsha Kaverappa      *  @param[in] fileHandle - file Handle for  new file request
54*219ace9aSVarsha Kaverappa      */
55*219ace9aSVarsha Kaverappa     void newCsrFileAvailable(const std::string& csr,
56*219ace9aSVarsha Kaverappa                              const std::string fileHandle);
57*219ace9aSVarsha Kaverappa 
58db12436aSJayashankar Padath   private:
59db12436aSJayashankar Padath     /** @brief Send the new file available command request to hypervisor
60db12436aSJayashankar Padath      *  @param[in] fileSize - size of the file
61db12436aSJayashankar Padath      */
62db12436aSJayashankar Padath     void sendNewFileAvailableCmd(uint64_t fileSize);
63db12436aSJayashankar Padath 
64*219ace9aSVarsha Kaverappa     /** @brief Send the new file available command request to hypervisor
65*219ace9aSVarsha Kaverappa      *  @param[in] fileSize - size of the file
66*219ace9aSVarsha Kaverappa      *  @param[in] fileHandle - file handle
67*219ace9aSVarsha Kaverappa      *  @param[in] type - file type
68*219ace9aSVarsha Kaverappa      */
69*219ace9aSVarsha Kaverappa     void newFileAvailableSendToHost(const uint32_t fileSize,
70*219ace9aSVarsha Kaverappa                                     const uint32_t fileHandle,
71*219ace9aSVarsha Kaverappa                                     const uint16_t type);
72*219ace9aSVarsha Kaverappa 
73db12436aSJayashankar Padath     /** @brief fd of MCTP communications socket */
74db12436aSJayashankar Padath     int mctp_fd;
75db12436aSJayashankar Padath 
76db12436aSJayashankar Padath     /** @brief MCTP EID of host firmware */
77db12436aSJayashankar Padath     uint8_t mctp_eid;
78db12436aSJayashankar Padath 
79db12436aSJayashankar Padath     /** @brief Pointer to a Requester object, primarily used to access API to
80db12436aSJayashankar Padath      *  obtain PLDM instance id.
81db12436aSJayashankar Padath      */
82db12436aSJayashankar Padath     dbus_api::Requester* requester;
83db12436aSJayashankar Padath 
84db12436aSJayashankar Padath     /** @brief Hold the current resource dump object path */
85db12436aSJayashankar Padath     sdbusplus::message::object_path resDumpCurrentObjPath;
86db12436aSJayashankar Padath };
87db12436aSJayashankar Padath 
88db12436aSJayashankar Padath } // namespace oem_ibm
89db12436aSJayashankar Padath } // namespace requester
90db12436aSJayashankar Padath } // namespace pldm
91