[04/10] net/nfp: add the insert metadata logic of NFDk
Checks
Commit Message
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.he@corigine.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@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(-)
@@ -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
@@ -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);
@@ -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)
{