mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
net/mlx5_fpga: Drop INNOVA IPsec support
Mellanox INNOVA IPsec cards are EOL in Nov, 2019 [1]. As such, the code is unmaintained, untested and not in-use by any upstream/distro oriented customers. In order to reduce code complexity, drop the kernel code. [1] https://network.nvidia.com/related-docs/eol/LCR-000535.pdf Link: https://lore.kernel.org/r/2afe88ec5020a491079eacf6fe3c89b64d65195c.1649232994.git.leonro@nvidia.com Reviewed-by: Raed Salem <raeds@nvidia.com> Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
This commit is contained in:
parent
0276bd3a94
commit
2fa33b3518
@ -22,7 +22,6 @@ config MLX5_ACCEL
|
|||||||
config MLX5_FPGA
|
config MLX5_FPGA
|
||||||
bool "Mellanox Technologies Innova support"
|
bool "Mellanox Technologies Innova support"
|
||||||
depends on MLX5_CORE
|
depends on MLX5_CORE
|
||||||
select MLX5_ACCEL
|
|
||||||
help
|
help
|
||||||
Build support for the Innova family of network cards by Mellanox
|
Build support for the Innova family of network cards by Mellanox
|
||||||
Technologies. Innova network cards are comprised of a ConnectX chip
|
Technologies. Innova network cards are comprised of a ConnectX chip
|
||||||
@ -143,17 +142,6 @@ config MLX5_CORE_IPOIB
|
|||||||
help
|
help
|
||||||
MLX5 IPoIB offloads & acceleration support.
|
MLX5 IPoIB offloads & acceleration support.
|
||||||
|
|
||||||
config MLX5_FPGA_IPSEC
|
|
||||||
bool "Mellanox Technologies IPsec Innova support"
|
|
||||||
depends on MLX5_CORE
|
|
||||||
depends on MLX5_FPGA
|
|
||||||
help
|
|
||||||
Build IPsec support for the Innova family of network cards by Mellanox
|
|
||||||
Technologies. Innova network cards are comprised of a ConnectX chip
|
|
||||||
and an FPGA chip on one board. If you select this option, the
|
|
||||||
mlx5_core driver will include the Innova FPGA core and allow building
|
|
||||||
sandbox-specific client drivers.
|
|
||||||
|
|
||||||
config MLX5_IPSEC
|
config MLX5_IPSEC
|
||||||
bool "Mellanox Technologies IPsec Connect-X support"
|
bool "Mellanox Technologies IPsec Connect-X support"
|
||||||
depends on MLX5_CORE_EN
|
depends on MLX5_CORE_EN
|
||||||
@ -171,7 +159,7 @@ config MLX5_EN_IPSEC
|
|||||||
depends on MLX5_CORE_EN
|
depends on MLX5_CORE_EN
|
||||||
depends on XFRM_OFFLOAD
|
depends on XFRM_OFFLOAD
|
||||||
depends on INET_ESP_OFFLOAD || INET6_ESP_OFFLOAD
|
depends on INET_ESP_OFFLOAD || INET6_ESP_OFFLOAD
|
||||||
depends on MLX5_FPGA_IPSEC || MLX5_IPSEC
|
depends on MLX5_IPSEC
|
||||||
help
|
help
|
||||||
Build support for IPsec cryptography-offload acceleration in the NIC.
|
Build support for IPsec cryptography-offload acceleration in the NIC.
|
||||||
Note: Support for hardware with this capability needs to be selected
|
Note: Support for hardware with this capability needs to be selected
|
||||||
|
@ -89,7 +89,6 @@ mlx5_core-$(CONFIG_MLX5_CORE_IPOIB) += ipoib/ipoib.o ipoib/ethtool.o ipoib/ipoib
|
|||||||
# Accelerations & FPGA
|
# Accelerations & FPGA
|
||||||
#
|
#
|
||||||
mlx5_core-$(CONFIG_MLX5_IPSEC) += accel/ipsec_offload.o
|
mlx5_core-$(CONFIG_MLX5_IPSEC) += accel/ipsec_offload.o
|
||||||
mlx5_core-$(CONFIG_MLX5_FPGA_IPSEC) += fpga/ipsec.o
|
|
||||||
mlx5_core-$(CONFIG_MLX5_ACCEL) += lib/crypto.o accel/ipsec.o
|
mlx5_core-$(CONFIG_MLX5_ACCEL) += lib/crypto.o accel/ipsec.o
|
||||||
|
|
||||||
mlx5_core-$(CONFIG_MLX5_FPGA) += fpga/cmd.o fpga/core.o fpga/conn.o fpga/sdk.o
|
mlx5_core-$(CONFIG_MLX5_FPGA) += fpga/cmd.o fpga/core.o fpga/conn.o fpga/sdk.o
|
||||||
|
@ -35,7 +35,6 @@
|
|||||||
|
|
||||||
#include "accel/ipsec.h"
|
#include "accel/ipsec.h"
|
||||||
#include "mlx5_core.h"
|
#include "mlx5_core.h"
|
||||||
#include "fpga/ipsec.h"
|
|
||||||
#include "accel/ipsec_offload.h"
|
#include "accel/ipsec_offload.h"
|
||||||
|
|
||||||
void mlx5_accel_ipsec_init(struct mlx5_core_dev *mdev)
|
void mlx5_accel_ipsec_init(struct mlx5_core_dev *mdev)
|
||||||
@ -43,10 +42,7 @@ void mlx5_accel_ipsec_init(struct mlx5_core_dev *mdev)
|
|||||||
const struct mlx5_accel_ipsec_ops *ipsec_ops;
|
const struct mlx5_accel_ipsec_ops *ipsec_ops;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
ipsec_ops = (mlx5_ipsec_offload_ops(mdev)) ?
|
ipsec_ops = mlx5_ipsec_offload_ops(mdev);
|
||||||
mlx5_ipsec_offload_ops(mdev) :
|
|
||||||
mlx5_fpga_ipsec_ops(mdev);
|
|
||||||
|
|
||||||
if (!ipsec_ops || !ipsec_ops->init) {
|
if (!ipsec_ops || !ipsec_ops->init) {
|
||||||
mlx5_core_dbg(mdev, "IPsec ops is not supported\n");
|
mlx5_core_dbg(mdev, "IPsec ops is not supported\n");
|
||||||
return;
|
return;
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
#include "en/port.h"
|
#include "en/port.h"
|
||||||
#include "en_accel/en_accel.h"
|
#include "en_accel/en_accel.h"
|
||||||
#include "accel/ipsec.h"
|
#include "accel/ipsec.h"
|
||||||
#include "fpga/ipsec.h"
|
|
||||||
|
|
||||||
static bool mlx5e_rx_is_xdp(struct mlx5e_params *params,
|
static bool mlx5e_rx_is_xdp(struct mlx5e_params *params,
|
||||||
struct mlx5e_xsk_param *xsk)
|
struct mlx5e_xsk_param *xsk)
|
||||||
@ -327,9 +326,6 @@ bool mlx5e_striding_rq_possible(struct mlx5_core_dev *mdev,
|
|||||||
if (!mlx5e_check_fragmented_striding_rq_cap(mdev))
|
if (!mlx5e_check_fragmented_striding_rq_cap(mdev))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (mlx5_fpga_is_ipsec_device(mdev))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (params->xdp_prog) {
|
if (params->xdp_prog) {
|
||||||
/* XSK params are not considered here. If striding RQ is in use,
|
/* XSK params are not considered here. If striding RQ is in use,
|
||||||
* and an XSK is being opened, mlx5e_rx_mpwqe_is_linear_skb will
|
* and an XSK is being opened, mlx5e_rx_mpwqe_is_linear_skb will
|
||||||
@ -423,9 +419,6 @@ static int mlx5e_build_rq_frags_info(struct mlx5_core_dev *mdev,
|
|||||||
int max_mtu;
|
int max_mtu;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (mlx5_fpga_is_ipsec_device(mdev))
|
|
||||||
byte_count += MLX5E_METADATA_ETHER_LEN;
|
|
||||||
|
|
||||||
if (mlx5e_rx_is_linear_skb(params, xsk)) {
|
if (mlx5e_rx_is_linear_skb(params, xsk)) {
|
||||||
int frag_stride;
|
int frag_stride;
|
||||||
|
|
||||||
|
@ -38,7 +38,6 @@
|
|||||||
#include "accel/ipsec.h"
|
#include "accel/ipsec.h"
|
||||||
#include "fpga/sdk.h"
|
#include "fpga/sdk.h"
|
||||||
#include "en_accel/ipsec.h"
|
#include "en_accel/ipsec.h"
|
||||||
#include "fpga/ipsec.h"
|
|
||||||
|
|
||||||
static const struct counter_desc mlx5e_ipsec_hw_stats_desc[] = {
|
static const struct counter_desc mlx5e_ipsec_hw_stats_desc[] = {
|
||||||
{ MLX5E_DECLARE_STAT(struct mlx5e_ipsec_stats, ipsec_dec_in_packets) },
|
{ MLX5E_DECLARE_STAT(struct mlx5e_ipsec_stats, ipsec_dec_in_packets) },
|
||||||
@ -105,7 +104,7 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(ipsec_sw)
|
|||||||
|
|
||||||
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(ipsec_hw)
|
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(ipsec_hw)
|
||||||
{
|
{
|
||||||
return (priv->ipsec && mlx5_fpga_ipsec_device_caps(priv->mdev)) ? NUM_IPSEC_HW_COUNTERS : 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(ipsec_hw)
|
static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(ipsec_hw)
|
||||||
@ -121,25 +120,11 @@ static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(ipsec_hw)
|
|||||||
|
|
||||||
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(ipsec_hw)
|
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(ipsec_hw)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (priv->ipsec && mlx5_fpga_ipsec_device_caps(priv->mdev))
|
|
||||||
for (i = 0; i < NUM_IPSEC_HW_COUNTERS; i++)
|
|
||||||
strcpy(data + (idx++) * ETH_GSTRING_LEN,
|
|
||||||
mlx5e_ipsec_hw_stats_desc[i].format);
|
|
||||||
|
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(ipsec_hw)
|
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(ipsec_hw)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
if (priv->ipsec && mlx5_fpga_ipsec_device_caps(priv->mdev))
|
|
||||||
for (i = 0; i < NUM_IPSEC_HW_COUNTERS; i++)
|
|
||||||
data[idx++] = MLX5E_READ_CTR64_CPU(&priv->ipsec->stats,
|
|
||||||
mlx5e_ipsec_hw_stats_desc,
|
|
||||||
i);
|
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,6 @@
|
|||||||
#include "en/ptp.h"
|
#include "en/ptp.h"
|
||||||
#include "qos.h"
|
#include "qos.h"
|
||||||
#include "en/trap.h"
|
#include "en/trap.h"
|
||||||
#include "fpga/ipsec.h"
|
|
||||||
|
|
||||||
bool mlx5e_check_fragmented_striding_rq_cap(struct mlx5_core_dev *mdev)
|
bool mlx5e_check_fragmented_striding_rq_cap(struct mlx5_core_dev *mdev)
|
||||||
{
|
{
|
||||||
@ -4467,12 +4466,6 @@ static int mlx5e_xdp_allowed(struct mlx5e_priv *priv, struct bpf_prog *prog)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mlx5_fpga_is_ipsec_device(priv->mdev)) {
|
|
||||||
netdev_warn(netdev,
|
|
||||||
"XDP is not available on Innova cards with IPsec support\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
new_params = priv->channels.params;
|
new_params = priv->channels.params;
|
||||||
new_params.xdp_prog = prog;
|
new_params.xdp_prog = prog;
|
||||||
|
|
||||||
|
@ -49,7 +49,6 @@
|
|||||||
#include "en/rep/tc.h"
|
#include "en/rep/tc.h"
|
||||||
#include "ipoib/ipoib.h"
|
#include "ipoib/ipoib.h"
|
||||||
#include "accel/ipsec.h"
|
#include "accel/ipsec.h"
|
||||||
#include "fpga/ipsec.h"
|
|
||||||
#include "en_accel/ipsec_rxtx.h"
|
#include "en_accel/ipsec_rxtx.h"
|
||||||
#include "en_accel/ktls_txrx.h"
|
#include "en_accel/ktls_txrx.h"
|
||||||
#include "en/xdp.h"
|
#include "en/xdp.h"
|
||||||
@ -2384,46 +2383,6 @@ const struct mlx5e_rx_handlers mlx5i_rx_handlers = {
|
|||||||
};
|
};
|
||||||
#endif /* CONFIG_MLX5_CORE_IPOIB */
|
#endif /* CONFIG_MLX5_CORE_IPOIB */
|
||||||
|
|
||||||
#ifdef CONFIG_MLX5_EN_IPSEC
|
|
||||||
|
|
||||||
static void mlx5e_ipsec_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe)
|
|
||||||
{
|
|
||||||
struct mlx5_wq_cyc *wq = &rq->wqe.wq;
|
|
||||||
struct mlx5e_wqe_frag_info *wi;
|
|
||||||
struct sk_buff *skb;
|
|
||||||
u32 cqe_bcnt;
|
|
||||||
u16 ci;
|
|
||||||
|
|
||||||
ci = mlx5_wq_cyc_ctr2ix(wq, be16_to_cpu(cqe->wqe_counter));
|
|
||||||
wi = get_frag(rq, ci);
|
|
||||||
cqe_bcnt = be32_to_cpu(cqe->byte_cnt);
|
|
||||||
|
|
||||||
if (unlikely(MLX5E_RX_ERR_CQE(cqe))) {
|
|
||||||
rq->stats->wqe_err++;
|
|
||||||
goto wq_free_wqe;
|
|
||||||
}
|
|
||||||
|
|
||||||
skb = INDIRECT_CALL_2(rq->wqe.skb_from_cqe,
|
|
||||||
mlx5e_skb_from_cqe_linear,
|
|
||||||
mlx5e_skb_from_cqe_nonlinear,
|
|
||||||
rq, cqe, wi, cqe_bcnt);
|
|
||||||
if (unlikely(!skb)) /* a DROP, save the page-reuse checks */
|
|
||||||
goto wq_free_wqe;
|
|
||||||
|
|
||||||
skb = mlx5e_ipsec_handle_rx_skb(rq->netdev, skb, &cqe_bcnt);
|
|
||||||
if (unlikely(!skb))
|
|
||||||
goto wq_free_wqe;
|
|
||||||
|
|
||||||
mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb);
|
|
||||||
napi_gro_receive(rq->cq.napi, skb);
|
|
||||||
|
|
||||||
wq_free_wqe:
|
|
||||||
mlx5e_free_rx_wqe(rq, wi, true);
|
|
||||||
mlx5_wq_cyc_pop(wq);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* CONFIG_MLX5_EN_IPSEC */
|
|
||||||
|
|
||||||
int mlx5e_rq_set_handlers(struct mlx5e_rq *rq, struct mlx5e_params *params, bool xsk)
|
int mlx5e_rq_set_handlers(struct mlx5e_rq *rq, struct mlx5e_params *params, bool xsk)
|
||||||
{
|
{
|
||||||
struct net_device *netdev = rq->netdev;
|
struct net_device *netdev = rq->netdev;
|
||||||
@ -2440,10 +2399,6 @@ int mlx5e_rq_set_handlers(struct mlx5e_rq *rq, struct mlx5e_params *params, bool
|
|||||||
rq->post_wqes = mlx5e_post_rx_mpwqes;
|
rq->post_wqes = mlx5e_post_rx_mpwqes;
|
||||||
rq->dealloc_wqe = mlx5e_dealloc_rx_mpwqe;
|
rq->dealloc_wqe = mlx5e_dealloc_rx_mpwqe;
|
||||||
|
|
||||||
if (mlx5_fpga_is_ipsec_device(mdev)) {
|
|
||||||
netdev_err(netdev, "MPWQE RQ with Innova IPSec offload not supported\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
if (params->packet_merge.type == MLX5E_PACKET_MERGE_SHAMPO) {
|
if (params->packet_merge.type == MLX5E_PACKET_MERGE_SHAMPO) {
|
||||||
rq->handle_rx_cqe = priv->profile->rx_handlers->handle_rx_cqe_mpwqe_shampo;
|
rq->handle_rx_cqe = priv->profile->rx_handlers->handle_rx_cqe_mpwqe_shampo;
|
||||||
if (!rq->handle_rx_cqe) {
|
if (!rq->handle_rx_cqe) {
|
||||||
@ -2467,14 +2422,7 @@ int mlx5e_rq_set_handlers(struct mlx5e_rq *rq, struct mlx5e_params *params, bool
|
|||||||
mlx5e_skb_from_cqe_nonlinear;
|
mlx5e_skb_from_cqe_nonlinear;
|
||||||
rq->post_wqes = mlx5e_post_rx_wqes;
|
rq->post_wqes = mlx5e_post_rx_wqes;
|
||||||
rq->dealloc_wqe = mlx5e_dealloc_rx_wqe;
|
rq->dealloc_wqe = mlx5e_dealloc_rx_wqe;
|
||||||
|
rq->handle_rx_cqe = priv->profile->rx_handlers->handle_rx_cqe;
|
||||||
#ifdef CONFIG_MLX5_EN_IPSEC
|
|
||||||
if ((mlx5_fpga_ipsec_device_caps(mdev) & MLX5_ACCEL_IPSEC_CAP_DEVICE) &&
|
|
||||||
priv->ipsec)
|
|
||||||
rq->handle_rx_cqe = mlx5e_ipsec_handle_rx_cqe;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
rq->handle_rx_cqe = priv->profile->rx_handlers->handle_rx_cqe;
|
|
||||||
if (!rq->handle_rx_cqe) {
|
if (!rq->handle_rx_cqe) {
|
||||||
netdev_err(netdev, "RX handler of RQ is not set\n");
|
netdev_err(netdev, "RX handler of RQ is not set\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -57,8 +57,6 @@ struct mlx5_fpga_device {
|
|||||||
u32 mkey;
|
u32 mkey;
|
||||||
struct mlx5_uars_page *uar;
|
struct mlx5_uars_page *uar;
|
||||||
} conn_res;
|
} conn_res;
|
||||||
|
|
||||||
struct mlx5_fpga_ipsec *ipsec;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define mlx5_fpga_dbg(__adev, format, ...) \
|
#define mlx5_fpga_dbg(__adev, format, ...) \
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017 Mellanox Technologies. All rights reserved.
|
|
||||||
*
|
|
||||||
* This software is available to you under a choice of one of two
|
|
||||||
* licenses. You may choose to be licensed under the terms of the GNU
|
|
||||||
* General Public License (GPL) Version 2, available from the file
|
|
||||||
* COPYING in the main directory of this source tree, or the
|
|
||||||
* OpenIB.org BSD license below:
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or
|
|
||||||
* without modification, are permitted provided that the following
|
|
||||||
* conditions are met:
|
|
||||||
*
|
|
||||||
* - Redistributions of source code must retain the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer.
|
|
||||||
*
|
|
||||||
* - Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials
|
|
||||||
* provided with the distribution.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
||||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
||||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __MLX5_FPGA_IPSEC_H__
|
|
||||||
#define __MLX5_FPGA_IPSEC_H__
|
|
||||||
|
|
||||||
#include "accel/ipsec.h"
|
|
||||||
#include "fs_cmd.h"
|
|
||||||
|
|
||||||
#ifdef CONFIG_MLX5_FPGA_IPSEC
|
|
||||||
const struct mlx5_accel_ipsec_ops *mlx5_fpga_ipsec_ops(struct mlx5_core_dev *mdev);
|
|
||||||
u32 mlx5_fpga_ipsec_device_caps(struct mlx5_core_dev *mdev);
|
|
||||||
const struct mlx5_flow_cmds *
|
|
||||||
mlx5_fs_cmd_get_default_ipsec_fpga_cmds(enum fs_flow_table_type type);
|
|
||||||
void mlx5_fpga_ipsec_build_fs_cmds(void);
|
|
||||||
bool mlx5_fpga_is_ipsec_device(struct mlx5_core_dev *mdev);
|
|
||||||
#else
|
|
||||||
static inline
|
|
||||||
const struct mlx5_accel_ipsec_ops *mlx5_fpga_ipsec_ops(struct mlx5_core_dev *mdev)
|
|
||||||
{ return NULL; }
|
|
||||||
static inline u32 mlx5_fpga_ipsec_device_caps(struct mlx5_core_dev *mdev) { return 0; }
|
|
||||||
static inline const struct mlx5_flow_cmds *
|
|
||||||
mlx5_fs_cmd_get_default_ipsec_fpga_cmds(enum fs_flow_table_type type)
|
|
||||||
{
|
|
||||||
return mlx5_fs_cmd_get_default(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void mlx5_fpga_ipsec_build_fs_cmds(void) {};
|
|
||||||
static inline bool mlx5_fpga_is_ipsec_device(struct mlx5_core_dev *mdev) { return false; }
|
|
||||||
|
|
||||||
#endif /* CONFIG_MLX5_FPGA_IPSEC */
|
|
||||||
#endif /* __MLX5_FPGA_IPSEC_H__ */
|
|
@ -40,8 +40,6 @@
|
|||||||
#include "fs_cmd.h"
|
#include "fs_cmd.h"
|
||||||
#include "fs_ft_pool.h"
|
#include "fs_ft_pool.h"
|
||||||
#include "diag/fs_tracepoint.h"
|
#include "diag/fs_tracepoint.h"
|
||||||
#include "accel/ipsec.h"
|
|
||||||
#include "fpga/ipsec.h"
|
|
||||||
|
|
||||||
#define INIT_TREE_NODE_ARRAY_SIZE(...) (sizeof((struct init_tree_node[]){__VA_ARGS__}) /\
|
#define INIT_TREE_NODE_ARRAY_SIZE(...) (sizeof((struct init_tree_node[]){__VA_ARGS__}) /\
|
||||||
sizeof(struct init_tree_node))
|
sizeof(struct init_tree_node))
|
||||||
@ -2519,10 +2517,6 @@ static struct mlx5_flow_root_namespace
|
|||||||
struct mlx5_flow_root_namespace *root_ns;
|
struct mlx5_flow_root_namespace *root_ns;
|
||||||
struct mlx5_flow_namespace *ns;
|
struct mlx5_flow_namespace *ns;
|
||||||
|
|
||||||
if (mlx5_fpga_ipsec_device_caps(steering->dev) & MLX5_ACCEL_IPSEC_CAP_DEVICE &&
|
|
||||||
(table_type == FS_FT_NIC_RX || table_type == FS_FT_NIC_TX))
|
|
||||||
cmds = mlx5_fs_cmd_get_default_ipsec_fpga_cmds(table_type);
|
|
||||||
|
|
||||||
/* Create the root namespace */
|
/* Create the root namespace */
|
||||||
root_ns = kzalloc(sizeof(*root_ns), GFP_KERNEL);
|
root_ns = kzalloc(sizeof(*root_ns), GFP_KERNEL);
|
||||||
if (!root_ns)
|
if (!root_ns)
|
||||||
@ -3172,8 +3166,7 @@ int mlx5_init_fs(struct mlx5_core_dev *dev)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mlx5_fpga_ipsec_device_caps(steering->dev) & MLX5_ACCEL_IPSEC_CAP_DEVICE ||
|
if (MLX5_CAP_FLOWTABLE_NIC_TX(dev, ft_support)) {
|
||||||
MLX5_CAP_FLOWTABLE_NIC_TX(dev, ft_support)) {
|
|
||||||
err = init_egress_root_ns(steering);
|
err = init_egress_root_ns(steering);
|
||||||
if (err)
|
if (err)
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -62,7 +62,6 @@
|
|||||||
#include "lib/mlx5.h"
|
#include "lib/mlx5.h"
|
||||||
#include "lib/tout.h"
|
#include "lib/tout.h"
|
||||||
#include "fpga/core.h"
|
#include "fpga/core.h"
|
||||||
#include "fpga/ipsec.h"
|
|
||||||
#include "accel/ipsec.h"
|
#include "accel/ipsec.h"
|
||||||
#include "lib/clock.h"
|
#include "lib/clock.h"
|
||||||
#include "lib/vxlan.h"
|
#include "lib/vxlan.h"
|
||||||
@ -1937,7 +1936,6 @@ static int __init init(void)
|
|||||||
get_random_bytes(&sw_owner_id, sizeof(sw_owner_id));
|
get_random_bytes(&sw_owner_id, sizeof(sw_owner_id));
|
||||||
|
|
||||||
mlx5_core_verify_params();
|
mlx5_core_verify_params();
|
||||||
mlx5_fpga_ipsec_build_fs_cmds();
|
|
||||||
mlx5_register_debugfs();
|
mlx5_register_debugfs();
|
||||||
|
|
||||||
err = pci_register_driver(&mlx5_core_driver);
|
err = pci_register_driver(&mlx5_core_driver);
|
||||||
|
@ -386,68 +386,6 @@ struct mlx5_ifc_fpga_destroy_qp_out_bits {
|
|||||||
u8 reserved_at_40[0x40];
|
u8 reserved_at_40[0x40];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlx5_ifc_ipsec_extended_cap_bits {
|
|
||||||
u8 encapsulation[0x20];
|
|
||||||
|
|
||||||
u8 reserved_0[0x12];
|
|
||||||
u8 v2_command[0x1];
|
|
||||||
u8 udp_encap[0x1];
|
|
||||||
u8 rx_no_trailer[0x1];
|
|
||||||
u8 ipv4_fragment[0x1];
|
|
||||||
u8 ipv6[0x1];
|
|
||||||
u8 esn[0x1];
|
|
||||||
u8 lso[0x1];
|
|
||||||
u8 transport_and_tunnel_mode[0x1];
|
|
||||||
u8 tunnel_mode[0x1];
|
|
||||||
u8 transport_mode[0x1];
|
|
||||||
u8 ah_esp[0x1];
|
|
||||||
u8 esp[0x1];
|
|
||||||
u8 ah[0x1];
|
|
||||||
u8 ipv4_options[0x1];
|
|
||||||
|
|
||||||
u8 auth_alg[0x20];
|
|
||||||
|
|
||||||
u8 enc_alg[0x20];
|
|
||||||
|
|
||||||
u8 sa_cap[0x20];
|
|
||||||
|
|
||||||
u8 reserved_1[0x10];
|
|
||||||
u8 number_of_ipsec_counters[0x10];
|
|
||||||
|
|
||||||
u8 ipsec_counters_addr_low[0x20];
|
|
||||||
u8 ipsec_counters_addr_high[0x20];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5_ifc_ipsec_counters_bits {
|
|
||||||
u8 dec_in_packets[0x40];
|
|
||||||
|
|
||||||
u8 dec_out_packets[0x40];
|
|
||||||
|
|
||||||
u8 dec_bypass_packets[0x40];
|
|
||||||
|
|
||||||
u8 enc_in_packets[0x40];
|
|
||||||
|
|
||||||
u8 enc_out_packets[0x40];
|
|
||||||
|
|
||||||
u8 enc_bypass_packets[0x40];
|
|
||||||
|
|
||||||
u8 drop_dec_packets[0x40];
|
|
||||||
|
|
||||||
u8 failed_auth_dec_packets[0x40];
|
|
||||||
|
|
||||||
u8 drop_enc_packets[0x40];
|
|
||||||
|
|
||||||
u8 success_add_sa[0x40];
|
|
||||||
|
|
||||||
u8 fail_add_sa[0x40];
|
|
||||||
|
|
||||||
u8 success_delete_sa[0x40];
|
|
||||||
|
|
||||||
u8 fail_delete_sa[0x40];
|
|
||||||
|
|
||||||
u8 dropped_cmd[0x40];
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MLX5_FPGA_QP_ERROR_EVENT_SYNDROME_RETRY_COUNTER_EXPIRED = 0x1,
|
MLX5_FPGA_QP_ERROR_EVENT_SYNDROME_RETRY_COUNTER_EXPIRED = 0x1,
|
||||||
MLX5_FPGA_QP_ERROR_EVENT_SYNDROME_RNR_EXPIRED = 0x2,
|
MLX5_FPGA_QP_ERROR_EVENT_SYNDROME_RNR_EXPIRED = 0x2,
|
||||||
@ -464,90 +402,4 @@ struct mlx5_ifc_fpga_qp_error_event_bits {
|
|||||||
u8 reserved_at_c0[0x8];
|
u8 reserved_at_c0[0x8];
|
||||||
u8 fpga_qpn[0x18];
|
u8 fpga_qpn[0x18];
|
||||||
};
|
};
|
||||||
enum mlx5_ifc_fpga_ipsec_response_syndrome {
|
|
||||||
MLX5_FPGA_IPSEC_RESPONSE_SUCCESS = 0,
|
|
||||||
MLX5_FPGA_IPSEC_RESPONSE_ILLEGAL_REQUEST = 1,
|
|
||||||
MLX5_FPGA_IPSEC_RESPONSE_SADB_ISSUE = 2,
|
|
||||||
MLX5_FPGA_IPSEC_RESPONSE_WRITE_RESPONSE_ISSUE = 3,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5_ifc_fpga_ipsec_cmd_resp {
|
|
||||||
__be32 syndrome;
|
|
||||||
union {
|
|
||||||
__be32 sw_sa_handle;
|
|
||||||
__be32 flags;
|
|
||||||
};
|
|
||||||
u8 reserved[24];
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
enum mlx5_ifc_fpga_ipsec_cmd_opcode {
|
|
||||||
MLX5_FPGA_IPSEC_CMD_OP_ADD_SA = 0,
|
|
||||||
MLX5_FPGA_IPSEC_CMD_OP_DEL_SA = 1,
|
|
||||||
MLX5_FPGA_IPSEC_CMD_OP_ADD_SA_V2 = 2,
|
|
||||||
MLX5_FPGA_IPSEC_CMD_OP_DEL_SA_V2 = 3,
|
|
||||||
MLX5_FPGA_IPSEC_CMD_OP_MOD_SA_V2 = 4,
|
|
||||||
MLX5_FPGA_IPSEC_CMD_OP_SET_CAP = 5,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum mlx5_ifc_fpga_ipsec_cap {
|
|
||||||
MLX5_FPGA_IPSEC_CAP_NO_TRAILER = BIT(0),
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5_ifc_fpga_ipsec_cmd_cap {
|
|
||||||
__be32 cmd;
|
|
||||||
__be32 flags;
|
|
||||||
u8 reserved[24];
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
enum mlx5_ifc_fpga_ipsec_sa_flags {
|
|
||||||
MLX5_FPGA_IPSEC_SA_ESN_EN = BIT(0),
|
|
||||||
MLX5_FPGA_IPSEC_SA_ESN_OVERLAP = BIT(1),
|
|
||||||
MLX5_FPGA_IPSEC_SA_IPV6 = BIT(2),
|
|
||||||
MLX5_FPGA_IPSEC_SA_DIR_SX = BIT(3),
|
|
||||||
MLX5_FPGA_IPSEC_SA_SPI_EN = BIT(4),
|
|
||||||
MLX5_FPGA_IPSEC_SA_SA_VALID = BIT(5),
|
|
||||||
MLX5_FPGA_IPSEC_SA_IP_ESP = BIT(6),
|
|
||||||
MLX5_FPGA_IPSEC_SA_IP_AH = BIT(7),
|
|
||||||
};
|
|
||||||
|
|
||||||
enum mlx5_ifc_fpga_ipsec_sa_enc_mode {
|
|
||||||
MLX5_FPGA_IPSEC_SA_ENC_MODE_NONE = 0,
|
|
||||||
MLX5_FPGA_IPSEC_SA_ENC_MODE_AES_GCM_128_AUTH_128 = 1,
|
|
||||||
MLX5_FPGA_IPSEC_SA_ENC_MODE_AES_GCM_256_AUTH_128 = 3,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5_ifc_fpga_ipsec_sa_v1 {
|
|
||||||
__be32 cmd;
|
|
||||||
u8 key_enc[32];
|
|
||||||
u8 key_auth[32];
|
|
||||||
__be32 sip[4];
|
|
||||||
__be32 dip[4];
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
__be32 reserved;
|
|
||||||
u8 salt_iv[8];
|
|
||||||
__be32 salt;
|
|
||||||
} __packed gcm;
|
|
||||||
struct {
|
|
||||||
u8 salt[16];
|
|
||||||
} __packed cbc;
|
|
||||||
};
|
|
||||||
__be32 spi;
|
|
||||||
__be32 sw_sa_handle;
|
|
||||||
__be16 tfclen;
|
|
||||||
u8 enc_mode;
|
|
||||||
u8 reserved1[2];
|
|
||||||
u8 flags;
|
|
||||||
u8 reserved2[2];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5_ifc_fpga_ipsec_sa {
|
|
||||||
struct mlx5_ifc_fpga_ipsec_sa_v1 ipsec_sa_v1;
|
|
||||||
__be16 udp_sp;
|
|
||||||
__be16 udp_dp;
|
|
||||||
u8 reserved1[4];
|
|
||||||
__be32 esn;
|
|
||||||
__be16 vid; /* only 12 bits, rest is reserved */
|
|
||||||
__be16 reserved2;
|
|
||||||
} __packed;
|
|
||||||
#endif /* MLX5_IFC_FPGA_H */
|
#endif /* MLX5_IFC_FPGA_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user