forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-04 1543e317f1da31b75942316931e8f491a8920811
kernel/drivers/net/ethernet/mellanox/mlx5/core/en_accel/tls.c
....@@ -160,25 +160,31 @@
160160 direction == TLS_OFFLOAD_CTX_DIR_TX);
161161 }
162162
163
-static void mlx5e_tls_resync_rx(struct net_device *netdev, struct sock *sk,
164
- u32 seq, u64 rcd_sn)
163
+static int mlx5e_tls_resync(struct net_device *netdev, struct sock *sk,
164
+ u32 seq, u8 *rcd_sn_data,
165
+ enum tls_offload_ctx_dir direction)
165166 {
166167 struct tls_context *tls_ctx = tls_get_ctx(sk);
167168 struct mlx5e_priv *priv = netdev_priv(netdev);
168169 struct mlx5e_tls_offload_context_rx *rx_ctx;
170
+ __be64 rcd_sn = *(__be64 *)rcd_sn_data;
169171
172
+ if (WARN_ON_ONCE(direction != TLS_OFFLOAD_CTX_DIR_RX))
173
+ return -EINVAL;
170174 rx_ctx = mlx5e_get_tls_rx_context(tls_ctx);
171175
172176 netdev_info(netdev, "resyncing seq %d rcd %lld\n", seq,
173177 be64_to_cpu(rcd_sn));
174178 mlx5_accel_tls_resync_rx(priv->mdev, rx_ctx->handle, seq, rcd_sn);
175179 atomic64_inc(&priv->tls->sw_stats.rx_tls_resync_reply);
180
+
181
+ return 0;
176182 }
177183
178184 static const struct tlsdev_ops mlx5e_tls_ops = {
179185 .tls_dev_add = mlx5e_tls_add,
180186 .tls_dev_del = mlx5e_tls_del,
181
- .tls_dev_resync_rx = mlx5e_tls_resync_rx,
187
+ .tls_dev_resync = mlx5e_tls_resync,
182188 };
183189
184190 void mlx5e_tls_build_netdev(struct mlx5e_priv *priv)
....@@ -186,6 +192,12 @@
186192 struct net_device *netdev = priv->netdev;
187193 u32 caps;
188194
195
+ if (mlx5_accel_is_ktls_device(priv->mdev)) {
196
+ mlx5e_ktls_build_netdev(priv);
197
+ return;
198
+ }
199
+
200
+ /* FPGA */
189201 if (!mlx5_accel_is_tls_device(priv->mdev))
190202 return;
191203
....@@ -210,10 +222,20 @@
210222
211223 int mlx5e_tls_init(struct mlx5e_priv *priv)
212224 {
213
- struct mlx5e_tls *tls = kzalloc(sizeof(*tls), GFP_KERNEL);
225
+ struct mlx5e_tls *tls;
214226
227
+ if (!mlx5_accel_is_tls_device(priv->mdev))
228
+ return 0;
229
+
230
+ tls = kzalloc(sizeof(*tls), GFP_KERNEL);
215231 if (!tls)
216232 return -ENOMEM;
233
+
234
+ tls->rx_wq = create_singlethread_workqueue("mlx5e_tls_rx");
235
+ if (!tls->rx_wq) {
236
+ kfree(tls);
237
+ return -ENOMEM;
238
+ }
217239
218240 priv->tls = tls;
219241 return 0;
....@@ -226,6 +248,7 @@
226248 if (!tls)
227249 return;
228250
251
+ destroy_workqueue(tls->rx_wq);
229252 kfree(tls);
230253 priv->tls = NULL;
231254 }