xref: /openbmc/pldm/fw-update/firmware_inventory_manager.hpp (revision 7ad45b401134e3b3a05a75200dbba00afd5aee46)
1*7ad45b40SUnive Tien #pragma once
2*7ad45b40SUnive Tien 
3*7ad45b40SUnive Tien #include "common/types.hpp"
4*7ad45b40SUnive Tien #include "firmware_inventory.hpp"
5*7ad45b40SUnive Tien 
6*7ad45b40SUnive Tien class FirmwareInventoryManagerTest;
7*7ad45b40SUnive Tien 
8*7ad45b40SUnive Tien namespace pldm::fw_update
9*7ad45b40SUnive Tien {
10*7ad45b40SUnive Tien 
11*7ad45b40SUnive Tien using ObjectPath = pldm::dbus::ObjectPath;
12*7ad45b40SUnive Tien using SoftwareMap =
13*7ad45b40SUnive Tien     std::map<SoftwareIdentifier, std::unique_ptr<FirmwareInventory>>;
14*7ad45b40SUnive Tien 
15*7ad45b40SUnive Tien /**
16*7ad45b40SUnive Tien  * @brief Get the Board path from Entity Manager for the given inventory path
17*7ad45b40SUnive Tien  * @param[in] path - Inventory path
18*7ad45b40SUnive Tien  * @param[in] handler - D-Bus handler for querying ancestors
19*7ad45b40SUnive Tien  * @return Board path if found, std::nullopt otherwise
20*7ad45b40SUnive Tien  */
21*7ad45b40SUnive Tien std::optional<std::filesystem::path> getBoardPath(
22*7ad45b40SUnive Tien     const pldm::utils::DBusHandler& handler, const InventoryPath& path);
23*7ad45b40SUnive Tien 
24*7ad45b40SUnive Tien class FirmwareInventoryManager
25*7ad45b40SUnive Tien {
26*7ad45b40SUnive Tien   public:
27*7ad45b40SUnive Tien     friend class ::FirmwareInventoryManagerTest;
28*7ad45b40SUnive Tien     FirmwareInventoryManager() = delete;
29*7ad45b40SUnive Tien     FirmwareInventoryManager(const FirmwareInventoryManager&) = delete;
30*7ad45b40SUnive Tien     FirmwareInventoryManager(FirmwareInventoryManager&&) = delete;
31*7ad45b40SUnive Tien     FirmwareInventoryManager& operator=(const FirmwareInventoryManager&) =
32*7ad45b40SUnive Tien         delete;
33*7ad45b40SUnive Tien     FirmwareInventoryManager& operator=(FirmwareInventoryManager&&) = delete;
34*7ad45b40SUnive Tien     ~FirmwareInventoryManager() = default;
35*7ad45b40SUnive Tien 
36*7ad45b40SUnive Tien     /**
37*7ad45b40SUnive Tien      * @brief Constructor
38*7ad45b40SUnive Tien      * @param[in] configurations - Reference to the EM configurations for MCTP
39*7ad45b40SUnive Tien      * endpoints
40*7ad45b40SUnive Tien      */
FirmwareInventoryManager(const pldm::utils::DBusHandler * dbusHandler,const Configurations & config)41*7ad45b40SUnive Tien     explicit FirmwareInventoryManager(
42*7ad45b40SUnive Tien         const pldm::utils::DBusHandler* dbusHandler,
43*7ad45b40SUnive Tien         const Configurations& config) :
44*7ad45b40SUnive Tien         dbusHandler(dbusHandler), configurations(config)
45*7ad45b40SUnive Tien     {}
46*7ad45b40SUnive Tien 
47*7ad45b40SUnive Tien     /**
48*7ad45b40SUnive Tien      * @brief Creates a firmware inventory entry for the given software
49*7ad45b40SUnive Tien      * identifier
50*7ad45b40SUnive Tien      * @param[in] softwareIdentifier - Software identifier containing EID and
51*7ad45b40SUnive Tien      *                                 component identifier
52*7ad45b40SUnive Tien      * @param[in] softwareName - Name of the firmware device
53*7ad45b40SUnive Tien      * @param[in] activeVersion - Active version of the firmware
54*7ad45b40SUnive Tien      * @param[in] descriptors - Descriptors associated with the firmware
55*7ad45b40SUnive Tien      * @param[in] componentInfo - Component information associated with the
56*7ad45b40SUnive Tien      * firmware
57*7ad45b40SUnive Tien      */
58*7ad45b40SUnive Tien     void createFirmwareEntry(
59*7ad45b40SUnive Tien         const SoftwareIdentifier& softwareIdentifier,
60*7ad45b40SUnive Tien         const SoftwareName& softwareName, const std::string& activeVersion,
61*7ad45b40SUnive Tien         const Descriptors& descriptors, const ComponentInfo& componentInfo);
62*7ad45b40SUnive Tien 
63*7ad45b40SUnive Tien     /**
64*7ad45b40SUnive Tien      * @brief Deletes the firmware inventory entry for the given EID
65*7ad45b40SUnive Tien      * @param[in] eid - MCTP endpoint ID for which the firmware inventory entry
66*7ad45b40SUnive Tien      *                  needs to be deleted
67*7ad45b40SUnive Tien      */
68*7ad45b40SUnive Tien     void deleteFirmwareEntry(const pldm::eid& eid);
69*7ad45b40SUnive Tien 
70*7ad45b40SUnive Tien   private:
71*7ad45b40SUnive Tien     /**
72*7ad45b40SUnive Tien      * @brief Get the inventory path associated with the given EID
73*7ad45b40SUnive Tien      * @param[in] eid - MCTP endpoint ID
74*7ad45b40SUnive Tien      * @return Inventory path if found, std::nullopt otherwise
75*7ad45b40SUnive Tien      */
76*7ad45b40SUnive Tien     std::optional<InventoryPath> getInventoryPath(const pldm::eid& eid) const;
77*7ad45b40SUnive Tien 
78*7ad45b40SUnive Tien     /**
79*7ad45b40SUnive Tien      * @brief D-Bus Handler
80*7ad45b40SUnive Tien      */
81*7ad45b40SUnive Tien     const pldm::utils::DBusHandler* dbusHandler;
82*7ad45b40SUnive Tien 
83*7ad45b40SUnive Tien     /**
84*7ad45b40SUnive Tien      * @brief Map of software identifier to FirmwareInventory instances
85*7ad45b40SUnive Tien      *        This map maintains the firmware inventory entries created for
86*7ad45b40SUnive Tien      *        different firmware components identified by their software
87*7ad45b40SUnive Tien      *        identifiers (EID and component identifier).
88*7ad45b40SUnive Tien      */
89*7ad45b40SUnive Tien     SoftwareMap softwareMap;
90*7ad45b40SUnive Tien 
91*7ad45b40SUnive Tien     /**
92*7ad45b40SUnive Tien      * @brief Reference to the EM configurations for MCTP endpoints
93*7ad45b40SUnive Tien      *        This is used to retrieve the associated endpoint information
94*7ad45b40SUnive Tien      *        when creating firmware inventory entries.
95*7ad45b40SUnive Tien      *        It is expected that the configurations are provided during
96*7ad45b40SUnive Tien      *        the initialization of the FirmwareInventoryManager.
97*7ad45b40SUnive Tien      */
98*7ad45b40SUnive Tien     const Configurations& configurations;
99*7ad45b40SUnive Tien };
100*7ad45b40SUnive Tien 
101*7ad45b40SUnive Tien } // namespace pldm::fw_update
102