Commit de832a55 authored by Eilon Greenstein's avatar Eilon Greenstein Committed by David S. Miller

bnx2x: Per queue statistics

Re-ordering the statistics to enhance readability and adding per queue
statistics (available via ethtool -S)
Signed-off-by: default avatarEilon Greenstein <eilong@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d3d4f495
...@@ -189,6 +189,43 @@ struct sw_rx_page { ...@@ -189,6 +189,43 @@ struct sw_rx_page {
#define NEXT_SGE_MASK_ELEM(el) (((el) + 1) & RX_SGE_MASK_LEN_MASK) #define NEXT_SGE_MASK_ELEM(el) (((el) + 1) & RX_SGE_MASK_LEN_MASK)
struct bnx2x_eth_q_stats {
u32 total_bytes_received_hi;
u32 total_bytes_received_lo;
u32 total_bytes_transmitted_hi;
u32 total_bytes_transmitted_lo;
u32 total_unicast_packets_received_hi;
u32 total_unicast_packets_received_lo;
u32 total_multicast_packets_received_hi;
u32 total_multicast_packets_received_lo;
u32 total_broadcast_packets_received_hi;
u32 total_broadcast_packets_received_lo;
u32 total_unicast_packets_transmitted_hi;
u32 total_unicast_packets_transmitted_lo;
u32 total_multicast_packets_transmitted_hi;
u32 total_multicast_packets_transmitted_lo;
u32 total_broadcast_packets_transmitted_hi;
u32 total_broadcast_packets_transmitted_lo;
u32 valid_bytes_received_hi;
u32 valid_bytes_received_lo;
u32 error_bytes_received_hi;
u32 error_bytes_received_lo;
u32 etherstatsoverrsizepkts_hi;
u32 etherstatsoverrsizepkts_lo;
u32 no_buff_discard_hi;
u32 no_buff_discard_lo;
u32 driver_xoff;
u32 rx_err_discard_pkt;
u32 rx_skb_alloc_failed;
u32 hw_csum_err;
};
#define BNX2X_NUM_Q_STATS 11
#define Q_STATS_OFFSET32(stat_name) \
(offsetof(struct bnx2x_eth_q_stats, stat_name) / 4)
struct bnx2x_fastpath { struct bnx2x_fastpath {
struct napi_struct napi; struct napi_struct napi;
...@@ -268,6 +305,11 @@ struct bnx2x_fastpath { ...@@ -268,6 +305,11 @@ struct bnx2x_fastpath {
u64 tpa_queue_used; u64 tpa_queue_used;
#endif #endif
struct tstorm_per_client_stats old_tclient;
struct ustorm_per_client_stats old_uclient;
struct xstorm_per_client_stats old_xclient;
struct bnx2x_eth_q_stats eth_q_stats;
char name[IFNAMSIZ]; char name[IFNAMSIZ];
struct bnx2x *bp; /* parent */ struct bnx2x *bp; /* parent */
}; };
...@@ -576,6 +618,10 @@ struct bnx2x_eth_stats { ...@@ -576,6 +618,10 @@ struct bnx2x_eth_stats {
u32 error_bytes_received_hi; u32 error_bytes_received_hi;
u32 error_bytes_received_lo; u32 error_bytes_received_lo;
u32 etherstatsoverrsizepkts_hi;
u32 etherstatsoverrsizepkts_lo;
u32 no_buff_discard_hi;
u32 no_buff_discard_lo;
u32 rx_stat_ifhcinbadoctets_hi; u32 rx_stat_ifhcinbadoctets_hi;
u32 rx_stat_ifhcinbadoctets_lo; u32 rx_stat_ifhcinbadoctets_lo;
...@@ -654,19 +700,20 @@ struct bnx2x_eth_stats { ...@@ -654,19 +700,20 @@ struct bnx2x_eth_stats {
u32 tx_stat_bmac_ufl_hi; u32 tx_stat_bmac_ufl_hi;
u32 tx_stat_bmac_ufl_lo; u32 tx_stat_bmac_ufl_lo;
u32 brb_drop_hi; u32 pause_frames_received_hi;
u32 brb_drop_lo; u32 pause_frames_received_lo;
u32 brb_truncate_hi; u32 pause_frames_sent_hi;
u32 brb_truncate_lo; u32 pause_frames_sent_lo;
u32 jabber_packets_received;
u32 etherstatspkts1024octetsto1522octets_hi; u32 etherstatspkts1024octetsto1522octets_hi;
u32 etherstatspkts1024octetsto1522octets_lo; u32 etherstatspkts1024octetsto1522octets_lo;
u32 etherstatspktsover1522octets_hi; u32 etherstatspktsover1522octets_hi;
u32 etherstatspktsover1522octets_lo; u32 etherstatspktsover1522octets_lo;
u32 no_buff_discard; u32 brb_drop_hi;
u32 brb_drop_lo;
u32 brb_truncate_hi;
u32 brb_truncate_lo;
u32 mac_filter_discard; u32 mac_filter_discard;
u32 xxoverflow_discard; u32 xxoverflow_discard;
...@@ -677,8 +724,11 @@ struct bnx2x_eth_stats { ...@@ -677,8 +724,11 @@ struct bnx2x_eth_stats {
u32 rx_err_discard_pkt; u32 rx_err_discard_pkt;
u32 rx_skb_alloc_failed; u32 rx_skb_alloc_failed;
u32 hw_csum_err; u32 hw_csum_err;
u32 nig_timer_max;
}; };
#define BNX2X_NUM_STATS 41
#define STATS_OFFSET32(stat_name) \ #define STATS_OFFSET32(stat_name) \
(offsetof(struct bnx2x_eth_stats, stat_name) / 4) (offsetof(struct bnx2x_eth_stats, stat_name) / 4)
...@@ -906,8 +956,6 @@ struct bnx2x { ...@@ -906,8 +956,6 @@ struct bnx2x {
int executer_idx; int executer_idx;
u16 stats_counter; u16 stats_counter;
struct tstorm_per_client_stats old_tclient;
struct xstorm_per_client_stats old_xclient;
struct bnx2x_eth_stats eth_stats; struct bnx2x_eth_stats eth_stats;
struct z_stream_s *strm; struct z_stream_s *strm;
...@@ -1008,7 +1056,6 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, ...@@ -1008,7 +1056,6 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms,
#define PCICFG_LINK_SPEED_SHIFT 16 #define PCICFG_LINK_SPEED_SHIFT 16
#define BNX2X_NUM_STATS 42
#define BNX2X_NUM_TESTS 7 #define BNX2X_NUM_TESTS 7
#define BNX2X_MAC_LOOPBACK 0 #define BNX2X_MAC_LOOPBACK 0
......
...@@ -107,6 +107,9 @@ ...@@ -107,6 +107,9 @@
#define USTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \ #define USTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \
(IS_E1H_OFFSET ? (0x9508 + ((function>>1) * 0x40) + \ (IS_E1H_OFFSET ? (0x9508 + ((function>>1) * 0x40) + \
((function&1) * 0x100)) : (0x1908 + (function * 0x40))) ((function&1) * 0x100)) : (0x1908 + (function * 0x40)))
#define USTORM_ETH_STATS_QUERY_ADDR_OFFSET(function) \
(IS_E1H_OFFSET ? (0x2a50 + (function * 0x8)) : (0x1d98 + \
(function * 0x8)))
#define USTORM_FUNCTION_MODE_OFFSET \ #define USTORM_FUNCTION_MODE_OFFSET \
(IS_E1H_OFFSET ? 0x2448 : 0xffffffff) (IS_E1H_OFFSET ? 0x2448 : 0xffffffff)
#define USTORM_HC_BTR_OFFSET(port) \ #define USTORM_HC_BTR_OFFSET(port) \
...@@ -117,6 +120,9 @@ ...@@ -117,6 +120,9 @@
#define USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(function) \ #define USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(function) \
(IS_E1H_OFFSET ? (0x2408 + (function * 0x8)) : (0x5308 + \ (IS_E1H_OFFSET ? (0x2408 + (function * 0x8)) : (0x5308 + \
(function * 0x8))) (function * 0x8)))
#define USTORM_PER_COUNTER_ID_STATS_OFFSET(port, stats_counter_id) \
(IS_E1H_OFFSET ? (0x2450 + (port * 0x2d0) + (stats_counter_id * \
0x28)) : (0x4740 + (port * 0x2d0) + (stats_counter_id * 0x28)))
#define USTORM_RX_PRODS_OFFSET(port, client_id) \ #define USTORM_RX_PRODS_OFFSET(port, client_id) \
(IS_E1H_OFFSET ? (0x8000 + (port * 0x4b0) + (client_id * 0x30)) \ (IS_E1H_OFFSET ? (0x8000 + (port * 0x4b0) + (client_id * 0x30)) \
: (0x5318 + (port * 0x260) + (client_id * 0x20))) : (0x5318 + (port * 0x260) + (client_id * 0x20)))
...@@ -134,6 +140,9 @@ ...@@ -134,6 +140,9 @@
#define USTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, cpu_id) \ #define USTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, cpu_id) \
(IS_E1H_OFFSET ? (0x9008 + (port * 0x280) + (cpu_id * 0x28)) : \ (IS_E1H_OFFSET ? (0x9008 + (port * 0x280) + (cpu_id * 0x28)) : \
(0x1408 + (port * 0x280) + (cpu_id * 0x28))) (0x1408 + (port * 0x280) + (cpu_id * 0x28)))
#define USTORM_STATS_FLAGS_OFFSET(function) \
(IS_E1H_OFFSET ? (0x29f0 + (function * 0x8)) : (0x1d80 + \
(function * 0x8)))
#define XSTORM_ASSERT_LIST_INDEX_OFFSET \ #define XSTORM_ASSERT_LIST_INDEX_OFFSET \
(IS_E1H_OFFSET ? 0x9000 : 0x1000) (IS_E1H_OFFSET ? 0x9000 : 0x1000)
#define XSTORM_ASSERT_LIST_OFFSET(idx) \ #define XSTORM_ASSERT_LIST_OFFSET(idx) \
......
...@@ -641,7 +641,8 @@ struct drv_port_mb { ...@@ -641,7 +641,8 @@ struct drv_port_mb {
u32 port_stx; u32 port_stx;
u32 reserved[2]; u32 stat_nig_timer;
}; };
...@@ -1429,8 +1430,10 @@ struct ustorm_eth_st_context_config { ...@@ -1429,8 +1430,10 @@ struct ustorm_eth_st_context_config {
#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA_SHIFT 2 #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA_SHIFT 2
#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING (0x1<<3) #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING (0x1<<3)
#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING_SHIFT 3 #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING_SHIFT 3
#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0 (0xF<<4) #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS (0x1<<4)
#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0_SHIFT 4 #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS_SHIFT 4
#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0 (0x7<<5)
#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0_SHIFT 5
u8 status_block_id; u8 status_block_id;
u8 clientId; u8 clientId;
u8 sb_index_numbers; u8 sb_index_numbers;
...@@ -1455,8 +1458,10 @@ struct ustorm_eth_st_context_config { ...@@ -1455,8 +1458,10 @@ struct ustorm_eth_st_context_config {
#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA_SHIFT 2 #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA_SHIFT 2
#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING (0x1<<3) #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING (0x1<<3)
#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING_SHIFT 3 #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING_SHIFT 3
#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0 (0xF<<4) #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS (0x1<<4)
#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0_SHIFT 4 #define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS_SHIFT 4
#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0 (0x7<<5)
#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0_SHIFT 5
#endif #endif
#if defined(__BIG_ENDIAN) #if defined(__BIG_ENDIAN)
u16 bd_buff_size; u16 bd_buff_size;
...@@ -2763,12 +2768,34 @@ struct tstorm_common_stats { ...@@ -2763,12 +2768,34 @@ struct tstorm_common_stats {
struct tstorm_per_client_stats client_statistics[MAX_T_STAT_COUNTER_ID]; struct tstorm_per_client_stats client_statistics[MAX_T_STAT_COUNTER_ID];
}; };
/*
* Protocol-common statistics collected by the Ustorm (per client)
*/
struct ustorm_per_client_stats {
struct regpair ucast_no_buff_bytes;
struct regpair mcast_no_buff_bytes;
struct regpair bcast_no_buff_bytes;
__le32 ucast_no_buff_pkts;
__le32 mcast_no_buff_pkts;
__le32 bcast_no_buff_pkts;
__le16 stats_counter;
__le16 reserved0;
};
/*
* Protocol-common statistics collected by the Ustorm
*/
struct ustorm_common_stats {
struct ustorm_per_client_stats client_statistics[MAX_U_STAT_COUNTER_ID];
};
/* /*
* Eth statistics query structure for the eth_stats_query ramrod * Eth statistics query structure for the eth_stats_query ramrod
*/ */
struct eth_stats_query { struct eth_stats_query {
struct xstorm_common_stats xstorm_common; struct xstorm_common_stats xstorm_common;
struct tstorm_common_stats tstorm_common; struct tstorm_common_stats tstorm_common;
struct ustorm_common_stats ustorm_common;
}; };
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment