ibm-oem: add FileAck handler for PELs
Extend the FileAck* commands to let the host firmware to ack PELs it has
received from the BMC.
Signed-off-by: vkaverap <vkaverap@in.ibm.com>
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Change-Id: Iafc1c92c64c8ea7a51367c2c36842613af1f46b5
diff --git a/oem/ibm/libpldmresponder/file_io.cpp b/oem/ibm/libpldmresponder/file_io.cpp
index d191d3d..177fe3f 100644
--- a/oem/ibm/libpldmresponder/file_io.cpp
+++ b/oem/ibm/libpldmresponder/file_io.cpp
@@ -659,6 +659,46 @@
return response;
}
+Response Handler::fileAck(const pldm_msg* request, size_t payloadLength)
+{
+ Response response(sizeof(pldm_msg_hdr) + PLDM_FILE_ACK_RESP_BYTES);
+ auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+
+ if (payloadLength != PLDM_FILE_ACK_REQ_BYTES)
+ {
+ encode_file_ack_resp(request->hdr.instance_id,
+ PLDM_ERROR_INVALID_LENGTH, responsePtr);
+ return response;
+ }
+ uint16_t fileType{};
+ uint32_t fileHandle{};
+ uint8_t fileStatus{};
+
+ auto rc = decode_file_ack_req(request, payloadLength, &fileType,
+ &fileHandle, &fileStatus);
+ if (rc != PLDM_SUCCESS)
+ {
+ encode_file_ack_resp(request->hdr.instance_id, rc, responsePtr);
+ return response;
+ }
+
+ std::unique_ptr<FileHandler> handler{};
+ try
+ {
+ handler = getHandlerByType(fileType, fileHandle);
+ }
+ catch (const InternalFailure& e)
+ {
+ encode_file_ack_resp(request->hdr.instance_id, PLDM_INVALID_FILE_TYPE,
+ responsePtr);
+ return response;
+ }
+
+ rc = handler->fileAck(fileStatus);
+ encode_file_ack_resp(request->hdr.instance_id, rc, responsePtr);
+ return response;
+}
+
} // namespace oem_ibm
} // namespace responder
} // namespace pldm