NFD3 and NFDk have the same format metadata for the RX direction, while they are different for the TX direction.
Add the insert metadata logic of NFDk. Signed-off-by: Chaoyong He <chaoyong...@corigine.com> Reviewed-by: Niklas Söderlund <niklas.soderl...@corigine.com> --- drivers/net/nfp/flower/nfp_flower.c | 8 +++++++- drivers/net/nfp/nfdk/nfp_nfdk.h | 2 ++ drivers/net/nfp/nfdk/nfp_nfdk_dp.c | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 3636c347bb..8631664180 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -16,6 +16,7 @@ #include "../nfp_cpp_bridge.h" #include "../nfp_rxtx.h" #include "../nfd3/nfp_nfd3.h" +#include "../nfdk/nfp_nfdk.h" #include "../nfpcore/nfp_mip.h" #include "../nfpcore/nfp_rtsym.h" #include "../nfpcore/nfp_nsp.h" @@ -1061,11 +1062,16 @@ nfp_flower_enable_services(struct nfp_app_fw_flower *app_fw_flower) static void nfp_flower_pkt_add_metadata_register(struct nfp_app_fw_flower *app_fw_flower) { + struct nfp_net_hw *hw; struct nfp_flower_nfd_func *nfd_func; + hw = app_fw_flower->pf_hw; nfd_func = &app_fw_flower->nfd_func; - nfd_func->pkt_add_metadata_t = nfp_flower_nfd3_pkt_add_metadata; + if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + nfd_func->pkt_add_metadata_t = nfp_flower_nfd3_pkt_add_metadata; + else + nfd_func->pkt_add_metadata_t = nfp_flower_nfdk_pkt_add_metadata; } uint32_t diff --git a/drivers/net/nfp/nfdk/nfp_nfdk.h b/drivers/net/nfp/nfdk/nfp_nfdk.h index c39501990a..0e3c6cc90d 100644 --- a/drivers/net/nfp/nfdk/nfp_nfdk.h +++ b/drivers/net/nfp/nfdk/nfp_nfdk.h @@ -227,6 +227,8 @@ nfp_net_nfdk_tx_tso(struct nfp_net_txq *txq, return txd.raw; } +uint32_t nfp_flower_nfdk_pkt_add_metadata(struct rte_mbuf *mbuf, + uint32_t port_id); uint16_t nfp_net_nfdk_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); diff --git a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c index 9b815800bb..59c507e03b 100644 --- a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c +++ b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c @@ -12,8 +12,26 @@ #include "../nfp_rxtx.h" #include "../nfpcore/nfp_mip.h" #include "../nfpcore/nfp_rtsym.h" +#include "../flower/nfp_flower.h" +#include "../flower/nfp_flower_cmsg.h" #include "nfp_nfdk.h" +uint32_t +nfp_flower_nfdk_pkt_add_metadata(struct rte_mbuf *mbuf, + uint32_t port_id) +{ + uint32_t header; + char *meta_offset; + + meta_offset = rte_pktmbuf_prepend(mbuf, FLOWER_PKT_DATA_OFFSET); + header = NFP_NET_META_PORTID << NFP_NET_META_NFDK_LENGTH | FLOWER_PKT_DATA_OFFSET; + *(rte_be32_t *)meta_offset = rte_cpu_to_be_32(header); + meta_offset += NFP_NET_META_HEADER_SIZE; + *(rte_be32_t *)meta_offset = rte_cpu_to_be_32(port_id); + + return FLOWER_PKT_DATA_OFFSET; +} + static inline uint16_t nfp_net_nfdk_headlen_to_segs(uint16_t headlen) { -- 2.39.1