From patchwork Sun Sep 17 15:42:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadiusz Kusztal X-Patchwork-Id: 131511 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 B6E59425C3; Sun, 17 Sep 2023 17:43:10 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3DD0940298; Sun, 17 Sep 2023 17:43:10 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id D623E4025E for ; Sun, 17 Sep 2023 17:43:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1694965388; x=1726501388; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=knjzIhMw3gLweVygd9e6OFCBHUqV3PlJzx/KYV80yAM=; b=E2YsXtPTuJEW/TNxVc1ho5cUH9FFO+k2klENFdfkpjtfleJe+yywtuRi hsgrWw7PZK5DY1nLxF3MM2iEDQFtdNoa6XydbWWoylHGHOsKF9FR9toMQ vQjE88t2AC2LpLpYr+TU0BrBMqGUsnKoyodZuiB1aWG0pbbeMCfMQO9jB 5Uhe2m0gAyFWF/uTJeLo3ArCr8eyPQtXhqgFuDdlkzhrzpG/vYUktzDWy Qk0MmBff+yu4iJPAGB+b8qXj1XVC60ZePgVCR40/GVB6Uoc8+bRl1011P re48TJMRpbllH6h95ZetdqINGMaaxYXRCX4ZsywEHMBFqTYoVCVpHRFmW w==; X-IronPort-AV: E=McAfee;i="6600,9927,10836"; a="359753733" X-IronPort-AV: E=Sophos;i="6.02,154,1688454000"; d="scan'208";a="359753733" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Sep 2023 08:43:06 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10836"; a="919194410" X-IronPort-AV: E=Sophos;i="6.02,154,1688454000"; d="scan'208";a="919194410" Received: from silpixa00401012.ir.intel.com ([10.243.23.140]) by orsmga005.jf.intel.com with ESMTP; 17 Sep 2023 08:43:04 -0700 From: Arkadiusz Kusztal To: dev@dpdk.org Cc: gakhil@marvell.com, kai.ji@intel.com, ciara.power@intel.com, Arkadiusz Kusztal Subject: [PATCH 1/3] common/qat: limit configuration to the primary process Date: Sun, 17 Sep 2023 15:42:56 +0000 Message-Id: <20230917154258.3509805-1-arkadiuszx.kusztal@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 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 change prevents certain configuration functions from being called by the secondary process. Signed-off-by: Arkadiusz Kusztal --- drivers/common/qat/qat_device.c | 113 +++++++++++++++++++++++----------------- drivers/common/qat/qat_device.h | 2 + 2 files changed, 66 insertions(+), 49 deletions(-) diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c index 2675f0d9d1..93aef9aeb1 100644 --- a/drivers/common/qat/qat_device.c +++ b/drivers/common/qat/qat_device.c @@ -13,6 +13,15 @@ #include "adf_pf2vf_msg.h" #include "qat_pf2vf.h" +#define NOT_NULL(arg, func, msg, ...) \ + do { \ + if (arg == NULL) { \ + QAT_LOG(ERR, \ + msg, ##__VA_ARGS__); \ + func; \ + } \ + } while (0) + /* Hardware device information per generation */ struct qat_gen_hw_data qat_gen_config[QAT_N_GENS]; struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[QAT_N_GENS]; @@ -170,6 +179,28 @@ qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param } } +static enum qat_device_gen +pick_gen(struct rte_pci_device *pci_dev) +{ + switch (pci_dev->id.device_id) { + case 0x0443: + return QAT_GEN1; + case 0x37c9: + case 0x19e3: + case 0x6f55: + case 0x18ef: + return QAT_GEN2; + case 0x18a1: + return QAT_GEN3; + case 0x4941: + case 0x4943: + return QAT_GEN4; + default: + QAT_LOG(ERR, "Invalid dev_id, can't determine generation"); + return QAT_N_GENS; + } +} + struct qat_pci_device * qat_pci_device_allocate(struct rte_pci_device *pci_dev, struct qat_dev_cmd_param *qat_dev_cmd_param) @@ -187,24 +218,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev, rte_pci_device_name(&pci_dev->addr, name, sizeof(name)); snprintf(name+strlen(name), QAT_DEV_NAME_MAX_LEN-strlen(name), "_qat"); - switch (pci_dev->id.device_id) { - case 0x0443: - qat_dev_gen = QAT_GEN1; - break; - case 0x37c9: - case 0x19e3: - case 0x6f55: - case 0x18ef: - qat_dev_gen = QAT_GEN2; - break; - case 0x18a1: - qat_dev_gen = QAT_GEN3; - break; - case 0x4941: - case 0x4943: - qat_dev_gen = QAT_GEN4; - break; - default: + qat_dev_gen = pick_gen(pci_dev); + if (qat_dev_gen == QAT_N_GENS) { QAT_LOG(ERR, "Invalid dev_id, can't determine generation"); return NULL; } @@ -261,20 +276,15 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev, qat_dev->dev_private = qat_dev + 1; strlcpy(qat_dev->name, name, QAT_DEV_NAME_MAX_LEN); qat_dev->qat_dev_id = qat_dev_id; - qat_pci_devs[qat_dev_id].pci_dev = pci_dev; qat_dev->qat_dev_gen = qat_dev_gen; ops_hw = qat_dev_hw_spec[qat_dev->qat_dev_gen]; - if (ops_hw->qat_dev_get_misc_bar == NULL) { - QAT_LOG(ERR, "qat_dev_get_misc_bar function pointer not set"); - rte_memzone_free(qat_dev_mz); - return NULL; - } + NOT_NULL(ops_hw->qat_dev_reset_ring_pairs, goto error, + "QAT internal error! qat_dev_get_misc_bar function not set"); if (ops_hw->qat_dev_get_misc_bar(&mem_resource, pci_dev) == 0) { if (mem_resource->addr == NULL) { QAT_LOG(ERR, "QAT cannot get access to VF misc bar"); - rte_memzone_free(qat_dev_mz); - return NULL; + goto error; } qat_dev->misc_bar_io_addr = mem_resource->addr; } else @@ -287,22 +297,45 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev, QAT_LOG(ERR, "Cannot acquire ring configuration for QAT_%d", qat_dev_id); - rte_memzone_free(qat_dev_mz); - return NULL; + goto error; + } + NOT_NULL(ops_hw->qat_dev_reset_ring_pairs, goto error, + "QAT internal error! Reset ring pairs function not set, gen : %d", + qat_dev_gen); + if (ops_hw->qat_dev_reset_ring_pairs(qat_dev)) { + QAT_LOG(ERR, + "Cannot reset ring pairs, does pf driver supports pf2vf comms?" + ); + goto error; } + NOT_NULL(ops_hw->qat_dev_get_slice_map, goto error, + "QAT internal error! Reset ring pairs function not set, gen : %d", + qat_dev_gen); + if (ops_hw->qat_dev_get_slice_map(&qat_dev->slice_map, pci_dev) < 0) { + RTE_LOG(ERR, EAL, + "Cannot read slice configuration\n"); + goto error; + } + rte_spinlock_init(&qat_dev->arb_csr_lock); /* No errors when allocating, attach memzone with * qat_dev to list of devices */ qat_pci_devs[qat_dev_id].mz = qat_dev_mz; - - rte_spinlock_init(&qat_dev->arb_csr_lock); + qat_pci_devs[qat_dev_id].pci_dev = pci_dev; qat_nb_pci_devices++; QAT_LOG(DEBUG, "QAT device %d found, name %s, total QATs %d", qat_dev->qat_dev_id, qat_dev->name, qat_nb_pci_devices); return qat_dev; +error: + if (rte_memzone_free(qat_dev_mz)) { + QAT_LOG(DEBUG, + "QAT internal error! Trying to free already allocated memzone: %s", + qat_dev_mz->name); + } + return NULL; } static int @@ -367,9 +400,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, { int sym_ret = 0, asym_ret = 0, comp_ret = 0; int num_pmds_created = 0; - uint32_t capa = 0; struct qat_pci_device *qat_pci_dev; - struct qat_dev_hw_spec_funcs *ops_hw; struct qat_dev_cmd_param qat_dev_cmd_param[] = { { QAT_LEGACY_CAPA, 0 }, { SYM_ENQ_THRESHOLD_NAME, 0 }, @@ -389,23 +420,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, if (qat_pci_dev == NULL) return -ENODEV; - ops_hw = qat_dev_hw_spec[qat_pci_dev->qat_dev_gen]; - if (ops_hw->qat_dev_reset_ring_pairs == NULL) - return -ENOTSUP; - if (ops_hw->qat_dev_reset_ring_pairs(qat_pci_dev)) { - QAT_LOG(ERR, - "Cannot reset ring pairs, does pf driver supports pf2vf comms?" - ); - return -ENODEV; - } - - if (ops_hw->qat_dev_get_slice_map(&capa, pci_dev) < 0) { - RTE_LOG(ERR, EAL, - "Cannot read slice configuration\n"); - return -1; - } - qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = capa; - + qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = qat_pci_dev->slice_map; sym_ret = qat_sym_dev_create(qat_pci_dev, qat_dev_cmd_param); if (sym_ret == 0) { num_pmds_created++; diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h index afee83017b..23d7f54b61 100644 --- a/drivers/common/qat/qat_device.h +++ b/drivers/common/qat/qat_device.h @@ -133,6 +133,8 @@ struct qat_pci_device { /**< Address of misc bar */ void *dev_private; /**< Per generation specific information */ + uint32_t slice_map; + /**< QAT slice map */ }; struct qat_gen_hw_data { From patchwork Sun Sep 17 15:42:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadiusz Kusztal X-Patchwork-Id: 131512 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 00DA3425C3; Sun, 17 Sep 2023 17:43:20 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D2351402E1; Sun, 17 Sep 2023 17:43:12 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id C15B14025E for ; Sun, 17 Sep 2023 17:43:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1694965389; x=1726501389; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=KBaaX8hJU71/rDSlcs0mzC6Jmx7Ias+YKOxtfW7e7TU=; b=muQYEGTULopqbx94f1CFY1urWMXw/3i9RJdpCBd4wLK+F2Pce7eNL68F yRKcT0a3d3JzlMZWYk7wzYwdwMC/6ao3fLIsxDn4cRD0sLR1lLUY08pXm 5UFYSybjee+EoWAPsdP/zlpEnk1bTu8IjAkN8w4pxropBKqLo7+4RES6X 6BNB+xQRt2+/l7Y8s1YLDcBfvBttxPpcfrC2GDJ2wjxJI03YZmOF9YZIQ WnMmo4zozDl6sB1pCfBLoS5XNaKTxYTTQvslBH2IIA9wC9r0sqE83t1uU wThCeqMUl+2KdrgGVQiqoshVsEPWRic6g4nUt7IaLl5/f1t4CKyE+qqm+ A==; X-IronPort-AV: E=McAfee;i="6600,9927,10836"; a="359753739" X-IronPort-AV: E=Sophos;i="6.02,154,1688454000"; d="scan'208";a="359753739" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Sep 2023 08:43:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10836"; a="919194424" X-IronPort-AV: E=Sophos;i="6.02,154,1688454000"; d="scan'208";a="919194424" Received: from silpixa00401012.ir.intel.com ([10.243.23.140]) by orsmga005.jf.intel.com with ESMTP; 17 Sep 2023 08:43:07 -0700 From: Arkadiusz Kusztal To: dev@dpdk.org Cc: gakhil@marvell.com, kai.ji@intel.com, ciara.power@intel.com, Arkadiusz Kusztal Subject: [PATCH 2/3] common/qat: move command line params to the device struct Date: Sun, 17 Sep 2023 15:42:57 +0000 Message-Id: <20230917154258.3509805-2-arkadiuszx.kusztal@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230917154258.3509805-1-arkadiuszx.kusztal@intel.com> References: <20230917154258.3509805-1-arkadiuszx.kusztal@intel.com> MIME-Version: 1.0 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 Command line parameters was moved to the device struct. Signed-off-by: Arkadiusz Kusztal Acked-by: Ciara Power --- drivers/common/qat/qat_device.c | 54 ++++++++++++++++++------------------- drivers/common/qat/qat_device.h | 35 ++++++++++++------------ drivers/compress/qat/qat_comp_pmd.c | 9 +++---- drivers/compress/qat/qat_comp_pmd.h | 3 +-- drivers/crypto/qat/qat_asym.c | 13 +++++---- drivers/crypto/qat/qat_sym.c | 23 ++++++++-------- 6 files changed, 66 insertions(+), 71 deletions(-) diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c index 93aef9aeb1..d9604e666d 100644 --- a/drivers/common/qat/qat_device.c +++ b/drivers/common/qat/qat_device.c @@ -22,6 +22,16 @@ } \ } while (0) +const char *cmd_arg_strings[] = { + [QAT_LEGACY_CAPA_POS] = "qat_legacy_capa", + [SYM_ENQ_THRESHOLD_POS] = "qat_sym_enq_threshold", + [ASYM_ENQ_THRESHOLD_POS] = "qat_asym_enq_threshold", + [COMP_ENQ_THRESHOLD_POS] = "qat_comp_enq_threshold", + [SYM_CIPHER_CRC_ENABLE_POS] = "qat_sym_cipher_crc_enable", + [QAT_CMD_SLICE_MAP_POS] = "qat_cmd_slice_disable", + [QAT_CMD_SLICE_MAP_POS + 1] = NULL, +}; + /* Hardware device information per generation */ struct qat_gen_hw_data qat_gen_config[QAT_N_GENS]; struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[QAT_N_GENS]; @@ -117,7 +127,7 @@ qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev) static void qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param - *qat_dev_cmd_param) + *cmd_line_param) { int i = 0; const char *param; @@ -125,7 +135,7 @@ qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param while (1) { char value_str[4] = { }; - param = qat_dev_cmd_param[i].name; + param = cmd_arg_strings[i]; if (param == NULL) return; long value = 0; @@ -174,7 +184,7 @@ qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param param, value); } } - qat_dev_cmd_param[i].val = value; + cmd_line_param[i].val = value; i++; } } @@ -201,9 +211,8 @@ pick_gen(struct rte_pci_device *pci_dev) } } -struct qat_pci_device * -qat_pci_device_allocate(struct rte_pci_device *pci_dev, - struct qat_dev_cmd_param *qat_dev_cmd_param) +static struct qat_pci_device * +qat_pci_device_allocate(struct rte_pci_device *pci_dev) { struct qat_pci_device *qat_dev; enum qat_device_gen qat_dev_gen; @@ -291,7 +300,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev, qat_dev->misc_bar_io_addr = NULL; if (devargs && devargs->drv_str) - qat_dev_parse_cmd(devargs->drv_str, qat_dev_cmd_param); + qat_dev_parse_cmd(devargs->drv_str, qat_dev->cmd_line_param); if (qat_read_qp_config(qat_dev)) { QAT_LOG(ERR, @@ -311,7 +320,9 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev, NOT_NULL(ops_hw->qat_dev_get_slice_map, goto error, "QAT internal error! Reset ring pairs 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->cmd_line_param[QAT_CMD_SLICE_MAP_POS].val, + pci_dev) < 0) { RTE_LOG(ERR, EAL, "Cannot read slice configuration\n"); goto error; @@ -401,27 +412,17 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, int sym_ret = 0, asym_ret = 0, comp_ret = 0; int num_pmds_created = 0; struct qat_pci_device *qat_pci_dev; - struct qat_dev_cmd_param qat_dev_cmd_param[] = { - { QAT_LEGACY_CAPA, 0 }, - { SYM_ENQ_THRESHOLD_NAME, 0 }, - { ASYM_ENQ_THRESHOLD_NAME, 0 }, - { COMP_ENQ_THRESHOLD_NAME, 0 }, - { SYM_CIPHER_CRC_ENABLE_NAME, 0 }, - [QAT_CMD_SLICE_MAP_POS] = { QAT_CMD_SLICE_MAP, 0}, - { NULL, 0 }, - }; QAT_LOG(DEBUG, "Found QAT device at %02x:%02x.%x", pci_dev->addr.bus, pci_dev->addr.devid, pci_dev->addr.function); - qat_pci_dev = qat_pci_device_allocate(pci_dev, qat_dev_cmd_param); + qat_pci_dev = qat_pci_device_allocate(pci_dev); if (qat_pci_dev == NULL) return -ENODEV; - qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = qat_pci_dev->slice_map; - sym_ret = qat_sym_dev_create(qat_pci_dev, qat_dev_cmd_param); + sym_ret = qat_sym_dev_create(qat_pci_dev); if (sym_ret == 0) { num_pmds_created++; } @@ -430,7 +431,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, "Failed to create QAT SYM PMD on device %s", qat_pci_dev->name); - comp_ret = qat_comp_dev_create(qat_pci_dev, qat_dev_cmd_param); + comp_ret = qat_comp_dev_create(qat_pci_dev); if (comp_ret == 0) num_pmds_created++; else @@ -438,7 +439,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, "Failed to create QAT COMP PMD on device %s", qat_pci_dev->name); - asym_ret = qat_asym_dev_create(qat_pci_dev, qat_dev_cmd_param); + asym_ret = qat_asym_dev_create(qat_pci_dev); if (asym_ret == 0) num_pmds_created++; else @@ -475,15 +476,13 @@ static struct rte_pci_driver rte_qat_pmd = { }; __rte_weak int -qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused, - struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused) +qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused) { return 0; } __rte_weak int -qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused, - const struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused) +qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused) { return 0; } @@ -501,8 +500,7 @@ qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused) } __rte_weak int -qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused, - struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused) +qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused) { return 0; } diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h index 23d7f54b61..dcb5a42c89 100644 --- a/drivers/common/qat/qat_device.h +++ b/drivers/common/qat/qat_device.h @@ -17,14 +17,21 @@ #define QAT_DEV_NAME_MAX_LEN 64 -#define QAT_LEGACY_CAPA "qat_legacy_capa" +#define QAT_LEGACY_CAPA_NAME "qat_legacy_capa" #define SYM_ENQ_THRESHOLD_NAME "qat_sym_enq_threshold" #define ASYM_ENQ_THRESHOLD_NAME "qat_asym_enq_threshold" #define COMP_ENQ_THRESHOLD_NAME "qat_comp_enq_threshold" #define SYM_CIPHER_CRC_ENABLE_NAME "qat_sym_cipher_crc_enable" -#define QAT_CMD_SLICE_MAP "qat_cmd_slice_disable" -#define QAT_CMD_SLICE_MAP_POS 5 -#define MAX_QP_THRESHOLD_SIZE 32 +#define QAT_CMD_SLICE_MAP_NAME "qat_cmd_slice_disable" +#define QAT_LEGACY_CAPA_POS 0 +#define SYM_ENQ_THRESHOLD_POS 1 +#define ASYM_ENQ_THRESHOLD_POS 2 +#define COMP_ENQ_THRESHOLD_POS 3 +#define SYM_CIPHER_CRC_ENABLE_POS 4 +#define QAT_CMD_SLICE_MAP_POS 5 +#define MAX_QP_THRESHOLD_SIZE 32 + +extern const char *cmd_arg_strings[]; /** * Function prototypes for GENx specific device operations. @@ -53,8 +60,7 @@ struct qat_dev_hw_spec_funcs { extern struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[]; struct qat_dev_cmd_param { - const char *name; - uint16_t val; + uint32_t val; }; struct qat_device_info { @@ -133,8 +139,8 @@ struct qat_pci_device { /**< Address of misc bar */ void *dev_private; /**< Per generation specific information */ - uint32_t slice_map; - /**< QAT slice map */ + struct qat_dev_cmd_param cmd_line_param[QAT_CMD_SLICE_MAP_POS + 1]; + /**< Command line parameters values */ }; struct qat_gen_hw_data { @@ -155,20 +161,14 @@ struct qat_pf2vf_dev { extern struct qat_gen_hw_data qat_gen_config[]; struct qat_pci_device * -qat_pci_device_allocate(struct rte_pci_device *pci_dev, - struct qat_dev_cmd_param *qat_dev_cmd_param); - -struct qat_pci_device * qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev); /* declaration needed for weak functions */ int -qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused, - struct qat_dev_cmd_param *qat_dev_cmd_param); +qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused); int -qat_asym_dev_create(struct qat_pci_device *qat_pci_dev, - const struct qat_dev_cmd_param *qat_dev_cmd_param); +qat_asym_dev_create(struct qat_pci_device *qat_pci_dev); int qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused); @@ -177,8 +177,7 @@ int qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused); int -qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused, - struct qat_dev_cmd_param *qat_dev_cmd_param); +qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused); int qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused); diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c index 6fb8cf69be..cc91edca3a 100644 --- a/drivers/compress/qat/qat_comp_pmd.c +++ b/drivers/compress/qat/qat_comp_pmd.c @@ -663,8 +663,7 @@ static const struct rte_driver compdev_qat_driver = { }; int -qat_comp_dev_create(struct qat_pci_device *qat_pci_dev, - struct qat_dev_cmd_param *qat_dev_cmd_param) +qat_comp_dev_create(struct qat_pci_device *qat_pci_dev) { int i = 0; struct qat_device_info *qat_dev_instance = @@ -759,11 +758,11 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev, comp_dev->qat_dev_capabilities = comp_dev->capa_mz->addr; while (1) { - if (qat_dev_cmd_param[i].name == NULL) + if (cmd_arg_strings[i] == NULL) break; - if (!strcmp(qat_dev_cmd_param[i].name, COMP_ENQ_THRESHOLD_NAME)) + if (!strcmp(cmd_arg_strings[i], COMP_ENQ_THRESHOLD_NAME)) comp_dev->min_enq_burst_threshold = - qat_dev_cmd_param[i].val; + qat_pci_dev->cmd_line_param[i].val; i++; } qat_pci_dev->comp_dev = comp_dev; diff --git a/drivers/compress/qat/qat_comp_pmd.h b/drivers/compress/qat/qat_comp_pmd.h index 3c8682a768..1f5b0facf7 100644 --- a/drivers/compress/qat/qat_comp_pmd.h +++ b/drivers/compress/qat/qat_comp_pmd.h @@ -107,8 +107,7 @@ qat_comp_setup_inter_buffers(struct qat_comp_dev_private *comp_dev, uint32_t buff_size); int -qat_comp_dev_create(struct qat_pci_device *qat_pci_dev, - struct qat_dev_cmd_param *qat_dev_cmd_param); +qat_comp_dev_create(struct qat_pci_device *qat_pci_dev); int qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev); diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c index 7abd513423..2b54b63e8f 100644 --- a/drivers/crypto/qat/qat_asym.c +++ b/drivers/crypto/qat/qat_asym.c @@ -1415,8 +1415,7 @@ qat_asym_init_op_cookie(void *op_cookie) } int -qat_asym_dev_create(struct qat_pci_device *qat_pci_dev, - const struct qat_dev_cmd_param *qat_dev_cmd_param) +qat_asym_dev_create(struct qat_pci_device *qat_pci_dev) { struct qat_cryptodev_private *internals; struct rte_cryptodev *cryptodev; @@ -1490,13 +1489,13 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev, internals->dev_id = cryptodev->data->dev_id; while (1) { - if (qat_dev_cmd_param[i].name == NULL) + if (cmd_arg_strings[i] == NULL) break; - if (!strcmp(qat_dev_cmd_param[i].name, ASYM_ENQ_THRESHOLD_NAME)) + if (!strcmp(cmd_arg_strings[i], ASYM_ENQ_THRESHOLD_NAME)) internals->min_enq_burst_threshold = - qat_dev_cmd_param[i].val; - if (!strcmp(qat_dev_cmd_param[i].name, QAT_CMD_SLICE_MAP)) - slice_map = qat_dev_cmd_param[i].val; + qat_pci_dev->cmd_line_param[i].val; + if (!strcmp(cmd_arg_strings[i], QAT_CMD_SLICE_MAP_NAME)) + slice_map = qat_pci_dev->cmd_line_param[i].val; i++; } diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c index 936c2615e4..c06b7120c0 100644 --- a/drivers/crypto/qat/qat_sym.c +++ b/drivers/crypto/qat/qat_sym.c @@ -15,6 +15,8 @@ #include "qat_crypto.h" #include "qat_qp.h" +extern const char *cmd_arg_strings[]; + uint8_t qat_sym_driver_id; int qat_legacy_capa; @@ -182,8 +184,7 @@ qat_sym_dequeue_burst(void *qp, struct rte_crypto_op **ops, } int -qat_sym_dev_create(struct qat_pci_device *qat_pci_dev, - struct qat_dev_cmd_param *qat_dev_cmd_param) +qat_sym_dev_create(struct qat_pci_device *qat_pci_dev) { int i = 0, ret = 0; uint16_t slice_map = 0; @@ -277,18 +278,18 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev, internals->dev_id = cryptodev->data->dev_id; - while (qat_dev_cmd_param[i].name != NULL) { - if (!strcmp(qat_dev_cmd_param[i].name, SYM_ENQ_THRESHOLD_NAME)) + while (cmd_arg_strings[i] != NULL) { + if (!strcmp(cmd_arg_strings[i], SYM_ENQ_THRESHOLD_NAME)) internals->min_enq_burst_threshold = - qat_dev_cmd_param[i].val; - if (!strcmp(qat_dev_cmd_param[i].name, + qat_pci_dev->cmd_line_param[i].val; + if (!strcmp(cmd_arg_strings[i], SYM_CIPHER_CRC_ENABLE_NAME)) internals->cipher_crc_offload_enable = - qat_dev_cmd_param[i].val; - if (!strcmp(qat_dev_cmd_param[i].name, QAT_LEGACY_CAPA)) - qat_legacy_capa = qat_dev_cmd_param[i].val; - if (!strcmp(qat_dev_cmd_param[i].name, QAT_CMD_SLICE_MAP)) - slice_map = qat_dev_cmd_param[i].val; + qat_pci_dev->cmd_line_param[i].val; + if (!strcmp(cmd_arg_strings[i], QAT_LEGACY_CAPA_NAME)) + qat_legacy_capa = qat_pci_dev->cmd_line_param[i].val; + if (!strcmp(cmd_arg_strings[i], QAT_CMD_SLICE_MAP_NAME)) + slice_map = qat_pci_dev->cmd_line_param[i].val; i++; } From patchwork Sun Sep 17 15:42:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadiusz Kusztal X-Patchwork-Id: 131513 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 F059A425C3; Sun, 17 Sep 2023 17:43:26 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 11EBA402D7; Sun, 17 Sep 2023 17:43:15 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id CB8C0402DE for ; Sun, 17 Sep 2023 17:43:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1694965392; x=1726501392; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=W96FWrg6uAHiWYNOPQmAaQoI7FiinWa9NpcZh2ILAtA=; b=Rj7arrgCqZU86EEdyYuDGckSIS51qCJtlu30GWFAql4hLO7giiPSBQ7O zeuCbyW/UCcQDS8W0G5PlO9aizsfD1Dj5tlWJ9nwr5MS+woNVx38nZpWe SXO1q6jv9Gd6+3fsT6Y5e3jgLlIw+Mr/GI/NdrSJURETZhNjDUA5MFcmF 8EqwZYYrNVmdK2JEhx8b4unhE06f9fPqwA1o/HTIVR+zlRajZhQ23wajx d0vCms0rUpKF2TF/CRMwIBta6g6s83LFsxb5yOqT0HaTN7ONDsb5Cp04u 6Kf7arp4Y3+MfCWeI+wuexMnQ+tYi3w2cxcNjdans+z0NF7cVZLsohWrs Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10836"; a="359753741" X-IronPort-AV: E=Sophos;i="6.02,154,1688454000"; d="scan'208";a="359753741" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Sep 2023 08:43:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10836"; a="919194434" X-IronPort-AV: E=Sophos;i="6.02,154,1688454000"; d="scan'208";a="919194434" Received: from silpixa00401012.ir.intel.com ([10.243.23.140]) by orsmga005.jf.intel.com with ESMTP; 17 Sep 2023 08:43:10 -0700 From: Arkadiusz Kusztal To: dev@dpdk.org Cc: gakhil@marvell.com, kai.ji@intel.com, ciara.power@intel.com, Arkadiusz Kusztal Subject: [PATCH 3/3] common/qat: decouple pmds from the common code Date: Sun, 17 Sep 2023 15:42:58 +0000 Message-Id: <20230917154258.3509805-3-arkadiuszx.kusztal@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230917154258.3509805-1-arkadiuszx.kusztal@intel.com> References: <20230917154258.3509805-1-arkadiuszx.kusztal@intel.com> MIME-Version: 1.0 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 Service specific functions were moved to services files. Signed-off-by: Arkadiusz Kusztal Acked-by: Ciara Power --- drivers/common/qat/dev/qat_dev_gen1.c | 1 + drivers/common/qat/dev/qat_dev_gen2.c | 1 + drivers/common/qat/dev/qat_dev_gen3.c | 2 + drivers/common/qat/dev/qat_dev_gen4.c | 1 + drivers/common/qat/qat_device.c | 128 +++++++++------------------ drivers/common/qat/qat_device.h | 52 +++-------- drivers/common/qat/qat_pf2vf.c | 1 + drivers/common/qat/qat_qp.c | 2 - drivers/compress/qat/dev/qat_comp_pmd_gen1.c | 1 + drivers/compress/qat/dev/qat_comp_pmd_gen2.c | 1 + drivers/compress/qat/dev/qat_comp_pmd_gen3.c | 1 + drivers/compress/qat/dev/qat_comp_pmd_gen4.c | 1 + drivers/compress/qat/qat_comp_pmd.c | 44 +++++---- drivers/compress/qat/qat_comp_pmd.h | 7 -- drivers/crypto/qat/qat_asym.c | 30 +++++-- drivers/crypto/qat/qat_sym.c | 28 ++++-- 16 files changed, 138 insertions(+), 163 deletions(-) diff --git a/drivers/common/qat/dev/qat_dev_gen1.c b/drivers/common/qat/dev/qat_dev_gen1.c index dd2e878e90..5a6ea40906 100644 --- a/drivers/common/qat/dev/qat_dev_gen1.c +++ b/drivers/common/qat/dev/qat_dev_gen1.c @@ -4,6 +4,7 @@ #include "qat_device.h" #include "qat_qp.h" +#include "qat_logs.h" #include "adf_transport_access_macros.h" #include "qat_dev_gens.h" diff --git a/drivers/common/qat/dev/qat_dev_gen2.c b/drivers/common/qat/dev/qat_dev_gen2.c index 061dfdb698..62be4d0681 100644 --- a/drivers/common/qat/dev/qat_dev_gen2.c +++ b/drivers/common/qat/dev/qat_dev_gen2.c @@ -4,6 +4,7 @@ #include "qat_device.h" #include "qat_qp.h" +#include "qat_logs.h" #include "adf_transport_access_macros.h" #include "qat_dev_gens.h" diff --git a/drivers/common/qat/dev/qat_dev_gen3.c b/drivers/common/qat/dev/qat_dev_gen3.c index f01b98ff86..f25c55e030 100644 --- a/drivers/common/qat/dev/qat_dev_gen3.c +++ b/drivers/common/qat/dev/qat_dev_gen3.c @@ -4,8 +4,10 @@ #include "qat_device.h" #include "qat_qp.h" +#include "qat_logs.h" #include "adf_transport_access_macros.h" #include "qat_dev_gens.h" +#include "icp_qat_hw.h" #include diff --git a/drivers/common/qat/dev/qat_dev_gen4.c b/drivers/common/qat/dev/qat_dev_gen4.c index 1ce262f715..67f89be0e2 100644 --- a/drivers/common/qat/dev/qat_dev_gen4.c +++ b/drivers/common/qat/dev/qat_dev_gen4.c @@ -7,6 +7,7 @@ #include "qat_device.h" #include "qat_qp.h" +#include "qat_logs.h" #include "adf_transport_access_macros_gen4vf.h" #include "adf_pf2vf_msg.h" #include "qat_pf2vf.h" diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c index d9604e666d..81d9014764 100644 --- a/drivers/common/qat/qat_device.c +++ b/drivers/common/qat/qat_device.c @@ -2,16 +2,11 @@ * Copyright(c) 2018-2022 Intel Corporation */ -#include #include #include #include "qat_device.h" -#include "adf_transport_access_macros.h" -#include "qat_sym.h" -#include "qat_comp_pmd.h" -#include "adf_pf2vf_msg.h" -#include "qat_pf2vf.h" +#include "qat_logs.h" #define NOT_NULL(arg, func, msg, ...) \ do { \ @@ -32,14 +27,30 @@ const char *cmd_arg_strings[] = { [QAT_CMD_SLICE_MAP_POS + 1] = NULL, }; +#define MAX_NO_OF_SERVICES 16 + /* Hardware device information per generation */ struct qat_gen_hw_data qat_gen_config[QAT_N_GENS]; struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[QAT_N_GENS]; +int qat_dev_services_no; +struct qat_dev_service qat_dev_service[MAX_NO_OF_SERVICES]; /* per-process array of device data */ struct qat_device_info qat_pci_devs[RTE_PMD_QAT_MAX_PCI_DEVICES]; static int qat_nb_pci_devices; +int +get_service_pos(const char *name) +{ + int i; + + for (i = 0; i < qat_dev_services_no; i++) { + if (strcmp(name, qat_dev_service[i].name) == 0) + return i; + } + return -1; +} + /* * The set of PCI devices this driver supports */ @@ -270,7 +281,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev) return NULL; } - qat_dev_size = sizeof(struct qat_pci_device) + extra_size; + qat_dev_size = sizeof(struct qat_pci_device) + sizeof(void *) * + qat_dev_services_no + extra_size; qat_dev_mz = rte_memzone_reserve(name, qat_dev_size, rte_socket_id(), 0); @@ -355,6 +367,7 @@ qat_pci_device_release(struct rte_pci_device *pci_dev) struct qat_pci_device *qat_dev; char name[QAT_DEV_NAME_MAX_LEN]; int busy = 0; + int i; if (pci_dev == NULL) return -EINVAL; @@ -369,20 +382,12 @@ qat_pci_device_release(struct rte_pci_device *pci_dev) /* Check that there are no service devs still on pci device */ if (rte_eal_process_type() == RTE_PROC_PRIMARY) { - if (qat_dev->sym_dev != NULL) { - QAT_LOG(DEBUG, "QAT sym device %s is busy", - name); - busy = 1; - } - if (qat_dev->asym_dev != NULL) { - QAT_LOG(DEBUG, "QAT asym device %s is busy", - name); - busy = 1; - } - if (qat_dev->comp_dev != NULL) { - QAT_LOG(DEBUG, "QAT comp device %s is busy", - name); - busy = 1; + for (i = 0; i < qat_dev_services_no; i++) { + if (qat_dev->pmd[i] != NULL) { + QAT_LOG(DEBUG, "QAT %s device %s is busy", + qat_dev_service[i].name, name); + busy = 1; + } } if (busy) return -EBUSY; @@ -400,16 +405,19 @@ static int qat_pci_dev_destroy(struct qat_pci_device *qat_pci_dev, struct rte_pci_device *pci_dev) { - qat_sym_dev_destroy(qat_pci_dev); - qat_comp_dev_destroy(qat_pci_dev); - qat_asym_dev_destroy(qat_pci_dev); + int i; + + for (i = 0; i < qat_dev_services_no; i++) { + if (qat_dev_service[i].dev_create) + qat_dev_service[i].dev_destroy(qat_pci_dev); + } return qat_pci_device_release(pci_dev); } static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev) { - int sym_ret = 0, asym_ret = 0, comp_ret = 0; + int i, ret = 0; int num_pmds_created = 0; struct qat_pci_device *qat_pci_dev; @@ -422,30 +430,18 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, if (qat_pci_dev == NULL) return -ENODEV; - sym_ret = qat_sym_dev_create(qat_pci_dev); - if (sym_ret == 0) { - num_pmds_created++; + for (i = 0; i < qat_dev_services_no; i++) { + if (qat_dev_service[i].dev_create) { + ret = qat_dev_service[i].dev_create(qat_pci_dev); + if (ret == 0) + num_pmds_created++; + else { + QAT_LOG(WARNING, "Failed to create %s PMD on device %s", + qat_dev_service[i].name, + qat_pci_dev->name); + } + } } - else - QAT_LOG(WARNING, - "Failed to create QAT SYM PMD on device %s", - qat_pci_dev->name); - - comp_ret = qat_comp_dev_create(qat_pci_dev); - if (comp_ret == 0) - num_pmds_created++; - else - QAT_LOG(WARNING, - "Failed to create QAT COMP PMD on device %s", - qat_pci_dev->name); - - asym_ret = qat_asym_dev_create(qat_pci_dev); - if (asym_ret == 0) - num_pmds_created++; - else - QAT_LOG(WARNING, - "Failed to create QAT ASYM PMD on device %s", - qat_pci_dev->name); if (num_pmds_created == 0) qat_pci_dev_destroy(qat_pci_dev, pci_dev); @@ -475,42 +471,6 @@ static struct rte_pci_driver rte_qat_pmd = { .remove = qat_pci_remove }; -__rte_weak int -qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused) -{ - return 0; -} - -__rte_weak int -qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused) -{ - return 0; -} - -__rte_weak int -qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused) -{ - return 0; -} - -__rte_weak int -qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused) -{ - return 0; -} - -__rte_weak int -qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused) -{ - return 0; -} - -__rte_weak int -qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused) -{ - return 0; -} - RTE_PMD_REGISTER_PCI(QAT_PCI_NAME, rte_qat_pmd); RTE_PMD_REGISTER_PCI_TABLE(QAT_PCI_NAME, pci_id_qat_map); RTE_PMD_REGISTER_KMOD_DEP(QAT_PCI_NAME, "* igb_uio | uio_pci_generic | vfio-pci"); diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h index dcb5a42c89..41d658e386 100644 --- a/drivers/common/qat/qat_device.h +++ b/drivers/common/qat/qat_device.h @@ -7,10 +7,7 @@ #include #include "qat_common.h" -#include "qat_logs.h" #include "qat_qp.h" -#include "adf_transport_access_macros.h" -#include "icp_qat_hw.h" #define QAT_DETACHED (0) #define QAT_ATTACHED (1) @@ -63,6 +60,18 @@ struct qat_dev_cmd_param { uint32_t val; }; +struct qat_dev_service { + const char *name; + int (*dev_create)(struct qat_pci_device *qat_pci_dev); + int (*dev_destroy)(struct qat_pci_device *qat_pci_dev); +}; + +extern int qat_dev_services_no; +extern struct qat_dev_service qat_dev_service[]; + +int +get_service_pos(const char *name); + struct qat_device_info { const struct rte_memzone *mz; /**< mz to store the qat_pci_device so it can be @@ -90,9 +99,6 @@ struct qat_device_info { extern struct qat_device_info qat_pci_devs[]; -struct qat_cryptodev_private; -struct qat_comp_dev_private; - /* * This struct holds all the data about a QAT pci device * including data about all services it supports. @@ -117,30 +123,17 @@ struct qat_pci_device { struct qat_qp *qps_in_use[QAT_MAX_SERVICES][ADF_MAX_QPS_ON_ANY_SERVICE]; /**< links to qps set up for each service, index same as on API */ - - /* Data relating to symmetric crypto service */ - struct qat_cryptodev_private *sym_dev; - /**< link back to cryptodev private data */ - int qat_sym_driver_id; /**< Symmetric driver id used by this device */ - - /* Data relating to asymmetric crypto service */ - struct qat_cryptodev_private *asym_dev; - /**< link back to cryptodev private data */ - int qat_asym_driver_id; /**< Symmetric driver id used by this device */ - - /* Data relating to compression service */ - struct qat_comp_dev_private *comp_dev; - /**< link back to compressdev private data */ void *misc_bar_io_addr; /**< Address of misc bar */ void *dev_private; /**< Per generation specific information */ struct qat_dev_cmd_param cmd_line_param[QAT_CMD_SLICE_MAP_POS + 1]; /**< Command line parameters values */ + void *pmd[]; }; struct qat_gen_hw_data { @@ -163,23 +156,4 @@ extern struct qat_gen_hw_data qat_gen_config[]; struct qat_pci_device * qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev); -/* declaration needed for weak functions */ -int -qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused); - -int -qat_asym_dev_create(struct qat_pci_device *qat_pci_dev); - -int -qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused); - -int -qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused); - -int -qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused); - -int -qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused); - #endif /* _QAT_DEVICE_H_ */ diff --git a/drivers/common/qat/qat_pf2vf.c b/drivers/common/qat/qat_pf2vf.c index 621f12fce2..9a1816ae5e 100644 --- a/drivers/common/qat/qat_pf2vf.c +++ b/drivers/common/qat/qat_pf2vf.c @@ -4,6 +4,7 @@ #include "qat_pf2vf.h" #include "adf_pf2vf_msg.h" +#include "qat_logs.h" #include diff --git a/drivers/common/qat/qat_qp.c b/drivers/common/qat/qat_qp.c index f95dd33375..7fe7e3b869 100644 --- a/drivers/common/qat/qat_qp.c +++ b/drivers/common/qat/qat_qp.c @@ -19,8 +19,6 @@ #include "qat_device.h" #include "qat_qp.h" #include "qat_sym.h" -#include "qat_asym.h" -#include "qat_comp.h" #define QAT_CQ_MAX_DEQ_RETRIES 10 diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gen1.c b/drivers/compress/qat/dev/qat_comp_pmd_gen1.c index 3a8484eef1..ec98c4a3ce 100644 --- a/drivers/compress/qat/dev/qat_comp_pmd_gen1.c +++ b/drivers/compress/qat/dev/qat_comp_pmd_gen1.c @@ -8,6 +8,7 @@ #include "qat_comp_pmd.h" #include "qat_comp.h" #include "qat_comp_pmd_gens.h" +#include "qat_logs.h" #define QAT_NUM_INTERM_BUFS_GEN1 12 diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gen2.c b/drivers/compress/qat/dev/qat_comp_pmd_gen2.c index fd6c966f26..5a93d8dc88 100644 --- a/drivers/compress/qat/dev/qat_comp_pmd_gen2.c +++ b/drivers/compress/qat/dev/qat_comp_pmd_gen2.c @@ -4,6 +4,7 @@ #include "qat_comp_pmd.h" #include "qat_comp_pmd_gens.h" +#include "qat_logs.h" #define QAT_NUM_INTERM_BUFS_GEN2 20 diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gen3.c b/drivers/compress/qat/dev/qat_comp_pmd_gen3.c index fccb0941f1..ca6f67d620 100644 --- a/drivers/compress/qat/dev/qat_comp_pmd_gen3.c +++ b/drivers/compress/qat/dev/qat_comp_pmd_gen3.c @@ -4,6 +4,7 @@ #include "qat_comp_pmd.h" #include "qat_comp_pmd_gens.h" +#include "qat_logs.h" #define QAT_NUM_INTERM_BUFS_GEN3 64 diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gen4.c b/drivers/compress/qat/dev/qat_comp_pmd_gen4.c index 05906f13e0..bc728bc0c9 100644 --- a/drivers/compress/qat/dev/qat_comp_pmd_gen4.c +++ b/drivers/compress/qat/dev/qat_comp_pmd_gen4.c @@ -7,6 +7,7 @@ #include "qat_comp_pmd_gens.h" #include "icp_qat_hw_gen4_comp.h" #include "icp_qat_hw_gen4_comp_defs.h" +#include "qat_logs.h" #define QAT_NUM_INTERM_BUFS_GEN4 0 diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c index cc91edca3a..60cebb00ca 100644 --- a/drivers/compress/qat/qat_comp_pmd.c +++ b/drivers/compress/qat/qat_comp_pmd.c @@ -6,8 +6,10 @@ #include "qat_comp.h" #include "qat_comp_pmd.h" +#include "qat_logs.h" #define QAT_PMD_COMP_SGL_DEF_SEGMENTS 16 +#define SERVICE_NAME "COMP" struct qat_comp_gen_dev_ops qat_comp_gen_dev_ops[QAT_N_GENS]; @@ -629,22 +631,25 @@ qat_comp_pmd_dequeue_first_op_burst(void *qp, struct rte_comp_op **ops, { uint16_t ret = qat_comp_dequeue_burst(qp, ops, nb_ops); struct qat_qp *tmp_qp = (struct qat_qp *)qp; + int dev_pos = get_service_pos(SERVICE_NAME); + struct qat_comp_dev_private *dev = + tmp_qp->qat_dev->pmd[dev_pos]; if (ret) { if ((*ops)->debug_status == (uint64_t)ERR_CODE_QAT_COMP_WRONG_FW) { - tmp_qp->qat_dev->comp_dev->compressdev->enqueue_burst = + dev->compressdev->enqueue_burst = qat_comp_pmd_enq_deq_dummy_op_burst; - tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst = + dev->compressdev->dequeue_burst = qat_comp_pmd_enq_deq_dummy_op_burst; - tmp_qp->qat_dev->comp_dev->compressdev->dev_ops = + dev->compressdev->dev_ops = &compress_qat_dummy_ops; QAT_LOG(ERR, "This QAT hardware doesn't support compression operation"); } else { - tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst = + dev->compressdev->dequeue_burst = qat_comp_dequeue_burst; } } @@ -662,7 +667,7 @@ static const struct rte_driver compdev_qat_driver = { .alias = qat_comp_drv_name }; -int +static int qat_comp_dev_create(struct qat_pci_device *qat_pci_dev) { int i = 0; @@ -681,6 +686,7 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev) const struct qat_comp_gen_dev_ops *qat_comp_gen_ops = &qat_comp_gen_dev_ops[qat_pci_dev->qat_dev_gen]; uint64_t capa_size; + int dev_pos = get_service_pos(SERVICE_NAME); snprintf(name, RTE_COMPRESSDEV_NAME_MAX_LEN, "%s_%s", qat_pci_dev->name, "comp"); @@ -765,7 +771,7 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev) qat_pci_dev->cmd_line_param[i].val; i++; } - qat_pci_dev->comp_dev = comp_dev; + qat_pci_dev->pmd[dev_pos] = comp_dev; QAT_LOG(DEBUG, "Created QAT COMP device %s as compressdev instance %d", @@ -773,26 +779,32 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev) return 0; } -int +static int qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev) { - struct qat_comp_dev_private *comp_dev; + int dev_pos = get_service_pos(SERVICE_NAME); + struct qat_comp_dev_private *dev = + qat_pci_dev->pmd[dev_pos]; if (qat_pci_dev == NULL) return -ENODEV; - comp_dev = qat_pci_dev->comp_dev; - if (comp_dev == NULL) - return 0; - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - rte_memzone_free(qat_pci_dev->comp_dev->capa_mz); + rte_memzone_free(dev->capa_mz); /* clean up any resources used by the device */ - qat_comp_dev_close(comp_dev->compressdev); + qat_comp_dev_close(dev->compressdev); - rte_compressdev_pmd_destroy(comp_dev->compressdev); - qat_pci_dev->comp_dev = NULL; + rte_compressdev_pmd_destroy(dev->compressdev); + qat_pci_dev->pmd[dev_pos] = NULL; return 0; } + +RTE_INIT(qat_comp_dev_register) +{ + qat_dev_service[qat_dev_services_no].name = SERVICE_NAME; + qat_dev_service[qat_dev_services_no].dev_create = qat_comp_dev_create; + qat_dev_service[qat_dev_services_no].dev_destroy = qat_comp_dev_destroy; + qat_dev_services_no++; +} diff --git a/drivers/compress/qat/qat_comp_pmd.h b/drivers/compress/qat/qat_comp_pmd.h index 1f5b0facf7..01a8983287 100644 --- a/drivers/compress/qat/qat_comp_pmd.h +++ b/drivers/compress/qat/qat_comp_pmd.h @@ -106,13 +106,6 @@ const struct rte_memzone * qat_comp_setup_inter_buffers(struct qat_comp_dev_private *comp_dev, uint32_t buff_size); -int -qat_comp_dev_create(struct qat_pci_device *qat_pci_dev); - -int -qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev); - - static __rte_always_inline unsigned int qat_comp_get_num_im_bufs_required(enum qat_device_gen gen) { diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c index 2b54b63e8f..c0267cfe7d 100644 --- a/drivers/crypto/qat/qat_asym.c +++ b/drivers/crypto/qat/qat_asym.c @@ -6,6 +6,8 @@ #include +#include "adf_transport_access_macros.h" +#include "icp_qat_hw.h" #include "qat_device.h" #include "qat_logs.h" @@ -16,6 +18,7 @@ #include "qat_ec.h" #define RSA_MODULUS_2048_BITS 2048 +#define SERVICE_NAME "ASYM" uint8_t qat_asym_driver_id; @@ -1414,7 +1417,7 @@ qat_asym_init_op_cookie(void *op_cookie) } } -int +static int qat_asym_dev_create(struct qat_pci_device *qat_pci_dev) { struct qat_cryptodev_private *internals; @@ -1432,6 +1435,7 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev) char capa_memz_name[RTE_CRYPTODEV_NAME_MAX_LEN]; int i = 0; uint16_t slice_map = 0; + int sym_dev_pos = get_service_pos(SERVICE_NAME); snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s", qat_pci_dev->name, "asym"); @@ -1519,31 +1523,33 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev) return -1; } - qat_pci_dev->asym_dev = internals; + qat_pci_dev->pmd[sym_dev_pos] = internals; internals->service_type = QAT_SERVICE_ASYMMETRIC; QAT_LOG(DEBUG, "Created QAT ASYM device %s as cryptodev instance %d", cryptodev->data->name, internals->dev_id); return 0; } -int +static int qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev) { struct rte_cryptodev *cryptodev; + int dev_pos = get_service_pos(SERVICE_NAME); + struct qat_cryptodev_private *dev = + qat_pci_dev->pmd[dev_pos]; if (qat_pci_dev == NULL) return -ENODEV; - if (qat_pci_dev->asym_dev == NULL) + if (qat_pci_dev->pmd[dev_pos] == NULL) return 0; if (rte_eal_process_type() == RTE_PROC_PRIMARY) - rte_memzone_free(qat_pci_dev->asym_dev->capa_mz); + rte_memzone_free(dev->capa_mz); /* free crypto device */ - cryptodev = rte_cryptodev_pmd_get_dev( - qat_pci_dev->asym_dev->dev_id); + cryptodev = rte_cryptodev_pmd_get_dev(dev->dev_id); rte_cryptodev_pmd_destroy(cryptodev); qat_pci_devs[qat_pci_dev->qat_dev_id].asym_rte_dev.name = NULL; - qat_pci_dev->asym_dev = NULL; + qat_pci_dev->pmd[dev_pos] = NULL; return 0; } @@ -1552,3 +1558,11 @@ static struct cryptodev_driver qat_crypto_drv; RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv, cryptodev_qat_asym_driver, qat_asym_driver_id); + +RTE_INIT(qat_asym_dev_register) +{ + qat_dev_service[qat_dev_services_no].name = SERVICE_NAME; + qat_dev_service[qat_dev_services_no].dev_create = qat_asym_dev_create; + qat_dev_service[qat_dev_services_no].dev_destroy = qat_asym_dev_destroy; + qat_dev_services_no++; +} diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c index c06b7120c0..d5c8e5986c 100644 --- a/drivers/crypto/qat/qat_sym.c +++ b/drivers/crypto/qat/qat_sym.c @@ -14,8 +14,10 @@ #include "qat_sym.h" #include "qat_crypto.h" #include "qat_qp.h" +#include "qat_device.h" extern const char *cmd_arg_strings[]; +#define SERVICE_NAME "SYM" uint8_t qat_sym_driver_id; int qat_legacy_capa; @@ -183,7 +185,7 @@ qat_sym_dequeue_burst(void *qp, struct rte_crypto_op **ops, qat_sym_process_response, nb_ops); } -int +static int qat_sym_dev_create(struct qat_pci_device *qat_pci_dev) { int i = 0, ret = 0; @@ -201,6 +203,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev) struct qat_cryptodev_private *internals; const struct qat_crypto_gen_dev_ops *gen_dev_ops = &qat_sym_gen_dev_ops[qat_pci_dev->qat_dev_gen]; + int dev_pos = get_service_pos(SERVICE_NAME); snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s", qat_pci_dev->name, "sym"); @@ -302,7 +305,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev) goto error; } internals->service_type = QAT_SERVICE_SYMMETRIC; - qat_pci_dev->sym_dev = internals; + qat_pci_dev->pmd[dev_pos] = internals; QAT_LOG(DEBUG, "Created QAT SYM device %s as cryptodev instance %d", cryptodev->data->name, internals->dev_id); @@ -318,25 +321,28 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev) return ret; } -int +static int qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev) { struct rte_cryptodev *cryptodev; + int dev_pos = get_service_pos(SERVICE_NAME); + struct qat_cryptodev_private *dev = + qat_pci_dev->pmd[dev_pos]; if (qat_pci_dev == NULL) return -ENODEV; - if (qat_pci_dev->sym_dev == NULL) + if (qat_pci_dev->pmd[dev_pos] == NULL) return 0; if (rte_eal_process_type() == RTE_PROC_PRIMARY) - rte_memzone_free(qat_pci_dev->sym_dev->capa_mz); + rte_memzone_free(dev->capa_mz); /* free crypto device */ - cryptodev = rte_cryptodev_pmd_get_dev(qat_pci_dev->sym_dev->dev_id); + cryptodev = rte_cryptodev_pmd_get_dev(dev->dev_id); rte_free(cryptodev->security_ctx); cryptodev->security_ctx = NULL; rte_cryptodev_pmd_destroy(cryptodev); qat_pci_devs[qat_pci_dev->qat_dev_id].sym_rte_dev.name = NULL; - qat_pci_dev->sym_dev = NULL; + qat_pci_dev->pmd[dev_pos] = NULL; return 0; } @@ -393,3 +399,11 @@ static struct cryptodev_driver qat_crypto_drv; RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv, cryptodev_qat_sym_driver, qat_sym_driver_id); + +RTE_INIT(qat_sym_dev_register) +{ + qat_dev_service[qat_dev_services_no].name = SERVICE_NAME; + qat_dev_service[qat_dev_services_no].dev_create = qat_sym_dev_create; + qat_dev_service[qat_dev_services_no].dev_destroy = qat_sym_dev_destroy; + qat_dev_services_no++; +}