| /** |
| * @brief This file will be depricated soon. Currently it exists as a patch. |
| * This code is to be upstreamed in C, however to build it within this repo, |
| * this code is extracted as a cpp file here. |
| * There were some functionalities that were not working as a C file hence |
| * extracted to a cpp file |
| */ |
| #pragma once |
| |
| #ifndef PLDM_RDE_HPP |
| #define PLDM_RDE_HPP |
| |
| #include "libpldm/base.h" |
| #include "libpldm/pldm_types.h" |
| |
| #include <endian.h> |
| |
| #include <cstddef> |
| #include <cstdint> |
| |
| // Minimum transfer size allowed is 64 bytes. |
| #define PLDM_RDE_MIN_TRANSFER_SIZE_BYTES 64 |
| // Dictionary VersionTag for DSP0218 v1.0.0, v1.1.0, v1.1.1. |
| #define PLDM_RDE_DICT_VERSION_TAG 0x00 |
| #define PLDM_RDE_NOT_A_OPERATION 0x00 |
| #define PLD_RDE_NULL_TRANSFER_HANDLE 0 |
| #define PLD_RDE_OP_PENDING_TRANSFER_HANDLE 0xFFFFFFFF |
| #define PLDM_RDE_COMP_TIME_NOT_SUPPORTED 0xFFFFFFFF |
| #define PLDM_RDE_COMP_PERCENTAGE_NOT_SUPPORTED 254 |
| // Variable struct header sizes |
| #define PLDM_RDE_MULTIPART_RECEIVE_RESP_HDR_SIZE 10 |
| #define PLDM_RDE_OPERATION_INIT_REQ_HDR_SIZE 17 |
| #define PLDM_RDE_OPERATION_INIT_RESP_HDR_SIZE 17 |
| #define PLDM_RDE_OPERATION_STATUS_RESP_HDR_SIZE 17 |
| |
| #define PLDM_RDE 0x06 /*Response should support PLDM_PLATFORM and PLDM_RDE*/ |
| #define RDE_NEGOTIATE_REDFISH_PARAMETERS_RESP_BYTES 12 |
| #define RDE_NEGOTIATE_MEDIUM_PARAMETERS_RESP_BYTES 5 |
| #define RDE_GET_DICTIONARY_SCHEMA_RESP_BYTES 6 |
| #define RDE_MULTIPART_RECV_MINIMUM_RESP_BYTES 6 |
| #define RDE_READ_OPERATION_INIT_MIN_BYTES 13 |
| #define RESOURCE_ID_ANY 0xFFFFFFFF |
| #define IGNORE(x) (void)(x) |
| |
| /** @brief RDE Supported Commands |
| */ |
| enum pldm_rde_commands |
| { |
| PLDM_NEGOTIATE_REDFISH_PARAMETERS = 0x01, |
| PLDM_NEGOTIATE_MEDIUM_PARAMETERS = 0x02, |
| PLDM_GET_SCHEMA_DICTIONARY = 0x03, |
| PLDM_GET_SCHEMA_FILE = 0x0C, |
| PLDM_RDE_OPERATION_INIT = 0x10, |
| PLDM_RDE_OPERATION_COMPLETE = 0x13, |
| PLDM_RDE_OPERATION_STATUS = 0x14, |
| PLDM_RDE_OPERATION_KILL = 0x15, |
| PLDM_RDE_MULTIPART_SEND = 0x30, |
| PLDM_RDE_MULTIPART_RECEIVE = 0x31, |
| }; |
| |
| typedef enum pldm_rde_varstring_format |
| { |
| PLDM_RDE_VARSTRING_UNKNOWN = 0, |
| PLDM_RDE_VARSTRING_ASCII = 1, |
| PLDM_RDE_VARSTRING_UTF_8 = 2, |
| PLDM_RDE_VARSTRING_UTF_16 = 3, |
| PLDM_RDE_VARSTRING_UTF_16LE = 4, |
| PLDM_RDE_VARSTRING_UTF_16BE = 5, |
| } pldm_rde_varstring_format; |
| |
| enum pldm_rde_schema_type |
| { |
| PLDM_RDE_SCHEMA_MAJOR = 0, |
| PLDM_RDE_SCHEMA_EVENT = 1, |
| PLDM_RDE_SCHEMA_ANNOTATION = 2, |
| PLDM_RDE_SCHEMA_COLLECTION_MEMBER_TYPE = 3, |
| PLDM_RDE_SCHEMA_ERROR = 4, |
| PLDM_RDE_SCHEMA_REGISTRY = 5, |
| }; |
| |
| enum pldm_rde_completion_codes |
| { |
| PLDM_RDE_ERROR_CANNOT_CREATE_OPERATION = 0x81, |
| PLDM_RDE_ERROR_NOT_ALLOWED = 0x82, |
| PLDM_RDE_ERROR_WRONG_LOCATION_TYPE = 0x83, |
| PLDM_RDE_ERROR_OPERATION_ABANDONED = 0x84, |
| PLDM_RDE_ERROR_OPERATION_EXISTS = 0x86, |
| PLDM_RDE_ERROR_OPERATION_FAILED = 0x87, |
| PLDM_RDE_ERROR_UNEXPECTED = 0x88, |
| PLDM_RDE_ERROR_UNSUPPORTED = 0x89, |
| PLDM_RDE_ERROR_NO_SUCH_RESOURCE = 0x92, |
| }; |
| |
| // TODO: Do we need this because base.h already has this |
| /** |
| * @brief Transfer operation flags. |
| */ |
| enum pldm_rde_transfer_operation |
| { |
| PLDM_RDE_XFER_FIRST_PART = 0, |
| PLDM_RDE_XFER_NEXT_PART = 1, |
| PLDM_RDE_XFER_ABORT = 2, |
| }; |
| |
| // TODO: Do we need this because base.h already has this |
| enum pldm_rde_transfer_flag |
| { |
| PLDM_RDE_START = 0, |
| PLDM_RDE_MIDDLE = 1, |
| PLDM_RDE_END = 2, |
| PLDM_RDE_START_AND_END = 3, |
| }; |
| |
| enum pldm_rde_operation_type |
| { |
| PLDM_RDE_OPERATION_HEAD = 0, |
| PLDM_RDE_OPERATION_READ = 1, |
| PLDM_RDE_OPERATION_CREATE = 2, |
| PLDM_RDE_OPERATION_DELETE = 3, |
| PLDM_RDE_OPERATION_UPDATE = 4, |
| PLDM_RDE_OPERATION_REPLACE = 5, |
| PLDM_RDE_OPERATION_ACTION = 6, |
| }; |
| |
| enum pldm_rde_operation_status |
| { |
| PLDM_RDE_OPERATION_INACTIVE = 0, |
| PLDM_RDE_OPERATION_NEEDS_INPUT = 1, |
| PLDM_RDE_OPERATION_TRIGGERED = 2, |
| PLDM_RDE_OPERATION_RUNNING = 3, |
| PLDM_RDE_OPERATION_HAVE_RESULTS = 4, |
| PLDM_RDE_OPERATION_COMPLETED = 5, |
| PLDM_RDE_OPERATION_FAILED = 6, |
| PLDM_RDE_OPERATION_ABANDONED = 7, |
| }; |
| |
| /** |
| * @brief MC feature support. |
| * |
| * The flags can be OR'd together to build the feature support for a MC. |
| */ |
| enum pldm_rde_mc_feature |
| { |
| PLDM_RDE_MC_HEAD_SUPPORTED = 1, |
| PLDM_RDE_MC_READ_SUPPORTED = 2, |
| PLDM_RDE_MC_CREATE_SUPPORTED = 4, |
| PLDM_RDE_MC_DELETE_SUPPORTED = 8, |
| PLDM_RDE_MC_UPDATE_SUPPORTED = 16, |
| PLDM_RDE_MC_REPLACE_SUPPORTED = 32, |
| PLDM_RDE_MC_ACTION_SUPPORTED = 64, |
| PLDM_RDE_MC_EVENTS_SUPPORTED = 128, |
| PLDM_RDE_MC_BEJ_1_1_SUPPORTED = 256, |
| }; |
| |
| /** |
| * @brief Device capability flags. |
| * |
| * The flags can be OR'd together to build capabilities of a device. |
| */ |
| enum pldm_rde_device_capability |
| { |
| PLDM_RDE_DEVICE_ATOMIC_RESOURCE_READ_SUPPORT = 1, |
| PLDM_RDE_DEVICE_EXPAND_SUPPORT = 2, |
| PLDM_RDE_DEVICE_BEJ_1_1_SUPPORT = 4, |
| }; |
| |
| /** |
| * @brief Device feature support. |
| * |
| * The flags can be OR'd together to build features of a RDE device. |
| */ |
| enum pldm_rde_device_feature |
| { |
| PLDM_RDE_DEVICE_HEAD_SUPPORTED = 1, |
| PLDM_RDE_DEVICE_READ_SUPPORTED = 2, |
| PLDM_RDE_DEVICE_CREATE_SUPPORTED = 4, |
| PLDM_RDE_DEVICE_DELETE_SUPPORTED = 8, |
| PLDM_RDE_DEVICE_UPDATE_SUPPORTED = 16, |
| PLDM_RDE_DEVICE_REPLACE_SUPPORTED = 32, |
| PLDM_RDE_DEVICE_ACTION_SUPPORTED = 64, |
| PLDM_RDE_DEVICE_EVENTS_SUPPORTED = 128, |
| }; |
| |
| /** |
| * @brief RDEOperationKill request data structure |
| */ |
| struct pldm_rde_operation_kill_req |
| { |
| uint32_t resource_id; |
| uint16_t operation_id; |
| bitfield8_t killflags; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief NegotiateRedfishParameters request data structure. |
| */ |
| struct pldm_rde_negotiate_redfish_parameters_req |
| { |
| uint8_t mc_concurrency_support; |
| bitfield16_t mc_feature_support; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief varstring PLDM data type. |
| * |
| * sizeof(struct pldm_rde_varstring) will include the space for the NULL |
| * character. |
| */ |
| struct pldm_rde_varstring |
| { |
| uint8_t string_format; |
| // Includes NULL terminator. |
| uint8_t string_length_bytes; |
| // String data should be NULL terminated. |
| uint8_t string_data[1]; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief NegotiateRedfishParameters response data structure. |
| */ |
| struct pldm_rde_negotiate_redfish_parameters_resp |
| { |
| uint8_t completion_code; |
| uint8_t device_concurrency_support; |
| bitfield8_t device_capabilities_flags; |
| bitfield16_t device_feature_support; |
| uint32_t device_configuration_signature; |
| struct pldm_rde_varstring device_provider_name; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief NegotiateMediumParameters request data structure. |
| */ |
| struct pldm_rde_negotiate_medium_parameters_req |
| { |
| uint32_t mc_maximum_transfer_chunk_size_bytes; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief NegotiateMediumParameters response data structure. |
| */ |
| struct pldm_rde_negotiate_medium_parameters_resp |
| { |
| uint8_t completion_code; |
| uint32_t device_maximum_transfer_chunk_size_bytes; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief GetSchemaDictionary request data structure. |
| */ |
| struct pldm_rde_get_schema_dictionary_req |
| { |
| uint32_t resource_id; |
| uint8_t requested_schema_class; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief GetSchemaDictionary response data structure. |
| */ |
| struct pldm_rde_get_schema_dictionary_resp |
| { |
| uint8_t completion_code; |
| uint8_t dictionary_format; |
| uint32_t transfer_handle; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief RDEMultipartReceive request data structure. |
| */ |
| struct pldm_rde_multipart_receive_req |
| { |
| uint32_t data_transfer_handle; |
| uint16_t operation_id; |
| uint8_t transfer_operation; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief RDEMultipartReceive response data structure. |
| */ |
| struct pldm_rde_multipart_receive_resp |
| { |
| uint8_t completion_code; |
| uint8_t transfer_flag; |
| uint32_t next_data_transfer_handle; |
| uint32_t data_length_bytes; |
| uint8_t payload[1]; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief OperationFlags used in RDEOperationInit request data structure. |
| */ |
| union pldm_rde_operation_flags |
| { |
| uint8_t byte; |
| struct |
| { |
| uint8_t locator_valid : 1; |
| uint8_t contains_request_payload : 1; |
| uint8_t contains_custom_request_parameters : 1; |
| uint8_t excerpt_flag : 1; |
| uint8_t reserved : 4; |
| } __attribute__((packed)) bits; |
| }; |
| |
| /** |
| * @brief RDEOperationInit request data structure. |
| */ |
| struct pldm_rde_operation_init_req |
| { |
| uint32_t resource_id; |
| uint16_t operation_id; |
| uint8_t operation_type; |
| union pldm_rde_operation_flags operation_flags; |
| uint32_t send_data_transfer_handle; |
| uint8_t operation_locator_length; |
| uint32_t request_payload_length; |
| // Variable length data: bejLocator and the payload. |
| uint8_t var_data[1]; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief OperationExecutionFlags used in RDEOperationInit and |
| * RDEOperationStatus response data structures. |
| */ |
| union pldm_rde_op_execution_flags |
| { |
| uint8_t byte; |
| struct |
| { |
| uint8_t task_spawned : 1; |
| uint8_t have_custom_response_parameters : 1; |
| uint8_t have_result_payload : 1; |
| uint8_t cache_allowed : 1; |
| uint8_t reserved : 4; |
| } __attribute__((packed)) bits; |
| }; |
| |
| /** |
| * @brief PermissionFlags used in RDEOperationInit and RDEOperationStatus |
| * response data structures. |
| */ |
| union pldm_rde_permission_flags |
| { |
| uint8_t byte; |
| struct |
| { |
| uint8_t read_allowed : 1; |
| uint8_t update_allowed : 1; |
| uint8_t replace_allowed : 1; |
| uint8_t create_allowed : 1; |
| uint8_t delete_allowed : 1; |
| uint8_t head_allowed : 1; |
| uint8_t reserved : 2; |
| } __attribute__((packed)) bits; |
| }; |
| |
| /** |
| * @brief RDEOperationInit response data structure. |
| */ |
| struct pldm_rde_operation_init_resp |
| { |
| uint8_t completion_code; |
| uint8_t operation_status; |
| uint8_t completion_percentage; |
| uint32_t completion_time_seconds; |
| union pldm_rde_op_execution_flags operation_execution_flags; |
| uint32_t result_transfer_handle; |
| union pldm_rde_permission_flags permission_flags; |
| uint32_t response_payload_length; |
| // Variable length data: varstring and the payload. |
| uint8_t var_data[1]; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief RDEOperationComplete request data structure. |
| */ |
| struct pldm_rde_operation_complete_req |
| { |
| uint32_t resource_id; |
| uint16_t operation_id; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief RDEOperationComplete response data structure. |
| */ |
| struct pldm_rde_operation_complete_resp |
| { |
| uint8_t completion_code; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief RDEOperationStatus request data structure. |
| */ |
| struct pldm_rde_operation_status_req |
| { |
| uint32_t resource_id; |
| uint16_t operation_id; |
| } __attribute__((packed)); |
| |
| /** |
| * @brief RDEOperationStatus response data structure. |
| */ |
| struct pldm_rde_operation_status_resp |
| { |
| uint8_t completion_code; |
| uint8_t operation_status; |
| uint8_t completion_percentage; |
| uint32_t completion_time_seconds; |
| union pldm_rde_op_execution_flags operation_execution_flags; |
| uint32_t result_transfer_handle; |
| union pldm_rde_permission_flags permission_flags; |
| uint32_t response_payload_length; |
| // Variable length data: varstring and the payload. |
| uint8_t var_data[1]; |
| } __attribute__((packed)); |
| |
| struct pldm_rde_device_info |
| { |
| uint8_t device_concurrency; |
| bitfield8_t device_capabilities_flag; |
| bitfield16_t device_feature_support; |
| uint32_t device_configuration_signature; |
| struct pldm_rde_varstring device_provider_name; |
| uint32_t device_maximum_transfer_chunk_size; // in bytes |
| }; |
| |
| /** |
| * @brief Encode NegotiateRedfishParameters request. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] concurrency_support - MC concurrency support. |
| * @param[in] feature_support - MC feature support flags. |
| * @param[out] msg - Request message. |
| * @return pldm_completion_codes. |
| */ |
| int encode_negotiate_redfish_parameters_req(uint8_t instance_id, |
| uint8_t concurrency_support, |
| bitfield16_t* feature_support, |
| struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode NegotiateRedfishParameters request. |
| * |
| * @param[in] msg - Request message. |
| * @param[in] payload_length - Length of request message payload. |
| * @param[out] mc_concurrency_support - Pointer to a uint8_t variable. |
| * @param[out] mc_feature_support - Pointer to a bitfield16_t variable. |
| * @return pldm_completion_codes. |
| */ |
| int decode_negotiate_redfish_parameters_req(const struct pldm_msg* msg, |
| size_t payload_length, |
| uint8_t* mc_concurrency_support, |
| bitfield16_t* mc_feature_support); |
| |
| /** |
| * @brief Create a PLDM response message for NegotiateRedfishParameters. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] completion_code - PLDM completion code. |
| * @param[in] device_concurrency_support - Concurrency support. |
| * @param[in] device_capabilities_flags - Capabilities flags. |
| * @param[in] device_feature_support - Feature support flags. |
| * @param[in] device_configuration_signature - RDE device signature. |
| * @param[in] device_provider_name - Null terminated device provider name. |
| * @param[in] name_format - String format of the device_provider_name. |
| * @param[out] msg - Response message will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_negotiate_redfish_parameters_resp( |
| uint8_t instance_id, uint8_t completion_code, |
| uint8_t device_concurrency_support, bitfield8_t device_capabilities_flags, |
| bitfield16_t device_feature_support, |
| uint32_t device_configuration_signature, const char* device_provider_name, |
| enum pldm_rde_varstring_format name_format, struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode NegotiateRedfishParameters Response. |
| * |
| * @param[in] msg - Request message. |
| * @param[in] payload_length - Length of request message payload. |
| * @param[out] completion_code - Completion code as set by the responder. |
| * @param[out] device - Device Info as sent in the response (Memory to be |
| * manager by the caller). |
| * @return pldm_completion_codes. |
| */ |
| int decode_negotiate_redfish_parameters_resp( |
| const struct pldm_msg* msg, size_t payload_length, uint8_t* completion_code, |
| struct pldm_rde_device_info* device); |
| |
| /** |
| * @brief Encode NegotiateMediumParameters request. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] maximum_transfer_size - Maximum amount of data the MC can |
| * support for a single message transfer. |
| * @param[out] msg - Request message. |
| * @return pldm_completion_codes. |
| */ |
| int encode_negotiate_medium_parameters_req(uint8_t instance_id, |
| uint32_t maximum_transfer_size, |
| struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode NegotiateMediumParameters request. |
| * |
| * @param[in] msg - Request message. |
| * @param[in] payload_length - Length of request message payload. |
| * @param[out] mc_maximum_transfer_size - Pointer to a uint32_t variable. |
| * @return pldm_completion_codes. |
| */ |
| int decode_negotiate_medium_parameters_req(const struct pldm_msg* msg, |
| size_t payload_length, |
| uint32_t* mc_maximum_transfer_size); |
| |
| /** |
| * @brief Create a PLDM response message for NegotiateMediumParameters. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] completion_code - PLDM completion code. |
| * @param[in] device_maximum_transfer_bytes - Device maximum transfer byte |
| * support. |
| * @param[out] msg - Response message will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_negotiate_medium_parameters_resp( |
| uint8_t instance_id, uint8_t completion_code, |
| uint32_t device_maximum_transfer_bytes, struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode Negotiate Medium Parameters response |
| * |
| * @param[in] msg: PLDM Msg byte array received from the responder |
| * @param[in] payload_length: Length of the payload |
| * @param[out] completion_code: Completion code as set by the responder |
| * @param[out] device_maximum_transfer_bytes: Max bytes device can transfer |
| */ |
| int decode_negotiate_medium_parameters_resp( |
| const struct pldm_msg* msg, size_t payload_length, uint8_t* completion_code, |
| uint32_t* device_maximum_transfer_bytes); |
| |
| /** |
| * @brief Encode GetSchemaDictionary request. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] resource_id - The ResourceID of any resource in the Redfish |
| * Resource PDR. |
| * @param[in] schema_class - The class of schema being requested. |
| * @param[out] msg - Request message. |
| * @return pldm_completion_codes. |
| */ |
| int encode_get_schema_dictionary_req(uint8_t instance_id, uint32_t resource_id, |
| uint8_t schema_class, |
| struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode GetSchemaDictionary request. |
| * |
| * @param[in] msg - Request message. |
| * @param[in] payload_length - Length of request message payload. |
| * @param[out] resource_id - Pointer to a uint32_t variable. |
| * @param[out] requested_schema_class - Pointer to a uint8_t variable. |
| * @return pldm_completion_codes. |
| */ |
| int decode_get_schema_dictionary_req(const struct pldm_msg* msg, |
| size_t payload_length, |
| uint32_t* resource_id, |
| uint8_t* requested_schema_class); |
| |
| /** |
| * @brief Encode GetSchemaDictionary response. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] completion_code - PLDM completion code. |
| * @param[in] dictionary_format - The format of the dictionary. |
| * @param[in] transfer_handle - A data transfer handle that the MC shall |
| * use. |
| * @param[out] msg - Response message will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_get_schema_dictionary_resp(uint8_t instance_id, |
| uint8_t completion_code, |
| uint8_t dictionary_format, |
| uint32_t transfer_handle, |
| struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode Get Schema Dictionary Response |
| * |
| * @param[in] msg - Response Message |
| * @param[in] payload_length - Length of the payload |
| * @param[out] completion_code - Completion Code |
| * @param[out] dictionary_format - Dictionary Format for the particular |
| * resource id |
| * @param[out] transfer_handle - Transfer Handle to be used to get |
| * dictionary |
| */ |
| int decode_get_schema_dictionary_resp(const struct pldm_msg* msg, |
| size_t payload_length, |
| uint8_t* completion_code, |
| uint8_t* dictionary_format, |
| uint32_t* transfer_handle); |
| |
| /** |
| * @brief Encode RDEMultipartReceive request. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] data_transfer_handle - A handle to uniquely identify the chunk |
| * of data to be retrieved. |
| * @param[in] operation_id - Identification number for this operation. |
| * @param[in] transfer_operation - The portion of data requested for the |
| * transfer. |
| * @param[out] msg - Request will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_rde_multipart_receive_req(uint8_t instance_id, |
| uint32_t data_transfer_handle, |
| uint16_t operation_id, |
| uint8_t transfer_operation, |
| struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode RDEMultipartReceive request. |
| * |
| * @param[in] msg - Request message. |
| * @param[in] payload_length - Length of request message payload. |
| * @param[out] data_transfer_handle - A handle to uniquely identify the |
| * chunk of data to be retrieved. |
| * @param[out] operation_id - Identification number for this operation. |
| * @param[out] transfer_operation - The portion of data requested for the |
| * transfer. |
| * @return pldm_completion_codes. |
| */ |
| int decode_rde_multipart_receive_req(const struct pldm_msg* msg, |
| size_t payload_length, |
| uint32_t* data_transfer_handle, |
| uint16_t* operation_id, |
| uint8_t* transfer_operation); |
| |
| /** |
| * @brief Encode RDEMultipartReceive response. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] completion_code - PLDM completion code. |
| * @param[in] transfer_flag - The portion of data being sent to MC. |
| * @param[in] next_data_transfer_handle - A handle to uniquely identify the |
| * next chunk of data to be retrieved. |
| * @param[in] data_length_bytes - Length of the payload. |
| * @param[in] add_checksum - Indicate whether the payload needs to include |
| * the provided checksum. |
| * @param[in] checksum - Checksum. |
| * @param[in] payload - Pointer to the payload. |
| * @param[out] msg - Response message will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_rde_multipart_receive_resp( |
| uint8_t instance_id, uint8_t completion_code, uint8_t transfer_flag, |
| uint32_t next_data_transfer_handle, uint32_t data_length_bytes, |
| bool add_checksum, uint32_t checksum, const uint8_t* payload, |
| struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode RDE Multipart Receive Response |
| * |
| * @param[in] msg - Response message |
| * @param[in] payload_length - Expected length of the response, since the |
| * response could be equal to the negotiated transfer chunk size, the |
| * requester should usually set it to the negotiated transfer size |
| * @param[out] completion_code - Completion code of the response set by RDE |
| * @param[out] ret_transfer_flag - Transfer flag returned by RDE |
| * @param[out] ret_transfer_operation - Transfer operation returned by RDE |
| * @param[out] data_length_bytes - The length of the payload in response |
| * @param[out] payload - Pointer to the payload |
| */ |
| int decode_rde_multipart_receive_resp( |
| const struct pldm_msg* msg, size_t payload_length, uint8_t* completion_code, |
| uint8_t* ret_transfer_flag, uint32_t* ret_data_transfer_handle, |
| uint32_t* data_length_bytes, uint8_t** payload); |
| |
| /** |
| * @brief Encode RDEOperationInit request. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] resource_id - The ResourceID. |
| * @param[in] operation_id - Identification number for this operation. |
| * @param[in] operation_type - The type of Redfish Operation being |
| * performed. |
| * @param[in] operation_flags - Flags associated with this Operation. |
| * @param[in] send_data_transfer_handle - Handle to be used with the first |
| * RDEMultipartSend command. |
| * @param[in] operation_locator_length - Length of the OperationLocator for |
| * this Operation. |
| * @param[in] request_payload_length - Length of the request payload in this |
| * message. |
| * @param[in] operation_locator - BEJ locator indicating where the new |
| * Operation is to take place within the resource. |
| * @param[in] request_payload - The request payload. |
| * @param[out] msg - Request will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_rde_operation_init_req( |
| uint8_t instance_id, uint32_t resource_id, uint16_t operation_id, |
| uint8_t operation_type, |
| const union pldm_rde_operation_flags* operation_flags, |
| uint32_t send_data_transfer_handle, uint8_t operation_locator_length, |
| uint32_t request_payload_length, const uint8_t* operation_locator, |
| uint8_t* request_payload, struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode RDEOperationInit request. |
| * |
| * @param[in] msg - Request message. |
| * @param[in] payload_length - Length of request message payload. |
| * @param[out] resource_id - The ResourceID. |
| * @param[out] operation_id - Identification number for this operation. |
| * @param[out] operation_type - The type of Redfish Operation being |
| * performed. |
| * @param[out] operation_flags - Flags associated with this Operation. |
| * @param[out] send_data_transfer_handle - Handle to be used with the first |
| * RDEMultipartSend command. |
| * @param[out] operation_locator_length - Length of the OperationLocator for |
| * this Operation. |
| * @param[out] request_payload_length - Length of the request payload in |
| * this message. |
| * @param[out] operation_locator - BEJ locator indicating where the new |
| * Operation is to take place within the resource. |
| * @param[out] request_payload - The request payload. |
| * @return pldm_completion_codes. |
| */ |
| int decode_rde_operation_init_req( |
| const struct pldm_msg* msg, size_t payload_length, uint32_t* resource_id, |
| uint16_t* operation_id, uint8_t* operation_type, |
| union pldm_rde_operation_flags* operation_flags, |
| uint32_t* send_data_transfer_handle, uint8_t* operation_locator_length, |
| uint32_t* request_payload_length, uint8_t** operation_locator, |
| uint8_t** request_payload); |
| |
| /** |
| * @brief Encode RDEOperationInit response. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] completion_code - PLDM completion code. |
| * @param[in] operation_status - Status of the operation. |
| * @param[in] completion_percentage - Percentage complete. |
| * @param[in] completion_time_seconds - An estimate of the number of seconds |
| * remaining before the Operation is completed. |
| * @param[in] operation_execution_flags - Explains the result of operation. |
| * @param[in] result_transfer_handle - A data transfer handle that the MC |
| * may use to retrieve a larger response payload. |
| * @param[in] permission_flags - Indicates the access level granted to the |
| * resource targeted by the Operation. |
| * @param[in] response_payload_length - Length of the response payload. |
| * @param[in] etag_format - Format of the etag string. |
| * @param[in] etag - ETag. |
| * @param[in] response_payload - The response payload if the payload fits. |
| * @param[out] msg - Response message will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_rde_operation_init_resp( |
| uint8_t instance_id, uint8_t completion_code, uint8_t operation_status, |
| uint8_t completion_percentage, uint32_t completion_time_seconds, |
| const union pldm_rde_op_execution_flags* operation_execution_flags, |
| uint32_t result_transfer_handle, |
| const union pldm_rde_permission_flags* permission_flags, |
| uint32_t response_payload_length, |
| enum pldm_rde_varstring_format etag_format, const char* etag, |
| const uint8_t* response_payload, struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode RDEOperationInit Resp |
| */ |
| int decode_rde_operation_init_resp( |
| const struct pldm_msg* msg, size_t payload_length, uint8_t* completion_code, |
| uint8_t* completion_percentage, uint8_t* operation_status, |
| uint32_t* completion_time_seconds, uint32_t* result_transfer_handle, |
| uint32_t* response_payload_length, |
| union pldm_rde_permission_flags** permission_flags, |
| union pldm_rde_op_execution_flags** operation_execution_flags, |
| struct pldm_rde_varstring** resp_etag, uint8_t** response_payload); |
| |
| /** |
| * @brief Encode RDEOperationComplete request. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] resource_id - The ResourceID. |
| * @param[in] operation_id - Identification number for this operation. |
| * @param[out] msg - Request will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_rde_operation_complete_req(uint8_t instance_id, uint32_t resource_id, |
| uint16_t operation_id, |
| struct pldm_msg* msg); |
| |
| /** |
| * @brief Encode RDE Operation Kill request |
| * @param[in] instance_id - instance id of the requester |
| * @param[in] resource_id - resource id of the resource being requested |
| * @param[in] operation_id - operation id of the request |
| * @param[out] msg - Request will be written to this |
| */ |
| int encode_rde_operation_kill_req(uint8_t instance_id, uint32_t resource_id, |
| uint16_t operation_id, struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode RDEOperationComplete request. |
| * |
| * @param[in] msg - Request message. |
| * @param[in] payload_length - Length of request message payload. |
| * @param[out] resource_id - The ResourceID. |
| * @param[out] operation_id - Identification number for this operation. |
| * @return pldm_completion_codes. |
| */ |
| int decode_rde_operation_complete_req(const struct pldm_msg* msg, |
| size_t payload_length, |
| uint32_t* resource_id, |
| uint16_t* operation_id); |
| |
| /** |
| * @brief Encode RDEOperationComplete response. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] completion_code - PLDM completion code. |
| * @param[out] msg - Response message will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_rde_operation_complete_resp(uint8_t instance_id, |
| uint8_t completion_code, |
| struct pldm_msg* msg); |
| |
| /** |
| * @brief Encode RDEOperationComplete response. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] completion_code - PLDM completion code. |
| * @param[out] msg - Response message will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int decode_rde_operation_complete_resp(const struct pldm_msg* msg, |
| size_t payload_length, |
| uint8_t* completion_code); |
| |
| /** |
| * @brief Encode RDEOperationStatus request. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] resource_id - The ResourceID. |
| * @param[in] operation_id - Identification number for this operation. |
| * @param[out] msg - Request will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_rde_operation_status_req(uint8_t instance_id, uint32_t resource_id, |
| uint16_t operation_id, |
| struct pldm_msg* msg); |
| |
| /** |
| * @brief Decode RDEOperationStatus request. |
| * |
| * @param[in] msg - Request message. |
| * @param[in] payload_length - Length of request message payload. |
| * @param[out] resource_id - The ResourceID. |
| * @param[out] operation_id - Identification number for this operation. |
| * @return pldm_completion_codes. |
| */ |
| int decode_rde_operation_status_req(const struct pldm_msg* msg, |
| size_t payload_length, |
| uint32_t* resource_id, |
| uint16_t* operation_id); |
| |
| /** |
| * @brief Encode RDEOperationStatus response. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] completion_code - PLDM completion code. |
| * @param[in] operation_status - Status of the operation. |
| * @param[in] completion_percentage - Percentage complete. |
| * @param[in] completion_time_seconds - An estimate of the number of seconds |
| * remaining before the Operation is completed. |
| * @param[in] operation_execution_flags - Explains the result of operation. |
| * @param[in] result_transfer_handle - A data transfer handle that the MC |
| * may use to retrieve a larger response payload. |
| * @param[in] permission_flags - Indicates the access level granted to the |
| * resource targeted by the Operation. |
| * @param[in] response_payload_length - Length of the response payload. |
| * @param[in] etag_format - Format of the etag string. |
| * @param[in] etag - ETag. |
| * @param[in] response_payload - The response payload if the payload fits. |
| * @param[out] msg - Response message will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int encode_rde_operation_status_resp( |
| uint8_t instance_id, uint8_t completion_code, uint8_t operation_status, |
| uint8_t completion_percentage, uint32_t completion_time_seconds, |
| const union pldm_rde_op_execution_flags* operation_execution_flags, |
| uint32_t result_transfer_handle, |
| const union pldm_rde_permission_flags* permission_flags, |
| uint32_t response_payload_length, |
| enum pldm_rde_varstring_format etag_format, const char* etag, |
| const uint8_t* response_payload, struct pldm_msg* msg); |
| |
| /** |
| * @brief Encode RDEOperationStatus response. |
| * |
| * @param[in] instance_id - Message's instance id. |
| * @param[in] completion_code - PLDM completion code. |
| * @param[in] operation_status - Status of the operation. |
| * @param[in] completion_percentage - Percentage complete. |
| * @param[in] completion_time_seconds - An estimate of the number of seconds |
| * remaining before the Operation is completed. |
| * @param[in] operation_execution_flags - Explains the result of operation. |
| * @param[in] result_transfer_handle - A data transfer handle that the MC |
| * may use to retrieve a larger response payload. |
| * @param[in] permission_flags - Indicates the access level granted to the |
| * resource targeted by the Operation. |
| * @param[in] response_payload_length - Length of the response payload. |
| * @param[in] etag_format - Format of the etag string. |
| * @param[in] etag - ETag. |
| * @param[in] response_payload - The response payload if the payload fits. |
| * @param[out] msg - Response message will be written to this. |
| * @return pldm_completion_codes. |
| */ |
| int decode_rde_operation_status_resp( |
| const struct pldm_msg* msg, size_t payload_length, uint8_t* completion_code, |
| uint8_t* completion_percentage, uint8_t* operation_status, |
| uint32_t* completion_time_seconds, uint32_t* result_transfer_handle, |
| uint32_t* response_payload_length, |
| union pldm_rde_permission_flags** permission_flags, |
| union pldm_rde_op_execution_flags** operation_execution_flags, |
| struct pldm_rde_varstring** resp_etag, uint8_t** payload); |
| #endif // PLDM_RDE_HPP |