@@ -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),
@@ -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 \
@@ -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
@@ -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;
@@ -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)
{
@@ -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;
@@ -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);
@@ -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')
new file mode 100644
@@ -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 */
@@ -10,3 +10,9 @@ DPDK_17.11 {
dpaa2_eth_eventq_detach;
} DPDK_17.05;
+
+EXPERIMENTAL {
+ global:
+
+ rte_pmd_dpaa2_set_timestamp;
+} DPDK_17.11;