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 /* Force HW MAC validation for GCM and CCM */ 68 pCrypto_service->forceAEADMacVerify = CPA_TRUE; 69 70 *(ppInst) = &(pCrypto_service->generic_service_info); 71 72 return CPA_STATUS_SUCCESS; 73 } 74 case SAL_SERVICE_TYPE_COMPRESSION: { 75 pCompression_service = 76 malloc(sizeof(sal_compression_service_t), M_QAT, M_WAITOK); 77 78 /* Zero memory */ 79 memset(pCompression_service, 80 0, 81 sizeof(sal_compression_service_t)); 82 83 pCompression_service->generic_service_info.type = 84 (sal_service_type_t)serviceType; 85 pCompression_service->generic_service_info.state = 86 SAL_SERVICE_STATE_UNINITIALIZED; 87 pCompression_service->generic_service_info.instance = instance; 88 89 pCompression_service->generic_service_info.init = 90 SalCtrl_CompressionInit; 91 pCompression_service->generic_service_info.start = 92 SalCtrl_CompressionStart; 93 pCompression_service->generic_service_info.stop = 94 SalCtrl_CompressionStop; 95 pCompression_service->generic_service_info.shutdown = 96 SalCtrl_CompressionShutdown; 97 98 *(ppInst) = &(pCompression_service->generic_service_info); 99 return CPA_STATUS_SUCCESS; 100 } 101 102 default: { 103 QAT_UTILS_LOG("Not a valid service type\n"); 104 (*ppInst) = NULL; 105 return CPA_STATUS_FAIL; 106 } 107 } 108 } 109