FILE
rule.h
File preview with syntax highlighting.
linux-6.19.14/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/rule.h
1/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2/* Copyright (c) 2024 NVIDIA Corporation & Affiliates */ 3 4#ifndef MLX5HWS_RULE_H_ 5#define MLX5HWS_RULE_H_ 6 7enum { 8 MLX5HWS_STE_CTRL_SZ = 20, 9 MLX5HWS_ACTIONS_SZ = 12, 10 MLX5HWS_MATCH_TAG_SZ = 32, 11 MLX5HWS_JUMBO_TAG_SZ = 44, 12}; 13 14enum mlx5hws_rule_status { 15 MLX5HWS_RULE_STATUS_UNKNOWN, 16 MLX5HWS_RULE_STATUS_CREATING, 17 MLX5HWS_RULE_STATUS_CREATED, 18 MLX5HWS_RULE_STATUS_UPDATING, 19 MLX5HWS_RULE_STATUS_UPDATED, 20 MLX5HWS_RULE_STATUS_DELETING, 21 MLX5HWS_RULE_STATUS_DELETED, 22 MLX5HWS_RULE_STATUS_FAILING, 23 MLX5HWS_RULE_STATUS_FAILED, 24}; 25 26enum mlx5hws_rule_move_state { 27 MLX5HWS_RULE_RESIZE_STATE_IDLE, 28 MLX5HWS_RULE_RESIZE_STATE_WRITING, 29 MLX5HWS_RULE_RESIZE_STATE_DELETING, 30}; 31 32enum mlx5hws_rule_jumbo_match_tag_offset { 33 MLX5HWS_RULE_JUMBO_MATCH_TAG_OFFSET_DW0 = 8, 34}; 35 36struct mlx5hws_rule_match_tag { 37 union { 38 u8 jumbo[MLX5HWS_JUMBO_TAG_SZ]; 39 struct { 40 u8 reserved[MLX5HWS_ACTIONS_SZ]; 41 u8 match[MLX5HWS_MATCH_TAG_SZ]; 42 }; 43 }; 44}; 45 46struct mlx5hws_rule_resize_info { 47 u32 rtc_0; 48 u32 rtc_1; 49 u32 rule_idx; 50 u8 state; 51 u8 ctrl_seg[MLX5HWS_WQE_SZ_GTA_CTRL]; /* Ctrl segment of STE: 48 bytes */ 52 u8 data_seg[MLX5HWS_WQE_SZ_GTA_DATA]; /* Data segment of STE: 64 bytes */ 53}; 54 55struct mlx5hws_rule { 56 struct mlx5hws_matcher *matcher; 57 union { 58 struct mlx5hws_rule_match_tag tag; 59 struct mlx5hws_rule_resize_info *resize_info; 60 }; 61 struct mlx5hws_action_ste_chunk action_ste; 62 struct mlx5hws_action_ste_chunk old_action_ste; 63 u32 rtc_0; /* The RTC into which the STE was inserted */ 64 u32 rtc_1; /* The RTC into which the STE was inserted */ 65 u8 status; /* enum mlx5hws_rule_status */ 66 u8 pending_wqes; 67 bool skip_delete; /* For complex rules - another rule with same tag 68 * still exists, so don't actually delete this rule. 69 */ 70}; 71 72void mlx5hws_rule_skip(struct mlx5hws_matcher *matcher, u32 flow_source, 73 bool *skip_rx, bool *skip_tx); 74 75void mlx5hws_rule_free_action_ste(struct mlx5hws_action_ste_chunk *action_ste); 76 77int mlx5hws_rule_move_hws_remove(struct mlx5hws_rule *rule, 78 void *queue, void *user_data); 79 80int mlx5hws_rule_move_hws_add(struct mlx5hws_rule *rule, 81 struct mlx5hws_rule_attr *attr); 82 83bool mlx5hws_rule_move_in_progress(struct mlx5hws_rule *rule); 84 85void mlx5hws_rule_clear_resize_info(struct mlx5hws_rule *rule); 86 87#endif /* MLX5HWS_RULE_H_ */
~/
Read-only file preview.