[EXT] [PATCH resend v5 1/6] crypto/uadk: introduce uadk crypto driver
Akhil Goyal
gakhil at marvell.com
Tue Oct 25 16:08:05 CEST 2022
> diff --git a/doc/guides/cryptodevs/uadk.rst b/doc/guides/cryptodevs/uadk.rst
> new file mode 100644
> index 0000000000..1dfaab73c8
> --- /dev/null
> +++ b/doc/guides/cryptodevs/uadk.rst
> @@ -0,0 +1,73 @@
> +.. SPDX-License-Identifier: BSD-3-Clause
> + Copyright 2022-2023 Huawei Technologies Co.,Ltd. All rights reserved.
> + Copyright 2022-2023 Linaro ltd.
> +
> +UADK Crypto Poll Mode Driver
> +=======================================================
The number of '=' are more than the above heading.
> +
> +UADK crypto PMD provides poll mode driver
> +All cryptographic operations are using UADK crypto API.
> +Hardware accelerators using UADK are supposed to be supported.
The above description does not make sense.
Please rewrite and add more information if possible.
> +
> +
> +Features
> +--------
> +
> +UADK crypto PMD has support for:
> +
> +
> +Test steps
> +----------
> +
> + .. code-block:: console
> +
> + 1. Build UADK
> + $ git clone https://github.com/Linaro/uadk
> + $ cd uadk
> + $ mkdir build
> + $ ./autogen.sh
> + $ ./configure --prefix=$PWD/build
> + $ make
> + $ make install
> +
> + * Without --prefix, UADK will be installed to /usr/local/lib by default
> + * If get error:"cannot find -lnuma", please install the libnuma-dev
> +
> + 2. Run pkg-config libwd to ensure env is setup correctly
> + $ export PKG_CONFIG_PATH=$PWD/build/lib/pkgconfig
> + $ pkg-config libwd --cflags --libs
> + -I/usr/local/include -L/usr/local/lib -lwd
> +
> + * export PKG_CONFIG_PATH is required on demand,
> + not needed if UADK is installed to /usr/local/lib
> +
> + 3. Build DPDK
> + $ cd dpdk
> + $ mkdir build
> + $ meson build (--reconfigure)
> + $ cd build
> + $ ninja
> + $ sudo ninja install
> +
> + 4. Prepare hugepage for dpdk
> + $ echo 1024 >
> /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
> + $ echo 1024 >
> /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
> + $ echo 1024 >
> /sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages
> + $ echo 1024 >
> /sys/devices/system/node/node3/hugepages/hugepages-2048kB/nr_hugepages
> + $ mkdir -p /mnt/huge_2mb
> + $ mount -t hugetlbfs none /mnt/huge_2mb -o pagesize=2MB
> +
> + 5. Run test app
> +
> +Dependency
> +----------
> +
> +UADK crypto PMD relies on UADK library [1]
> +
> +UADK is a framework for user applications to access hardware accelerators.
> +UADK relies on IOMMU SVA (Shared Virtual Address) feature, which share
> +the same page table between IOMMU and MMU.
> +As a result, user application can directly use virtual address for device dma,
> +which enhances the performance as well as easy usability.
s/dma/DMA
> diff --git a/drivers/crypto/uadk/uadk_crypto_pmd.c
> b/drivers/crypto/uadk/uadk_crypto_pmd.c
> new file mode 100644
> index 0000000000..2ae2b33bd7
> --- /dev/null
> +++ b/drivers/crypto/uadk/uadk_crypto_pmd.c
> @@ -0,0 +1,121 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright 2022-2023 Huawei Technologies Co.,Ltd. All rights reserved.
> + * Copyright 2022-2023 Linaro ltd.
> + */
> +
> +#include <bus_vdev_driver.h>
> +#include <cryptodev_pmd.h>
> +#include <rte_bus_vdev.h>
> +#include <stdlib.h>
> +#include <uadk/wd_cipher.h>
> +#include <uadk/wd_digest.h>
> +#include <uadk/wd_sched.h>
Separate out different type of headers with a blank line.
#include <stdlib.h>
#include <rte_bus_vdev.h>
#include <bus_vdev_driver.h>
#include <cryptodev_pmd.h>
#include <uadk/wd_cipher.h>
#include <uadk/wd_digest.h>
#include <uadk/wd_sched.h>
> +
> +enum uadk_crypto_version {
> + UADK_CRYPTO_V2,
> + UADK_CRYPTO_V3,
> +};
> +
> +struct uadk_crypto_priv {
> + enum uadk_crypto_version version;
> +} __rte_cache_aligned;
> +
> +static uint8_t uadk_cryptodev_driver_id;
> +
> +RTE_LOG_REGISTER_DEFAULT(uadk_crypto_logtype, INFO);
> +
> +#define UADK_LOG(level, fmt, ...) \
> + rte_log(RTE_LOG_ ## level, uadk_crypto_logtype, \
> + "%s() line %u: " fmt "\n", __func__, __LINE__, \
> + ## __VA_ARGS__)
> +
Is it not good to define the above macros and structs in header file?
> +static struct rte_cryptodev_ops uadk_crypto_pmd_ops = {
> + .dev_configure = NULL,
> + .dev_start = NULL,
> + .dev_stop = NULL,
> + .dev_close = NULL,
> + .stats_get = NULL,
> + .stats_reset = NULL,
> + .dev_infos_get = NULL,
> + .queue_pair_setup = NULL,
> + .queue_pair_release = NULL,
> + .sym_session_get_size = NULL,
> + .sym_session_configure = NULL,
> + .sym_session_clear = NULL,
> +};
> +
> +static int
> +uadk_cryptodev_probe(struct rte_vdev_device *vdev)
> +{
> + struct rte_cryptodev_pmd_init_params init_params = {
> + .name = "",
> + .private_data_size = sizeof(struct uadk_crypto_priv),
> + .max_nb_queue_pairs =
> +
> RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS,
> + };
> + enum uadk_crypto_version version = UADK_CRYPTO_V2;
> + struct uadk_crypto_priv *priv;
> + struct rte_cryptodev *dev;
> + struct uacce_dev *udev;
> + const char *name;
> +
> + udev = wd_get_accel_dev("cipher");
> + if (!udev)
> + return -ENODEV;
> +
> + if (!strcmp(udev->api, "hisi_qm_v2"))
> + version = UADK_CRYPTO_V2;
> +
> + free(udev);
> +
> + name = rte_vdev_device_name(vdev);
> + if (name == NULL)
> + return -EINVAL;
> +
> + dev = rte_cryptodev_pmd_create(name, &vdev->device, &init_params);
> + if (dev == NULL) {
> + UADK_LOG(ERR, "driver %s: create failed", init_params.name);
> + return -ENODEV;
> + }
> +
> + dev->dev_ops = &uadk_crypto_pmd_ops;
> + dev->driver_id = uadk_cryptodev_driver_id;
> + dev->dequeue_burst = NULL;
> + dev->enqueue_burst = NULL;
> + dev->feature_flags = RTE_CRYPTODEV_FF_HW_ACCELERATED;
> + priv = dev->data->dev_private;
> + priv->version = version;
> +
> + rte_cryptodev_pmd_probing_finish(dev);
> +
> + return 0;
> +}
> +
> +static int
> +uadk_cryptodev_remove(struct rte_vdev_device *vdev)
> +{
> + struct rte_cryptodev *cryptodev;
> + const char *name;
> +
> + name = rte_vdev_device_name(vdev);
> + if (name == NULL)
> + return -EINVAL;
> +
> + cryptodev = rte_cryptodev_pmd_get_named_dev(name);
> + if (cryptodev == NULL)
> + return -ENODEV;
> +
> + return rte_cryptodev_pmd_destroy(cryptodev);
> +}
> +
> +static struct rte_vdev_driver uadk_crypto_pmd = {
> + .probe = uadk_cryptodev_probe,
> + .remove = uadk_cryptodev_remove,
> +};
> +
> +static struct cryptodev_driver uadk_crypto_drv;
> +
> +#define UADK_CRYPTO_DRIVER_NAME crypto_uadk
> +RTE_PMD_REGISTER_VDEV(UADK_CRYPTO_DRIVER_NAME,
> uadk_crypto_pmd);
> +RTE_PMD_REGISTER_CRYPTO_DRIVER(uadk_crypto_drv,
> uadk_crypto_pmd.driver,
> + uadk_cryptodev_driver_id);
> diff --git a/drivers/crypto/uadk/version.map b/drivers/crypto/uadk/version.map
> new file mode 100644
> index 0000000000..c2e0723b4c
> --- /dev/null
> +++ b/drivers/crypto/uadk/version.map
> @@ -0,0 +1,3 @@
> +DPDK_22 {
> + local: *;
> +};
This should be DPDK_23
> --
> 2.38.1
More information about the dev
mailing list