ixgbe: fix access to last byte of EEPROM
[dpdk.git] / drivers / net / ixgbe / ixgbe_ethdev.c
index 74239a4..d8d4173 100644 (file)
@@ -2039,19 +2039,25 @@ ixgbe_read_stats_registers(struct ixgbe_hw *hw, struct ixgbe_hw_stats
                hw_stats->mpc[i] += mp;
                /* Running comprehensive total for stats display */
                *total_missed_rx += hw_stats->mpc[i];
-               if (hw->mac.type == ixgbe_mac_82598EB)
+               if (hw->mac.type == ixgbe_mac_82598EB) {
                        hw_stats->rnbc[i] +=
                            IXGBE_READ_REG(hw, IXGBE_RNBC(i));
+                       hw_stats->pxonrxc[i] +=
+                               IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
+                       hw_stats->pxoffrxc[i] +=
+                               IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i));
+               } else {
+                       hw_stats->pxonrxc[i] +=
+                               IXGBE_READ_REG(hw, IXGBE_PXONRXCNT(i));
+                       hw_stats->pxoffrxc[i] +=
+                               IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i));
+                       hw_stats->pxon2offc[i] +=
+                               IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i));
+               }
                hw_stats->pxontxc[i] +=
                    IXGBE_READ_REG(hw, IXGBE_PXONTXC(i));
-               hw_stats->pxonrxc[i] +=
-                   IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
                hw_stats->pxofftxc[i] +=
                    IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i));
-               hw_stats->pxoffrxc[i] +=
-                   IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i));
-               hw_stats->pxon2offc[i] +=
-                   IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i));
        }
        for (i = 0; i < IXGBE_QUEUE_STAT_COUNTERS; i++) {
                hw_stats->qprc[i] += IXGBE_READ_REG(hw, IXGBE_QPRC(i));
@@ -2196,6 +2202,7 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 
        /* Rx Errors */
        stats->ierrors  = hw_stats->crcerrs +
+                         hw_stats->mspdc +
                          hw_stats->rlec +
                          hw_stats->ruc +
                          hw_stats->roc +
@@ -2206,7 +2213,6 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
                          hw_stats->mlfc +
                          hw_stats->mrfc +
                          hw_stats->rfc +
-                         hw_stats->rjc +
                          hw_stats->fccrc +
                          hw_stats->fclast;
 
@@ -2426,7 +2432,8 @@ ixgbevf_dev_info_get(struct rte_eth_dev *dev,
                                DEV_TX_OFFLOAD_IPV4_CKSUM  |
                                DEV_TX_OFFLOAD_UDP_CKSUM   |
                                DEV_TX_OFFLOAD_TCP_CKSUM   |
-                               DEV_TX_OFFLOAD_SCTP_CKSUM;
+                               DEV_TX_OFFLOAD_SCTP_CKSUM  |
+                               DEV_TX_OFFLOAD_TCP_TSO;
 
        dev_info->default_rxconf = (struct rte_eth_rxconf) {
                .rx_thresh = {
@@ -5444,8 +5451,8 @@ ixgbe_get_eeprom(struct rte_eth_dev *dev,
 
        first = in_eeprom->offset >> 1;
        length = in_eeprom->length >> 1;
-       if ((first >= hw->eeprom.word_size) ||
-           ((first + length) >= hw->eeprom.word_size))
+       if ((first > hw->eeprom.word_size) ||
+           ((first + length) > hw->eeprom.word_size))
                return -EINVAL;
 
        in_eeprom->magic = hw->vendor_id | (hw->device_id << 16);
@@ -5464,8 +5471,8 @@ ixgbe_set_eeprom(struct rte_eth_dev *dev,
 
        first = in_eeprom->offset >> 1;
        length = in_eeprom->length >> 1;
-       if ((first >= hw->eeprom.word_size) ||
-           ((first + length) >= hw->eeprom.word_size))
+       if ((first > hw->eeprom.word_size) ||
+           ((first + length) > hw->eeprom.word_size))
                return -EINVAL;
 
        in_eeprom->magic = hw->vendor_id | (hw->device_id << 16);