> 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