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 | union mlx5e_crypto_info { |
31 | struct tls_crypto_info crypto_info; |
32 | struct tls12_crypto_info_aes_gcm_128 crypto_info_128; |
33 | struct tls12_crypto_info_aes_gcm_256 crypto_info_256; |
34 | }; |
35 | |
36 | struct mlx5e_set_tls_static_params_wqe { |
37 | struct mlx5_wqe_ctrl_seg ctrl; |
38 | struct mlx5_wqe_umr_ctrl_seg uctrl; |
39 | struct mlx5_mkey_seg mkc; |
40 | struct mlx5_wqe_tls_static_params_seg params; |
41 | }; |
42 | |
43 | struct mlx5e_set_tls_progress_params_wqe { |
44 | struct mlx5_wqe_ctrl_seg ctrl; |
45 | struct mlx5_wqe_tls_progress_params_seg params; |
46 | }; |
47 | |
48 | struct mlx5e_get_tls_progress_params_wqe { |
49 | struct mlx5_wqe_ctrl_seg ctrl; |
50 | struct mlx5_seg_get_psv psv; |
51 | }; |
52 | |
53 | #define MLX5E_TLS_SET_STATIC_PARAMS_WQEBBS \ |
54 | (DIV_ROUND_UP(sizeof(struct mlx5e_set_tls_static_params_wqe), MLX5_SEND_WQE_BB)) |
55 | |
56 | #define MLX5E_TLS_SET_PROGRESS_PARAMS_WQEBBS \ |
57 | (DIV_ROUND_UP(sizeof(struct mlx5e_set_tls_progress_params_wqe), MLX5_SEND_WQE_BB)) |
58 | |
59 | #define MLX5E_KTLS_GET_PROGRESS_WQEBBS \ |
60 | (DIV_ROUND_UP(sizeof(struct mlx5e_get_tls_progress_params_wqe), MLX5_SEND_WQE_BB)) |
61 | |
62 | #define MLX5E_TLS_FETCH_SET_STATIC_PARAMS_WQE(sq, pi) \ |
63 | ((struct mlx5e_set_tls_static_params_wqe *)\ |
64 | mlx5e_fetch_wqe(&(sq)->wq, pi, sizeof(struct mlx5e_set_tls_static_params_wqe))) |
65 | |
66 | #define MLX5E_TLS_FETCH_SET_PROGRESS_PARAMS_WQE(sq, pi) \ |
67 | ((struct mlx5e_set_tls_progress_params_wqe *)\ |
68 | mlx5e_fetch_wqe(&(sq)->wq, pi, sizeof(struct mlx5e_set_tls_progress_params_wqe))) |
69 | |
70 | #define MLX5E_TLS_FETCH_GET_PROGRESS_PARAMS_WQE(sq, pi) \ |
71 | ((struct mlx5e_get_tls_progress_params_wqe *)\ |
72 | mlx5e_fetch_wqe(&(sq)->wq, pi, sizeof(struct mlx5e_get_tls_progress_params_wqe))) |
73 | |
74 | #define MLX5E_TLS_FETCH_DUMP_WQE(sq, pi) \ |
75 | ((struct mlx5e_dump_wqe *)\ |
76 | mlx5e_fetch_wqe(&(sq)->wq, pi, sizeof(struct mlx5e_dump_wqe))) |
77 | |
78 | void |
79 | mlx5e_ktls_build_static_params(struct mlx5e_set_tls_static_params_wqe *wqe, |
80 | u16 pc, u32 sqn, |
81 | union mlx5e_crypto_info *crypto_info, |
82 | u32 tis_tir_num, u32 key_id, u32 resync_tcp_sn, |
83 | bool fence, enum tls_offload_ctx_dir direction); |
84 | void |
85 | mlx5e_ktls_build_progress_params(struct mlx5e_set_tls_progress_params_wqe *wqe, |
86 | u16 pc, u32 sqn, |
87 | u32 tis_tir_num, bool fence, |
88 | u32 next_record_tcp_sn, |
89 | enum tls_offload_ctx_dir direction); |
90 | |
91 | #endif /* __MLX5E_TLS_UTILS_H__ */ |
92 | |