net/hns3: fix Rx/Tx errors stats
[dpdk.git] / drivers / net / ena / ena_ethdev.c
index bdb8fe7..20ff365 100644 (file)
@@ -27,7 +27,7 @@
 #include <ena_eth_io_defs.h>
 
 #define DRV_MODULE_VER_MAJOR   2
-#define DRV_MODULE_VER_MINOR   1
+#define DRV_MODULE_VER_MINOR   2
 #define DRV_MODULE_VER_SUBMINOR        0
 
 #define ENA_IO_TXQ_IDX(q)      (2 * (q))
@@ -140,8 +140,8 @@ static const struct ena_stats ena_stats_rx_strings[] = {
 /** Vendor ID used by Amazon devices */
 #define PCI_VENDOR_ID_AMAZON 0x1D0F
 /** Amazon devices */
-#define PCI_DEVICE_ID_ENA_VF   0xEC20
-#define PCI_DEVICE_ID_ENA_LLQ_VF       0xEC21
+#define PCI_DEVICE_ID_ENA_VF           0xEC20
+#define PCI_DEVICE_ID_ENA_VF_RSERV0    0xEC21
 
 #define        ENA_TX_OFFLOAD_MASK     (\
        PKT_TX_L4_MASK |         \
@@ -155,7 +155,7 @@ static const struct ena_stats ena_stats_rx_strings[] = {
 
 static const struct rte_pci_id pci_id_ena_map[] = {
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_AMAZON, PCI_DEVICE_ID_ENA_VF) },
-       { RTE_PCI_DEVICE(PCI_VENDOR_ID_AMAZON, PCI_DEVICE_ID_ENA_LLQ_VF) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_AMAZON, PCI_DEVICE_ID_ENA_VF_RSERV0) },
        { .device_id = 0 },
 };
 
@@ -198,7 +198,7 @@ static void ena_init_rings(struct ena_adapter *adapter,
                           bool disable_meta_caching);
 static int ena_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
 static int ena_start(struct rte_eth_dev *dev);
-static void ena_stop(struct rte_eth_dev *dev);
+static int ena_stop(struct rte_eth_dev *dev);
 static int ena_close(struct rte_eth_dev *dev);
 static int ena_dev_reset(struct rte_eth_dev *dev);
 static int ena_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
@@ -296,21 +296,23 @@ static inline void ena_rx_mbuf_prepare(struct rte_mbuf *mbuf,
        else if (ena_rx_ctx->l4_proto == ENA_ETH_IO_L4_PROTO_UDP)
                packet_type |= RTE_PTYPE_L4_UDP;
 
-       if (ena_rx_ctx->l3_proto == ENA_ETH_IO_L3_PROTO_IPV4)
+       if (ena_rx_ctx->l3_proto == ENA_ETH_IO_L3_PROTO_IPV4) {
                packet_type |= RTE_PTYPE_L3_IPV4;
-       else if (ena_rx_ctx->l3_proto == ENA_ETH_IO_L3_PROTO_IPV6)
+               if (unlikely(ena_rx_ctx->l3_csum_err))
+                       ol_flags |= PKT_RX_IP_CKSUM_BAD;
+               else
+                       ol_flags |= PKT_RX_IP_CKSUM_GOOD;
+       } else if (ena_rx_ctx->l3_proto == ENA_ETH_IO_L3_PROTO_IPV6) {
                packet_type |= RTE_PTYPE_L3_IPV6;
+       }
 
-       if (!ena_rx_ctx->l4_csum_checked)
+       if (!ena_rx_ctx->l4_csum_checked || ena_rx_ctx->frag)
                ol_flags |= PKT_RX_L4_CKSUM_UNKNOWN;
        else
-               if (unlikely(ena_rx_ctx->l4_csum_err) && !ena_rx_ctx->frag)
+               if (unlikely(ena_rx_ctx->l4_csum_err))
                        ol_flags |= PKT_RX_L4_CKSUM_BAD;
                else
-                       ol_flags |= PKT_RX_L4_CKSUM_UNKNOWN;
-
-       if (unlikely(ena_rx_ctx->l3_csum_err))
-               ol_flags |= PKT_RX_IP_CKSUM_BAD;
+                       ol_flags |= PKT_RX_L4_CKSUM_GOOD;
 
        mbuf->ol_flags = ol_flags;
        mbuf->packet_type = packet_type;
@@ -505,12 +507,13 @@ static int ena_close(struct rte_eth_dev *dev)
        struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
        struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
        struct ena_adapter *adapter = dev->data->dev_private;
+       int ret = 0;
 
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;
 
        if (adapter->state == ENA_ADAPTER_STATE_RUNNING)
-               ena_stop(dev);
+               ret = ena_stop(dev);
        adapter->state = ENA_ADAPTER_STATE_CLOSED;
 
        ena_rx_queue_release_all(dev);
@@ -530,7 +533,7 @@ static int ena_close(struct rte_eth_dev *dev)
         */
        dev->data->mac_addrs = NULL;
 
-       return 0;
+       return ret;
 }
 
 static int
@@ -1100,7 +1103,7 @@ err_start_tx:
        return rc;
 }
 
-static void ena_stop(struct rte_eth_dev *dev)
+static int ena_stop(struct rte_eth_dev *dev)
 {
        struct ena_adapter *adapter = dev->data->dev_private;
        struct ena_com_dev *ena_dev = &adapter->ena_dev;
@@ -1119,6 +1122,8 @@ static void ena_stop(struct rte_eth_dev *dev)
        ++adapter->dev_stats.dev_stop;
        adapter->state = ENA_ADAPTER_STATE_STOPPED;
        dev->data->dev_started = 0;
+
+       return 0;
 }
 
 static int ena_create_io_queue(struct ena_ring *ring)
@@ -1776,6 +1781,8 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;
 
+       eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
+
        memset(adapter, 0, sizeof(struct ena_adapter));
        ena_dev = &adapter->ena_dev;
 
@@ -2719,7 +2726,7 @@ static int ena_xstats_get(struct rte_eth_dev *dev,
                return 0;
 
        for (stat = 0; stat < ENA_STATS_ARRAY_GLOBAL; stat++, count++) {
-               stat_offset = ena_stats_rx_strings[stat].stat_offset;
+               stat_offset = ena_stats_global_strings[stat].stat_offset;
                stats_begin = &adapter->dev_stats;
 
                xstats[count].id = count;