blob: 2f7c714c8e92f8fb009b9952882a0b364198c34e [file] [log] [blame]
Deepak Kodihalli1b24f972019-02-01 04:09:13 -06001#pragma once
2
ArchanaKakani6c39c7a2022-12-05 04:36:35 -06003#include "config.h"
4
Sagar Srinivas79669c92021-04-28 15:43:30 -05005#include "libpldmresponder/platform.hpp"
Deepak Kodihalli1521f6d2020-06-16 08:51:02 -05006#include "pldmd/handler.hpp"
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -05007#include "requester/handler.hpp"
Deepak Kodihallibc669f12019-11-28 08:52:07 -06008
George Liuc453e162022-12-21 17:16:23 +08009#include <libpldm/base.h>
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060010#include <stdint.h>
11
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050012#include <sdeventplus/source/event.hpp>
13
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060014#include <vector>
15
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050016using namespace pldm::responder;
17
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060018namespace pldm
19{
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060020namespace responder
21{
Jinu Joy Thomasf666db12019-05-29 05:22:31 -050022namespace base
23{
Deepak Kodihallibc669f12019-11-28 08:52:07 -060024class Handler : public CmdHandler
25{
26 public:
Andrew Jefferya330b2f2023-05-04 14:55:37 +093027 Handler(uint8_t eid, pldm::InstanceIdDb& instanceIdDb,
28 sdeventplus::Event& event,
Sagar Srinivas79669c92021-04-28 15:43:30 -050029 pldm::responder::oem_platform::Handler* oemPlatformHandler,
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050030 pldm::requester::Handler<pldm::requester::Request>* handler) :
31 eid(eid),
Andrew Jefferya330b2f2023-05-04 14:55:37 +093032 instanceIdDb(instanceIdDb), event(event),
Sagar Srinivas79669c92021-04-28 15:43:30 -050033 oemPlatformHandler(oemPlatformHandler), handler(handler)
Deepak Kodihallibc669f12019-11-28 08:52:07 -060034 {
35 handlers.emplace(PLDM_GET_PLDM_TYPES,
36 [this](const pldm_msg* request, size_t payloadLength) {
Patrick Williams6da4f912023-05-10 07:50:53 -050037 return this->getPLDMTypes(request, payloadLength);
38 });
39 handlers.emplace(PLDM_GET_PLDM_COMMANDS,
40 [this](const pldm_msg* request, size_t payloadLength) {
Deepak Kodihallibc669f12019-11-28 08:52:07 -060041 return this->getPLDMCommands(request, payloadLength);
42 });
Patrick Williams6da4f912023-05-10 07:50:53 -050043 handlers.emplace(PLDM_GET_PLDM_VERSION,
44 [this](const pldm_msg* request, size_t payloadLength) {
Deepak Kodihallibc669f12019-11-28 08:52:07 -060045 return this->getPLDMVersion(request, payloadLength);
46 });
47 handlers.emplace(PLDM_GET_TID,
48 [this](const pldm_msg* request, size_t payloadLength) {
Patrick Williams6da4f912023-05-10 07:50:53 -050049 return this->getTID(request, payloadLength);
50 });
Deepak Kodihallibc669f12019-11-28 08:52:07 -060051 }
52
53 /** @brief Handler for getPLDMTypes
54 *
55 * @param[in] request - Request message payload
56 * @param[in] payload_length - Request message payload length
57 * @param[return] Response - PLDM Response message
58 */
59 Response getPLDMTypes(const pldm_msg* request, size_t payloadLength);
60
61 /** @brief Handler for getPLDMCommands
62 *
63 * @param[in] request - Request message payload
64 * @param[in] payload_length - Request message payload length
65 * @param[return] Response - PLDM Response message
66 */
67 Response getPLDMCommands(const pldm_msg* request, size_t payloadLength);
68
69 /** @brief Handler for getPLDMCommands
70 *
71 * @param[in] request - Request message payload
72 * @param[in] payload_length - Request message payload length
73 * @param[return] Response - PLDM Response message
74 */
75 Response getPLDMVersion(const pldm_msg* request, size_t payloadLength);
76
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050077 /** @brief _processSetEventReceiver does the actual work that needs
78 * to be carried out for setEventReceiver command. This is deferred
79 * after sending response for getTID command to the host
80 *
81 * @param[in] source - sdeventplus event source
82 */
83 void processSetEventReceiver(sdeventplus::source::EventBase& source);
84
Deepak Kodihallibc669f12019-11-28 08:52:07 -060085 /** @brief Handler for getTID
86 *
87 * @param[in] request - Request message payload
88 * @param[in] payload_length - Request message payload length
89 * @param[return] Response - PLDM Response message
90 */
91 Response getTID(const pldm_msg* request, size_t payloadLength);
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050092
93 private:
94 /** @brief MCTP EID of host firmware */
95 uint8_t eid;
96
Andrew Jefferya330b2f2023-05-04 14:55:37 +093097 /** @brief An instance ID database for allocating instance IDs. */
98 InstanceIdDb& instanceIdDb;
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050099
100 /** @brief reference of main event loop of pldmd, primarily used to schedule
101 * work
102 */
103 sdeventplus::Event& event;
104
Sagar Srinivas79669c92021-04-28 15:43:30 -0500105 /** @brief OEM platform handler */
106 pldm::responder::oem_platform::Handler* oemPlatformHandler;
107
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -0500108 /** @brief PLDM request handler */
109 pldm::requester::Handler<pldm::requester::Request>* handler;
110
111 /** @brief sdeventplus event source */
112 std::unique_ptr<sdeventplus::source::Defer> survEvent;
Deepak Kodihallibc669f12019-11-28 08:52:07 -0600113};
114
Jinu Joy Thomasf666db12019-05-29 05:22:31 -0500115} // namespace base
Deepak Kodihalli1b24f972019-02-01 04:09:13 -0600116} // namespace responder
117} // namespace pldm