X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fsfc_tx.c;h=28d696de61f2af2567bf3c9e51cb0f794dd49e09;hb=c5d06df44f7ee22ab6892f8d47d7373dee5a4973;hp=d50d49ca56c3856fa81478a77ecfb417665b344b;hpb=38109b5b082eb2fae40430af93e063cd33766023;p=dpdk.git diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index d50d49ca56..28d696de61 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: BSD-3-Clause * - * Copyright(c) 2019-2020 Xilinx, Inc. + * Copyright(c) 2019-2021 Xilinx, Inc. * Copyright(c) 2016-2019 Solarflare Communications Inc. * * This software was jointly developed between OKTET Labs (under contract @@ -49,9 +49,15 @@ sfc_tx_get_offload_mask(struct sfc_adapter *sa) if (!sa->tso) no_caps |= DEV_TX_OFFLOAD_TCP_TSO; - if (!sa->tso_encap) - no_caps |= (DEV_TX_OFFLOAD_VXLAN_TNL_TSO | - DEV_TX_OFFLOAD_GENEVE_TNL_TSO); + if (!sa->tso_encap || + (encp->enc_tunnel_encapsulations_supported & + (1u << EFX_TUNNEL_PROTOCOL_VXLAN)) == 0) + no_caps |= DEV_TX_OFFLOAD_VXLAN_TNL_TSO; + + if (!sa->tso_encap || + (encp->enc_tunnel_encapsulations_supported & + (1u << EFX_TUNNEL_PROTOCOL_GENEVE)) == 0) + no_caps |= DEV_TX_OFFLOAD_GENEVE_TNL_TSO; return ~no_caps; } @@ -188,6 +194,17 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, info.vi_window_shift = encp->enc_vi_window_shift; info.tso_tcp_header_offset_limit = encp->enc_tx_tso_tcp_header_offset_limit; + info.tso_max_nb_header_descs = + RTE_MIN(encp->enc_tx_tso_max_header_ndescs, + (uint32_t)UINT16_MAX); + info.tso_max_header_len = + RTE_MIN(encp->enc_tx_tso_max_header_length, + (uint32_t)UINT16_MAX); + info.tso_max_nb_payload_descs = + RTE_MIN(encp->enc_tx_tso_max_payload_ndescs, + (uint32_t)UINT16_MAX); + info.tso_max_payload_len = encp->enc_tx_tso_max_payload_length; + info.tso_max_nb_outgoing_frames = encp->enc_tx_tso_max_nframes; rc = sa->priv.dp_tx->qcreate(sa->eth_dev->data->port_id, sw_index, &RTE_ETH_DEV_TO_PCI(sa->eth_dev)->addr, @@ -592,14 +609,16 @@ sfc_tx_start(struct sfc_adapter *sa) sfc_log_init(sa, "txq_count = %u", sas->txq_count); if (sa->tso) { - if (!encp->enc_fw_assisted_tso_v2_enabled) { + if (!encp->enc_fw_assisted_tso_v2_enabled && + !encp->enc_tso_v3_enabled) { sfc_warn(sa, "TSO support was unable to be restored"); sa->tso = B_FALSE; sa->tso_encap = B_FALSE; } } - if (sa->tso_encap && !encp->enc_fw_assisted_tso_v2_encap_enabled) { + if (sa->tso_encap && !encp->enc_fw_assisted_tso_v2_encap_enabled && + !encp->enc_tso_v3_enabled) { sfc_warn(sa, "Encapsulated TSO support was unable to be restored"); sa->tso_encap = B_FALSE; }