178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
225f09d4aSHareshx Sankar Raj /* Copyright(c) 2007-2025 Intel Corporation */
378ee8d1cSJulian Grajkowski
478ee8d1cSJulian Grajkowski /**
578ee8d1cSJulian Grajkowski ***************************************************************************
678ee8d1cSJulian Grajkowski * @file sal_crypto.c Instance handling functions for crypto
778ee8d1cSJulian Grajkowski *
878ee8d1cSJulian Grajkowski * @ingroup SalCtrl
978ee8d1cSJulian Grajkowski *
1078ee8d1cSJulian Grajkowski ***************************************************************************/
1178ee8d1cSJulian Grajkowski
1278ee8d1cSJulian Grajkowski /*
1378ee8d1cSJulian Grajkowski *******************************************************************************
1478ee8d1cSJulian Grajkowski * Include public/global header files
1578ee8d1cSJulian Grajkowski *******************************************************************************
1678ee8d1cSJulian Grajkowski */
1778ee8d1cSJulian Grajkowski
1878ee8d1cSJulian Grajkowski /* QAT-API includes */
1978ee8d1cSJulian Grajkowski #include "cpa.h"
2078ee8d1cSJulian Grajkowski #include "cpa_types.h"
2178ee8d1cSJulian Grajkowski #include "cpa_cy_common.h"
2278ee8d1cSJulian Grajkowski #include "cpa_cy_im.h"
2378ee8d1cSJulian Grajkowski #include "cpa_cy_key.h"
2478ee8d1cSJulian Grajkowski #include "cpa_cy_sym.h"
2578ee8d1cSJulian Grajkowski
2678ee8d1cSJulian Grajkowski #include "qat_utils.h"
2778ee8d1cSJulian Grajkowski
2878ee8d1cSJulian Grajkowski /* ADF includes */
2978ee8d1cSJulian Grajkowski #include "icp_adf_init.h"
3078ee8d1cSJulian Grajkowski #include "icp_adf_transport.h"
3178ee8d1cSJulian Grajkowski #include "icp_accel_devices.h"
3278ee8d1cSJulian Grajkowski #include "icp_adf_cfg.h"
3378ee8d1cSJulian Grajkowski #include "icp_adf_accel_mgr.h"
3478ee8d1cSJulian Grajkowski #include "icp_adf_poll.h"
3578ee8d1cSJulian Grajkowski #include "icp_adf_debug.h"
3678ee8d1cSJulian Grajkowski
3778ee8d1cSJulian Grajkowski /* SAL includes */
3878ee8d1cSJulian Grajkowski #include "lac_log.h"
3978ee8d1cSJulian Grajkowski #include "lac_mem.h"
4078ee8d1cSJulian Grajkowski #include "lac_mem_pools.h"
4178ee8d1cSJulian Grajkowski #include "sal_statistics.h"
4278ee8d1cSJulian Grajkowski #include "lac_common.h"
4378ee8d1cSJulian Grajkowski #include "lac_list.h"
4478ee8d1cSJulian Grajkowski #include "lac_hooks.h"
4578ee8d1cSJulian Grajkowski #include "lac_sym_qat_hash_defs_lookup.h"
4678ee8d1cSJulian Grajkowski #include "lac_sym.h"
4778ee8d1cSJulian Grajkowski #include "lac_sym_key.h"
4878ee8d1cSJulian Grajkowski #include "lac_sym_hash.h"
4978ee8d1cSJulian Grajkowski #include "lac_sym_cb.h"
5078ee8d1cSJulian Grajkowski #include "lac_sym_stats.h"
5178ee8d1cSJulian Grajkowski #include "lac_sal_types_crypto.h"
5278ee8d1cSJulian Grajkowski #include "lac_sal.h"
5378ee8d1cSJulian Grajkowski #include "lac_sal_ctrl.h"
5478ee8d1cSJulian Grajkowski #include "sal_string_parse.h"
5578ee8d1cSJulian Grajkowski #include "sal_service_state.h"
5678ee8d1cSJulian Grajkowski #include "icp_sal_poll.h"
5778ee8d1cSJulian Grajkowski #include "lac_sync.h"
5878ee8d1cSJulian Grajkowski #include "lac_sym_qat.h"
5978ee8d1cSJulian Grajkowski #include "icp_sal_versions.h"
6078ee8d1cSJulian Grajkowski #include "icp_sal_user.h"
61a977168cSMichal Gulbicki #include "sal_hw_gen.h"
6278ee8d1cSJulian Grajkowski
63a977168cSMichal Gulbicki #define HMAC_MODE_1 1
64a977168cSMichal Gulbicki #define HMAC_MODE_2 2
6578ee8d1cSJulian Grajkowski #define TH_CY_RX_0 0
6678ee8d1cSJulian Grajkowski #define TH_CY_RX_1 1
6778ee8d1cSJulian Grajkowski #define MAX_CY_RX_RINGS 2
6878ee8d1cSJulian Grajkowski
6978ee8d1cSJulian Grajkowski #define DOUBLE_INCR 2
7078ee8d1cSJulian Grajkowski
7178ee8d1cSJulian Grajkowski #define TH_SINGLE_RX 0
7278ee8d1cSJulian Grajkowski #define NUM_CRYPTO_SYM_RX_RINGS 1
7378ee8d1cSJulian Grajkowski #define NUM_CRYPTO_ASYM_RX_RINGS 1
7478ee8d1cSJulian Grajkowski #define NUM_CRYPTO_NRBG_RX_RINGS 1
7578ee8d1cSJulian Grajkowski
76e745eee5SHareshx Sankar Raj CpaStatus Lac_GetCyInstancesByType(
77e745eee5SHareshx Sankar Raj const CpaAccelerationServiceType accelerationServiceType,
78e745eee5SHareshx Sankar Raj Cpa16U numInstances,
79e745eee5SHareshx Sankar Raj CpaInstanceHandle *pInstances);
80e745eee5SHareshx Sankar Raj
81e745eee5SHareshx Sankar Raj CpaStatus Lac_GetCyNumInstancesByType(
82e745eee5SHareshx Sankar Raj const CpaAccelerationServiceType accelerationServiceType,
83e745eee5SHareshx Sankar Raj Cpa16U *pNumInstances);
84e745eee5SHareshx Sankar Raj
8578ee8d1cSJulian Grajkowski static CpaInstanceHandle
Lac_CryptoGetFirstHandle(void)8678ee8d1cSJulian Grajkowski Lac_CryptoGetFirstHandle(void)
8778ee8d1cSJulian Grajkowski {
8878ee8d1cSJulian Grajkowski CpaInstanceHandle instHandle;
8978ee8d1cSJulian Grajkowski instHandle = Lac_GetFirstHandle(SAL_SERVICE_TYPE_CRYPTO);
9078ee8d1cSJulian Grajkowski if (!instHandle) {
9178ee8d1cSJulian Grajkowski instHandle = Lac_GetFirstHandle(SAL_SERVICE_TYPE_CRYPTO_SYM);
9278ee8d1cSJulian Grajkowski if (!instHandle) {
9378ee8d1cSJulian Grajkowski instHandle =
9478ee8d1cSJulian Grajkowski Lac_GetFirstHandle(SAL_SERVICE_TYPE_CRYPTO_ASYM);
9578ee8d1cSJulian Grajkowski }
9678ee8d1cSJulian Grajkowski }
9778ee8d1cSJulian Grajkowski return instHandle;
9878ee8d1cSJulian Grajkowski }
9978ee8d1cSJulian Grajkowski
10078ee8d1cSJulian Grajkowski /* Function to release the sym handles. */
10178ee8d1cSJulian Grajkowski static CpaStatus
SalCtrl_SymReleaseTransHandle(sal_service_t * service)10278ee8d1cSJulian Grajkowski SalCtrl_SymReleaseTransHandle(sal_service_t *service)
10378ee8d1cSJulian Grajkowski {
10478ee8d1cSJulian Grajkowski
10578ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
10678ee8d1cSJulian Grajkowski CpaStatus ret_status = CPA_STATUS_SUCCESS;
10778ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
10878ee8d1cSJulian Grajkowski
10978ee8d1cSJulian Grajkowski if (NULL != pCryptoService->trans_handle_sym_tx) {
11078ee8d1cSJulian Grajkowski status = icp_adf_transReleaseHandle(
11178ee8d1cSJulian Grajkowski pCryptoService->trans_handle_sym_tx);
11278ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
11378ee8d1cSJulian Grajkowski ret_status = status;
11478ee8d1cSJulian Grajkowski }
11578ee8d1cSJulian Grajkowski }
11678ee8d1cSJulian Grajkowski if (NULL != pCryptoService->trans_handle_sym_rx) {
11778ee8d1cSJulian Grajkowski status = icp_adf_transReleaseHandle(
11878ee8d1cSJulian Grajkowski pCryptoService->trans_handle_sym_rx);
11978ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
12078ee8d1cSJulian Grajkowski ret_status = status;
12178ee8d1cSJulian Grajkowski }
12278ee8d1cSJulian Grajkowski }
12378ee8d1cSJulian Grajkowski
12478ee8d1cSJulian Grajkowski return ret_status;
12578ee8d1cSJulian Grajkowski }
12678ee8d1cSJulian Grajkowski
12778ee8d1cSJulian Grajkowski /*
12878ee8d1cSJulian Grajkowski * @ingroup sal_crypto
12978ee8d1cSJulian Grajkowski * Frees resources (memory and transhandles) if allocated
13078ee8d1cSJulian Grajkowski *
13178ee8d1cSJulian Grajkowski * @param[in] pCryptoService Pointer to sym service instance
13278ee8d1cSJulian Grajkowski * @retval SUCCESS if transhandles released
13378ee8d1cSJulian Grajkowski * successfully.
13478ee8d1cSJulian Grajkowski */
13578ee8d1cSJulian Grajkowski static CpaStatus
SalCtrl_SymFreeResources(sal_crypto_service_t * pCryptoService)13678ee8d1cSJulian Grajkowski SalCtrl_SymFreeResources(sal_crypto_service_t *pCryptoService)
13778ee8d1cSJulian Grajkowski {
13878ee8d1cSJulian Grajkowski
13978ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
14078ee8d1cSJulian Grajkowski
14178ee8d1cSJulian Grajkowski /* Free memory pools if not NULL */
14278ee8d1cSJulian Grajkowski Lac_MemPoolDestroy(pCryptoService->lac_sym_cookie_pool);
14378ee8d1cSJulian Grajkowski
14478ee8d1cSJulian Grajkowski /* Free misc memory if allocated */
14578ee8d1cSJulian Grajkowski /* Frees memory allocated for Hmac precomputes */
14678ee8d1cSJulian Grajkowski LacSymHash_HmacPrecompShutdown(pCryptoService);
14778ee8d1cSJulian Grajkowski /* Free memory allocated for key labels
14878ee8d1cSJulian Grajkowski Also clears key stats */
14978ee8d1cSJulian Grajkowski LacSymKey_Shutdown(pCryptoService);
15078ee8d1cSJulian Grajkowski /* Free hash lookup table if allocated */
15178ee8d1cSJulian Grajkowski if (NULL != pCryptoService->pLacHashLookupDefs) {
15278ee8d1cSJulian Grajkowski LAC_OS_FREE(pCryptoService->pLacHashLookupDefs);
15378ee8d1cSJulian Grajkowski }
15478ee8d1cSJulian Grajkowski
15578ee8d1cSJulian Grajkowski /* Free statistics */
15678ee8d1cSJulian Grajkowski LacSym_StatsFree(pCryptoService);
15778ee8d1cSJulian Grajkowski
15878ee8d1cSJulian Grajkowski /* Free transport handles */
15978ee8d1cSJulian Grajkowski status = SalCtrl_SymReleaseTransHandle((sal_service_t *)pCryptoService);
16078ee8d1cSJulian Grajkowski return status;
16178ee8d1cSJulian Grajkowski }
16278ee8d1cSJulian Grajkowski
16378ee8d1cSJulian Grajkowski /**
16478ee8d1cSJulian Grajkowski ***********************************************************************
16578ee8d1cSJulian Grajkowski * @ingroup SalCtrl
16678ee8d1cSJulian Grajkowski * This macro verifies that the status is _SUCCESS
16778ee8d1cSJulian Grajkowski * If status is not _SUCCESS then Sym Instance resources are
16878ee8d1cSJulian Grajkowski * freed before the function returns the error
16978ee8d1cSJulian Grajkowski *
17078ee8d1cSJulian Grajkowski * @param[in] status status we are checking
17178ee8d1cSJulian Grajkowski *
17278ee8d1cSJulian Grajkowski * @return void status is ok (CPA_STATUS_SUCCESS)
17378ee8d1cSJulian Grajkowski * @return status The value in the status parameter is an error one
17478ee8d1cSJulian Grajkowski *
17578ee8d1cSJulian Grajkowski ****************************************************************************/
17678ee8d1cSJulian Grajkowski #define LAC_CHECK_STATUS_SYM_INIT(status) \
17778ee8d1cSJulian Grajkowski do { \
17878ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) { \
17978ee8d1cSJulian Grajkowski SalCtrl_SymFreeResources(pCryptoService); \
18078ee8d1cSJulian Grajkowski return status; \
18178ee8d1cSJulian Grajkowski } \
18278ee8d1cSJulian Grajkowski } while (0)
18378ee8d1cSJulian Grajkowski
18478ee8d1cSJulian Grajkowski /* Function that creates the Sym Handles. */
18578ee8d1cSJulian Grajkowski static CpaStatus
SalCtrl_SymCreateTransHandle(icp_accel_dev_t * device,sal_service_t * service,Cpa32U numSymRequests,char * section)18678ee8d1cSJulian Grajkowski SalCtrl_SymCreateTransHandle(icp_accel_dev_t *device,
18778ee8d1cSJulian Grajkowski sal_service_t *service,
18878ee8d1cSJulian Grajkowski Cpa32U numSymRequests,
18978ee8d1cSJulian Grajkowski char *section)
19078ee8d1cSJulian Grajkowski {
19178ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
19278ee8d1cSJulian Grajkowski char temp_string[SAL_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
19378ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
19478ee8d1cSJulian Grajkowski icp_resp_deliv_method rx_resp_type = ICP_RESP_TYPE_IRQ;
19578ee8d1cSJulian Grajkowski Cpa32U msgSize = 0;
19678ee8d1cSJulian Grajkowski
19778ee8d1cSJulian Grajkowski if (SAL_RESP_POLL_CFG_FILE == pCryptoService->isPolled) {
19878ee8d1cSJulian Grajkowski rx_resp_type = ICP_RESP_TYPE_POLL;
19978ee8d1cSJulian Grajkowski }
20078ee8d1cSJulian Grajkowski
20178ee8d1cSJulian Grajkowski if (CPA_FALSE == pCryptoService->generic_service_info.is_dyn) {
20278ee8d1cSJulian Grajkowski section = icpGetProcessName();
20378ee8d1cSJulian Grajkowski }
20478ee8d1cSJulian Grajkowski
20578ee8d1cSJulian Grajkowski /* Parse Sym ring details */
20678ee8d1cSJulian Grajkowski status =
20778ee8d1cSJulian Grajkowski Sal_StringParsing("Cy",
20878ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.instance,
20978ee8d1cSJulian Grajkowski "RingSymTx",
21078ee8d1cSJulian Grajkowski temp_string);
21178ee8d1cSJulian Grajkowski
21278ee8d1cSJulian Grajkowski /* Need to free resources in case not _SUCCESS from here */
21378ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
21478ee8d1cSJulian Grajkowski
21578ee8d1cSJulian Grajkowski msgSize = LAC_QAT_SYM_REQ_SZ_LW * LAC_LONG_WORD_IN_BYTES;
21678ee8d1cSJulian Grajkowski status =
21778ee8d1cSJulian Grajkowski icp_adf_transCreateHandle(device,
21878ee8d1cSJulian Grajkowski ICP_TRANS_TYPE_ETR,
21978ee8d1cSJulian Grajkowski section,
22078ee8d1cSJulian Grajkowski pCryptoService->acceleratorNum,
221a977168cSMichal Gulbicki pCryptoService->bankNumSym,
22278ee8d1cSJulian Grajkowski temp_string,
22378ee8d1cSJulian Grajkowski lac_getRingType(SAL_RING_TYPE_A_SYM_HI),
22478ee8d1cSJulian Grajkowski NULL,
22578ee8d1cSJulian Grajkowski ICP_RESP_TYPE_NONE,
22678ee8d1cSJulian Grajkowski numSymRequests,
22778ee8d1cSJulian Grajkowski msgSize,
22878ee8d1cSJulian Grajkowski (icp_comms_trans_handle *)&(
22978ee8d1cSJulian Grajkowski pCryptoService->trans_handle_sym_tx));
23078ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
23178ee8d1cSJulian Grajkowski
23278ee8d1cSJulian Grajkowski status =
23378ee8d1cSJulian Grajkowski Sal_StringParsing("Cy",
23478ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.instance,
23578ee8d1cSJulian Grajkowski "RingSymRx",
23678ee8d1cSJulian Grajkowski temp_string);
23778ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
23878ee8d1cSJulian Grajkowski
23978ee8d1cSJulian Grajkowski msgSize = LAC_QAT_SYM_RESP_SZ_LW * LAC_LONG_WORD_IN_BYTES;
24078ee8d1cSJulian Grajkowski status = icp_adf_transCreateHandle(
24178ee8d1cSJulian Grajkowski device,
24278ee8d1cSJulian Grajkowski ICP_TRANS_TYPE_ETR,
24378ee8d1cSJulian Grajkowski section,
24478ee8d1cSJulian Grajkowski pCryptoService->acceleratorNum,
245a977168cSMichal Gulbicki pCryptoService->bankNumSym,
24678ee8d1cSJulian Grajkowski temp_string,
24778ee8d1cSJulian Grajkowski lac_getRingType(SAL_RING_TYPE_NONE),
24878ee8d1cSJulian Grajkowski (icp_trans_callback)LacSymQat_SymRespHandler,
24978ee8d1cSJulian Grajkowski rx_resp_type,
25078ee8d1cSJulian Grajkowski numSymRequests,
25178ee8d1cSJulian Grajkowski msgSize,
25278ee8d1cSJulian Grajkowski (icp_comms_trans_handle *)&(pCryptoService->trans_handle_sym_rx));
25378ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
25478ee8d1cSJulian Grajkowski
25578ee8d1cSJulian Grajkowski return status;
25678ee8d1cSJulian Grajkowski }
25778ee8d1cSJulian Grajkowski
25878ee8d1cSJulian Grajkowski static int
SalCtrl_CryptoDebug(void * private_data,char * data,int size,int offset)25978ee8d1cSJulian Grajkowski SalCtrl_CryptoDebug(void *private_data, char *data, int size, int offset)
26078ee8d1cSJulian Grajkowski {
26178ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
26278ee8d1cSJulian Grajkowski Cpa32U len = 0;
26378ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService =
26478ee8d1cSJulian Grajkowski (sal_crypto_service_t *)private_data;
26578ee8d1cSJulian Grajkowski
26678ee8d1cSJulian Grajkowski switch (offset) {
26778ee8d1cSJulian Grajkowski case SAL_STATS_SYM: {
26878ee8d1cSJulian Grajkowski CpaCySymStats64 symStats = { 0 };
26978ee8d1cSJulian Grajkowski if (CPA_TRUE !=
27078ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.stats
27178ee8d1cSJulian Grajkowski ->bSymStatsEnabled) {
27278ee8d1cSJulian Grajkowski break;
27378ee8d1cSJulian Grajkowski }
27478ee8d1cSJulian Grajkowski status = cpaCySymQueryStats64(pCryptoService, &symStats);
27578ee8d1cSJulian Grajkowski if (status != CPA_STATUS_SUCCESS) {
27678ee8d1cSJulian Grajkowski LAC_LOG_ERROR("cpaCySymQueryStats64 returned error\n");
27778ee8d1cSJulian Grajkowski return 0;
27878ee8d1cSJulian Grajkowski }
27978ee8d1cSJulian Grajkowski
28078ee8d1cSJulian Grajkowski /* Engine Info */
28178ee8d1cSJulian Grajkowski len += snprintf(
28278ee8d1cSJulian Grajkowski data + len,
28378ee8d1cSJulian Grajkowski size - len,
28478ee8d1cSJulian Grajkowski SEPARATOR BORDER
28578ee8d1cSJulian Grajkowski " Statistics for Instance %24s |\n" BORDER
28678ee8d1cSJulian Grajkowski " Symmetric Stats " BORDER
28778ee8d1cSJulian Grajkowski "\n" SEPARATOR,
28878ee8d1cSJulian Grajkowski pCryptoService->debug_file->name);
28978ee8d1cSJulian Grajkowski
29078ee8d1cSJulian Grajkowski /* Session Info */
29178ee8d1cSJulian Grajkowski len += snprintf(
29278ee8d1cSJulian Grajkowski data + len,
29378ee8d1cSJulian Grajkowski size - len,
29478ee8d1cSJulian Grajkowski BORDER " Sessions Initialized: %16llu " BORDER
29578ee8d1cSJulian Grajkowski "\n" BORDER
29678ee8d1cSJulian Grajkowski " Sessions Removed: %16llu " BORDER
29778ee8d1cSJulian Grajkowski "\n" BORDER
29878ee8d1cSJulian Grajkowski " Session Errors: %16llu " BORDER
29978ee8d1cSJulian Grajkowski "\n" SEPARATOR,
30078ee8d1cSJulian Grajkowski (long long unsigned int)symStats.numSessionsInitialized,
30178ee8d1cSJulian Grajkowski (long long unsigned int)symStats.numSessionsRemoved,
30278ee8d1cSJulian Grajkowski (long long unsigned int)symStats.numSessionErrors);
30378ee8d1cSJulian Grajkowski
30478ee8d1cSJulian Grajkowski /* Session info */
30578ee8d1cSJulian Grajkowski len += snprintf(
30678ee8d1cSJulian Grajkowski data + len,
30778ee8d1cSJulian Grajkowski size - len,
30878ee8d1cSJulian Grajkowski BORDER " Symmetric Requests: %16llu " BORDER
30978ee8d1cSJulian Grajkowski "\n" BORDER
31078ee8d1cSJulian Grajkowski " Symmetric Request Errors: %16llu " BORDER
31178ee8d1cSJulian Grajkowski "\n" BORDER
31278ee8d1cSJulian Grajkowski " Symmetric Completed: %16llu " BORDER
31378ee8d1cSJulian Grajkowski "\n" BORDER
31478ee8d1cSJulian Grajkowski " Symmetric Completed Errors: %16llu " BORDER
31578ee8d1cSJulian Grajkowski "\n" BORDER
31678ee8d1cSJulian Grajkowski " Symmetric Verify Failures: %16llu " BORDER
31778ee8d1cSJulian Grajkowski "\n",
31878ee8d1cSJulian Grajkowski (long long unsigned int)symStats.numSymOpRequests,
31978ee8d1cSJulian Grajkowski (long long unsigned int)symStats.numSymOpRequestErrors,
32078ee8d1cSJulian Grajkowski (long long unsigned int)symStats.numSymOpCompleted,
32178ee8d1cSJulian Grajkowski (long long unsigned int)symStats.numSymOpCompletedErrors,
32278ee8d1cSJulian Grajkowski (long long unsigned int)symStats.numSymOpVerifyFailures);
32378ee8d1cSJulian Grajkowski break;
32478ee8d1cSJulian Grajkowski }
32578ee8d1cSJulian Grajkowski default: {
32678ee8d1cSJulian Grajkowski len += snprintf(data + len, size - len, SEPARATOR);
32778ee8d1cSJulian Grajkowski return 0;
32878ee8d1cSJulian Grajkowski }
32978ee8d1cSJulian Grajkowski }
33078ee8d1cSJulian Grajkowski return ++offset;
33178ee8d1cSJulian Grajkowski }
33278ee8d1cSJulian Grajkowski
33378ee8d1cSJulian Grajkowski static CpaStatus
SalCtrl_SymInit(icp_accel_dev_t * device,sal_service_t * service)33478ee8d1cSJulian Grajkowski SalCtrl_SymInit(icp_accel_dev_t *device, sal_service_t *service)
33578ee8d1cSJulian Grajkowski {
33678ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
337a977168cSMichal Gulbicki Cpa32U qatHmacMode = 0;
33878ee8d1cSJulian Grajkowski Cpa32U numSymConcurrentReq = 0;
33978ee8d1cSJulian Grajkowski char adfGetParam[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
34078ee8d1cSJulian Grajkowski char temp_string[SAL_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
34178ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
34278ee8d1cSJulian Grajkowski char *section = DYN_SEC;
34378ee8d1cSJulian Grajkowski
34478ee8d1cSJulian Grajkowski /*Instance may not in the DYN section*/
34578ee8d1cSJulian Grajkowski if (CPA_FALSE == pCryptoService->generic_service_info.is_dyn) {
34678ee8d1cSJulian Grajkowski section = icpGetProcessName();
34778ee8d1cSJulian Grajkowski }
34878ee8d1cSJulian Grajkowski
34978ee8d1cSJulian Grajkowski /* Register callbacks for the symmetric services
35078ee8d1cSJulian Grajkowski * (Hash, Cipher, Algorithm-Chaining) (returns void)*/
35178ee8d1cSJulian Grajkowski LacSymCb_CallbacksRegister();
35278ee8d1cSJulian Grajkowski
353a977168cSMichal Gulbicki qatHmacMode = (Cpa32U)Sal_Strtoul(adfGetParam, NULL, SAL_CFG_BASE_DEC);
354a977168cSMichal Gulbicki switch (qatHmacMode) {
355a977168cSMichal Gulbicki case HMAC_MODE_1:
356a977168cSMichal Gulbicki pCryptoService->qatHmacMode = ICP_QAT_HW_AUTH_MODE1;
357a977168cSMichal Gulbicki break;
358a977168cSMichal Gulbicki case HMAC_MODE_2:
359a977168cSMichal Gulbicki pCryptoService->qatHmacMode = ICP_QAT_HW_AUTH_MODE2;
360a977168cSMichal Gulbicki break;
361a977168cSMichal Gulbicki default:
362a977168cSMichal Gulbicki pCryptoService->qatHmacMode = ICP_QAT_HW_AUTH_MODE1;
363a977168cSMichal Gulbicki break;
364a977168cSMichal Gulbicki }
365a977168cSMichal Gulbicki
36678ee8d1cSJulian Grajkowski /* Get num concurrent requests from config file */
36778ee8d1cSJulian Grajkowski status =
36878ee8d1cSJulian Grajkowski Sal_StringParsing("Cy",
36978ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.instance,
37078ee8d1cSJulian Grajkowski "NumConcurrentSymRequests",
37178ee8d1cSJulian Grajkowski temp_string);
37278ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
37378ee8d1cSJulian Grajkowski status =
37478ee8d1cSJulian Grajkowski icp_adf_cfgGetParamValue(device, section, temp_string, adfGetParam);
37578ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
37678ee8d1cSJulian Grajkowski QAT_UTILS_LOG("Failed to get %s from configuration file\n",
37778ee8d1cSJulian Grajkowski temp_string);
37878ee8d1cSJulian Grajkowski return status;
37978ee8d1cSJulian Grajkowski }
38078ee8d1cSJulian Grajkowski
38178ee8d1cSJulian Grajkowski numSymConcurrentReq =
38278ee8d1cSJulian Grajkowski (Cpa32U)Sal_Strtoul(adfGetParam, NULL, SAL_CFG_BASE_DEC);
38378ee8d1cSJulian Grajkowski if (CPA_STATUS_FAIL == validateConcurrRequest(numSymConcurrentReq)) {
38478ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Invalid NumConcurrentSymRequests, valid "
38578ee8d1cSJulian Grajkowski "values {64, 128, 256, ... 32768, 65536}");
38678ee8d1cSJulian Grajkowski return CPA_STATUS_FAIL;
38778ee8d1cSJulian Grajkowski }
38878ee8d1cSJulian Grajkowski
38978ee8d1cSJulian Grajkowski /* ADF does not allow us to completely fill the ring for batch requests
39078ee8d1cSJulian Grajkowski */
39178ee8d1cSJulian Grajkowski pCryptoService->maxNumSymReqBatch =
39278ee8d1cSJulian Grajkowski (numSymConcurrentReq - SAL_BATCH_SUBMIT_FREE_SPACE);
39378ee8d1cSJulian Grajkowski
39478ee8d1cSJulian Grajkowski /* Create transport handles */
39578ee8d1cSJulian Grajkowski status = SalCtrl_SymCreateTransHandle(device,
39678ee8d1cSJulian Grajkowski service,
39778ee8d1cSJulian Grajkowski numSymConcurrentReq,
39878ee8d1cSJulian Grajkowski section);
39978ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
40078ee8d1cSJulian Grajkowski
40178ee8d1cSJulian Grajkowski /* Allocates memory pools */
40278ee8d1cSJulian Grajkowski
40378ee8d1cSJulian Grajkowski /* Create and initialise symmetric cookie memory pool */
40478ee8d1cSJulian Grajkowski pCryptoService->lac_sym_cookie_pool = LAC_MEM_POOL_INIT_POOL_ID;
40578ee8d1cSJulian Grajkowski status =
40678ee8d1cSJulian Grajkowski Sal_StringParsing("Cy",
40778ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.instance,
40878ee8d1cSJulian Grajkowski "SymPool",
40978ee8d1cSJulian Grajkowski temp_string);
41078ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
41178ee8d1cSJulian Grajkowski /* Note we need twice (i.e. <<1) the number of sym cookies to
41278ee8d1cSJulian Grajkowski support sym ring pairs (and some, for partials) */
41378ee8d1cSJulian Grajkowski status =
41478ee8d1cSJulian Grajkowski Lac_MemPoolCreate(&pCryptoService->lac_sym_cookie_pool,
41578ee8d1cSJulian Grajkowski temp_string,
41678ee8d1cSJulian Grajkowski ((numSymConcurrentReq + numSymConcurrentReq + 1)
41778ee8d1cSJulian Grajkowski << 1),
41878ee8d1cSJulian Grajkowski sizeof(lac_sym_cookie_t),
41978ee8d1cSJulian Grajkowski LAC_64BYTE_ALIGNMENT,
42078ee8d1cSJulian Grajkowski CPA_FALSE,
42178ee8d1cSJulian Grajkowski pCryptoService->nodeAffinity);
42278ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
42378ee8d1cSJulian Grajkowski /* For all sym cookies fill out the physical address of data that
42478ee8d1cSJulian Grajkowski will be set to QAT */
42578ee8d1cSJulian Grajkowski Lac_MemPoolInitSymCookiesPhyAddr(pCryptoService->lac_sym_cookie_pool);
42678ee8d1cSJulian Grajkowski
42778ee8d1cSJulian Grajkowski /* Clear stats */
42878ee8d1cSJulian Grajkowski /* Clears Key stats and allocate memory of SSL and TLS labels
42978ee8d1cSJulian Grajkowski These labels are initialised to standard values */
43078ee8d1cSJulian Grajkowski status = LacSymKey_Init(pCryptoService);
43178ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
43278ee8d1cSJulian Grajkowski
43378ee8d1cSJulian Grajkowski /* Initialises the hash lookup table*/
43478ee8d1cSJulian Grajkowski status = LacSymQat_Init(pCryptoService);
43578ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
43678ee8d1cSJulian Grajkowski
43778ee8d1cSJulian Grajkowski /* Fills out content descriptor for precomputes and registers the
43878ee8d1cSJulian Grajkowski hash precompute callback */
43978ee8d1cSJulian Grajkowski status = LacSymHash_HmacPrecompInit(pCryptoService);
44078ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
44178ee8d1cSJulian Grajkowski
44278ee8d1cSJulian Grajkowski /* Init the Sym stats */
44378ee8d1cSJulian Grajkowski status = LacSym_StatsInit(pCryptoService);
44478ee8d1cSJulian Grajkowski LAC_CHECK_STATUS_SYM_INIT(status);
44578ee8d1cSJulian Grajkowski
44678ee8d1cSJulian Grajkowski return status;
44778ee8d1cSJulian Grajkowski }
44878ee8d1cSJulian Grajkowski
44978ee8d1cSJulian Grajkowski static void
SalCtrl_DebugShutdown(icp_accel_dev_t * device,sal_service_t * service)45078ee8d1cSJulian Grajkowski SalCtrl_DebugShutdown(icp_accel_dev_t *device, sal_service_t *service)
45178ee8d1cSJulian Grajkowski {
45278ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
45378ee8d1cSJulian Grajkowski sal_statistics_collection_t *pStatsCollection =
45478ee8d1cSJulian Grajkowski (sal_statistics_collection_t *)device->pQatStats;
45578ee8d1cSJulian Grajkowski
45678ee8d1cSJulian Grajkowski if (CPA_TRUE == pStatsCollection->bStatsEnabled) {
45778ee8d1cSJulian Grajkowski /* Clean stats */
45878ee8d1cSJulian Grajkowski if (NULL != pCryptoService->debug_file) {
45978ee8d1cSJulian Grajkowski icp_adf_debugRemoveFile(pCryptoService->debug_file);
46078ee8d1cSJulian Grajkowski LAC_OS_FREE(pCryptoService->debug_file->name);
46178ee8d1cSJulian Grajkowski LAC_OS_FREE(pCryptoService->debug_file);
46278ee8d1cSJulian Grajkowski pCryptoService->debug_file = NULL;
46378ee8d1cSJulian Grajkowski }
46478ee8d1cSJulian Grajkowski }
46578ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.stats = NULL;
46678ee8d1cSJulian Grajkowski }
46778ee8d1cSJulian Grajkowski
46878ee8d1cSJulian Grajkowski static CpaStatus
SalCtrl_DebugInit(icp_accel_dev_t * device,sal_service_t * service)46978ee8d1cSJulian Grajkowski SalCtrl_DebugInit(icp_accel_dev_t *device, sal_service_t *service)
47078ee8d1cSJulian Grajkowski {
47178ee8d1cSJulian Grajkowski char adfGetParam[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
47278ee8d1cSJulian Grajkowski char temp_string[SAL_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
47378ee8d1cSJulian Grajkowski char *instance_name = NULL;
47478ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
47578ee8d1cSJulian Grajkowski sal_statistics_collection_t *pStatsCollection =
47678ee8d1cSJulian Grajkowski (sal_statistics_collection_t *)device->pQatStats;
47778ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
47878ee8d1cSJulian Grajkowski char *section = DYN_SEC;
47978ee8d1cSJulian Grajkowski
48078ee8d1cSJulian Grajkowski /*Instance may not in the DYN section*/
48178ee8d1cSJulian Grajkowski if (CPA_FALSE == pCryptoService->generic_service_info.is_dyn) {
48278ee8d1cSJulian Grajkowski section = icpGetProcessName();
48378ee8d1cSJulian Grajkowski }
48478ee8d1cSJulian Grajkowski
48578ee8d1cSJulian Grajkowski if (CPA_TRUE == pStatsCollection->bStatsEnabled) {
48678ee8d1cSJulian Grajkowski /* Get instance name for stats */
48778ee8d1cSJulian Grajkowski instance_name = LAC_OS_MALLOC(ADF_CFG_MAX_VAL_LEN_IN_BYTES);
48878ee8d1cSJulian Grajkowski if (NULL == instance_name) {
48978ee8d1cSJulian Grajkowski return CPA_STATUS_RESOURCE;
49078ee8d1cSJulian Grajkowski }
49178ee8d1cSJulian Grajkowski
49278ee8d1cSJulian Grajkowski status = Sal_StringParsing(
49378ee8d1cSJulian Grajkowski "Cy",
49478ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.instance,
49578ee8d1cSJulian Grajkowski "Name",
49678ee8d1cSJulian Grajkowski temp_string);
49778ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
49878ee8d1cSJulian Grajkowski LAC_OS_FREE(instance_name);
49978ee8d1cSJulian Grajkowski return status;
50078ee8d1cSJulian Grajkowski }
50178ee8d1cSJulian Grajkowski status = icp_adf_cfgGetParamValue(device,
50278ee8d1cSJulian Grajkowski section,
50378ee8d1cSJulian Grajkowski temp_string,
50478ee8d1cSJulian Grajkowski adfGetParam);
50578ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
50678ee8d1cSJulian Grajkowski QAT_UTILS_LOG(
50778ee8d1cSJulian Grajkowski "Failed to get %s from configuration file\n",
50878ee8d1cSJulian Grajkowski temp_string);
50978ee8d1cSJulian Grajkowski LAC_OS_FREE(instance_name);
51078ee8d1cSJulian Grajkowski return status;
51178ee8d1cSJulian Grajkowski }
51278ee8d1cSJulian Grajkowski snprintf(instance_name,
51378ee8d1cSJulian Grajkowski ADF_CFG_MAX_VAL_LEN_IN_BYTES,
51478ee8d1cSJulian Grajkowski "%s",
51578ee8d1cSJulian Grajkowski adfGetParam);
51678ee8d1cSJulian Grajkowski
51778ee8d1cSJulian Grajkowski pCryptoService->debug_file =
51878ee8d1cSJulian Grajkowski LAC_OS_MALLOC(sizeof(debug_file_info_t));
51978ee8d1cSJulian Grajkowski if (NULL == pCryptoService->debug_file) {
52078ee8d1cSJulian Grajkowski LAC_OS_FREE(instance_name);
52178ee8d1cSJulian Grajkowski return CPA_STATUS_RESOURCE;
52278ee8d1cSJulian Grajkowski }
52378ee8d1cSJulian Grajkowski
52478ee8d1cSJulian Grajkowski memset(pCryptoService->debug_file,
52578ee8d1cSJulian Grajkowski 0,
52678ee8d1cSJulian Grajkowski sizeof(debug_file_info_t));
52778ee8d1cSJulian Grajkowski pCryptoService->debug_file->name = instance_name;
52878ee8d1cSJulian Grajkowski pCryptoService->debug_file->seq_read = SalCtrl_CryptoDebug;
52978ee8d1cSJulian Grajkowski pCryptoService->debug_file->private_data = pCryptoService;
53078ee8d1cSJulian Grajkowski pCryptoService->debug_file->parent =
53178ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.debug_parent_dir;
53278ee8d1cSJulian Grajkowski
53378ee8d1cSJulian Grajkowski status =
53478ee8d1cSJulian Grajkowski icp_adf_debugAddFile(device, pCryptoService->debug_file);
53578ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
53678ee8d1cSJulian Grajkowski LAC_OS_FREE(instance_name);
53778ee8d1cSJulian Grajkowski LAC_OS_FREE(pCryptoService->debug_file);
53878ee8d1cSJulian Grajkowski return status;
53978ee8d1cSJulian Grajkowski }
54078ee8d1cSJulian Grajkowski }
54178ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.stats = pStatsCollection;
54278ee8d1cSJulian Grajkowski
54378ee8d1cSJulian Grajkowski return status;
54478ee8d1cSJulian Grajkowski }
54578ee8d1cSJulian Grajkowski
54678ee8d1cSJulian Grajkowski static CpaStatus
SalCtrl_GetBankNum(icp_accel_dev_t * device,Cpa32U inst,char * section,char * bank_name,Cpa16U * bank)547a977168cSMichal Gulbicki SalCtrl_GetBankNum(icp_accel_dev_t *device,
548a977168cSMichal Gulbicki Cpa32U inst,
549a977168cSMichal Gulbicki char *section,
550a977168cSMichal Gulbicki char *bank_name,
551a977168cSMichal Gulbicki Cpa16U *bank)
552a977168cSMichal Gulbicki {
553a977168cSMichal Gulbicki char adfParamValue[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
554a977168cSMichal Gulbicki char adfParamName[SAL_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
555a977168cSMichal Gulbicki CpaStatus status = CPA_STATUS_SUCCESS;
556a977168cSMichal Gulbicki
557a977168cSMichal Gulbicki status = Sal_StringParsing("Cy", inst, bank_name, adfParamName);
558a977168cSMichal Gulbicki LAC_CHECK_STATUS(status);
559a977168cSMichal Gulbicki status = icp_adf_cfgGetParamValue(device,
560a977168cSMichal Gulbicki section,
561a977168cSMichal Gulbicki adfParamName,
562a977168cSMichal Gulbicki adfParamValue);
563a977168cSMichal Gulbicki if (CPA_STATUS_SUCCESS != status) {
564a977168cSMichal Gulbicki QAT_UTILS_LOG("Failed to get %s from configuration file\n",
565a977168cSMichal Gulbicki adfParamName);
566a977168cSMichal Gulbicki return status;
567a977168cSMichal Gulbicki }
568a977168cSMichal Gulbicki *bank = (Cpa16U)Sal_Strtoul(adfParamValue, NULL, SAL_CFG_BASE_DEC);
569a977168cSMichal Gulbicki return status;
570a977168cSMichal Gulbicki }
571a977168cSMichal Gulbicki
572a977168cSMichal Gulbicki static CpaStatus
SalCtr_InstInit(icp_accel_dev_t * device,sal_service_t * service)57378ee8d1cSJulian Grajkowski SalCtr_InstInit(icp_accel_dev_t *device, sal_service_t *service)
57478ee8d1cSJulian Grajkowski {
57578ee8d1cSJulian Grajkowski char adfGetParam[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
57678ee8d1cSJulian Grajkowski char temp_string[SAL_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
57778ee8d1cSJulian Grajkowski char temp_string2[SAL_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
57878ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
57978ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
58078ee8d1cSJulian Grajkowski char *section = DYN_SEC;
58178ee8d1cSJulian Grajkowski
58278ee8d1cSJulian Grajkowski /*Instance may not in the DYN section*/
58378ee8d1cSJulian Grajkowski if (CPA_FALSE == pCryptoService->generic_service_info.is_dyn) {
58478ee8d1cSJulian Grajkowski section = icpGetProcessName();
58578ee8d1cSJulian Grajkowski }
58678ee8d1cSJulian Grajkowski
58778ee8d1cSJulian Grajkowski /* Get Config Info: Accel Num, bank Num, packageID,
58878ee8d1cSJulian Grajkowski coreAffinity, nodeAffinity and response mode */
58978ee8d1cSJulian Grajkowski
59078ee8d1cSJulian Grajkowski pCryptoService->acceleratorNum = 0;
59178ee8d1cSJulian Grajkowski
592a977168cSMichal Gulbicki /* Gen4, a bank only has 2 rings (1 ring pair), only one type of service
593a977168cSMichal Gulbicki can be assigned one time. asym and sym will be in different bank*/
594a977168cSMichal Gulbicki if (isCyGen4x(pCryptoService)) {
595a977168cSMichal Gulbicki switch (service->type) {
596a977168cSMichal Gulbicki case SAL_SERVICE_TYPE_CRYPTO_ASYM:
597a977168cSMichal Gulbicki status = SalCtrl_GetBankNum(
598a977168cSMichal Gulbicki device,
59978ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.instance,
600a977168cSMichal Gulbicki section,
601a977168cSMichal Gulbicki "BankNumberAsym",
602a977168cSMichal Gulbicki &pCryptoService->bankNumAsym);
603a977168cSMichal Gulbicki if (CPA_STATUS_SUCCESS != status)
60478ee8d1cSJulian Grajkowski return status;
605a977168cSMichal Gulbicki break;
606a977168cSMichal Gulbicki case SAL_SERVICE_TYPE_CRYPTO_SYM:
607a977168cSMichal Gulbicki status = SalCtrl_GetBankNum(
608a977168cSMichal Gulbicki device,
609a977168cSMichal Gulbicki pCryptoService->generic_service_info.instance,
610a977168cSMichal Gulbicki section,
611a977168cSMichal Gulbicki "BankNumberSym",
612a977168cSMichal Gulbicki &pCryptoService->bankNumSym);
613a977168cSMichal Gulbicki if (CPA_STATUS_SUCCESS != status)
614a977168cSMichal Gulbicki return status;
615a977168cSMichal Gulbicki break;
616a977168cSMichal Gulbicki case SAL_SERVICE_TYPE_CRYPTO:
617a977168cSMichal Gulbicki status = SalCtrl_GetBankNum(
618a977168cSMichal Gulbicki device,
619a977168cSMichal Gulbicki pCryptoService->generic_service_info.instance,
620a977168cSMichal Gulbicki section,
621a977168cSMichal Gulbicki "BankNumberAsym",
622a977168cSMichal Gulbicki &pCryptoService->bankNumAsym);
623a977168cSMichal Gulbicki if (CPA_STATUS_SUCCESS != status)
624a977168cSMichal Gulbicki return status;
625a977168cSMichal Gulbicki status = SalCtrl_GetBankNum(
626a977168cSMichal Gulbicki device,
627a977168cSMichal Gulbicki pCryptoService->generic_service_info.instance,
628a977168cSMichal Gulbicki section,
629a977168cSMichal Gulbicki "BankNumberSym",
630a977168cSMichal Gulbicki &pCryptoService->bankNumSym);
631a977168cSMichal Gulbicki if (CPA_STATUS_SUCCESS != status)
632a977168cSMichal Gulbicki return status;
633a977168cSMichal Gulbicki break;
634a977168cSMichal Gulbicki default:
635a977168cSMichal Gulbicki return CPA_STATUS_FAIL;
63678ee8d1cSJulian Grajkowski }
637a977168cSMichal Gulbicki } else {
638a977168cSMichal Gulbicki status = SalCtrl_GetBankNum(
639a977168cSMichal Gulbicki device,
640a977168cSMichal Gulbicki pCryptoService->generic_service_info.instance,
641a977168cSMichal Gulbicki section,
642a977168cSMichal Gulbicki "BankNumber",
643a977168cSMichal Gulbicki &pCryptoService->bankNumSym);
644a977168cSMichal Gulbicki if (CPA_STATUS_SUCCESS != status)
645a977168cSMichal Gulbicki return status;
646a977168cSMichal Gulbicki pCryptoService->bankNumAsym = pCryptoService->bankNumSym;
647a977168cSMichal Gulbicki }
64878ee8d1cSJulian Grajkowski
64978ee8d1cSJulian Grajkowski status =
65078ee8d1cSJulian Grajkowski Sal_StringParsing("Cy",
65178ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.instance,
65278ee8d1cSJulian Grajkowski "IsPolled",
65378ee8d1cSJulian Grajkowski temp_string);
65478ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
65578ee8d1cSJulian Grajkowski status =
65678ee8d1cSJulian Grajkowski icp_adf_cfgGetParamValue(device, section, temp_string, adfGetParam);
65778ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
65878ee8d1cSJulian Grajkowski QAT_UTILS_LOG("Failed to get %s from configuration file\n",
65978ee8d1cSJulian Grajkowski temp_string);
66078ee8d1cSJulian Grajkowski return status;
66178ee8d1cSJulian Grajkowski }
66278ee8d1cSJulian Grajkowski pCryptoService->isPolled =
66378ee8d1cSJulian Grajkowski (Cpa8U)Sal_Strtoul(adfGetParam, NULL, SAL_CFG_BASE_DEC);
66478ee8d1cSJulian Grajkowski
66578ee8d1cSJulian Grajkowski /* Kernel instances do not support epoll mode */
66678ee8d1cSJulian Grajkowski if (SAL_RESP_EPOLL_CFG_FILE == pCryptoService->isPolled) {
66778ee8d1cSJulian Grajkowski QAT_UTILS_LOG(
66878ee8d1cSJulian Grajkowski "IsPolled %u is not supported for kernel instance %s",
66978ee8d1cSJulian Grajkowski pCryptoService->isPolled,
67078ee8d1cSJulian Grajkowski temp_string);
67178ee8d1cSJulian Grajkowski return CPA_STATUS_FAIL;
67278ee8d1cSJulian Grajkowski }
67378ee8d1cSJulian Grajkowski
67478ee8d1cSJulian Grajkowski status = icp_adf_cfgGetParamValue(device,
67578ee8d1cSJulian Grajkowski LAC_CFG_SECTION_GENERAL,
67678ee8d1cSJulian Grajkowski ADF_DEV_PKG_ID,
67778ee8d1cSJulian Grajkowski adfGetParam);
67878ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
67978ee8d1cSJulian Grajkowski QAT_UTILS_LOG("Failed to get %s from configuration file\n",
68078ee8d1cSJulian Grajkowski ADF_DEV_PKG_ID);
68178ee8d1cSJulian Grajkowski return status;
68278ee8d1cSJulian Grajkowski }
68378ee8d1cSJulian Grajkowski pCryptoService->pkgID =
68478ee8d1cSJulian Grajkowski (Cpa16U)Sal_Strtoul(adfGetParam, NULL, SAL_CFG_BASE_DEC);
68578ee8d1cSJulian Grajkowski
68678ee8d1cSJulian Grajkowski status = icp_adf_cfgGetParamValue(device,
68778ee8d1cSJulian Grajkowski LAC_CFG_SECTION_GENERAL,
68878ee8d1cSJulian Grajkowski ADF_DEV_NODE_ID,
68978ee8d1cSJulian Grajkowski adfGetParam);
69078ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
69178ee8d1cSJulian Grajkowski QAT_UTILS_LOG("Failed to get %s from configuration file\n",
69278ee8d1cSJulian Grajkowski ADF_DEV_NODE_ID);
69378ee8d1cSJulian Grajkowski return status;
69478ee8d1cSJulian Grajkowski }
69578ee8d1cSJulian Grajkowski pCryptoService->nodeAffinity =
69678ee8d1cSJulian Grajkowski (Cpa32U)Sal_Strtoul(adfGetParam, NULL, SAL_CFG_BASE_DEC);
69778ee8d1cSJulian Grajkowski /* In case of interrupt instance, use the bank affinity set by adf_ctl
69878ee8d1cSJulian Grajkowski * Otherwise, use the instance affinity for backwards compatibility */
69978ee8d1cSJulian Grajkowski if (SAL_RESP_POLL_CFG_FILE != pCryptoService->isPolled) {
70078ee8d1cSJulian Grajkowski /* Next need to read the [AcceleratorX] section of the config
70178ee8d1cSJulian Grajkowski * file */
70278ee8d1cSJulian Grajkowski status = Sal_StringParsing("Accelerator",
70378ee8d1cSJulian Grajkowski pCryptoService->acceleratorNum,
70478ee8d1cSJulian Grajkowski "",
70578ee8d1cSJulian Grajkowski temp_string2);
70678ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
707a977168cSMichal Gulbicki if (service->type == SAL_SERVICE_TYPE_CRYPTO_ASYM)
70878ee8d1cSJulian Grajkowski status = Sal_StringParsing("Bank",
709a977168cSMichal Gulbicki pCryptoService->bankNumAsym,
710a977168cSMichal Gulbicki "CoreAffinity",
711a977168cSMichal Gulbicki temp_string);
712a977168cSMichal Gulbicki else
713a977168cSMichal Gulbicki /* For cy service, asym bank and sym bank will set the
714a977168cSMichal Gulbicki same core affinity. So Just read one*/
715a977168cSMichal Gulbicki status = Sal_StringParsing("Bank",
716a977168cSMichal Gulbicki pCryptoService->bankNumSym,
71778ee8d1cSJulian Grajkowski "CoreAffinity",
71878ee8d1cSJulian Grajkowski temp_string);
71978ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
72078ee8d1cSJulian Grajkowski } else {
72178ee8d1cSJulian Grajkowski strncpy(temp_string2, section, (strlen(section) + 1));
72278ee8d1cSJulian Grajkowski status = Sal_StringParsing(
72378ee8d1cSJulian Grajkowski "Cy",
72478ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.instance,
72578ee8d1cSJulian Grajkowski "CoreAffinity",
72678ee8d1cSJulian Grajkowski temp_string);
72778ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
72878ee8d1cSJulian Grajkowski }
72978ee8d1cSJulian Grajkowski
73078ee8d1cSJulian Grajkowski status = icp_adf_cfgGetParamValue(device,
73178ee8d1cSJulian Grajkowski temp_string2,
73278ee8d1cSJulian Grajkowski temp_string,
73378ee8d1cSJulian Grajkowski adfGetParam);
73478ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
73578ee8d1cSJulian Grajkowski QAT_UTILS_LOG("Failed to get %s from configuration file\n",
73678ee8d1cSJulian Grajkowski temp_string);
73778ee8d1cSJulian Grajkowski return status;
73878ee8d1cSJulian Grajkowski }
73978ee8d1cSJulian Grajkowski pCryptoService->coreAffinity =
74078ee8d1cSJulian Grajkowski (Cpa32U)Sal_Strtoul(adfGetParam, NULL, SAL_CFG_BASE_DEC);
74178ee8d1cSJulian Grajkowski
74278ee8d1cSJulian Grajkowski /*No Execution Engine in DH895xcc, so make sure it is zero*/
74378ee8d1cSJulian Grajkowski pCryptoService->executionEngine = 0;
74478ee8d1cSJulian Grajkowski
74578ee8d1cSJulian Grajkowski return status;
74678ee8d1cSJulian Grajkowski }
74778ee8d1cSJulian Grajkowski
74878ee8d1cSJulian Grajkowski /* This function:
74978ee8d1cSJulian Grajkowski * 1. Creates sym and asym transport handles
75078ee8d1cSJulian Grajkowski * 2. Allocates memory pools required by sym and asym services
75178ee8d1cSJulian Grajkowski .* 3. Clears the sym and asym stats counters
75278ee8d1cSJulian Grajkowski * 4. In case service asym or sym is enabled then this function
75378ee8d1cSJulian Grajkowski * only allocates resources for these services. i.e if the
75478ee8d1cSJulian Grajkowski * service asym is enabled then only asym transport handles
75578ee8d1cSJulian Grajkowski * are created and vice versa.
75678ee8d1cSJulian Grajkowski */
75778ee8d1cSJulian Grajkowski CpaStatus
SalCtrl_CryptoInit(icp_accel_dev_t * device,sal_service_t * service)75878ee8d1cSJulian Grajkowski SalCtrl_CryptoInit(icp_accel_dev_t *device, sal_service_t *service)
75978ee8d1cSJulian Grajkowski {
76078ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
76178ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
76278ee8d1cSJulian Grajkowski sal_service_type_t svc_type = service->type;
76378ee8d1cSJulian Grajkowski
76478ee8d1cSJulian Grajkowski SAL_SERVICE_GOOD_FOR_INIT(pCryptoService);
76578ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state =
76678ee8d1cSJulian Grajkowski SAL_SERVICE_STATE_INITIALIZING;
76778ee8d1cSJulian Grajkowski
76878ee8d1cSJulian Grajkowski /* Set up the instance parameters such as bank number,
76978ee8d1cSJulian Grajkowski * coreAffinity, pkgId and node affinity etc
77078ee8d1cSJulian Grajkowski */
77178ee8d1cSJulian Grajkowski status = SalCtr_InstInit(device, service);
77278ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
77378ee8d1cSJulian Grajkowski /* Create debug directory for service */
77478ee8d1cSJulian Grajkowski status = SalCtrl_DebugInit(device, service);
77578ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
77678ee8d1cSJulian Grajkowski
77778ee8d1cSJulian Grajkowski switch (svc_type) {
77878ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_ASYM:
77978ee8d1cSJulian Grajkowski break;
78078ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_SYM:
78178ee8d1cSJulian Grajkowski status = SalCtrl_SymInit(device, service);
78278ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
78378ee8d1cSJulian Grajkowski SalCtrl_DebugShutdown(device, service);
78478ee8d1cSJulian Grajkowski return status;
78578ee8d1cSJulian Grajkowski }
78678ee8d1cSJulian Grajkowski break;
78778ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO:
78878ee8d1cSJulian Grajkowski status = SalCtrl_SymInit(device, service);
78978ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
79078ee8d1cSJulian Grajkowski SalCtrl_DebugShutdown(device, service);
79178ee8d1cSJulian Grajkowski return status;
79278ee8d1cSJulian Grajkowski }
79378ee8d1cSJulian Grajkowski break;
79478ee8d1cSJulian Grajkowski default:
79578ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Invalid service type\n");
79678ee8d1cSJulian Grajkowski status = CPA_STATUS_FAIL;
79778ee8d1cSJulian Grajkowski break;
79878ee8d1cSJulian Grajkowski }
79978ee8d1cSJulian Grajkowski
80078ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state =
80178ee8d1cSJulian Grajkowski SAL_SERVICE_STATE_INITIALIZED;
80278ee8d1cSJulian Grajkowski
80378ee8d1cSJulian Grajkowski return status;
80478ee8d1cSJulian Grajkowski }
80578ee8d1cSJulian Grajkowski
80678ee8d1cSJulian Grajkowski CpaStatus
SalCtrl_CryptoStart(icp_accel_dev_t * device,sal_service_t * service)80778ee8d1cSJulian Grajkowski SalCtrl_CryptoStart(icp_accel_dev_t *device, sal_service_t *service)
80878ee8d1cSJulian Grajkowski {
80978ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
81078ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
81178ee8d1cSJulian Grajkowski
81278ee8d1cSJulian Grajkowski if (pCryptoService->generic_service_info.state !=
81378ee8d1cSJulian Grajkowski SAL_SERVICE_STATE_INITIALIZED) {
81478ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Not in the correct state to call start\n");
81578ee8d1cSJulian Grajkowski return CPA_STATUS_FAIL;
81678ee8d1cSJulian Grajkowski }
81778ee8d1cSJulian Grajkowski
81878ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state = SAL_SERVICE_STATE_RUNNING;
81978ee8d1cSJulian Grajkowski return status;
82078ee8d1cSJulian Grajkowski }
82178ee8d1cSJulian Grajkowski
82278ee8d1cSJulian Grajkowski CpaStatus
SalCtrl_CryptoStop(icp_accel_dev_t * device,sal_service_t * service)82378ee8d1cSJulian Grajkowski SalCtrl_CryptoStop(icp_accel_dev_t *device, sal_service_t *service)
82478ee8d1cSJulian Grajkowski {
82578ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
82678ee8d1cSJulian Grajkowski
82778ee8d1cSJulian Grajkowski if (SAL_SERVICE_STATE_RUNNING !=
82878ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state) {
82978ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Not in the correct state to call stop");
83078ee8d1cSJulian Grajkowski }
83178ee8d1cSJulian Grajkowski
83278ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state =
83378ee8d1cSJulian Grajkowski SAL_SERVICE_STATE_SHUTTING_DOWN;
83478ee8d1cSJulian Grajkowski return CPA_STATUS_SUCCESS;
83578ee8d1cSJulian Grajkowski }
83678ee8d1cSJulian Grajkowski
83778ee8d1cSJulian Grajkowski CpaStatus
SalCtrl_CryptoShutdown(icp_accel_dev_t * device,sal_service_t * service)83878ee8d1cSJulian Grajkowski SalCtrl_CryptoShutdown(icp_accel_dev_t *device, sal_service_t *service)
83978ee8d1cSJulian Grajkowski {
84078ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = (sal_crypto_service_t *)service;
84178ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
84278ee8d1cSJulian Grajkowski sal_service_type_t svc_type = service->type;
84378ee8d1cSJulian Grajkowski
84478ee8d1cSJulian Grajkowski if ((SAL_SERVICE_STATE_INITIALIZED !=
84578ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state) &&
84678ee8d1cSJulian Grajkowski (SAL_SERVICE_STATE_SHUTTING_DOWN !=
84778ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state)) {
84878ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Not in the correct state to call shutdown \n");
84978ee8d1cSJulian Grajkowski return CPA_STATUS_FAIL;
85078ee8d1cSJulian Grajkowski }
85178ee8d1cSJulian Grajkowski
85278ee8d1cSJulian Grajkowski /* Free memory and transhandles */
85378ee8d1cSJulian Grajkowski switch (svc_type) {
85478ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_ASYM:
85578ee8d1cSJulian Grajkowski break;
85678ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_SYM:
85778ee8d1cSJulian Grajkowski if (SalCtrl_SymFreeResources(pCryptoService)) {
85878ee8d1cSJulian Grajkowski status = CPA_STATUS_FAIL;
85978ee8d1cSJulian Grajkowski }
86078ee8d1cSJulian Grajkowski break;
86178ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO:
86278ee8d1cSJulian Grajkowski if (SalCtrl_SymFreeResources(pCryptoService)) {
86378ee8d1cSJulian Grajkowski status = CPA_STATUS_FAIL;
86478ee8d1cSJulian Grajkowski }
86578ee8d1cSJulian Grajkowski break;
86678ee8d1cSJulian Grajkowski default:
86778ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Invalid service type\n");
86878ee8d1cSJulian Grajkowski status = CPA_STATUS_FAIL;
86978ee8d1cSJulian Grajkowski break;
87078ee8d1cSJulian Grajkowski }
87178ee8d1cSJulian Grajkowski
87278ee8d1cSJulian Grajkowski SalCtrl_DebugShutdown(device, service);
87378ee8d1cSJulian Grajkowski
87478ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state = SAL_SERVICE_STATE_SHUTDOWN;
87578ee8d1cSJulian Grajkowski
87678ee8d1cSJulian Grajkowski return status;
87778ee8d1cSJulian Grajkowski }
87878ee8d1cSJulian Grajkowski
87978ee8d1cSJulian Grajkowski /**
88078ee8d1cSJulian Grajkowski ******************************************************************************
88178ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
88278ee8d1cSJulian Grajkowski *****************************************************************************/
88378ee8d1cSJulian Grajkowski CpaStatus
cpaCyGetStatusText(const CpaInstanceHandle instanceHandle,CpaStatus errStatus,Cpa8S * pStatusText)88478ee8d1cSJulian Grajkowski cpaCyGetStatusText(const CpaInstanceHandle instanceHandle,
88578ee8d1cSJulian Grajkowski CpaStatus errStatus,
88678ee8d1cSJulian Grajkowski Cpa8S *pStatusText)
88778ee8d1cSJulian Grajkowski {
88878ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
88978ee8d1cSJulian Grajkowski
89078ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(pStatusText);
89178ee8d1cSJulian Grajkowski
89278ee8d1cSJulian Grajkowski switch (errStatus) {
89378ee8d1cSJulian Grajkowski case CPA_STATUS_SUCCESS:
89478ee8d1cSJulian Grajkowski LAC_COPY_STRING(pStatusText, CPA_STATUS_STR_SUCCESS);
89578ee8d1cSJulian Grajkowski break;
89678ee8d1cSJulian Grajkowski case CPA_STATUS_FAIL:
89778ee8d1cSJulian Grajkowski LAC_COPY_STRING(pStatusText, CPA_STATUS_STR_FAIL);
89878ee8d1cSJulian Grajkowski break;
89978ee8d1cSJulian Grajkowski case CPA_STATUS_RETRY:
90078ee8d1cSJulian Grajkowski LAC_COPY_STRING(pStatusText, CPA_STATUS_STR_RETRY);
90178ee8d1cSJulian Grajkowski break;
90278ee8d1cSJulian Grajkowski case CPA_STATUS_RESOURCE:
90378ee8d1cSJulian Grajkowski LAC_COPY_STRING(pStatusText, CPA_STATUS_STR_RESOURCE);
90478ee8d1cSJulian Grajkowski break;
90578ee8d1cSJulian Grajkowski case CPA_STATUS_INVALID_PARAM:
90678ee8d1cSJulian Grajkowski LAC_COPY_STRING(pStatusText, CPA_STATUS_STR_INVALID_PARAM);
90778ee8d1cSJulian Grajkowski break;
90878ee8d1cSJulian Grajkowski case CPA_STATUS_FATAL:
90978ee8d1cSJulian Grajkowski LAC_COPY_STRING(pStatusText, CPA_STATUS_STR_FATAL);
91078ee8d1cSJulian Grajkowski break;
911a977168cSMichal Gulbicki case CPA_STATUS_UNSUPPORTED:
912a977168cSMichal Gulbicki LAC_COPY_STRING(pStatusText, CPA_STATUS_STR_UNSUPPORTED);
913a977168cSMichal Gulbicki break;
91478ee8d1cSJulian Grajkowski default:
91578ee8d1cSJulian Grajkowski status = CPA_STATUS_INVALID_PARAM;
91678ee8d1cSJulian Grajkowski break;
91778ee8d1cSJulian Grajkowski }
91878ee8d1cSJulian Grajkowski return status;
91978ee8d1cSJulian Grajkowski }
92078ee8d1cSJulian Grajkowski
92178ee8d1cSJulian Grajkowski void
SalCtrl_CyQueryCapabilities(sal_service_t * pGenericService,CpaCyCapabilitiesInfo * pCapInfo)92278ee8d1cSJulian Grajkowski SalCtrl_CyQueryCapabilities(sal_service_t *pGenericService,
92378ee8d1cSJulian Grajkowski CpaCyCapabilitiesInfo *pCapInfo)
92478ee8d1cSJulian Grajkowski {
92578ee8d1cSJulian Grajkowski memset(pCapInfo, 0, sizeof(CpaCyCapabilitiesInfo));
92678ee8d1cSJulian Grajkowski
92778ee8d1cSJulian Grajkowski if (SAL_SERVICE_TYPE_CRYPTO == pGenericService->type ||
92878ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_SYM == pGenericService->type) {
92978ee8d1cSJulian Grajkowski pCapInfo->symSupported = CPA_TRUE;
93078ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask &
93178ee8d1cSJulian Grajkowski ICP_ACCEL_CAPABILITIES_EXT_ALGCHAIN) {
93278ee8d1cSJulian Grajkowski pCapInfo->extAlgchainSupported = CPA_TRUE;
93378ee8d1cSJulian Grajkowski }
93478ee8d1cSJulian Grajkowski
93578ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask &
93678ee8d1cSJulian Grajkowski ICP_ACCEL_CAPABILITIES_HKDF) {
93778ee8d1cSJulian Grajkowski pCapInfo->hkdfSupported = CPA_TRUE;
93878ee8d1cSJulian Grajkowski }
93978ee8d1cSJulian Grajkowski }
94078ee8d1cSJulian Grajkowski
94178ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask &
94278ee8d1cSJulian Grajkowski ICP_ACCEL_CAPABILITIES_ECEDMONT) {
94378ee8d1cSJulian Grajkowski pCapInfo->ecEdMontSupported = CPA_TRUE;
94478ee8d1cSJulian Grajkowski }
94578ee8d1cSJulian Grajkowski
94678ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask &
94778ee8d1cSJulian Grajkowski ICP_ACCEL_CAPABILITIES_RANDOM_NUMBER) {
94878ee8d1cSJulian Grajkowski pCapInfo->nrbgSupported = CPA_TRUE;
94978ee8d1cSJulian Grajkowski }
95078ee8d1cSJulian Grajkowski
95178ee8d1cSJulian Grajkowski pCapInfo->drbgSupported = CPA_FALSE;
95278ee8d1cSJulian Grajkowski pCapInfo->randSupported = CPA_FALSE;
95378ee8d1cSJulian Grajkowski pCapInfo->nrbgSupported = CPA_FALSE;
95478ee8d1cSJulian Grajkowski }
95578ee8d1cSJulian Grajkowski
95678ee8d1cSJulian Grajkowski /**
95778ee8d1cSJulian Grajkowski ******************************************************************************
95878ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
95978ee8d1cSJulian Grajkowski *****************************************************************************/
96078ee8d1cSJulian Grajkowski CpaStatus
cpaCyStartInstance(CpaInstanceHandle instanceHandle_in)96178ee8d1cSJulian Grajkowski cpaCyStartInstance(CpaInstanceHandle instanceHandle_in)
96278ee8d1cSJulian Grajkowski {
96378ee8d1cSJulian Grajkowski CpaInstanceHandle instanceHandle = NULL;
96478ee8d1cSJulian Grajkowski /* Structure initializer is supported by C99, but it is
96578ee8d1cSJulian Grajkowski * not supported by some former Intel compilers.
96678ee8d1cSJulian Grajkowski */
96778ee8d1cSJulian Grajkowski CpaInstanceInfo2 info = { 0 };
96878ee8d1cSJulian Grajkowski icp_accel_dev_t *dev = NULL;
96978ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
97078ee8d1cSJulian Grajkowski sal_crypto_service_t *pService = NULL;
97178ee8d1cSJulian Grajkowski
97278ee8d1cSJulian Grajkowski if (CPA_INSTANCE_HANDLE_SINGLE == instanceHandle_in) {
97378ee8d1cSJulian Grajkowski instanceHandle = Lac_GetFirstHandle(SAL_SERVICE_TYPE_CRYPTO);
97478ee8d1cSJulian Grajkowski if (!instanceHandle) {
97578ee8d1cSJulian Grajkowski instanceHandle =
97678ee8d1cSJulian Grajkowski Lac_GetFirstHandle(SAL_SERVICE_TYPE_CRYPTO_SYM);
97778ee8d1cSJulian Grajkowski }
97878ee8d1cSJulian Grajkowski } else {
97978ee8d1cSJulian Grajkowski instanceHandle = instanceHandle_in;
98078ee8d1cSJulian Grajkowski }
98178ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(instanceHandle);
982a977168cSMichal Gulbicki SAL_CHECK_INSTANCE_TYPE(instanceHandle,
983a977168cSMichal Gulbicki (SAL_SERVICE_TYPE_CRYPTO |
984a977168cSMichal Gulbicki SAL_SERVICE_TYPE_CRYPTO_ASYM |
985a977168cSMichal Gulbicki SAL_SERVICE_TYPE_CRYPTO_SYM));
98678ee8d1cSJulian Grajkowski
98778ee8d1cSJulian Grajkowski pService = (sal_crypto_service_t *)instanceHandle;
98878ee8d1cSJulian Grajkowski
98978ee8d1cSJulian Grajkowski status = cpaCyInstanceGetInfo2(instanceHandle, &info);
99078ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
99178ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Can not get instance info\n");
99278ee8d1cSJulian Grajkowski return status;
99378ee8d1cSJulian Grajkowski }
99478ee8d1cSJulian Grajkowski dev = icp_adf_getAccelDevByAccelId(info.physInstId.packageId);
99578ee8d1cSJulian Grajkowski if (NULL == dev) {
99678ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Can not find device for the instance\n");
99778ee8d1cSJulian Grajkowski return CPA_STATUS_FAIL;
99878ee8d1cSJulian Grajkowski }
99978ee8d1cSJulian Grajkowski
100078ee8d1cSJulian Grajkowski pService->generic_service_info.isInstanceStarted = CPA_TRUE;
100178ee8d1cSJulian Grajkowski
100278ee8d1cSJulian Grajkowski /* Increment dev ref counter */
100378ee8d1cSJulian Grajkowski icp_qa_dev_get(dev);
100478ee8d1cSJulian Grajkowski return CPA_STATUS_SUCCESS;
100578ee8d1cSJulian Grajkowski }
100678ee8d1cSJulian Grajkowski
100778ee8d1cSJulian Grajkowski /**
100878ee8d1cSJulian Grajkowski ******************************************************************************
100978ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
101078ee8d1cSJulian Grajkowski *****************************************************************************/
101178ee8d1cSJulian Grajkowski CpaStatus
cpaCyStopInstance(CpaInstanceHandle instanceHandle_in)101278ee8d1cSJulian Grajkowski cpaCyStopInstance(CpaInstanceHandle instanceHandle_in)
101378ee8d1cSJulian Grajkowski {
101478ee8d1cSJulian Grajkowski CpaInstanceHandle instanceHandle = NULL;
101578ee8d1cSJulian Grajkowski /* Structure initializer is supported by C99, but it is
101678ee8d1cSJulian Grajkowski * not supported by some former Intel compilers.
101778ee8d1cSJulian Grajkowski */
101878ee8d1cSJulian Grajkowski CpaInstanceInfo2 info = { 0 };
101978ee8d1cSJulian Grajkowski icp_accel_dev_t *dev = NULL;
102078ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
102178ee8d1cSJulian Grajkowski sal_crypto_service_t *pService = NULL;
102278ee8d1cSJulian Grajkowski
102378ee8d1cSJulian Grajkowski if (CPA_INSTANCE_HANDLE_SINGLE == instanceHandle_in) {
102478ee8d1cSJulian Grajkowski instanceHandle = Lac_CryptoGetFirstHandle();
102578ee8d1cSJulian Grajkowski } else {
102678ee8d1cSJulian Grajkowski instanceHandle = instanceHandle_in;
102778ee8d1cSJulian Grajkowski }
102878ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(instanceHandle);
1029a977168cSMichal Gulbicki SAL_CHECK_INSTANCE_TYPE(instanceHandle,
1030a977168cSMichal Gulbicki (SAL_SERVICE_TYPE_CRYPTO |
1031a977168cSMichal Gulbicki SAL_SERVICE_TYPE_CRYPTO_ASYM |
1032a977168cSMichal Gulbicki SAL_SERVICE_TYPE_CRYPTO_SYM));
103378ee8d1cSJulian Grajkowski
103478ee8d1cSJulian Grajkowski status = cpaCyInstanceGetInfo2(instanceHandle, &info);
103578ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != status) {
103678ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Can not get instance info\n");
103778ee8d1cSJulian Grajkowski return status;
103878ee8d1cSJulian Grajkowski }
103978ee8d1cSJulian Grajkowski dev = icp_adf_getAccelDevByAccelId(info.physInstId.packageId);
104078ee8d1cSJulian Grajkowski if (NULL == dev) {
104178ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Can not find device for the instance\n");
104278ee8d1cSJulian Grajkowski return CPA_STATUS_FAIL;
104378ee8d1cSJulian Grajkowski }
104478ee8d1cSJulian Grajkowski
104578ee8d1cSJulian Grajkowski pService = (sal_crypto_service_t *)instanceHandle;
104678ee8d1cSJulian Grajkowski
104778ee8d1cSJulian Grajkowski pService->generic_service_info.isInstanceStarted = CPA_FALSE;
104878ee8d1cSJulian Grajkowski
104978ee8d1cSJulian Grajkowski /* Decrement dev ref counter */
105078ee8d1cSJulian Grajkowski icp_qa_dev_put(dev);
105178ee8d1cSJulian Grajkowski return CPA_STATUS_SUCCESS;
105278ee8d1cSJulian Grajkowski }
105378ee8d1cSJulian Grajkowski
105478ee8d1cSJulian Grajkowski /**
105578ee8d1cSJulian Grajkowski ******************************************************************************
105678ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
105778ee8d1cSJulian Grajkowski *****************************************************************************/
105878ee8d1cSJulian Grajkowski CpaStatus
cpaCyInstanceSetNotificationCb(const CpaInstanceHandle instanceHandle,const CpaCyInstanceNotificationCbFunc pInstanceNotificationCb,void * pCallbackTag)105978ee8d1cSJulian Grajkowski cpaCyInstanceSetNotificationCb(
106078ee8d1cSJulian Grajkowski const CpaInstanceHandle instanceHandle,
106178ee8d1cSJulian Grajkowski const CpaCyInstanceNotificationCbFunc pInstanceNotificationCb,
106278ee8d1cSJulian Grajkowski void *pCallbackTag)
106378ee8d1cSJulian Grajkowski {
106478ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
106578ee8d1cSJulian Grajkowski sal_service_t *gen_handle = instanceHandle;
106678ee8d1cSJulian Grajkowski
106778ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(gen_handle);
106878ee8d1cSJulian Grajkowski gen_handle->notification_cb = pInstanceNotificationCb;
106978ee8d1cSJulian Grajkowski gen_handle->cb_tag = pCallbackTag;
107078ee8d1cSJulian Grajkowski return status;
107178ee8d1cSJulian Grajkowski }
107278ee8d1cSJulian Grajkowski
107378ee8d1cSJulian Grajkowski /**
107478ee8d1cSJulian Grajkowski ******************************************************************************
107578ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
107678ee8d1cSJulian Grajkowski *****************************************************************************/
107778ee8d1cSJulian Grajkowski CpaStatus
cpaCyGetNumInstances(Cpa16U * pNumInstances)107878ee8d1cSJulian Grajkowski cpaCyGetNumInstances(Cpa16U *pNumInstances)
107978ee8d1cSJulian Grajkowski {
1080e745eee5SHareshx Sankar Raj return Lac_GetCyNumInstancesByType(CPA_ACC_SVC_TYPE_CRYPTO,
1081e745eee5SHareshx Sankar Raj pNumInstances);
108278ee8d1cSJulian Grajkowski }
108378ee8d1cSJulian Grajkowski
108478ee8d1cSJulian Grajkowski /**
108578ee8d1cSJulian Grajkowski ******************************************************************************
108678ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
108778ee8d1cSJulian Grajkowski *****************************************************************************/
108878ee8d1cSJulian Grajkowski CpaStatus
cpaCyGetInstances(Cpa16U numInstances,CpaInstanceHandle * pCyInstances)108978ee8d1cSJulian Grajkowski cpaCyGetInstances(Cpa16U numInstances, CpaInstanceHandle *pCyInstances)
109078ee8d1cSJulian Grajkowski {
1091e745eee5SHareshx Sankar Raj return Lac_GetCyInstancesByType(CPA_ACC_SVC_TYPE_CRYPTO,
1092e745eee5SHareshx Sankar Raj numInstances,
1093e745eee5SHareshx Sankar Raj pCyInstances);
109478ee8d1cSJulian Grajkowski }
109578ee8d1cSJulian Grajkowski
109678ee8d1cSJulian Grajkowski /**
109778ee8d1cSJulian Grajkowski ******************************************************************************
109878ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
109978ee8d1cSJulian Grajkowski *****************************************************************************/
110078ee8d1cSJulian Grajkowski CpaStatus
cpaCyInstanceGetInfo(const CpaInstanceHandle instanceHandle_in,struct _CpaInstanceInfo * pInstanceInfo)110178ee8d1cSJulian Grajkowski cpaCyInstanceGetInfo(const CpaInstanceHandle instanceHandle_in,
110278ee8d1cSJulian Grajkowski struct _CpaInstanceInfo *pInstanceInfo)
110378ee8d1cSJulian Grajkowski {
110478ee8d1cSJulian Grajkowski CpaInstanceHandle instanceHandle = NULL;
110578ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = NULL;
110678ee8d1cSJulian Grajkowski sal_service_t *pGenericService = NULL;
110778ee8d1cSJulian Grajkowski
110878ee8d1cSJulian Grajkowski Cpa8U name[CPA_INST_NAME_SIZE] =
110978ee8d1cSJulian Grajkowski "Intel(R) DH89XXCC instance number: %02x, type: Crypto";
111078ee8d1cSJulian Grajkowski
111178ee8d1cSJulian Grajkowski if (CPA_INSTANCE_HANDLE_SINGLE == instanceHandle_in) {
111278ee8d1cSJulian Grajkowski instanceHandle = Lac_CryptoGetFirstHandle();
111378ee8d1cSJulian Grajkowski } else {
111478ee8d1cSJulian Grajkowski instanceHandle = instanceHandle_in;
111578ee8d1cSJulian Grajkowski }
111678ee8d1cSJulian Grajkowski
111778ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(instanceHandle);
111878ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(pInstanceInfo);
111978ee8d1cSJulian Grajkowski SAL_CHECK_INSTANCE_TYPE(instanceHandle,
112078ee8d1cSJulian Grajkowski (SAL_SERVICE_TYPE_CRYPTO |
112178ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_ASYM |
112278ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_SYM));
112378ee8d1cSJulian Grajkowski
112478ee8d1cSJulian Grajkowski pCryptoService = (sal_crypto_service_t *)instanceHandle;
112578ee8d1cSJulian Grajkowski
112678ee8d1cSJulian Grajkowski pInstanceInfo->type = CPA_INSTANCE_TYPE_CRYPTO;
112778ee8d1cSJulian Grajkowski
112878ee8d1cSJulian Grajkowski /* According to cpa.h instance state is initialized and ready for use
112978ee8d1cSJulian Grajkowski * or shutdown. Therefore need to map our running state to initialised
113078ee8d1cSJulian Grajkowski * or shutdown */
113178ee8d1cSJulian Grajkowski if (SAL_SERVICE_STATE_RUNNING ==
113278ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state) {
113378ee8d1cSJulian Grajkowski pInstanceInfo->state = CPA_INSTANCE_STATE_INITIALISED;
113478ee8d1cSJulian Grajkowski } else {
113578ee8d1cSJulian Grajkowski pInstanceInfo->state = CPA_INSTANCE_STATE_SHUTDOWN;
113678ee8d1cSJulian Grajkowski }
113778ee8d1cSJulian Grajkowski
113878ee8d1cSJulian Grajkowski pGenericService = (sal_service_t *)instanceHandle;
113978ee8d1cSJulian Grajkowski snprintf((char *)pInstanceInfo->name,
114078ee8d1cSJulian Grajkowski CPA_INST_NAME_SIZE,
114178ee8d1cSJulian Grajkowski (char *)name,
114278ee8d1cSJulian Grajkowski pGenericService->instance);
114378ee8d1cSJulian Grajkowski
114478ee8d1cSJulian Grajkowski pInstanceInfo->name[CPA_INST_NAME_SIZE - 1] = '\0';
114578ee8d1cSJulian Grajkowski
114678ee8d1cSJulian Grajkowski snprintf((char *)pInstanceInfo->version,
114778ee8d1cSJulian Grajkowski CPA_INSTANCE_MAX_NAME_SIZE_IN_BYTES,
114878ee8d1cSJulian Grajkowski "%d.%d",
114978ee8d1cSJulian Grajkowski CPA_CY_API_VERSION_NUM_MAJOR,
115078ee8d1cSJulian Grajkowski CPA_CY_API_VERSION_NUM_MINOR);
115178ee8d1cSJulian Grajkowski
115278ee8d1cSJulian Grajkowski pInstanceInfo->version[CPA_INSTANCE_MAX_VERSION_SIZE_IN_BYTES - 1] =
115378ee8d1cSJulian Grajkowski '\0';
115478ee8d1cSJulian Grajkowski return CPA_STATUS_SUCCESS;
115578ee8d1cSJulian Grajkowski }
115678ee8d1cSJulian Grajkowski
115778ee8d1cSJulian Grajkowski /**
115878ee8d1cSJulian Grajkowski ******************************************************************************
115978ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
116078ee8d1cSJulian Grajkowski *****************************************************************************/
116178ee8d1cSJulian Grajkowski CpaStatus
cpaCyInstanceGetInfo2(const CpaInstanceHandle instanceHandle_in,CpaInstanceInfo2 * pInstanceInfo2)116278ee8d1cSJulian Grajkowski cpaCyInstanceGetInfo2(const CpaInstanceHandle instanceHandle_in,
116378ee8d1cSJulian Grajkowski CpaInstanceInfo2 *pInstanceInfo2)
116478ee8d1cSJulian Grajkowski {
116578ee8d1cSJulian Grajkowski CpaInstanceHandle instanceHandle = NULL;
116678ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = NULL;
116778ee8d1cSJulian Grajkowski icp_accel_dev_t *dev = NULL;
116878ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
116978ee8d1cSJulian Grajkowski char keyStr[ADF_CFG_MAX_KEY_LEN_IN_BYTES] = { 0 };
117078ee8d1cSJulian Grajkowski char valStr[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
117178ee8d1cSJulian Grajkowski char *section = DYN_SEC;
117278ee8d1cSJulian Grajkowski
117378ee8d1cSJulian Grajkowski if (CPA_INSTANCE_HANDLE_SINGLE == instanceHandle_in) {
117478ee8d1cSJulian Grajkowski instanceHandle = Lac_CryptoGetFirstHandle();
117578ee8d1cSJulian Grajkowski } else {
117678ee8d1cSJulian Grajkowski instanceHandle = instanceHandle_in;
117778ee8d1cSJulian Grajkowski }
117878ee8d1cSJulian Grajkowski
117978ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(instanceHandle);
118078ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(pInstanceInfo2);
118178ee8d1cSJulian Grajkowski SAL_CHECK_INSTANCE_TYPE(instanceHandle,
118278ee8d1cSJulian Grajkowski (SAL_SERVICE_TYPE_CRYPTO |
118378ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_ASYM |
118478ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_SYM));
118578ee8d1cSJulian Grajkowski
118678ee8d1cSJulian Grajkowski LAC_OS_BZERO(pInstanceInfo2, sizeof(CpaInstanceInfo2));
118778ee8d1cSJulian Grajkowski pInstanceInfo2->accelerationServiceType = CPA_ACC_SVC_TYPE_CRYPTO;
118878ee8d1cSJulian Grajkowski snprintf((char *)pInstanceInfo2->vendorName,
118978ee8d1cSJulian Grajkowski CPA_INST_VENDOR_NAME_SIZE,
119078ee8d1cSJulian Grajkowski "%s",
119178ee8d1cSJulian Grajkowski SAL_INFO2_VENDOR_NAME);
119278ee8d1cSJulian Grajkowski pInstanceInfo2->vendorName[CPA_INST_VENDOR_NAME_SIZE - 1] = '\0';
119378ee8d1cSJulian Grajkowski
119478ee8d1cSJulian Grajkowski snprintf((char *)pInstanceInfo2->swVersion,
119578ee8d1cSJulian Grajkowski CPA_INST_SW_VERSION_SIZE,
119678ee8d1cSJulian Grajkowski "Version %d.%d",
119778ee8d1cSJulian Grajkowski SAL_INFO2_DRIVER_SW_VERSION_MAJ_NUMBER,
119878ee8d1cSJulian Grajkowski SAL_INFO2_DRIVER_SW_VERSION_MIN_NUMBER);
119978ee8d1cSJulian Grajkowski pInstanceInfo2->swVersion[CPA_INST_SW_VERSION_SIZE - 1] = '\0';
120078ee8d1cSJulian Grajkowski
120178ee8d1cSJulian Grajkowski /* Note we can safely read the contents of the crypto service instance
120278ee8d1cSJulian Grajkowski here because icp_amgr_getAllAccelDevByCapabilities() only returns
120378ee8d1cSJulian Grajkowski devs
120478ee8d1cSJulian Grajkowski that have started */
120578ee8d1cSJulian Grajkowski pCryptoService = (sal_crypto_service_t *)instanceHandle;
120678ee8d1cSJulian Grajkowski pInstanceInfo2->physInstId.packageId = pCryptoService->pkgID;
120778ee8d1cSJulian Grajkowski pInstanceInfo2->physInstId.acceleratorId =
120878ee8d1cSJulian Grajkowski pCryptoService->acceleratorNum;
120978ee8d1cSJulian Grajkowski pInstanceInfo2->physInstId.executionEngineId =
121078ee8d1cSJulian Grajkowski pCryptoService->executionEngine;
121178ee8d1cSJulian Grajkowski pInstanceInfo2->physInstId.busAddress =
121278ee8d1cSJulian Grajkowski icp_adf_get_busAddress(pInstanceInfo2->physInstId.packageId);
121378ee8d1cSJulian Grajkowski
121478ee8d1cSJulian Grajkowski /*set coreAffinity to zero before use */
121578ee8d1cSJulian Grajkowski LAC_OS_BZERO(pInstanceInfo2->coreAffinity,
121678ee8d1cSJulian Grajkowski sizeof(pInstanceInfo2->coreAffinity));
121778ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pInstanceInfo2->coreAffinity,
121878ee8d1cSJulian Grajkowski pCryptoService->coreAffinity);
121978ee8d1cSJulian Grajkowski pInstanceInfo2->nodeAffinity = pCryptoService->nodeAffinity;
122078ee8d1cSJulian Grajkowski
122178ee8d1cSJulian Grajkowski if (SAL_SERVICE_STATE_RUNNING ==
122278ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.state) {
122378ee8d1cSJulian Grajkowski pInstanceInfo2->operState = CPA_OPER_STATE_UP;
122478ee8d1cSJulian Grajkowski } else {
122578ee8d1cSJulian Grajkowski pInstanceInfo2->operState = CPA_OPER_STATE_DOWN;
122678ee8d1cSJulian Grajkowski }
122778ee8d1cSJulian Grajkowski
122878ee8d1cSJulian Grajkowski pInstanceInfo2->requiresPhysicallyContiguousMemory = CPA_TRUE;
122978ee8d1cSJulian Grajkowski if (SAL_RESP_POLL_CFG_FILE == pCryptoService->isPolled) {
123078ee8d1cSJulian Grajkowski pInstanceInfo2->isPolled = CPA_TRUE;
123178ee8d1cSJulian Grajkowski } else {
123278ee8d1cSJulian Grajkowski pInstanceInfo2->isPolled = CPA_FALSE;
123378ee8d1cSJulian Grajkowski }
123478ee8d1cSJulian Grajkowski pInstanceInfo2->isOffloaded = CPA_TRUE;
123578ee8d1cSJulian Grajkowski
123678ee8d1cSJulian Grajkowski /* Get the instance name and part name */
123778ee8d1cSJulian Grajkowski dev = icp_adf_getAccelDevByAccelId(pCryptoService->pkgID);
1238*ded037e6SHareshx Sankar Raj if (NULL == dev ||
1239*ded037e6SHareshx Sankar Raj 0 == strnlen(dev->deviceName, ADF_DEVICE_TYPE_LENGTH + 1)) {
124078ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Can not find device for the instance\n");
124178ee8d1cSJulian Grajkowski LAC_OS_BZERO(pInstanceInfo2, sizeof(CpaInstanceInfo2));
124278ee8d1cSJulian Grajkowski return CPA_STATUS_FAIL;
124378ee8d1cSJulian Grajkowski }
124478ee8d1cSJulian Grajkowski snprintf((char *)pInstanceInfo2->partName,
124578ee8d1cSJulian Grajkowski CPA_INST_PART_NAME_SIZE,
124678ee8d1cSJulian Grajkowski SAL_INFO2_PART_NAME,
124778ee8d1cSJulian Grajkowski dev->deviceName);
124878ee8d1cSJulian Grajkowski pInstanceInfo2->partName[CPA_INST_PART_NAME_SIZE - 1] = '\0';
124978ee8d1cSJulian Grajkowski
125078ee8d1cSJulian Grajkowski status =
125178ee8d1cSJulian Grajkowski Sal_StringParsing("Cy",
125278ee8d1cSJulian Grajkowski pCryptoService->generic_service_info.instance,
125378ee8d1cSJulian Grajkowski "Name",
125478ee8d1cSJulian Grajkowski keyStr);
125578ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
125678ee8d1cSJulian Grajkowski
125778ee8d1cSJulian Grajkowski if (CPA_FALSE == pCryptoService->generic_service_info.is_dyn) {
125878ee8d1cSJulian Grajkowski section = icpGetProcessName();
125978ee8d1cSJulian Grajkowski }
126078ee8d1cSJulian Grajkowski
126178ee8d1cSJulian Grajkowski status = icp_adf_cfgGetParamValue(dev, section, keyStr, valStr);
126278ee8d1cSJulian Grajkowski LAC_CHECK_STATUS(status);
126378ee8d1cSJulian Grajkowski
126478ee8d1cSJulian Grajkowski snprintf((char *)pInstanceInfo2->instName,
126578ee8d1cSJulian Grajkowski CPA_INST_NAME_SIZE,
126678ee8d1cSJulian Grajkowski "%s",
126778ee8d1cSJulian Grajkowski valStr);
126878ee8d1cSJulian Grajkowski snprintf((char *)pInstanceInfo2->instID,
126978ee8d1cSJulian Grajkowski CPA_INST_ID_SIZE,
127078ee8d1cSJulian Grajkowski "%s_%s",
127178ee8d1cSJulian Grajkowski section,
127278ee8d1cSJulian Grajkowski valStr);
127378ee8d1cSJulian Grajkowski return CPA_STATUS_SUCCESS;
127478ee8d1cSJulian Grajkowski }
127578ee8d1cSJulian Grajkowski
127678ee8d1cSJulian Grajkowski /**
127778ee8d1cSJulian Grajkowski ******************************************************************************
127878ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
127978ee8d1cSJulian Grajkowski *****************************************************************************/
128078ee8d1cSJulian Grajkowski
128178ee8d1cSJulian Grajkowski CpaStatus
cpaCyQueryCapabilities(const CpaInstanceHandle instanceHandle_in,CpaCyCapabilitiesInfo * pCapInfo)128278ee8d1cSJulian Grajkowski cpaCyQueryCapabilities(const CpaInstanceHandle instanceHandle_in,
128378ee8d1cSJulian Grajkowski CpaCyCapabilitiesInfo *pCapInfo)
128478ee8d1cSJulian Grajkowski {
128578ee8d1cSJulian Grajkowski /* Verify Instance exists */
128678ee8d1cSJulian Grajkowski CpaInstanceHandle instanceHandle = NULL;
128778ee8d1cSJulian Grajkowski
128878ee8d1cSJulian Grajkowski if (CPA_INSTANCE_HANDLE_SINGLE == instanceHandle_in) {
128978ee8d1cSJulian Grajkowski instanceHandle = Lac_CryptoGetFirstHandle();
129078ee8d1cSJulian Grajkowski } else {
129178ee8d1cSJulian Grajkowski instanceHandle = instanceHandle_in;
129278ee8d1cSJulian Grajkowski }
129378ee8d1cSJulian Grajkowski
129478ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(instanceHandle);
129578ee8d1cSJulian Grajkowski SAL_CHECK_INSTANCE_TYPE(instanceHandle,
129678ee8d1cSJulian Grajkowski (SAL_SERVICE_TYPE_CRYPTO |
129778ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_ASYM |
129878ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_SYM));
129978ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(pCapInfo);
130078ee8d1cSJulian Grajkowski
130178ee8d1cSJulian Grajkowski SalCtrl_CyQueryCapabilities((sal_service_t *)instanceHandle, pCapInfo);
130278ee8d1cSJulian Grajkowski
130378ee8d1cSJulian Grajkowski return CPA_STATUS_SUCCESS;
130478ee8d1cSJulian Grajkowski }
130578ee8d1cSJulian Grajkowski
130678ee8d1cSJulian Grajkowski /**
130778ee8d1cSJulian Grajkowski ******************************************************************************
130878ee8d1cSJulian Grajkowski * @ingroup cpaCySym
130978ee8d1cSJulian Grajkowski *****************************************************************************/
131078ee8d1cSJulian Grajkowski CpaStatus
cpaCySymQueryCapabilities(const CpaInstanceHandle instanceHandle_in,CpaCySymCapabilitiesInfo * pCapInfo)131178ee8d1cSJulian Grajkowski cpaCySymQueryCapabilities(const CpaInstanceHandle instanceHandle_in,
131278ee8d1cSJulian Grajkowski CpaCySymCapabilitiesInfo *pCapInfo)
131378ee8d1cSJulian Grajkowski {
131478ee8d1cSJulian Grajkowski sal_crypto_service_t *pCryptoService = NULL;
131578ee8d1cSJulian Grajkowski sal_service_t *pGenericService = NULL;
131678ee8d1cSJulian Grajkowski CpaInstanceHandle instanceHandle = NULL;
131778ee8d1cSJulian Grajkowski
131878ee8d1cSJulian Grajkowski /* Verify Instance exists */
131978ee8d1cSJulian Grajkowski if (CPA_INSTANCE_HANDLE_SINGLE == instanceHandle_in) {
132078ee8d1cSJulian Grajkowski instanceHandle = Lac_GetFirstHandle(SAL_SERVICE_TYPE_CRYPTO);
132178ee8d1cSJulian Grajkowski if (!instanceHandle) {
132278ee8d1cSJulian Grajkowski instanceHandle =
132378ee8d1cSJulian Grajkowski Lac_GetFirstHandle(SAL_SERVICE_TYPE_CRYPTO_SYM);
132478ee8d1cSJulian Grajkowski }
132578ee8d1cSJulian Grajkowski } else {
132678ee8d1cSJulian Grajkowski instanceHandle = instanceHandle_in;
132778ee8d1cSJulian Grajkowski }
132878ee8d1cSJulian Grajkowski
132978ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(instanceHandle);
133078ee8d1cSJulian Grajkowski SAL_CHECK_INSTANCE_TYPE(instanceHandle,
133178ee8d1cSJulian Grajkowski (SAL_SERVICE_TYPE_CRYPTO |
133278ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_ASYM |
133378ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_SYM));
133478ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(pCapInfo);
133578ee8d1cSJulian Grajkowski
133678ee8d1cSJulian Grajkowski pCryptoService = (sal_crypto_service_t *)instanceHandle;
133778ee8d1cSJulian Grajkowski pGenericService = &(pCryptoService->generic_service_info);
133878ee8d1cSJulian Grajkowski
133978ee8d1cSJulian Grajkowski memset(pCapInfo, '\0', sizeof(CpaCySymCapabilitiesInfo));
134078ee8d1cSJulian Grajkowski /* An asym crypto instance does not support sym service */
134178ee8d1cSJulian Grajkowski if (SAL_SERVICE_TYPE_CRYPTO_ASYM == pGenericService->type) {
134278ee8d1cSJulian Grajkowski return CPA_STATUS_SUCCESS;
134378ee8d1cSJulian Grajkowski }
134478ee8d1cSJulian Grajkowski
134578ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_NULL);
134678ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_AES_ECB);
134778ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_AES_CBC);
134878ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_AES_CTR);
134978ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_AES_CCM);
135078ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_AES_GCM);
135178ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_AES_XTS);
1352a977168cSMichal Gulbicki if (isCyGen2x(pCryptoService)) {
1353a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_ARC4);
1354a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
1355a977168cSMichal Gulbicki CPA_CY_SYM_CIPHER_DES_ECB);
1356a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
1357a977168cSMichal Gulbicki CPA_CY_SYM_CIPHER_DES_CBC);
1358a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
1359a977168cSMichal Gulbicki CPA_CY_SYM_CIPHER_3DES_ECB);
1360a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
1361a977168cSMichal Gulbicki CPA_CY_SYM_CIPHER_3DES_CBC);
1362a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
1363a977168cSMichal Gulbicki CPA_CY_SYM_CIPHER_3DES_CTR);
1364a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
1365a977168cSMichal Gulbicki CPA_CY_SYM_CIPHER_KASUMI_F8);
1366a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
1367a977168cSMichal Gulbicki CPA_CY_SYM_CIPHER_SNOW3G_UEA2);
1368a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_AES_F8);
1369a977168cSMichal Gulbicki }
137078ee8d1cSJulian Grajkowski
137178ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA1);
137278ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA224);
137378ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA256);
137478ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA384);
137578ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA512);
137678ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_AES_XCBC);
137778ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_AES_CCM);
137878ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_AES_GCM);
137978ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_AES_CMAC);
138078ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_AES_GMAC);
138178ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_AES_CBC_MAC);
1382a977168cSMichal Gulbicki if (isCyGen2x(pCryptoService)) {
1383a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_MD5);
1384a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_KASUMI_F9);
1385a977168cSMichal Gulbicki CPA_BITMAP_BIT_SET(pCapInfo->hashes,
1386a977168cSMichal Gulbicki CPA_CY_SYM_HASH_SNOW3G_UIA2);
1387a977168cSMichal Gulbicki }
138878ee8d1cSJulian Grajkowski
138978ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask &
139078ee8d1cSJulian Grajkowski ICP_ACCEL_CAPABILITIES_CRYPTO_ZUC) {
139178ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
139278ee8d1cSJulian Grajkowski CPA_CY_SYM_CIPHER_ZUC_EEA3);
139378ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_ZUC_EIA3);
139478ee8d1cSJulian Grajkowski }
139578ee8d1cSJulian Grajkowski
139678ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask &
139778ee8d1cSJulian Grajkowski ICP_ACCEL_CAPABILITIES_CHACHA_POLY) {
139878ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_POLY);
139978ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers, CPA_CY_SYM_CIPHER_CHACHA);
140078ee8d1cSJulian Grajkowski }
140178ee8d1cSJulian Grajkowski
140278ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask & ICP_ACCEL_CAPABILITIES_SM3) {
140378ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SM3);
140478ee8d1cSJulian Grajkowski }
140578ee8d1cSJulian Grajkowski
140678ee8d1cSJulian Grajkowski pCapInfo->partialPacketSupported = CPA_TRUE;
140778ee8d1cSJulian Grajkowski
140878ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask & ICP_ACCEL_CAPABILITIES_SHA3) {
140978ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA3_256);
141078ee8d1cSJulian Grajkowski pCapInfo->partialPacketSupported = CPA_FALSE;
141178ee8d1cSJulian Grajkowski }
141278ee8d1cSJulian Grajkowski
141378ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask &
141478ee8d1cSJulian Grajkowski ICP_ACCEL_CAPABILITIES_SHA3_EXT) {
141578ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA3_224);
141678ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA3_256);
141778ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA3_384);
141878ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->hashes, CPA_CY_SYM_HASH_SHA3_512);
141978ee8d1cSJulian Grajkowski pCapInfo->partialPacketSupported = CPA_FALSE;
142078ee8d1cSJulian Grajkowski }
142178ee8d1cSJulian Grajkowski
142278ee8d1cSJulian Grajkowski if (pGenericService->capabilitiesMask & ICP_ACCEL_CAPABILITIES_SM4) {
142378ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
142478ee8d1cSJulian Grajkowski CPA_CY_SYM_CIPHER_SM4_ECB);
142578ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
142678ee8d1cSJulian Grajkowski CPA_CY_SYM_CIPHER_SM4_CBC);
142778ee8d1cSJulian Grajkowski CPA_BITMAP_BIT_SET(pCapInfo->ciphers,
142878ee8d1cSJulian Grajkowski CPA_CY_SYM_CIPHER_SM4_CTR);
142978ee8d1cSJulian Grajkowski pCapInfo->partialPacketSupported = CPA_FALSE;
143078ee8d1cSJulian Grajkowski }
143178ee8d1cSJulian Grajkowski
143278ee8d1cSJulian Grajkowski return CPA_STATUS_SUCCESS;
143378ee8d1cSJulian Grajkowski }
143478ee8d1cSJulian Grajkowski
143578ee8d1cSJulian Grajkowski /**
143678ee8d1cSJulian Grajkowski ******************************************************************************
143778ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
143878ee8d1cSJulian Grajkowski *****************************************************************************/
143978ee8d1cSJulian Grajkowski CpaStatus
cpaCySetAddressTranslation(const CpaInstanceHandle instanceHandle_in,CpaVirtualToPhysical virtual2physical)144078ee8d1cSJulian Grajkowski cpaCySetAddressTranslation(const CpaInstanceHandle instanceHandle_in,
144178ee8d1cSJulian Grajkowski CpaVirtualToPhysical virtual2physical)
144278ee8d1cSJulian Grajkowski {
144378ee8d1cSJulian Grajkowski
144478ee8d1cSJulian Grajkowski CpaInstanceHandle instanceHandle = NULL;
144578ee8d1cSJulian Grajkowski sal_service_t *pService = NULL;
144678ee8d1cSJulian Grajkowski
144778ee8d1cSJulian Grajkowski if (CPA_INSTANCE_HANDLE_SINGLE == instanceHandle_in) {
144878ee8d1cSJulian Grajkowski instanceHandle = Lac_CryptoGetFirstHandle();
144978ee8d1cSJulian Grajkowski } else {
145078ee8d1cSJulian Grajkowski instanceHandle = instanceHandle_in;
145178ee8d1cSJulian Grajkowski }
145278ee8d1cSJulian Grajkowski
145378ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(instanceHandle);
145478ee8d1cSJulian Grajkowski SAL_CHECK_INSTANCE_TYPE(instanceHandle,
145578ee8d1cSJulian Grajkowski (SAL_SERVICE_TYPE_CRYPTO |
145678ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_ASYM |
145778ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_SYM));
145878ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(virtual2physical);
145978ee8d1cSJulian Grajkowski
146078ee8d1cSJulian Grajkowski pService = (sal_service_t *)instanceHandle;
146178ee8d1cSJulian Grajkowski
146278ee8d1cSJulian Grajkowski pService->virt2PhysClient = virtual2physical;
146378ee8d1cSJulian Grajkowski
146478ee8d1cSJulian Grajkowski return CPA_STATUS_SUCCESS;
146578ee8d1cSJulian Grajkowski }
146678ee8d1cSJulian Grajkowski
146778ee8d1cSJulian Grajkowski /**
146878ee8d1cSJulian Grajkowski ******************************************************************************
146978ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
147078ee8d1cSJulian Grajkowski * Crypto specific polling function which polls a crypto instance.
147178ee8d1cSJulian Grajkowski *****************************************************************************/
147278ee8d1cSJulian Grajkowski CpaStatus
icp_sal_CyPollInstance(CpaInstanceHandle instanceHandle_in,Cpa32U response_quota)147378ee8d1cSJulian Grajkowski icp_sal_CyPollInstance(CpaInstanceHandle instanceHandle_in,
147478ee8d1cSJulian Grajkowski Cpa32U response_quota)
147578ee8d1cSJulian Grajkowski {
147678ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
147778ee8d1cSJulian Grajkowski sal_crypto_service_t *crypto_handle = NULL;
147878ee8d1cSJulian Grajkowski sal_service_t *gen_handle = NULL;
147978ee8d1cSJulian Grajkowski icp_comms_trans_handle trans_hndTable[MAX_CY_RX_RINGS] = { 0 };
148078ee8d1cSJulian Grajkowski Cpa32U num_rx_rings = 0;
148178ee8d1cSJulian Grajkowski
148278ee8d1cSJulian Grajkowski if (CPA_INSTANCE_HANDLE_SINGLE == instanceHandle_in) {
148378ee8d1cSJulian Grajkowski crypto_handle =
148478ee8d1cSJulian Grajkowski (sal_crypto_service_t *)Lac_CryptoGetFirstHandle();
148578ee8d1cSJulian Grajkowski } else {
148678ee8d1cSJulian Grajkowski crypto_handle = (sal_crypto_service_t *)instanceHandle_in;
148778ee8d1cSJulian Grajkowski }
148878ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(crypto_handle);
148978ee8d1cSJulian Grajkowski SAL_RUNNING_CHECK(crypto_handle);
149078ee8d1cSJulian Grajkowski SAL_CHECK_INSTANCE_TYPE(crypto_handle,
149178ee8d1cSJulian Grajkowski (SAL_SERVICE_TYPE_CRYPTO |
149278ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_ASYM |
149378ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_SYM));
149478ee8d1cSJulian Grajkowski
149578ee8d1cSJulian Grajkowski gen_handle = &(crypto_handle->generic_service_info);
149678ee8d1cSJulian Grajkowski
149778ee8d1cSJulian Grajkowski /*
149878ee8d1cSJulian Grajkowski * From the instanceHandle we must get the trans_handle and send
149978ee8d1cSJulian Grajkowski * down to adf for polling.
150078ee8d1cSJulian Grajkowski * Populate our trans handle table with the appropriate handles.
150178ee8d1cSJulian Grajkowski */
150278ee8d1cSJulian Grajkowski
150378ee8d1cSJulian Grajkowski switch (gen_handle->type) {
150478ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_ASYM:
150578ee8d1cSJulian Grajkowski trans_hndTable[TH_CY_RX_0] =
150678ee8d1cSJulian Grajkowski crypto_handle->trans_handle_asym_rx;
150778ee8d1cSJulian Grajkowski num_rx_rings = 1;
150878ee8d1cSJulian Grajkowski break;
150978ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_SYM:
151078ee8d1cSJulian Grajkowski trans_hndTable[TH_CY_RX_0] = crypto_handle->trans_handle_sym_rx;
151178ee8d1cSJulian Grajkowski num_rx_rings = 1;
151278ee8d1cSJulian Grajkowski break;
151378ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO:
151478ee8d1cSJulian Grajkowski trans_hndTable[TH_CY_RX_0] = crypto_handle->trans_handle_sym_rx;
151578ee8d1cSJulian Grajkowski trans_hndTable[TH_CY_RX_1] =
151678ee8d1cSJulian Grajkowski crypto_handle->trans_handle_asym_rx;
151778ee8d1cSJulian Grajkowski num_rx_rings = MAX_CY_RX_RINGS;
151878ee8d1cSJulian Grajkowski break;
151978ee8d1cSJulian Grajkowski default:
152078ee8d1cSJulian Grajkowski break;
152178ee8d1cSJulian Grajkowski }
152278ee8d1cSJulian Grajkowski
152378ee8d1cSJulian Grajkowski /* Call adf to do the polling. */
152478ee8d1cSJulian Grajkowski status =
152578ee8d1cSJulian Grajkowski icp_adf_pollInstance(trans_hndTable, num_rx_rings, response_quota);
152678ee8d1cSJulian Grajkowski
152778ee8d1cSJulian Grajkowski return status;
152878ee8d1cSJulian Grajkowski }
152978ee8d1cSJulian Grajkowski
153078ee8d1cSJulian Grajkowski /**
153178ee8d1cSJulian Grajkowski ******************************************************************************
153278ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
153378ee8d1cSJulian Grajkowski * Crypto specific polling function which polls sym crypto ring.
153478ee8d1cSJulian Grajkowski *****************************************************************************/
153578ee8d1cSJulian Grajkowski CpaStatus
icp_sal_CyPollSymRing(CpaInstanceHandle instanceHandle_in,Cpa32U response_quota)153678ee8d1cSJulian Grajkowski icp_sal_CyPollSymRing(CpaInstanceHandle instanceHandle_in,
153778ee8d1cSJulian Grajkowski Cpa32U response_quota)
153878ee8d1cSJulian Grajkowski {
153978ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
154078ee8d1cSJulian Grajkowski sal_crypto_service_t *crypto_handle = NULL;
154178ee8d1cSJulian Grajkowski icp_comms_trans_handle trans_hndTable[NUM_CRYPTO_SYM_RX_RINGS] = { 0 };
154278ee8d1cSJulian Grajkowski
154378ee8d1cSJulian Grajkowski if (CPA_INSTANCE_HANDLE_SINGLE == instanceHandle_in) {
154478ee8d1cSJulian Grajkowski crypto_handle = (sal_crypto_service_t *)Lac_GetFirstHandle(
154578ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_SYM);
154678ee8d1cSJulian Grajkowski } else {
154778ee8d1cSJulian Grajkowski crypto_handle = (sal_crypto_service_t *)instanceHandle_in;
154878ee8d1cSJulian Grajkowski }
154978ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(crypto_handle);
155078ee8d1cSJulian Grajkowski SAL_CHECK_INSTANCE_TYPE(crypto_handle,
155178ee8d1cSJulian Grajkowski (SAL_SERVICE_TYPE_CRYPTO |
155278ee8d1cSJulian Grajkowski SAL_SERVICE_TYPE_CRYPTO_SYM));
155378ee8d1cSJulian Grajkowski SAL_RUNNING_CHECK(crypto_handle);
155478ee8d1cSJulian Grajkowski
155578ee8d1cSJulian Grajkowski /*
155678ee8d1cSJulian Grajkowski * From the instanceHandle we must get the trans_handle and send
155778ee8d1cSJulian Grajkowski * down to adf for polling.
155878ee8d1cSJulian Grajkowski * Populate our trans handle table with the appropriate handles.
155978ee8d1cSJulian Grajkowski */
156078ee8d1cSJulian Grajkowski trans_hndTable[TH_SINGLE_RX] = crypto_handle->trans_handle_sym_rx;
156178ee8d1cSJulian Grajkowski /* Call adf to do the polling. */
156278ee8d1cSJulian Grajkowski status = icp_adf_pollInstance(trans_hndTable,
156378ee8d1cSJulian Grajkowski NUM_CRYPTO_SYM_RX_RINGS,
156478ee8d1cSJulian Grajkowski response_quota);
156578ee8d1cSJulian Grajkowski return status;
156678ee8d1cSJulian Grajkowski }
156778ee8d1cSJulian Grajkowski
156878ee8d1cSJulian Grajkowski /**
156978ee8d1cSJulian Grajkowski ******************************************************************************
157078ee8d1cSJulian Grajkowski * @ingroup cpaCyCommon
157178ee8d1cSJulian Grajkowski * Crypto specific polling function which polls an nrbg crypto ring.
157278ee8d1cSJulian Grajkowski *****************************************************************************/
157378ee8d1cSJulian Grajkowski CpaStatus
icp_sal_CyPollNRBGRing(CpaInstanceHandle instanceHandle_in,Cpa32U response_quota)157478ee8d1cSJulian Grajkowski icp_sal_CyPollNRBGRing(CpaInstanceHandle instanceHandle_in,
157578ee8d1cSJulian Grajkowski Cpa32U response_quota)
157678ee8d1cSJulian Grajkowski {
157778ee8d1cSJulian Grajkowski return CPA_STATUS_UNSUPPORTED;
157878ee8d1cSJulian Grajkowski }
157978ee8d1cSJulian Grajkowski
158078ee8d1cSJulian Grajkowski /* Returns the handle to the first asym crypto instance */
158178ee8d1cSJulian Grajkowski static CpaInstanceHandle
Lac_GetFirstAsymHandle(icp_accel_dev_t * adfInsts[ADF_MAX_DEVICES],Cpa16U num_dev)158278ee8d1cSJulian Grajkowski Lac_GetFirstAsymHandle(icp_accel_dev_t *adfInsts[ADF_MAX_DEVICES],
158378ee8d1cSJulian Grajkowski Cpa16U num_dev)
158478ee8d1cSJulian Grajkowski {
1585a977168cSMichal Gulbicki CpaStatus status = CPA_STATUS_SUCCESS;
158678ee8d1cSJulian Grajkowski icp_accel_dev_t *dev_addr = NULL;
158778ee8d1cSJulian Grajkowski sal_t *base_addr = NULL;
158878ee8d1cSJulian Grajkowski sal_list_t *list_temp = NULL;
158978ee8d1cSJulian Grajkowski CpaInstanceHandle cyInst = NULL;
1590a977168cSMichal Gulbicki CpaInstanceInfo2 info;
159178ee8d1cSJulian Grajkowski Cpa16U i = 0;
159278ee8d1cSJulian Grajkowski
159378ee8d1cSJulian Grajkowski for (i = 0; i < num_dev; i++) {
159478ee8d1cSJulian Grajkowski dev_addr = (icp_accel_dev_t *)adfInsts[i];
159578ee8d1cSJulian Grajkowski base_addr = dev_addr->pSalHandle;
1596a977168cSMichal Gulbicki if (NULL == base_addr) {
1597a977168cSMichal Gulbicki continue;
1598a977168cSMichal Gulbicki }
159978ee8d1cSJulian Grajkowski list_temp = base_addr->asym_services;
1600a977168cSMichal Gulbicki while (NULL != list_temp) {
160178ee8d1cSJulian Grajkowski cyInst = SalList_getObject(list_temp);
1602a977168cSMichal Gulbicki status = cpaCyInstanceGetInfo2(cyInst, &info);
1603a977168cSMichal Gulbicki list_temp = SalList_next(list_temp);
1604a977168cSMichal Gulbicki if (CPA_STATUS_SUCCESS != status ||
1605a977168cSMichal Gulbicki CPA_TRUE != info.isPolled) {
1606a977168cSMichal Gulbicki cyInst = NULL;
1607a977168cSMichal Gulbicki continue;
1608a977168cSMichal Gulbicki }
1609a977168cSMichal Gulbicki break;
1610a977168cSMichal Gulbicki }
1611a977168cSMichal Gulbicki if (cyInst) {
161278ee8d1cSJulian Grajkowski break;
161378ee8d1cSJulian Grajkowski }
161478ee8d1cSJulian Grajkowski }
161578ee8d1cSJulian Grajkowski
161678ee8d1cSJulian Grajkowski return cyInst;
161778ee8d1cSJulian Grajkowski }
161878ee8d1cSJulian Grajkowski
161978ee8d1cSJulian Grajkowski /* Returns the handle to the first sym crypto instance */
162078ee8d1cSJulian Grajkowski static CpaInstanceHandle
Lac_GetFirstSymHandle(icp_accel_dev_t * adfInsts[ADF_MAX_DEVICES],Cpa16U num_dev)162178ee8d1cSJulian Grajkowski Lac_GetFirstSymHandle(icp_accel_dev_t *adfInsts[ADF_MAX_DEVICES],
162278ee8d1cSJulian Grajkowski Cpa16U num_dev)
162378ee8d1cSJulian Grajkowski {
1624a977168cSMichal Gulbicki CpaStatus status = CPA_STATUS_SUCCESS;
162578ee8d1cSJulian Grajkowski icp_accel_dev_t *dev_addr = NULL;
162678ee8d1cSJulian Grajkowski sal_t *base_addr = NULL;
162778ee8d1cSJulian Grajkowski sal_list_t *list_temp = NULL;
162878ee8d1cSJulian Grajkowski CpaInstanceHandle cyInst = NULL;
1629a977168cSMichal Gulbicki CpaInstanceInfo2 info;
163078ee8d1cSJulian Grajkowski Cpa16U i = 0;
163178ee8d1cSJulian Grajkowski
163278ee8d1cSJulian Grajkowski for (i = 0; i < num_dev; i++) {
163378ee8d1cSJulian Grajkowski dev_addr = (icp_accel_dev_t *)adfInsts[i];
163478ee8d1cSJulian Grajkowski base_addr = dev_addr->pSalHandle;
1635a977168cSMichal Gulbicki if (NULL == base_addr) {
1636a977168cSMichal Gulbicki continue;
1637a977168cSMichal Gulbicki }
163878ee8d1cSJulian Grajkowski list_temp = base_addr->sym_services;
1639a977168cSMichal Gulbicki while (NULL != list_temp) {
164078ee8d1cSJulian Grajkowski cyInst = SalList_getObject(list_temp);
1641a977168cSMichal Gulbicki status = cpaCyInstanceGetInfo2(cyInst, &info);
1642a977168cSMichal Gulbicki list_temp = SalList_next(list_temp);
1643a977168cSMichal Gulbicki if (CPA_STATUS_SUCCESS != status ||
1644a977168cSMichal Gulbicki CPA_TRUE != info.isPolled) {
1645a977168cSMichal Gulbicki cyInst = NULL;
1646a977168cSMichal Gulbicki continue;
1647a977168cSMichal Gulbicki }
1648a977168cSMichal Gulbicki break;
1649a977168cSMichal Gulbicki }
1650a977168cSMichal Gulbicki if (cyInst) {
165178ee8d1cSJulian Grajkowski break;
165278ee8d1cSJulian Grajkowski }
165378ee8d1cSJulian Grajkowski }
165478ee8d1cSJulian Grajkowski
165578ee8d1cSJulian Grajkowski return cyInst;
165678ee8d1cSJulian Grajkowski }
165778ee8d1cSJulian Grajkowski
165878ee8d1cSJulian Grajkowski /* Returns the handle to the first crypto instance
165978ee8d1cSJulian Grajkowski * Note that the crypto instance in this case supports
166078ee8d1cSJulian Grajkowski * both asym and sym services */
166178ee8d1cSJulian Grajkowski static CpaInstanceHandle
Lac_GetFirstCyHandle(icp_accel_dev_t * adfInsts[ADF_MAX_DEVICES],Cpa16U num_dev)166278ee8d1cSJulian Grajkowski Lac_GetFirstCyHandle(icp_accel_dev_t *adfInsts[ADF_MAX_DEVICES], Cpa16U num_dev)
166378ee8d1cSJulian Grajkowski {
1664a977168cSMichal Gulbicki CpaStatus status = CPA_STATUS_SUCCESS;
166578ee8d1cSJulian Grajkowski icp_accel_dev_t *dev_addr = NULL;
166678ee8d1cSJulian Grajkowski sal_t *base_addr = NULL;
166778ee8d1cSJulian Grajkowski sal_list_t *list_temp = NULL;
166878ee8d1cSJulian Grajkowski CpaInstanceHandle cyInst = NULL;
1669a977168cSMichal Gulbicki CpaInstanceInfo2 info;
167078ee8d1cSJulian Grajkowski Cpa16U i = 0;
167178ee8d1cSJulian Grajkowski
167278ee8d1cSJulian Grajkowski for (i = 0; i < num_dev; i++) {
167378ee8d1cSJulian Grajkowski dev_addr = (icp_accel_dev_t *)adfInsts[i];
167478ee8d1cSJulian Grajkowski base_addr = dev_addr->pSalHandle;
1675a977168cSMichal Gulbicki if (NULL == base_addr) {
1676a977168cSMichal Gulbicki continue;
1677a977168cSMichal Gulbicki }
167878ee8d1cSJulian Grajkowski list_temp = base_addr->crypto_services;
1679a977168cSMichal Gulbicki while (NULL != list_temp) {
168078ee8d1cSJulian Grajkowski cyInst = SalList_getObject(list_temp);
1681a977168cSMichal Gulbicki status = cpaCyInstanceGetInfo2(cyInst, &info);
1682a977168cSMichal Gulbicki list_temp = SalList_next(list_temp);
1683a977168cSMichal Gulbicki if (CPA_STATUS_SUCCESS != status ||
1684a977168cSMichal Gulbicki CPA_TRUE != info.isPolled) {
1685a977168cSMichal Gulbicki cyInst = NULL;
1686a977168cSMichal Gulbicki continue;
1687a977168cSMichal Gulbicki }
1688a977168cSMichal Gulbicki break;
1689a977168cSMichal Gulbicki }
1690a977168cSMichal Gulbicki if (cyInst) {
169178ee8d1cSJulian Grajkowski break;
169278ee8d1cSJulian Grajkowski }
169378ee8d1cSJulian Grajkowski }
1694a977168cSMichal Gulbicki
169578ee8d1cSJulian Grajkowski return cyInst;
169678ee8d1cSJulian Grajkowski }
169778ee8d1cSJulian Grajkowski
169878ee8d1cSJulian Grajkowski CpaInstanceHandle
Lac_GetFirstHandle(sal_service_type_t svc_type)169978ee8d1cSJulian Grajkowski Lac_GetFirstHandle(sal_service_type_t svc_type)
170078ee8d1cSJulian Grajkowski {
170178ee8d1cSJulian Grajkowski CpaStatus status = CPA_STATUS_SUCCESS;
170278ee8d1cSJulian Grajkowski static icp_accel_dev_t *adfInsts[ADF_MAX_DEVICES] = { 0 };
170378ee8d1cSJulian Grajkowski CpaInstanceHandle cyInst = NULL;
170478ee8d1cSJulian Grajkowski Cpa16U num_cy_dev = 0;
170578ee8d1cSJulian Grajkowski Cpa32U capabilities = 0;
170678ee8d1cSJulian Grajkowski
170778ee8d1cSJulian Grajkowski switch (svc_type) {
170878ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_ASYM:
170978ee8d1cSJulian Grajkowski capabilities = ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
171078ee8d1cSJulian Grajkowski break;
171178ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_SYM:
171278ee8d1cSJulian Grajkowski capabilities = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC;
171378ee8d1cSJulian Grajkowski break;
171478ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO:
171578ee8d1cSJulian Grajkowski capabilities = ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
171678ee8d1cSJulian Grajkowski capabilities |= ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC;
171778ee8d1cSJulian Grajkowski break;
171878ee8d1cSJulian Grajkowski default:
171978ee8d1cSJulian Grajkowski LAC_LOG_ERROR("Invalid service type\n");
172078ee8d1cSJulian Grajkowski return NULL;
172178ee8d1cSJulian Grajkowski }
172278ee8d1cSJulian Grajkowski /* Only need 1 dev with crypto enabled - so check all devices*/
172378ee8d1cSJulian Grajkowski status = icp_amgr_getAllAccelDevByEachCapability(capabilities,
172478ee8d1cSJulian Grajkowski adfInsts,
172578ee8d1cSJulian Grajkowski &num_cy_dev);
172678ee8d1cSJulian Grajkowski if ((0 == num_cy_dev) || (CPA_STATUS_SUCCESS != status)) {
172778ee8d1cSJulian Grajkowski LAC_LOG_ERROR("No crypto devices enabled in the system\n");
172878ee8d1cSJulian Grajkowski return NULL;
172978ee8d1cSJulian Grajkowski }
173078ee8d1cSJulian Grajkowski
173178ee8d1cSJulian Grajkowski switch (svc_type) {
173278ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_ASYM:
173378ee8d1cSJulian Grajkowski /* Try to find an asym only instance first */
173478ee8d1cSJulian Grajkowski cyInst = Lac_GetFirstAsymHandle(adfInsts, num_cy_dev);
173578ee8d1cSJulian Grajkowski /* Try to find a cy instance since it also supports asym */
173678ee8d1cSJulian Grajkowski if (NULL == cyInst) {
173778ee8d1cSJulian Grajkowski cyInst = Lac_GetFirstCyHandle(adfInsts, num_cy_dev);
173878ee8d1cSJulian Grajkowski }
173978ee8d1cSJulian Grajkowski break;
174078ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO_SYM:
174178ee8d1cSJulian Grajkowski /* Try to find a sym only instance first */
174278ee8d1cSJulian Grajkowski cyInst = Lac_GetFirstSymHandle(adfInsts, num_cy_dev);
174378ee8d1cSJulian Grajkowski /* Try to find a cy instance since it also supports sym */
174478ee8d1cSJulian Grajkowski if (NULL == cyInst) {
174578ee8d1cSJulian Grajkowski cyInst = Lac_GetFirstCyHandle(adfInsts, num_cy_dev);
174678ee8d1cSJulian Grajkowski }
174778ee8d1cSJulian Grajkowski break;
174878ee8d1cSJulian Grajkowski case SAL_SERVICE_TYPE_CRYPTO:
174978ee8d1cSJulian Grajkowski /* Try to find a cy instance */
175078ee8d1cSJulian Grajkowski cyInst = Lac_GetFirstCyHandle(adfInsts, num_cy_dev);
175178ee8d1cSJulian Grajkowski break;
175278ee8d1cSJulian Grajkowski default:
175378ee8d1cSJulian Grajkowski break;
175478ee8d1cSJulian Grajkowski }
175578ee8d1cSJulian Grajkowski if (NULL == cyInst) {
175678ee8d1cSJulian Grajkowski LAC_LOG_ERROR("No remaining crypto instances available\n");
175778ee8d1cSJulian Grajkowski }
175878ee8d1cSJulian Grajkowski return cyInst;
175978ee8d1cSJulian Grajkowski }
176078ee8d1cSJulian Grajkowski
176178ee8d1cSJulian Grajkowski CpaStatus
icp_sal_NrbgGetInflightRequests(CpaInstanceHandle instanceHandle_in,Cpa32U * maxInflightRequests,Cpa32U * numInflightRequests)176278ee8d1cSJulian Grajkowski icp_sal_NrbgGetInflightRequests(CpaInstanceHandle instanceHandle_in,
176378ee8d1cSJulian Grajkowski Cpa32U *maxInflightRequests,
176478ee8d1cSJulian Grajkowski Cpa32U *numInflightRequests)
176578ee8d1cSJulian Grajkowski {
176678ee8d1cSJulian Grajkowski return CPA_STATUS_UNSUPPORTED;
176778ee8d1cSJulian Grajkowski }
176878ee8d1cSJulian Grajkowski
176978ee8d1cSJulian Grajkowski CpaStatus
icp_sal_SymGetInflightRequests(CpaInstanceHandle instanceHandle,Cpa32U * maxInflightRequests,Cpa32U * numInflightRequests)177078ee8d1cSJulian Grajkowski icp_sal_SymGetInflightRequests(CpaInstanceHandle instanceHandle,
177178ee8d1cSJulian Grajkowski Cpa32U *maxInflightRequests,
177278ee8d1cSJulian Grajkowski Cpa32U *numInflightRequests)
177378ee8d1cSJulian Grajkowski {
177478ee8d1cSJulian Grajkowski sal_crypto_service_t *crypto_handle = NULL;
177578ee8d1cSJulian Grajkowski
177678ee8d1cSJulian Grajkowski crypto_handle = (sal_crypto_service_t *)instanceHandle;
177778ee8d1cSJulian Grajkowski
177878ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(crypto_handle);
177978ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(maxInflightRequests);
178078ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM(numInflightRequests);
178178ee8d1cSJulian Grajkowski SAL_RUNNING_CHECK(crypto_handle);
178278ee8d1cSJulian Grajkowski
178378ee8d1cSJulian Grajkowski return icp_adf_getInflightRequests(crypto_handle->trans_handle_sym_tx,
178478ee8d1cSJulian Grajkowski maxInflightRequests,
178578ee8d1cSJulian Grajkowski numInflightRequests);
178678ee8d1cSJulian Grajkowski }
178778ee8d1cSJulian Grajkowski
178878ee8d1cSJulian Grajkowski CpaStatus
icp_sal_dp_SymGetInflightRequests(CpaInstanceHandle instanceHandle,Cpa32U * maxInflightRequests,Cpa32U * numInflightRequests)178978ee8d1cSJulian Grajkowski icp_sal_dp_SymGetInflightRequests(CpaInstanceHandle instanceHandle,
179078ee8d1cSJulian Grajkowski Cpa32U *maxInflightRequests,
179178ee8d1cSJulian Grajkowski Cpa32U *numInflightRequests)
179278ee8d1cSJulian Grajkowski {
179378ee8d1cSJulian Grajkowski sal_crypto_service_t *crypto_handle = NULL;
179478ee8d1cSJulian Grajkowski
179578ee8d1cSJulian Grajkowski crypto_handle = (sal_crypto_service_t *)instanceHandle;
179678ee8d1cSJulian Grajkowski
179778ee8d1cSJulian Grajkowski return icp_adf_dp_getInflightRequests(
179878ee8d1cSJulian Grajkowski crypto_handle->trans_handle_sym_tx,
179978ee8d1cSJulian Grajkowski maxInflightRequests,
180078ee8d1cSJulian Grajkowski numInflightRequests);
180178ee8d1cSJulian Grajkowski }
180278ee8d1cSJulian Grajkowski
1803a977168cSMichal Gulbicki CpaStatus
icp_sal_setForceAEADMACVerify(CpaInstanceHandle instanceHandle,CpaBoolean forceAEADMacVerify)1804a977168cSMichal Gulbicki icp_sal_setForceAEADMACVerify(CpaInstanceHandle instanceHandle,
1805a977168cSMichal Gulbicki CpaBoolean forceAEADMacVerify)
1806a977168cSMichal Gulbicki {
1807a977168cSMichal Gulbicki sal_crypto_service_t *crypto_handle = NULL;
1808a977168cSMichal Gulbicki
1809a977168cSMichal Gulbicki crypto_handle = (sal_crypto_service_t *)instanceHandle;
1810a977168cSMichal Gulbicki LAC_CHECK_NULL_PARAM(crypto_handle);
1811a977168cSMichal Gulbicki crypto_handle->forceAEADMacVerify = forceAEADMacVerify;
1812a977168cSMichal Gulbicki
1813a977168cSMichal Gulbicki return CPA_STATUS_SUCCESS;
1814a977168cSMichal Gulbicki }
1815