blob: 615e10ce19bbf500fa5d74fe1f32e3219ae00577 [file] [log] [blame]
Jayanth Othayoth13c57ad2021-07-16 06:02:21 -05001#pragma once
2
3#include <sdbusplus/bus.hpp>
4#include <sdbusplus/server.hpp>
5
6namespace openpower
7{
8namespace phal
9{
10namespace fwupdate
11{
12
13static constexpr auto OBJ_SOFTWARE = "/xyz/openbmc_project/software";
14
15/** @class Watch
16 * @brief Adds d-bus signal based watch for software path interface add.
17 * @details This implements methods for watching for software path
18 * interface add signal and call appropriate function to initiate phal
19 * devtree attribute data collection and save to preserve partition.
20 * Rules:
21 * - Watch for interfaces added for the software path
22 * - If interface added is “Activation”
23 * - if Activation property value is “Ready”
24 * - Then software update is going to start
25 * - Collect phal devtree required attribute list and save to
26 * pre-defined location
27 *
28 */
29class Watch
30{
31 public:
32 Watch() = delete;
33 ~Watch() = default;
34 Watch(const Watch&) = delete;
35 Watch& operator=(const Watch&) = delete;
36 Watch(Watch&&) = default;
37 Watch& operator=(Watch&&) = default;
38
39 /** @brief constructs watch for interface add signals.
40 * @param[in] bus - The Dbus bus object
41 */
42
43 Watch(sdbusplus::bus::bus& bus) :
44 addMatch(bus,
45 sdbusplus::bus::match::rules::interfacesAdded() +
46 sdbusplus::bus::match::rules::path(OBJ_SOFTWARE),
47 std::bind(std::mem_fn(&Watch::fwIntfAddedCallback), this,
48 std::placeholders::_1))
49 {}
50
51 private:
52 /** @brief Method to check whether software update is in progress
53 * @return - bool
54 */
55 bool isSoftwareUpdateInProgress() const
56 {
57 return softwareUpdateInProgress;
58 }
59
60 /** @brief Method to indicate whether software update is in progress
61 *
62 * @param[in] progress
63 *
64 */
65 void setSoftwareUpdateProgress(bool progress)
66 {
67 softwareUpdateInProgress = progress;
68 }
69
70 /** @brief Callback function for software path add signal.
71 * @details Function provide required data related to new
72 * software path interface added to see software update progress.
73 *
74 * @param[in] msg - Data associated with subscribed signal
75 */
76 void fwIntfAddedCallback(sdbusplus::message::message& msg);
77
78 /** @brief sdbusplus signal match for software path add */
79 sdbusplus::bus::match_t addMatch;
80
81 /** @brief indicates whether software update is going on */
82 bool softwareUpdateInProgress = false;
83};
84
85/** @brief function to export phal devtree data file based
86 * on the filter file,
87 */
88void exportDevtree();
89
90} // namespace fwupdate
91} // namespace phal
92} // namespace openpower