* openUBMC is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#ifndef __SPDM_COMMAND_IMPL_H__
#define __SPDM_COMMAND_IMPL_H__
#include "common.h"
extern "C" {
#include "hal/base.h"
#include "internal/libspdm_common_lib.h"
#include "internal/libspdm_requester_lib.h"
}
#define NOT_READY_MAX_RETRY_CNT 3
#define NOT_READY_TOTAL_TIMEOUT_MS (30 * 1000)
bool CheckContext(void* spdm_context);
size_t GetContextSize(void);
size_t GetContextSizeWithoutSecuredContext(void);
uint32_t InitContext(void* spdm_context);
void RegisterDeviceIoFunc(void* spdm_context, libspdm_device_send_message_func send_message,
libspdm_device_receive_message_func receive_message);
void RegisterTransportLayerFunc(void* spdm_context, uint32_t max_spdm_msg_size, uint32_t transport_header_size,
uint32_t transport_tail_size,
libspdm_transport_encode_message_func transport_encode_message,
libspdm_transport_decode_message_func transport_decode_message);
void RegisterDeviceBufferFunc(void* spdm_context, uint32_t sender_buffer_size, uint32_t receiver_buffer_size,
libspdm_device_acquire_sender_buffer_func acquire_sender_buffer,
libspdm_device_release_sender_buffer_func release_sender_buffer,
libspdm_device_acquire_receiver_buffer_func acquire_receiver_buffer,
libspdm_device_release_receiver_buffer_func release_receiver_buffer);
uint32_t SpdmSetData(void* spdm_context, libspdm_data_type_t data_type, const libspdm_data_parameter_t* parameter,
const void* data, size_t data_size);
uint32_t SpdmGetData(void* spdm_context, libspdm_data_type_t data_type, const libspdm_data_parameter_t* parameter,
void* data, size_t* data_size);
void ZeroMem(void* buffer, size_t length);
size_t GetRequiredScratchBufferSize(void* spdm_context);
void SetScratchBuffer(void* spdm_context, void* scratch_buffer, size_t scratch_buffer_size);
size_t GetHashSize(uint32_t base_hash_algo);
uint32_t InitSpdmConnection(void* spdm_context, bool get_version_only);
uint32_t GetDigest(void* spdm_context, const uint32_t* session_id, uint8_t* slot_mask, void* total_digest_buffer);
uint32_t GetCertificate(void* spdm_context, const uint32_t* session_id, uint8_t slot_id, size_t* cert_chain_size,
void* cert_chain);
uint32_t ChallengeAuth(void* spdm_context, void* reserved, uint8_t slot_id, uint8_t measurement_hash_type,
void* measurement_hash, uint8_t* slot_mask);
uint32_t GetMeasurement(void* spdm_context, const uint32_t* session_id, uint8_t request_attribute,
uint8_t measurement_operation, uint8_t slot_id, uint8_t* content_changed,
uint8_t* number_of_blocks, uint32_t* measurement_record_length, void* measurement_record);
uint32_t GetMeasurementEx(void* spdm_context, const uint32_t* session_id, uint8_t request_attribute,
uint8_t measurement_operation, uint8_t slot_id, uint8_t* content_changed,
uint8_t* number_of_blocks, uint32_t* measurement_record_length, void* measurement_record,
const void* requester_nonce_in, void* requester_nonce, void* responder_nonce,
void* opaque_data, size_t* opaque_data_size);
#endif