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