@@ -1212,6 +1212,12 @@ F: drivers/compress/octeontx/
F: doc/guides/compressdevs/octeontx.rst
F: doc/guides/compressdevs/features/octeontx.ini
+HiSilicon UADK compress
+M: Zhangfei Gao <zhangfei.gao@linaro.org>
+F: drivers/compress/uadk/
+F: doc/guides/compressdevs/uadk.rst
+F: doc/guides/compressdevs/features/uadk.ini
+
Intel QuickAssist
M: Kai Ji <kai.ji@intel.com>
F: drivers/compress/qat/
new file mode 100644
@@ -0,0 +1,11 @@
+;
+; Refer to default.ini for the full list of available PMD features.
+;
+; Supported features of 'uadk' compression driver.
+;
+[Features]
+HW Accelerated = Y
+Deflate = Y
+Crc32 = N
+Fixed = Y
+Dynamic = Y
@@ -15,4 +15,5 @@ Compression Device Drivers
nitrox
octeontx
qat_comp
+ uadk
zlib
new file mode 100644
@@ -0,0 +1,98 @@
+.. SPDX-License-Identifier: BSD-3-Clause
+ Copyright 2024-2025 Huawei Technologies Co.,Ltd. All rights reserved.
+ Copyright 2024-2025 Linaro ltd.
+
+UADK Compression Poll Mode Driver
+=================================
+
+UADK compression PMD provides poll mode compression & decompression driver
+All compression operations are using UADK library compression API, which is
+algorithm-level API, abstracting accelerators' low-level implementations.
+
+UADK compression PMD relies on `UADK library <https://github.com/Linaro/uadk>`_.
+
+UADK is a framework for user applications to access hardware accelerators.
+UADK relies on IOMMU SVA (Shared Virtual Address) feature,
+which shares the same page table between IOMMU and MMU.
+As a result, the user application can directly use the virtual address for
+device DMA, which enhances performance as well as easy usability.
+
+
+Features
+--------
+
+UADK compression PMD has support for:
+
+Compression/Decompression algorithm:
+
+ * DEFLATE - using Fixed and Dynamic Huffman encoding
+
+Window size support:
+
+ * 32K
+
+
+Test steps
+----------
+
+#. Build UADK
+
+ .. code-block:: console
+
+ git clone https://github.com/Linaro/uadk.git
+ cd uadk
+ mkdir build
+ ./autogen.sh
+ ./configure --prefix=$PWD/build
+ make
+ make install
+
+ .. note::
+
+ Without ``--prefix``, UADK will be installed to ``/usr/local/lib`` by default.
+
+ .. note::
+
+ If get error: "cannot find -lnuma", please install the libnuma-dev.
+
+#. Run pkg-config libwd to ensure env is setup correctly
+
+ .. code-block:: console
+
+ export PKG_CONFIG_PATH=$PWD/build/lib/pkgconfig
+ pkg-config libwd --cflags --libs -I/usr/local/include -L/usr/local/lib -lwd
+
+ .. note::
+
+ export ``PKG_CONFIG_PATH`` is required on demand,
+ not needed if UADK is installed to ``/usr/local/lib``.
+
+#. Build DPDK
+
+ .. code-block:: console
+
+ cd dpdk
+ mkdir build
+ meson setup build (--reconfigure)
+ cd build
+ ninja
+ sudo ninja install
+
+#. Prepare hugepages for DPDK (see also :doc:`../tools/hugepages`)
+
+ .. code-block:: console
+
+ 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
+
+ .. code-block:: console
+
+ sudo dpdk-test --vdev=compress_uadk
+ RTE>>compressdev_autotest
+ RTE>>quit
@@ -24,6 +24,11 @@ DPDK Release 24.07
New Features
------------
+* **Added UADK compress driver.**
+
+ Added a new compress driver for the UADK library. See the
+ :doc:`../compressdevs/uadk` guide for more details on this new driver.
+
.. This section should contain new features added in this release.
Sample format:
@@ -10,6 +10,7 @@ drivers = [
'mlx5',
'nitrox',
'octeontx',
+ 'uadk',
'zlib',
]
new file mode 100644
@@ -0,0 +1,30 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2024-2025 Huawei Technologies Co.,Ltd. All rights reserved.
+# Copyright 2024-2025 Linaro ltd.
+
+if not is_linux
+ build = false
+ reason = 'only supported on Linux'
+ subdir_done()
+endif
+
+sources = files(
+ 'uadk_compress_pmd.c',
+)
+
+deps += 'bus_vdev'
+dep = dependency('libwd_comp', required: false, method: 'pkg-config')
+if not dep.found()
+ build = false
+ reason = 'missing dependency, "libwd_comp"'
+else
+ ext_deps += dep
+endif
+
+dep = dependency('libwd', required: false, method: 'pkg-config')
+if not dep.found()
+ build = false
+ reason = 'missing dependency, "libwd"'
+else
+ ext_deps += dep
+endif
new file mode 100644
@@ -0,0 +1,89 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2024-2025 Huawei Technologies Co.,Ltd. All rights reserved.
+ * Copyright 2024-2025 Linaro ltd.
+ */
+
+#include <bus_vdev_driver.h>
+#include <rte_compressdev_pmd.h>
+#include <rte_malloc.h>
+
+#include <uadk/wd_comp.h>
+#include <uadk/wd_sched.h>
+
+#include "uadk_compress_pmd_private.h"
+
+static struct rte_compressdev_ops uadk_compress_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,
+ .private_xform_create = NULL,
+ .private_xform_free = NULL,
+ .stream_create = NULL,
+ .stream_free = NULL,
+};
+
+static int
+uadk_compress_probe(struct rte_vdev_device *vdev)
+{
+ struct rte_compressdev_pmd_init_params init_params = {
+ "",
+ rte_socket_id(),
+ };
+ struct rte_compressdev *compressdev;
+ struct uacce_dev *udev;
+ const char *name;
+
+ udev = wd_get_accel_dev("deflate");
+ if (!udev)
+ return -ENODEV;
+
+ name = rte_vdev_device_name(vdev);
+ if (name == NULL)
+ return -EINVAL;
+
+ compressdev = rte_compressdev_pmd_create(name, &vdev->device,
+ sizeof(struct uadk_compress_priv), &init_params);
+ if (compressdev == NULL) {
+ UADK_LOG(ERR, "driver %s: create failed", init_params.name);
+ return -ENODEV;
+ }
+
+ compressdev->dev_ops = &uadk_compress_pmd_ops;
+ compressdev->dequeue_burst = NULL;
+ compressdev->enqueue_burst = NULL;
+ compressdev->feature_flags = RTE_COMPDEV_FF_HW_ACCELERATED;
+
+ return 0;
+}
+
+static int
+uadk_compress_remove(struct rte_vdev_device *vdev)
+{
+ struct rte_compressdev *compressdev;
+ const char *name;
+
+ name = rte_vdev_device_name(vdev);
+ if (name == NULL)
+ return -EINVAL;
+
+ compressdev = rte_compressdev_pmd_get_named_dev(name);
+ if (compressdev == NULL)
+ return -ENODEV;
+
+ return rte_compressdev_pmd_destroy(compressdev);
+}
+
+static struct rte_vdev_driver uadk_compress_pmd = {
+ .probe = uadk_compress_probe,
+ .remove = uadk_compress_remove,
+};
+
+#define UADK_COMPRESS_DRIVER_NAME compress_uadk
+RTE_PMD_REGISTER_VDEV(UADK_COMPRESS_DRIVER_NAME, uadk_compress_pmd);
+RTE_LOG_REGISTER_DEFAULT(uadk_compress_logtype, INFO);
new file mode 100644
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2024-2025 Huawei Technologies Co.,Ltd. All rights reserved.
+ * Copyright 2024-2025 Linaro ltd.
+ */
+
+#ifndef _UADK_COMPRESS_PMD_PRIVATE_H_
+#define _UADK_COMPRESS_PMD_PRIVATE_H_
+
+struct uadk_compress_priv {
+ struct rte_mempool *mp;
+};
+
+extern int uadk_compress_logtype;
+
+#define UADK_LOG(level, fmt, ...) \
+ rte_log(RTE_LOG_ ## level, uadk_compress_logtype, \
+ "%s() line %u: " fmt "\n", __func__, __LINE__, \
+ ## __VA_ARGS__)
+
+#endif /* _UADK_COMPRESS_PMD_PRIVATE_H_ */