diff --git a/include/library/cxl_tsp_common_lib.h b/include/library/cxl_tsp_common_lib.h index b1bb8b7..5010cb8 100644 --- a/include/library/cxl_tsp_common_lib.h +++ b/include/library/cxl_tsp_common_lib.h @@ -44,4 +44,10 @@ typedef struct { cxl_tsp_secondary_session_psk_key_material_t secondary_session_psk_key_material[4]; } libcxltsp_device_2nd_session_info_t; +typedef enum { + LIB_CXL_TSP_SESSION_TYPE_PRIMARY, + LIB_CXL_TSP_SESSION_TYPE_SECONDARY, + LIB_CXL_TSP_SESSION_TYPE_OTHER, +} libcxltsp_session_type; + #endif diff --git a/include/library/cxl_tsp_device_lib.h b/include/library/cxl_tsp_device_lib.h index ad46486..c7602fb 100644 --- a/include/library/cxl_tsp_device_lib.h +++ b/include/library/cxl_tsp_device_lib.h @@ -42,8 +42,7 @@ void libcxltsp_initialize_session_id ( uint32_t session_id ); -bool libcxltsp_is_session_primary (uint32_t session_id); -bool libcxltsp_is_session_secondary (uint32_t session_id); +libcxltsp_session_type libcxltsp_get_session_type (uint32_t session_id); typedef uint32_t libcxltsp_error_code_t; #define CXL_TSP_ERROR_CODE_SUCCESS 0 diff --git a/library/cxl_tsp_device_lib_sample/cxl_tsp_device_context.c b/library/cxl_tsp_device_lib_sample/cxl_tsp_device_context.c index c8b7113..50ebb2b 100644 --- a/library/cxl_tsp_device_lib_sample/cxl_tsp_device_context.c +++ b/library/cxl_tsp_device_lib_sample/cxl_tsp_device_context.c @@ -37,6 +37,16 @@ bool libcxltsp_is_session_secondary (uint32_t session_id) return false; } +libcxltsp_session_type libcxltsp_get_session_type (uint32_t session_id) +{ + if (libcxltsp_is_session_primary(session_id)) { + return LIB_CXL_TSP_SESSION_TYPE_PRIMARY; + } else if (libcxltsp_is_session_secondary(session_id)) { + return LIB_CXL_TSP_SESSION_TYPE_SECONDARY; + } + return LIB_CXL_TSP_SESSION_TYPE_OTHER; +} + void libcxltsp_set_session_id (uint32_t session_id, bool is_secondary, size_t session_index) { if (!is_secondary) { diff --git a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_get_configuration.c b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_get_configuration.c index 4163f8f..f85288b 100644 --- a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_get_configuration.c +++ b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_get_configuration.c @@ -37,7 +37,7 @@ libspdm_return_t cxl_tsp_get_response_get_configuration ( if (session_id == NULL) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } - if ((!libcxltsp_is_session_primary(*session_id)) && (!libcxltsp_is_session_secondary(*session_id))) { + if (libcxltsp_get_session_type(*session_id) == LIB_CXL_TSP_SESSION_TYPE_OTHER) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } diff --git a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_get_configuration_report.c b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_get_configuration_report.c index b3fbf40..6ddefb3 100644 --- a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_get_configuration_report.c +++ b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_get_configuration_report.c @@ -40,7 +40,7 @@ libspdm_return_t cxl_tsp_get_response_get_configuration_report ( if (session_id == NULL) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } - if ((!libcxltsp_is_session_primary(*session_id)) && (!libcxltsp_is_session_secondary(*session_id))) { + if (libcxltsp_get_session_type(*session_id) == LIB_CXL_TSP_SESSION_TYPE_OTHER) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } diff --git a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_lock_configuration.c b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_lock_configuration.c index 1f61120..3c58072 100644 --- a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_lock_configuration.c +++ b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_lock_configuration.c @@ -36,7 +36,7 @@ libspdm_return_t cxl_tsp_get_response_lock_configuration ( if (session_id == NULL) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } - if (!libcxltsp_is_session_primary(*session_id)) { + if (libcxltsp_get_session_type(*session_id) != LIB_CXL_TSP_SESSION_TYPE_PRIMARY) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } diff --git a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_set_configuration.c b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_set_configuration.c index daec3be..47e1b8a 100644 --- a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_set_configuration.c +++ b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_set_configuration.c @@ -241,7 +241,7 @@ libspdm_return_t cxl_tsp_get_response_set_configuration ( if (session_id == NULL) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } - if (!libcxltsp_is_session_primary(*session_id)) { + if (libcxltsp_get_session_type(*session_id) != LIB_CXL_TSP_SESSION_TYPE_PRIMARY) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } diff --git a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_set_te_state.c b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_set_te_state.c index c38f955..ab4523a 100644 --- a/library/cxl_tsp_responder_lib/cxl_tsp_rsp_set_te_state.c +++ b/library/cxl_tsp_responder_lib/cxl_tsp_rsp_set_te_state.c @@ -36,7 +36,7 @@ libspdm_return_t cxl_tsp_get_response_set_te_state ( if (session_id == NULL) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } - if ((!libcxltsp_is_session_primary(*session_id)) && (!libcxltsp_is_session_secondary(*session_id))) { + if (libcxltsp_get_session_type(*session_id) == LIB_CXL_TSP_SESSION_TYPE_OTHER) { return CXL_TSP_ERROR_CODE_NO_PRIVILEGE; } diff --git a/spdm_emu/spdm_requester_emu/spdm_requester_pci_doe.c b/spdm_emu/spdm_requester_emu/spdm_requester_pci_doe.c index 3d68738..13583c3 100644 --- a/spdm_emu/spdm_requester_emu/spdm_requester_pci_doe.c +++ b/spdm_emu/spdm_requester_emu/spdm_requester_pci_doe.c @@ -383,7 +383,7 @@ libspdm_return_t cxl_ide_km_process_session_message(void *spdm_context, uint32_t return LIBSPDM_STATUS_SUCCESS; } -libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t session_id, bool is_primary, bool is_secondary) +libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t session_id, libcxltsp_session_type session_type) { libspdm_return_t status; libcxltsp_device_capabilities_t device_capabilities; @@ -403,7 +403,7 @@ libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t se if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "cxl_tsp_get_version(%d) done\n", is_secondary)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "cxl_tsp_get_version(%d) done\n", session_type)); libspdm_zero_mem (&device_capabilities, sizeof(device_capabilities)); status = cxl_tsp_get_capabilities (m_pci_doe_context, spdm_context, &session_id, @@ -411,7 +411,7 @@ libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t se if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "device_capabilities(%d):\n", is_secondary)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "device_capabilities(%d):\n", session_type)); LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, " memory_encryption_features_supported - 0x%04x\n", device_capabilities.memory_encryption_features_supported)); LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, " memory_encryption_algorithms_supported - 0x%08x\n", @@ -431,7 +431,7 @@ libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t se LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, " number_of_secondary_sessions - 0x%02x\n", device_capabilities.number_of_secondary_sessions)); - if (is_primary) { + if (session_type == LIB_CXL_TSP_SESSION_TYPE_PRIMARY) { libspdm_zero_mem (&device_configuration, sizeof(device_configuration)); device_configuration.memory_encryption_features_enable = CXL_TSP_MEMORY_ENCRYPTION_FEATURES_ENABLE_ENCRYPTION; @@ -495,10 +495,10 @@ libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t se if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "cxl_tsp_set_configuration(%d) done\n", is_secondary)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "cxl_tsp_set_configuration(%d) done\n", session_type)); } - if (is_primary || is_secondary) { + if (session_type != LIB_CXL_TSP_SESSION_TYPE_OTHER) { libspdm_zero_mem (¤t_device_configuration, sizeof(current_device_configuration)); current_tsp_state = CXL_TSP_STATE_CONFIG_UNLOCKED; status = cxl_tsp_get_configuration (m_pci_doe_context, spdm_context, &session_id, @@ -506,7 +506,7 @@ libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t se if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "current_device_configuration(%d):\n", is_secondary)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "current_device_configuration(%d):\n", session_type)); LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, " memory_encryption_features_enable - 0x%04x\n", current_device_configuration.memory_encryption_features_enable)); LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, " memory_encryption_algorithm_select - 0x%08x\n", @@ -533,10 +533,10 @@ libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t se LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, " number_of_ckids - 0x%02x\n", current_device_configuration.explicit_ib_te_state_granularity_entry[index].length_index)); } - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "current_tsp_state(%d) - 0x%02x\n", is_secondary, current_tsp_state)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "current_tsp_state(%d) - 0x%02x\n", session_type, current_tsp_state)); } - if (is_primary || is_secondary) { + if (session_type != LIB_CXL_TSP_SESSION_TYPE_OTHER) { configuration_report_size = sizeof(configuration_report_buffer); status = cxl_tsp_get_configuration_report ( m_pci_doe_context, spdm_context, &session_id, @@ -545,29 +545,29 @@ libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t se return status; } configuration_report = (cxl_tsp_target_configuration_report_t *)configuration_report_buffer; - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "configuration_report(%d):\n", is_secondary)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "configuration_report(%d):\n", session_type)); LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, " valid_tsp_report_fields - 0x%02x\n", configuration_report->valid_tsp_report_fields)); } - if (is_primary) { + if (session_type == LIB_CXL_TSP_SESSION_TYPE_PRIMARY) { status = cxl_tsp_lock_configuration (m_pci_doe_context, spdm_context, &session_id); if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "cxl_tsp_lock_configuration(%d) done\n", is_secondary)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "cxl_tsp_lock_configuration(%d) done\n", session_type)); } - if (is_primary || is_secondary) { + if (session_type != LIB_CXL_TSP_SESSION_TYPE_OTHER) { current_tsp_state = CXL_TSP_STATE_CONFIG_UNLOCKED; status = cxl_tsp_get_configuration (m_pci_doe_context, spdm_context, &session_id, NULL, ¤t_tsp_state); if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "current_tsp_state(%d) - 0x%02x\n", is_secondary, current_tsp_state)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "current_tsp_state(%d) - 0x%02x\n", session_type, current_tsp_state)); } - if (is_primary || is_secondary) { + if (session_type != LIB_CXL_TSP_SESSION_TYPE_OTHER) { memory_range[0].length = 0x10000; memory_range[0].starting_address = 0x100000; te_state = 0x1; @@ -578,7 +578,7 @@ libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t se if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "set_te_state(%d) - 0x%02x\n", is_secondary, te_state)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "set_te_state(%d) - 0x%02x\n", session_type, te_state)); te_state = 0x0; status = cxl_tsp_set_te_state (m_pci_doe_context, spdm_context, &session_id, @@ -588,10 +588,10 @@ libspdm_return_t cxl_tsp_process_session_message(void *spdm_context, uint32_t se if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; } - LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "set_te_state(%d) - 0x%02x\n", is_secondary, te_state)); + LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "set_te_state(%d) - 0x%02x\n", session_type, te_state)); } - if (is_primary) { + if (session_type == LIB_CXL_TSP_SESSION_TYPE_PRIMARY) { /* test CXL_TSP 2nd session */ if ((device_capabilities.configuration_features_supported & CXL_TSP_CONFIGURATION_FEATURES_SUPPORT_TARGET_SUPPORT_ADDITIONAL_SPDM_SESSIONS) != 0) { @@ -652,7 +652,7 @@ libspdm_return_t do_cxl_tsp_2nd_session_via_spdm(void *spdm_context, size_t inde return status; } - status = cxl_tsp_process_session_message (spdm_context, session_id, false, true); + status = cxl_tsp_process_session_message (spdm_context, session_id, LIB_CXL_TSP_SESSION_TYPE_SECONDARY); if (LIBSPDM_STATUS_IS_ERROR(status)) { printf("do_app_session_via_spdm(2nd) - %x\n", (uint32_t)status); return status; @@ -688,7 +688,8 @@ libspdm_return_t pci_doe_process_session_message(void *spdm_context, uint32_t se return status; } - status = cxl_tsp_process_session_message (spdm_context, session_id, is_first, false); + status = cxl_tsp_process_session_message (spdm_context, session_id, + is_first ? LIB_CXL_TSP_SESSION_TYPE_PRIMARY : LIB_CXL_TSP_SESSION_TYPE_OTHER); if (LIBSPDM_STATUS_IS_ERROR(status)) { return status; }