From 490e725b95b2a9a02eb979fc0ef35e9d46367329 Mon Sep 17 00:00:00 2001 From: Lee Daly Date: Wed, 9 May 2018 17:14:27 +0100 Subject: [PATCH] compress/isal: add device init and de-init This patch adds device initialization functionality such as probe and create, also adding deinitialize functionality. Dynamic logging component also added. Signed-off-by: Lee Daly Reviewed-by: Pablo de Lara --- drivers/compress/isal/Makefile | 1 + drivers/compress/isal/isal_compress_pmd.c | 74 ++++++++++++++++++- drivers/compress/isal/isal_compress_pmd_ops.c | 25 +++++++ .../compress/isal/isal_compress_pmd_private.h | 24 ++++++ drivers/compress/isal/meson.build | 2 +- 5 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 drivers/compress/isal/isal_compress_pmd_ops.c create mode 100644 drivers/compress/isal/isal_compress_pmd_private.h diff --git a/drivers/compress/isal/Makefile b/drivers/compress/isal/Makefile index 9b1d86666b..95904f6418 100644 --- a/drivers/compress/isal/Makefile +++ b/drivers/compress/isal/Makefile @@ -25,6 +25,7 @@ EXPORT_MAP := rte_pmd_isal_version.map # library source files SRCS-$(CONFIG_RTE_LIBRTE_PMD_ISAL) += isal_compress_pmd.c +SRCS-$(CONFIG_RTE_LIBRTE_PMD_ISAL) += isal_compress_pmd_ops.c # export include files include $(RTE_SDK)/mk/rte.lib.mk diff --git a/drivers/compress/isal/isal_compress_pmd.c b/drivers/compress/isal/isal_compress_pmd.c index d7137fd40d..5cc9409132 100644 --- a/drivers/compress/isal/isal_compress_pmd.c +++ b/drivers/compress/isal/isal_compress_pmd.c @@ -3,20 +3,76 @@ */ #include +#include +#include #include -/** Remove compression device */ +#include "isal_compress_pmd_private.h" + +int isal_logtype_driver; + +/* Create ISA-L compression device */ static int -compdev_isal_remove_dev(struct rte_vdev_device *vdev __rte_unused) +compdev_isal_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 isal_comp_private), init_params); + if (dev == NULL) { + ISAL_PMD_LOG(ERR, "failed to create compressdev vdev"); + return -EFAULT; + } + + dev->dev_ops = isal_compress_pmd_ops; + return 0; } +/** Remove compression device */ +static int +compdev_isal_remove_dev(struct rte_vdev_device *vdev) +{ + struct rte_compressdev *compdev; + const char *name; + + name = rte_vdev_device_name(vdev); + if (name == NULL) + return -EINVAL; + + compdev = rte_compressdev_pmd_get_named_dev(name); + if (compdev == NULL) + return -ENODEV; + + return rte_compressdev_pmd_destroy(compdev); +} + /** Initialise ISA-L compression device */ static int -compdev_isal_probe(struct rte_vdev_device *dev __rte_unused) +compdev_isal_probe(struct rte_vdev_device *dev) { - return 0; + struct rte_compressdev_pmd_init_params init_params = { + "", + rte_socket_id(), + }; + const char *name, *args; + int retval; + + name = rte_vdev_device_name(dev); + if (name == NULL) + return -EINVAL; + + args = rte_vdev_device_args(dev); + + retval = rte_compressdev_pmd_parse_input_args(&init_params, args); + if (retval) { + ISAL_PMD_LOG(ERR, + "Failed to parse initialisation arguments[%s]\n", args); + return -EINVAL; + } + + return compdev_isal_create(name, dev, &init_params); } static struct rte_vdev_driver compdev_isal_pmd_drv = { @@ -27,3 +83,13 @@ static struct rte_vdev_driver compdev_isal_pmd_drv = { RTE_PMD_REGISTER_VDEV(COMPDEV_NAME_ISAL_PMD, compdev_isal_pmd_drv); RTE_PMD_REGISTER_PARAM_STRING(COMPDEV_NAME_ISAL_PMD, "socket_id="); + +RTE_INIT(isal_init_log); + +static void +isal_init_log(void) +{ + isal_logtype_driver = rte_log_register("comp_isal"); + if (isal_logtype_driver >= 0) + rte_log_set_level(isal_logtype_driver, RTE_LOG_INFO); +} diff --git a/drivers/compress/isal/isal_compress_pmd_ops.c b/drivers/compress/isal/isal_compress_pmd_ops.c new file mode 100644 index 0000000000..cff05b4086 --- /dev/null +++ b/drivers/compress/isal/isal_compress_pmd_ops.c @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include + +struct rte_compressdev_ops isal_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, +}; + +struct rte_compressdev_ops *isal_compress_pmd_ops = &isal_pmd_ops; diff --git a/drivers/compress/isal/isal_compress_pmd_private.h b/drivers/compress/isal/isal_compress_pmd_private.h new file mode 100644 index 0000000000..09ecfb730c --- /dev/null +++ b/drivers/compress/isal/isal_compress_pmd_private.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#ifndef _ISAL_COMP_PMD_PRIVATE_H_ +#define _ISAL_COMP_PMD_PRIVATE_H_ + +#define COMPDEV_NAME_ISAL_PMD compress_isal +/**< ISA-L comp PMD device name */ + +extern int isal_logtype_driver; +#define ISAL_PMD_LOG(level, fmt, args...) \ + rte_log(RTE_LOG_ ## level, isal_logtype_driver, "%s(): "fmt "\n", \ + __func__, ##args) + +/* private data structure for each ISA-L compression device */ +struct isal_comp_private { + struct rte_mempool *priv_xform_mp; +}; + +/** device specific operations function pointer structure */ +extern struct rte_compressdev_ops *isal_compress_pmd_ops; + +#endif /* _ISAL_COMP_PMD_PRIVATE_H_ */ diff --git a/drivers/compress/isal/meson.build b/drivers/compress/isal/meson.build index 4447e2046e..94c10fd602 100644 --- a/drivers/compress/isal/meson.build +++ b/drivers/compress/isal/meson.build @@ -7,7 +7,7 @@ if not dep.found() endif deps += 'bus_vdev' -sources = files('isal_compress_pmd.c') +sources = files('isal_compress_pmd.c', 'isal_compress_pmd_ops.c') ext_deps += dep pkgconfig_extra_libs += '-lisal' -- 2.20.1