1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _MLX4_STATS_ 3 #define _MLX4_STATS_ 4 5 #define NUM_PRIORITIES 9 6 #define NUM_PRIORITY_STATS 2 7 8 struct mlx4_en_pkt_stats { 9 unsigned long rx_multicast_packets; 10 unsigned long rx_broadcast_packets; 11 unsigned long rx_jabbers; 12 unsigned long rx_in_range_length_error; 13 unsigned long rx_out_range_length_error; 14 unsigned long tx_multicast_packets; 15 unsigned long tx_broadcast_packets; 16 unsigned long rx_prio[NUM_PRIORITIES][NUM_PRIORITY_STATS]; 17 unsigned long tx_prio[NUM_PRIORITIES][NUM_PRIORITY_STATS]; 18 #define NUM_PKT_STATS 43 19 }; 20 21 struct mlx4_en_counter_stats { 22 unsigned long rx_packets; 23 unsigned long rx_bytes; 24 unsigned long tx_packets; 25 unsigned long tx_bytes; 26 #define NUM_PF_STATS 4 27 }; 28 29 struct mlx4_en_port_stats { 30 unsigned long tso_packets; 31 unsigned long xmit_more; 32 unsigned long queue_stopped; 33 unsigned long wake_queue; 34 unsigned long tx_timeout; 35 unsigned long rx_alloc_pages; 36 unsigned long rx_chksum_good; 37 unsigned long rx_chksum_none; 38 unsigned long rx_chksum_complete; 39 unsigned long tx_chksum_offload; 40 #define NUM_PORT_STATS 10 41 }; 42 43 struct mlx4_en_xdp_stats { 44 unsigned long rx_xdp_drop; 45 unsigned long rx_xdp_redirect; 46 unsigned long rx_xdp_redirect_fail; 47 unsigned long rx_xdp_tx; 48 unsigned long rx_xdp_tx_full; 49 #define NUM_XDP_STATS 5 50 }; 51 52 struct mlx4_en_phy_stats { 53 unsigned long rx_packets_phy; 54 unsigned long rx_bytes_phy; 55 unsigned long tx_packets_phy; 56 unsigned long tx_bytes_phy; 57 #define NUM_PHY_STATS 4 58 }; 59 60 #define NUM_MAIN_STATS 21 61 62 #define MLX4_NUM_PRIORITIES 8 63 64 struct mlx4_en_flow_stats_rx { 65 u64 rx_pause; 66 u64 rx_pause_duration; 67 u64 rx_pause_transition; 68 #define NUM_FLOW_STATS_RX 3 69 #define NUM_FLOW_PRIORITY_STATS_RX (NUM_FLOW_STATS_RX * \ 70 MLX4_NUM_PRIORITIES) 71 }; 72 73 #define FLOW_PRIORITY_STATS_IDX_RX_FRAMES (NUM_MAIN_STATS + \ 74 NUM_PORT_STATS + \ 75 NUM_PF_STATS + \ 76 NUM_FLOW_PRIORITY_STATS_RX) 77 78 struct mlx4_en_flow_stats_tx { 79 u64 tx_pause; 80 u64 tx_pause_duration; 81 u64 tx_pause_transition; 82 #define NUM_FLOW_STATS_TX 3 83 #define NUM_FLOW_PRIORITY_STATS_TX (NUM_FLOW_STATS_TX * \ 84 MLX4_NUM_PRIORITIES) 85 }; 86 87 #define FLOW_PRIORITY_STATS_IDX_TX_FRAMES (NUM_MAIN_STATS + \ 88 NUM_PORT_STATS + \ 89 NUM_PF_STATS + \ 90 NUM_FLOW_PRIORITY_STATS_RX + \ 91 NUM_FLOW_STATS_RX + \ 92 NUM_FLOW_PRIORITY_STATS_TX) 93 94 #define NUM_FLOW_STATS (NUM_FLOW_STATS_RX + NUM_FLOW_STATS_TX + \ 95 NUM_FLOW_PRIORITY_STATS_TX + \ 96 NUM_FLOW_PRIORITY_STATS_RX) 97 98 struct mlx4_en_stat_out_flow_control_mbox { 99 /* Total number of PAUSE frames received from the far-end port */ 100 __be64 rx_pause; 101 /* Total number of microseconds that far-end port requested to pause 102 * transmission of packets 103 */ 104 __be64 rx_pause_duration; 105 /* Number of received transmission from XOFF state to XON state */ 106 __be64 rx_pause_transition; 107 /* Total number of PAUSE frames sent from the far-end port */ 108 __be64 tx_pause; 109 /* Total time in microseconds that transmission of packets has been 110 * paused 111 */ 112 __be64 tx_pause_duration; 113 /* Number of transmitter transitions from XOFF state to XON state */ 114 __be64 tx_pause_transition; 115 /* Reserved */ 116 __be64 reserved[2]; 117 }; 118 119 enum { 120 MLX4_DUMP_ETH_STATS_FLOW_CONTROL = 1 << 12 121 }; 122 123 #define NUM_ALL_STATS (NUM_MAIN_STATS + NUM_PORT_STATS + NUM_PKT_STATS + \ 124 NUM_FLOW_STATS + NUM_PF_STATS + \ 125 NUM_XDP_STATS + NUM_PHY_STATS) 126 127 #define MLX4_FIND_NETDEV_STAT(n) (offsetof(struct net_device_stats, n) / \ 128 sizeof(((struct net_device_stats *)0)->n)) 129 130 #endif 131