regexdev: add core structures
[dpdk.git] / lib / librte_regexdev / rte_regexdev_core.h
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
20 struct rte_regexdev;
21
22 typedef int (*regexdev_info_get_t)(struct rte_regexdev *dev,
23                                    struct rte_regexdev_info *info);
24 /**< @internal Get the RegEx device info. */
25
26 typedef int (*regexdev_configure_t)(struct rte_regexdev *dev,
27                                     const struct rte_regexdev_config *cfg);
28 /**< @internal Configure the RegEx device. */
29
30 typedef 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
34 typedef int (*regexdev_start_t)(struct rte_regexdev *dev);
35 /**< @internal Start the RegEx device. */
36
37 typedef int (*regexdev_stop_t)(struct rte_regexdev *dev);
38 /**< @internal Stop the RegEx device. */
39
40 typedef int (*regexdev_close_t)(struct rte_regexdev *dev);
41 /**< @internal Close the RegEx device. */
42
43 typedef 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
48 typedef 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
53 typedef 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
58 typedef int (*regexdev_rule_db_compile_activate_t)(struct rte_regexdev *dev);
59 /**< @internal Compile the rule database and activate it. */
60
61 typedef 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
66 typedef 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
70 typedef 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
75 typedef 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
80 typedef 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
85 typedef 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
90 typedef int (*regexdev_selftest_t)(struct rte_regexdev *dev);
91 /**< @internal Trigger RegEx self test. */
92
93 typedef int (*regexdev_dump_t)(struct rte_regexdev *dev, FILE *f);
94 /**< @internal Dump internal information about the RegEx device. */
95
96 typedef 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
101 typedef 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  */
109 struct 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  * @internal
132  * The data part, with no function pointers, associated with each RegEx device.
133  *
134  * This structure is safe to place in shared memory to be common among different
135  * processes in a multi-process configuration.
136  */
137 struct rte_regexdev_data {
138         void *dev_private; /**< PMD-specific private data. */
139 } __rte_cache_aligned;
140
141 /**
142  * @internal
143  * The generic data structure associated with each RegEx device.
144  *
145  * Pointers to burst-oriented packet receive and transmit functions are
146  * located at the beginning of the structure, along with the pointer to
147  * where all the data elements for the particular device are stored in shared
148  * memory. This split allows the function pointer and driver data to be per-
149  * process, while the actual configuration data for the device is shared.
150  */
151 struct rte_regexdev {
152         regexdev_enqueue_t enqueue;
153         regexdev_dequeue_t dequeue;
154         const struct rte_regexdev_ops *dev_ops;
155         /**< Functions exported by PMD */
156         struct rte_device *device; /**< Backing device */
157         struct rte_regexdev_data *data;  /**< Pointer to device data. */
158 } __rte_cache_aligned;
159
160 #endif /* _RTE_REGEX_CORE_H_ */