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