u64 rx_1024_to_1518_pkts;
        u64 rx_1519_to_max_pkts;
        u64 rx_len_err_pkts;
+       /*
+        * These stats come from offset 500h to 5C8h
+        * in the XGMAC register.
+        */
+       u64 tx_cbfc_pause_frames0;
+       u64 tx_cbfc_pause_frames1;
+       u64 tx_cbfc_pause_frames2;
+       u64 tx_cbfc_pause_frames3;
+       u64 tx_cbfc_pause_frames4;
+       u64 tx_cbfc_pause_frames5;
+       u64 tx_cbfc_pause_frames6;
+       u64 tx_cbfc_pause_frames7;
+       u64 rx_cbfc_pause_frames0;
+       u64 rx_cbfc_pause_frames1;
+       u64 rx_cbfc_pause_frames2;
+       u64 rx_cbfc_pause_frames3;
+       u64 rx_cbfc_pause_frames4;
+       u64 rx_cbfc_pause_frames5;
+       u64 rx_cbfc_pause_frames6;
+       u64 rx_cbfc_pause_frames7;
+       u64 rx_nic_fifo_drop;
 };
 
 /*
 
                iter++;
        }
 
+       /*
+        * Get Per-priority TX pause frame counter statistics.
+        */
+       for (i = 0x500; i < 0x540; i += 8) {
+               if (ql_read_xgmac_reg64(qdev, i, &data)) {
+                       QPRINTK(qdev, DRV, ERR,
+                               "Error reading status register 0x%.04x.\n", i);
+                       goto end;
+               } else
+                       *iter = data;
+               iter++;
+       }
+
+       /*
+        * Get Per-priority RX pause frame counter statistics.
+        */
+       for (i = 0x568; i < 0x5a8; i += 8) {
+               if (ql_read_xgmac_reg64(qdev, i, &data)) {
+                       QPRINTK(qdev, DRV, ERR,
+                               "Error reading status register 0x%.04x.\n", i);
+                       goto end;
+               } else
+                       *iter = data;
+               iter++;
+       }
+
+       /*
+        * Get RX NIC FIFO DROP statistics.
+        */
+       if (ql_read_xgmac_reg64(qdev, 0x5b8, &data)) {
+               QPRINTK(qdev, DRV, ERR,
+                       "Error reading status register 0x%.04x.\n", i);
+               goto end;
+       } else
+               *iter = data;
 end:
        ql_sem_unlock(qdev, qdev->xg_sem_mask);
 quit:
        {"rx_1024_to_1518_pkts"},
        {"rx_1519_to_max_pkts"},
        {"rx_len_err_pkts"},
+       {"tx_cbfc_pause_frames0"},
+       {"tx_cbfc_pause_frames1"},
+       {"tx_cbfc_pause_frames2"},
+       {"tx_cbfc_pause_frames3"},
+       {"tx_cbfc_pause_frames4"},
+       {"tx_cbfc_pause_frames5"},
+       {"tx_cbfc_pause_frames6"},
+       {"tx_cbfc_pause_frames7"},
+       {"rx_cbfc_pause_frames0"},
+       {"rx_cbfc_pause_frames1"},
+       {"rx_cbfc_pause_frames2"},
+       {"rx_cbfc_pause_frames3"},
+       {"rx_cbfc_pause_frames4"},
+       {"rx_cbfc_pause_frames5"},
+       {"rx_cbfc_pause_frames6"},
+       {"rx_cbfc_pause_frames7"},
+       {"rx_nic_fifo_drop"},
 };
 
 static void ql_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
        *data++ = s->rx_1024_to_1518_pkts;
        *data++ = s->rx_1519_to_max_pkts;
        *data++ = s->rx_len_err_pkts;
+       *data++ = s->tx_cbfc_pause_frames0;
+       *data++ = s->tx_cbfc_pause_frames1;
+       *data++ = s->tx_cbfc_pause_frames2;
+       *data++ = s->tx_cbfc_pause_frames3;
+       *data++ = s->tx_cbfc_pause_frames4;
+       *data++ = s->tx_cbfc_pause_frames5;
+       *data++ = s->tx_cbfc_pause_frames6;
+       *data++ = s->tx_cbfc_pause_frames7;
+       *data++ = s->rx_cbfc_pause_frames0;
+       *data++ = s->rx_cbfc_pause_frames1;
+       *data++ = s->rx_cbfc_pause_frames2;
+       *data++ = s->rx_cbfc_pause_frames3;
+       *data++ = s->rx_cbfc_pause_frames4;
+       *data++ = s->rx_cbfc_pause_frames5;
+       *data++ = s->rx_cbfc_pause_frames6;
+       *data++ = s->rx_cbfc_pause_frames7;
+       *data++ = s->rx_nic_fifo_drop;
 }
 
 static int ql_get_settings(struct net_device *ndev,