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
- 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
- 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
- Build DPDK
- $ cd dpdk
- $ mkdir build
- $ meson build (--reconfigure)
- $ cd build
- $ ninja
- $ sudo ninja install
- 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
- 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