dpdk/lib/librte_regexdev/rte_regexdev_core.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright 2020 Mellanox Technologies, Ltd
   3 */
   4
   5#ifndef _RTE_REGEX_CORE_H_
   6#define _RTE_REGEX_CORE_H_
   7
   8/**
   9 * @file
  10 *
  11 * RTE RegEx Device internal header.
  12 *
  13 * This header contains internal data types, that are used by the RegEx devices
  14 * in order to expose their ops to the class.
  15 *
  16 * Applications should not use these API directly.
  17 *
  18 */
  19
  20struct rte_regexdev;
  21
  22typedef int (*regexdev_info_get_t)(struct rte_regexdev *dev,
  23                                   struct rte_regexdev_info *info);
  24/**< @internal Get the RegEx device info. */
  25
  26typedef int (*regexdev_configure_t)(struct rte_regexdev *dev,
  27                                    const struct rte_regexdev_config *cfg);
  28/**< @internal Configure the RegEx device. */
  29
  30typedef int (*regexdev_qp_setup_t)(struct rte_regexdev *dev, uint16_t id,
  31                                   const struct rte_regexdev_qp_conf *qp_conf);
  32/**< @internal Setup a queue pair.*/
  33
  34typedef int (*regexdev_start_t)(struct rte_regexdev *dev);
  35/**< @internal Start the RegEx device. */
  36
  37typedef int (*regexdev_stop_t)(struct rte_regexdev *dev);
  38/**< @internal Stop the RegEx device. */
  39
  40typedef int (*regexdev_close_t)(struct rte_regexdev *dev);
  41/**< @internal Close the RegEx device. */
  42
  43typedef int (*regexdev_attr_get_t)(struct rte_regexdev *dev,
  44                                   enum rte_regexdev_attr_id id,
  45                                   void *value);
  46/**< @internal Get selected attribute from RegEx device. */
  47
  48typedef int (*regexdev_attr_set_t)(struct rte_regexdev *dev,
  49                                   enum rte_regexdev_attr_id id,
  50                                   const void *value);
  51/**< @internal Set selected attribute to RegEx device. */
  52
  53typedef int (*regexdev_rule_db_update_t)(struct rte_regexdev *dev,
  54                                         const struct rte_regexdev_rule *rules,
  55                                         uint16_t nb_rules);
  56/**< @internal Update the rule database for the RegEx device. */
  57
  58typedef int (*regexdev_rule_db_compile_activate_t)(struct rte_regexdev *dev);
  59/**< @internal Compile the rule database and activate it. */
  60
  61typedef int (*regexdev_rule_db_import_t)(struct rte_regexdev *dev,
  62                                         const  char *rule_db,
  63                                         uint32_t rule_db_len);
  64/**< @internal Upload a pre created rule database to the RegEx device. */
  65
  66typedef int (*regexdev_rule_db_export_t)(struct rte_regexdev *dev,
  67                                         char *rule_db);
  68/**< @internal Export the current rule database from the RegEx device. */
  69
  70typedef int (*regexdev_xstats_names_get_t)(struct rte_regexdev *dev,
  71                                           struct rte_regexdev_xstats_map
  72                                           *xstats_map);
  73/**< @internal Get xstats name map for the RegEx device. */
  74
  75typedef int (*regexdev_xstats_get_t)(struct rte_regexdev *dev,
  76                                     const uint16_t *ids, uint64_t *values,
  77                                     uint16_t nb_values);
  78/**< @internal Get xstats values for the RegEx device. */
  79
  80typedef int (*regexdev_xstats_by_name_get_t)(struct rte_regexdev *dev,
  81                                             const char *name, uint16_t *id,
  82                                             uint64_t *value);
  83/**< @internal Get xstat value for the RegEx device based on the xstats name. */
  84
  85typedef int (*regexdev_xstats_reset_t)(struct rte_regexdev *dev,
  86                                       const uint16_t *ids,
  87                                       uint16_t nb_ids);
  88/**< @internal Reset xstats values for the RegEx device. */
  89
  90typedef int (*regexdev_selftest_t)(struct rte_regexdev *dev);
  91/**< @internal Trigger RegEx self test. */
  92
  93typedef int (*regexdev_dump_t)(struct rte_regexdev *dev, FILE *f);
  94/**< @internal Dump internal information about the RegEx device. */
  95
  96typedef uint16_t (*regexdev_enqueue_t)(struct rte_regexdev *dev, uint16_t qp_id,
  97                                       struct rte_regex_ops **ops,
  98                                       uint16_t nb_ops);
  99/**< @internal Enqueue a burst of scan requests to a queue on RegEx device. */
 100
 101typedef uint16_t (*regexdev_dequeue_t)(struct rte_regexdev *dev, uint16_t qp_id,
 102                                       struct rte_regex_ops **ops,
 103                                       uint16_t nb_ops);
 104/**< @internal Dequeue a burst of scan response from a queue on RegEx device. */
 105
 106/**
 107 * RegEx device operations
 108 */
 109struct rte_regexdev_ops {
 110        regexdev_info_get_t dev_info_get;
 111        regexdev_configure_t dev_configure;
 112        regexdev_qp_setup_t dev_qp_setup;
 113        regexdev_start_t dev_start;
 114        regexdev_stop_t dev_stop;
 115        regexdev_close_t dev_close;
 116        regexdev_attr_get_t dev_attr_get;
 117        regexdev_attr_set_t dev_attr_set;
 118        regexdev_rule_db_update_t dev_rule_db_update;
 119        regexdev_rule_db_compile_activate_t dev_rule_db_compile_activate;
 120        regexdev_rule_db_import_t dev_db_import;
 121        regexdev_rule_db_export_t dev_db_export;
 122        regexdev_xstats_names_get_t dev_xstats_names_get;
 123        regexdev_xstats_get_t dev_xstats_get;
 124        regexdev_xstats_by_name_get_t dev_xstats_by_name_get;
 125        regexdev_xstats_reset_t dev_xstats_reset;
 126        regexdev_selftest_t dev_selftest;
 127        regexdev_dump_t dev_dump;
 128};
 129
 130/**
 131 * Possible states of a RegEx device.
 132 */
 133enum rte_regexdev_state {
 134        RTE_REGEXDEV_UNUSED = 0, /**< Device is unused. */
 135        RTE_REGEXDEV_REGISTERED,
 136        /**< Device is registered, but not ready to be used. */
 137        RTE_REGEXDEV_READY,
 138        /**< Device is ready for use. This is set by the PMD. */
 139};
 140
 141/**
 142 * @internal
 143 * The data part, with no function pointers, associated with each RegEx device.
 144 *
 145 * This structure is safe to place in shared memory to be common among different
 146 * processes in a multi-process configuration.
 147 */
 148struct rte_regexdev_data {
 149        void *dev_private; /**< PMD-specific private data. */
 150        char dev_name[RTE_REGEXDEV_NAME_MAX_LEN]; /**< Unique identifier name */
 151        uint16_t dev_id; /**< Device [external]  identifier. */
 152        struct rte_regexdev_config dev_conf; /**< RegEx configuration. */
 153        uint8_t dev_started : 1; /**< Device started to work. */
 154} __rte_cache_aligned;
 155
 156/**
 157 * @internal
 158 * The generic data structure associated with each RegEx device.
 159 *
 160 * Pointers to burst-oriented packet receive and transmit functions are
 161 * located at the beginning of the structure, along with the pointer to
 162 * where all the data elements for the particular device are stored in shared
 163 * memory. This split allows the function pointer and driver data to be per-
 164 * process, while the actual configuration data for the device is shared.
 165 */
 166struct rte_regexdev {
 167        regexdev_enqueue_t enqueue;
 168        regexdev_dequeue_t dequeue;
 169        const struct rte_regexdev_ops *dev_ops;
 170        /**< Functions exported by PMD */
 171        struct rte_device *device; /**< Backing device */
 172        enum rte_regexdev_state state; /**< The device state. */
 173        struct rte_regexdev_data *data;  /**< Pointer to device data. */
 174} __rte_cache_aligned;
 175
 176/**
 177 * @internal
 178 * The pool of *rte_regexdev* structures. The size of the pool
 179 * is configured at compile-time in the <rte_regexdev.c> file.
 180 */
 181extern struct rte_regexdev rte_regex_devices[];
 182
 183#endif /* _RTE_REGEX_CORE_H_ */
 184