static void nicvf_get_ethtool_stats(struct net_device *netdev, struct ethtool_stats *stats, u64 *data) { struct nicvf *nic = netdev_priv(netdev); int stat, qidx; nicvf_update_stats(nic); /* Update LMAC stats */ nicvf_update_lmac_stats(nic); for (stat = 0; stat < nicvf_n_hw_stats; stat++) *(data++) = ((u64 *)&nic->stats) [nicvf_hw_stats[stat].index]; for (stat = 0; stat < nicvf_n_drv_stats; stat++) *(data++) = ((u64 *)&nic->drv_stats) [nicvf_drv_stats[stat].index]; for (qidx = 0; qidx < nic->qs->rq_cnt; qidx++) { for (stat = 0; stat < nicvf_n_queue_stats; stat++) *(data++) = ((u64 *)&nic->qs->rq[qidx].stats) [nicvf_queue_stats[stat].index]; } for (qidx = 0; qidx < nic->qs->sq_cnt; qidx++) { for (stat = 0; stat < nicvf_n_queue_stats; stat++) *(data++) = ((u64 *)&nic->qs->sq[qidx].stats) [nicvf_queue_stats[stat].index]; } for (stat = 0; stat < BGX_RX_STATS_COUNT; stat++) *(data++) = nic->bgx_stats.rx_stats[stat]; for (stat = 0; stat < BGX_TX_STATS_COUNT; stat++) *(data++) = nic->bgx_stats.tx_stats[stat]; }
static void nicvf_get_ethtool_stats(struct net_device *netdev, struct ethtool_stats *stats, u64 *data) { struct nicvf *nic = netdev_priv(netdev); int stat; int sqs; nicvf_update_stats(nic); /* Update LMAC stats */ nicvf_update_lmac_stats(nic); for (stat = 0; stat < nicvf_n_hw_stats; stat++) *(data++) = ((u64 *)&nic->hw_stats) [nicvf_hw_stats[stat].index]; for (stat = 0; stat < nicvf_n_drv_stats; stat++) *(data++) = ((u64 *)&nic->drv_stats) [nicvf_drv_stats[stat].index]; nicvf_get_qset_stats(nic, stats, &data); for (sqs = 0; sqs < nic->sqs_count; sqs++) { if (!nic->snicvf[sqs]) continue; nicvf_get_qset_stats(nic->snicvf[sqs], stats, &data); } for (stat = 0; stat < BGX_RX_STATS_COUNT; stat++) *(data++) = nic->bgx_stats.rx_stats[stat]; for (stat = 0; stat < BGX_TX_STATS_COUNT; stat++) *(data++) = nic->bgx_stats.tx_stats[stat]; }