diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c | 66 | 
1 files changed, 40 insertions, 26 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c index 1e2785cd11d..667d89042d3 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c @@ -785,6 +785,10 @@ static int bnx2x_hw_stats_update(struct bnx2x *bp)  	pstats->host_port_stats_counter++; +	if (CHIP_IS_E3(bp)) +		estats->eee_tx_lpi += REG_RD(bp, +					     MISC_REG_CPMU_LP_SM_ENT_CNT_P0); +  	if (!BP_NOMCP(bp)) {  		u32 nig_timer_max =  			SHMEM_RD(bp, port_mb[BP_PORT(bp)].stat_nig_timer); @@ -855,17 +859,22 @@ static int bnx2x_storm_stats_update(struct bnx2x *bp)  		struct tstorm_per_queue_stats *tclient =  			&bp->fw_stats_data->queue_stats[i].  			tstorm_queue_statistics; -		struct tstorm_per_queue_stats *old_tclient = &fp->old_tclient; +		struct tstorm_per_queue_stats *old_tclient = +			&bnx2x_fp_stats(bp, fp)->old_tclient;  		struct ustorm_per_queue_stats *uclient =  			&bp->fw_stats_data->queue_stats[i].  			ustorm_queue_statistics; -		struct ustorm_per_queue_stats *old_uclient = &fp->old_uclient; +		struct ustorm_per_queue_stats *old_uclient = +			&bnx2x_fp_stats(bp, fp)->old_uclient;  		struct xstorm_per_queue_stats *xclient =  			&bp->fw_stats_data->queue_stats[i].  			xstorm_queue_statistics; -		struct xstorm_per_queue_stats *old_xclient = &fp->old_xclient; -		struct bnx2x_eth_q_stats *qstats = &fp->eth_q_stats; -		struct bnx2x_eth_q_stats_old *qstats_old = &fp->eth_q_stats_old; +		struct xstorm_per_queue_stats *old_xclient = +			&bnx2x_fp_stats(bp, fp)->old_xclient; +		struct bnx2x_eth_q_stats *qstats = +			&bnx2x_fp_stats(bp, fp)->eth_q_stats; +		struct bnx2x_eth_q_stats_old *qstats_old = +			&bnx2x_fp_stats(bp, fp)->eth_q_stats_old;  		u32 diff; @@ -1048,8 +1057,11 @@ static void bnx2x_net_stats_update(struct bnx2x *bp)  	nstats->tx_bytes = bnx2x_hilo(&estats->total_bytes_transmitted_hi);  	tmp = estats->mac_discard; -	for_each_rx_queue(bp, i) -		tmp += le32_to_cpu(bp->fp[i].old_tclient.checksum_discard); +	for_each_rx_queue(bp, i) { +		struct tstorm_per_queue_stats *old_tclient = +			&bp->fp_stats[i].old_tclient; +		tmp += le32_to_cpu(old_tclient->checksum_discard); +	}  	nstats->rx_dropped = tmp + bp->net_stats_old.rx_dropped;  	nstats->tx_dropped = 0; @@ -1099,9 +1111,9 @@ static void bnx2x_drv_stats_update(struct bnx2x *bp)  	int i;  	for_each_queue(bp, i) { -		struct bnx2x_eth_q_stats *qstats = &bp->fp[i].eth_q_stats; +		struct bnx2x_eth_q_stats *qstats = &bp->fp_stats[i].eth_q_stats;  		struct bnx2x_eth_q_stats_old *qstats_old = -						&bp->fp[i].eth_q_stats_old; +			&bp->fp_stats[i].eth_q_stats_old;  		UPDATE_ESTAT_QSTAT(driver_xoff);  		UPDATE_ESTAT_QSTAT(rx_err_discard_pkt); @@ -1309,12 +1321,9 @@ static void bnx2x_port_stats_base_init(struct bnx2x *bp)  	bnx2x_stats_comp(bp);  } -/** - * This function will prepare the statistics ramrod data the way +/* This function will prepare the statistics ramrod data the way   * we will only have to increment the statistics counter and   * send the ramrod each time we have to. - * - * @param bp   */  static void bnx2x_prep_fw_stats_req(struct bnx2x *bp)  { @@ -1428,7 +1437,7 @@ static void bnx2x_prep_fw_stats_req(struct bnx2x *bp)  					query[first_queue_query_index + i];  		cur_query_entry->kind = STATS_TYPE_QUEUE; -		cur_query_entry->index = bnx2x_stats_id(&bp->fp[FCOE_IDX]); +		cur_query_entry->index = bnx2x_stats_id(&bp->fp[FCOE_IDX(bp)]);  		cur_query_entry->funcID = cpu_to_le16(BP_FUNC(bp));  		cur_query_entry->address.hi =  			cpu_to_le32(U64_HI(cur_data_offset)); @@ -1479,15 +1488,19 @@ void bnx2x_stats_init(struct bnx2x *bp)  	/* function stats */  	for_each_queue(bp, i) { -		struct bnx2x_fastpath *fp = &bp->fp[i]; +		struct bnx2x_fp_stats *fp_stats = &bp->fp_stats[i]; -		memset(&fp->old_tclient, 0, sizeof(fp->old_tclient)); -		memset(&fp->old_uclient, 0, sizeof(fp->old_uclient)); -		memset(&fp->old_xclient, 0, sizeof(fp->old_xclient)); +		memset(&fp_stats->old_tclient, 0, +		       sizeof(fp_stats->old_tclient)); +		memset(&fp_stats->old_uclient, 0, +		       sizeof(fp_stats->old_uclient)); +		memset(&fp_stats->old_xclient, 0, +		       sizeof(fp_stats->old_xclient));  		if (bp->stats_init) { -			memset(&fp->eth_q_stats, 0, sizeof(fp->eth_q_stats)); -			memset(&fp->eth_q_stats_old, 0, -			       sizeof(fp->eth_q_stats_old)); +			memset(&fp_stats->eth_q_stats, 0, +			       sizeof(fp_stats->eth_q_stats)); +			memset(&fp_stats->eth_q_stats_old, 0, +			       sizeof(fp_stats->eth_q_stats_old));  		}  	} @@ -1529,8 +1542,10 @@ void bnx2x_save_statistics(struct bnx2x *bp)  	/* save queue statistics */  	for_each_eth_queue(bp, i) {  		struct bnx2x_fastpath *fp = &bp->fp[i]; -		struct bnx2x_eth_q_stats *qstats = &fp->eth_q_stats; -		struct bnx2x_eth_q_stats_old *qstats_old = &fp->eth_q_stats_old; +		struct bnx2x_eth_q_stats *qstats = +			&bnx2x_fp_stats(bp, fp)->eth_q_stats; +		struct bnx2x_eth_q_stats_old *qstats_old = +			&bnx2x_fp_stats(bp, fp)->eth_q_stats_old;  		UPDATE_QSTAT_OLD(total_unicast_bytes_received_hi);  		UPDATE_QSTAT_OLD(total_unicast_bytes_received_lo); @@ -1569,7 +1584,7 @@ void bnx2x_afex_collect_stats(struct bnx2x *bp, void *void_afex_stats,  	struct afex_stats *afex_stats = (struct afex_stats *)void_afex_stats;  	struct bnx2x_eth_stats *estats = &bp->eth_stats;  	struct per_queue_stats *fcoe_q_stats = -		&bp->fw_stats_data->queue_stats[FCOE_IDX]; +		&bp->fw_stats_data->queue_stats[FCOE_IDX(bp)];  	struct tstorm_per_queue_stats *fcoe_q_tstorm_stats =  		&fcoe_q_stats->tstorm_queue_statistics; @@ -1586,8 +1601,7 @@ void bnx2x_afex_collect_stats(struct bnx2x *bp, void *void_afex_stats,  	memset(afex_stats, 0, sizeof(struct afex_stats));  	for_each_eth_queue(bp, i) { -		struct bnx2x_fastpath *fp = &bp->fp[i]; -		struct bnx2x_eth_q_stats *qstats = &fp->eth_q_stats; +		struct bnx2x_eth_q_stats *qstats = &bp->fp_stats[i].eth_q_stats;  		ADD_64(afex_stats->rx_unicast_bytes_hi,  		       qstats->total_unicast_bytes_received_hi,  |