Hi,
> -----Original Message----- > From: dev <dev-boun...@dpdk.org> On Behalf Of Ori Kam > Sent: Friday, April 17, 2020 3:44 PM > To: Jerin Jacob Kollanukkaran <jer...@marvell.com>; > xiang.w.w...@intel.com > Cc: dev@dpdk.org; Pavan Nikhilesh Bhagavatula > <pbhagavat...@marvell.com>; shah...@mellanox.com; > hemant.agra...@nxp.com; op...@mellanox.com; al...@mellanox.com; > Dovrat Zifroni <dov...@marvell.com>; Prasun Kapoor > <pkap...@marvell.com>; nipun.gu...@nxp.com; > bruce.richard...@intel.com; yang.a.h...@intel.com; > harry.ch...@intel.com; gu.ji...@zte.com.cn; shanjia...@chinatelecom.cn; > zhangy....@chinatelecom.cn; lixin...@huachentel.com; > wush...@inspur.com; yuying...@yxlink.com; > fanchengg...@sunyainfo.com; davidf...@tencent.com; > liuzho...@chinaunicom.cn; zhaoyon...@huawei.com; o...@yunify.com; > j...@netgate.com; hongjun...@intel.com; j.bromh...@titan-ic.com; > d...@ntop.org; f...@napatech.com; arthur...@lionic.com; > tho...@monjalon.net; or...@mellanox.com > Subject: [dpdk-dev] [PATCH v2 2/4] regexdev: add regex core h file > > 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 <or...@mellanox.com> > --- > v2: > * Move private data to rte_regexdev struct. > --- > lib/librte_regexdev/Makefile | 1 + > lib/librte_regexdev/meson.build | 2 +- > lib/librte_regexdev/rte_regexdev.h | 2 + > lib/librte_regexdev/rte_regexdev_core.h | 160 > ++++++++++++++++++++++++++++++++ > 4 files changed, 164 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 6f4cc63..9012d29 100644 > --- a/lib/librte_regexdev/Makefile > +++ b/lib/librte_regexdev/Makefile > @@ -24,6 +24,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 f4db748..1816754 100644 > --- a/lib/librte_regexdev/meson.build > +++ b/lib/librte_regexdev/meson.build > @@ -3,5 +3,5 @@ > > allow_experimental_apis = true > 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 7e688d9..bbc56f9 100644 > --- a/lib/librte_regexdev/rte_regexdev.h > +++ b/lib/librte_regexdev/rte_regexdev.h > @@ -1466,6 +1466,8 @@ struct rte_regex_ops { > rte_regexdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id, > struct rte_regex_ops **ops, uint16_t nb_ops); > > +#include "rte_regexdev_core.h" > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/librte_regexdev/rte_regexdev_core.h > b/lib/librte_regexdev/rte_regexdev_core.h > new file mode 100644 > index 0000000..fb7a27e > --- /dev/null > +++ b/lib/librte_regexdev/rte_regexdev_core.h > @@ -0,0 +1,160 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2019 Mellanox Corporation */ > + > +#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, uint8_t id, > + const struct rte_regexdev_qp_conf > *qp_conf); /**< @internal > +Setup a queue pair.*/ The API is defined as: int rte_regexdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id, const struct rte_regexdev_qp_conf *qp_conf); id is uint8_t opposed to uint16_t > + > +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, > + const char *rule_db); > +/**< @internal Export the current rule database from the RegEx device. > +*/ The API is defined as: int rte_regexdev_rule_db_export(uint8_t dev_id, char *rule_db); char *rule_db is not const > + > +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 int (*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. */ > + rte_regexdev_enqueue_burst() returns uint16_t > +typedef int (*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. */ > + rte_regexdev_dequeue_burst() returns uint16_t > +/** > + * 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; > +}; > + > +#define RTE_REGEXDEV_NAME_MAX_LEN > +/** > + * @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_ */ > -- > 1.8.3.1