1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2 /* Copyright (c) 2020, Mellanox Technologies inc. All rights reserved. */ 3 4 #ifndef __MLX5E_KTLS_UTILS_H__ 5 #define __MLX5E_KTLS_UTILS_H__ 6 7 #include <net/tls.h> 8 #include "en.h" 9 10 enum { 11 MLX5E_TLS_PROGRESS_PARAMS_AUTH_STATE_NO_OFFLOAD = 0, 12 MLX5E_TLS_PROGRESS_PARAMS_AUTH_STATE_OFFLOAD = 1, 13 MLX5E_TLS_PROGRESS_PARAMS_AUTH_STATE_AUTHENTICATION = 2, 14 }; 15 16 enum { 17 MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_START = 0, 18 MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_TRACKING = 1, 19 MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_SEARCHING = 2, 20 }; 21 22 int mlx5e_ktls_add_tx(struct net_device *netdev, struct sock *sk, 23 struct tls_crypto_info *crypto_info, u32 start_offload_tcp_sn); 24 void mlx5e_ktls_del_tx(struct net_device *netdev, struct tls_context *tls_ctx); 25 int mlx5e_ktls_add_rx(struct net_device *netdev, struct sock *sk, 26 struct tls_crypto_info *crypto_info, u32 start_offload_tcp_sn); 27 void mlx5e_ktls_del_rx(struct net_device *netdev, struct tls_context *tls_ctx); 28 void mlx5e_ktls_rx_resync(struct net_device *netdev, struct sock *sk, u32 seq, u8 *rcd_sn); 29 30 struct mlx5e_set_tls_static_params_wqe { 31 struct mlx5_wqe_ctrl_seg ctrl; 32 struct mlx5_wqe_umr_ctrl_seg uctrl; 33 struct mlx5_mkey_seg mkc; 34 struct mlx5_wqe_tls_static_params_seg params; 35 }; 36 37 struct mlx5e_set_tls_progress_params_wqe { 38 struct mlx5_wqe_ctrl_seg ctrl; 39 struct mlx5_wqe_tls_progress_params_seg params; 40 }; 41 42 struct mlx5e_get_tls_progress_params_wqe { 43 struct mlx5_wqe_ctrl_seg ctrl; 44 struct mlx5_seg_get_psv psv; 45 }; 46 47 #define MLX5E_TLS_SET_STATIC_PARAMS_WQEBBS \ 48 (DIV_ROUND_UP(sizeof(struct mlx5e_set_tls_static_params_wqe), MLX5_SEND_WQE_BB)) 49 50 #define MLX5E_TLS_SET_PROGRESS_PARAMS_WQEBBS \ 51 (DIV_ROUND_UP(sizeof(struct mlx5e_set_tls_progress_params_wqe), MLX5_SEND_WQE_BB)) 52 53 #define MLX5E_KTLS_GET_PROGRESS_WQEBBS \ 54 (DIV_ROUND_UP(sizeof(struct mlx5e_get_tls_progress_params_wqe), MLX5_SEND_WQE_BB)) 55 56 #define MLX5E_TLS_FETCH_SET_STATIC_PARAMS_WQE(sq, pi) \ 57 ((struct mlx5e_set_tls_static_params_wqe *)\ 58 mlx5e_fetch_wqe(&(sq)->wq, pi, sizeof(struct mlx5e_set_tls_static_params_wqe))) 59 60 #define MLX5E_TLS_FETCH_SET_PROGRESS_PARAMS_WQE(sq, pi) \ 61 ((struct mlx5e_set_tls_progress_params_wqe *)\ 62 mlx5e_fetch_wqe(&(sq)->wq, pi, sizeof(struct mlx5e_set_tls_progress_params_wqe))) 63 64 #define MLX5E_TLS_FETCH_GET_PROGRESS_PARAMS_WQE(sq, pi) \ 65 ((struct mlx5e_get_tls_progress_params_wqe *)\ 66 mlx5e_fetch_wqe(&(sq)->wq, pi, sizeof(struct mlx5e_get_tls_progress_params_wqe))) 67 68 #define MLX5E_TLS_FETCH_DUMP_WQE(sq, pi) \ 69 ((struct mlx5e_dump_wqe *)\ 70 mlx5e_fetch_wqe(&(sq)->wq, pi, sizeof(struct mlx5e_dump_wqe))) 71 72 void 73 mlx5e_ktls_build_static_params(struct mlx5e_set_tls_static_params_wqe *wqe, 74 u16 pc, u32 sqn, 75 struct tls12_crypto_info_aes_gcm_128 *info, 76 u32 tis_tir_num, u32 key_id, u32 resync_tcp_sn, 77 bool fence, enum tls_offload_ctx_dir direction); 78 void 79 mlx5e_ktls_build_progress_params(struct mlx5e_set_tls_progress_params_wqe *wqe, 80 u16 pc, u32 sqn, 81 u32 tis_tir_num, bool fence, 82 u32 next_record_tcp_sn, 83 enum tls_offload_ctx_dir direction); 84 85 #endif /* __MLX5E_TLS_UTILS_H__ */ 86