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