blob: 544e913e83a4f36573aa3fb327237c773b184c15 [file] [log] [blame]
Deepak Kodihalli1b24f972019-02-01 04:09:13 -06001#pragma once
2
Sagar Srinivas79669c92021-04-28 15:43:30 -05003#include "libpldmresponder/platform.hpp"
Deepak Kodihalli1521f6d2020-06-16 08:51:02 -05004#include "pldmd/handler.hpp"
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -05005#include "requester/handler.hpp"
Deepak Kodihallibc669f12019-11-28 08:52:07 -06006
George Liuc453e162022-12-21 17:16:23 +08007#include <libpldm/base.h>
Deepak Kodihalli1b24f972019-02-01 04:09:13 -06008#include <stdint.h>
9
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050010#include <sdeventplus/source/event.hpp>
11
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060012#include <vector>
13
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050014using namespace pldm::responder;
15
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060016namespace pldm
17{
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060018namespace responder
19{
Jinu Joy Thomasf666db12019-05-29 05:22:31 -050020namespace base
21{
Deepak Kodihallibc669f12019-11-28 08:52:07 -060022class Handler : public CmdHandler
23{
24 public:
Andrew Jefferya330b2f2023-05-04 14:55:37 +093025 Handler(uint8_t eid, pldm::InstanceIdDb& instanceIdDb,
26 sdeventplus::Event& event,
Sagar Srinivas79669c92021-04-28 15:43:30 -050027 pldm::responder::oem_platform::Handler* oemPlatformHandler,
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050028 pldm::requester::Handler<pldm::requester::Request>* handler) :
29 eid(eid),
Andrew Jefferya330b2f2023-05-04 14:55:37 +093030 instanceIdDb(instanceIdDb), event(event),
Sagar Srinivas79669c92021-04-28 15:43:30 -050031 oemPlatformHandler(oemPlatformHandler), handler(handler)
Deepak Kodihallibc669f12019-11-28 08:52:07 -060032 {
Delphine CC Chiud2e48992023-12-05 16:29:51 +080033 handlers.emplace(
34 PLDM_GET_PLDM_TYPES,
35 [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
Patrick Williams6da4f912023-05-10 07:50:53 -050036 return this->getPLDMTypes(request, payloadLength);
37 });
Delphine CC Chiud2e48992023-12-05 16:29:51 +080038 handlers.emplace(
39 PLDM_GET_PLDM_COMMANDS,
40 [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
Deepak Kodihallibc669f12019-11-28 08:52:07 -060041 return this->getPLDMCommands(request, payloadLength);
42 });
Delphine CC Chiud2e48992023-12-05 16:29:51 +080043 handlers.emplace(
44 PLDM_GET_PLDM_VERSION,
45 [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
Deepak Kodihallibc669f12019-11-28 08:52:07 -060046 return this->getPLDMVersion(request, payloadLength);
47 });
Delphine CC Chiud2e48992023-12-05 16:29:51 +080048 handlers.emplace(
49 PLDM_GET_TID,
50 [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
Patrick Williams6da4f912023-05-10 07:50:53 -050051 return this->getTID(request, payloadLength);
52 });
Deepak Kodihallibc669f12019-11-28 08:52:07 -060053 }
54
55 /** @brief Handler for getPLDMTypes
56 *
57 * @param[in] request - Request message payload
58 * @param[in] payload_length - Request message payload length
59 * @param[return] Response - PLDM Response message
60 */
61 Response getPLDMTypes(const pldm_msg* request, size_t payloadLength);
62
63 /** @brief Handler for getPLDMCommands
64 *
65 * @param[in] request - Request message payload
66 * @param[in] payload_length - Request message payload length
67 * @param[return] Response - PLDM Response message
68 */
69 Response getPLDMCommands(const pldm_msg* request, size_t payloadLength);
70
71 /** @brief Handler for getPLDMCommands
72 *
73 * @param[in] request - Request message payload
74 * @param[in] payload_length - Request message payload length
75 * @param[return] Response - PLDM Response message
76 */
77 Response getPLDMVersion(const pldm_msg* request, size_t payloadLength);
78
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050079 /** @brief _processSetEventReceiver does the actual work that needs
80 * to be carried out for setEventReceiver command. This is deferred
81 * after sending response for getTID command to the host
82 *
83 * @param[in] source - sdeventplus event source
84 */
85 void processSetEventReceiver(sdeventplus::source::EventBase& source);
86
Deepak Kodihallibc669f12019-11-28 08:52:07 -060087 /** @brief Handler for getTID
88 *
89 * @param[in] request - Request message payload
90 * @param[in] payload_length - Request message payload length
91 * @param[return] Response - PLDM Response message
92 */
93 Response getTID(const pldm_msg* request, size_t payloadLength);
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050094
95 private:
96 /** @brief MCTP EID of host firmware */
97 uint8_t eid;
98
Andrew Jefferya330b2f2023-05-04 14:55:37 +093099 /** @brief An instance ID database for allocating instance IDs. */
100 InstanceIdDb& instanceIdDb;
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -0500101
102 /** @brief reference of main event loop of pldmd, primarily used to schedule
103 * work
104 */
105 sdeventplus::Event& event;
106
Sagar Srinivas79669c92021-04-28 15:43:30 -0500107 /** @brief OEM platform handler */
108 pldm::responder::oem_platform::Handler* oemPlatformHandler;
109
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -0500110 /** @brief PLDM request handler */
111 pldm::requester::Handler<pldm::requester::Request>* handler;
112
113 /** @brief sdeventplus event source */
114 std::unique_ptr<sdeventplus::source::Defer> survEvent;
Deepak Kodihallibc669f12019-11-28 08:52:07 -0600115};
116
Jinu Joy Thomasf666db12019-05-29 05:22:31 -0500117} // namespace base
Deepak Kodihalli1b24f972019-02-01 04:09:13 -0600118} // namespace responder
119} // namespace pldm