qed*: Add support for QL41xxx adapters
This adds the necessary infrastructure changes for initializing and working with the new series of QL41xxx adapaters. It also adds 2 new PCI device-IDs to qede: - 0x8070 for QL41xxx PFs - 0x8090 for VFs spawning from QL41xxx PFs Signed-off-by: Tomer Tayar <Tomer.Tayar@cavium.com> Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
942c56ad07
commit
9c79ddaa0f
@@ -58,7 +58,7 @@
|
||||
|
||||
#define DRV_MODULE_SYM qede
|
||||
|
||||
struct qede_stats {
|
||||
struct qede_stats_common {
|
||||
u64 no_buff_discards;
|
||||
u64 packet_too_big_discard;
|
||||
u64 ttl0_discard;
|
||||
@@ -90,11 +90,6 @@ struct qede_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;
|
||||
@@ -111,17 +106,39 @@ struct qede_stats {
|
||||
u64 tx_256_to_511_byte_packets;
|
||||
u64 tx_512_to_1023_byte_packets;
|
||||
u64 tx_1024_to_1518_byte_packets;
|
||||
u64 tx_pause_frames;
|
||||
u64 tx_pfc_frames;
|
||||
u64 brb_truncates;
|
||||
u64 brb_discards;
|
||||
u64 tx_mac_ctrl_frames;
|
||||
};
|
||||
|
||||
struct qede_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_pause_frames;
|
||||
u64 tx_pfc_frames;
|
||||
u64 tx_lpi_entry_count;
|
||||
u64 tx_total_collisions;
|
||||
u64 brb_truncates;
|
||||
u64 brb_discards;
|
||||
u64 tx_mac_ctrl_frames;
|
||||
};
|
||||
|
||||
struct qede_stats_ah {
|
||||
u64 rx_1519_to_max_byte_packets;
|
||||
u64 tx_1519_to_max_byte_packets;
|
||||
};
|
||||
|
||||
struct qede_stats {
|
||||
struct qede_stats_common common;
|
||||
|
||||
union {
|
||||
struct qede_stats_bb bb;
|
||||
struct qede_stats_ah ah;
|
||||
};
|
||||
};
|
||||
|
||||
struct qede_vlan {
|
||||
@@ -158,6 +175,10 @@ struct qede_dev {
|
||||
struct qed_dev_eth_info dev_info;
|
||||
#define QEDE_MAX_RSS_CNT(edev) ((edev)->dev_info.num_queues)
|
||||
#define QEDE_MAX_TSS_CNT(edev) ((edev)->dev_info.num_queues)
|
||||
#define QEDE_IS_BB(edev) \
|
||||
((edev)->dev_info.common.dev_type == QED_DEV_TYPE_BB)
|
||||
#define QEDE_IS_AH(edev) \
|
||||
((edev)->dev_info.common.dev_type == QED_DEV_TYPE_AH)
|
||||
|
||||
struct qede_fastpath *fp_array;
|
||||
u8 req_num_tx;
|
||||
|
@@ -75,16 +75,33 @@ static const struct {
|
||||
QEDE_TQSTAT(stopped_cnt),
|
||||
};
|
||||
|
||||
#define QEDE_STAT_OFFSET(stat_name) (offsetof(struct qede_stats, stat_name))
|
||||
#define QEDE_STAT_STRING(stat_name) (#stat_name)
|
||||
#define _QEDE_STAT(stat_name, pf_only) \
|
||||
{QEDE_STAT_OFFSET(stat_name), QEDE_STAT_STRING(stat_name), pf_only}
|
||||
#define QEDE_PF_STAT(stat_name) _QEDE_STAT(stat_name, true)
|
||||
#define QEDE_STAT(stat_name) _QEDE_STAT(stat_name, false)
|
||||
#define QEDE_STAT_OFFSET(stat_name, type, base) \
|
||||
(offsetof(type, stat_name) + (base))
|
||||
#define QEDE_STAT_STRING(stat_name) (#stat_name)
|
||||
#define _QEDE_STAT(stat_name, type, base, attr) \
|
||||
{QEDE_STAT_OFFSET(stat_name, type, base), \
|
||||
QEDE_STAT_STRING(stat_name), \
|
||||
attr}
|
||||
#define QEDE_STAT(stat_name) \
|
||||
_QEDE_STAT(stat_name, struct qede_stats_common, 0, 0x0)
|
||||
#define QEDE_PF_STAT(stat_name) \
|
||||
_QEDE_STAT(stat_name, struct qede_stats_common, 0, \
|
||||
BIT(QEDE_STAT_PF_ONLY))
|
||||
#define QEDE_PF_BB_STAT(stat_name) \
|
||||
_QEDE_STAT(stat_name, struct qede_stats_bb, \
|
||||
offsetof(struct qede_stats, bb), \
|
||||
BIT(QEDE_STAT_PF_ONLY) | BIT(QEDE_STAT_BB_ONLY))
|
||||
#define QEDE_PF_AH_STAT(stat_name) \
|
||||
_QEDE_STAT(stat_name, struct qede_stats_ah, \
|
||||
offsetof(struct qede_stats, ah), \
|
||||
BIT(QEDE_STAT_PF_ONLY) | BIT(QEDE_STAT_AH_ONLY))
|
||||
static const struct {
|
||||
u64 offset;
|
||||
char string[ETH_GSTRING_LEN];
|
||||
bool pf_only;
|
||||
unsigned long attr;
|
||||
#define QEDE_STAT_PF_ONLY 0
|
||||
#define QEDE_STAT_BB_ONLY 1
|
||||
#define QEDE_STAT_AH_ONLY 2
|
||||
} qede_stats_arr[] = {
|
||||
QEDE_STAT(rx_ucast_bytes),
|
||||
QEDE_STAT(rx_mcast_bytes),
|
||||
@@ -106,22 +123,23 @@ static const struct {
|
||||
QEDE_PF_STAT(rx_256_to_511_byte_packets),
|
||||
QEDE_PF_STAT(rx_512_to_1023_byte_packets),
|
||||
QEDE_PF_STAT(rx_1024_to_1518_byte_packets),
|
||||
QEDE_PF_STAT(rx_1519_to_1522_byte_packets),
|
||||
QEDE_PF_STAT(rx_1519_to_2047_byte_packets),
|
||||
QEDE_PF_STAT(rx_2048_to_4095_byte_packets),
|
||||
QEDE_PF_STAT(rx_4096_to_9216_byte_packets),
|
||||
QEDE_PF_STAT(rx_9217_to_16383_byte_packets),
|
||||
QEDE_PF_BB_STAT(rx_1519_to_1522_byte_packets),
|
||||
QEDE_PF_BB_STAT(rx_1519_to_2047_byte_packets),
|
||||
QEDE_PF_BB_STAT(rx_2048_to_4095_byte_packets),
|
||||
QEDE_PF_BB_STAT(rx_4096_to_9216_byte_packets),
|
||||
QEDE_PF_BB_STAT(rx_9217_to_16383_byte_packets),
|
||||
QEDE_PF_AH_STAT(rx_1519_to_max_byte_packets),
|
||||
QEDE_PF_STAT(tx_64_byte_packets),
|
||||
QEDE_PF_STAT(tx_65_to_127_byte_packets),
|
||||
QEDE_PF_STAT(tx_128_to_255_byte_packets),
|
||||
QEDE_PF_STAT(tx_256_to_511_byte_packets),
|
||||
QEDE_PF_STAT(tx_512_to_1023_byte_packets),
|
||||
QEDE_PF_STAT(tx_1024_to_1518_byte_packets),
|
||||
QEDE_PF_STAT(tx_1519_to_2047_byte_packets),
|
||||
QEDE_PF_STAT(tx_2048_to_4095_byte_packets),
|
||||
QEDE_PF_STAT(tx_4096_to_9216_byte_packets),
|
||||
QEDE_PF_STAT(tx_9217_to_16383_byte_packets),
|
||||
|
||||
QEDE_PF_BB_STAT(tx_1519_to_2047_byte_packets),
|
||||
QEDE_PF_BB_STAT(tx_2048_to_4095_byte_packets),
|
||||
QEDE_PF_BB_STAT(tx_4096_to_9216_byte_packets),
|
||||
QEDE_PF_BB_STAT(tx_9217_to_16383_byte_packets),
|
||||
QEDE_PF_AH_STAT(tx_1519_to_max_byte_packets),
|
||||
QEDE_PF_STAT(rx_mac_crtl_frames),
|
||||
QEDE_PF_STAT(tx_mac_ctrl_frames),
|
||||
QEDE_PF_STAT(rx_pause_frames),
|
||||
@@ -136,8 +154,8 @@ static const struct {
|
||||
QEDE_PF_STAT(rx_jabbers),
|
||||
QEDE_PF_STAT(rx_undersize_packets),
|
||||
QEDE_PF_STAT(rx_fragments),
|
||||
QEDE_PF_STAT(tx_lpi_entry_count),
|
||||
QEDE_PF_STAT(tx_total_collisions),
|
||||
QEDE_PF_BB_STAT(tx_lpi_entry_count),
|
||||
QEDE_PF_BB_STAT(tx_total_collisions),
|
||||
QEDE_PF_STAT(brb_truncates),
|
||||
QEDE_PF_STAT(brb_discards),
|
||||
QEDE_STAT(no_buff_discards),
|
||||
@@ -155,6 +173,12 @@ static const struct {
|
||||
};
|
||||
|
||||
#define QEDE_NUM_STATS ARRAY_SIZE(qede_stats_arr)
|
||||
#define QEDE_STAT_IS_PF_ONLY(i) \
|
||||
test_bit(QEDE_STAT_PF_ONLY, &qede_stats_arr[i].attr)
|
||||
#define QEDE_STAT_IS_BB_ONLY(i) \
|
||||
test_bit(QEDE_STAT_BB_ONLY, &qede_stats_arr[i].attr)
|
||||
#define QEDE_STAT_IS_AH_ONLY(i) \
|
||||
test_bit(QEDE_STAT_AH_ONLY, &qede_stats_arr[i].attr)
|
||||
|
||||
enum {
|
||||
QEDE_PRI_FLAG_CMT,
|
||||
@@ -213,6 +237,13 @@ static void qede_get_strings_stats_rxq(struct qede_dev *edev,
|
||||
}
|
||||
}
|
||||
|
||||
static bool qede_is_irrelevant_stat(struct qede_dev *edev, int stat_index)
|
||||
{
|
||||
return (IS_VF(edev) && QEDE_STAT_IS_PF_ONLY(stat_index)) ||
|
||||
(QEDE_IS_BB(edev) && QEDE_STAT_IS_AH_ONLY(stat_index)) ||
|
||||
(QEDE_IS_AH(edev) && QEDE_STAT_IS_BB_ONLY(stat_index));
|
||||
}
|
||||
|
||||
static void qede_get_strings_stats(struct qede_dev *edev, u8 *buf)
|
||||
{
|
||||
struct qede_fastpath *fp;
|
||||
@@ -234,7 +265,7 @@ static void qede_get_strings_stats(struct qede_dev *edev, u8 *buf)
|
||||
|
||||
/* Account for non-queue statistics */
|
||||
for (i = 0; i < QEDE_NUM_STATS; i++) {
|
||||
if (IS_VF(edev) && qede_stats_arr[i].pf_only)
|
||||
if (qede_is_irrelevant_stat(edev, i))
|
||||
continue;
|
||||
strcpy(buf, qede_stats_arr[i].string);
|
||||
buf += ETH_GSTRING_LEN;
|
||||
@@ -309,7 +340,7 @@ static void qede_get_ethtool_stats(struct net_device *dev,
|
||||
}
|
||||
|
||||
for (i = 0; i < QEDE_NUM_STATS; i++) {
|
||||
if (IS_VF(edev) && qede_stats_arr[i].pf_only)
|
||||
if (qede_is_irrelevant_stat(edev, i))
|
||||
continue;
|
||||
*buf = *((u64 *)(((void *)&edev->stats) +
|
||||
qede_stats_arr[i].offset));
|
||||
@@ -323,17 +354,13 @@ static void qede_get_ethtool_stats(struct net_device *dev,
|
||||
static int qede_get_sset_count(struct net_device *dev, int stringset)
|
||||
{
|
||||
struct qede_dev *edev = netdev_priv(dev);
|
||||
int num_stats = QEDE_NUM_STATS;
|
||||
int num_stats = QEDE_NUM_STATS, i;
|
||||
|
||||
switch (stringset) {
|
||||
case ETH_SS_STATS:
|
||||
if (IS_VF(edev)) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < QEDE_NUM_STATS; i++)
|
||||
if (qede_stats_arr[i].pf_only)
|
||||
num_stats--;
|
||||
}
|
||||
for (i = 0; i < QEDE_NUM_STATS; i++)
|
||||
if (qede_is_irrelevant_stat(edev, i))
|
||||
num_stats--;
|
||||
|
||||
/* Account for the Regular Tx statistics */
|
||||
num_stats += QEDE_TSS_COUNT(edev) * QEDE_NUM_TQSTATS;
|
||||
|
@@ -84,6 +84,8 @@ static const struct qed_eth_ops *qed_ops;
|
||||
#define CHIP_NUM_57980S_50 0x1654
|
||||
#define CHIP_NUM_57980S_25 0x1656
|
||||
#define CHIP_NUM_57980S_IOV 0x1664
|
||||
#define CHIP_NUM_AH 0x8070
|
||||
#define CHIP_NUM_AH_IOV 0x8090
|
||||
|
||||
#ifndef PCI_DEVICE_ID_NX2_57980E
|
||||
#define PCI_DEVICE_ID_57980S_40 CHIP_NUM_57980S_40
|
||||
@@ -93,6 +95,9 @@ static const struct qed_eth_ops *qed_ops;
|
||||
#define PCI_DEVICE_ID_57980S_50 CHIP_NUM_57980S_50
|
||||
#define PCI_DEVICE_ID_57980S_25 CHIP_NUM_57980S_25
|
||||
#define PCI_DEVICE_ID_57980S_IOV CHIP_NUM_57980S_IOV
|
||||
#define PCI_DEVICE_ID_AH CHIP_NUM_AH
|
||||
#define PCI_DEVICE_ID_AH_IOV CHIP_NUM_AH_IOV
|
||||
|
||||
#endif
|
||||
|
||||
enum qede_pci_private {
|
||||
@@ -109,6 +114,10 @@ static const struct pci_device_id qede_pci_tbl[] = {
|
||||
{PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_57980S_25), QEDE_PRIVATE_PF},
|
||||
#ifdef CONFIG_QED_SRIOV
|
||||
{PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_57980S_IOV), QEDE_PRIVATE_VF},
|
||||
#endif
|
||||
{PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_AH), QEDE_PRIVATE_PF},
|
||||
#ifdef CONFIG_QED_SRIOV
|
||||
{PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_AH_IOV), QEDE_PRIVATE_VF},
|
||||
#endif
|
||||
{ 0 }
|
||||
};
|
||||
@@ -314,122 +323,135 @@ static int qede_close(struct net_device *ndev);
|
||||
|
||||
void qede_fill_by_demand_stats(struct qede_dev *edev)
|
||||
{
|
||||
struct qede_stats_common *p_common = &edev->stats.common;
|
||||
struct qed_eth_stats stats;
|
||||
|
||||
edev->ops->get_vport_stats(edev->cdev, &stats);
|
||||
edev->stats.no_buff_discards = stats.no_buff_discards;
|
||||
edev->stats.packet_too_big_discard = stats.packet_too_big_discard;
|
||||
edev->stats.ttl0_discard = stats.ttl0_discard;
|
||||
edev->stats.rx_ucast_bytes = stats.rx_ucast_bytes;
|
||||
edev->stats.rx_mcast_bytes = stats.rx_mcast_bytes;
|
||||
edev->stats.rx_bcast_bytes = stats.rx_bcast_bytes;
|
||||
edev->stats.rx_ucast_pkts = stats.rx_ucast_pkts;
|
||||
edev->stats.rx_mcast_pkts = stats.rx_mcast_pkts;
|
||||
edev->stats.rx_bcast_pkts = stats.rx_bcast_pkts;
|
||||
edev->stats.mftag_filter_discards = stats.mftag_filter_discards;
|
||||
edev->stats.mac_filter_discards = stats.mac_filter_discards;
|
||||
|
||||
edev->stats.tx_ucast_bytes = stats.tx_ucast_bytes;
|
||||
edev->stats.tx_mcast_bytes = stats.tx_mcast_bytes;
|
||||
edev->stats.tx_bcast_bytes = stats.tx_bcast_bytes;
|
||||
edev->stats.tx_ucast_pkts = stats.tx_ucast_pkts;
|
||||
edev->stats.tx_mcast_pkts = stats.tx_mcast_pkts;
|
||||
edev->stats.tx_bcast_pkts = stats.tx_bcast_pkts;
|
||||
edev->stats.tx_err_drop_pkts = stats.tx_err_drop_pkts;
|
||||
edev->stats.coalesced_pkts = stats.tpa_coalesced_pkts;
|
||||
edev->stats.coalesced_events = stats.tpa_coalesced_events;
|
||||
edev->stats.coalesced_aborts_num = stats.tpa_aborts_num;
|
||||
edev->stats.non_coalesced_pkts = stats.tpa_not_coalesced_pkts;
|
||||
edev->stats.coalesced_bytes = stats.tpa_coalesced_bytes;
|
||||
p_common->no_buff_discards = stats.common.no_buff_discards;
|
||||
p_common->packet_too_big_discard = stats.common.packet_too_big_discard;
|
||||
p_common->ttl0_discard = stats.common.ttl0_discard;
|
||||
p_common->rx_ucast_bytes = stats.common.rx_ucast_bytes;
|
||||
p_common->rx_mcast_bytes = stats.common.rx_mcast_bytes;
|
||||
p_common->rx_bcast_bytes = stats.common.rx_bcast_bytes;
|
||||
p_common->rx_ucast_pkts = stats.common.rx_ucast_pkts;
|
||||
p_common->rx_mcast_pkts = stats.common.rx_mcast_pkts;
|
||||
p_common->rx_bcast_pkts = stats.common.rx_bcast_pkts;
|
||||
p_common->mftag_filter_discards = stats.common.mftag_filter_discards;
|
||||
p_common->mac_filter_discards = stats.common.mac_filter_discards;
|
||||
|
||||
edev->stats.rx_64_byte_packets = stats.rx_64_byte_packets;
|
||||
edev->stats.rx_65_to_127_byte_packets = stats.rx_65_to_127_byte_packets;
|
||||
edev->stats.rx_128_to_255_byte_packets =
|
||||
stats.rx_128_to_255_byte_packets;
|
||||
edev->stats.rx_256_to_511_byte_packets =
|
||||
stats.rx_256_to_511_byte_packets;
|
||||
edev->stats.rx_512_to_1023_byte_packets =
|
||||
stats.rx_512_to_1023_byte_packets;
|
||||
edev->stats.rx_1024_to_1518_byte_packets =
|
||||
stats.rx_1024_to_1518_byte_packets;
|
||||
edev->stats.rx_1519_to_1522_byte_packets =
|
||||
stats.rx_1519_to_1522_byte_packets;
|
||||
edev->stats.rx_1519_to_2047_byte_packets =
|
||||
stats.rx_1519_to_2047_byte_packets;
|
||||
edev->stats.rx_2048_to_4095_byte_packets =
|
||||
stats.rx_2048_to_4095_byte_packets;
|
||||
edev->stats.rx_4096_to_9216_byte_packets =
|
||||
stats.rx_4096_to_9216_byte_packets;
|
||||
edev->stats.rx_9217_to_16383_byte_packets =
|
||||
stats.rx_9217_to_16383_byte_packets;
|
||||
edev->stats.rx_crc_errors = stats.rx_crc_errors;
|
||||
edev->stats.rx_mac_crtl_frames = stats.rx_mac_crtl_frames;
|
||||
edev->stats.rx_pause_frames = stats.rx_pause_frames;
|
||||
edev->stats.rx_pfc_frames = stats.rx_pfc_frames;
|
||||
edev->stats.rx_align_errors = stats.rx_align_errors;
|
||||
edev->stats.rx_carrier_errors = stats.rx_carrier_errors;
|
||||
edev->stats.rx_oversize_packets = stats.rx_oversize_packets;
|
||||
edev->stats.rx_jabbers = stats.rx_jabbers;
|
||||
edev->stats.rx_undersize_packets = stats.rx_undersize_packets;
|
||||
edev->stats.rx_fragments = stats.rx_fragments;
|
||||
edev->stats.tx_64_byte_packets = stats.tx_64_byte_packets;
|
||||
edev->stats.tx_65_to_127_byte_packets = stats.tx_65_to_127_byte_packets;
|
||||
edev->stats.tx_128_to_255_byte_packets =
|
||||
stats.tx_128_to_255_byte_packets;
|
||||
edev->stats.tx_256_to_511_byte_packets =
|
||||
stats.tx_256_to_511_byte_packets;
|
||||
edev->stats.tx_512_to_1023_byte_packets =
|
||||
stats.tx_512_to_1023_byte_packets;
|
||||
edev->stats.tx_1024_to_1518_byte_packets =
|
||||
stats.tx_1024_to_1518_byte_packets;
|
||||
edev->stats.tx_1519_to_2047_byte_packets =
|
||||
stats.tx_1519_to_2047_byte_packets;
|
||||
edev->stats.tx_2048_to_4095_byte_packets =
|
||||
stats.tx_2048_to_4095_byte_packets;
|
||||
edev->stats.tx_4096_to_9216_byte_packets =
|
||||
stats.tx_4096_to_9216_byte_packets;
|
||||
edev->stats.tx_9217_to_16383_byte_packets =
|
||||
stats.tx_9217_to_16383_byte_packets;
|
||||
edev->stats.tx_pause_frames = stats.tx_pause_frames;
|
||||
edev->stats.tx_pfc_frames = stats.tx_pfc_frames;
|
||||
edev->stats.tx_lpi_entry_count = stats.tx_lpi_entry_count;
|
||||
edev->stats.tx_total_collisions = stats.tx_total_collisions;
|
||||
edev->stats.brb_truncates = stats.brb_truncates;
|
||||
edev->stats.brb_discards = stats.brb_discards;
|
||||
edev->stats.tx_mac_ctrl_frames = stats.tx_mac_ctrl_frames;
|
||||
p_common->tx_ucast_bytes = stats.common.tx_ucast_bytes;
|
||||
p_common->tx_mcast_bytes = stats.common.tx_mcast_bytes;
|
||||
p_common->tx_bcast_bytes = stats.common.tx_bcast_bytes;
|
||||
p_common->tx_ucast_pkts = stats.common.tx_ucast_pkts;
|
||||
p_common->tx_mcast_pkts = stats.common.tx_mcast_pkts;
|
||||
p_common->tx_bcast_pkts = stats.common.tx_bcast_pkts;
|
||||
p_common->tx_err_drop_pkts = stats.common.tx_err_drop_pkts;
|
||||
p_common->coalesced_pkts = stats.common.tpa_coalesced_pkts;
|
||||
p_common->coalesced_events = stats.common.tpa_coalesced_events;
|
||||
p_common->coalesced_aborts_num = stats.common.tpa_aborts_num;
|
||||
p_common->non_coalesced_pkts = stats.common.tpa_not_coalesced_pkts;
|
||||
p_common->coalesced_bytes = stats.common.tpa_coalesced_bytes;
|
||||
|
||||
p_common->rx_64_byte_packets = stats.common.rx_64_byte_packets;
|
||||
p_common->rx_65_to_127_byte_packets =
|
||||
stats.common.rx_65_to_127_byte_packets;
|
||||
p_common->rx_128_to_255_byte_packets =
|
||||
stats.common.rx_128_to_255_byte_packets;
|
||||
p_common->rx_256_to_511_byte_packets =
|
||||
stats.common.rx_256_to_511_byte_packets;
|
||||
p_common->rx_512_to_1023_byte_packets =
|
||||
stats.common.rx_512_to_1023_byte_packets;
|
||||
p_common->rx_1024_to_1518_byte_packets =
|
||||
stats.common.rx_1024_to_1518_byte_packets;
|
||||
p_common->rx_crc_errors = stats.common.rx_crc_errors;
|
||||
p_common->rx_mac_crtl_frames = stats.common.rx_mac_crtl_frames;
|
||||
p_common->rx_pause_frames = stats.common.rx_pause_frames;
|
||||
p_common->rx_pfc_frames = stats.common.rx_pfc_frames;
|
||||
p_common->rx_align_errors = stats.common.rx_align_errors;
|
||||
p_common->rx_carrier_errors = stats.common.rx_carrier_errors;
|
||||
p_common->rx_oversize_packets = stats.common.rx_oversize_packets;
|
||||
p_common->rx_jabbers = stats.common.rx_jabbers;
|
||||
p_common->rx_undersize_packets = stats.common.rx_undersize_packets;
|
||||
p_common->rx_fragments = stats.common.rx_fragments;
|
||||
p_common->tx_64_byte_packets = stats.common.tx_64_byte_packets;
|
||||
p_common->tx_65_to_127_byte_packets =
|
||||
stats.common.tx_65_to_127_byte_packets;
|
||||
p_common->tx_128_to_255_byte_packets =
|
||||
stats.common.tx_128_to_255_byte_packets;
|
||||
p_common->tx_256_to_511_byte_packets =
|
||||
stats.common.tx_256_to_511_byte_packets;
|
||||
p_common->tx_512_to_1023_byte_packets =
|
||||
stats.common.tx_512_to_1023_byte_packets;
|
||||
p_common->tx_1024_to_1518_byte_packets =
|
||||
stats.common.tx_1024_to_1518_byte_packets;
|
||||
p_common->tx_pause_frames = stats.common.tx_pause_frames;
|
||||
p_common->tx_pfc_frames = stats.common.tx_pfc_frames;
|
||||
p_common->brb_truncates = stats.common.brb_truncates;
|
||||
p_common->brb_discards = stats.common.brb_discards;
|
||||
p_common->tx_mac_ctrl_frames = stats.common.tx_mac_ctrl_frames;
|
||||
|
||||
if (QEDE_IS_BB(edev)) {
|
||||
struct qede_stats_bb *p_bb = &edev->stats.bb;
|
||||
|
||||
p_bb->rx_1519_to_1522_byte_packets =
|
||||
stats.bb.rx_1519_to_1522_byte_packets;
|
||||
p_bb->rx_1519_to_2047_byte_packets =
|
||||
stats.bb.rx_1519_to_2047_byte_packets;
|
||||
p_bb->rx_2048_to_4095_byte_packets =
|
||||
stats.bb.rx_2048_to_4095_byte_packets;
|
||||
p_bb->rx_4096_to_9216_byte_packets =
|
||||
stats.bb.rx_4096_to_9216_byte_packets;
|
||||
p_bb->rx_9217_to_16383_byte_packets =
|
||||
stats.bb.rx_9217_to_16383_byte_packets;
|
||||
p_bb->tx_1519_to_2047_byte_packets =
|
||||
stats.bb.tx_1519_to_2047_byte_packets;
|
||||
p_bb->tx_2048_to_4095_byte_packets =
|
||||
stats.bb.tx_2048_to_4095_byte_packets;
|
||||
p_bb->tx_4096_to_9216_byte_packets =
|
||||
stats.bb.tx_4096_to_9216_byte_packets;
|
||||
p_bb->tx_9217_to_16383_byte_packets =
|
||||
stats.bb.tx_9217_to_16383_byte_packets;
|
||||
p_bb->tx_lpi_entry_count = stats.bb.tx_lpi_entry_count;
|
||||
p_bb->tx_total_collisions = stats.bb.tx_total_collisions;
|
||||
} else {
|
||||
struct qede_stats_ah *p_ah = &edev->stats.ah;
|
||||
|
||||
p_ah->rx_1519_to_max_byte_packets =
|
||||
stats.ah.rx_1519_to_max_byte_packets;
|
||||
p_ah->tx_1519_to_max_byte_packets =
|
||||
stats.ah.tx_1519_to_max_byte_packets;
|
||||
}
|
||||
}
|
||||
|
||||
static void qede_get_stats64(struct net_device *dev,
|
||||
struct rtnl_link_stats64 *stats)
|
||||
{
|
||||
struct qede_dev *edev = netdev_priv(dev);
|
||||
struct qede_stats_common *p_common;
|
||||
|
||||
qede_fill_by_demand_stats(edev);
|
||||
p_common = &edev->stats.common;
|
||||
|
||||
stats->rx_packets = edev->stats.rx_ucast_pkts +
|
||||
edev->stats.rx_mcast_pkts +
|
||||
edev->stats.rx_bcast_pkts;
|
||||
stats->tx_packets = edev->stats.tx_ucast_pkts +
|
||||
edev->stats.tx_mcast_pkts +
|
||||
edev->stats.tx_bcast_pkts;
|
||||
stats->rx_packets = p_common->rx_ucast_pkts + p_common->rx_mcast_pkts +
|
||||
p_common->rx_bcast_pkts;
|
||||
stats->tx_packets = p_common->tx_ucast_pkts + p_common->tx_mcast_pkts +
|
||||
p_common->tx_bcast_pkts;
|
||||
|
||||
stats->rx_bytes = edev->stats.rx_ucast_bytes +
|
||||
edev->stats.rx_mcast_bytes +
|
||||
edev->stats.rx_bcast_bytes;
|
||||
stats->rx_bytes = p_common->rx_ucast_bytes + p_common->rx_mcast_bytes +
|
||||
p_common->rx_bcast_bytes;
|
||||
stats->tx_bytes = p_common->tx_ucast_bytes + p_common->tx_mcast_bytes +
|
||||
p_common->tx_bcast_bytes;
|
||||
|
||||
stats->tx_bytes = edev->stats.tx_ucast_bytes +
|
||||
edev->stats.tx_mcast_bytes +
|
||||
edev->stats.tx_bcast_bytes;
|
||||
stats->tx_errors = p_common->tx_err_drop_pkts;
|
||||
stats->multicast = p_common->rx_mcast_pkts + p_common->rx_bcast_pkts;
|
||||
|
||||
stats->tx_errors = edev->stats.tx_err_drop_pkts;
|
||||
stats->multicast = edev->stats.rx_mcast_pkts +
|
||||
edev->stats.rx_bcast_pkts;
|
||||
stats->rx_fifo_errors = p_common->no_buff_discards;
|
||||
|
||||
stats->rx_fifo_errors = edev->stats.no_buff_discards;
|
||||
|
||||
stats->collisions = edev->stats.tx_total_collisions;
|
||||
stats->rx_crc_errors = edev->stats.rx_crc_errors;
|
||||
stats->rx_frame_errors = edev->stats.rx_align_errors;
|
||||
if (QEDE_IS_BB(edev))
|
||||
stats->collisions = edev->stats.bb.tx_total_collisions;
|
||||
stats->rx_crc_errors = p_common->rx_crc_errors;
|
||||
stats->rx_frame_errors = p_common->rx_align_errors;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_QED_SRIOV
|
||||
|
Reference in New Issue
Block a user