1fb3bc06fSTom Joseph #pragma once 2fb3bc06fSTom Joseph 3fb3bc06fSTom Joseph #include "activation.hpp" 42abbce76SAndrew Jeffery #include "common/instance_id.hpp" 5fb3bc06fSTom Joseph #include "common/types.hpp" 6fb3bc06fSTom Joseph #include "device_updater.hpp" 7fb3bc06fSTom Joseph #include "inventory_manager.hpp" 8fb3bc06fSTom Joseph #include "requester/handler.hpp" 944524a5fSGilbert Chen #include "requester/mctp_endpoint_discovery.hpp" 10fb3bc06fSTom Joseph #include "update_manager.hpp" 11fb3bc06fSTom Joseph 12fb3bc06fSTom Joseph #include <unordered_map> 13fb3bc06fSTom Joseph #include <vector> 14fb3bc06fSTom Joseph 15fb3bc06fSTom Joseph namespace pldm 16fb3bc06fSTom Joseph { 17fb3bc06fSTom Joseph 18fb3bc06fSTom Joseph namespace fw_update 19fb3bc06fSTom Joseph { 20fb3bc06fSTom Joseph 21fb3bc06fSTom Joseph /** @class Manager 22fb3bc06fSTom Joseph * 23fb3bc06fSTom Joseph * This class handles all the aspects of the PLDM FW update specification for 24fb3bc06fSTom Joseph * the MCTP devices 25fb3bc06fSTom Joseph */ 2644524a5fSGilbert Chen class Manager : public pldm::MctpDiscoveryHandlerIntf 27fb3bc06fSTom Joseph { 28fb3bc06fSTom Joseph public: 29fb3bc06fSTom Joseph Manager() = delete; 30fb3bc06fSTom Joseph Manager(const Manager&) = delete; 31fb3bc06fSTom Joseph Manager(Manager&&) = delete; 32fb3bc06fSTom Joseph Manager& operator=(const Manager&) = delete; 33fb3bc06fSTom Joseph Manager& operator=(Manager&&) = delete; 34fb3bc06fSTom Joseph ~Manager() = default; 35fb3bc06fSTom Joseph 36fb3bc06fSTom Joseph /** @brief Constructor 37fb3bc06fSTom Joseph * 38fb3bc06fSTom Joseph * @param[in] handler - PLDM request handler 39fb3bc06fSTom Joseph */ Manager(Event & event,requester::Handler<requester::Request> & handler,pldm::InstanceIdDb & instanceIdDb)40fb3bc06fSTom Joseph explicit Manager(Event& event, 41fb3bc06fSTom Joseph requester::Handler<requester::Request>& handler, 42a330b2f0SAndrew Jeffery pldm::InstanceIdDb& instanceIdDb) : 438b169dc5SUnive Tien inventoryMgr(handler, instanceIdDb, descriptorMap, 448b169dc5SUnive Tien downstreamDescriptorMap, componentInfoMap), 45a330b2f0SAndrew Jeffery updateManager(event, handler, instanceIdDb, descriptorMap, 46fb3bc06fSTom Joseph componentInfoMap) 47fb3bc06fSTom Joseph {} 48fb3bc06fSTom Joseph 4944524a5fSGilbert Chen /** @brief Helper function to invoke registered handlers for 5044524a5fSGilbert Chen * the added MCTP endpoints 51fb3bc06fSTom Joseph * 5244524a5fSGilbert Chen * @param[in] mctpInfos - information of discovered MCTP endpoints 53fb3bc06fSTom Joseph */ handleMctpEndpoints(const MctpInfos & mctpInfos)5444524a5fSGilbert Chen void handleMctpEndpoints(const MctpInfos& mctpInfos) 55fb3bc06fSTom Joseph { 5644524a5fSGilbert Chen std::vector<mctp_eid_t> eids; 5744524a5fSGilbert Chen for (const auto& mctpInfo : mctpInfos) 5844524a5fSGilbert Chen { 5944524a5fSGilbert Chen eids.emplace_back(std::get<mctp_eid_t>(mctpInfo)); 6044524a5fSGilbert Chen } 6144524a5fSGilbert Chen 62fb3bc06fSTom Joseph inventoryMgr.discoverFDs(eids); 63fb3bc06fSTom Joseph } 64fb3bc06fSTom Joseph 6544524a5fSGilbert Chen /** @brief Helper function to invoke registered handlers for 6644524a5fSGilbert Chen * the removed MCTP endpoints 6744524a5fSGilbert Chen * 6844524a5fSGilbert Chen * @param[in] mctpInfos - information of removed MCTP endpoints 6944524a5fSGilbert Chen */ handleRemovedMctpEndpoints(const MctpInfos &)7044524a5fSGilbert Chen void handleRemovedMctpEndpoints(const MctpInfos&) 7144524a5fSGilbert Chen { 7244524a5fSGilbert Chen return; 7344524a5fSGilbert Chen } 7444524a5fSGilbert Chen 7575e00422SChau Ly /** @brief Helper function to invoke registered handlers for 7675e00422SChau Ly * updating the availability status of the MCTP endpoint 7775e00422SChau Ly * 7875e00422SChau Ly * @param[in] mctpInfo - information of the target endpoint 7975e00422SChau Ly * @param[in] availability - new availability status 8075e00422SChau Ly */ updateMctpEndpointAvailability(const MctpInfo &,Availability)8175e00422SChau Ly void updateMctpEndpointAvailability(const MctpInfo&, Availability) 8275e00422SChau Ly { 8375e00422SChau Ly return; 8475e00422SChau Ly } 8575e00422SChau Ly 86fb3bc06fSTom Joseph /** @brief Handle PLDM request for the commands in the FW update 87fb3bc06fSTom Joseph * specification 88fb3bc06fSTom Joseph * 89fb3bc06fSTom Joseph * @param[in] eid - Remote MCTP Endpoint ID 90fb3bc06fSTom Joseph * @param[in] command - PLDM command code 91fb3bc06fSTom Joseph * @param[in] request - PLDM request message 92fb3bc06fSTom Joseph * @param[in] requestLen - PLDM request message length 93fb3bc06fSTom Joseph * @return PLDM response message 94fb3bc06fSTom Joseph */ handleRequest(mctp_eid_t eid,Command command,const pldm_msg * request,size_t reqMsgLen)95fb3bc06fSTom Joseph Response handleRequest(mctp_eid_t eid, Command command, 96fb3bc06fSTom Joseph const pldm_msg* request, size_t reqMsgLen) 97fb3bc06fSTom Joseph { 98fb3bc06fSTom Joseph return updateManager.handleRequest(eid, command, request, reqMsgLen); 99fb3bc06fSTom Joseph } 100fb3bc06fSTom Joseph 101*38e12aa2SThu Nguyen /** @brief Get Active EIDs. 102*38e12aa2SThu Nguyen * 103*38e12aa2SThu Nguyen * @param[in] addr - MCTP address of terminus 104*38e12aa2SThu Nguyen * @param[in] terminiNames - MCTP terminus name 105*38e12aa2SThu Nguyen */ getActiveEidByName(const std::string &)106*38e12aa2SThu Nguyen std::optional<mctp_eid_t> getActiveEidByName(const std::string&) 107*38e12aa2SThu Nguyen { 108*38e12aa2SThu Nguyen return std::nullopt; 109*38e12aa2SThu Nguyen } 110*38e12aa2SThu Nguyen 111fb3bc06fSTom Joseph private: 112fb3bc06fSTom Joseph /** Descriptor information of all the discovered MCTP endpoints */ 113fb3bc06fSTom Joseph DescriptorMap descriptorMap; 114fb3bc06fSTom Joseph 1158b169dc5SUnive Tien /** Downstream descriptor information of all the discovered MCTP endpoints 1168b169dc5SUnive Tien */ 1178b169dc5SUnive Tien DownstreamDescriptorMap downstreamDescriptorMap; 1188b169dc5SUnive Tien 119fb3bc06fSTom Joseph /** Component information of all the discovered MCTP endpoints */ 120fb3bc06fSTom Joseph ComponentInfoMap componentInfoMap; 121fb3bc06fSTom Joseph 122fb3bc06fSTom Joseph /** @brief PLDM firmware inventory manager */ 123fb3bc06fSTom Joseph InventoryManager inventoryMgr; 124fb3bc06fSTom Joseph 125fb3bc06fSTom Joseph /** @brief PLDM firmware update manager */ 126fb3bc06fSTom Joseph UpdateManager updateManager; 127fb3bc06fSTom Joseph }; 128fb3bc06fSTom Joseph 129fb3bc06fSTom Joseph } // namespace fw_update 130fb3bc06fSTom Joseph 131fb3bc06fSTom Joseph } // namespace pldm 132