net/qede/base: fix for adapter specific stats

Handle different MAC statistic fields between two chip variants by
reading the MAC counters from the adapter suitable statistics bins.

Fixes: ec94dbc573 ("qede: add base driver")
Cc: stable@dpdk.org

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
This commit is contained in:
Rasesh Mody 2017-07-24 03:19:04 -07:00 committed by Ferruh Yigit
parent a68a9adf32
commit 9c1aa3e1c2
5 changed files with 400 additions and 205 deletions

View File

@ -249,8 +249,11 @@ qede_get_mcp_proto_stats(struct ecore_dev *edev,
if (type == ECORE_MCP_LAN_STATS) {
ecore_get_vport_stats(edev, &lan_stats);
stats->lan_stats.ucast_rx_pkts = lan_stats.rx_ucast_pkts;
stats->lan_stats.ucast_tx_pkts = lan_stats.tx_ucast_pkts;
/* @DPDK */
stats->lan_stats.ucast_rx_pkts = lan_stats.common.rx_ucast_pkts;
stats->lan_stats.ucast_tx_pkts = lan_stats.common.tx_ucast_pkts;
stats->lan_stats.fcs_err = -1;
} else {
DP_INFO(edev, "Statistics request type %d not supported\n",

View File

@ -241,7 +241,7 @@ void ecore_ptt_release(struct ecore_hwfn *p_hwfn,
struct ecore_ptt *p_ptt);
#ifndef __EXTRACT__LINUX__
struct ecore_eth_stats {
struct ecore_eth_stats_common {
u64 no_buff_discards;
u64 packet_too_big_discard;
u64 ttl0_discard;
@ -273,11 +273,6 @@ struct ecore_eth_stats {
u64 rx_256_to_511_byte_packets;
u64 rx_512_to_1023_byte_packets;
u64 rx_1024_to_1518_byte_packets;
u64 rx_1519_to_1522_byte_packets;
u64 rx_1519_to_2047_byte_packets;
u64 rx_2048_to_4095_byte_packets;
u64 rx_4096_to_9216_byte_packets;
u64 rx_9217_to_16383_byte_packets;
u64 rx_crc_errors;
u64 rx_mac_crtl_frames;
u64 rx_pause_frames;
@ -294,14 +289,8 @@ struct ecore_eth_stats {
u64 tx_256_to_511_byte_packets;
u64 tx_512_to_1023_byte_packets;
u64 tx_1024_to_1518_byte_packets;
u64 tx_1519_to_2047_byte_packets;
u64 tx_2048_to_4095_byte_packets;
u64 tx_4096_to_9216_byte_packets;
u64 tx_9217_to_16383_byte_packets;
u64 tx_pause_frames;
u64 tx_pfc_frames;
u64 tx_lpi_entry_count;
u64 tx_total_collisions;
u64 brb_truncates;
u64 brb_discards;
u64 rx_mac_bytes;
@ -315,6 +304,33 @@ struct ecore_eth_stats {
u64 tx_mac_bc_packets;
u64 tx_mac_ctrl_frames;
};
struct ecore_eth_stats_bb {
u64 rx_1519_to_1522_byte_packets;
u64 rx_1519_to_2047_byte_packets;
u64 rx_2048_to_4095_byte_packets;
u64 rx_4096_to_9216_byte_packets;
u64 rx_9217_to_16383_byte_packets;
u64 tx_1519_to_2047_byte_packets;
u64 tx_2048_to_4095_byte_packets;
u64 tx_4096_to_9216_byte_packets;
u64 tx_9217_to_16383_byte_packets;
u64 tx_lpi_entry_count;
u64 tx_total_collisions;
};
struct ecore_eth_stats_ah {
u64 rx_1519_to_max_byte_packets;
u64 tx_1519_to_max_byte_packets;
};
struct ecore_eth_stats {
struct ecore_eth_stats_common common;
union {
struct ecore_eth_stats_bb bb;
struct ecore_eth_stats_ah ah;
};
};
#endif
enum ecore_dmae_address_type_t {

View File

@ -1714,13 +1714,20 @@ static void __ecore_get_vport_pstats(struct ecore_hwfn *p_hwfn,
OSAL_MEMSET(&pstats, 0, sizeof(pstats));
ecore_memcpy_from(p_hwfn, p_ptt, &pstats, pstats_addr, pstats_len);
p_stats->tx_ucast_bytes += HILO_64_REGPAIR(pstats.sent_ucast_bytes);
p_stats->tx_mcast_bytes += HILO_64_REGPAIR(pstats.sent_mcast_bytes);
p_stats->tx_bcast_bytes += HILO_64_REGPAIR(pstats.sent_bcast_bytes);
p_stats->tx_ucast_pkts += HILO_64_REGPAIR(pstats.sent_ucast_pkts);
p_stats->tx_mcast_pkts += HILO_64_REGPAIR(pstats.sent_mcast_pkts);
p_stats->tx_bcast_pkts += HILO_64_REGPAIR(pstats.sent_bcast_pkts);
p_stats->tx_err_drop_pkts += HILO_64_REGPAIR(pstats.error_drop_pkts);
p_stats->common.tx_ucast_bytes +=
HILO_64_REGPAIR(pstats.sent_ucast_bytes);
p_stats->common.tx_mcast_bytes +=
HILO_64_REGPAIR(pstats.sent_mcast_bytes);
p_stats->common.tx_bcast_bytes +=
HILO_64_REGPAIR(pstats.sent_bcast_bytes);
p_stats->common.tx_ucast_pkts +=
HILO_64_REGPAIR(pstats.sent_ucast_pkts);
p_stats->common.tx_mcast_pkts +=
HILO_64_REGPAIR(pstats.sent_mcast_pkts);
p_stats->common.tx_bcast_pkts +=
HILO_64_REGPAIR(pstats.sent_bcast_pkts);
p_stats->common.tx_err_drop_pkts +=
HILO_64_REGPAIR(pstats.error_drop_pkts);
}
static void __ecore_get_vport_tstats(struct ecore_hwfn *p_hwfn,
@ -1746,10 +1753,10 @@ static void __ecore_get_vport_tstats(struct ecore_hwfn *p_hwfn,
OSAL_MEMSET(&tstats, 0, sizeof(tstats));
ecore_memcpy_from(p_hwfn, p_ptt, &tstats, tstats_addr, tstats_len);
p_stats->mftag_filter_discards +=
HILO_64_REGPAIR(tstats.mftag_filter_discard);
p_stats->mac_filter_discards +=
HILO_64_REGPAIR(tstats.eth_mac_filter_discard);
p_stats->common.mftag_filter_discards +=
HILO_64_REGPAIR(tstats.mftag_filter_discard);
p_stats->common.mac_filter_discards +=
HILO_64_REGPAIR(tstats.eth_mac_filter_discard);
}
static void __ecore_get_vport_ustats_addrlen(struct ecore_hwfn *p_hwfn,
@ -1783,12 +1790,18 @@ static void __ecore_get_vport_ustats(struct ecore_hwfn *p_hwfn,
OSAL_MEMSET(&ustats, 0, sizeof(ustats));
ecore_memcpy_from(p_hwfn, p_ptt, &ustats, ustats_addr, ustats_len);
p_stats->rx_ucast_bytes += HILO_64_REGPAIR(ustats.rcv_ucast_bytes);
p_stats->rx_mcast_bytes += HILO_64_REGPAIR(ustats.rcv_mcast_bytes);
p_stats->rx_bcast_bytes += HILO_64_REGPAIR(ustats.rcv_bcast_bytes);
p_stats->rx_ucast_pkts += HILO_64_REGPAIR(ustats.rcv_ucast_pkts);
p_stats->rx_mcast_pkts += HILO_64_REGPAIR(ustats.rcv_mcast_pkts);
p_stats->rx_bcast_pkts += HILO_64_REGPAIR(ustats.rcv_bcast_pkts);
p_stats->common.rx_ucast_bytes +=
HILO_64_REGPAIR(ustats.rcv_ucast_bytes);
p_stats->common.rx_mcast_bytes +=
HILO_64_REGPAIR(ustats.rcv_mcast_bytes);
p_stats->common.rx_bcast_bytes +=
HILO_64_REGPAIR(ustats.rcv_bcast_bytes);
p_stats->common.rx_ucast_pkts +=
HILO_64_REGPAIR(ustats.rcv_ucast_pkts);
p_stats->common.rx_mcast_pkts +=
HILO_64_REGPAIR(ustats.rcv_mcast_pkts);
p_stats->common.rx_bcast_pkts +=
HILO_64_REGPAIR(ustats.rcv_bcast_pkts);
}
static void __ecore_get_vport_mstats_addrlen(struct ecore_hwfn *p_hwfn,
@ -1822,23 +1835,27 @@ static void __ecore_get_vport_mstats(struct ecore_hwfn *p_hwfn,
OSAL_MEMSET(&mstats, 0, sizeof(mstats));
ecore_memcpy_from(p_hwfn, p_ptt, &mstats, mstats_addr, mstats_len);
p_stats->no_buff_discards += HILO_64_REGPAIR(mstats.no_buff_discard);
p_stats->packet_too_big_discard +=
HILO_64_REGPAIR(mstats.packet_too_big_discard);
p_stats->ttl0_discard += HILO_64_REGPAIR(mstats.ttl0_discard);
p_stats->tpa_coalesced_pkts +=
HILO_64_REGPAIR(mstats.tpa_coalesced_pkts);
p_stats->tpa_coalesced_events +=
HILO_64_REGPAIR(mstats.tpa_coalesced_events);
p_stats->tpa_aborts_num += HILO_64_REGPAIR(mstats.tpa_aborts_num);
p_stats->tpa_coalesced_bytes +=
HILO_64_REGPAIR(mstats.tpa_coalesced_bytes);
p_stats->common.no_buff_discards +=
HILO_64_REGPAIR(mstats.no_buff_discard);
p_stats->common.packet_too_big_discard +=
HILO_64_REGPAIR(mstats.packet_too_big_discard);
p_stats->common.ttl0_discard +=
HILO_64_REGPAIR(mstats.ttl0_discard);
p_stats->common.tpa_coalesced_pkts +=
HILO_64_REGPAIR(mstats.tpa_coalesced_pkts);
p_stats->common.tpa_coalesced_events +=
HILO_64_REGPAIR(mstats.tpa_coalesced_events);
p_stats->common.tpa_aborts_num +=
HILO_64_REGPAIR(mstats.tpa_aborts_num);
p_stats->common.tpa_coalesced_bytes +=
HILO_64_REGPAIR(mstats.tpa_coalesced_bytes);
}
static void __ecore_get_vport_port_stats(struct ecore_hwfn *p_hwfn,
struct ecore_ptt *p_ptt,
struct ecore_eth_stats *p_stats)
{
struct ecore_eth_stats_common *p_common = &p_stats->common;
struct port_stats port_stats;
int j;
@ -1849,54 +1866,75 @@ static void __ecore_get_vport_port_stats(struct ecore_hwfn *p_hwfn,
OFFSETOF(struct public_port, stats),
sizeof(port_stats));
p_stats->rx_64_byte_packets += port_stats.eth.r64;
p_stats->rx_65_to_127_byte_packets += port_stats.eth.r127;
p_stats->rx_128_to_255_byte_packets += port_stats.eth.r255;
p_stats->rx_256_to_511_byte_packets += port_stats.eth.r511;
p_stats->rx_512_to_1023_byte_packets += port_stats.eth.r1023;
p_stats->rx_1024_to_1518_byte_packets += port_stats.eth.r1518;
p_stats->rx_1519_to_1522_byte_packets += port_stats.eth.r1522;
p_stats->rx_1519_to_2047_byte_packets += port_stats.eth.r2047;
p_stats->rx_2048_to_4095_byte_packets += port_stats.eth.r4095;
p_stats->rx_4096_to_9216_byte_packets += port_stats.eth.r9216;
p_stats->rx_9217_to_16383_byte_packets += port_stats.eth.r16383;
p_stats->rx_crc_errors += port_stats.eth.rfcs;
p_stats->rx_mac_crtl_frames += port_stats.eth.rxcf;
p_stats->rx_pause_frames += port_stats.eth.rxpf;
p_stats->rx_pfc_frames += port_stats.eth.rxpp;
p_stats->rx_align_errors += port_stats.eth.raln;
p_stats->rx_carrier_errors += port_stats.eth.rfcr;
p_stats->rx_oversize_packets += port_stats.eth.rovr;
p_stats->rx_jabbers += port_stats.eth.rjbr;
p_stats->rx_undersize_packets += port_stats.eth.rund;
p_stats->rx_fragments += port_stats.eth.rfrg;
p_stats->tx_64_byte_packets += port_stats.eth.t64;
p_stats->tx_65_to_127_byte_packets += port_stats.eth.t127;
p_stats->tx_128_to_255_byte_packets += port_stats.eth.t255;
p_stats->tx_256_to_511_byte_packets += port_stats.eth.t511;
p_stats->tx_512_to_1023_byte_packets += port_stats.eth.t1023;
p_stats->tx_1024_to_1518_byte_packets += port_stats.eth.t1518;
p_stats->tx_1519_to_2047_byte_packets += port_stats.eth.t2047;
p_stats->tx_2048_to_4095_byte_packets += port_stats.eth.t4095;
p_stats->tx_4096_to_9216_byte_packets += port_stats.eth.t9216;
p_stats->tx_9217_to_16383_byte_packets += port_stats.eth.t16383;
p_stats->tx_pause_frames += port_stats.eth.txpf;
p_stats->tx_pfc_frames += port_stats.eth.txpp;
p_stats->tx_lpi_entry_count += port_stats.eth.tlpiec;
p_stats->tx_total_collisions += port_stats.eth.tncl;
p_stats->rx_mac_bytes += port_stats.eth.rbyte;
p_stats->rx_mac_uc_packets += port_stats.eth.rxuca;
p_stats->rx_mac_mc_packets += port_stats.eth.rxmca;
p_stats->rx_mac_bc_packets += port_stats.eth.rxbca;
p_stats->rx_mac_frames_ok += port_stats.eth.rxpok;
p_stats->tx_mac_bytes += port_stats.eth.tbyte;
p_stats->tx_mac_uc_packets += port_stats.eth.txuca;
p_stats->tx_mac_mc_packets += port_stats.eth.txmca;
p_stats->tx_mac_bc_packets += port_stats.eth.txbca;
p_stats->tx_mac_ctrl_frames += port_stats.eth.txcf;
p_common->rx_64_byte_packets += port_stats.eth.r64;
p_common->rx_65_to_127_byte_packets += port_stats.eth.r127;
p_common->rx_128_to_255_byte_packets += port_stats.eth.r255;
p_common->rx_256_to_511_byte_packets += port_stats.eth.r511;
p_common->rx_512_to_1023_byte_packets += port_stats.eth.r1023;
p_common->rx_1024_to_1518_byte_packets += port_stats.eth.r1518;
p_common->rx_crc_errors += port_stats.eth.rfcs;
p_common->rx_mac_crtl_frames += port_stats.eth.rxcf;
p_common->rx_pause_frames += port_stats.eth.rxpf;
p_common->rx_pfc_frames += port_stats.eth.rxpp;
p_common->rx_align_errors += port_stats.eth.raln;
p_common->rx_carrier_errors += port_stats.eth.rfcr;
p_common->rx_oversize_packets += port_stats.eth.rovr;
p_common->rx_jabbers += port_stats.eth.rjbr;
p_common->rx_undersize_packets += port_stats.eth.rund;
p_common->rx_fragments += port_stats.eth.rfrg;
p_common->tx_64_byte_packets += port_stats.eth.t64;
p_common->tx_65_to_127_byte_packets += port_stats.eth.t127;
p_common->tx_128_to_255_byte_packets += port_stats.eth.t255;
p_common->tx_256_to_511_byte_packets += port_stats.eth.t511;
p_common->tx_512_to_1023_byte_packets += port_stats.eth.t1023;
p_common->tx_1024_to_1518_byte_packets += port_stats.eth.t1518;
p_common->tx_pause_frames += port_stats.eth.txpf;
p_common->tx_pfc_frames += port_stats.eth.txpp;
p_common->rx_mac_bytes += port_stats.eth.rbyte;
p_common->rx_mac_uc_packets += port_stats.eth.rxuca;
p_common->rx_mac_mc_packets += port_stats.eth.rxmca;
p_common->rx_mac_bc_packets += port_stats.eth.rxbca;
p_common->rx_mac_frames_ok += port_stats.eth.rxpok;
p_common->tx_mac_bytes += port_stats.eth.tbyte;
p_common->tx_mac_uc_packets += port_stats.eth.txuca;
p_common->tx_mac_mc_packets += port_stats.eth.txmca;
p_common->tx_mac_bc_packets += port_stats.eth.txbca;
p_common->tx_mac_ctrl_frames += port_stats.eth.txcf;
for (j = 0; j < 8; j++) {
p_stats->brb_truncates += port_stats.brb.brb_truncate[j];
p_stats->brb_discards += port_stats.brb.brb_discard[j];
p_common->brb_truncates += port_stats.brb.brb_truncate[j];
p_common->brb_discards += port_stats.brb.brb_discard[j];
}
if (ECORE_IS_BB(p_hwfn->p_dev)) {
struct ecore_eth_stats_bb *p_bb = &p_stats->bb;
p_bb->rx_1519_to_1522_byte_packets +=
port_stats.eth.u0.bb0.r1522;
p_bb->rx_1519_to_2047_byte_packets +=
port_stats.eth.u0.bb0.r2047;
p_bb->rx_2048_to_4095_byte_packets +=
port_stats.eth.u0.bb0.r4095;
p_bb->rx_4096_to_9216_byte_packets +=
port_stats.eth.u0.bb0.r9216;
p_bb->rx_9217_to_16383_byte_packets +=
port_stats.eth.u0.bb0.r16383;
p_bb->tx_1519_to_2047_byte_packets +=
port_stats.eth.u1.bb1.t2047;
p_bb->tx_2048_to_4095_byte_packets +=
port_stats.eth.u1.bb1.t4095;
p_bb->tx_4096_to_9216_byte_packets +=
port_stats.eth.u1.bb1.t9216;
p_bb->tx_9217_to_16383_byte_packets +=
port_stats.eth.u1.bb1.t16383;
p_bb->tx_lpi_entry_count += port_stats.eth.u2.bb2.tlpiec;
p_bb->tx_total_collisions += port_stats.eth.u2.bb2.tncl;
} else {
struct ecore_eth_stats_ah *p_ah = &p_stats->ah;
p_ah->rx_1519_to_max_byte_packets +=
port_stats.eth.u0.ah0.r1519_to_max;
p_ah->tx_1519_to_max_byte_packets =
port_stats.eth.u1.ah1.t1519_to_max;
}
}

View File

@ -132,13 +132,28 @@ struct eth_stats {
u64 r1023; /* 0x04 (Offset 0x20 ) RX 512 to 1023 byte frame counter*/
/* 0x05 (Offset 0x28 ) RX 1024 to 1518 byte frame counter */
u64 r1518;
union {
struct { /* bb */
/* 0x06 (Offset 0x30 ) RX 1519 to 1522 byte VLAN-tagged frame counter */
u64 r1522;
u64 r2047; /* 0x07 (Offset 0x38 ) RX 1519 to 2047 byte frame counter*/
u64 r4095; /* 0x08 (Offset 0x40 ) RX 2048 to 4095 byte frame counter*/
u64 r9216; /* 0x09 (Offset 0x48 ) RX 4096 to 9216 byte frame counter*/
u64 r1522;
/* 0x07 (Offset 0x38 ) RX 1519 to 2047 byte frame counter*/
u64 r2047;
/* 0x08 (Offset 0x40 ) RX 2048 to 4095 byte frame counter*/
u64 r4095;
/* 0x09 (Offset 0x48 ) RX 4096 to 9216 byte frame counter*/
u64 r9216;
/* 0x0A (Offset 0x50 ) RX 9217 to 16383 byte frame counter */
u64 r16383;
u64 r16383;
} bb0;
struct { /* ah */
u64 unused1;
/* 0x07 (Offset 0x38 ) RX 1519 to max byte frame counter*/
u64 r1519_to_max;
u64 unused2;
u64 unused3;
u64 unused4;
} ah0;
} u0;
u64 rfcs; /* 0x0F (Offset 0x58 ) RX FCS error frame counter*/
u64 rxcf; /* 0x10 (Offset 0x60 ) RX control frame counter*/
u64 rxpf; /* 0x11 (Offset 0x68 ) RX pause frame counter*/
@ -156,19 +171,40 @@ struct eth_stats {
u64 t1023; /* 0x44 (Offset 0xc8 ) TX 512 to 1023 byte frame counter*/
/* 0x45 (Offset 0xd0 ) TX 1024 to 1518 byte frame counter */
u64 t1518;
union {
struct { /* bb */
/* 0x47 (Offset 0xd8 ) TX 1519 to 2047 byte frame counter */
u64 t2047;
u64 t2047;
/* 0x48 (Offset 0xe0 ) TX 2048 to 4095 byte frame counter */
u64 t4095;
u64 t4095;
/* 0x49 (Offset 0xe8 ) TX 4096 to 9216 byte frame counter */
u64 t9216;
u64 t9216;
/* 0x4A (Offset 0xf0 ) TX 9217 to 16383 byte frame counter */
u64 t16383;
u64 t16383;
} bb1;
struct { /* ah */
/* 0x47 (Offset 0xd8 ) TX 1519 to max byte frame counter */
u64 t1519_to_max;
u64 unused6;
u64 unused7;
u64 unused8;
} ah1;
} u1;
u64 txpf; /* 0x50 (Offset 0xf8 ) TX pause frame counter */
u64 txpp; /* 0x51 (Offset 0x100) TX PFC frame counter */
/* 0x6C (Offset 0x108) Transmit Logical Type LLFC message counter */
u64 tlpiec;
u64 tncl; /* 0x6E (Offset 0x110) Transmit Total Collision Counter */
union {
struct { /* bb */
/* 0x6C (Offset 0x108) Transmit Logical Type LLFC message counter */
u64 tlpiec;
/* 0x6E (Offset 0x110) Transmit Total Collision Counter */
u64 tncl;
} bb2;
struct { /* ah */
u64 unused9;
u64 unused10;
} ah2;
} u2;
u64 rbyte; /* 0x3d (Offset 0x118) RX byte counter */
u64 rxuca; /* 0x0c (Offset 0x120) RX UC frame counter */
u64 rxmca; /* 0x0d (Offset 0x128) RX MC frame counter */

View File

@ -125,143 +125,199 @@ struct rte_qede_xstats_name_off {
};
static const struct rte_qede_xstats_name_off qede_xstats_strings[] = {
{"rx_unicast_bytes", offsetof(struct ecore_eth_stats, rx_ucast_bytes)},
{"rx_unicast_bytes",
offsetof(struct ecore_eth_stats_common, rx_ucast_bytes)},
{"rx_multicast_bytes",
offsetof(struct ecore_eth_stats, rx_mcast_bytes)},
offsetof(struct ecore_eth_stats_common, rx_mcast_bytes)},
{"rx_broadcast_bytes",
offsetof(struct ecore_eth_stats, rx_bcast_bytes)},
{"rx_unicast_packets", offsetof(struct ecore_eth_stats, rx_ucast_pkts)},
offsetof(struct ecore_eth_stats_common, rx_bcast_bytes)},
{"rx_unicast_packets",
offsetof(struct ecore_eth_stats_common, rx_ucast_pkts)},
{"rx_multicast_packets",
offsetof(struct ecore_eth_stats, rx_mcast_pkts)},
offsetof(struct ecore_eth_stats_common, rx_mcast_pkts)},
{"rx_broadcast_packets",
offsetof(struct ecore_eth_stats, rx_bcast_pkts)},
offsetof(struct ecore_eth_stats_common, rx_bcast_pkts)},
{"tx_unicast_bytes", offsetof(struct ecore_eth_stats, tx_ucast_bytes)},
{"tx_unicast_bytes",
offsetof(struct ecore_eth_stats_common, tx_ucast_bytes)},
{"tx_multicast_bytes",
offsetof(struct ecore_eth_stats, tx_mcast_bytes)},
offsetof(struct ecore_eth_stats_common, tx_mcast_bytes)},
{"tx_broadcast_bytes",
offsetof(struct ecore_eth_stats, tx_bcast_bytes)},
{"tx_unicast_packets", offsetof(struct ecore_eth_stats, tx_ucast_pkts)},
offsetof(struct ecore_eth_stats_common, tx_bcast_bytes)},
{"tx_unicast_packets",
offsetof(struct ecore_eth_stats_common, tx_ucast_pkts)},
{"tx_multicast_packets",
offsetof(struct ecore_eth_stats, tx_mcast_pkts)},
offsetof(struct ecore_eth_stats_common, tx_mcast_pkts)},
{"tx_broadcast_packets",
offsetof(struct ecore_eth_stats, tx_bcast_pkts)},
offsetof(struct ecore_eth_stats_common, tx_bcast_pkts)},
{"rx_64_byte_packets",
offsetof(struct ecore_eth_stats, rx_64_byte_packets)},
offsetof(struct ecore_eth_stats_common, rx_64_byte_packets)},
{"rx_65_to_127_byte_packets",
offsetof(struct ecore_eth_stats, rx_65_to_127_byte_packets)},
offsetof(struct ecore_eth_stats_common,
rx_65_to_127_byte_packets)},
{"rx_128_to_255_byte_packets",
offsetof(struct ecore_eth_stats, rx_128_to_255_byte_packets)},
offsetof(struct ecore_eth_stats_common,
rx_128_to_255_byte_packets)},
{"rx_256_to_511_byte_packets",
offsetof(struct ecore_eth_stats, rx_256_to_511_byte_packets)},
offsetof(struct ecore_eth_stats_common,
rx_256_to_511_byte_packets)},
{"rx_512_to_1023_byte_packets",
offsetof(struct ecore_eth_stats, rx_512_to_1023_byte_packets)},
offsetof(struct ecore_eth_stats_common,
rx_512_to_1023_byte_packets)},
{"rx_1024_to_1518_byte_packets",
offsetof(struct ecore_eth_stats, rx_1024_to_1518_byte_packets)},
{"rx_1519_to_1522_byte_packets",
offsetof(struct ecore_eth_stats, rx_1519_to_1522_byte_packets)},
{"rx_1519_to_2047_byte_packets",
offsetof(struct ecore_eth_stats, rx_1519_to_2047_byte_packets)},
{"rx_2048_to_4095_byte_packets",
offsetof(struct ecore_eth_stats, rx_2048_to_4095_byte_packets)},
{"rx_4096_to_9216_byte_packets",
offsetof(struct ecore_eth_stats, rx_4096_to_9216_byte_packets)},
{"rx_9217_to_16383_byte_packets",
offsetof(struct ecore_eth_stats,
rx_9217_to_16383_byte_packets)},
offsetof(struct ecore_eth_stats_common,
rx_1024_to_1518_byte_packets)},
{"tx_64_byte_packets",
offsetof(struct ecore_eth_stats, tx_64_byte_packets)},
offsetof(struct ecore_eth_stats_common, tx_64_byte_packets)},
{"tx_65_to_127_byte_packets",
offsetof(struct ecore_eth_stats, tx_65_to_127_byte_packets)},
offsetof(struct ecore_eth_stats_common,
tx_65_to_127_byte_packets)},
{"tx_128_to_255_byte_packets",
offsetof(struct ecore_eth_stats, tx_128_to_255_byte_packets)},
offsetof(struct ecore_eth_stats_common,
tx_128_to_255_byte_packets)},
{"tx_256_to_511_byte_packets",
offsetof(struct ecore_eth_stats, tx_256_to_511_byte_packets)},
offsetof(struct ecore_eth_stats_common,
tx_256_to_511_byte_packets)},
{"tx_512_to_1023_byte_packets",
offsetof(struct ecore_eth_stats, tx_512_to_1023_byte_packets)},
offsetof(struct ecore_eth_stats_common,
tx_512_to_1023_byte_packets)},
{"tx_1024_to_1518_byte_packets",
offsetof(struct ecore_eth_stats, tx_1024_to_1518_byte_packets)},
{"trx_1519_to_1522_byte_packets",
offsetof(struct ecore_eth_stats, tx_1519_to_2047_byte_packets)},
{"tx_2048_to_4095_byte_packets",
offsetof(struct ecore_eth_stats, tx_2048_to_4095_byte_packets)},
{"tx_4096_to_9216_byte_packets",
offsetof(struct ecore_eth_stats, tx_4096_to_9216_byte_packets)},
{"tx_9217_to_16383_byte_packets",
offsetof(struct ecore_eth_stats,
tx_9217_to_16383_byte_packets)},
offsetof(struct ecore_eth_stats_common,
tx_1024_to_1518_byte_packets)},
{"rx_mac_crtl_frames",
offsetof(struct ecore_eth_stats, rx_mac_crtl_frames)},
offsetof(struct ecore_eth_stats_common, rx_mac_crtl_frames)},
{"tx_mac_control_frames",
offsetof(struct ecore_eth_stats, tx_mac_ctrl_frames)},
{"rx_pause_frames", offsetof(struct ecore_eth_stats, rx_pause_frames)},
{"tx_pause_frames", offsetof(struct ecore_eth_stats, tx_pause_frames)},
offsetof(struct ecore_eth_stats_common, tx_mac_ctrl_frames)},
{"rx_pause_frames",
offsetof(struct ecore_eth_stats_common, rx_pause_frames)},
{"tx_pause_frames",
offsetof(struct ecore_eth_stats_common, tx_pause_frames)},
{"rx_priority_flow_control_frames",
offsetof(struct ecore_eth_stats, rx_pfc_frames)},
offsetof(struct ecore_eth_stats_common, rx_pfc_frames)},
{"tx_priority_flow_control_frames",
offsetof(struct ecore_eth_stats, tx_pfc_frames)},
offsetof(struct ecore_eth_stats_common, tx_pfc_frames)},
{"rx_crc_errors", offsetof(struct ecore_eth_stats, rx_crc_errors)},
{"rx_align_errors", offsetof(struct ecore_eth_stats, rx_align_errors)},
{"rx_crc_errors",
offsetof(struct ecore_eth_stats_common, rx_crc_errors)},
{"rx_align_errors",
offsetof(struct ecore_eth_stats_common, rx_align_errors)},
{"rx_carrier_errors",
offsetof(struct ecore_eth_stats, rx_carrier_errors)},
offsetof(struct ecore_eth_stats_common, rx_carrier_errors)},
{"rx_oversize_packet_errors",
offsetof(struct ecore_eth_stats, rx_oversize_packets)},
{"rx_jabber_errors", offsetof(struct ecore_eth_stats, rx_jabbers)},
offsetof(struct ecore_eth_stats_common, rx_oversize_packets)},
{"rx_jabber_errors",
offsetof(struct ecore_eth_stats_common, rx_jabbers)},
{"rx_undersize_packet_errors",
offsetof(struct ecore_eth_stats, rx_undersize_packets)},
{"rx_fragments", offsetof(struct ecore_eth_stats, rx_fragments)},
offsetof(struct ecore_eth_stats_common, rx_undersize_packets)},
{"rx_fragments", offsetof(struct ecore_eth_stats_common, rx_fragments)},
{"rx_host_buffer_not_available",
offsetof(struct ecore_eth_stats, no_buff_discards)},
offsetof(struct ecore_eth_stats_common, no_buff_discards)},
/* Number of packets discarded because they are bigger than MTU */
{"rx_packet_too_big_discards",
offsetof(struct ecore_eth_stats, packet_too_big_discard)},
offsetof(struct ecore_eth_stats_common,
packet_too_big_discard)},
{"rx_ttl_zero_discards",
offsetof(struct ecore_eth_stats, ttl0_discard)},
offsetof(struct ecore_eth_stats_common, ttl0_discard)},
{"rx_multi_function_tag_filter_discards",
offsetof(struct ecore_eth_stats, mftag_filter_discards)},
offsetof(struct ecore_eth_stats_common, mftag_filter_discards)},
{"rx_mac_filter_discards",
offsetof(struct ecore_eth_stats, mac_filter_discards)},
offsetof(struct ecore_eth_stats_common, mac_filter_discards)},
{"rx_hw_buffer_truncates",
offsetof(struct ecore_eth_stats, brb_truncates)},
offsetof(struct ecore_eth_stats_common, brb_truncates)},
{"rx_hw_buffer_discards",
offsetof(struct ecore_eth_stats, brb_discards)},
{"tx_lpi_entry_count",
offsetof(struct ecore_eth_stats, tx_lpi_entry_count)},
{"tx_total_collisions",
offsetof(struct ecore_eth_stats, tx_total_collisions)},
offsetof(struct ecore_eth_stats_common, brb_discards)},
{"tx_error_drop_packets",
offsetof(struct ecore_eth_stats, tx_err_drop_pkts)},
offsetof(struct ecore_eth_stats_common, tx_err_drop_pkts)},
{"rx_mac_bytes", offsetof(struct ecore_eth_stats, rx_mac_bytes)},
{"rx_mac_bytes", offsetof(struct ecore_eth_stats_common, rx_mac_bytes)},
{"rx_mac_unicast_packets",
offsetof(struct ecore_eth_stats, rx_mac_uc_packets)},
offsetof(struct ecore_eth_stats_common, rx_mac_uc_packets)},
{"rx_mac_multicast_packets",
offsetof(struct ecore_eth_stats, rx_mac_mc_packets)},
offsetof(struct ecore_eth_stats_common, rx_mac_mc_packets)},
{"rx_mac_broadcast_packets",
offsetof(struct ecore_eth_stats, rx_mac_bc_packets)},
offsetof(struct ecore_eth_stats_common, rx_mac_bc_packets)},
{"rx_mac_frames_ok",
offsetof(struct ecore_eth_stats, rx_mac_frames_ok)},
{"tx_mac_bytes", offsetof(struct ecore_eth_stats, tx_mac_bytes)},
offsetof(struct ecore_eth_stats_common, rx_mac_frames_ok)},
{"tx_mac_bytes", offsetof(struct ecore_eth_stats_common, tx_mac_bytes)},
{"tx_mac_unicast_packets",
offsetof(struct ecore_eth_stats, tx_mac_uc_packets)},
offsetof(struct ecore_eth_stats_common, tx_mac_uc_packets)},
{"tx_mac_multicast_packets",
offsetof(struct ecore_eth_stats, tx_mac_mc_packets)},
offsetof(struct ecore_eth_stats_common, tx_mac_mc_packets)},
{"tx_mac_broadcast_packets",
offsetof(struct ecore_eth_stats, tx_mac_bc_packets)},
offsetof(struct ecore_eth_stats_common, tx_mac_bc_packets)},
{"lro_coalesced_packets",
offsetof(struct ecore_eth_stats, tpa_coalesced_pkts)},
offsetof(struct ecore_eth_stats_common, tpa_coalesced_pkts)},
{"lro_coalesced_events",
offsetof(struct ecore_eth_stats, tpa_coalesced_events)},
offsetof(struct ecore_eth_stats_common, tpa_coalesced_events)},
{"lro_aborts_num",
offsetof(struct ecore_eth_stats, tpa_aborts_num)},
offsetof(struct ecore_eth_stats_common, tpa_aborts_num)},
{"lro_not_coalesced_packets",
offsetof(struct ecore_eth_stats, tpa_not_coalesced_pkts)},
offsetof(struct ecore_eth_stats_common,
tpa_not_coalesced_pkts)},
{"lro_coalesced_bytes",
offsetof(struct ecore_eth_stats, tpa_coalesced_bytes)},
offsetof(struct ecore_eth_stats_common,
tpa_coalesced_bytes)},
};
static const struct rte_qede_xstats_name_off qede_bb_xstats_strings[] = {
{"rx_1519_to_1522_byte_packets",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb,
rx_1519_to_1522_byte_packets)},
{"rx_1519_to_2047_byte_packets",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb,
rx_1519_to_2047_byte_packets)},
{"rx_2048_to_4095_byte_packets",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb,
rx_2048_to_4095_byte_packets)},
{"rx_4096_to_9216_byte_packets",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb,
rx_4096_to_9216_byte_packets)},
{"rx_9217_to_16383_byte_packets",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb,
rx_9217_to_16383_byte_packets)},
{"tx_1519_to_2047_byte_packets",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb,
tx_1519_to_2047_byte_packets)},
{"tx_2048_to_4095_byte_packets",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb,
tx_2048_to_4095_byte_packets)},
{"tx_4096_to_9216_byte_packets",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb,
tx_4096_to_9216_byte_packets)},
{"tx_9217_to_16383_byte_packets",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb,
tx_9217_to_16383_byte_packets)},
{"tx_lpi_entry_count",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb, tx_lpi_entry_count)},
{"tx_total_collisions",
offsetof(struct ecore_eth_stats, bb) +
offsetof(struct ecore_eth_stats_bb, tx_total_collisions)},
};
static const struct rte_qede_xstats_name_off qede_ah_xstats_strings[] = {
{"rx_1519_to_max_byte_packets",
offsetof(struct ecore_eth_stats, ah) +
offsetof(struct ecore_eth_stats_ah,
rx_1519_to_max_byte_packets)},
{"tx_1519_to_max_byte_packets",
offsetof(struct ecore_eth_stats, ah) +
offsetof(struct ecore_eth_stats_ah,
tx_1519_to_max_byte_packets)},
};
static const struct rte_qede_xstats_name_off qede_rxq_xstats_strings[] = {
@ -1416,32 +1472,33 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
ecore_get_vport_stats(edev, &stats);
/* RX Stats */
eth_stats->ipackets = stats.rx_ucast_pkts +
stats.rx_mcast_pkts + stats.rx_bcast_pkts;
eth_stats->ipackets = stats.common.rx_ucast_pkts +
stats.common.rx_mcast_pkts + stats.common.rx_bcast_pkts;
eth_stats->ibytes = stats.rx_ucast_bytes +
stats.rx_mcast_bytes + stats.rx_bcast_bytes;
eth_stats->ibytes = stats.common.rx_ucast_bytes +
stats.common.rx_mcast_bytes + stats.common.rx_bcast_bytes;
eth_stats->ierrors = stats.rx_crc_errors +
stats.rx_align_errors +
stats.rx_carrier_errors +
stats.rx_oversize_packets +
stats.rx_jabbers + stats.rx_undersize_packets;
eth_stats->ierrors = stats.common.rx_crc_errors +
stats.common.rx_align_errors +
stats.common.rx_carrier_errors +
stats.common.rx_oversize_packets +
stats.common.rx_jabbers + stats.common.rx_undersize_packets;
eth_stats->rx_nombuf = stats.no_buff_discards;
eth_stats->rx_nombuf = stats.common.no_buff_discards;
eth_stats->imissed = stats.mftag_filter_discards +
stats.mac_filter_discards +
stats.no_buff_discards + stats.brb_truncates + stats.brb_discards;
eth_stats->imissed = stats.common.mftag_filter_discards +
stats.common.mac_filter_discards +
stats.common.no_buff_discards +
stats.common.brb_truncates + stats.common.brb_discards;
/* TX stats */
eth_stats->opackets = stats.tx_ucast_pkts +
stats.tx_mcast_pkts + stats.tx_bcast_pkts;
eth_stats->opackets = stats.common.tx_ucast_pkts +
stats.common.tx_mcast_pkts + stats.common.tx_bcast_pkts;
eth_stats->obytes = stats.tx_ucast_bytes +
stats.tx_mcast_bytes + stats.tx_bcast_bytes;
eth_stats->obytes = stats.common.tx_ucast_bytes +
stats.common.tx_mcast_bytes + stats.common.tx_bcast_bytes;
eth_stats->oerrors = stats.tx_err_drop_pkts;
eth_stats->oerrors = stats.common.tx_err_drop_pkts;
/* Queue stats */
rxq_stat_cntrs = RTE_MIN(QEDE_RSS_COUNT(qdev),
@ -1490,10 +1547,18 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
static unsigned
qede_get_xstats_count(struct qede_dev *qdev) {
return RTE_DIM(qede_xstats_strings) +
(RTE_DIM(qede_rxq_xstats_strings) *
RTE_MIN(QEDE_RSS_COUNT(qdev),
RTE_ETHDEV_QUEUE_STAT_CNTRS));
if (ECORE_IS_BB(&qdev->edev))
return RTE_DIM(qede_xstats_strings) +
RTE_DIM(qede_bb_xstats_strings) +
(RTE_DIM(qede_rxq_xstats_strings) *
RTE_MIN(QEDE_RSS_COUNT(qdev),
RTE_ETHDEV_QUEUE_STAT_CNTRS));
else
return RTE_DIM(qede_xstats_strings) +
RTE_DIM(qede_ah_xstats_strings) +
(RTE_DIM(qede_rxq_xstats_strings) *
RTE_MIN(QEDE_RSS_COUNT(qdev),
RTE_ETHDEV_QUEUE_STAT_CNTRS));
}
static int
@ -1502,6 +1567,7 @@ qede_get_xstats_names(struct rte_eth_dev *dev,
__rte_unused unsigned int limit)
{
struct qede_dev *qdev = dev->data->dev_private;
struct ecore_dev *edev = &qdev->edev;
const unsigned int stat_cnt = qede_get_xstats_count(qdev);
unsigned int i, qid, stat_idx = 0;
unsigned int rxq_stat_cntrs;
@ -1515,6 +1581,24 @@ qede_get_xstats_names(struct rte_eth_dev *dev,
stat_idx++;
}
if (ECORE_IS_BB(edev)) {
for (i = 0; i < RTE_DIM(qede_bb_xstats_strings); i++) {
snprintf(xstats_names[stat_idx].name,
sizeof(xstats_names[stat_idx].name),
"%s",
qede_bb_xstats_strings[i].name);
stat_idx++;
}
} else {
for (i = 0; i < RTE_DIM(qede_ah_xstats_strings); i++) {
snprintf(xstats_names[stat_idx].name,
sizeof(xstats_names[stat_idx].name),
"%s",
qede_ah_xstats_strings[i].name);
stat_idx++;
}
}
rxq_stat_cntrs = RTE_MIN(QEDE_RSS_COUNT(qdev),
RTE_ETHDEV_QUEUE_STAT_CNTRS);
for (qid = 0; qid < rxq_stat_cntrs; qid++) {
@ -1555,6 +1639,24 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
stat_idx++;
}
if (ECORE_IS_BB(edev)) {
for (i = 0; i < RTE_DIM(qede_bb_xstats_strings); i++) {
xstats[stat_idx].value =
*(uint64_t *)(((char *)&stats) +
qede_bb_xstats_strings[i].offset);
xstats[stat_idx].id = stat_idx;
stat_idx++;
}
} else {
for (i = 0; i < RTE_DIM(qede_ah_xstats_strings); i++) {
xstats[stat_idx].value =
*(uint64_t *)(((char *)&stats) +
qede_ah_xstats_strings[i].offset);
xstats[stat_idx].id = stat_idx;
stat_idx++;
}
}
rxq_stat_cntrs = RTE_MIN(QEDE_RSS_COUNT(qdev),
RTE_ETHDEV_QUEUE_STAT_CNTRS);
for (qid = 0; qid < rxq_stat_cntrs; qid++) {