1 #pragma once 2 3 #include "common/instance_id.hpp" 4 #include "common/types.hpp" 5 #include "requester/handler.hpp" 6 7 namespace pldm 8 { 9 10 namespace fw_update 11 { 12 13 /** @class InventoryManager 14 * 15 * InventoryManager class manages the software inventory of firmware devices 16 * managed by the BMC. It discovers the firmware identifiers and the component 17 * details of the FD. Firmware identifiers, component details and update 18 * capabilities of FD are populated by the InventoryManager and is used for the 19 * firmware update of the FDs. 20 */ 21 class InventoryManager 22 { 23 public: 24 InventoryManager() = delete; 25 InventoryManager(const InventoryManager&) = delete; 26 InventoryManager(InventoryManager&&) = delete; 27 InventoryManager& operator=(const InventoryManager&) = delete; 28 InventoryManager& operator=(InventoryManager&&) = delete; 29 ~InventoryManager() = default; 30 31 /** @brief Constructor 32 * 33 * @param[in] handler - PLDM request handler 34 * @param[in] instanceIdDb - Managing instance ID for PLDM requests 35 * @param[out] descriptorMap - Populate the firmware identifiers for the 36 * FDs managed by the BMC. 37 * @param[out] componentInfoMap - Populate the component info for the FDs 38 * managed by the BMC. 39 */ 40 explicit InventoryManager( 41 pldm::requester::Handler<pldm::requester::Request>& handler, 42 InstanceIdDb& instanceIdDb, DescriptorMap& descriptorMap, 43 ComponentInfoMap& componentInfoMap) : 44 handler(handler), 45 instanceIdDb(instanceIdDb), descriptorMap(descriptorMap), 46 componentInfoMap(componentInfoMap) 47 {} 48 49 /** @brief Discover the firmware identifiers and component details of FDs 50 * 51 * Inventory commands QueryDeviceIdentifiers and GetFirmwareParmeters 52 * commands are sent to every FD and the response is used to populate 53 * the firmware identifiers and component details of the FDs. 54 * 55 * @param[in] eids - MCTP endpoint ID of the FDs 56 */ 57 void discoverFDs(const std::vector<mctp_eid_t>& eids); 58 59 /** @brief Handler for QueryDeviceIdentifiers command response 60 * 61 * The response of the QueryDeviceIdentifiers is processed and firmware 62 * identifiers of the FD is updated. GetFirmwareParameters command request 63 * is sent to the FD. 64 * 65 * @param[in] eid - Remote MCTP endpoint 66 * @param[in] response - PLDM response message 67 * @param[in] respMsgLen - Response message length 68 */ 69 void queryDeviceIdentifiers(mctp_eid_t eid, const pldm_msg* response, 70 size_t respMsgLen); 71 72 /** @brief Handler for GetFirmwareParameters command response 73 * 74 * Handling the response of GetFirmwareParameters command and create 75 * software version D-Bus objects. 76 * 77 * @param[in] eid - Remote MCTP endpoint 78 * @param[in] response - PLDM response message 79 * @param[in] respMsgLen - Response message length 80 */ 81 void getFirmwareParameters(mctp_eid_t eid, const pldm_msg* response, 82 size_t respMsgLen); 83 84 private: 85 /** @brief Send GetFirmwareParameters command request 86 * 87 * @param[in] eid - Remote MCTP endpoint 88 */ 89 void sendGetFirmwareParametersRequest(mctp_eid_t eid); 90 91 /** @brief PLDM request handler */ 92 pldm::requester::Handler<pldm::requester::Request>& handler; 93 94 /** @brief Instance ID database for managing instance ID*/ 95 InstanceIdDb& instanceIdDb; 96 97 /** @brief Device identifiers of the managed FDs */ 98 DescriptorMap& descriptorMap; 99 100 /** @brief Component information needed for the update of the managed FDs */ 101 ComponentInfoMap& componentInfoMap; 102 }; 103 104 } // namespace fw_update 105 106 } // namespace pldm 107