1db12436aSJayashankar Padath #pragma once
2db12436aSJayashankar Padath 
3*2abbce76SAndrew Jeffery #include "common/instance_id.hpp"
4c0c79481SSampa Misra #include "requester/handler.hpp"
5db12436aSJayashankar Padath 
6c453e164SGeorge Liu #include <libpldm/platform.h>
7c453e164SGeorge Liu 
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 {
1899fa1864SJayashankar Padath using ResDumpStatus = std::string;
1999fa1864SJayashankar 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
37a330b2f0SAndrew Jeffery      *  @param[in] instanceIdDb - pointer to a InstanceIdDb object
38db12436aSJayashankar Padath      *  @param[in] resDumpCurrentObjPath - resource dump current object path
39c0c79481SSampa Misra      *  @param[in] handler - PLDM request handler
40db12436aSJayashankar Padath      */
41c0c79481SSampa Misra     DbusToFileHandler(
42a330b2f0SAndrew Jeffery         int mctp_fd, uint8_t mctp_eid, pldm::InstanceIdDb* instanceIdDb,
43c0c79481SSampa Misra         sdbusplus::message::object_path resDumpCurrentObjPath,
44c0c79481SSampa Misra         pldm::requester::Handler<pldm::requester::Request>* handler);
45db12436aSJayashankar Padath 
46db12436aSJayashankar Padath     /** @brief Process the new resource dump request
47db12436aSJayashankar Padath      *  @param[in] vspString - vsp string
48db12436aSJayashankar Padath      *  @param[in] resDumpReqPass - resource dump password
49db12436aSJayashankar Padath      */
50db12436aSJayashankar Padath     void processNewResourceDump(const std::string& vspString,
51db12436aSJayashankar Padath                                 const std::string& resDumpReqPass);
52db12436aSJayashankar Padath 
53219ace9aSVarsha Kaverappa     /** @brief Process the new CSR file available
54219ace9aSVarsha Kaverappa      *  @param[in] csr - CSR string
55219ace9aSVarsha Kaverappa      *  @param[in] fileHandle - file Handle for  new file request
56219ace9aSVarsha Kaverappa      */
57219ace9aSVarsha Kaverappa     void newCsrFileAvailable(const std::string& csr,
58219ace9aSVarsha Kaverappa                              const std::string fileHandle);
59219ace9aSVarsha Kaverappa 
60db12436aSJayashankar Padath   private:
61db12436aSJayashankar Padath     /** @brief Send the new file available command request to hypervisor
62db12436aSJayashankar Padath      *  @param[in] fileSize - size of the file
63db12436aSJayashankar Padath      */
64db12436aSJayashankar Padath     void sendNewFileAvailableCmd(uint64_t fileSize);
65db12436aSJayashankar Padath 
66219ace9aSVarsha Kaverappa     /** @brief Send the new file available command request to hypervisor
67219ace9aSVarsha Kaverappa      *  @param[in] fileSize - size of the file
68219ace9aSVarsha Kaverappa      *  @param[in] fileHandle - file handle
69219ace9aSVarsha Kaverappa      *  @param[in] type - file type
70219ace9aSVarsha Kaverappa      */
71219ace9aSVarsha Kaverappa     void newFileAvailableSendToHost(const uint32_t fileSize,
72219ace9aSVarsha Kaverappa                                     const uint32_t fileHandle,
73219ace9aSVarsha Kaverappa                                     const uint16_t type);
74219ace9aSVarsha Kaverappa 
75c0c79481SSampa Misra     /** @brief report failure that a resource dump has failed
76c0c79481SSampa Misra      */
77c0c79481SSampa Misra     void reportResourceDumpFailure();
78c0c79481SSampa Misra 
79c047f800SPavithra Barithaya     /** @brief method to get the acf file contents */
80c047f800SPavithra Barithaya     std::string getAcfFileContent();
81c047f800SPavithra Barithaya 
82db12436aSJayashankar Padath     /** @brief fd of MCTP communications socket */
83db12436aSJayashankar Padath     int mctp_fd;
84db12436aSJayashankar Padath 
85db12436aSJayashankar Padath     /** @brief MCTP EID of host firmware */
86db12436aSJayashankar Padath     uint8_t mctp_eid;
87db12436aSJayashankar Padath 
88a330b2f0SAndrew Jeffery     /** @brief Pointer to an InstanceIdDb used to obtain PLDM instance id. */
89a330b2f0SAndrew Jeffery     pldm::InstanceIdDb* instanceIdDb;
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