From patchwork Thu Apr 18 16:51:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadiusz Kusztal X-Patchwork-Id: 139496 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6324A43EA6; Thu, 18 Apr 2024 18:51:36 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BC68740042; Thu, 18 Apr 2024 18:51:35 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.19]) by mails.dpdk.org (Postfix) with ESMTP id 080D440041 for ; Thu, 18 Apr 2024 18:51:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713459094; x=1744995094; h=from:to:cc:subject:date:message-id; bh=KTF8jYCJf/s9bUSTme/VF3JnNn9vVjOkPKTDQTop6RY=; b=EZedFDArEuP63oTJ6BZbXvCeGySeHyCaH+C5xq3ZFj8cQ48GCBb02Hae JHHTJx88tV1MUsVg6vrCU7NiktUKvFOb8LyJWJyUPFOXidkiCsafV+3s1 vbjPB/C+RQCbqHZkI7FQT20+5coyGzoH8TWNFobuRVv7+bPD2aCNZFxGC JwYItztfI3fHgVL9FiX/HRoi3aZivASpif5kn7mxjVCWVJ5TQwZgDPKzj Kw3FTo3sf+ypwU2VSKSB4FROH/igB+LHuzffVJqidJwJaqZWKzn0stxnk jlOdNSaSJMGMhtuhX1P1GoBzNIpvqF4FKO5yv6rTcmNSHX2Wxx0QJjqJD g==; X-CSE-ConnectionGUID: aANOfxq+QvWmoaRFCBlKIQ== X-CSE-MsgGUID: VAy4rXlsQfORK6Uqv9esBA== X-IronPort-AV: E=McAfee;i="6600,9927,11047"; a="8895785" X-IronPort-AV: E=Sophos;i="6.07,212,1708416000"; d="scan'208";a="8895785" Received: from orviesa004.jf.intel.com ([10.64.159.144]) by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Apr 2024 09:51:32 -0700 X-CSE-ConnectionGUID: bVZ9VsqDR+GQBbawoKNixw== X-CSE-MsgGUID: b508LvKBSZmp9PjOXUuJ5Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,212,1708416000"; d="scan'208";a="27855615" Received: from silpixa00400308.ir.intel.com ([10.237.214.154]) by orviesa004.jf.intel.com with ESMTP; 18 Apr 2024 09:51:30 -0700 From: Arkadiusz Kusztal To: dev@dpdk.org Cc: gakhil@marvell.com, ciara.power@intel.com, Arkadiusz Kusztal Subject: [PATCH] common/qat: add legacy algorithm option Date: Thu, 18 Apr 2024 17:51:28 +0100 Message-Id: <20240418165128.17261-1-arkadiuszx.kusztal@intel.com> X-Mailer: git-send-email 2.17.1 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This commit adds legacy algorithms flag to the qat_device struct. This will allow handling this flag within the device itself, and not using the global variable. Signed-off-by: Arkadiusz Kusztal --- drivers/common/qat/qat_common.h | 9 +++++++++ drivers/common/qat/qat_device.c | 4 ++-- drivers/common/qat/qat_device.h | 6 ++---- drivers/common/qat/qat_qp.c | 3 ++- drivers/common/qat/qat_qp.h | 3 ++- drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c | 10 +++++----- drivers/crypto/qat/dev/qat_sym_pmd_gen1.c | 2 +- drivers/crypto/qat/qat_asym.c | 7 ++++--- drivers/crypto/qat/qat_sym.c | 5 +++-- drivers/crypto/qat/qat_sym_session.c | 10 +++++----- 10 files changed, 35 insertions(+), 24 deletions(-) diff --git a/drivers/common/qat/qat_common.h b/drivers/common/qat/qat_common.h index 6d0f4aefd5..97828e2c67 100644 --- a/drivers/common/qat/qat_common.h +++ b/drivers/common/qat/qat_common.h @@ -19,6 +19,15 @@ extern const char *const *qat_cmdline_defines[]; +struct qat_options { + uint32_t slice_map; + /**< Map of the crypto and compression slices */ + uint16_t has_wireless_slice; + /**< Wireless Slices supported */ + uint8_t legacy_alg; + /**< are legacy algorithm supported */ +}; + enum qat_device_gen { QAT_GEN1, QAT_GEN2, diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c index 666e2bb995..bb107bc1f9 100644 --- a/drivers/common/qat/qat_device.c +++ b/drivers/common/qat/qat_device.c @@ -331,7 +331,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev) qat_pci_devs[qat_dev_id].pci_dev = pci_dev; if (wireless_slice_support(pci_dev->id.device_id)) - qat_dev->has_wireless_slice = 1; + qat_dev->options.has_wireless_slice = 1; ops_hw = qat_dev_hw_spec[qat_dev->qat_dev_gen]; NOT_NULL(ops_hw->qat_dev_get_misc_bar, goto error, @@ -372,7 +372,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev) NOT_NULL(ops_hw->qat_dev_get_slice_map, goto error, "QAT internal error! Read slice function not set, gen : %d", qat_dev_gen); - if (ops_hw->qat_dev_get_slice_map(&qat_dev->slice_map, pci_dev) < 0) { + if (ops_hw->qat_dev_get_slice_map(&qat_dev->options.slice_map, pci_dev) < 0) { RTE_LOG(ERR, EAL, "Cannot read slice configuration\n"); goto error; diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h index 9275156ef8..c1de1248d2 100644 --- a/drivers/common/qat/qat_device.h +++ b/drivers/common/qat/qat_device.h @@ -122,14 +122,12 @@ struct qat_pci_device { /**< Address of misc bar */ void *dev_private; /**< Per generation specific information */ - uint32_t slice_map; - /**< Map of the crypto and compression slices */ - uint16_t has_wireless_slice; - /**< Wireless Slices supported */ char *command_line; /**< Map of the crypto and compression slices */ void *pmd[QAT_MAX_SERVICES]; /**< link back to pmd private data */ + struct qat_options options; + /**< qat device options */ }; struct qat_gen_hw_data { diff --git a/drivers/common/qat/qat_qp.c b/drivers/common/qat/qat_qp.c index f95dd33375..7bec9abeb5 100644 --- a/drivers/common/qat/qat_qp.c +++ b/drivers/common/qat/qat_qp.c @@ -634,7 +634,8 @@ qat_enqueue_op_burst(void *qp, qat_op_build_request_t op_build_request, while (nb_ops_sent != nb_ops_possible) { ret = op_build_request(*ops, base_addr + tail, tmp_qp->op_cookies[tail >> queue->trailz], - tmp_qp->opaque, tmp_qp->qat_dev_gen); + tmp_qp->opaque, tmp_qp->qat_dev_gen, + tmp_qp->qat_dev->options); if (ret != 0) { tmp_qp->stats.enqueue_err_count++; diff --git a/drivers/common/qat/qat_qp.h b/drivers/common/qat/qat_qp.h index ae18fb942e..8908b57fa3 100644 --- a/drivers/common/qat/qat_qp.h +++ b/drivers/common/qat/qat_qp.h @@ -57,7 +57,8 @@ struct qat_queue { * - EINVAL if error **/ typedef int (*qat_op_build_request_t)(void *in_op, uint8_t *out_msg, - void *op_cookie, uint64_t *opaque, enum qat_device_gen dev_gen); + void *op_cookie, uint64_t *opaque, enum qat_device_gen dev_gen, + struct qat_options options); /** * Type define qat_op_dequeue_t function pointer, passed in as argument diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c b/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c index 907c3ce3e2..34a1b9002c 100644 --- a/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c +++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c @@ -265,7 +265,7 @@ qat_sym_crypto_cap_get_gen3(struct qat_cryptodev_private *internals, continue; } - if (internals->qat_dev->has_wireless_slice && ( + if (internals->qat_dev->options.has_wireless_slice && ( check_auth_capa(&capabilities[iter], RTE_CRYPTO_AUTH_KASUMI_F9) || check_cipher_capa(&capabilities[iter], @@ -279,7 +279,7 @@ qat_sym_crypto_cap_get_gen3(struct qat_cryptodev_private *internals, memcpy(addr + curr_capa, capabilities + iter, sizeof(struct rte_cryptodev_capabilities)); - if (internals->qat_dev->has_wireless_slice && ( + if (internals->qat_dev->options.has_wireless_slice && ( check_auth_capa(&capabilities[iter], RTE_CRYPTO_AUTH_ZUC_EIA3))) { cap = addr + curr_capa; @@ -290,7 +290,7 @@ qat_sym_crypto_cap_get_gen3(struct qat_cryptodev_private *internals, cap->sym.auth.digest_size.max = 16; cap->sym.auth.digest_size.increment = 4; } - if (internals->qat_dev->has_wireless_slice && ( + if (internals->qat_dev->options.has_wireless_slice && ( check_cipher_capa(&capabilities[iter], RTE_CRYPTO_CIPHER_ZUC_EEA3))) { cap = addr + curr_capa; @@ -551,7 +551,7 @@ qat_sym_crypto_set_session_gen3(void *cdev, void *session) ctx->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3)) { qat_sym_session_set_ext_hash_flags_gen2(ctx, 0); - } else if ((internals->qat_dev->has_wireless_slice) && + } else if ((internals->qat_dev->options.has_wireless_slice) && ((ctx->aes_cmac || ctx->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_NULL) && (ctx->qat_cipher_alg == @@ -560,7 +560,7 @@ qat_sym_crypto_set_session_gen3(void *cdev, void *session) ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3 || ctx->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_ZUC_256))) { qat_sym_session_set_ext_hash_flags_gen2(ctx, 0); - } else if ((internals->qat_dev->has_wireless_slice) && + } else if ((internals->qat_dev->options.has_wireless_slice) && (ctx->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_ZUC_256_MAC_32 || ctx->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_ZUC_256_MAC_64 || ctx->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_ZUC_256_MAC_128) && diff --git a/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c b/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c index bdd1647ea2..17a21ed7a7 100644 --- a/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c +++ b/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c @@ -292,7 +292,7 @@ qat_sym_build_op_auth_gen1(void *in_op, struct qat_sym_session *ctx, cdev = rte_cryptodev_pmd_get_dev(ctx->dev_id); internals = cdev->data->dev_private; - if (internals->qat_dev->has_wireless_slice && !ctx->is_gmac) + if (internals->qat_dev->options.has_wireless_slice && !ctx->is_gmac) ICP_QAT_FW_LA_CIPH_IV_FLD_FLAG_SET( req->comn_hdr.serv_specif_flags, 0); diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c index 14d6ec358c..8eb4df8ca8 100644 --- a/drivers/crypto/qat/qat_asym.c +++ b/drivers/crypto/qat/qat_asym.c @@ -1031,7 +1031,8 @@ asym_set_input(struct icp_qat_fw_pke_request *qat_req, static int qat_asym_build_request(void *in_op, uint8_t *out_msg, void *op_cookie, __rte_unused uint64_t *opaque, - __rte_unused enum qat_device_gen qat_dev_gen) + __rte_unused enum qat_device_gen qat_dev_gen, + __rte_unused struct qat_options options) { struct rte_crypto_op *op = (struct rte_crypto_op *)in_op; struct rte_crypto_asym_op *asym_op = op->asym; @@ -1594,7 +1595,7 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev) atoi(cmdline); } - if (qat_pci_dev->slice_map & ICP_ACCEL_MASK_PKE_SLICE) { + if (qat_pci_dev->options.slice_map & ICP_ACCEL_MASK_PKE_SLICE) { QAT_LOG(ERR, "Device %s does not support PKE slice", name); rte_cryptodev_pmd_destroy(cryptodev); @@ -1604,7 +1605,7 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev) } if (gen_dev_ops->get_capabilities(internals, - capa_memz_name, qat_pci_dev->slice_map) < 0) { + capa_memz_name, qat_pci_dev->options.slice_map) < 0) { QAT_LOG(ERR, "Device cannot obtain capabilities, destroying PMD for %s", name); diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c index c530496786..cd77a065b7 100644 --- a/drivers/crypto/qat/qat_sym.c +++ b/drivers/crypto/qat/qat_sym.c @@ -71,7 +71,8 @@ qat_sym_init_op_cookie(void *op_cookie) static __rte_always_inline int qat_sym_build_request(void *in_op, uint8_t *out_msg, - void *op_cookie, uint64_t *opaque, enum qat_device_gen dev_gen) + void *op_cookie, uint64_t *opaque, enum qat_device_gen dev_gen, + __rte_unused struct qat_options options) { struct rte_crypto_op *op = (struct rte_crypto_op *)in_op; uintptr_t sess = (uintptr_t)opaque[0]; @@ -317,7 +318,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev) internals->cipher_crc_offload_enable = atoi(cmdline); if (gen_dev_ops->get_capabilities(internals, - capa_memz_name, qat_pci_dev->slice_map) < 0) { + capa_memz_name, qat_pci_dev->options.slice_map) < 0) { QAT_LOG(ERR, "Device cannot obtain capabilities, destroying PMD for %s", name); diff --git a/drivers/crypto/qat/qat_sym_session.c b/drivers/crypto/qat/qat_sym_session.c index 9e2dba5423..eb267db424 100644 --- a/drivers/crypto/qat/qat_sym_session.c +++ b/drivers/crypto/qat/qat_sym_session.c @@ -422,7 +422,7 @@ qat_sym_session_configure_cipher(struct rte_cryptodev *dev, goto error_out; } session->qat_mode = ICP_QAT_HW_CIPHER_ECB_MODE; - if (internals->qat_dev->has_wireless_slice) + if (internals->qat_dev->options.has_wireless_slice) is_wireless = 1; break; case RTE_CRYPTO_CIPHER_NULL: @@ -543,7 +543,7 @@ qat_sym_session_configure_cipher(struct rte_cryptodev *dev, session->qat_mode = ICP_QAT_HW_CIPHER_ECB_MODE; if (cipher_xform->key.length == ICP_QAT_HW_ZUC_256_KEY_SZ) session->is_zuc256 = 1; - if (internals->qat_dev->has_wireless_slice) + if (internals->qat_dev->options.has_wireless_slice) is_wireless = 1; break; case RTE_CRYPTO_CIPHER_AES_XTS: @@ -933,7 +933,7 @@ qat_sym_session_configure_auth(struct rte_cryptodev *dev, break; case RTE_CRYPTO_AUTH_AES_CMAC: session->aes_cmac = 1; - if (!internals->qat_dev->has_wireless_slice) { + if (!internals->qat_dev->options.has_wireless_slice) { session->qat_hash_alg = ICP_QAT_HW_AUTH_ALGO_AES_XCBC_MAC; break; } @@ -968,7 +968,7 @@ qat_sym_session_configure_auth(struct rte_cryptodev *dev, break; case RTE_CRYPTO_AUTH_SNOW3G_UIA2: session->qat_hash_alg = ICP_QAT_HW_AUTH_ALGO_SNOW_3G_UIA2; - if (internals->qat_dev->has_wireless_slice) { + if (internals->qat_dev->options.has_wireless_slice) { is_wireless = 1; session->is_wireless = 1; hash_flag = 1 << ICP_QAT_FW_AUTH_HDR_FLAG_SNOW3G_UIA2_BITPOS; @@ -1012,7 +1012,7 @@ qat_sym_session_configure_auth(struct rte_cryptodev *dev, QAT_LOG(ERR, "Invalid key length: %d", key_length); return -ENOTSUP; } - if (internals->qat_dev->has_wireless_slice) { + if (internals->qat_dev->options.has_wireless_slice) { is_wireless = 1; session->is_wireless = 1; hash_flag = 1 << ICP_QAT_FW_AUTH_HDR_FLAG_ZUC_EIA3_BITPOS;