8
8
#include "lib/fs_ttc.h"
9
9
10
10
struct mlx5e_post_act ;
11
+ struct mlx5e_tc_table ;
11
12
12
13
enum {
13
14
MLX5E_TC_FT_LEVEL = 0 ,
14
15
MLX5E_TC_TTC_FT_LEVEL ,
15
16
MLX5E_TC_MISS_LEVEL ,
16
17
};
17
18
19
+ enum {
20
+ MLX5E_TC_PRIO = 0 ,
21
+ MLX5E_NIC_PRIO
22
+ };
23
+
18
24
struct mlx5e_flow_table {
19
25
int num_groups ;
20
26
struct mlx5_flow_table * t ;
@@ -83,54 +89,28 @@ enum {
83
89
#endif
84
90
};
85
91
86
- struct mlx5e_priv ;
87
-
88
- #ifdef CONFIG_MLX5_EN_RXNFC
89
-
90
- struct mlx5e_ethtool_table {
91
- struct mlx5_flow_table * ft ;
92
- int num_rules ;
93
- };
94
-
95
- #define ETHTOOL_NUM_L3_L4_FTS 7
96
- #define ETHTOOL_NUM_L2_FTS 4
97
-
98
- struct mlx5e_ethtool_steering {
99
- struct mlx5e_ethtool_table l3_l4_ft [ETHTOOL_NUM_L3_L4_FTS ];
100
- struct mlx5e_ethtool_table l2_ft [ETHTOOL_NUM_L2_FTS ];
101
- struct list_head rules ;
102
- int tot_num_rules ;
103
- };
104
-
105
- void mlx5e_ethtool_init_steering (struct mlx5e_priv * priv );
106
- void mlx5e_ethtool_cleanup_steering (struct mlx5e_priv * priv );
107
- int mlx5e_ethtool_set_rxnfc (struct mlx5e_priv * priv , struct ethtool_rxnfc * cmd );
108
- int mlx5e_ethtool_get_rxnfc (struct mlx5e_priv * priv ,
109
- struct ethtool_rxnfc * info , u32 * rule_locs );
110
- #else
111
- static inline void mlx5e_ethtool_init_steering (struct mlx5e_priv * priv ) { }
112
- static inline void mlx5e_ethtool_cleanup_steering (struct mlx5e_priv * priv ) { }
113
- static inline int mlx5e_ethtool_set_rxnfc (struct mlx5e_priv * priv , struct ethtool_rxnfc * cmd )
114
- { return - EOPNOTSUPP ; }
115
- static inline int mlx5e_ethtool_get_rxnfc (struct mlx5e_priv * priv ,
116
- struct ethtool_rxnfc * info , u32 * rule_locs )
117
- { return - EOPNOTSUPP ; }
118
- #endif /* CONFIG_MLX5_EN_RXNFC */
92
+ struct mlx5e_flow_steering ;
93
+ struct mlx5e_rx_res ;
119
94
120
95
#ifdef CONFIG_MLX5_EN_ARFS
121
96
struct mlx5e_arfs_tables ;
122
97
123
- int mlx5e_arfs_create_tables (struct mlx5e_priv * priv );
124
- void mlx5e_arfs_destroy_tables (struct mlx5e_priv * priv );
125
- int mlx5e_arfs_enable (struct mlx5e_priv * priv );
126
- int mlx5e_arfs_disable (struct mlx5e_priv * priv );
98
+ int mlx5e_arfs_create_tables (struct mlx5e_flow_steering * fs ,
99
+ struct mlx5e_rx_res * rx_res , bool ntuple );
100
+ void mlx5e_arfs_destroy_tables (struct mlx5e_flow_steering * fs , bool ntuple );
101
+ int mlx5e_arfs_enable (struct mlx5e_flow_steering * fs );
102
+ int mlx5e_arfs_disable (struct mlx5e_flow_steering * fs );
127
103
int mlx5e_rx_flow_steer (struct net_device * dev , const struct sk_buff * skb ,
128
104
u16 rxq_index , u32 flow_id );
129
105
#else
130
- static inline int mlx5e_arfs_create_tables (struct mlx5e_priv * priv ) { return 0 ; }
131
- static inline void mlx5e_arfs_destroy_tables (struct mlx5e_priv * priv ) {}
132
- static inline int mlx5e_arfs_enable (struct mlx5e_priv * priv ) { return - EOPNOTSUPP ; }
133
- static inline int mlx5e_arfs_disable (struct mlx5e_priv * priv ) { return - EOPNOTSUPP ; }
106
+ static inline int mlx5e_arfs_create_tables (struct mlx5e_flow_steering * fs ,
107
+ struct mlx5e_rx_res * rx_res , bool ntuple )
108
+ { return 0 ; }
109
+ static inline void mlx5e_arfs_destroy_tables (struct mlx5e_flow_steering * fs , bool ntuple ) {}
110
+ static inline int mlx5e_arfs_enable (struct mlx5e_flow_steering * fs )
111
+ { return - EOPNOTSUPP ; }
112
+ static inline int mlx5e_arfs_disable (struct mlx5e_flow_steering * fs )
113
+ { return - EOPNOTSUPP ; }
134
114
#endif
135
115
136
116
#ifdef CONFIG_MLX5_EN_TLS
@@ -142,54 +122,63 @@ struct mlx5e_fs_udp;
142
122
struct mlx5e_fs_any ;
143
123
struct mlx5e_ptp_fs ;
144
124
145
- struct mlx5e_flow_steering {
146
- bool state_destroy ;
147
- bool vlan_strip_disable ;
148
- struct mlx5_core_dev * mdev ;
149
- struct mlx5_flow_namespace * ns ;
150
- #ifdef CONFIG_MLX5_EN_RXNFC
151
- struct mlx5e_ethtool_steering ethtool ;
152
- #endif
153
- struct mlx5e_tc_table * tc ;
154
- struct mlx5e_promisc_table promisc ;
155
- struct mlx5e_vlan_table * vlan ;
156
- struct mlx5e_l2_table l2 ;
157
- struct mlx5_ttc_table * ttc ;
158
- struct mlx5_ttc_table * inner_ttc ;
159
- #ifdef CONFIG_MLX5_EN_ARFS
160
- struct mlx5e_arfs_tables * arfs ;
161
- #endif
162
- #ifdef CONFIG_MLX5_EN_TLS
163
- struct mlx5e_accel_fs_tcp * accel_tcp ;
164
- #endif
165
- struct mlx5e_fs_udp * udp ;
166
- struct mlx5e_fs_any * any ;
167
- struct mlx5e_ptp_fs * ptp_fs ;
168
- };
169
-
170
- void mlx5e_set_ttc_params (struct mlx5e_priv * priv ,
125
+ void mlx5e_set_ttc_params (struct mlx5e_flow_steering * fs ,
126
+ struct mlx5e_rx_res * rx_res ,
171
127
struct ttc_params * ttc_params , bool tunnel );
172
128
173
- void mlx5e_destroy_ttc_table (struct mlx5e_priv * priv );
174
- int mlx5e_create_ttc_table (struct mlx5e_priv * priv );
129
+ void mlx5e_destroy_ttc_table (struct mlx5e_flow_steering * fs );
130
+ int mlx5e_create_ttc_table (struct mlx5e_flow_steering * fs ,
131
+ struct mlx5e_rx_res * rx_res );
175
132
176
133
void mlx5e_destroy_flow_table (struct mlx5e_flow_table * ft );
177
134
178
- void mlx5e_enable_cvlan_filter (struct mlx5e_priv * priv );
179
- void mlx5e_disable_cvlan_filter (struct mlx5e_priv * priv );
135
+ void mlx5e_enable_cvlan_filter (struct mlx5e_flow_steering * fs , bool promisc );
136
+ void mlx5e_disable_cvlan_filter (struct mlx5e_flow_steering * fs , bool promisc );
180
137
181
- int mlx5e_create_flow_steering (struct mlx5e_priv * priv );
182
- void mlx5e_destroy_flow_steering (struct mlx5e_priv * priv );
138
+ int mlx5e_create_flow_steering (struct mlx5e_flow_steering * fs ,
139
+ struct mlx5e_rx_res * rx_res ,
140
+ const struct mlx5e_profile * profile ,
141
+ struct net_device * netdev );
142
+ void mlx5e_destroy_flow_steering (struct mlx5e_flow_steering * fs , bool ntuple ,
143
+ const struct mlx5e_profile * profile );
183
144
184
145
struct mlx5e_flow_steering * mlx5e_fs_init (const struct mlx5e_profile * profile ,
185
146
struct mlx5_core_dev * mdev ,
186
147
bool state_destroy );
187
148
void mlx5e_fs_cleanup (struct mlx5e_flow_steering * fs );
188
-
189
- int mlx5e_add_vlan_trap (struct mlx5e_priv * priv , int trap_id , int tir_num );
190
- void mlx5e_remove_vlan_trap (struct mlx5e_priv * priv );
191
- int mlx5e_add_mac_trap (struct mlx5e_priv * priv , int trap_id , int tir_num );
192
- void mlx5e_remove_mac_trap (struct mlx5e_priv * priv );
149
+ struct mlx5e_vlan_table * mlx5e_fs_get_vlan (struct mlx5e_flow_steering * fs );
150
+ void mlx5e_fs_set_tc (struct mlx5e_flow_steering * fs , struct mlx5e_tc_table * tc );
151
+ struct mlx5e_tc_table * mlx5e_fs_get_tc (struct mlx5e_flow_steering * fs );
152
+ struct mlx5e_l2_table * mlx5e_fs_get_l2 (struct mlx5e_flow_steering * fs );
153
+ struct mlx5_flow_namespace * mlx5e_fs_get_ns (struct mlx5e_flow_steering * fs , bool egress );
154
+ void mlx5e_fs_set_ns (struct mlx5e_flow_steering * fs , struct mlx5_flow_namespace * ns , bool egress );
155
+ #ifdef CONFIG_MLX5_EN_RXNFC
156
+ struct mlx5e_ethtool_steering * mlx5e_fs_get_ethtool (struct mlx5e_flow_steering * fs );
157
+ #endif
158
+ struct mlx5_ttc_table * mlx5e_fs_get_ttc (struct mlx5e_flow_steering * fs , bool inner );
159
+ void mlx5e_fs_set_ttc (struct mlx5e_flow_steering * fs , struct mlx5_ttc_table * ttc , bool inner );
160
+ #ifdef CONFIG_MLX5_EN_ARFS
161
+ struct mlx5e_arfs_tables * mlx5e_fs_get_arfs (struct mlx5e_flow_steering * fs );
162
+ void mlx5e_fs_set_arfs (struct mlx5e_flow_steering * fs , struct mlx5e_arfs_tables * arfs );
163
+ #endif
164
+ struct mlx5e_ptp_fs * mlx5e_fs_get_ptp (struct mlx5e_flow_steering * fs );
165
+ void mlx5e_fs_set_ptp (struct mlx5e_flow_steering * fs , struct mlx5e_ptp_fs * ptp_fs );
166
+ struct mlx5e_fs_any * mlx5e_fs_get_any (struct mlx5e_flow_steering * fs );
167
+ void mlx5e_fs_set_any (struct mlx5e_flow_steering * fs , struct mlx5e_fs_any * any );
168
+ struct mlx5e_fs_udp * mlx5e_fs_get_udp (struct mlx5e_flow_steering * fs );
169
+ void mlx5e_fs_set_udp (struct mlx5e_flow_steering * fs , struct mlx5e_fs_udp * udp );
170
+ #ifdef CONFIG_MLX5_EN_TLS
171
+ struct mlx5e_accel_fs_tcp * mlx5e_fs_get_accel_tcp (struct mlx5e_flow_steering * fs );
172
+ void mlx5e_fs_set_accel_tcp (struct mlx5e_flow_steering * fs , struct mlx5e_accel_fs_tcp * accel_tcp );
173
+ #endif
174
+ void mlx5e_fs_set_state_destroy (struct mlx5e_flow_steering * fs , bool state_destroy );
175
+ void mlx5e_fs_set_vlan_strip_disable (struct mlx5e_flow_steering * fs , bool vlan_strip_disable );
176
+
177
+ struct mlx5_core_dev * mlx5e_fs_get_mdev (struct mlx5e_flow_steering * fs );
178
+ int mlx5e_add_vlan_trap (struct mlx5e_flow_steering * fs , int trap_id , int tir_num );
179
+ void mlx5e_remove_vlan_trap (struct mlx5e_flow_steering * fs );
180
+ int mlx5e_add_mac_trap (struct mlx5e_flow_steering * fs , int trap_id , int tir_num );
181
+ void mlx5e_remove_mac_trap (struct mlx5e_flow_steering * fs );
193
182
void mlx5e_fs_set_rx_mode_work (struct mlx5e_flow_steering * fs , struct net_device * netdev );
194
183
int mlx5e_fs_vlan_rx_add_vid (struct mlx5e_flow_steering * fs ,
195
184
struct net_device * netdev ,
@@ -198,5 +187,18 @@ int mlx5e_fs_vlan_rx_kill_vid(struct mlx5e_flow_steering *fs,
198
187
struct net_device * netdev ,
199
188
__be16 proto , u16 vid );
200
189
void mlx5e_fs_init_l2_addr (struct mlx5e_flow_steering * fs , struct net_device * netdev );
190
+
191
+ #define fs_err (fs , fmt , ...) \
192
+ mlx5_core_err(mlx5e_fs_get_mdev(fs), fmt, ##__VA_ARGS__)
193
+
194
+ #define fs_dbg (fs , fmt , ...) \
195
+ mlx5_core_dbg(mlx5e_fs_get_mdev(fs), fmt, ##__VA_ARGS__)
196
+
197
+ #define fs_warn (fs , fmt , ...) \
198
+ mlx5_core_warn(mlx5e_fs_get_mdev(fs), fmt, ##__VA_ARGS__)
199
+
200
+ #define fs_warn_once (fs , fmt , ...) \
201
+ mlx5_core_warn_once(mlx5e_fs_get_mdev(fs), fmt, ##__VA_ARGS__)
202
+
201
203
#endif /* __MLX5E_FLOW_STEER_H__ */
202
204
0 commit comments