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
SalCtrl_ServiceCreate(sal_service_type_t serviceType,Cpa32U instance,sal_service_t ** ppInst)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