]> git.droids-corp.org - dpdk.git/commitdiff
net/dpaa2: enable optional timestamp in mbuf
authorAkhil Goyal <akhil.goyal@nxp.com>
Fri, 11 Jan 2019 12:24:30 +0000 (12:24 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 14 Jan 2019 16:44:29 +0000 (17:44 +0100)
This patch enables the population of timestamp field
in mbuf on packet receive.
It may give performance impact on LX2xxx platforms.
So, it has been made optional for Lx2xxx platform.
One shall call, rte_dpaa2_enable_ts() to enable it.

Nothing is required for LS2 and LS1088 platforms.

Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com>
Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com>
doc/api/doxy-api-index.md
doc/api/doxy-api.conf.in
drivers/net/dpaa2/Makefile
drivers/net/dpaa2/base/dpaa2_hw_dpni.c
drivers/net/dpaa2/dpaa2_ethdev.c
drivers/net/dpaa2/dpaa2_ethdev.h
drivers/net/dpaa2/dpaa2_rxtx.c
drivers/net/dpaa2/meson.build
drivers/net/dpaa2/rte_pmd_dpaa2.h [new file with mode: 0644]
drivers/net/dpaa2/rte_pmd_dpaa2_version.map

index e27874c5ae9ee93a61c0d370791d71cc8c778f46..d95ad566cbf8e2f4b1d1d1a7c1df2619d408f409 100644 (file)
@@ -43,6 +43,7 @@ The public API headers are grouped by topics:
   [i40e]               (@ref rte_pmd_i40e.h),
   [bnxt]               (@ref rte_pmd_bnxt.h),
   [dpaa]               (@ref rte_pmd_dpaa.h),
+  [dpaa2]              (@ref rte_pmd_dpaa2.h),
   [dpaa2_mempool]      (@ref rte_dpaa2_mempool.h),
   [dpaa2_cmdif]        (@ref rte_pmd_dpaa2_cmdif.h),
   [dpaa2_qdma]         (@ref rte_pmd_dpaa2_qdma.h),
index 77ba327a88df479e10011f35ca5c0d55f09c9ee5..bef9320c074fadcf484c4fa2d34f88a5e5ac6a55 100644 (file)
@@ -9,6 +9,7 @@ INPUT                   = @TOPDIR@/doc/api/doxy-api-index.md \
                           @TOPDIR@/drivers/net/bnxt \
                           @TOPDIR@/drivers/net/bonding \
                           @TOPDIR@/drivers/net/dpaa \
+                          @TOPDIR@/drivers/net/dpaa2 \
                           @TOPDIR@/drivers/net/i40e \
                           @TOPDIR@/drivers/net/ixgbe \
                           @TOPDIR@/drivers/net/softnic \
index ca5f7a3365c738205a54e528d43e8862420a20bd..2b9c011d6e5df3562c04958a937fc441908f6aab 100644 (file)
@@ -42,4 +42,6 @@ LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
 LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs
 LDLIBS += -lrte_common_dpaax
 
+# install this header file
+SYMLINK-$(CONFIG_RTE_LIBRTE_DPAA2_PMD)-include := rte_pmd_dpaa2.h
 include $(RTE_SDK)/mk/rte.lib.mk
index 713a41bf34646519f0ca1b9355361970c536d3c7..a6f86df8ccb9c017e0d67306c82f3106cdd92c1a 100644 (file)
@@ -296,8 +296,10 @@ dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv,
                         DPNI_BUF_LAYOUT_OPT_FRAME_STATUS |
                         DPNI_BUF_LAYOUT_OPT_PARSER_RESULT |
                         DPNI_BUF_LAYOUT_OPT_DATA_ALIGN |
+                        DPNI_BUF_LAYOUT_OPT_TIMESTAMP |
                         DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE;
 
+       layout.pass_timestamp = true;
        layout.pass_frame_status = 1;
        layout.private_data_size = DPAA2_FD_PTA_SIZE;
        layout.pass_parser_result = 1;
index 39f85ae7bbbfe9b7840db5b097ef0918e4f03844..861fbcd9065b09d25710d6a74718e2a30fb49641 100644 (file)
@@ -56,6 +56,9 @@ static uint64_t dev_tx_offloads_nodis =
                DEV_TX_OFFLOAD_MT_LOCKFREE |
                DEV_TX_OFFLOAD_MBUF_FAST_FREE;
 
+/* enable timestamp in mbuf */
+enum pmd_dpaa2_ts dpaa2_enable_ts;
+
 struct rte_dpaa2_xstats_name_off {
        char name[RTE_ETH_XSTATS_NAME_SIZE];
        uint8_t page_id; /* dpni statistics page id */
@@ -88,6 +91,12 @@ static int dpaa2_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
 
 int dpaa2_logtype_pmd;
 
+__rte_experimental void
+rte_pmd_dpaa2_set_timestamp(enum pmd_dpaa2_ts enable)
+{
+       dpaa2_enable_ts = enable;
+}
+
 static int
 dpaa2_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
 {
index bd69f523d4e440295914046891be17c3204424aa..7cf6e419152a908647dc866104c4a554a07f4106 100644 (file)
@@ -9,6 +9,7 @@
 #define _DPAA2_ETHDEV_H
 
 #include <rte_event_eth_rx_adapter.h>
+#include <rte_pmd_dpaa2.h>
 
 #include <mc/fsl_dpni.h>
 #include <mc/fsl_mc_sys.h>
@@ -83,6 +84,9 @@
 #define DPAA2_PKT_TYPE_VLAN_1          0x0160
 #define DPAA2_PKT_TYPE_VLAN_2          0x0260
 
+/* enable timestamp in mbuf*/
+extern enum pmd_dpaa2_ts dpaa2_enable_ts;
+
 struct dpaa2_dev_priv {
        void *hw;
        int32_t hw_id;
index eab943dcf21f1438a2fadd0ccff0df5ab3761723..816ea00fdca9e24b869a173b4f759ea4eee16eca 100644 (file)
@@ -42,6 +42,7 @@ dpaa2_dev_rx_parse_slow(struct rte_mbuf *mbuf,
 static inline void __attribute__((hot))
 dpaa2_dev_rx_parse_new(struct rte_mbuf *m, const struct qbman_fd *fd)
 {
+       struct dpaa2_annot_hdr *annotation;
        uint16_t frc = DPAA2_GET_FD_FRC_PARSE_SUM(fd);
 
        m->packet_type = RTE_PTYPE_UNKNOWN;
@@ -104,6 +105,19 @@ dpaa2_dev_rx_parse_new(struct rte_mbuf *m, const struct qbman_fd *fd)
        }
        m->hash.rss = fd->simple.flc_hi;
        m->ol_flags |= PKT_RX_RSS_HASH;
+
+       if (dpaa2_enable_ts == PMD_DPAA2_ENABLE_TS) {
+               annotation = (struct dpaa2_annot_hdr *)
+                       ((size_t)DPAA2_IOVA_TO_VADDR(
+                       DPAA2_GET_FD_ADDR(fd)) + DPAA2_FD_PTA_SIZE);
+               m->timestamp = annotation->word2;
+               m->ol_flags |= PKT_RX_TIMESTAMP;
+               DPAA2_PMD_DP_DEBUG("pkt timestamp:0x%" PRIx64 "", m->timestamp);
+       }
+
+       DPAA2_PMD_DP_DEBUG("HW frc = 0x%x\t packet type =0x%x "
+               "ol_flags =0x%" PRIx64 "",
+               frc, m->packet_type, m->ol_flags);
 }
 
 static inline uint32_t __attribute__((hot))
@@ -205,6 +219,10 @@ dpaa2_dev_rx_parse(struct rte_mbuf *mbuf, void *hw_annot_addr)
        else if (BIT_ISSET_AT_POS(annotation->word8, DPAA2_ETH_FAS_L4CE))
                mbuf->ol_flags |= PKT_RX_L4_CKSUM_BAD;
 
+       mbuf->ol_flags |= PKT_RX_TIMESTAMP;
+       mbuf->timestamp = annotation->word2;
+       DPAA2_PMD_DP_DEBUG("pkt timestamp: 0x%" PRIx64 "", mbuf->timestamp);
+
        /* Check detailed parsing requirement */
        if (annotation->word3 & 0x7FFFFC3FFFF)
                return dpaa2_dev_rx_parse_slow(mbuf, annotation);
index b3459525830b1ba535a3c0651f2960777c546a2d..07aada87c2ca0e7ce6704816cee70fbb74a34e05 100644 (file)
@@ -18,3 +18,5 @@ includes += include_directories('base', 'mc')
 
 # depends on fslmc bus which uses experimental API
 allow_experimental_apis = true
+
+install_headers('rte_pmd_dpaa2.h')
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2.h b/drivers/net/dpaa2/rte_pmd_dpaa2.h
new file mode 100644 (file)
index 0000000..f9303ac
--- /dev/null
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2018 NXP
+ */
+
+#ifndef _RTE_PMD_DPAA2_H
+#define _RTE_PMD_DPAA2_H
+
+/**
+ * @file rte_pmd_dpaa2.h
+ *
+ * NXP dpaa2 PMD specific functions.
+ *
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
+ */
+
+#include <rte_flow.h>
+
+enum pmd_dpaa2_ts {
+       PMD_DPAA2_DISABLE_TS,
+       PMD_DPAA2_ENABLE_TS
+};
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
+ * Enable/Disable timestamping update in mbuf for LX2160 kind of devices.
+ * For LS2088/LS1088 devices, timestamping will be updated in mbuf without
+ * calling this API.
+ *
+ * @param pmd_dpaa2_ts
+ *    Enum to enable/disable timestamp update in mbuf for LX2160 devices.
+ */
+__rte_experimental
+void rte_pmd_dpaa2_set_timestamp(enum pmd_dpaa2_ts);
+
+#endif /* _RTE_PMD_DPAA2_H */
index 09f4364bcf2b60067c80852ca629f86fd3805d32..de95a03cdebb032a7e981838c1ea87a7bfab0283 100644 (file)
@@ -10,3 +10,9 @@ DPDK_17.11 {
        dpaa2_eth_eventq_detach;
 
 } DPDK_17.05;
+
+EXPERIMENTAL {
+       global:
+
+       rte_pmd_dpaa2_set_timestamp;
+} DPDK_17.11;