compress/zlib: introduce zlib PMD

Add initial PMD setup routines in compressdev
framework. ZLIB PMD appears as virtual compression
device. User would need to install zlib prior to
enabling this PMD.

Signed-off-by: Sunila Sahu <sunila.sahu@caviumnetworks.com>
Signed-off-by: Shally Verma <shally.verma@caviumnetworks.com>
Signed-off-by: Ashish Gupta <ashish.gupta@caviumnetworks.com>
This commit is contained in:
Ashish Gupta 2018-07-24 20:35:32 +05:30 committed by Pablo de Lara
parent 788e748d38
commit 0c4e4c16b0
10 changed files with 177 additions and 1 deletions

View File

@ -872,6 +872,10 @@ F: drivers/compress/isal/
F: doc/guides/compressdevs/isal.rst
F: doc/guides/compressdevs/features/isal.ini
ZLIB
M: Sunila Sahu <sunila.sahu@caviumnetworks.com>
F: drivers/compress/zlib/
Eventdev Drivers
----------------

View File

@ -582,6 +582,11 @@ CONFIG_RTE_COMPRESSDEV_TEST=n
#
CONFIG_RTE_LIBRTE_PMD_ISAL=n
#
# Compile PMD for ZLIB compression device
#
CONFIG_RTE_LIBRTE_PMD_ZLIB=n
#
# Compile generic event device library
#

View File

@ -4,5 +4,6 @@
include $(RTE_SDK)/mk/rte.vars.mk
DIRS-$(CONFIG_RTE_LIBRTE_PMD_ISAL) += isal
DIRS-$(CONFIG_RTE_LIBRTE_PMD_ZLIB) += zlib
include $(RTE_SDK)/mk/rte.subdir.mk

View File

@ -1,7 +1,7 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2018 Intel Corporation
drivers = ['isal', 'qat']
drivers = ['isal', 'qat', 'zlib']
std_deps = ['compressdev'] # compressdev pulls in all other needed deps
config_flag_fmt = 'RTE_LIBRTE_@0@_PMD'

View File

@ -0,0 +1,28 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2018 Cavium Networks
include $(RTE_SDK)/mk/rte.vars.mk
# library name
LIB = librte_pmd_zlib.a
# build flags
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -DALLOW_EXPERIMENTAL_API
# library version
LIBABIVER := 1
# versioning export map
EXPORT_MAP := rte_pmd_zlib_version.map
# external library dependencies
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring -lz
LDLIBS += -lrte_compressdev
LDLIBS += -lrte_bus_vdev
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_PMD_ZLIB) += zlib_pmd.c
include $(RTE_SDK)/mk/rte.lib.mk

View File

@ -0,0 +1,14 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2018 Cavium Networks
dep = dependency('zlib', required: false)
if not dep.found()
build = false
endif
deps += 'bus_vdev'
sources = files('zlib_pmd.c')
ext_deps += dep
pkgconfig_extra_libs += '-lz'
allow_experimental_apis = true

View File

@ -0,0 +1,3 @@
DPDK_18.08 {
local: *;
};

View File

@ -0,0 +1,87 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2018 Cavium Networks
*/
#include <rte_bus_vdev.h>
#include <rte_common.h>
#include "zlib_pmd_private.h"
static int
zlib_create(const char *name,
struct rte_vdev_device *vdev,
struct rte_compressdev_pmd_init_params *init_params)
{
struct rte_compressdev *dev;
dev = rte_compressdev_pmd_create(name, &vdev->device,
sizeof(struct zlib_private), init_params);
if (dev == NULL) {
ZLIB_PMD_ERR("driver %s: create failed", init_params->name);
return -ENODEV;
}
return 0;
}
static int
zlib_probe(struct rte_vdev_device *vdev)
{
struct rte_compressdev_pmd_init_params init_params = {
"",
rte_socket_id()
};
const char *name;
const char *input_args;
int retval;
name = rte_vdev_device_name(vdev);
if (name == NULL)
return -EINVAL;
input_args = rte_vdev_device_args(vdev);
retval = rte_compressdev_pmd_parse_input_args(&init_params, input_args);
if (retval < 0) {
ZLIB_PMD_LOG(ERR,
"Failed to parse initialisation arguments[%s]\n",
input_args);
return -EINVAL;
}
return zlib_create(name, vdev, &init_params);
}
static int
zlib_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 zlib_pmd_drv = {
.probe = zlib_probe,
.remove = zlib_remove
};
RTE_PMD_REGISTER_VDEV(COMPRESSDEV_NAME_ZLIB_PMD, zlib_pmd_drv);
RTE_INIT(zlib_init_log);
static void
zlib_init_log(void)
{
zlib_logtype_driver = rte_log_register("pmd.compress.zlib");
if (zlib_logtype_driver >= 0)
rte_log_set_level(zlib_logtype_driver, RTE_LOG_INFO);
}

View File

@ -0,0 +1,32 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2018 Cavium Networks
*/
#ifndef _RTE_ZLIB_PMD_PRIVATE_H_
#define _RTE_ZLIB_PMD_PRIVATE_H_
#include <zlib.h>
#include <rte_compressdev.h>
#include <rte_compressdev_pmd.h>
#define COMPRESSDEV_NAME_ZLIB_PMD compress_zlib
/**< ZLIB PMD device name */
#define DEF_MEM_LEVEL 8
int zlib_logtype_driver;
#define ZLIB_PMD_LOG(level, fmt, args...) \
rte_log(RTE_LOG_ ## level, zlib_logtype_driver, "%s(): "fmt "\n", \
__func__, ##args)
#define ZLIB_PMD_INFO(fmt, args...) \
ZLIB_PMD_LOG(INFO, fmt, ## args)
#define ZLIB_PMD_ERR(fmt, args...) \
ZLIB_PMD_LOG(ERR, fmt, ## args)
#define ZLIB_PMD_WARN(fmt, args...) \
ZLIB_PMD_LOG(WARNING, fmt, ## args)
struct zlib_private {
};
#endif /* _RTE_ZLIB_PMD_PRIVATE_H_ */

View File

@ -228,6 +228,8 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ISAL) += -lisal
ifeq ($(CONFIG_RTE_LIBRTE_PMD_QAT_SYM),n)
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += -lrte_pmd_qat
endif # CONFIG_RTE_LIBRTE_PMD_QAT_SYM
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ZLIB) += -lrte_pmd_zlib
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_ZLIB) += -lz
endif # CONFIG_RTE_LIBRTE_COMPRESSDEV
ifeq ($(CONFIG_RTE_LIBRTE_EVENTDEV),y)