1db12436aSJayashankar Padath #pragma once
2db12436aSJayashankar Padath 
3db12436aSJayashankar Padath #include "libpldm/platform.h"
4db12436aSJayashankar Padath 
5db12436aSJayashankar Padath #include "pldmd/dbus_impl_requester.hpp"
6c0c79481SSampa Misra #include "requester/handler.hpp"
7db12436aSJayashankar Padath 
8db12436aSJayashankar Padath #include <filesystem>
9db12436aSJayashankar Padath #include <fstream>
10db12436aSJayashankar Padath #include <map>
11db12436aSJayashankar Padath 
12db12436aSJayashankar Padath namespace pldm
13db12436aSJayashankar Padath {
14db12436aSJayashankar Padath namespace requester
15db12436aSJayashankar Padath {
16db12436aSJayashankar Padath namespace oem_ibm
17db12436aSJayashankar Padath {
18db12436aSJayashankar Padath /** @class DbusToFileHandler
19db12436aSJayashankar Padath  *  @brief This class can process resource dump parameters and send PLDM
20db12436aSJayashankar Padath  *         new file available cmd to the hypervisor. This class can be used
21db12436aSJayashankar Padath  *         as a pldm requester in oem-ibm path.
22db12436aSJayashankar Padath  */
23db12436aSJayashankar Padath class DbusToFileHandler
24db12436aSJayashankar Padath {
25db12436aSJayashankar Padath   public:
26db12436aSJayashankar Padath     DbusToFileHandler(const DbusToFileHandler&) = delete;
27db12436aSJayashankar Padath     DbusToFileHandler(DbusToFileHandler&&) = delete;
28db12436aSJayashankar Padath     DbusToFileHandler& operator=(const DbusToFileHandler&) = delete;
29db12436aSJayashankar Padath     DbusToFileHandler& operator=(DbusToFileHandler&&) = delete;
30db12436aSJayashankar Padath     ~DbusToFileHandler() = default;
31db12436aSJayashankar Padath 
32db12436aSJayashankar Padath     /** @brief Constructor
33db12436aSJayashankar Padath      *  @param[in] mctp_fd - fd of MCTP communications socket
34db12436aSJayashankar Padath      *  @param[in] mctp_eid - MCTP EID of host firmware
35db12436aSJayashankar Padath      *  @param[in] requester - pointer to a Requester object
36db12436aSJayashankar Padath      *  @param[in] resDumpCurrentObjPath - resource dump current object path
37c0c79481SSampa Misra      *  @param[in] handler - PLDM request handler
38db12436aSJayashankar Padath      */
39c0c79481SSampa Misra     DbusToFileHandler(
40c0c79481SSampa Misra         int mctp_fd, uint8_t mctp_eid, dbus_api::Requester* requester,
41c0c79481SSampa Misra         sdbusplus::message::object_path resDumpCurrentObjPath,
42c0c79481SSampa Misra         pldm::requester::Handler<pldm::requester::Request>* handler);
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 
51219ace9aSVarsha Kaverappa     /** @brief Process the new CSR file available
52219ace9aSVarsha Kaverappa      *  @param[in] csr - CSR string
53219ace9aSVarsha Kaverappa      *  @param[in] fileHandle - file Handle for  new file request
54219ace9aSVarsha Kaverappa      */
55219ace9aSVarsha Kaverappa     void newCsrFileAvailable(const std::string& csr,
56219ace9aSVarsha Kaverappa                              const std::string fileHandle);
57219ace9aSVarsha 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 
64219ace9aSVarsha Kaverappa     /** @brief Send the new file available command request to hypervisor
65219ace9aSVarsha Kaverappa      *  @param[in] fileSize - size of the file
66219ace9aSVarsha Kaverappa      *  @param[in] fileHandle - file handle
67219ace9aSVarsha Kaverappa      *  @param[in] type - file type
68219ace9aSVarsha Kaverappa      */
69219ace9aSVarsha Kaverappa     void newFileAvailableSendToHost(const uint32_t fileSize,
70219ace9aSVarsha Kaverappa                                     const uint32_t fileHandle,
71219ace9aSVarsha Kaverappa                                     const uint16_t type);
72219ace9aSVarsha Kaverappa 
73c0c79481SSampa Misra     /** @brief report failure that a resource dump has failed
74c0c79481SSampa Misra      */
75c0c79481SSampa Misra     void reportResourceDumpFailure();
76c0c79481SSampa Misra 
77*c047f800SPavithra Barithaya     /** @brief method to get the acf file contents */
78*c047f800SPavithra Barithaya     std::string getAcfFileContent();
79*c047f800SPavithra Barithaya 
80db12436aSJayashankar Padath     /** @brief fd of MCTP communications socket */
81db12436aSJayashankar Padath     int mctp_fd;
82db12436aSJayashankar Padath 
83db12436aSJayashankar Padath     /** @brief MCTP EID of host firmware */
84db12436aSJayashankar Padath     uint8_t mctp_eid;
85db12436aSJayashankar Padath 
86db12436aSJayashankar Padath     /** @brief Pointer to a Requester object, primarily used to access API to
87db12436aSJayashankar Padath      *  obtain PLDM instance id.
88db12436aSJayashankar Padath      */
89db12436aSJayashankar Padath     dbus_api::Requester* requester;
90db12436aSJayashankar Padath 
91db12436aSJayashankar Padath     /** @brief Hold the current resource dump object path */
92db12436aSJayashankar Padath     sdbusplus::message::object_path resDumpCurrentObjPath;
93c0c79481SSampa Misra 
94c0c79481SSampa Misra     /** @brief PLDM request handler */
95c0c79481SSampa Misra     pldm::requester::Handler<pldm::requester::Request>* handler;
96db12436aSJayashankar Padath };
97db12436aSJayashankar Padath 
98db12436aSJayashankar Padath } // namespace oem_ibm
99db12436aSJayashankar Padath } // namespace requester
100db12436aSJayashankar Padath } // namespace pldm
101