net/ice/base: change get PHY capability log level
[dpdk.git] / drivers / net / pcap / rte_eth_pcap.c
index 057aa9d..a32b1f3 100644 (file)
@@ -51,6 +51,9 @@ static uint64_t start_cycles;
 static uint64_t hz;
 static uint8_t iface_idx;
 
+static uint64_t timestamp_rx_dynflag;
+static int timestamp_dynfield_offset = -1;
+
 struct queue_stat {
        volatile unsigned long pkts;
        volatile unsigned long bytes;
@@ -265,9 +268,11 @@ eth_pcap_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
                }
 
                mbuf->pkt_len = (uint16_t)header.caplen;
-               mbuf->timestamp = (uint64_t)header.ts.tv_sec * 1000000
-                                                       + header.ts.tv_usec;
-               mbuf->ol_flags |= PKT_RX_TIMESTAMP;
+               *RTE_MBUF_DYNFIELD(mbuf, timestamp_dynfield_offset,
+                       rte_mbuf_timestamp_t *) =
+                               (uint64_t)header.ts.tv_sec * 1000000 +
+                               header.ts.tv_usec;
+               mbuf->ol_flags |= timestamp_rx_dynflag;
                mbuf->port = pcap_q->port_id;
                bufs[num_rx] = mbuf;
                num_rx++;
@@ -607,7 +612,7 @@ status_up:
  * Is the only place for us to close all the tx streams dumpers.
  * If not called the dumpers will be flushed within each tx burst.
  */
-static void
+static int
 eth_dev_stop(struct rte_eth_dev *dev)
 {
        unsigned int i;
@@ -649,6 +654,8 @@ status_down:
                dev->data->tx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED;
 
        dev->data->dev_link.link_status = ETH_LINK_DOWN;
+
+       return 0;
 }
 
 static int
@@ -748,6 +755,13 @@ eth_dev_close(struct rte_eth_dev *dev)
                        struct pcap_rx_queue *pcap_q = &internals->rx_queue[i];
                        struct rte_mbuf *pcap_buf;
 
+                       /*
+                        * 'pcap_q->pkts' can be NULL if 'eth_dev_close()'
+                        * called before 'eth_rx_queue_setup()' has been called
+                        */
+                       if (pcap_q->pkts == NULL)
+                               continue;
+
                        while (!rte_ring_dequeue(pcap_q->pkts,
                                        (void **)&pcap_buf))
                                rte_pktmbuf_free(pcap_buf);
@@ -1149,6 +1163,7 @@ pmd_init_internals(struct rte_vdev_device *vdev,
        data->mac_addrs = &(*internals)->eth_addr;
        data->promiscuous = 1;
        data->all_multicast = 1;
+       data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
 
        /*
         * NOTE: we'll replace the data element, of originally allocated
@@ -1309,9 +1324,8 @@ eth_from_pcaps(struct rte_vdev_device *vdev,
 
                /* phy_mac arg is applied only only if "iface" devarg is provided */
                if (rx_queues->phy_mac) {
-                       int ret = eth_pcap_update_mac(rx_queues->queue[0].name,
-                                       eth_dev, vdev->device.numa_node);
-                       if (ret == 0)
+                       if (eth_pcap_update_mac(rx_queues->queue[0].name,
+                                       eth_dev, vdev->device.numa_node) == 0)
                                internals->phy_mac = 1;
                }
        }
@@ -1363,6 +1377,13 @@ pmd_pcap_probe(struct rte_vdev_device *dev)
        start_cycles = rte_get_timer_cycles();
        hz = rte_get_timer_hz();
 
+       ret = rte_mbuf_dyn_rx_timestamp_register(&timestamp_dynfield_offset,
+                       &timestamp_rx_dynflag);
+       if (ret != 0) {
+               PMD_LOG(ERR, "Failed to register Rx timestamp field/flag");
+               return -1;
+       }
+
        if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
                eth_dev = rte_eth_dev_attach_secondary(name);
                if (!eth_dev) {