199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 299a2dd95SBruce Richardson * Copyright 2016 6WIND S.A. 399a2dd95SBruce Richardson * Copyright 2016 Mellanox Technologies, Ltd 499a2dd95SBruce Richardson */ 599a2dd95SBruce Richardson 699a2dd95SBruce Richardson #ifndef RTE_FLOW_DRIVER_H_ 799a2dd95SBruce Richardson #define RTE_FLOW_DRIVER_H_ 899a2dd95SBruce Richardson 999a2dd95SBruce Richardson /** 1099a2dd95SBruce Richardson * @file 1199a2dd95SBruce Richardson * RTE generic flow API (driver side) 1299a2dd95SBruce Richardson * 1399a2dd95SBruce Richardson * This file provides implementation helpers for internal use by PMDs, they 1499a2dd95SBruce Richardson * are not intended to be exposed to applications and are not subject to ABI 1599a2dd95SBruce Richardson * versioning. 1699a2dd95SBruce Richardson */ 1799a2dd95SBruce Richardson 1899a2dd95SBruce Richardson #include <stdint.h> 1999a2dd95SBruce Richardson 2099a2dd95SBruce Richardson #include "rte_ethdev.h" 2199a2dd95SBruce Richardson #include "ethdev_driver.h" 2299a2dd95SBruce Richardson #include "rte_flow.h" 2399a2dd95SBruce Richardson 2499a2dd95SBruce Richardson #ifdef __cplusplus 2599a2dd95SBruce Richardson extern "C" { 2699a2dd95SBruce Richardson #endif 2799a2dd95SBruce Richardson 2899a2dd95SBruce Richardson /** 2999a2dd95SBruce Richardson * Generic flow operations structure implemented and returned by PMDs. 3099a2dd95SBruce Richardson * 3199a2dd95SBruce Richardson * These callback functions are not supposed to be used by applications 3299a2dd95SBruce Richardson * directly, which must rely on the API defined in rte_flow.h. 3399a2dd95SBruce Richardson * 3499a2dd95SBruce Richardson * Public-facing wrapper functions perform a few consistency checks so that 3599a2dd95SBruce Richardson * unimplemented (i.e. NULL) callbacks simply return -ENOTSUP. These 3699a2dd95SBruce Richardson * callbacks otherwise only differ by their first argument (with port ID 3799a2dd95SBruce Richardson * already resolved to a pointer to struct rte_eth_dev). 3899a2dd95SBruce Richardson */ 3999a2dd95SBruce Richardson struct rte_flow_ops { 4099a2dd95SBruce Richardson /** See rte_flow_validate(). */ 4199a2dd95SBruce Richardson int (*validate) 4299a2dd95SBruce Richardson (struct rte_eth_dev *, 4399a2dd95SBruce Richardson const struct rte_flow_attr *, 4499a2dd95SBruce Richardson const struct rte_flow_item [], 4599a2dd95SBruce Richardson const struct rte_flow_action [], 4699a2dd95SBruce Richardson struct rte_flow_error *); 4799a2dd95SBruce Richardson /** See rte_flow_create(). */ 4899a2dd95SBruce Richardson struct rte_flow *(*create) 4999a2dd95SBruce Richardson (struct rte_eth_dev *, 5099a2dd95SBruce Richardson const struct rte_flow_attr *, 5199a2dd95SBruce Richardson const struct rte_flow_item [], 5299a2dd95SBruce Richardson const struct rte_flow_action [], 5399a2dd95SBruce Richardson struct rte_flow_error *); 5499a2dd95SBruce Richardson /** See rte_flow_destroy(). */ 5599a2dd95SBruce Richardson int (*destroy) 5699a2dd95SBruce Richardson (struct rte_eth_dev *, 5799a2dd95SBruce Richardson struct rte_flow *, 5899a2dd95SBruce Richardson struct rte_flow_error *); 5999a2dd95SBruce Richardson /** See rte_flow_flush(). */ 6099a2dd95SBruce Richardson int (*flush) 6199a2dd95SBruce Richardson (struct rte_eth_dev *, 6299a2dd95SBruce Richardson struct rte_flow_error *); 6399a2dd95SBruce Richardson /** See rte_flow_query(). */ 6499a2dd95SBruce Richardson int (*query) 6599a2dd95SBruce Richardson (struct rte_eth_dev *, 6699a2dd95SBruce Richardson struct rte_flow *, 6799a2dd95SBruce Richardson const struct rte_flow_action *, 6899a2dd95SBruce Richardson void *, 6999a2dd95SBruce Richardson struct rte_flow_error *); 7099a2dd95SBruce Richardson /** See rte_flow_isolate(). */ 7199a2dd95SBruce Richardson int (*isolate) 7299a2dd95SBruce Richardson (struct rte_eth_dev *, 7399a2dd95SBruce Richardson int, 7499a2dd95SBruce Richardson struct rte_flow_error *); 7599a2dd95SBruce Richardson /** See rte_flow_dev_dump(). */ 7699a2dd95SBruce Richardson int (*dev_dump) 7799a2dd95SBruce Richardson (struct rte_eth_dev *dev, 7899a2dd95SBruce Richardson struct rte_flow *flow, 7999a2dd95SBruce Richardson FILE *file, 8099a2dd95SBruce Richardson struct rte_flow_error *error); 8199a2dd95SBruce Richardson /** See rte_flow_get_aged_flows() */ 8299a2dd95SBruce Richardson int (*get_aged_flows) 8399a2dd95SBruce Richardson (struct rte_eth_dev *dev, 8499a2dd95SBruce Richardson void **context, 8599a2dd95SBruce Richardson uint32_t nb_contexts, 8699a2dd95SBruce Richardson struct rte_flow_error *err); 87966eb55eSMichael Baum /** See rte_flow_get_q_aged_flows() */ 88966eb55eSMichael Baum int (*get_q_aged_flows) 89966eb55eSMichael Baum (struct rte_eth_dev *dev, 90966eb55eSMichael Baum uint32_t queue_id, 91966eb55eSMichael Baum void **contexts, 92966eb55eSMichael Baum uint32_t nb_contexts, 93966eb55eSMichael Baum struct rte_flow_error *error); 944b61b877SBing Zhao /** See rte_flow_action_handle_create() */ 954b61b877SBing Zhao struct rte_flow_action_handle *(*action_handle_create) 9699a2dd95SBruce Richardson (struct rte_eth_dev *dev, 974b61b877SBing Zhao const struct rte_flow_indir_action_conf *conf, 9899a2dd95SBruce Richardson const struct rte_flow_action *action, 9999a2dd95SBruce Richardson struct rte_flow_error *error); 1004b61b877SBing Zhao /** See rte_flow_action_handle_destroy() */ 1014b61b877SBing Zhao int (*action_handle_destroy) 10299a2dd95SBruce Richardson (struct rte_eth_dev *dev, 1034b61b877SBing Zhao struct rte_flow_action_handle *handle, 10499a2dd95SBruce Richardson struct rte_flow_error *error); 1054b61b877SBing Zhao /** See rte_flow_action_handle_update() */ 1064b61b877SBing Zhao int (*action_handle_update) 10799a2dd95SBruce Richardson (struct rte_eth_dev *dev, 1084b61b877SBing Zhao struct rte_flow_action_handle *handle, 1094b61b877SBing Zhao const void *update, 11099a2dd95SBruce Richardson struct rte_flow_error *error); 1114b61b877SBing Zhao /** See rte_flow_action_handle_query() */ 1124b61b877SBing Zhao int (*action_handle_query) 11399a2dd95SBruce Richardson (struct rte_eth_dev *dev, 1144b61b877SBing Zhao const struct rte_flow_action_handle *handle, 11599a2dd95SBruce Richardson void *data, 11699a2dd95SBruce Richardson struct rte_flow_error *error); 117044c47b4SGregory Etelson /** See rte_flow_action_handle_query_update() */ 118044c47b4SGregory Etelson int (*action_handle_query_update) 119044c47b4SGregory Etelson (struct rte_eth_dev *dev, 120044c47b4SGregory Etelson struct rte_flow_action_handle *handle, 121044c47b4SGregory Etelson const void *update, void *query, 122044c47b4SGregory Etelson enum rte_flow_query_update_mode qu_mode, 123044c47b4SGregory Etelson struct rte_flow_error *error); 12472a3dec7SGregory Etelson /** @see rte_flow_action_list_handle_create() */ 12572a3dec7SGregory Etelson struct rte_flow_action_list_handle *(*action_list_handle_create) 12672a3dec7SGregory Etelson (struct rte_eth_dev *dev, 12772a3dec7SGregory Etelson const struct rte_flow_indir_action_conf *conf, 12872a3dec7SGregory Etelson const struct rte_flow_action actions[], 12972a3dec7SGregory Etelson struct rte_flow_error *error); 13072a3dec7SGregory Etelson /** @see rte_flow_action_list_handle_destroy() */ 13172a3dec7SGregory Etelson int (*action_list_handle_destroy) 13272a3dec7SGregory Etelson (struct rte_eth_dev *dev, 13372a3dec7SGregory Etelson struct rte_flow_action_list_handle *handle, 13472a3dec7SGregory Etelson struct rte_flow_error *error); 13599a2dd95SBruce Richardson /** See rte_flow_tunnel_decap_set() */ 13699a2dd95SBruce Richardson int (*tunnel_decap_set) 13799a2dd95SBruce Richardson (struct rte_eth_dev *dev, 13899a2dd95SBruce Richardson struct rte_flow_tunnel *tunnel, 13999a2dd95SBruce Richardson struct rte_flow_action **pmd_actions, 14099a2dd95SBruce Richardson uint32_t *num_of_actions, 14199a2dd95SBruce Richardson struct rte_flow_error *err); 14299a2dd95SBruce Richardson /** See rte_flow_tunnel_match() */ 14399a2dd95SBruce Richardson int (*tunnel_match) 14499a2dd95SBruce Richardson (struct rte_eth_dev *dev, 14599a2dd95SBruce Richardson struct rte_flow_tunnel *tunnel, 14699a2dd95SBruce Richardson struct rte_flow_item **pmd_items, 14799a2dd95SBruce Richardson uint32_t *num_of_items, 14899a2dd95SBruce Richardson struct rte_flow_error *err); 14999a2dd95SBruce Richardson /** See rte_flow_get_rte_flow_restore_info() */ 15099a2dd95SBruce Richardson int (*get_restore_info) 15199a2dd95SBruce Richardson (struct rte_eth_dev *dev, 15299a2dd95SBruce Richardson struct rte_mbuf *m, 15399a2dd95SBruce Richardson struct rte_flow_restore_info *info, 15499a2dd95SBruce Richardson struct rte_flow_error *err); 15599a2dd95SBruce Richardson /** See rte_flow_action_tunnel_decap_release() */ 15699a2dd95SBruce Richardson int (*tunnel_action_decap_release) 15799a2dd95SBruce Richardson (struct rte_eth_dev *dev, 15899a2dd95SBruce Richardson struct rte_flow_action *pmd_actions, 15999a2dd95SBruce Richardson uint32_t num_of_actions, 16099a2dd95SBruce Richardson struct rte_flow_error *err); 16199a2dd95SBruce Richardson /** See rte_flow_item_release() */ 16299a2dd95SBruce Richardson int (*tunnel_item_release) 16399a2dd95SBruce Richardson (struct rte_eth_dev *dev, 16499a2dd95SBruce Richardson struct rte_flow_item *pmd_items, 16599a2dd95SBruce Richardson uint32_t num_of_items, 16699a2dd95SBruce Richardson struct rte_flow_error *err); 1671179f05cSIvan Malov /** See rte_flow_pick_transfer_proxy() */ 1681179f05cSIvan Malov int (*pick_transfer_proxy) 1691179f05cSIvan Malov (struct rte_eth_dev *dev, 1701179f05cSIvan Malov uint16_t *proxy_port_id, 1711179f05cSIvan Malov struct rte_flow_error *error); 172dc4d860eSViacheslav Ovsiienko struct rte_flow_item_flex_handle *(*flex_item_create) 173dc4d860eSViacheslav Ovsiienko (struct rte_eth_dev *dev, 174dc4d860eSViacheslav Ovsiienko const struct rte_flow_item_flex_conf *conf, 175dc4d860eSViacheslav Ovsiienko struct rte_flow_error *error); 176dc4d860eSViacheslav Ovsiienko int (*flex_item_release) 177dc4d860eSViacheslav Ovsiienko (struct rte_eth_dev *dev, 178dc4d860eSViacheslav Ovsiienko const struct rte_flow_item_flex_handle *handle, 179dc4d860eSViacheslav Ovsiienko struct rte_flow_error *error); 1804ff58b73SAlexander Kozyrev /** See rte_flow_info_get() */ 1814ff58b73SAlexander Kozyrev int (*info_get) 1824ff58b73SAlexander Kozyrev (struct rte_eth_dev *dev, 1834ff58b73SAlexander Kozyrev struct rte_flow_port_info *port_info, 184197e820cSAlexander Kozyrev struct rte_flow_queue_info *queue_info, 1854ff58b73SAlexander Kozyrev struct rte_flow_error *err); 1864ff58b73SAlexander Kozyrev /** See rte_flow_configure() */ 1874ff58b73SAlexander Kozyrev int (*configure) 1884ff58b73SAlexander Kozyrev (struct rte_eth_dev *dev, 1894ff58b73SAlexander Kozyrev const struct rte_flow_port_attr *port_attr, 190197e820cSAlexander Kozyrev uint16_t nb_queue, 191197e820cSAlexander Kozyrev const struct rte_flow_queue_attr *queue_attr[], 1924ff58b73SAlexander Kozyrev struct rte_flow_error *err); 193f076bcfbSAlexander Kozyrev /** See rte_flow_pattern_template_create() */ 194f076bcfbSAlexander Kozyrev struct rte_flow_pattern_template *(*pattern_template_create) 195f076bcfbSAlexander Kozyrev (struct rte_eth_dev *dev, 196f076bcfbSAlexander Kozyrev const struct rte_flow_pattern_template_attr *template_attr, 197f076bcfbSAlexander Kozyrev const struct rte_flow_item pattern[], 198f076bcfbSAlexander Kozyrev struct rte_flow_error *err); 199f076bcfbSAlexander Kozyrev /** See rte_flow_pattern_template_destroy() */ 200f076bcfbSAlexander Kozyrev int (*pattern_template_destroy) 201f076bcfbSAlexander Kozyrev (struct rte_eth_dev *dev, 202f076bcfbSAlexander Kozyrev struct rte_flow_pattern_template *pattern_template, 203f076bcfbSAlexander Kozyrev struct rte_flow_error *err); 204f076bcfbSAlexander Kozyrev /** See rte_flow_actions_template_create() */ 205f076bcfbSAlexander Kozyrev struct rte_flow_actions_template *(*actions_template_create) 206f076bcfbSAlexander Kozyrev (struct rte_eth_dev *dev, 207f076bcfbSAlexander Kozyrev const struct rte_flow_actions_template_attr *template_attr, 208f076bcfbSAlexander Kozyrev const struct rte_flow_action actions[], 209f076bcfbSAlexander Kozyrev const struct rte_flow_action masks[], 210f076bcfbSAlexander Kozyrev struct rte_flow_error *err); 211f076bcfbSAlexander Kozyrev /** See rte_flow_actions_template_destroy() */ 212f076bcfbSAlexander Kozyrev int (*actions_template_destroy) 213f076bcfbSAlexander Kozyrev (struct rte_eth_dev *dev, 214f076bcfbSAlexander Kozyrev struct rte_flow_actions_template *actions_template, 215f076bcfbSAlexander Kozyrev struct rte_flow_error *err); 216f076bcfbSAlexander Kozyrev /** See rte_flow_template_table_create() */ 217f076bcfbSAlexander Kozyrev struct rte_flow_template_table *(*template_table_create) 218f076bcfbSAlexander Kozyrev (struct rte_eth_dev *dev, 219f076bcfbSAlexander Kozyrev const struct rte_flow_template_table_attr *table_attr, 220f076bcfbSAlexander Kozyrev struct rte_flow_pattern_template *pattern_templates[], 221f076bcfbSAlexander Kozyrev uint8_t nb_pattern_templates, 222f076bcfbSAlexander Kozyrev struct rte_flow_actions_template *actions_templates[], 223f076bcfbSAlexander Kozyrev uint8_t nb_actions_templates, 224f076bcfbSAlexander Kozyrev struct rte_flow_error *err); 225f076bcfbSAlexander Kozyrev /** See rte_flow_template_table_destroy() */ 226f076bcfbSAlexander Kozyrev int (*template_table_destroy) 227f076bcfbSAlexander Kozyrev (struct rte_eth_dev *dev, 228f076bcfbSAlexander Kozyrev struct rte_flow_template_table *template_table, 229f076bcfbSAlexander Kozyrev struct rte_flow_error *err); 2308a26a658STomer Shmilovich /** See rte_flow_group_set_miss_actions() */ 2318a26a658STomer Shmilovich int (*group_set_miss_actions) 2328a26a658STomer Shmilovich (struct rte_eth_dev *dev, 2338a26a658STomer Shmilovich uint32_t group_id, 2348a26a658STomer Shmilovich const struct rte_flow_group_attr *attr, 2358a26a658STomer Shmilovich const struct rte_flow_action actions[], 2368a26a658STomer Shmilovich struct rte_flow_error *err); 2378f257a48SAlexander Kozyrev /** See rte_flow_actions_update(). */ 2388f257a48SAlexander Kozyrev int (*actions_update) 2398f257a48SAlexander Kozyrev (struct rte_eth_dev *dev, 2408f257a48SAlexander Kozyrev struct rte_flow *flow, 2418f257a48SAlexander Kozyrev const struct rte_flow_action actions[], 2428f257a48SAlexander Kozyrev struct rte_flow_error *error); 24372a3dec7SGregory Etelson /** @see rte_flow_action_list_handle_query_update() */ 24472a3dec7SGregory Etelson int (*action_list_handle_query_update) 24572a3dec7SGregory Etelson (struct rte_eth_dev *dev, 24672a3dec7SGregory Etelson const struct rte_flow_action_list_handle *handle, 24772a3dec7SGregory Etelson const void **update, void **query, 24872a3dec7SGregory Etelson enum rte_flow_query_update_mode mode, 24972a3dec7SGregory Etelson struct rte_flow_error *error); 250ffe18b05SOri Kam /** @see rte_flow_calc_table_hash() */ 251ffe18b05SOri Kam int (*flow_calc_table_hash) 252ffe18b05SOri Kam (struct rte_eth_dev *dev, const struct rte_flow_template_table *table, 253ffe18b05SOri Kam const struct rte_flow_item pattern[], uint8_t pattern_template_index, 254ffe18b05SOri Kam uint32_t *hash, struct rte_flow_error *error); 2559733f099SOri Kam /** @see rte_flow_calc_encap_hash() */ 2569733f099SOri Kam int (*flow_calc_encap_hash) 2579733f099SOri Kam (struct rte_eth_dev *dev, const struct rte_flow_item pattern[], 2589733f099SOri Kam enum rte_flow_encap_hash_field dest_field, uint8_t *hash, 2599733f099SOri Kam struct rte_flow_error *error); 26099231e48SGregory Etelson /** @see rte_flow_template_table_resize() */ 26199231e48SGregory Etelson int (*flow_template_table_resize)(struct rte_eth_dev *dev, 26299231e48SGregory Etelson struct rte_flow_template_table *table, 26399231e48SGregory Etelson uint32_t nb_rules, 26499231e48SGregory Etelson struct rte_flow_error *error); 26599231e48SGregory Etelson /** @see rte_flow_async_update_resized() */ 26699231e48SGregory Etelson int (*flow_update_resized)(struct rte_eth_dev *dev, uint32_t queue, 26799231e48SGregory Etelson const struct rte_flow_op_attr *attr, 26899231e48SGregory Etelson struct rte_flow *rule, void *user_data, 26999231e48SGregory Etelson struct rte_flow_error *error); 27099231e48SGregory Etelson /** @see rte_flow_template_table_resize_complete() */ 27199231e48SGregory Etelson int (*flow_template_table_resize_complete) 27299231e48SGregory Etelson (struct rte_eth_dev *dev, 27399231e48SGregory Etelson struct rte_flow_template_table *table, 27499231e48SGregory Etelson struct rte_flow_error *error); 27599a2dd95SBruce Richardson }; 27699a2dd95SBruce Richardson 27799a2dd95SBruce Richardson /** 27899a2dd95SBruce Richardson * Get generic flow operations structure from a port. 27999a2dd95SBruce Richardson * 28099a2dd95SBruce Richardson * @param port_id 28199a2dd95SBruce Richardson * Port identifier to query. 28299a2dd95SBruce Richardson * @param[out] error 28399a2dd95SBruce Richardson * Pointer to flow error structure. 28499a2dd95SBruce Richardson * 28599a2dd95SBruce Richardson * @return 28699a2dd95SBruce Richardson * The flow operations structure associated with port_id, NULL in case of 28799a2dd95SBruce Richardson * error, in which case rte_errno is set and the error structure contains 28899a2dd95SBruce Richardson * additional details. 28999a2dd95SBruce Richardson */ 29099a2dd95SBruce Richardson const struct rte_flow_ops * 29199a2dd95SBruce Richardson rte_flow_ops_get(uint16_t port_id, struct rte_flow_error *error); 29299a2dd95SBruce Richardson 293fca8cba4SDavid Marchand /** 294fca8cba4SDavid Marchand * Register mbuf dynamic flag for rte_flow_get_restore_info. 295fca8cba4SDavid Marchand */ 296fca8cba4SDavid Marchand int 297fca8cba4SDavid Marchand rte_flow_restore_info_dynflag_register(void); 298fca8cba4SDavid Marchand 299537bfddaSDariusz Sosnowski /** @internal Enqueue rule creation operation. */ 300537bfddaSDariusz Sosnowski typedef struct rte_flow *(*rte_flow_async_create_t)(struct rte_eth_dev *dev, 301537bfddaSDariusz Sosnowski uint32_t queue, 302537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *attr, 303537bfddaSDariusz Sosnowski struct rte_flow_template_table *table, 304537bfddaSDariusz Sosnowski const struct rte_flow_item *items, 305537bfddaSDariusz Sosnowski uint8_t pattern_template_index, 306537bfddaSDariusz Sosnowski const struct rte_flow_action *actions, 307537bfddaSDariusz Sosnowski uint8_t action_template_index, 308537bfddaSDariusz Sosnowski void *user_data, 309537bfddaSDariusz Sosnowski struct rte_flow_error *error); 310537bfddaSDariusz Sosnowski 311537bfddaSDariusz Sosnowski /** @internal Enqueue rule creation by index operation. */ 312537bfddaSDariusz Sosnowski typedef struct rte_flow *(*rte_flow_async_create_by_index_t)(struct rte_eth_dev *dev, 313537bfddaSDariusz Sosnowski uint32_t queue, 314537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *attr, 315537bfddaSDariusz Sosnowski struct rte_flow_template_table *table, 316537bfddaSDariusz Sosnowski uint32_t rule_index, 317537bfddaSDariusz Sosnowski const struct rte_flow_action *actions, 318537bfddaSDariusz Sosnowski uint8_t action_template_index, 319537bfddaSDariusz Sosnowski void *user_data, 320537bfddaSDariusz Sosnowski struct rte_flow_error *error); 321537bfddaSDariusz Sosnowski 322*933f18dbSAlexander Kozyrev /** @internal Enqueue rule creation by index with pattern operation. */ 323*933f18dbSAlexander Kozyrev typedef struct rte_flow *(*rte_flow_async_create_by_index_with_pattern_t)(struct rte_eth_dev *dev, 324*933f18dbSAlexander Kozyrev uint32_t queue, 325*933f18dbSAlexander Kozyrev const struct rte_flow_op_attr *attr, 326*933f18dbSAlexander Kozyrev struct rte_flow_template_table *table, 327*933f18dbSAlexander Kozyrev uint32_t rule_index, 328*933f18dbSAlexander Kozyrev const struct rte_flow_item *items, 329*933f18dbSAlexander Kozyrev uint8_t pattern_template_index, 330*933f18dbSAlexander Kozyrev const struct rte_flow_action *actions, 331*933f18dbSAlexander Kozyrev uint8_t action_template_index, 332*933f18dbSAlexander Kozyrev void *user_data, 333*933f18dbSAlexander Kozyrev struct rte_flow_error *error); 334*933f18dbSAlexander Kozyrev 335537bfddaSDariusz Sosnowski /** @internal Enqueue rule update operation. */ 336537bfddaSDariusz Sosnowski typedef int (*rte_flow_async_actions_update_t)(struct rte_eth_dev *dev, 337537bfddaSDariusz Sosnowski uint32_t queue_id, 338537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *op_attr, 339537bfddaSDariusz Sosnowski struct rte_flow *flow, 340537bfddaSDariusz Sosnowski const struct rte_flow_action *actions, 341537bfddaSDariusz Sosnowski uint8_t actions_template_index, 342537bfddaSDariusz Sosnowski void *user_data, 343537bfddaSDariusz Sosnowski struct rte_flow_error *error); 344537bfddaSDariusz Sosnowski 345537bfddaSDariusz Sosnowski /** @internal Enqueue rule destruction operation. */ 346537bfddaSDariusz Sosnowski typedef int (*rte_flow_async_destroy_t)(struct rte_eth_dev *dev, 347537bfddaSDariusz Sosnowski uint32_t queue_id, 348537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *op_attr, 349537bfddaSDariusz Sosnowski struct rte_flow *flow, 350537bfddaSDariusz Sosnowski void *user_data, 351537bfddaSDariusz Sosnowski struct rte_flow_error *error); 352537bfddaSDariusz Sosnowski 353537bfddaSDariusz Sosnowski /** @internal Push all internally stored rules to the HW. */ 354537bfddaSDariusz Sosnowski typedef int (*rte_flow_push_t)(struct rte_eth_dev *dev, 355537bfddaSDariusz Sosnowski uint32_t queue_id, 356537bfddaSDariusz Sosnowski struct rte_flow_error *error); 357537bfddaSDariusz Sosnowski 358537bfddaSDariusz Sosnowski /** @internal Pull the flow rule operations results from the HW. */ 359537bfddaSDariusz Sosnowski typedef int (*rte_flow_pull_t)(struct rte_eth_dev *dev, 360537bfddaSDariusz Sosnowski uint32_t queue_id, 361537bfddaSDariusz Sosnowski struct rte_flow_op_result *res, 362537bfddaSDariusz Sosnowski uint16_t n_res, 363537bfddaSDariusz Sosnowski struct rte_flow_error *error); 364537bfddaSDariusz Sosnowski 365537bfddaSDariusz Sosnowski /** @internal Enqueue indirect action creation operation. */ 366537bfddaSDariusz Sosnowski typedef struct rte_flow_action_handle *(*rte_flow_async_action_handle_create_t)( 367537bfddaSDariusz Sosnowski struct rte_eth_dev *dev, 368537bfddaSDariusz Sosnowski uint32_t queue_id, 369537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *op_attr, 370537bfddaSDariusz Sosnowski const struct rte_flow_indir_action_conf *indir_action_conf, 371537bfddaSDariusz Sosnowski const struct rte_flow_action *action, 372537bfddaSDariusz Sosnowski void *user_data, 373537bfddaSDariusz Sosnowski struct rte_flow_error *error); 374537bfddaSDariusz Sosnowski 375537bfddaSDariusz Sosnowski /** @internal Enqueue indirect action destruction operation. */ 376537bfddaSDariusz Sosnowski typedef int (*rte_flow_async_action_handle_destroy_t)(struct rte_eth_dev *dev, 377537bfddaSDariusz Sosnowski uint32_t queue_id, 378537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *op_attr, 379537bfddaSDariusz Sosnowski struct rte_flow_action_handle *action_handle, 380537bfddaSDariusz Sosnowski void *user_data, 381537bfddaSDariusz Sosnowski struct rte_flow_error *error); 382537bfddaSDariusz Sosnowski 383537bfddaSDariusz Sosnowski /** @internal Enqueue indirect action update operation. */ 384537bfddaSDariusz Sosnowski typedef int (*rte_flow_async_action_handle_update_t)(struct rte_eth_dev *dev, 385537bfddaSDariusz Sosnowski uint32_t queue_id, 386537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *op_attr, 387537bfddaSDariusz Sosnowski struct rte_flow_action_handle *action_handle, 388537bfddaSDariusz Sosnowski const void *update, 389537bfddaSDariusz Sosnowski void *user_data, 390537bfddaSDariusz Sosnowski struct rte_flow_error *error); 391537bfddaSDariusz Sosnowski 392537bfddaSDariusz Sosnowski /** @internal Enqueue indirect action query operation. */ 393537bfddaSDariusz Sosnowski typedef int (*rte_flow_async_action_handle_query_t) 394537bfddaSDariusz Sosnowski (struct rte_eth_dev *dev, 395537bfddaSDariusz Sosnowski uint32_t queue_id, 396537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *op_attr, 397537bfddaSDariusz Sosnowski const struct rte_flow_action_handle *action_handle, 398537bfddaSDariusz Sosnowski void *data, 399537bfddaSDariusz Sosnowski void *user_data, 400537bfddaSDariusz Sosnowski struct rte_flow_error *error); 401537bfddaSDariusz Sosnowski 402537bfddaSDariusz Sosnowski /** @internal Enqueue indirect action query and/or update operation. */ 403537bfddaSDariusz Sosnowski typedef int (*rte_flow_async_action_handle_query_update_t)(struct rte_eth_dev *dev, 404537bfddaSDariusz Sosnowski uint32_t queue_id, 405537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *attr, 406537bfddaSDariusz Sosnowski struct rte_flow_action_handle *handle, 407537bfddaSDariusz Sosnowski const void *update, void *query, 408537bfddaSDariusz Sosnowski enum rte_flow_query_update_mode mode, 409537bfddaSDariusz Sosnowski void *user_data, 410537bfddaSDariusz Sosnowski struct rte_flow_error *error); 411537bfddaSDariusz Sosnowski 412537bfddaSDariusz Sosnowski /** @internal Enqueue indirect action list creation operation. */ 413537bfddaSDariusz Sosnowski typedef struct rte_flow_action_list_handle *(*rte_flow_async_action_list_handle_create_t)( 414537bfddaSDariusz Sosnowski struct rte_eth_dev *dev, 415537bfddaSDariusz Sosnowski uint32_t queue_id, 416537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *attr, 417537bfddaSDariusz Sosnowski const struct rte_flow_indir_action_conf *conf, 418537bfddaSDariusz Sosnowski const struct rte_flow_action *actions, 419537bfddaSDariusz Sosnowski void *user_data, 420537bfddaSDariusz Sosnowski struct rte_flow_error *error); 421537bfddaSDariusz Sosnowski 422537bfddaSDariusz Sosnowski /** @internal Enqueue indirect action list destruction operation. */ 423537bfddaSDariusz Sosnowski typedef int (*rte_flow_async_action_list_handle_destroy_t)( 424537bfddaSDariusz Sosnowski struct rte_eth_dev *dev, 425537bfddaSDariusz Sosnowski uint32_t queue_id, 426537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *op_attr, 427537bfddaSDariusz Sosnowski struct rte_flow_action_list_handle *handle, 428537bfddaSDariusz Sosnowski void *user_data, 429537bfddaSDariusz Sosnowski struct rte_flow_error *error); 430537bfddaSDariusz Sosnowski 431537bfddaSDariusz Sosnowski /** @internal Enqueue indirect action list query and/or update operation. */ 432537bfddaSDariusz Sosnowski typedef int (*rte_flow_async_action_list_handle_query_update_t)( 433537bfddaSDariusz Sosnowski struct rte_eth_dev *dev, 434537bfddaSDariusz Sosnowski uint32_t queue_id, 435537bfddaSDariusz Sosnowski const struct rte_flow_op_attr *attr, 436537bfddaSDariusz Sosnowski const struct rte_flow_action_list_handle *handle, 437537bfddaSDariusz Sosnowski const void **update, 438537bfddaSDariusz Sosnowski void **query, 439537bfddaSDariusz Sosnowski enum rte_flow_query_update_mode mode, 440537bfddaSDariusz Sosnowski void *user_data, 441537bfddaSDariusz Sosnowski struct rte_flow_error *error); 442537bfddaSDariusz Sosnowski 443537bfddaSDariusz Sosnowski /** 444537bfddaSDariusz Sosnowski * @internal 445537bfddaSDariusz Sosnowski * 446537bfddaSDariusz Sosnowski * Fast path async flow functions are held in a flat array, one entry per ethdev. 447537bfddaSDariusz Sosnowski */ 448c6552d9aSTyler Retzlaff struct __rte_cache_aligned rte_flow_fp_ops { 449537bfddaSDariusz Sosnowski rte_flow_async_create_t async_create; 450537bfddaSDariusz Sosnowski rte_flow_async_create_by_index_t async_create_by_index; 451537bfddaSDariusz Sosnowski rte_flow_async_actions_update_t async_actions_update; 452*933f18dbSAlexander Kozyrev rte_flow_async_create_by_index_with_pattern_t async_create_by_index_with_pattern; 453537bfddaSDariusz Sosnowski rte_flow_async_destroy_t async_destroy; 454537bfddaSDariusz Sosnowski rte_flow_push_t push; 455537bfddaSDariusz Sosnowski rte_flow_pull_t pull; 456537bfddaSDariusz Sosnowski rte_flow_async_action_handle_create_t async_action_handle_create; 457537bfddaSDariusz Sosnowski rte_flow_async_action_handle_destroy_t async_action_handle_destroy; 458537bfddaSDariusz Sosnowski rte_flow_async_action_handle_update_t async_action_handle_update; 459537bfddaSDariusz Sosnowski rte_flow_async_action_handle_query_t async_action_handle_query; 460537bfddaSDariusz Sosnowski rte_flow_async_action_handle_query_update_t async_action_handle_query_update; 461537bfddaSDariusz Sosnowski rte_flow_async_action_list_handle_create_t async_action_list_handle_create; 462537bfddaSDariusz Sosnowski rte_flow_async_action_list_handle_destroy_t async_action_list_handle_destroy; 463537bfddaSDariusz Sosnowski rte_flow_async_action_list_handle_query_update_t async_action_list_handle_query_update; 464c6552d9aSTyler Retzlaff }; 465537bfddaSDariusz Sosnowski 466537bfddaSDariusz Sosnowski /** 467537bfddaSDariusz Sosnowski * @internal 468537bfddaSDariusz Sosnowski * Default implementation of fast path flow API functions. 469537bfddaSDariusz Sosnowski */ 470537bfddaSDariusz Sosnowski extern struct rte_flow_fp_ops rte_flow_fp_default_ops; 471537bfddaSDariusz Sosnowski 47299a2dd95SBruce Richardson #ifdef __cplusplus 47399a2dd95SBruce Richardson } 47499a2dd95SBruce Richardson #endif 47599a2dd95SBruce Richardson 47699a2dd95SBruce Richardson #endif /* RTE_FLOW_DRIVER_H_ */ 477