1858d1aafSDhruvaraj Subhashchandran #pragma once 2858d1aafSDhruvaraj Subhashchandran 3*5f5c94d5SDhruvaraj Subhashchandran #include "sbe_type.hpp" 4*5f5c94d5SDhruvaraj 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 14*5f5c94d5SDhruvaraj Subhashchandran constexpr auto SBE_DUMP_TIMEOUT = 4 * 60; // Timeout in seconds 15*5f5c94d5SDhruvaraj 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 */ 29858d1aafSDhruvaraj 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 */ 36858d1aafSDhruvaraj Subhashchandran uint8_t** getPtr() 37858d1aafSDhruvaraj Subhashchandran { 38858d1aafSDhruvaraj Subhashchandran return &dataPtr; 39858d1aafSDhruvaraj Subhashchandran } 40858d1aafSDhruvaraj Subhashchandran /** @brief Returns the stored data 41858d1aafSDhruvaraj Subhashchandran */ 42858d1aafSDhruvaraj 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 **/ 61858d1aafSDhruvaraj Subhashchandran std::string getService(sdbusplus::bus::bus& 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> 75858d1aafSDhruvaraj Subhashchandran void setProperty(const std::string& interface, const std::string& propertyName, 76858d1aafSDhruvaraj Subhashchandran const std::string& path, sdbusplus::bus::bus& bus, 77858d1aafSDhruvaraj Subhashchandran const T& value) 78858d1aafSDhruvaraj Subhashchandran { 79858d1aafSDhruvaraj Subhashchandran constexpr auto PROPERTY_INTF = "org.freedesktop.DBus.Properties"; 80858d1aafSDhruvaraj Subhashchandran 81858d1aafSDhruvaraj Subhashchandran auto service = getService(bus, interface, path); 82858d1aafSDhruvaraj Subhashchandran auto method = bus.new_method_call(service.c_str(), path.c_str(), 83858d1aafSDhruvaraj Subhashchandran PROPERTY_INTF, "Set"); 84858d1aafSDhruvaraj Subhashchandran method.append(interface, propertyName, value); 85858d1aafSDhruvaraj Subhashchandran auto reply = bus.call(method); 86858d1aafSDhruvaraj Subhashchandran } 87858d1aafSDhruvaraj Subhashchandran 88*5f5c94d5SDhruvaraj Subhashchandran /** 89*5f5c94d5SDhruvaraj Subhashchandran * Request SBE dump from the dump manager 90*5f5c94d5SDhruvaraj Subhashchandran * 91*5f5c94d5SDhruvaraj Subhashchandran * Request SBE dump from the dump manager and register a monitor for observing 92*5f5c94d5SDhruvaraj Subhashchandran * the dump progress. 93*5f5c94d5SDhruvaraj Subhashchandran * 94*5f5c94d5SDhruvaraj Subhashchandran * @param failingUnit The id of the proc containing failed SBE 95*5f5c94d5SDhruvaraj Subhashchandran * @param eid Error log id associated with dump 96*5f5c94d5SDhruvaraj Subhashchandran * @param sbeType Type of the SBE 97*5f5c94d5SDhruvaraj Subhashchandran */ 98*5f5c94d5SDhruvaraj Subhashchandran void requestSBEDump(const uint32_t failingUnit, const uint32_t eid, 99*5f5c94d5SDhruvaraj Subhashchandran SBETypes sbeType); 100*5f5c94d5SDhruvaraj Subhashchandran 101858d1aafSDhruvaraj Subhashchandran } // namespace openpower::dump::util 102