1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /**
4  *****************************************************************************
5  * @file sal_create_services.c
6  *
7  * @defgroup SalCtrl Service Access Layer Controller
8  *
9  * @ingroup SalCtrl
10  *
11  * @description
12  *      This file contains the main function to create a specific service.
13  *
14  *****************************************************************************/
15 
16 #include "cpa.h"
17 #include "lac_mem.h"
18 #include "lac_mem_pools.h"
19 #include "qat_utils.h"
20 #include "lac_list.h"
21 #include "icp_adf_transport.h"
22 #include "icp_accel_devices.h"
23 #include "icp_adf_debug.h"
24 
25 #include "icp_qat_fw_la.h"
26 #include "lac_sym_qat.h"
27 #include "sal_types_compression.h"
28 #include "lac_sal_types_crypto.h"
29 
30 #include "icp_adf_init.h"
31 
32 #include "lac_sal.h"
33 #include "lac_sal_ctrl.h"
34 
35 CpaStatus
36 SalCtrl_ServiceCreate(sal_service_type_t serviceType,
37 		      Cpa32U instance,
38 		      sal_service_t **ppInst)
39 {
40 	sal_crypto_service_t *pCrypto_service = NULL;
41 	sal_compression_service_t *pCompression_service = NULL;
42 
43 	switch ((sal_service_type_t)serviceType) {
44 	case SAL_SERVICE_TYPE_CRYPTO_ASYM:
45 	case SAL_SERVICE_TYPE_CRYPTO_SYM:
46 	case SAL_SERVICE_TYPE_CRYPTO: {
47 		pCrypto_service =
48 		    malloc(sizeof(sal_crypto_service_t), M_QAT, M_WAITOK);
49 
50 		/* Zero memory */
51 		memset(pCrypto_service, 0, sizeof(sal_crypto_service_t));
52 
53 		pCrypto_service->generic_service_info.type =
54 		    (sal_service_type_t)serviceType;
55 		pCrypto_service->generic_service_info.state =
56 		    SAL_SERVICE_STATE_UNINITIALIZED;
57 		pCrypto_service->generic_service_info.instance = instance;
58 
59 		pCrypto_service->generic_service_info.init = SalCtrl_CryptoInit;
60 		pCrypto_service->generic_service_info.start =
61 		    SalCtrl_CryptoStart;
62 		pCrypto_service->generic_service_info.stop = SalCtrl_CryptoStop;
63 		pCrypto_service->generic_service_info.shutdown =
64 		    SalCtrl_CryptoShutdown;
65 
66 		/* Force HW MAC validation for GCM and CCM */
67 		pCrypto_service->forceAEADMacVerify = CPA_TRUE;
68 
69 		*(ppInst) = &(pCrypto_service->generic_service_info);
70 
71 		return CPA_STATUS_SUCCESS;
72 	}
73 	case SAL_SERVICE_TYPE_COMPRESSION: {
74 		pCompression_service =
75 		    malloc(sizeof(sal_compression_service_t), M_QAT, M_WAITOK);
76 
77 		/* Zero memory */
78 		memset(pCompression_service,
79 		       0,
80 		       sizeof(sal_compression_service_t));
81 
82 		pCompression_service->generic_service_info.type =
83 		    (sal_service_type_t)serviceType;
84 		pCompression_service->generic_service_info.state =
85 		    SAL_SERVICE_STATE_UNINITIALIZED;
86 		pCompression_service->generic_service_info.instance = instance;
87 
88 		pCompression_service->generic_service_info.init =
89 		    SalCtrl_CompressionInit;
90 		pCompression_service->generic_service_info.start =
91 		    SalCtrl_CompressionStart;
92 		pCompression_service->generic_service_info.stop =
93 		    SalCtrl_CompressionStop;
94 		pCompression_service->generic_service_info.shutdown =
95 		    SalCtrl_CompressionShutdown;
96 
97 		*(ppInst) = &(pCompression_service->generic_service_info);
98 		return CPA_STATUS_SUCCESS;
99 	}
100 
101 	default: {
102 		QAT_UTILS_LOG("Not a valid service type\n");
103 		(*ppInst) = NULL;
104 		return CPA_STATUS_FAIL;
105 	}
106 	}
107 }
108