From 9c26771bc58d7d91231b53128511a8e1e3e4cb77 Mon Sep 17 00:00:00 2001 From: Ori Kam Date: Mon, 6 Jul 2020 17:36:47 +0000 Subject: [PATCH] regexdev: add core structures This commit introduce the rte_regexdev_core.h file. This file holds internal structures and API that are used by the regexdev. Signed-off-by: Ori Kam Acked-by: Guy Kaneti --- lib/librte_regexdev/Makefile | 1 + lib/librte_regexdev/meson.build | 3 +- lib/librte_regexdev/rte_regexdev.h | 2 + lib/librte_regexdev/rte_regexdev_core.h | 160 ++++++++++++++++++++++++ 4 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 lib/librte_regexdev/rte_regexdev_core.h diff --git a/lib/librte_regexdev/Makefile b/lib/librte_regexdev/Makefile index 5da4d00260..e6e9d6b33d 100644 --- a/lib/librte_regexdev/Makefile +++ b/lib/librte_regexdev/Makefile @@ -23,6 +23,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_REGEXDEV) := rte_regexdev.c # export include files SYMLINK-$(CONFIG_RTE_LIBRTE_REGEXDEV)-include += rte_regexdev.h +SYMLINK-$(CONFIG_RTE_LIBRTE_REGEXDEV)-include += rte_regexdev_core.h # versioning export map EXPORT_MAP := rte_regexdev_version.map diff --git a/lib/librte_regexdev/meson.build b/lib/librte_regexdev/meson.build index 3484ec5a11..f321b1fe36 100644 --- a/lib/librte_regexdev/meson.build +++ b/lib/librte_regexdev/meson.build @@ -2,5 +2,6 @@ # Copyright 2020 Mellanox Technologies, Ltd sources = files('rte_regexdev.c') -headers = files('rte_regexdev.h') +headers = files('rte_regexdev.h', + 'rte_regexdev_core.h') deps += ['mbuf'] diff --git a/lib/librte_regexdev/rte_regexdev.h b/lib/librte_regexdev/rte_regexdev.h index 09bf8865f3..ec1dd4b036 100644 --- a/lib/librte_regexdev/rte_regexdev.h +++ b/lib/librte_regexdev/rte_regexdev.h @@ -1377,6 +1377,8 @@ struct rte_regex_ops { */ }; +#include "rte_regexdev_core.h" + /** * @warning * @b EXPERIMENTAL: this API may change without prior notice. diff --git a/lib/librte_regexdev/rte_regexdev_core.h b/lib/librte_regexdev/rte_regexdev_core.h new file mode 100644 index 0000000000..c46438fffd --- /dev/null +++ b/lib/librte_regexdev/rte_regexdev_core.h @@ -0,0 +1,160 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020 Mellanox Technologies, Ltd + */ + +#ifndef _RTE_REGEX_CORE_H_ +#define _RTE_REGEX_CORE_H_ + +/** + * @file + * + * RTE RegEx Device internal header. + * + * This header contains internal data types, that are used by the RegEx devices + * in order to expose their ops to the class. + * + * Applications should not use these API directly. + * + */ + +struct rte_regexdev; + +typedef int (*regexdev_info_get_t)(struct rte_regexdev *dev, + struct rte_regexdev_info *info); +/**< @internal Get the RegEx device info. */ + +typedef int (*regexdev_configure_t)(struct rte_regexdev *dev, + const struct rte_regexdev_config *cfg); +/**< @internal Configure the RegEx device. */ + +typedef int (*regexdev_qp_setup_t)(struct rte_regexdev *dev, uint16_t id, + const struct rte_regexdev_qp_conf *qp_conf); +/**< @internal Setup a queue pair.*/ + +typedef int (*regexdev_start_t)(struct rte_regexdev *dev); +/**< @internal Start the RegEx device. */ + +typedef int (*regexdev_stop_t)(struct rte_regexdev *dev); +/**< @internal Stop the RegEx device. */ + +typedef int (*regexdev_close_t)(struct rte_regexdev *dev); +/**< @internal Close the RegEx device. */ + +typedef int (*regexdev_attr_get_t)(struct rte_regexdev *dev, + enum rte_regexdev_attr_id id, + void *value); +/**< @internal Get selected attribute from RegEx device. */ + +typedef int (*regexdev_attr_set_t)(struct rte_regexdev *dev, + enum rte_regexdev_attr_id id, + const void *value); +/**< @internal Set selected attribute to RegEx device. */ + +typedef int (*regexdev_rule_db_update_t)(struct rte_regexdev *dev, + const struct rte_regexdev_rule *rules, + uint16_t nb_rules); +/**< @internal Update the rule database for the RegEx device. */ + +typedef int (*regexdev_rule_db_compile_activate_t)(struct rte_regexdev *dev); +/**< @internal Compile the rule database and activate it. */ + +typedef int (*regexdev_rule_db_import_t)(struct rte_regexdev *dev, + const char *rule_db, + uint32_t rule_db_len); +/**< @internal Upload a pre created rule database to the RegEx device. */ + +typedef int (*regexdev_rule_db_export_t)(struct rte_regexdev *dev, + char *rule_db); +/**< @internal Export the current rule database from the RegEx device. */ + +typedef int (*regexdev_xstats_names_get_t)(struct rte_regexdev *dev, + struct rte_regexdev_xstats_map + *xstats_map); +/**< @internal Get xstats name map for the RegEx device. */ + +typedef int (*regexdev_xstats_get_t)(struct rte_regexdev *dev, + const uint16_t *ids, uint64_t *values, + uint16_t nb_values); +/**< @internal Get xstats values for the RegEx device. */ + +typedef int (*regexdev_xstats_by_name_get_t)(struct rte_regexdev *dev, + const char *name, uint16_t *id, + uint64_t *value); +/**< @internal Get xstat value for the RegEx device based on the xstats name. */ + +typedef int (*regexdev_xstats_reset_t)(struct rte_regexdev *dev, + const uint16_t *ids, + uint16_t nb_ids); +/**< @internal Reset xstats values for the RegEx device. */ + +typedef int (*regexdev_selftest_t)(struct rte_regexdev *dev); +/**< @internal Trigger RegEx self test. */ + +typedef int (*regexdev_dump_t)(struct rte_regexdev *dev, FILE *f); +/**< @internal Dump internal information about the RegEx device. */ + +typedef uint16_t (*regexdev_enqueue_t)(struct rte_regexdev *dev, uint16_t qp_id, + struct rte_regex_ops **ops, + uint16_t nb_ops); +/**< @internal Enqueue a burst of scan requests to a queue on RegEx device. */ + +typedef uint16_t (*regexdev_dequeue_t)(struct rte_regexdev *dev, uint16_t qp_id, + struct rte_regex_ops **ops, + uint16_t nb_ops); +/**< @internal Dequeue a burst of scan response from a queue on RegEx device. */ + +/** + * RegEx device operations + */ +struct rte_regexdev_ops { + regexdev_info_get_t dev_info_get; + regexdev_configure_t dev_configure; + regexdev_qp_setup_t dev_qp_setup; + regexdev_start_t dev_start; + regexdev_stop_t dev_stop; + regexdev_close_t dev_close; + regexdev_attr_get_t dev_attr_get; + regexdev_attr_set_t dev_attr_set; + regexdev_rule_db_update_t dev_rule_db_update; + regexdev_rule_db_compile_activate_t dev_rule_db_compile_activate; + regexdev_rule_db_import_t dev_db_import; + regexdev_rule_db_export_t dev_db_export; + regexdev_xstats_names_get_t dev_xstats_names_get; + regexdev_xstats_get_t dev_xstats_get; + regexdev_xstats_by_name_get_t dev_xstats_by_name_get; + regexdev_xstats_reset_t dev_xstats_reset; + regexdev_selftest_t dev_selftest; + regexdev_dump_t dev_dump; +}; + +/** + * @internal + * The data part, with no function pointers, associated with each RegEx device. + * + * This structure is safe to place in shared memory to be common among different + * processes in a multi-process configuration. + */ +struct rte_regexdev_data { + void *dev_private; /**< PMD-specific private data. */ +} __rte_cache_aligned; + +/** + * @internal + * The generic data structure associated with each RegEx device. + * + * Pointers to burst-oriented packet receive and transmit functions are + * located at the beginning of the structure, along with the pointer to + * where all the data elements for the particular device are stored in shared + * memory. This split allows the function pointer and driver data to be per- + * process, while the actual configuration data for the device is shared. + */ +struct rte_regexdev { + regexdev_enqueue_t enqueue; + regexdev_dequeue_t dequeue; + const struct rte_regexdev_ops *dev_ops; + /**< Functions exported by PMD */ + struct rte_device *device; /**< Backing device */ + struct rte_regexdev_data *data; /**< Pointer to device data. */ +} __rte_cache_aligned; + +#endif /* _RTE_REGEX_CORE_H_ */ -- 2.20.1