> 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

Reply via email to