X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fsfc_tx.c;h=28d696de61f2af2567bf3c9e51cb0f794dd49e09;hb=18da3c854bb8105818dc23c36eecf3465596052a;hp=7d0e18a6bdf65f71ffb0d9895157936756428539;hpb=9aa0afd1e9c61f95d1fb4586b09b6e47be09233d;p=dpdk.git diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index 7d0e18a6bd..28d696de61 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * - * Copyright (c) 2016-2018 Solarflare Communications Inc. - * All rights reserved. + * Copyright(c) 2019-2021 Xilinx, Inc. + * Copyright(c) 2016-2019 Solarflare Communications Inc. * * This software was jointly developed between OKTET Labs (under contract * for Solarflare) and Solarflare Communications, Inc. @@ -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; } @@ -718,7 +737,7 @@ sfc_efx_prepare_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, * insertion offload is requested regardless the offload * requested/supported. */ - ret = sfc_dp_tx_prepare_pkt(tx_pkts[i], + ret = sfc_dp_tx_prepare_pkt(tx_pkts[i], 0, SFC_TSOH_STD_LEN, encp->enc_tx_tso_tcp_header_offset_limit, txq->max_fill_level, EFX_TX_FATSOV2_OPT_NDESCS, 1); @@ -1138,7 +1157,7 @@ struct sfc_dp_tx sfc_efx_tx = { .dp = { .name = SFC_KVARG_DATAPATH_EFX, .type = SFC_DP_TX, - .hw_fw_caps = 0, + .hw_fw_caps = SFC_DP_HW_FW_CAP_TX_EFX, }, .features = 0, .dev_offload_capa = DEV_TX_OFFLOAD_VLAN_INSERT |