1 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 2 /* Copyright (c) 2017-2018 Mellanox Technologies. All rights reserved */ 3 4 #ifndef _MLXSW_CORE_ACL_FLEX_ACTIONS_H 5 #define _MLXSW_CORE_ACL_FLEX_ACTIONS_H 6 7 #include <linux/types.h> 8 #include <linux/netdevice.h> 9 10 struct mlxsw_afa; 11 struct mlxsw_afa_block; 12 13 struct mlxsw_afa_ops { 14 int (*kvdl_set_add)(void *priv, u32 *p_kvdl_index, 15 char *enc_actions, bool is_first); 16 void (*kvdl_set_del)(void *priv, u32 kvdl_index, bool is_first); 17 int (*kvdl_set_activity_get)(void *priv, u32 kvdl_index, 18 bool *activity); 19 int (*kvdl_fwd_entry_add)(void *priv, u32 *p_kvdl_index, u8 local_port); 20 void (*kvdl_fwd_entry_del)(void *priv, u32 kvdl_index); 21 int (*counter_index_get)(void *priv, unsigned int *p_counter_index); 22 void (*counter_index_put)(void *priv, unsigned int counter_index); 23 int (*mirror_add)(void *priv, u8 local_in_port, 24 const struct net_device *out_dev, 25 bool ingress, int *p_span_id); 26 void (*mirror_del)(void *priv, u8 local_in_port, int span_id, 27 bool ingress); 28 bool dummy_first_set; 29 }; 30 31 struct mlxsw_afa *mlxsw_afa_create(unsigned int max_acts_per_set, 32 const struct mlxsw_afa_ops *ops, 33 void *ops_priv); 34 void mlxsw_afa_destroy(struct mlxsw_afa *mlxsw_afa); 35 struct mlxsw_afa_block *mlxsw_afa_block_create(struct mlxsw_afa *mlxsw_afa); 36 void mlxsw_afa_block_destroy(struct mlxsw_afa_block *block); 37 int mlxsw_afa_block_commit(struct mlxsw_afa_block *block); 38 char *mlxsw_afa_block_first_set(struct mlxsw_afa_block *block); 39 char *mlxsw_afa_block_cur_set(struct mlxsw_afa_block *block); 40 u32 mlxsw_afa_block_first_kvdl_index(struct mlxsw_afa_block *block); 41 int mlxsw_afa_block_activity_get(struct mlxsw_afa_block *block, bool *activity); 42 int mlxsw_afa_block_continue(struct mlxsw_afa_block *block); 43 int mlxsw_afa_block_jump(struct mlxsw_afa_block *block, u16 group_id); 44 int mlxsw_afa_block_terminate(struct mlxsw_afa_block *block); 45 int mlxsw_afa_block_append_drop(struct mlxsw_afa_block *block); 46 int mlxsw_afa_block_append_trap(struct mlxsw_afa_block *block, u16 trap_id); 47 int mlxsw_afa_block_append_trap_and_forward(struct mlxsw_afa_block *block, 48 u16 trap_id); 49 int mlxsw_afa_block_append_mirror(struct mlxsw_afa_block *block, 50 u8 local_in_port, 51 const struct net_device *out_dev, 52 bool ingress, 53 struct netlink_ext_ack *extack); 54 int mlxsw_afa_block_append_fwd(struct mlxsw_afa_block *block, 55 u8 local_port, bool in_port, 56 struct netlink_ext_ack *extack); 57 int mlxsw_afa_block_append_vlan_modify(struct mlxsw_afa_block *block, 58 u16 vid, u8 pcp, u8 et, 59 struct netlink_ext_ack *extack); 60 int mlxsw_afa_block_append_allocated_counter(struct mlxsw_afa_block *block, 61 u32 counter_index); 62 int mlxsw_afa_block_append_counter(struct mlxsw_afa_block *block, 63 u32 *p_counter_index, 64 struct netlink_ext_ack *extack); 65 int mlxsw_afa_block_append_fid_set(struct mlxsw_afa_block *block, u16 fid, 66 struct netlink_ext_ack *extack); 67 int mlxsw_afa_block_append_mcrouter(struct mlxsw_afa_block *block, 68 u16 expected_irif, u16 min_mtu, 69 bool rmid_valid, u32 kvdl_index); 70 71 #endif 72