1858d1aafSDhruvaraj Subhashchandran #pragma once
2858d1aafSDhruvaraj Subhashchandran 
35f5c94d5SDhruvaraj Subhashchandran #include "sbe_type.hpp"
45f5c94d5SDhruvaraj Subhashchandran 
5858d1aafSDhruvaraj Subhashchandran #include <sdbusplus/server.hpp>
6858d1aafSDhruvaraj Subhashchandran 
7858d1aafSDhruvaraj Subhashchandran #include <filesystem>
8858d1aafSDhruvaraj Subhashchandran #include <map>
9858d1aafSDhruvaraj Subhashchandran #include <string>
10858d1aafSDhruvaraj Subhashchandran #include <variant>
11858d1aafSDhruvaraj Subhashchandran namespace openpower::dump::util
12858d1aafSDhruvaraj Subhashchandran {
13858d1aafSDhruvaraj Subhashchandran 
145f5c94d5SDhruvaraj Subhashchandran constexpr auto SBE_DUMP_TIMEOUT = 4 * 60; // Timeout in seconds
155f5c94d5SDhruvaraj Subhashchandran 
16858d1aafSDhruvaraj Subhashchandran using DumpCreateParams =
17858d1aafSDhruvaraj Subhashchandran     std::map<std::string, std::variant<std::string, uint64_t>>;
18858d1aafSDhruvaraj Subhashchandran 
19858d1aafSDhruvaraj Subhashchandran /** @struct DumpPtr
20858d1aafSDhruvaraj Subhashchandran  * @brief a structure holding the data pointer
21858d1aafSDhruvaraj Subhashchandran  * @details This is a RAII container for the dump data
22858d1aafSDhruvaraj Subhashchandran  * returned by the SBE
23858d1aafSDhruvaraj Subhashchandran  */
24858d1aafSDhruvaraj Subhashchandran struct DumpDataPtr
25858d1aafSDhruvaraj Subhashchandran {
26858d1aafSDhruvaraj Subhashchandran   public:
27858d1aafSDhruvaraj Subhashchandran     /** @brief Destructor for the object, free the allocated memory.
28858d1aafSDhruvaraj Subhashchandran      */
~DumpDataPtropenpower::dump::util::DumpDataPtr29858d1aafSDhruvaraj Subhashchandran     ~DumpDataPtr()
30858d1aafSDhruvaraj Subhashchandran     {
31858d1aafSDhruvaraj Subhashchandran         // The memory is allocated using malloc
32858d1aafSDhruvaraj Subhashchandran         free(dataPtr);
33858d1aafSDhruvaraj Subhashchandran     }
34858d1aafSDhruvaraj Subhashchandran     /** @brief Returns the pointer to the data
35858d1aafSDhruvaraj Subhashchandran      */
getPtropenpower::dump::util::DumpDataPtr36858d1aafSDhruvaraj Subhashchandran     uint8_t** getPtr()
37858d1aafSDhruvaraj Subhashchandran     {
38858d1aafSDhruvaraj Subhashchandran         return &dataPtr;
39858d1aafSDhruvaraj Subhashchandran     }
40858d1aafSDhruvaraj Subhashchandran     /** @brief Returns the stored data
41858d1aafSDhruvaraj Subhashchandran      */
getDataopenpower::dump::util::DumpDataPtr42858d1aafSDhruvaraj Subhashchandran     uint8_t* getData()
43858d1aafSDhruvaraj Subhashchandran     {
44858d1aafSDhruvaraj Subhashchandran         return dataPtr;
45858d1aafSDhruvaraj Subhashchandran     }
46858d1aafSDhruvaraj Subhashchandran 
47858d1aafSDhruvaraj Subhashchandran   private:
48858d1aafSDhruvaraj Subhashchandran     /** The pointer to the data */
49858d1aafSDhruvaraj Subhashchandran     uint8_t* dataPtr = nullptr;
50858d1aafSDhruvaraj Subhashchandran };
51858d1aafSDhruvaraj Subhashchandran 
52858d1aafSDhruvaraj Subhashchandran /**
53858d1aafSDhruvaraj Subhashchandran  * @brief Get DBUS service for input interface via mapper call
54858d1aafSDhruvaraj Subhashchandran  *
55858d1aafSDhruvaraj Subhashchandran  * @param[in] bus -  DBUS Bus Object
56858d1aafSDhruvaraj Subhashchandran  * @param[in] intf - DBUS Interface
57858d1aafSDhruvaraj Subhashchandran  * @param[in] path - DBUS Object Path
58858d1aafSDhruvaraj Subhashchandran  *
59858d1aafSDhruvaraj Subhashchandran  * @return distinct dbus name for input interface/path
60858d1aafSDhruvaraj Subhashchandran  **/
61*9ae780d5SPatrick Williams std::string getService(sdbusplus::bus_t& bus, const std::string& intf,
62858d1aafSDhruvaraj Subhashchandran                        const std::string& path);
63858d1aafSDhruvaraj Subhashchandran 
64858d1aafSDhruvaraj Subhashchandran /**
65858d1aafSDhruvaraj Subhashchandran  * @brief Set the property value based on the inputs
66858d1aafSDhruvaraj Subhashchandran  *
67858d1aafSDhruvaraj Subhashchandran  * @param[in] interface - the interface the property is on
68858d1aafSDhruvaraj Subhashchandran  * @param[in] propertName - the name of the property
69858d1aafSDhruvaraj Subhashchandran  * @param[in] path - the D-Bus path
70858d1aafSDhruvaraj Subhashchandran  * @param[in] service - the D-Bus service
71858d1aafSDhruvaraj Subhashchandran  * @param[in] bus - the D-Bus object
72858d1aafSDhruvaraj Subhashchandran  * @param[in] value - the value to set the property to
73858d1aafSDhruvaraj Subhashchandran  */
74858d1aafSDhruvaraj Subhashchandran template <typename T>
setProperty(const std::string & interface,const std::string & propertyName,const std::string & path,sdbusplus::bus_t & bus,const T & value)75858d1aafSDhruvaraj Subhashchandran void setProperty(const std::string& interface, const std::string& propertyName,
76*9ae780d5SPatrick Williams                  const std::string& path, sdbusplus::bus_t& bus, const T& value)
77858d1aafSDhruvaraj Subhashchandran {
78858d1aafSDhruvaraj Subhashchandran     constexpr auto PROPERTY_INTF = "org.freedesktop.DBus.Properties";
79858d1aafSDhruvaraj Subhashchandran 
80858d1aafSDhruvaraj Subhashchandran     auto service = getService(bus, interface, path);
81858d1aafSDhruvaraj Subhashchandran     auto method = bus.new_method_call(service.c_str(), path.c_str(),
82858d1aafSDhruvaraj Subhashchandran                                       PROPERTY_INTF, "Set");
83858d1aafSDhruvaraj Subhashchandran     method.append(interface, propertyName, value);
84858d1aafSDhruvaraj Subhashchandran     auto reply = bus.call(method);
85858d1aafSDhruvaraj Subhashchandran }
86858d1aafSDhruvaraj Subhashchandran 
875f5c94d5SDhruvaraj Subhashchandran /**
885f5c94d5SDhruvaraj Subhashchandran  * Request SBE dump from the dump manager
895f5c94d5SDhruvaraj Subhashchandran  *
905f5c94d5SDhruvaraj Subhashchandran  * Request SBE dump from the dump manager and register a monitor for observing
915f5c94d5SDhruvaraj Subhashchandran  * the dump progress.
925f5c94d5SDhruvaraj Subhashchandran  *
935f5c94d5SDhruvaraj Subhashchandran  * @param failingUnit The id of the proc containing failed SBE
945f5c94d5SDhruvaraj Subhashchandran  * @param eid Error log id associated with dump
955f5c94d5SDhruvaraj Subhashchandran  * @param sbeType Type of the SBE
965f5c94d5SDhruvaraj Subhashchandran  */
975f5c94d5SDhruvaraj Subhashchandran void requestSBEDump(const uint32_t failingUnit, const uint32_t eid,
985f5c94d5SDhruvaraj Subhashchandran                     SBETypes sbeType);
995f5c94d5SDhruvaraj Subhashchandran 
100858d1aafSDhruvaraj Subhashchandran } // namespace openpower::dump::util
101