blob: 4f86876a7e0d3bb64acdcea9dd89148f451ef0c3 [file] [log] [blame]
Tom Josephfb3bc062021-08-17 07:48:11 -07001#pragma once
2
3#include "libpldm/requester/pldm.h"
4
5#include "activation.hpp"
6#include "common/types.hpp"
7#include "device_updater.hpp"
8#include "inventory_manager.hpp"
9#include "pldmd/dbus_impl_requester.hpp"
10#include "requester/handler.hpp"
11#include "update_manager.hpp"
12
13#include <unordered_map>
14#include <vector>
15
16namespace pldm
17{
18
19namespace fw_update
20{
21
22using namespace pldm::dbus_api;
23
24/** @class Manager
25 *
26 * This class handles all the aspects of the PLDM FW update specification for
27 * the MCTP devices
28 */
29class Manager
30{
31
32 public:
33 Manager() = delete;
34 Manager(const Manager&) = delete;
35 Manager(Manager&&) = delete;
36 Manager& operator=(const Manager&) = delete;
37 Manager& operator=(Manager&&) = delete;
38 ~Manager() = default;
39
40 /** @brief Constructor
41 *
42 * @param[in] handler - PLDM request handler
43 */
44 explicit Manager(Event& event,
45 requester::Handler<requester::Request>& handler,
46 Requester& requester) :
47 inventoryMgr(handler, requester, descriptorMap, componentInfoMap),
48 updateManager(event, handler, requester, descriptorMap,
49 componentInfoMap)
50 {}
51
52 /** @brief Discover MCTP endpoints that support the PLDM firmware update
53 * specification
54 *
55 * @param[in] eids - Array of MCTP endpoints
56 *
57 * @return return PLDM_SUCCESS on success and PLDM_ERROR otherwise
58 */
59 void handleMCTPEndpoints(const std::vector<mctp_eid_t>& eids)
60 {
61 inventoryMgr.discoverFDs(eids);
62 }
63
64 /** @brief Handle PLDM request for the commands in the FW update
65 * specification
66 *
67 * @param[in] eid - Remote MCTP Endpoint ID
68 * @param[in] command - PLDM command code
69 * @param[in] request - PLDM request message
70 * @param[in] requestLen - PLDM request message length
71 * @return PLDM response message
72 */
73 Response handleRequest(mctp_eid_t eid, Command command,
74 const pldm_msg* request, size_t reqMsgLen)
75 {
76 return updateManager.handleRequest(eid, command, request, reqMsgLen);
77 }
78
79 private:
80 /** Descriptor information of all the discovered MCTP endpoints */
81 DescriptorMap descriptorMap;
82
83 /** Component information of all the discovered MCTP endpoints */
84 ComponentInfoMap componentInfoMap;
85
86 /** @brief PLDM firmware inventory manager */
87 InventoryManager inventoryMgr;
88
89 /** @brief PLDM firmware update manager */
90 UpdateManager updateManager;
91};
92
93} // namespace fw_update
94
95} // namespace pldm