113c57ad8SJayanth Othayoth #pragma once 213c57ad8SJayanth Othayoth 313c57ad8SJayanth Othayoth #include <sdbusplus/bus.hpp> 413c57ad8SJayanth Othayoth #include <sdbusplus/server.hpp> 513c57ad8SJayanth Othayoth 613c57ad8SJayanth Othayoth namespace openpower 713c57ad8SJayanth Othayoth { 813c57ad8SJayanth Othayoth namespace phal 913c57ad8SJayanth Othayoth { 1013c57ad8SJayanth Othayoth namespace fwupdate 1113c57ad8SJayanth Othayoth { 1213c57ad8SJayanth Othayoth 1313c57ad8SJayanth Othayoth static constexpr auto OBJ_SOFTWARE = "/xyz/openbmc_project/software"; 1413c57ad8SJayanth Othayoth 1513c57ad8SJayanth Othayoth /** @class Watch 1613c57ad8SJayanth Othayoth * @brief Adds d-bus signal based watch for software path interface add. 1713c57ad8SJayanth Othayoth * @details This implements methods for watching for software path 1813c57ad8SJayanth Othayoth * interface add signal and call appropriate function to initiate phal 1913c57ad8SJayanth Othayoth * devtree attribute data collection and save to preserve partition. 2013c57ad8SJayanth Othayoth * Rules: 2113c57ad8SJayanth Othayoth * - Watch for interfaces added for the software path 2213c57ad8SJayanth Othayoth * - If interface added is “Activation” 2313c57ad8SJayanth Othayoth * - if Activation property value is “Ready” 2413c57ad8SJayanth Othayoth * - Then software update is going to start 2513c57ad8SJayanth Othayoth * - Collect phal devtree required attribute list and save to 2613c57ad8SJayanth Othayoth * pre-defined location 2713c57ad8SJayanth Othayoth * 2813c57ad8SJayanth Othayoth */ 2913c57ad8SJayanth Othayoth class Watch 3013c57ad8SJayanth Othayoth { 3113c57ad8SJayanth Othayoth public: 3213c57ad8SJayanth Othayoth Watch() = delete; 3313c57ad8SJayanth Othayoth ~Watch() = default; 3413c57ad8SJayanth Othayoth Watch(const Watch&) = delete; 3513c57ad8SJayanth Othayoth Watch& operator=(const Watch&) = delete; 3613c57ad8SJayanth Othayoth Watch(Watch&&) = default; 3713c57ad8SJayanth Othayoth Watch& operator=(Watch&&) = default; 3813c57ad8SJayanth Othayoth 3913c57ad8SJayanth Othayoth /** @brief constructs watch for interface add signals. 4013c57ad8SJayanth Othayoth * @param[in] bus - The Dbus bus object 4113c57ad8SJayanth Othayoth */ 4213c57ad8SJayanth Othayoth Watch(sdbusplus::bus_t & bus)43*aaea6867SPatrick Williams Watch(sdbusplus::bus_t& bus) : 4413c57ad8SJayanth Othayoth addMatch(bus, 4513c57ad8SJayanth Othayoth sdbusplus::bus::match::rules::interfacesAdded() + 4613c57ad8SJayanth Othayoth sdbusplus::bus::match::rules::path(OBJ_SOFTWARE), 4713c57ad8SJayanth Othayoth std::bind(std::mem_fn(&Watch::fwIntfAddedCallback), this, 4813c57ad8SJayanth Othayoth std::placeholders::_1)) 4913c57ad8SJayanth Othayoth {} 5013c57ad8SJayanth Othayoth 5113c57ad8SJayanth Othayoth private: 5213c57ad8SJayanth Othayoth /** @brief Method to check whether software update is in progress 5313c57ad8SJayanth Othayoth * @return - bool 5413c57ad8SJayanth Othayoth */ isSoftwareUpdateInProgress() const5513c57ad8SJayanth Othayoth bool isSoftwareUpdateInProgress() const 5613c57ad8SJayanth Othayoth { 5713c57ad8SJayanth Othayoth return softwareUpdateInProgress; 5813c57ad8SJayanth Othayoth } 5913c57ad8SJayanth Othayoth 6013c57ad8SJayanth Othayoth /** @brief Method to indicate whether software update is in progress 6113c57ad8SJayanth Othayoth * 6213c57ad8SJayanth Othayoth * @param[in] progress 6313c57ad8SJayanth Othayoth * 6413c57ad8SJayanth Othayoth */ setSoftwareUpdateProgress(bool progress)6513c57ad8SJayanth Othayoth void setSoftwareUpdateProgress(bool progress) 6613c57ad8SJayanth Othayoth { 6713c57ad8SJayanth Othayoth softwareUpdateInProgress = progress; 6813c57ad8SJayanth Othayoth } 6913c57ad8SJayanth Othayoth 7013c57ad8SJayanth Othayoth /** @brief Callback function for software path add signal. 7113c57ad8SJayanth Othayoth * @details Function provide required data related to new 7213c57ad8SJayanth Othayoth * software path interface added to see software update progress. 7313c57ad8SJayanth Othayoth * 7413c57ad8SJayanth Othayoth * @param[in] msg - Data associated with subscribed signal 7513c57ad8SJayanth Othayoth */ 76*aaea6867SPatrick Williams void fwIntfAddedCallback(sdbusplus::message_t& msg); 7713c57ad8SJayanth Othayoth 7813c57ad8SJayanth Othayoth /** @brief sdbusplus signal match for software path add */ 7913c57ad8SJayanth Othayoth sdbusplus::bus::match_t addMatch; 8013c57ad8SJayanth Othayoth 8113c57ad8SJayanth Othayoth /** @brief indicates whether software update is going on */ 8213c57ad8SJayanth Othayoth bool softwareUpdateInProgress = false; 8313c57ad8SJayanth Othayoth }; 8413c57ad8SJayanth Othayoth 8513c57ad8SJayanth Othayoth /** @brief function to export phal devtree data file based 8613c57ad8SJayanth Othayoth * on the filter file, 8713c57ad8SJayanth Othayoth */ 8813c57ad8SJayanth Othayoth void exportDevtree(); 8913c57ad8SJayanth Othayoth 9013c57ad8SJayanth Othayoth } // namespace fwupdate 9113c57ad8SJayanth Othayoth } // namespace phal 9213c57ad8SJayanth Othayoth } // namespace openpower 93