| .. | .. |
|---|
| 37 | 37 | #include <linux/mlx5/driver.h> |
|---|
| 38 | 38 | #include <linux/tls.h> |
|---|
| 39 | 39 | |
|---|
| 40 | | -#ifdef CONFIG_MLX5_ACCEL |
|---|
| 40 | +#ifdef CONFIG_MLX5_TLS |
|---|
| 41 | +int mlx5_ktls_create_key(struct mlx5_core_dev *mdev, |
|---|
| 42 | + struct tls_crypto_info *crypto_info, |
|---|
| 43 | + u32 *p_key_id); |
|---|
| 44 | +void mlx5_ktls_destroy_key(struct mlx5_core_dev *mdev, u32 key_id); |
|---|
| 45 | + |
|---|
| 46 | +static inline bool mlx5_accel_is_ktls_tx(struct mlx5_core_dev *mdev) |
|---|
| 47 | +{ |
|---|
| 48 | + return MLX5_CAP_GEN(mdev, tls_tx); |
|---|
| 49 | +} |
|---|
| 50 | + |
|---|
| 51 | +static inline bool mlx5_accel_is_ktls_rx(struct mlx5_core_dev *mdev) |
|---|
| 52 | +{ |
|---|
| 53 | + return MLX5_CAP_GEN(mdev, tls_rx); |
|---|
| 54 | +} |
|---|
| 55 | + |
|---|
| 56 | +static inline bool mlx5_accel_is_ktls_device(struct mlx5_core_dev *mdev) |
|---|
| 57 | +{ |
|---|
| 58 | + if (!mlx5_accel_is_ktls_tx(mdev) && |
|---|
| 59 | + !mlx5_accel_is_ktls_rx(mdev)) |
|---|
| 60 | + return false; |
|---|
| 61 | + |
|---|
| 62 | + if (!MLX5_CAP_GEN(mdev, log_max_dek)) |
|---|
| 63 | + return false; |
|---|
| 64 | + |
|---|
| 65 | + return MLX5_CAP_TLS(mdev, tls_1_2_aes_gcm_128); |
|---|
| 66 | +} |
|---|
| 67 | + |
|---|
| 68 | +static inline bool mlx5e_ktls_type_check(struct mlx5_core_dev *mdev, |
|---|
| 69 | + struct tls_crypto_info *crypto_info) |
|---|
| 70 | +{ |
|---|
| 71 | + switch (crypto_info->cipher_type) { |
|---|
| 72 | + case TLS_CIPHER_AES_GCM_128: |
|---|
| 73 | + if (crypto_info->version == TLS_1_2_VERSION) |
|---|
| 74 | + return MLX5_CAP_TLS(mdev, tls_1_2_aes_gcm_128); |
|---|
| 75 | + break; |
|---|
| 76 | + } |
|---|
| 77 | + |
|---|
| 78 | + return false; |
|---|
| 79 | +} |
|---|
| 80 | +#else |
|---|
| 81 | +static inline bool mlx5_accel_is_ktls_tx(struct mlx5_core_dev *mdev) |
|---|
| 82 | +{ return false; } |
|---|
| 83 | + |
|---|
| 84 | +static inline bool mlx5_accel_is_ktls_rx(struct mlx5_core_dev *mdev) |
|---|
| 85 | +{ return false; } |
|---|
| 86 | + |
|---|
| 87 | +static inline int |
|---|
| 88 | +mlx5_ktls_create_key(struct mlx5_core_dev *mdev, |
|---|
| 89 | + struct tls_crypto_info *crypto_info, |
|---|
| 90 | + u32 *p_key_id) { return -ENOTSUPP; } |
|---|
| 91 | +static inline void |
|---|
| 92 | +mlx5_ktls_destroy_key(struct mlx5_core_dev *mdev, u32 key_id) {} |
|---|
| 93 | + |
|---|
| 94 | +static inline bool |
|---|
| 95 | +mlx5_accel_is_ktls_device(struct mlx5_core_dev *mdev) { return false; } |
|---|
| 96 | +static inline bool |
|---|
| 97 | +mlx5e_ktls_type_check(struct mlx5_core_dev *mdev, |
|---|
| 98 | + struct tls_crypto_info *crypto_info) { return false; } |
|---|
| 99 | +#endif |
|---|
| 41 | 100 | |
|---|
| 42 | 101 | enum { |
|---|
| 43 | 102 | MLX5_ACCEL_TLS_TX = BIT(0), |
|---|
| .. | .. |
|---|
| 60 | 119 | u8 reserved_at_2[0x1e]; |
|---|
| 61 | 120 | }; |
|---|
| 62 | 121 | |
|---|
| 122 | +#ifdef CONFIG_MLX5_FPGA_TLS |
|---|
| 63 | 123 | int mlx5_accel_tls_add_flow(struct mlx5_core_dev *mdev, void *flow, |
|---|
| 64 | 124 | struct tls_crypto_info *crypto_info, |
|---|
| 65 | 125 | u32 start_offload_tcp_sn, u32 *p_swid, |
|---|
| 66 | 126 | bool direction_sx); |
|---|
| 67 | 127 | void mlx5_accel_tls_del_flow(struct mlx5_core_dev *mdev, u32 swid, |
|---|
| 68 | 128 | bool direction_sx); |
|---|
| 69 | | -int mlx5_accel_tls_resync_rx(struct mlx5_core_dev *mdev, u32 handle, u32 seq, |
|---|
| 70 | | - u64 rcd_sn); |
|---|
| 129 | +int mlx5_accel_tls_resync_rx(struct mlx5_core_dev *mdev, __be32 handle, |
|---|
| 130 | + u32 seq, __be64 rcd_sn); |
|---|
| 71 | 131 | bool mlx5_accel_is_tls_device(struct mlx5_core_dev *mdev); |
|---|
| 72 | 132 | u32 mlx5_accel_tls_device_caps(struct mlx5_core_dev *mdev); |
|---|
| 73 | 133 | int mlx5_accel_tls_init(struct mlx5_core_dev *mdev); |
|---|
| .. | .. |
|---|
| 82 | 142 | bool direction_sx) { return -ENOTSUPP; } |
|---|
| 83 | 143 | static inline void mlx5_accel_tls_del_flow(struct mlx5_core_dev *mdev, u32 swid, |
|---|
| 84 | 144 | bool direction_sx) { } |
|---|
| 85 | | -static inline int mlx5_accel_tls_resync_rx(struct mlx5_core_dev *mdev, u32 handle, |
|---|
| 86 | | - u32 seq, u64 rcd_sn) { return 0; } |
|---|
| 87 | | -static inline bool mlx5_accel_is_tls_device(struct mlx5_core_dev *mdev) { return false; } |
|---|
| 145 | +static inline int mlx5_accel_tls_resync_rx(struct mlx5_core_dev *mdev, __be32 handle, |
|---|
| 146 | + u32 seq, __be64 rcd_sn) { return 0; } |
|---|
| 147 | +static inline bool mlx5_accel_is_tls_device(struct mlx5_core_dev *mdev) |
|---|
| 148 | +{ |
|---|
| 149 | + return mlx5_accel_is_ktls_device(mdev); |
|---|
| 150 | +} |
|---|
| 88 | 151 | static inline u32 mlx5_accel_tls_device_caps(struct mlx5_core_dev *mdev) { return 0; } |
|---|
| 89 | 152 | static inline int mlx5_accel_tls_init(struct mlx5_core_dev *mdev) { return 0; } |
|---|
| 90 | 153 | static inline void mlx5_accel_tls_cleanup(struct mlx5_core_dev *mdev) { } |
|---|
| 91 | | - |
|---|
| 92 | 154 | #endif |
|---|
| 93 | 155 | |
|---|
| 94 | 156 | #endif /* __MLX5_ACCEL_TLS_H__ */ |
|---|