#include "dr_types.h"
#if defined(CONFIG_FRAME_WARN) && (CONFIG_FRAME_WARN < 2048)
#define DR_RULE_MAX_STES_OPTIMIZED …
#else
#define DR_RULE_MAX_STES_OPTIMIZED …
#endif
#define DR_RULE_MAX_STE_CHAIN_OPTIMIZED …
static int dr_rule_append_to_miss_list(struct mlx5dr_domain *dmn,
enum mlx5dr_domain_nic_type nic_type,
struct mlx5dr_ste *new_last_ste,
struct list_head *miss_list,
struct list_head *send_list)
{ … }
static void dr_rule_set_last_ste_miss_addr(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
u8 *hw_ste)
{ … }
static struct mlx5dr_ste *
dr_rule_create_collision_htbl(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
u8 *hw_ste)
{ … }
static struct mlx5dr_ste *
dr_rule_create_collision_entry(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
u8 *hw_ste,
struct mlx5dr_ste *orig_ste)
{ … }
static int
dr_rule_handle_one_ste_in_update_list(struct mlx5dr_ste_send_info *ste_info,
struct mlx5dr_domain *dmn)
{ … }
static int dr_rule_send_update_list(struct list_head *send_ste_list,
struct mlx5dr_domain *dmn,
bool is_reverse)
{ … }
static struct mlx5dr_ste *
dr_rule_find_ste_in_miss_list(struct list_head *miss_list, u8 *hw_ste)
{ … }
static struct mlx5dr_ste *
dr_rule_rehash_handle_collision(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
struct list_head *update_list,
struct mlx5dr_ste *col_ste,
u8 *hw_ste)
{ … }
static void dr_rule_rehash_copy_ste_ctrl(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
struct mlx5dr_ste *cur_ste,
struct mlx5dr_ste *new_ste)
{ … }
static struct mlx5dr_ste *
dr_rule_rehash_copy_ste(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
struct mlx5dr_ste *cur_ste,
struct mlx5dr_ste_htbl *new_htbl,
struct list_head *update_list)
{ … }
static int dr_rule_rehash_copy_miss_list(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
struct list_head *cur_miss_list,
struct mlx5dr_ste_htbl *new_htbl,
struct list_head *update_list)
{ … }
static int dr_rule_rehash_copy_htbl(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
struct mlx5dr_ste_htbl *cur_htbl,
struct mlx5dr_ste_htbl *new_htbl,
struct list_head *update_list)
{ … }
static struct mlx5dr_ste_htbl *
dr_rule_rehash_htbl(struct mlx5dr_rule *rule,
struct mlx5dr_rule_rx_tx *nic_rule,
struct mlx5dr_ste_htbl *cur_htbl,
u8 ste_location,
struct list_head *update_list,
enum mlx5dr_icm_chunk_size new_size)
{ … }
static struct mlx5dr_ste_htbl *dr_rule_rehash(struct mlx5dr_rule *rule,
struct mlx5dr_rule_rx_tx *nic_rule,
struct mlx5dr_ste_htbl *cur_htbl,
u8 ste_location,
struct list_head *update_list)
{ … }
static struct mlx5dr_ste *
dr_rule_handle_collision(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
struct mlx5dr_ste *ste,
u8 *hw_ste,
struct list_head *miss_list,
struct list_head *send_list)
{ … }
static void dr_rule_remove_action_members(struct mlx5dr_rule *rule)
{ … }
static int dr_rule_add_action_members(struct mlx5dr_rule *rule,
size_t num_actions,
struct mlx5dr_action *actions[])
{ … }
void mlx5dr_rule_set_last_member(struct mlx5dr_rule_rx_tx *nic_rule,
struct mlx5dr_ste *ste,
bool force)
{ … }
static struct mlx5dr_ste *dr_rule_get_pointed_ste(struct mlx5dr_ste *curr_ste)
{ … }
int mlx5dr_rule_get_reverse_rule_members(struct mlx5dr_ste **ste_arr,
struct mlx5dr_ste *curr_ste,
int *num_of_stes)
{ … }
static void dr_rule_clean_rule_members(struct mlx5dr_rule *rule,
struct mlx5dr_rule_rx_tx *nic_rule)
{ … }
static u16 dr_get_bits_per_mask(u16 byte_mask)
{ … }
static bool dr_rule_need_enlarge_hash(struct mlx5dr_ste_htbl *htbl,
struct mlx5dr_domain *dmn,
struct mlx5dr_domain_rx_tx *nic_dmn)
{ … }
static int dr_rule_handle_action_stes(struct mlx5dr_rule *rule,
struct mlx5dr_rule_rx_tx *nic_rule,
struct list_head *send_ste_list,
struct mlx5dr_ste *last_ste,
u8 *hw_ste_arr,
u32 new_hw_ste_arr_sz)
{ … }
static int dr_rule_handle_empty_entry(struct mlx5dr_matcher *matcher,
struct mlx5dr_matcher_rx_tx *nic_matcher,
struct mlx5dr_ste_htbl *cur_htbl,
struct mlx5dr_ste *ste,
u8 ste_location,
u8 *hw_ste,
struct list_head *miss_list,
struct list_head *send_list)
{ … }
static struct mlx5dr_ste *
dr_rule_handle_ste_branch(struct mlx5dr_rule *rule,
struct mlx5dr_rule_rx_tx *nic_rule,
struct list_head *send_ste_list,
struct mlx5dr_ste_htbl *cur_htbl,
u8 *hw_ste,
u8 ste_location,
struct mlx5dr_ste_htbl **put_htbl)
{ … }
static bool dr_rule_cmp_value_to_mask(u8 *mask, u8 *value,
u32 s_idx, u32 e_idx)
{ … }
static bool dr_rule_verify(struct mlx5dr_matcher *matcher,
struct mlx5dr_match_parameters *value,
struct mlx5dr_match_param *param)
{ … }
static int dr_rule_destroy_rule_nic(struct mlx5dr_rule *rule,
struct mlx5dr_rule_rx_tx *nic_rule)
{ … }
static int dr_rule_destroy_rule_fdb(struct mlx5dr_rule *rule)
{ … }
static int dr_rule_destroy_rule(struct mlx5dr_rule *rule)
{ … }
static enum mlx5dr_ipv dr_rule_get_ipv(struct mlx5dr_match_spec *spec)
{ … }
static bool dr_rule_skip(enum mlx5dr_domain_type domain,
enum mlx5dr_domain_nic_type nic_type,
struct mlx5dr_match_param *mask,
struct mlx5dr_match_param *value,
u32 flow_source)
{ … }
static int
dr_rule_create_rule_nic(struct mlx5dr_rule *rule,
struct mlx5dr_rule_rx_tx *nic_rule,
struct mlx5dr_match_param *param,
size_t num_actions,
struct mlx5dr_action *actions[])
{ … }
static int
dr_rule_create_rule_fdb(struct mlx5dr_rule *rule,
struct mlx5dr_match_param *param,
size_t num_actions,
struct mlx5dr_action *actions[])
{ … }
static struct mlx5dr_rule *
dr_rule_create_rule(struct mlx5dr_matcher *matcher,
struct mlx5dr_match_parameters *value,
size_t num_actions,
struct mlx5dr_action *actions[],
u32 flow_source)
{ … }
struct mlx5dr_rule *mlx5dr_rule_create(struct mlx5dr_matcher *matcher,
struct mlx5dr_match_parameters *value,
size_t num_actions,
struct mlx5dr_action *actions[],
u32 flow_source)
{ … }
int mlx5dr_rule_destroy(struct mlx5dr_rule *rule)
{ … }