From b1ce0ad9e8a8450c4eb2efa0d6ef62f8f8ef1d75 Mon Sep 17 00:00:00 2001 From: Declan Doherty Date: Wed, 25 Oct 2017 13:00:36 +0100 Subject: [PATCH] cryptodev: break dependency on PCI device bus Removes any dependency of librte_cryptodev on the PCI device infrastructure code and removes the functions which were virtual device specific. Updates QAT crypto PMD to remove dependencies on rte_cryptodev_pci.h and replaces those calls with the new bus independent functions. Signed-off-by: Declan Doherty Acked-by: Fiona Trahe Acked-by: Pablo de Lara --- doc/guides/rel_notes/release_17_11.rst | 7 ++ drivers/crypto/qat/qat_crypto.c | 3 +- drivers/crypto/qat/rte_qat_cryptodev.c | 55 ++++++++--- lib/librte_cryptodev/Makefile | 1 - lib/librte_cryptodev/rte_cryptodev_pci.h | 92 ------------------- lib/librte_cryptodev/rte_cryptodev_pmd.c | 91 ------------------ .../rte_cryptodev_version.map | 2 - 7 files changed, 52 insertions(+), 199 deletions(-) delete mode 100644 lib/librte_cryptodev/rte_cryptodev_pci.h diff --git a/doc/guides/rel_notes/release_17_11.rst b/doc/guides/rel_notes/release_17_11.rst index 9d60df2b50..4267c26511 100644 --- a/doc/guides/rel_notes/release_17_11.rst +++ b/doc/guides/rel_notes/release_17_11.rst @@ -303,6 +303,13 @@ API Changes and have been replaced by non bus specific functions ``rte_cryptodev_pmd_parse_input_args()`` and ``rte_cryptodev_pmd_create()``. +* **Removed PCI device bus specific functions from librte_cryptodev.** + + The functions ``rte_cryptodev_pci_generic_probe()`` and + ``rte_cryptodev_pci_generic_remove()`` have been removed from librte_cryptodev + and have been replaced by non bus specific functions + ``rte_cryptodev_pmd_create()`` and ``rte_cryptodev_pmd_destroy()``. + * **Removed deprecated functions to manage log level or type.** The functions ``rte_set_log_level()``, ``rte_get_log_level()``, diff --git a/drivers/crypto/qat/qat_crypto.c b/drivers/crypto/qat/qat_crypto.c index ae73c78b51..87f232ee95 100644 --- a/drivers/crypto/qat/qat_crypto.c +++ b/drivers/crypto/qat/qat_crypto.c @@ -58,8 +58,9 @@ #include #include #include -#include #include +#include + #include #include "qat_logs.h" diff --git a/drivers/crypto/qat/rte_qat_cryptodev.c b/drivers/crypto/qat/rte_qat_cryptodev.c index 3d9f3c8ead..701c5a6b8f 100644 --- a/drivers/crypto/qat/rte_qat_cryptodev.c +++ b/drivers/crypto/qat/rte_qat_cryptodev.c @@ -34,8 +34,8 @@ #include #include #include +#include #include -#include #include "qat_crypto.h" #include "qat_logs.h" @@ -97,15 +97,18 @@ static const struct rte_pci_id pci_id_qat_map[] = { }; static int -crypto_qat_dev_init(struct rte_cryptodev *cryptodev) +crypto_qat_create(const char *name, struct rte_pci_device *pci_dev, + struct rte_cryptodev_pmd_init_params *init_params) { + struct rte_cryptodev *cryptodev; struct qat_pmd_private *internals; PMD_INIT_FUNC_TRACE(); - PMD_DRV_LOG(DEBUG, "Found crypto device at %02x:%02x.%x", - RTE_DEV_TO_PCI(cryptodev->device)->addr.bus, - RTE_DEV_TO_PCI(cryptodev->device)->addr.devid, - RTE_DEV_TO_PCI(cryptodev->device)->addr.function); + + cryptodev = rte_cryptodev_pmd_create(name, &pci_dev->device, + init_params); + if (cryptodev == NULL) + return -ENODEV; cryptodev->driver_id = cryptodev_qat_driver_id; cryptodev->dev_ops = &crypto_qat_ops; @@ -119,8 +122,8 @@ crypto_qat_dev_init(struct rte_cryptodev *cryptodev) RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER; internals = cryptodev->data->dev_private; - internals->max_nb_sessions = RTE_QAT_PMD_MAX_NB_SESSIONS; - switch (RTE_DEV_TO_PCI(cryptodev->device)->id.device_id) { + internals->max_nb_sessions = init_params->max_nb_sessions; + switch (pci_dev->id.device_id) { case 0x0443: internals->qat_dev_gen = QAT_GEN1; internals->qat_dev_capabilities = qat_gen1_capabilities; @@ -151,15 +154,43 @@ crypto_qat_dev_init(struct rte_cryptodev *cryptodev) } static int crypto_qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, - struct rte_pci_device *pci_dev) + struct rte_pci_device *pci_dev) { - return rte_cryptodev_pci_generic_probe(pci_dev, - sizeof(struct qat_pmd_private), crypto_qat_dev_init); + struct rte_cryptodev_pmd_init_params init_params = { + .name = "", + .socket_id = rte_socket_id(), + .private_data_size = sizeof(struct qat_pmd_private), + .max_nb_sessions = RTE_QAT_PMD_MAX_NB_SESSIONS + }; + char name[RTE_CRYPTODEV_NAME_MAX_LEN]; + + PMD_DRV_LOG(DEBUG, "Found QAT device at %02x:%02x.%x", + pci_dev->addr.bus, + pci_dev->addr.devid, + pci_dev->addr.function); + + rte_pci_device_name(&pci_dev->addr, name, sizeof(name)); + + return crypto_qat_create(name, pci_dev, &init_params); } static int crypto_qat_pci_remove(struct rte_pci_device *pci_dev) { - return rte_cryptodev_pci_generic_remove(pci_dev, NULL); + struct rte_cryptodev *cryptodev; + char cryptodev_name[RTE_CRYPTODEV_NAME_MAX_LEN]; + + if (pci_dev == NULL) + return -EINVAL; + + rte_pci_device_name(&pci_dev->addr, cryptodev_name, + sizeof(cryptodev_name)); + + cryptodev = rte_cryptodev_pmd_get_named_dev(cryptodev_name); + if (cryptodev == NULL) + return -ENODEV; + + /* free crypto device */ + return rte_cryptodev_pmd_destroy(cryptodev); } static struct rte_pci_driver rte_qat_pmd = { diff --git a/lib/librte_cryptodev/Makefile b/lib/librte_cryptodev/Makefile index bb78e6b87d..8e780b836f 100644 --- a/lib/librte_cryptodev/Makefile +++ b/lib/librte_cryptodev/Makefile @@ -50,7 +50,6 @@ SYMLINK-y-include += rte_crypto.h SYMLINK-y-include += rte_crypto_sym.h SYMLINK-y-include += rte_cryptodev.h SYMLINK-y-include += rte_cryptodev_pmd.h -SYMLINK-y-include += rte_cryptodev_pci.h # versioning export map EXPORT_MAP := rte_cryptodev_version.map diff --git a/lib/librte_cryptodev/rte_cryptodev_pci.h b/lib/librte_cryptodev/rte_cryptodev_pci.h deleted file mode 100644 index 67eda96a78..0000000000 --- a/lib/librte_cryptodev/rte_cryptodev_pci.h +++ /dev/null @@ -1,92 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2017 Intel Corporation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _RTE_CRYPTODEV_PCI_H_ -#define _RTE_CRYPTODEV_PCI_H_ - -#include -#include "rte_cryptodev.h" - -/** - * Initialisation function of a crypto driver invoked for each matching - * crypto PCI device detected during the PCI probing phase. - * - * @param dev The dev pointer is the address of the *rte_cryptodev* - * structure associated with the matching device and which - * has been [automatically] allocated in the - * *rte_crypto_devices* array. - * - * @return - * - 0: Success, the device is properly initialised by the driver. - * In particular, the driver MUST have set up the *dev_ops* pointer - * of the *dev* structure. - * - <0: Error code of the device initialisation failure. - */ -typedef int (*cryptodev_pci_init_t)(struct rte_cryptodev *dev); - -/** - * Finalisation function of a driver invoked for each matching - * PCI device detected during the PCI closing phase. - * - * @param dev The dev pointer is the address of the *rte_cryptodev* - * structure associated with the matching device and which - * has been [automatically] allocated in the - * *rte_crypto_devices* array. - * - * * @return - * - 0: Success, the device is properly finalised by the driver. - * In particular, the driver MUST free the *dev_ops* pointer - * of the *dev* structure. - * - <0: Error code of the device initialisation failure. - */ -typedef int (*cryptodev_pci_uninit_t)(struct rte_cryptodev *dev); - -/** - * @internal - * Wrapper for use by pci drivers as a .probe function to attach to a crypto - * interface. - */ -int -rte_cryptodev_pci_generic_probe(struct rte_pci_device *pci_dev, - size_t private_data_size, - cryptodev_pci_init_t dev_init); - -/** - * @internal - * Wrapper for use by pci drivers as a .remove function to detach a crypto - * interface. - */ -int -rte_cryptodev_pci_generic_remove(struct rte_pci_device *pci_dev, - cryptodev_pci_uninit_t dev_uninit); - -#endif /* _RTE_CRYPTODEV_PCI_H_ */ diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.c b/lib/librte_cryptodev/rte_cryptodev_pmd.c index 2b8ff7adb3..b4eeb4481f 100644 --- a/lib/librte_cryptodev/rte_cryptodev_pmd.c +++ b/lib/librte_cryptodev/rte_cryptodev_pmd.c @@ -32,7 +32,6 @@ #include -#include "rte_cryptodev_pci.h" #include "rte_cryptodev_pmd.h" /** @@ -200,93 +199,3 @@ rte_cryptodev_pmd_destroy(struct rte_cryptodev *cryptodev) return 0; } - -int -rte_cryptodev_pci_generic_probe(struct rte_pci_device *pci_dev, - size_t private_data_size, - cryptodev_pci_init_t dev_init) -{ - struct rte_cryptodev *cryptodev; - - char cryptodev_name[RTE_CRYPTODEV_NAME_MAX_LEN]; - - int retval; - - rte_pci_device_name(&pci_dev->addr, cryptodev_name, - sizeof(cryptodev_name)); - - cryptodev = rte_cryptodev_pmd_allocate(cryptodev_name, rte_socket_id()); - if (cryptodev == NULL) - return -ENOMEM; - - if (rte_eal_process_type() == RTE_PROC_PRIMARY) { - cryptodev->data->dev_private = - rte_zmalloc_socket( - "cryptodev private structure", - private_data_size, - RTE_CACHE_LINE_SIZE, - rte_socket_id()); - - if (cryptodev->data->dev_private == NULL) - rte_panic("Cannot allocate memzone for private " - "device data"); - } - - cryptodev->device = &pci_dev->device; - - /* Invoke PMD device initialization function */ - RTE_FUNC_PTR_OR_ERR_RET(*dev_init, -EINVAL); - retval = dev_init(cryptodev); - if (retval == 0) - return 0; - - CDEV_LOG_ERR("driver %s: crypto_dev_init(vendor_id=0x%x device_id=0x%x)" - " failed", pci_dev->device.driver->name, - (unsigned int) pci_dev->id.vendor_id, - (unsigned int) pci_dev->id.device_id); - - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - rte_free(cryptodev->data->dev_private); - - /* free crypto device */ - rte_cryptodev_pmd_release_device(cryptodev); - - return -ENXIO; -} - -int -rte_cryptodev_pci_generic_remove(struct rte_pci_device *pci_dev, - cryptodev_pci_uninit_t dev_uninit) -{ - struct rte_cryptodev *cryptodev; - char cryptodev_name[RTE_CRYPTODEV_NAME_MAX_LEN]; - int ret; - - if (pci_dev == NULL) - return -EINVAL; - - rte_pci_device_name(&pci_dev->addr, cryptodev_name, - sizeof(cryptodev_name)); - - cryptodev = rte_cryptodev_pmd_get_named_dev(cryptodev_name); - if (cryptodev == NULL) - return -ENODEV; - - /* Invoke PMD device uninit function */ - if (dev_uninit) { - ret = dev_uninit(cryptodev); - if (ret) - return ret; - } - - /* free crypto device */ - rte_cryptodev_pmd_release_device(cryptodev); - - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - rte_free(cryptodev->data->dev_private); - - cryptodev->device = NULL; - cryptodev->data = NULL; - - return 0; -} diff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map index d3e451584c..4355166a91 100644 --- a/lib/librte_cryptodev/rte_cryptodev_version.map +++ b/lib/librte_cryptodev/rte_cryptodev_version.map @@ -68,8 +68,6 @@ DPDK_17.08 { rte_cryptodev_get_aead_algo_enum; rte_cryptodev_get_header_session_size; rte_cryptodev_get_private_session_size; - rte_cryptodev_pci_generic_probe; - rte_cryptodev_pci_generic_remove; rte_cryptodev_sym_capability_check_aead; rte_cryptodev_sym_session_init; rte_cryptodev_sym_session_clear; -- 2.20.1