1db12436aSJayashankar Padath #pragma once 2db12436aSJayashankar Padath 3db12436aSJayashankar Padath #include "pldmd/dbus_impl_requester.hpp" 4c0c79481SSampa Misra #include "requester/handler.hpp" 5db12436aSJayashankar Padath 6*c453e164SGeorge Liu #include <libpldm/platform.h> 7*c453e164SGeorge 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 37db12436aSJayashankar Padath * @param[in] requester - pointer to a Requester object 38db12436aSJayashankar Padath * @param[in] resDumpCurrentObjPath - resource dump current object path 39c0c79481SSampa Misra * @param[in] handler - PLDM request handler 40db12436aSJayashankar Padath */ 41c0c79481SSampa Misra DbusToFileHandler( 42c0c79481SSampa Misra int mctp_fd, uint8_t mctp_eid, dbus_api::Requester* requester, 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 88db12436aSJayashankar Padath /** @brief Pointer to a Requester object, primarily used to access API to 89db12436aSJayashankar Padath * obtain PLDM instance id. 90db12436aSJayashankar Padath */ 91db12436aSJayashankar Padath dbus_api::Requester* requester; 92db12436aSJayashankar Padath 93db12436aSJayashankar Padath /** @brief Hold the current resource dump object path */ 94db12436aSJayashankar Padath sdbusplus::message::object_path resDumpCurrentObjPath; 95c0c79481SSampa Misra 96c0c79481SSampa Misra /** @brief PLDM request handler */ 97c0c79481SSampa Misra pldm::requester::Handler<pldm::requester::Request>* handler; 98db12436aSJayashankar Padath }; 99db12436aSJayashankar Padath 100db12436aSJayashankar Padath } // namespace oem_ibm 101db12436aSJayashankar Padath } // namespace requester 102db12436aSJayashankar Padath } // namespace pldm 103