blob: ed121ae0e77ca25b5f00bf58e7bdf5f288159458 [file] [log] [blame]
#ifndef OEM_IBM_HOST_H
#define OEM_IBM_HOST_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stddef.h>
#include <stdint.h>
#include "base.h"
/* Maximum size for request */
#define PLDM_GET_ALERT_STATUS_REQ_BYTES 1
/* Response lengths are inclusive of completion code */
#define PLDM_GET_ALERT_STATUS_RESP_BYTES 9
enum pldm_host_commands {
PLDM_HOST_GET_ALERT_STATUS = 0xF0 // Custom oem cmd
};
/** @brief PLDM Command specific codes
*/
enum pldm_host_completion_codes { PLDM_HOST_UNSUPPORTED_FORMAT_VERSION = 0x81 };
/** @struct pldm_get_alert_states_resp
*
* Structure representing GetAlertStatus response packet
*/
struct pldm_get_alert_status_resp {
uint8_t completion_code;
uint32_t rack_entry;
uint32_t pri_cec_node;
} __attribute__((packed));
/* Requester */
/* GetAlertStatus */
/** @brief Create a PLDM request message for GetAlertStatus
*
* @param[in] instance_id - Message's instance id
* @param[in] version_id - The command/response format. 0x00 for this format
* @param[out] msg - Message will be written to this
* @param[in] payload_length - Length of request message payload
* @return pldm_completion_codes
* @note Caller is responsible for memory alloc and dealloc of param
* 'msg.payload'
*/
int encode_get_alert_status_req(uint8_t instance_id, uint8_t version_id,
struct pldm_msg *msg, size_t payload_length);
/** @brief Decode GetAlertStatus response data
*
* Note:
* * If the return value is not PLDM_SUCCESS, it represents a
* transport layer error.
* * If the completion_code value is not PLDM_SUCCESS, it represents a
* protocol layer error and all the out-parameters are invalid.
*
* @param[in] msg - Request message
* @param[in] payload_length - Length of request message payload
* @param[out] completion_code - PLDM completion code
* @param[out] rack_entry - Enclosure ID, Alert Status, Flags, Config ID
* @param[out] pri_cec_node - Enclosure ID, Alert Status, Flags, Config ID
* @return pldm_completion_codes
*/
int decode_get_alert_status_resp(const struct pldm_msg *msg,
size_t payload_length,
uint8_t *completion_code, uint32_t *rack_entry,
uint32_t *pri_cec_node);
/* Responder */
/* GetAlertStatus */
/** @brief Decode GetAlertStatus request data
*
* @param[in] msg - Request message
* @param[in] payload_length - Length of request message payload
* @param[out] version_id - the command/response format. 0x00 for this format
* @return pldm_completion_codes
*/
int decode_get_alert_status_req(const struct pldm_msg *msg,
size_t payload_length, uint8_t *version_id);
/** @brief Create a PLDM OEM response message for GetAlertStatus
*
* @param[in] instance_id - Message's instance id
* @param[in] completion_code - PLDM completion code
* @param[in] rack_entry - Enclosure ID, Alert Status, Flags, Config ID
* @param[in] pri_cec_node - Enclosure ID, Alert Status, Flags, Config ID
* @param[out] msg - Message will be written to this
* @param[in] payload_length - Length of request message payload
* @return pldm_completion_codes
* @note Caller is responsible for memory alloc and dealloc of param
* 'msg.body.payload'
*/
int encode_get_alert_status_resp(uint8_t instance_id, uint8_t completion_code,
uint32_t rack_entry, uint32_t pri_cec_node,
struct pldm_msg *msg, size_t payload_length);
#ifdef __cplusplus
}
#endif
#endif /* OEM_IBM_HOST_H */