xref: /dpdk/drivers/crypto/qat/dev/qat_crypto_pmd_gen2.c (revision b7bd72d8da9c13deba44b1ac9f7dfa8cda77f240)
10c4546deSFan Zhang /* SPDX-License-Identifier: BSD-3-Clause
2254558c8SKai Ji  * Copyright(c) 2017-2022 Intel Corporation
30c4546deSFan Zhang  */
40c4546deSFan Zhang 
50c4546deSFan Zhang #include <rte_cryptodev.h>
60c4546deSFan Zhang #include <cryptodev_pmd.h>
70c4546deSFan Zhang #include "qat_sym_session.h"
80c4546deSFan Zhang #include "qat_sym.h"
90c4546deSFan Zhang #include "qat_asym.h"
100c4546deSFan Zhang #include "qat_crypto.h"
110c4546deSFan Zhang #include "qat_crypto_pmd_gens.h"
120c4546deSFan Zhang 
130c4546deSFan Zhang #define MIXED_CRYPTO_MIN_FW_VER 0x04090000
140c4546deSFan Zhang 
15cffb726bSVikash Poddar static struct rte_cryptodev_capabilities qat_sym_crypto_legacy_caps_gen2[] = {
16cffb726bSVikash Poddar 	QAT_SYM_CIPHER_CAP(DES_CBC,
17cffb726bSVikash Poddar 		CAP_SET(block_size, 8),
18cffb726bSVikash Poddar 		CAP_RNG(key_size, 8, 24, 8), CAP_RNG(iv_size, 8, 8, 0)),
19cffb726bSVikash Poddar 	QAT_SYM_CIPHER_CAP(3DES_CBC,
20cffb726bSVikash Poddar 		CAP_SET(block_size, 8),
21cffb726bSVikash Poddar 		CAP_RNG(key_size, 8, 24, 8), CAP_RNG(iv_size, 8, 8, 0)),
22cffb726bSVikash Poddar 	QAT_SYM_CIPHER_CAP(3DES_CTR,
23cffb726bSVikash Poddar 		CAP_SET(block_size, 8),
24cffb726bSVikash Poddar 		CAP_RNG(key_size, 16, 24, 8), CAP_RNG(iv_size, 8, 8, 0)),
250c4546deSFan Zhang 	QAT_SYM_PLAIN_AUTH_CAP(SHA1,
260c4546deSFan Zhang 		CAP_SET(block_size, 64),
270c4546deSFan Zhang 		CAP_RNG(digest_size, 1, 20, 1)),
28cffb726bSVikash Poddar 	QAT_SYM_AUTH_CAP(SHA224,
29cffb726bSVikash Poddar 		CAP_SET(block_size, 64),
30cffb726bSVikash Poddar 		CAP_RNG_ZERO(key_size), CAP_RNG(digest_size, 1, 28, 1),
31cffb726bSVikash Poddar 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
32cffb726bSVikash Poddar 	QAT_SYM_AUTH_CAP(SHA224_HMAC,
33cffb726bSVikash Poddar 		CAP_SET(block_size, 64),
34cffb726bSVikash Poddar 		CAP_RNG(key_size, 1, 64, 1), CAP_RNG(digest_size, 1, 28, 1),
35cffb726bSVikash Poddar 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
36cffb726bSVikash Poddar 	QAT_SYM_AUTH_CAP(SHA1_HMAC,
37cffb726bSVikash Poddar 		CAP_SET(block_size, 64),
38cffb726bSVikash Poddar 		CAP_RNG(key_size, 1, 64, 1), CAP_RNG(digest_size, 1, 20, 1),
39cffb726bSVikash Poddar 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
40cffb726bSVikash Poddar 	QAT_SYM_AUTH_CAP(MD5_HMAC,
41cffb726bSVikash Poddar 		CAP_SET(block_size, 64),
42cffb726bSVikash Poddar 		CAP_RNG(key_size, 1, 64, 1), CAP_RNG(digest_size, 1, 16, 1),
43cffb726bSVikash Poddar 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
44cffb726bSVikash Poddar 	QAT_SYM_CIPHER_CAP(DES_DOCSISBPI,
45cffb726bSVikash Poddar 		CAP_SET(block_size, 8),
46cffb726bSVikash Poddar 		CAP_RNG(key_size, 8, 8, 0), CAP_RNG(iv_size, 8, 8, 0)),
47cffb726bSVikash Poddar };
48cffb726bSVikash Poddar 
49cffb726bSVikash Poddar static struct rte_cryptodev_capabilities qat_sym_crypto_caps_gen2[] = {
500c4546deSFan Zhang 	QAT_SYM_AEAD_CAP(AES_GCM,
510c4546deSFan Zhang 		CAP_SET(block_size, 16),
520c4546deSFan Zhang 		CAP_RNG(key_size, 16, 32, 8), CAP_RNG(digest_size, 8, 16, 4),
530c4546deSFan Zhang 		CAP_RNG(aad_size, 0, 240, 1), CAP_RNG(iv_size, 0, 12, 12)),
540c4546deSFan Zhang 	QAT_SYM_AEAD_CAP(AES_CCM,
550c4546deSFan Zhang 		CAP_SET(block_size, 16),
560c4546deSFan Zhang 		CAP_RNG(key_size, 16, 16, 0), CAP_RNG(digest_size, 4, 16, 2),
570c4546deSFan Zhang 		CAP_RNG(aad_size, 0, 224, 1), CAP_RNG(iv_size, 7, 13, 1)),
580c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(AES_GMAC,
590c4546deSFan Zhang 		CAP_SET(block_size, 16),
600c4546deSFan Zhang 		CAP_RNG(key_size, 16, 32, 8), CAP_RNG(digest_size, 8, 16, 4),
610c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG(iv_size, 0, 12, 12)),
620c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(AES_CMAC,
630c4546deSFan Zhang 		CAP_SET(block_size, 16),
640c4546deSFan Zhang 		CAP_RNG(key_size, 16, 16, 0), CAP_RNG(digest_size, 4, 16, 4),
650c4546deSFan Zhang 			CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
660c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(SHA256,
670c4546deSFan Zhang 		CAP_SET(block_size, 64),
680c4546deSFan Zhang 		CAP_RNG_ZERO(key_size), CAP_RNG(digest_size, 1, 32, 1),
690c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
700c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(SHA384,
710c4546deSFan Zhang 		CAP_SET(block_size, 128),
720c4546deSFan Zhang 		CAP_RNG_ZERO(key_size), CAP_RNG(digest_size, 1, 48, 1),
730c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
740c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(SHA512,
750c4546deSFan Zhang 		CAP_SET(block_size, 128),
760c4546deSFan Zhang 		CAP_RNG_ZERO(key_size), CAP_RNG(digest_size, 1, 64, 1),
770c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
783a80d7fbSCiara Power 	QAT_SYM_PLAIN_AUTH_CAP(SHA3_256,
793a80d7fbSCiara Power 		CAP_SET(block_size, 136),
803a80d7fbSCiara Power 		CAP_RNG(digest_size, 32, 32, 0)),
810c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(SHA256_HMAC,
820c4546deSFan Zhang 		CAP_SET(block_size, 64),
830c4546deSFan Zhang 		CAP_RNG(key_size, 1, 64, 1), CAP_RNG(digest_size, 1, 32, 1),
840c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
850c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(SHA384_HMAC,
860c4546deSFan Zhang 		CAP_SET(block_size, 128),
870c4546deSFan Zhang 		CAP_RNG(key_size, 1, 128, 1), CAP_RNG(digest_size, 1, 48, 1),
880c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
890c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(SHA512_HMAC,
900c4546deSFan Zhang 		CAP_SET(block_size, 128),
910c4546deSFan Zhang 		CAP_RNG(key_size, 1, 128, 1), CAP_RNG(digest_size, 1, 64, 1),
920c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
930c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(AES_XCBC_MAC,
940c4546deSFan Zhang 		CAP_SET(block_size, 16),
950c4546deSFan Zhang 		CAP_RNG(key_size, 16, 16, 0), CAP_RNG(digest_size, 12, 12, 0),
960c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
970c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(SNOW3G_UIA2,
980c4546deSFan Zhang 		CAP_SET(block_size, 16),
990c4546deSFan Zhang 		CAP_RNG(key_size, 16, 16, 0), CAP_RNG(digest_size, 4, 4, 0),
1000c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG(iv_size, 16, 16, 0)),
1010c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(KASUMI_F9,
1020c4546deSFan Zhang 		CAP_SET(block_size, 8),
1030c4546deSFan Zhang 		CAP_RNG(key_size, 16, 16, 0), CAP_RNG(digest_size, 4, 4, 0),
1040c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
1050c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(NULL,
1060c4546deSFan Zhang 		CAP_SET(block_size, 1),
1070c4546deSFan Zhang 		CAP_RNG_ZERO(key_size), CAP_RNG_ZERO(digest_size),
1080c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG_ZERO(iv_size)),
1090c4546deSFan Zhang 	QAT_SYM_CIPHER_CAP(AES_CBC,
1100c4546deSFan Zhang 		CAP_SET(block_size, 16),
1110c4546deSFan Zhang 		CAP_RNG(key_size, 16, 32, 8), CAP_RNG(iv_size, 16, 16, 0)),
1120c4546deSFan Zhang 	QAT_SYM_CIPHER_CAP(AES_CTR,
1130c4546deSFan Zhang 		CAP_SET(block_size, 16),
1140c4546deSFan Zhang 		CAP_RNG(key_size, 16, 32, 8), CAP_RNG(iv_size, 16, 16, 0)),
1150c4546deSFan Zhang 	QAT_SYM_CIPHER_CAP(AES_XTS,
1160c4546deSFan Zhang 		CAP_SET(block_size, 16),
1170c4546deSFan Zhang 		CAP_RNG(key_size, 32, 64, 32), CAP_RNG(iv_size, 16, 16, 0)),
1180c4546deSFan Zhang 	QAT_SYM_CIPHER_CAP(AES_DOCSISBPI,
1190c4546deSFan Zhang 		CAP_SET(block_size, 16),
1200c4546deSFan Zhang 		CAP_RNG(key_size, 16, 32, 16), CAP_RNG(iv_size, 16, 16, 0)),
1210c4546deSFan Zhang 	QAT_SYM_CIPHER_CAP(SNOW3G_UEA2,
1220c4546deSFan Zhang 		CAP_SET(block_size, 16),
1230c4546deSFan Zhang 		CAP_RNG(key_size, 16, 16, 0), CAP_RNG(iv_size, 16, 16, 0)),
1240c4546deSFan Zhang 	QAT_SYM_CIPHER_CAP(KASUMI_F8,
1250c4546deSFan Zhang 		CAP_SET(block_size, 8),
1260c4546deSFan Zhang 		CAP_RNG(key_size, 16, 16, 0), CAP_RNG(iv_size, 8, 8, 0)),
1270c4546deSFan Zhang 	QAT_SYM_CIPHER_CAP(NULL,
1280c4546deSFan Zhang 		CAP_SET(block_size, 1),
1290c4546deSFan Zhang 		CAP_RNG_ZERO(key_size), CAP_RNG_ZERO(iv_size)),
1300c4546deSFan Zhang 	QAT_SYM_CIPHER_CAP(ZUC_EEA3,
1310c4546deSFan Zhang 		CAP_SET(block_size, 16),
1320c4546deSFan Zhang 		CAP_RNG(key_size, 16, 16, 0), CAP_RNG(iv_size, 16, 16, 0)),
1330c4546deSFan Zhang 	QAT_SYM_AUTH_CAP(ZUC_EIA3,
1340c4546deSFan Zhang 		CAP_SET(block_size, 16),
1350c4546deSFan Zhang 		CAP_RNG(key_size, 16, 16, 0), CAP_RNG(digest_size, 4, 4, 0),
1360c4546deSFan Zhang 		CAP_RNG_ZERO(aad_size), CAP_RNG(iv_size, 16, 16, 0)),
1370c4546deSFan Zhang 	RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
1380c4546deSFan Zhang };
1390c4546deSFan Zhang 
1400c4546deSFan Zhang static int
qat_sym_crypto_qp_setup_gen2(struct rte_cryptodev * dev,uint16_t qp_id,const struct rte_cryptodev_qp_conf * qp_conf,int socket_id)1410c4546deSFan Zhang qat_sym_crypto_qp_setup_gen2(struct rte_cryptodev *dev, uint16_t qp_id,
1420c4546deSFan Zhang 		const struct rte_cryptodev_qp_conf *qp_conf, int socket_id)
1430c4546deSFan Zhang {
1440c4546deSFan Zhang 	struct qat_cryptodev_private *qat_sym_private = dev->data->dev_private;
1450c4546deSFan Zhang 	struct qat_qp *qp;
1460c4546deSFan Zhang 	int ret;
1470c4546deSFan Zhang 
1480c4546deSFan Zhang 	if (qat_cryptodev_qp_setup(dev, qp_id, qp_conf, socket_id)) {
1490c4546deSFan Zhang 		QAT_LOG(DEBUG, "QAT qp setup failed");
1500c4546deSFan Zhang 		return -1;
1510c4546deSFan Zhang 	}
1520c4546deSFan Zhang 
1530c4546deSFan Zhang 	qp = qat_sym_private->qat_dev->qps_in_use[QAT_SERVICE_SYMMETRIC][qp_id];
1540c4546deSFan Zhang 	ret = qat_cq_get_fw_version(qp);
1550c4546deSFan Zhang 	if (ret < 0) {
1560c4546deSFan Zhang 		qat_cryptodev_qp_release(dev, qp_id);
1570c4546deSFan Zhang 		return ret;
1580c4546deSFan Zhang 	}
1590c4546deSFan Zhang 
1600c4546deSFan Zhang 	if (ret != 0)
1610c4546deSFan Zhang 		QAT_LOG(DEBUG, "QAT firmware version: %d.%d.%d",
1620c4546deSFan Zhang 				(ret >> 24) & 0xff,
1630c4546deSFan Zhang 				(ret >> 16) & 0xff,
1640c4546deSFan Zhang 				(ret >> 8) & 0xff);
1650c4546deSFan Zhang 	else
1660c4546deSFan Zhang 		QAT_LOG(DEBUG, "unknown QAT firmware version");
1670c4546deSFan Zhang 
1680c4546deSFan Zhang 	/* set capabilities based on the fw version */
169ce7a737cSKevin O'Sullivan 	qat_sym_private->internal_capabilities |= QAT_SYM_CAP_VALID |
1700c4546deSFan Zhang 			((ret >= MIXED_CRYPTO_MIN_FW_VER) ?
1710c4546deSFan Zhang 					QAT_SYM_CAP_MIXED_CRYPTO : 0);
1720c4546deSFan Zhang 	return 0;
1730c4546deSFan Zhang }
1740c4546deSFan Zhang 
175254558c8SKai Ji void
qat_sym_session_set_ext_hash_flags_gen2(struct qat_sym_session * session,uint8_t hash_flag)176254558c8SKai Ji qat_sym_session_set_ext_hash_flags_gen2(struct qat_sym_session *session,
177254558c8SKai Ji 		uint8_t hash_flag)
178254558c8SKai Ji {
179254558c8SKai Ji 	struct icp_qat_fw_comn_req_hdr *header = &session->fw_req.comn_hdr;
180254558c8SKai Ji 	struct icp_qat_fw_cipher_auth_cd_ctrl_hdr *cd_ctrl =
181254558c8SKai Ji 			(struct icp_qat_fw_cipher_auth_cd_ctrl_hdr *)
182254558c8SKai Ji 			session->fw_req.cd_ctrl.content_desc_ctrl_lw;
183254558c8SKai Ji 
184254558c8SKai Ji 	/* Set the Use Extended Protocol Flags bit in LW 1 */
1856c868d6eSCiara Power 	ICP_QAT_FW_USE_EXTENDED_PROTOCOL_FLAGS_SET(
1866c868d6eSCiara Power 			header->ext_flags, QAT_LA_USE_EXTENDED_PROTOCOL_FLAGS);
187254558c8SKai Ji 
188254558c8SKai Ji 	/* Set Hash Flags in LW 28 */
189254558c8SKai Ji 	cd_ctrl->hash_flags |= hash_flag;
190254558c8SKai Ji 
191254558c8SKai Ji 	/* Set proto flags in LW 1 */
192254558c8SKai Ji 	switch (session->qat_cipher_alg) {
193254558c8SKai Ji 	case ICP_QAT_HW_CIPHER_ALGO_SNOW_3G_UEA2:
194254558c8SKai Ji 		ICP_QAT_FW_LA_PROTO_SET(header->serv_specif_flags,
195254558c8SKai Ji 				ICP_QAT_FW_LA_SNOW_3G_PROTO);
196254558c8SKai Ji 		ICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_SET(
197254558c8SKai Ji 				header->serv_specif_flags, 0);
198254558c8SKai Ji 		break;
199254558c8SKai Ji 	case ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3:
2006c868d6eSCiara Power 	case ICP_QAT_HW_CIPHER_ALGO_ZUC_256:
201254558c8SKai Ji 		ICP_QAT_FW_LA_PROTO_SET(header->serv_specif_flags,
202254558c8SKai Ji 				ICP_QAT_FW_LA_NO_PROTO);
203254558c8SKai Ji 		ICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_SET(
204254558c8SKai Ji 				header->serv_specif_flags,
205254558c8SKai Ji 				ICP_QAT_FW_LA_ZUC_3G_PROTO);
206254558c8SKai Ji 		break;
207254558c8SKai Ji 	default:
208254558c8SKai Ji 		ICP_QAT_FW_LA_PROTO_SET(header->serv_specif_flags,
209254558c8SKai Ji 				ICP_QAT_FW_LA_NO_PROTO);
210254558c8SKai Ji 		ICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_SET(
211254558c8SKai Ji 				header->serv_specif_flags, 0);
212254558c8SKai Ji 		break;
213254558c8SKai Ji 	}
214254558c8SKai Ji }
215254558c8SKai Ji 
216254558c8SKai Ji static int
qat_sym_crypto_set_session_gen2(void * cdev,void * session)217254558c8SKai Ji qat_sym_crypto_set_session_gen2(void *cdev, void *session)
218254558c8SKai Ji {
219254558c8SKai Ji 	struct rte_cryptodev *dev = cdev;
220254558c8SKai Ji 	struct qat_sym_session *ctx = session;
221254558c8SKai Ji 	const struct qat_cryptodev_private *qat_private =
222254558c8SKai Ji 			dev->data->dev_private;
223254558c8SKai Ji 	int ret;
224254558c8SKai Ji 
225254558c8SKai Ji 	ret = qat_sym_crypto_set_session_gen1(cdev, session);
226254558c8SKai Ji 	if (ret == -ENOTSUP) {
227254558c8SKai Ji 		/* GEN1 returning -ENOTSUP as it cannot handle some mixed algo,
228254558c8SKai Ji 		 * but some are not supported by GEN2, so checking here
229254558c8SKai Ji 		 */
230254558c8SKai Ji 		if ((qat_private->internal_capabilities &
231254558c8SKai Ji 				QAT_SYM_CAP_MIXED_CRYPTO) == 0)
232254558c8SKai Ji 			return -ENOTSUP;
233254558c8SKai Ji 
234254558c8SKai Ji 		if (ctx->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_ZUC_3G_128_EIA3 &&
235254558c8SKai Ji 				ctx->qat_cipher_alg !=
236254558c8SKai Ji 				ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3) {
237254558c8SKai Ji 			qat_sym_session_set_ext_hash_flags_gen2(ctx,
238254558c8SKai Ji 				1 << ICP_QAT_FW_AUTH_HDR_FLAG_ZUC_EIA3_BITPOS);
239254558c8SKai Ji 		} else if (ctx->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_SNOW_3G_UIA2 &&
240254558c8SKai Ji 				ctx->qat_cipher_alg !=
241254558c8SKai Ji 				ICP_QAT_HW_CIPHER_ALGO_SNOW_3G_UEA2) {
242254558c8SKai Ji 			qat_sym_session_set_ext_hash_flags_gen2(ctx,
243254558c8SKai Ji 				1 << ICP_QAT_FW_AUTH_HDR_FLAG_SNOW3G_UIA2_BITPOS);
244254558c8SKai Ji 		} else if ((ctx->aes_cmac ||
245254558c8SKai Ji 				ctx->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_NULL) &&
246254558c8SKai Ji 				(ctx->qat_cipher_alg ==
247254558c8SKai Ji 				ICP_QAT_HW_CIPHER_ALGO_SNOW_3G_UEA2 ||
248254558c8SKai Ji 				ctx->qat_cipher_alg ==
249254558c8SKai Ji 				ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3)) {
250254558c8SKai Ji 			qat_sym_session_set_ext_hash_flags_gen2(ctx, 0);
251254558c8SKai Ji 		}
252254558c8SKai Ji 
253254558c8SKai Ji 		ret = 0;
254254558c8SKai Ji 	}
255254558c8SKai Ji 
256254558c8SKai Ji 	return ret;
257254558c8SKai Ji }
258254558c8SKai Ji 
2590c4546deSFan Zhang struct rte_cryptodev_ops qat_sym_crypto_ops_gen2 = {
2600c4546deSFan Zhang 
2610c4546deSFan Zhang 	/* Device related operations */
2620c4546deSFan Zhang 	.dev_configure		= qat_cryptodev_config,
2630c4546deSFan Zhang 	.dev_start		= qat_cryptodev_start,
2640c4546deSFan Zhang 	.dev_stop		= qat_cryptodev_stop,
2650c4546deSFan Zhang 	.dev_close		= qat_cryptodev_close,
2660c4546deSFan Zhang 	.dev_infos_get		= qat_cryptodev_info_get,
2670c4546deSFan Zhang 
2680c4546deSFan Zhang 	.stats_get		= qat_cryptodev_stats_get,
2690c4546deSFan Zhang 	.stats_reset		= qat_cryptodev_stats_reset,
2700c4546deSFan Zhang 	.queue_pair_setup	= qat_sym_crypto_qp_setup_gen2,
2710c4546deSFan Zhang 	.queue_pair_release	= qat_cryptodev_qp_release,
2720c4546deSFan Zhang 
2730c4546deSFan Zhang 	/* Crypto related operations */
2740c4546deSFan Zhang 	.sym_session_get_size	= qat_sym_session_get_private_size,
2750c4546deSFan Zhang 	.sym_session_configure	= qat_sym_session_configure,
2760c4546deSFan Zhang 	.sym_session_clear	= qat_sym_session_clear,
2770c4546deSFan Zhang 
2780c4546deSFan Zhang 	/* Raw data-path API related operations */
2790c4546deSFan Zhang 	.sym_get_raw_dp_ctx_size = qat_sym_get_dp_ctx_size,
2800c4546deSFan Zhang 	.sym_configure_raw_dp_ctx = qat_sym_configure_dp_ctx,
2810c4546deSFan Zhang };
2820c4546deSFan Zhang 
283b6ac58aeSArek Kusztal static int
qat_sym_crypto_cap_get_gen2(struct qat_cryptodev_private * internals,const char * capa_memz_name,const uint16_t __rte_unused slice_map)284b6ac58aeSArek Kusztal qat_sym_crypto_cap_get_gen2(struct qat_cryptodev_private *internals,
285b6ac58aeSArek Kusztal 			const char *capa_memz_name,
286b6ac58aeSArek Kusztal 			const uint16_t __rte_unused slice_map)
2870c4546deSFan Zhang {
288cffb726bSVikash Poddar 	uint32_t legacy_capa_num;
289cffb726bSVikash Poddar 	uint32_t size = sizeof(qat_sym_crypto_caps_gen2);
290cffb726bSVikash Poddar 	uint32_t legacy_size = sizeof(qat_sym_crypto_legacy_caps_gen2);
291cffb726bSVikash Poddar 	legacy_capa_num = legacy_size/sizeof(struct rte_cryptodev_capabilities);
292cffb726bSVikash Poddar 
293*b7bd72d8SArkadiusz Kusztal 	if (unlikely(internals->qat_dev->options.legacy_alg))
294cffb726bSVikash Poddar 		size = size + legacy_size;
295b6ac58aeSArek Kusztal 
296b6ac58aeSArek Kusztal 	internals->capa_mz = rte_memzone_lookup(capa_memz_name);
297b6ac58aeSArek Kusztal 	if (internals->capa_mz == NULL) {
298b6ac58aeSArek Kusztal 		internals->capa_mz = rte_memzone_reserve(capa_memz_name,
299b6ac58aeSArek Kusztal 				size, rte_socket_id(), 0);
300b6ac58aeSArek Kusztal 		if (internals->capa_mz == NULL) {
301b6ac58aeSArek Kusztal 			QAT_LOG(DEBUG,
302b6ac58aeSArek Kusztal 				"Error allocating memzone for capabilities");
303b6ac58aeSArek Kusztal 			return -1;
304b6ac58aeSArek Kusztal 		}
305b6ac58aeSArek Kusztal 	}
306b6ac58aeSArek Kusztal 
307b6ac58aeSArek Kusztal 	struct rte_cryptodev_capabilities *addr =
308b6ac58aeSArek Kusztal 			(struct rte_cryptodev_capabilities *)
309b6ac58aeSArek Kusztal 				internals->capa_mz->addr;
310cffb726bSVikash Poddar 	struct rte_cryptodev_capabilities *capabilities;
311b6ac58aeSArek Kusztal 
312*b7bd72d8SArkadiusz Kusztal 	if (unlikely(internals->qat_dev->options.legacy_alg)) {
313cffb726bSVikash Poddar 		capabilities = qat_sym_crypto_legacy_caps_gen2;
314cffb726bSVikash Poddar 		memcpy(addr, capabilities, legacy_size);
315cffb726bSVikash Poddar 		addr += legacy_capa_num;
316b6ac58aeSArek Kusztal 	}
317cffb726bSVikash Poddar 	capabilities = qat_sym_crypto_caps_gen2;
318cffb726bSVikash Poddar 	memcpy(addr, capabilities, sizeof(qat_sym_crypto_caps_gen2));
319b6ac58aeSArek Kusztal 	internals->qat_dev_capabilities = internals->capa_mz->addr;
320b6ac58aeSArek Kusztal 
321b6ac58aeSArek Kusztal 	return 0;
3220c4546deSFan Zhang }
3230c4546deSFan Zhang 
RTE_INIT(qat_sym_crypto_gen2_init)3240c4546deSFan Zhang RTE_INIT(qat_sym_crypto_gen2_init)
3250c4546deSFan Zhang {
3260c4546deSFan Zhang 	qat_sym_gen_dev_ops[QAT_GEN2].cryptodev_ops = &qat_sym_crypto_ops_gen2;
3270c4546deSFan Zhang 	qat_sym_gen_dev_ops[QAT_GEN2].get_capabilities =
3280c4546deSFan Zhang 			qat_sym_crypto_cap_get_gen2;
329254558c8SKai Ji 	qat_sym_gen_dev_ops[QAT_GEN2].set_session =
330254558c8SKai Ji 			qat_sym_crypto_set_session_gen2;
33185fec6fdSKai Ji 	qat_sym_gen_dev_ops[QAT_GEN2].set_raw_dp_ctx =
33285fec6fdSKai Ji 			qat_sym_configure_raw_dp_ctx_gen1;
3330c4546deSFan Zhang 	qat_sym_gen_dev_ops[QAT_GEN2].get_feature_flags =
3340c4546deSFan Zhang 			qat_sym_crypto_feature_flags_get_gen1;
3350c4546deSFan Zhang 	qat_sym_gen_dev_ops[QAT_GEN2].create_security_ctx =
3360c4546deSFan Zhang 			qat_sym_create_security_gen1;
3370c4546deSFan Zhang }
3380c4546deSFan Zhang 
RTE_INIT(qat_asym_crypto_gen2_init)3390c4546deSFan Zhang RTE_INIT(qat_asym_crypto_gen2_init)
3400c4546deSFan Zhang {
3410c4546deSFan Zhang 	qat_asym_gen_dev_ops[QAT_GEN2].cryptodev_ops =
3420c4546deSFan Zhang 			&qat_asym_crypto_ops_gen1;
3430c4546deSFan Zhang 	qat_asym_gen_dev_ops[QAT_GEN2].get_capabilities =
3440c4546deSFan Zhang 			qat_asym_crypto_cap_get_gen1;
3450c4546deSFan Zhang 	qat_asym_gen_dev_ops[QAT_GEN2].get_feature_flags =
3460c4546deSFan Zhang 			qat_asym_crypto_feature_flags_get_gen1;
347254558c8SKai Ji 	qat_asym_gen_dev_ops[QAT_GEN2].set_session =
348254558c8SKai Ji 			qat_asym_crypto_set_session_gen1;
3490c4546deSFan Zhang }
350