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