dsp: platform: Add encode req & decode resp for GetEventReceiver command
Add encode and decode API for the Get Event Receiver command
This command is defined in DSP0248 as a conditional command.
The GetEventReceiver command is used to verify the values that were set
into an Event Generator using the SetEventReceiver command.
Change-Id: I411cc939d00bc69867507fe58911c813d0c1e2ae
Signed-off-by: Roger G. Coscojuela <roger.gili-coscojuela@sipearl.com>
diff --git a/src/dsp/platform.c b/src/dsp/platform.c
index 7ad8e2f..21ada82 100644
--- a/src/dsp/platform.c
+++ b/src/dsp/platform.c
@@ -2503,6 +2503,100 @@
return PLDM_SUCCESS;
}
+LIBPLDM_ABI_TESTING
+int encode_get_event_receiver_req(uint8_t instance_id, struct pldm_msg *msg,
+ size_t payload_length LIBPLDM_CC_UNUSED)
+{
+ struct pldm_header_info header;
+ header.msg_type = PLDM_REQUEST;
+ header.instance = instance_id;
+ header.pldm_type = PLDM_PLATFORM;
+ header.command = PLDM_GET_EVENT_RECEIVER;
+
+ if (!msg) {
+ return -EINVAL;
+ }
+
+ return pack_pldm_header_errno(&header, &(msg->hdr));
+}
+
+LIBPLDM_ABI_TESTING
+int encode_get_event_receiver_resp(
+ uint8_t instance_id,
+ struct pldm_get_event_receiver_resp *event_receiver_info,
+ struct pldm_msg *msg, size_t *payload_length)
+{
+ PLDM_MSGBUF_DEFINE_P(buf);
+ int rc;
+ if (!msg || !event_receiver_info) {
+ return -EINVAL;
+ }
+
+ /* See Table 2, DSP0245 v1.4.0 */
+ if (event_receiver_info->transport_protocol_type !=
+ PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP) {
+ return -ENOTSUP;
+ }
+
+ struct pldm_header_info header = { 0 };
+ header.msg_type = PLDM_RESPONSE;
+ header.instance = instance_id;
+ header.pldm_type = PLDM_PLATFORM;
+ header.command = PLDM_GET_EVENT_RECEIVER;
+
+ rc = pack_pldm_header_errno(&header, &(msg->hdr));
+ if (rc) {
+ return rc;
+ }
+ rc = pldm_msgbuf_init_errno(buf, PLDM_GET_EVENT_RECEIVER_MIN_RESP_BYTES,
+ msg->payload, *payload_length);
+ if (rc) {
+ return rc;
+ }
+
+ pldm_msgbuf_insert(buf, event_receiver_info->completion_code);
+ pldm_msgbuf_insert(buf, event_receiver_info->transport_protocol_type);
+ pldm_msgbuf_insert(
+ buf, event_receiver_info->event_receiver_address.mctp_eid);
+ return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
+}
+
+LIBPLDM_ABI_TESTING
+int decode_get_event_receiver_resp(const struct pldm_msg *msg,
+ size_t payload_length,
+ struct pldm_get_event_receiver_resp *resp)
+{
+ PLDM_MSGBUF_DEFINE_P(buf);
+ int rc;
+ if (!msg) {
+ return -EINVAL;
+ }
+
+ rc = pldm_msg_has_error(msg, payload_length);
+ if (rc) {
+ resp->completion_code = rc;
+ return 0;
+ }
+
+ rc = pldm_msgbuf_init_errno(buf, PLDM_GET_EVENT_RECEIVER_MIN_RESP_BYTES,
+ msg->payload, payload_length);
+ if (rc) {
+ return rc;
+ }
+ pldm_msgbuf_extract(buf, resp->completion_code);
+ rc = pldm_msgbuf_extract(buf, resp->transport_protocol_type);
+ if (rc) {
+ return pldm_msgbuf_discard(buf, rc);
+ }
+ if (resp->transport_protocol_type ==
+ PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP) {
+ pldm_msgbuf_extract(buf, resp->event_receiver_address.mctp_eid);
+ } else {
+ return pldm_msgbuf_discard(buf, -ENOTSUP);
+ }
+ return pldm_msgbuf_complete_consumed(buf);
+}
+
LIBPLDM_ABI_STABLE
int encode_set_event_receiver_req(uint8_t instance_id,
uint8_t event_message_global_enable,