i40e/i40evf: Add EEE LPI stats
authorAnjali Singhai Jain <anjali.singhai@intel.com>
Thu, 6 Mar 2014 08:59:50 +0000 (08:59 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 21 Mar 2014 08:14:02 +0000 (01:14 -0700)
Add 4 new stats to keep track of EEE LPI (Low Power Idle) state.

Change-ID: Id6316619bb0559789770288b694a54d17f8fac5c
Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>
Acked-by: Shannon Nelson <shannon.nelson@intel.com>
Signed-off-by: Kevin Scott <kevin.c.scott@intel.com>
Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com>
Tested-by: Kavindya Deegala <kavindya.s.deegala@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_ethtool.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/i40e/i40e_type.h
drivers/net/ethernet/intel/i40evf/i40e_type.h

index 6049e63a826d2e67100f0c3e325945ec88873de3..28da4125c8c925e5a10fc5537e52e9969e1b7ad6 100644 (file)
@@ -114,6 +114,11 @@ static struct i40e_stats i40e_gstrings_stats[] = {
        I40E_PF_STAT("VF_admin_queue_requests", vf_aq_requests),
        I40E_PF_STAT("tx_hwtstamp_timeouts", tx_hwtstamp_timeouts),
        I40E_PF_STAT("rx_hwtstamp_cleared", rx_hwtstamp_cleared),
+       /* LPI stats */
+       I40E_PF_STAT("tx_lpi_status", stats.tx_lpi_status),
+       I40E_PF_STAT("rx_lpi_status", stats.rx_lpi_status),
+       I40E_PF_STAT("tx_lpi_count", stats.tx_lpi_count),
+       I40E_PF_STAT("rx_lpi_count", stats.rx_lpi_count),
 };
 
 #define I40E_QUEUE_STATS_LEN(n) \
index 1133542145176f169739daa74614de03ae0f1378..a1f33693be058035847480ced9dfd214d60ff1e8 100644 (file)
@@ -740,6 +740,7 @@ void i40e_update_stats(struct i40e_vsi *vsi)
        u32 rx_page, rx_buf;
        u64 rx_p, rx_b;
        u64 tx_p, tx_b;
+       u32 val;
        int i;
        u16 q;
 
@@ -972,6 +973,20 @@ void i40e_update_stats(struct i40e_vsi *vsi)
                i40e_stat_update32(hw, I40E_GLPRT_RJC(hw->port),
                                   pf->stat_offsets_loaded,
                                   &osd->rx_jabber, &nsd->rx_jabber);
+
+               val = rd32(hw, I40E_PRTPM_EEE_STAT);
+               nsd->tx_lpi_status =
+                              (val & I40E_PRTPM_EEE_STAT_TX_LPI_STATUS_MASK) >>
+                               I40E_PRTPM_EEE_STAT_TX_LPI_STATUS_SHIFT;
+               nsd->rx_lpi_status =
+                              (val & I40E_PRTPM_EEE_STAT_RX_LPI_STATUS_MASK) >>
+                               I40E_PRTPM_EEE_STAT_RX_LPI_STATUS_SHIFT;
+               i40e_stat_update32(hw, I40E_PRTPM_TLPIC,
+                                  pf->stat_offsets_loaded,
+                                  &osd->tx_lpi_count, &nsd->tx_lpi_count);
+               i40e_stat_update32(hw, I40E_PRTPM_RLPIC,
+                                  pf->stat_offsets_loaded,
+                                  &osd->rx_lpi_count, &nsd->rx_lpi_count);
        }
 
        pf->stat_offsets_loaded = true;
index 5c902f448b1dcc3790a089298c9107d88d3ace92..d2f0b95fd0d7ee9aeb4b2e7f8dc33aa397b24af1 100644 (file)
@@ -1014,6 +1014,11 @@ struct i40e_hw_port_stats {
        u64 tx_size_big;                /* ptc9522 */
        u64 mac_short_packet_dropped;   /* mspdc */
        u64 checksum_error;             /* xec */
+       /* EEE LPI */
+       bool tx_lpi_status;
+       bool rx_lpi_status;
+       u64 tx_lpi_count;               /* etlpic */
+       u64 rx_lpi_count;               /* erlpic */
 };
 
 /* Checksum and Shadow RAM pointers */
index 7189d6f08ddd2fd7374e747abb5f6cc319ad0ec1..efe73ad6fdb99992c6c297913e74182530211d84 100644 (file)
@@ -1020,6 +1020,11 @@ struct i40e_hw_port_stats {
        u64 tx_size_big;                /* ptc9522 */
        u64 mac_short_packet_dropped;   /* mspdc */
        u64 checksum_error;             /* xec */
+       /* EEE LPI */
+       bool tx_lpi_status;
+       bool rx_lpi_status;
+       u64 tx_lpi_count;               /* etlpic */
+       u64 rx_lpi_count;               /* erlpic */
 };
 
 /* Checksum and Shadow RAM pointers */