xref: /openbmc/openpower-proc-control/extensions/phal/fw_update_watch.hpp (revision aaea68675bcc020ad360d3decbd6f9c9c5f6dd45)
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