net/ice: support DCF VLAN filter and offload
[dpdk.git] / drivers / net / nfb / nfb_rx.h
index cf3899b..b618682 100644 (file)
 #include <nfb/ndp.h>
 
 #include <rte_mbuf.h>
+#include <rte_mbuf_dyn.h>
 #include <rte_ethdev.h>
 
-#define NFB_TIMESTAMP_FLAG (1 << 0)
+extern uint64_t nfb_timestamp_rx_dynflag;
+extern int nfb_timestamp_dynfield_offset;
+
+static inline rte_mbuf_timestamp_t *
+nfb_timestamp_dynfield(struct rte_mbuf *mbuf)
+{
+       return RTE_MBUF_DYNFIELD(mbuf,
+               nfb_timestamp_dynfield_offset, rte_mbuf_timestamp_t *);
+}
 
 struct ndp_rx_queue {
        struct nfb_device *nfb;      /* nfb dev structure */
@@ -83,11 +92,13 @@ nfb_eth_rx_queue_setup(struct rte_eth_dev *dev,
 /**
  * DPDK callback to release a RX queue.
  *
- * @param dpdk_rxq
- *   Generic RX queue pointer.
+ * @param dev
+ *   Pointer to Ethernet device structure.
+ * @param qid
+ *   Receive queue index.
  */
 void
-nfb_eth_rx_queue_release(void *q);
+nfb_eth_rx_queue_release(struct rte_eth_dev *dev, uint16_t qid);
 
 /**
  * Start traffic on Rx queue.
@@ -132,7 +143,6 @@ nfb_eth_ndp_rx(void *queue,
        uint16_t nb_pkts)
 {
        struct ndp_rx_queue *ndp = queue;
-       uint8_t timestamping_enabled;
        uint16_t packet_size;
        uint64_t num_bytes = 0;
        uint16_t num_rx;
@@ -150,8 +160,6 @@ nfb_eth_ndp_rx(void *queue,
                return 0;
        }
 
-       timestamping_enabled = ndp->flags & NFB_TIMESTAMP_FLAG;
-
        /* returns either all or nothing */
        i = rte_pktmbuf_alloc_bulk(ndp->mb_pool, mbufs, nb_pkts);
        if (unlikely(i != 0))
@@ -189,17 +197,20 @@ nfb_eth_ndp_rx(void *queue,
                        mbuf->port = ndp->in_port;
                        mbuf->ol_flags = 0;
 
-                       if (timestamping_enabled) {
+                       if (nfb_timestamp_dynfield_offset >= 0) {
+                               rte_mbuf_timestamp_t timestamp;
+
                                /* nanoseconds */
-                               mbuf->timestamp =
+                               timestamp =
                                        rte_le_to_cpu_32(*((uint32_t *)
                                        (packets[i].header + 4)));
-                               mbuf->timestamp <<= 32;
+                               timestamp <<= 32;
                                /* seconds */
-                               mbuf->timestamp |=
+                               timestamp |=
                                        rte_le_to_cpu_32(*((uint32_t *)
                                        (packets[i].header + 8)));
-                               mbuf->ol_flags |= PKT_RX_TIMESTAMP;
+                               *nfb_timestamp_dynfield(mbuf) = timestamp;
+                               mbuf->ol_flags |= nfb_timestamp_rx_dynflag;
                        }
 
                        bufs[num_rx++] = mbuf;