| .. | .. |
|---|
| 160 | 160 | direction == TLS_OFFLOAD_CTX_DIR_TX); |
|---|
| 161 | 161 | } |
|---|
| 162 | 162 | |
|---|
| 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) |
|---|
| 165 | 166 | { |
|---|
| 166 | 167 | struct tls_context *tls_ctx = tls_get_ctx(sk); |
|---|
| 167 | 168 | struct mlx5e_priv *priv = netdev_priv(netdev); |
|---|
| 168 | 169 | struct mlx5e_tls_offload_context_rx *rx_ctx; |
|---|
| 170 | + __be64 rcd_sn = *(__be64 *)rcd_sn_data; |
|---|
| 169 | 171 | |
|---|
| 172 | + if (WARN_ON_ONCE(direction != TLS_OFFLOAD_CTX_DIR_RX)) |
|---|
| 173 | + return -EINVAL; |
|---|
| 170 | 174 | rx_ctx = mlx5e_get_tls_rx_context(tls_ctx); |
|---|
| 171 | 175 | |
|---|
| 172 | 176 | netdev_info(netdev, "resyncing seq %d rcd %lld\n", seq, |
|---|
| 173 | 177 | be64_to_cpu(rcd_sn)); |
|---|
| 174 | 178 | mlx5_accel_tls_resync_rx(priv->mdev, rx_ctx->handle, seq, rcd_sn); |
|---|
| 175 | 179 | atomic64_inc(&priv->tls->sw_stats.rx_tls_resync_reply); |
|---|
| 180 | + |
|---|
| 181 | + return 0; |
|---|
| 176 | 182 | } |
|---|
| 177 | 183 | |
|---|
| 178 | 184 | static const struct tlsdev_ops mlx5e_tls_ops = { |
|---|
| 179 | 185 | .tls_dev_add = mlx5e_tls_add, |
|---|
| 180 | 186 | .tls_dev_del = mlx5e_tls_del, |
|---|
| 181 | | - .tls_dev_resync_rx = mlx5e_tls_resync_rx, |
|---|
| 187 | + .tls_dev_resync = mlx5e_tls_resync, |
|---|
| 182 | 188 | }; |
|---|
| 183 | 189 | |
|---|
| 184 | 190 | void mlx5e_tls_build_netdev(struct mlx5e_priv *priv) |
|---|
| .. | .. |
|---|
| 186 | 192 | struct net_device *netdev = priv->netdev; |
|---|
| 187 | 193 | u32 caps; |
|---|
| 188 | 194 | |
|---|
| 195 | + if (mlx5_accel_is_ktls_device(priv->mdev)) { |
|---|
| 196 | + mlx5e_ktls_build_netdev(priv); |
|---|
| 197 | + return; |
|---|
| 198 | + } |
|---|
| 199 | + |
|---|
| 200 | + /* FPGA */ |
|---|
| 189 | 201 | if (!mlx5_accel_is_tls_device(priv->mdev)) |
|---|
| 190 | 202 | return; |
|---|
| 191 | 203 | |
|---|
| .. | .. |
|---|
| 210 | 222 | |
|---|
| 211 | 223 | int mlx5e_tls_init(struct mlx5e_priv *priv) |
|---|
| 212 | 224 | { |
|---|
| 213 | | - struct mlx5e_tls *tls = kzalloc(sizeof(*tls), GFP_KERNEL); |
|---|
| 225 | + struct mlx5e_tls *tls; |
|---|
| 214 | 226 | |
|---|
| 227 | + if (!mlx5_accel_is_tls_device(priv->mdev)) |
|---|
| 228 | + return 0; |
|---|
| 229 | + |
|---|
| 230 | + tls = kzalloc(sizeof(*tls), GFP_KERNEL); |
|---|
| 215 | 231 | if (!tls) |
|---|
| 216 | 232 | 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 | + } |
|---|
| 217 | 239 | |
|---|
| 218 | 240 | priv->tls = tls; |
|---|
| 219 | 241 | return 0; |
|---|
| .. | .. |
|---|
| 226 | 248 | if (!tls) |
|---|
| 227 | 249 | return; |
|---|
| 228 | 250 | |
|---|
| 251 | + destroy_workqueue(tls->rx_wq); |
|---|
| 229 | 252 | kfree(tls); |
|---|
| 230 | 253 | priv->tls = NULL; |
|---|
| 231 | 254 | } |
|---|