Lines Matching refs:bp
42 static inline u16 bnx2x_get_port_stats_dma_len(struct bnx2x *bp) in bnx2x_get_port_stats_dma_len() argument
47 if (SHMEM2_HAS(bp, sizeof_port_stats)) { in bnx2x_get_port_stats_dma_len()
48 u32 size = SHMEM2_RD(bp, sizeof_port_stats); in bnx2x_get_port_stats_dma_len()
64 if (bp->flags & BC_SUPPORTS_PFC_STATS) { in bnx2x_get_port_stats_dma_len()
82 static void bnx2x_dp_stats(struct bnx2x *bp) in bnx2x_dp_stats() argument
94 bp->fw_stats_req->hdr.cmd_num, in bnx2x_dp_stats()
95 bp->fw_stats_req->hdr.reserved0, in bnx2x_dp_stats()
96 bp->fw_stats_req->hdr.drv_stats_counter, in bnx2x_dp_stats()
97 bp->fw_stats_req->hdr.reserved1, in bnx2x_dp_stats()
98 bp->fw_stats_req->hdr.stats_counters_addrs.hi, in bnx2x_dp_stats()
99 bp->fw_stats_req->hdr.stats_counters_addrs.lo); in bnx2x_dp_stats()
101 for (i = 0; i < bp->fw_stats_req->hdr.cmd_num; i++) { in bnx2x_dp_stats()
109 i, bp->fw_stats_req->query[i].kind, in bnx2x_dp_stats()
110 bp->fw_stats_req->query[i].index, in bnx2x_dp_stats()
111 bp->fw_stats_req->query[i].funcID, in bnx2x_dp_stats()
112 bp->fw_stats_req->query[i].reserved, in bnx2x_dp_stats()
113 bp->fw_stats_req->query[i].address.hi, in bnx2x_dp_stats()
114 bp->fw_stats_req->query[i].address.lo); in bnx2x_dp_stats()
124 static void bnx2x_storm_stats_post(struct bnx2x *bp) in bnx2x_storm_stats_post() argument
126 if (!bp->stats_pending) { in bnx2x_storm_stats_post()
129 spin_lock_bh(&bp->stats_lock); in bnx2x_storm_stats_post()
131 if (bp->stats_pending) { in bnx2x_storm_stats_post()
132 spin_unlock_bh(&bp->stats_lock); in bnx2x_storm_stats_post()
136 bp->fw_stats_req->hdr.drv_stats_counter = in bnx2x_storm_stats_post()
137 cpu_to_le16(bp->stats_counter++); in bnx2x_storm_stats_post()
140 le16_to_cpu(bp->fw_stats_req->hdr.drv_stats_counter)); in bnx2x_storm_stats_post()
143 bnx2x_iov_adjust_stats_req(bp); in bnx2x_storm_stats_post()
144 bnx2x_dp_stats(bp); in bnx2x_storm_stats_post()
147 rc = bnx2x_sp_post(bp, RAMROD_CMD_ID_COMMON_STAT_QUERY, 0, in bnx2x_storm_stats_post()
148 U64_HI(bp->fw_stats_req_mapping), in bnx2x_storm_stats_post()
149 U64_LO(bp->fw_stats_req_mapping), in bnx2x_storm_stats_post()
152 bp->stats_pending = 1; in bnx2x_storm_stats_post()
154 spin_unlock_bh(&bp->stats_lock); in bnx2x_storm_stats_post()
158 static void bnx2x_hw_stats_post(struct bnx2x *bp) in bnx2x_hw_stats_post() argument
160 struct dmae_command *dmae = &bp->stats_dmae; in bnx2x_hw_stats_post()
161 u32 *stats_comp = bnx2x_sp(bp, stats_comp); in bnx2x_hw_stats_post()
164 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_hw_stats_post()
168 if (bp->func_stx) in bnx2x_hw_stats_post()
169 memcpy(bnx2x_sp(bp, func_stats), &bp->func_stats, in bnx2x_hw_stats_post()
170 sizeof(bp->func_stats)); in bnx2x_hw_stats_post()
173 if (bp->executer_idx) { in bnx2x_hw_stats_post()
174 int loader_idx = PMF_DMAE_C(bp); in bnx2x_hw_stats_post()
175 u32 opcode = bnx2x_dmae_opcode(bp, DMAE_SRC_PCI, DMAE_DST_GRC, in bnx2x_hw_stats_post()
181 dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, dmae[0])); in bnx2x_hw_stats_post()
182 dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, dmae[0])); in bnx2x_hw_stats_post()
188 if (CHIP_IS_E1(bp)) in bnx2x_hw_stats_post()
195 bnx2x_post_dmae(bp, dmae, loader_idx); in bnx2x_hw_stats_post()
197 } else if (bp->func_stx) { in bnx2x_hw_stats_post()
199 bnx2x_issue_dmae_with_comp(bp, dmae, stats_comp); in bnx2x_hw_stats_post()
203 static void bnx2x_stats_comp(struct bnx2x *bp) in bnx2x_stats_comp() argument
205 u32 *stats_comp = bnx2x_sp(bp, stats_comp); in bnx2x_stats_comp()
224 static void __bnx2x_stats_pmf_update(struct bnx2x *bp) in __bnx2x_stats_pmf_update() argument
228 int loader_idx = PMF_DMAE_C(bp); in __bnx2x_stats_pmf_update()
229 u32 *stats_comp = bnx2x_sp(bp, stats_comp); in __bnx2x_stats_pmf_update()
232 if (!bp->port.pmf || !bp->port.port_stx) { in __bnx2x_stats_pmf_update()
237 bp->executer_idx = 0; in __bnx2x_stats_pmf_update()
239 opcode = bnx2x_dmae_opcode(bp, DMAE_SRC_GRC, DMAE_DST_PCI, false, 0); in __bnx2x_stats_pmf_update()
241 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in __bnx2x_stats_pmf_update()
243 dmae->src_addr_lo = bp->port.port_stx >> 2; in __bnx2x_stats_pmf_update()
245 dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, port_stats)); in __bnx2x_stats_pmf_update()
246 dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, port_stats)); in __bnx2x_stats_pmf_update()
252 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in __bnx2x_stats_pmf_update()
254 dmae->src_addr_lo = (bp->port.port_stx >> 2) + DMAE_LEN32_RD_MAX; in __bnx2x_stats_pmf_update()
256 dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, port_stats) + in __bnx2x_stats_pmf_update()
258 dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, port_stats) + in __bnx2x_stats_pmf_update()
260 dmae->len = bnx2x_get_port_stats_dma_len(bp) - DMAE_LEN32_RD_MAX; in __bnx2x_stats_pmf_update()
262 dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, stats_comp)); in __bnx2x_stats_pmf_update()
263 dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, stats_comp)); in __bnx2x_stats_pmf_update()
267 bnx2x_hw_stats_post(bp); in __bnx2x_stats_pmf_update()
268 bnx2x_stats_comp(bp); in __bnx2x_stats_pmf_update()
271 static void bnx2x_port_stats_init(struct bnx2x *bp) in bnx2x_port_stats_init() argument
274 int port = BP_PORT(bp); in bnx2x_port_stats_init()
276 int loader_idx = PMF_DMAE_C(bp); in bnx2x_port_stats_init()
278 u32 *stats_comp = bnx2x_sp(bp, stats_comp); in bnx2x_port_stats_init()
281 if (!bp->link_vars.link_up || !bp->port.pmf) { in bnx2x_port_stats_init()
286 bp->executer_idx = 0; in bnx2x_port_stats_init()
289 opcode = bnx2x_dmae_opcode(bp, DMAE_SRC_PCI, DMAE_DST_GRC, in bnx2x_port_stats_init()
292 if (bp->port.port_stx) { in bnx2x_port_stats_init()
294 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
296 dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, port_stats)); in bnx2x_port_stats_init()
297 dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, port_stats)); in bnx2x_port_stats_init()
298 dmae->dst_addr_lo = bp->port.port_stx >> 2; in bnx2x_port_stats_init()
300 dmae->len = bnx2x_get_port_stats_dma_len(bp); in bnx2x_port_stats_init()
306 if (bp->func_stx) { in bnx2x_port_stats_init()
308 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
310 dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, func_stats)); in bnx2x_port_stats_init()
311 dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, func_stats)); in bnx2x_port_stats_init()
312 dmae->dst_addr_lo = bp->func_stx >> 2; in bnx2x_port_stats_init()
321 opcode = bnx2x_dmae_opcode(bp, DMAE_SRC_GRC, DMAE_DST_PCI, in bnx2x_port_stats_init()
325 if (bp->link_vars.mac_type == MAC_TYPE_EMAC) { in bnx2x_port_stats_init()
329 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
334 dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats)); in bnx2x_port_stats_init()
335 dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats)); in bnx2x_port_stats_init()
342 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
347 dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats) + in bnx2x_port_stats_init()
349 dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats) + in bnx2x_port_stats_init()
357 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
362 dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats) + in bnx2x_port_stats_init()
364 dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats) + in bnx2x_port_stats_init()
375 switch (bp->link_vars.mac_type) { in bnx2x_port_stats_init()
382 if (CHIP_IS_E1x(bp)) { in bnx2x_port_stats_init()
411 tx_len = sizeof(bp->slowpath-> in bnx2x_port_stats_init()
413 rx_len = sizeof(bp->slowpath-> in bnx2x_port_stats_init()
419 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
424 dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats)); in bnx2x_port_stats_init()
425 dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats)); in bnx2x_port_stats_init()
431 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
436 U64_LO(bnx2x_sp_mapping(bp, mac_stats) + (tx_len << 2)); in bnx2x_port_stats_init()
438 U64_HI(bnx2x_sp_mapping(bp, mac_stats) + (tx_len << 2)); in bnx2x_port_stats_init()
446 if (!CHIP_IS_E3(bp)) { in bnx2x_port_stats_init()
447 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
452 dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, nig_stats) + in bnx2x_port_stats_init()
454 dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, nig_stats) + in bnx2x_port_stats_init()
461 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
466 dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, nig_stats) + in bnx2x_port_stats_init()
468 dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, nig_stats) + in bnx2x_port_stats_init()
476 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_init()
477 dmae->opcode = bnx2x_dmae_opcode(bp, DMAE_SRC_GRC, DMAE_DST_PCI, in bnx2x_port_stats_init()
482 dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, nig_stats)); in bnx2x_port_stats_init()
483 dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, nig_stats)); in bnx2x_port_stats_init()
486 dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_port_stats_init()
487 dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_port_stats_init()
493 static void bnx2x_func_stats_init(struct bnx2x *bp) in bnx2x_func_stats_init() argument
495 struct dmae_command *dmae = &bp->stats_dmae; in bnx2x_func_stats_init()
496 u32 *stats_comp = bnx2x_sp(bp, stats_comp); in bnx2x_func_stats_init()
499 if (!bp->func_stx) { in bnx2x_func_stats_init()
504 bp->executer_idx = 0; in bnx2x_func_stats_init()
507 dmae->opcode = bnx2x_dmae_opcode(bp, DMAE_SRC_PCI, DMAE_DST_GRC, in bnx2x_func_stats_init()
509 dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, func_stats)); in bnx2x_func_stats_init()
510 dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, func_stats)); in bnx2x_func_stats_init()
511 dmae->dst_addr_lo = bp->func_stx >> 2; in bnx2x_func_stats_init()
514 dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_func_stats_init()
515 dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_func_stats_init()
522 static void __bnx2x_stats_start(struct bnx2x *bp) in __bnx2x_stats_start() argument
524 if (IS_PF(bp)) { in __bnx2x_stats_start()
525 if (bp->port.pmf) in __bnx2x_stats_start()
526 bnx2x_port_stats_init(bp); in __bnx2x_stats_start()
528 else if (bp->func_stx) in __bnx2x_stats_start()
529 bnx2x_func_stats_init(bp); in __bnx2x_stats_start()
531 bnx2x_hw_stats_post(bp); in __bnx2x_stats_start()
532 bnx2x_storm_stats_post(bp); in __bnx2x_stats_start()
535 bp->stats_started = true; in __bnx2x_stats_start()
538 static void bnx2x_stats_start(struct bnx2x *bp) in bnx2x_stats_start() argument
540 if (down_timeout(&bp->stats_sema, HZ/10)) in bnx2x_stats_start()
542 __bnx2x_stats_start(bp); in bnx2x_stats_start()
543 up(&bp->stats_sema); in bnx2x_stats_start()
546 static void bnx2x_stats_pmf_start(struct bnx2x *bp) in bnx2x_stats_pmf_start() argument
548 if (down_timeout(&bp->stats_sema, HZ/10)) in bnx2x_stats_pmf_start()
550 bnx2x_stats_comp(bp); in bnx2x_stats_pmf_start()
551 __bnx2x_stats_pmf_update(bp); in bnx2x_stats_pmf_start()
552 __bnx2x_stats_start(bp); in bnx2x_stats_pmf_start()
553 up(&bp->stats_sema); in bnx2x_stats_pmf_start()
556 static void bnx2x_stats_pmf_update(struct bnx2x *bp) in bnx2x_stats_pmf_update() argument
558 if (down_timeout(&bp->stats_sema, HZ/10)) in bnx2x_stats_pmf_update()
560 __bnx2x_stats_pmf_update(bp); in bnx2x_stats_pmf_update()
561 up(&bp->stats_sema); in bnx2x_stats_pmf_update()
564 static void bnx2x_stats_restart(struct bnx2x *bp) in bnx2x_stats_restart() argument
569 if (IS_VF(bp)) in bnx2x_stats_restart()
571 if (down_timeout(&bp->stats_sema, HZ/10)) in bnx2x_stats_restart()
573 bnx2x_stats_comp(bp); in bnx2x_stats_restart()
574 __bnx2x_stats_start(bp); in bnx2x_stats_restart()
575 up(&bp->stats_sema); in bnx2x_stats_restart()
578 static void bnx2x_bmac_stats_update(struct bnx2x *bp) in bnx2x_bmac_stats_update() argument
580 struct host_port_stats *pstats = bnx2x_sp(bp, port_stats); in bnx2x_bmac_stats_update()
581 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_bmac_stats_update()
587 if (CHIP_IS_E1x(bp)) { in bnx2x_bmac_stats_update()
588 struct bmac1_stats *new = bnx2x_sp(bp, mac_stats.bmac1_stats); in bnx2x_bmac_stats_update()
623 struct bmac2_stats *new = bnx2x_sp(bp, mac_stats.bmac2_stats); in bnx2x_bmac_stats_update()
684 static void bnx2x_mstat_stats_update(struct bnx2x *bp) in bnx2x_mstat_stats_update() argument
686 struct host_port_stats *pstats = bnx2x_sp(bp, port_stats); in bnx2x_mstat_stats_update()
687 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_mstat_stats_update()
689 struct mstat_stats *new = bnx2x_sp(bp, mac_stats.mstat_stats); in bnx2x_mstat_stats_update()
774 static void bnx2x_emac_stats_update(struct bnx2x *bp) in bnx2x_emac_stats_update() argument
776 struct emac_stats *new = bnx2x_sp(bp, mac_stats.emac_stats); in bnx2x_emac_stats_update()
777 struct host_port_stats *pstats = bnx2x_sp(bp, port_stats); in bnx2x_emac_stats_update()
778 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_emac_stats_update()
831 static int bnx2x_hw_stats_update(struct bnx2x *bp) in bnx2x_hw_stats_update() argument
833 struct nig_stats *new = bnx2x_sp(bp, nig_stats); in bnx2x_hw_stats_update()
834 struct nig_stats *old = &(bp->port.old_nig_stats); in bnx2x_hw_stats_update()
835 struct host_port_stats *pstats = bnx2x_sp(bp, port_stats); in bnx2x_hw_stats_update()
836 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_hw_stats_update()
842 switch (bp->link_vars.mac_type) { in bnx2x_hw_stats_update()
844 bnx2x_bmac_stats_update(bp); in bnx2x_hw_stats_update()
848 bnx2x_emac_stats_update(bp); in bnx2x_hw_stats_update()
853 bnx2x_mstat_stats_update(bp); in bnx2x_hw_stats_update()
870 if (!CHIP_IS_E3(bp)) { in bnx2x_hw_stats_update()
886 if (CHIP_IS_E3(bp)) { in bnx2x_hw_stats_update()
887 u32 lpi_reg = BP_PORT(bp) ? MISC_REG_CPMU_LP_SM_ENT_CNT_P1 in bnx2x_hw_stats_update()
889 estats->eee_tx_lpi += REG_RD(bp, lpi_reg); in bnx2x_hw_stats_update()
892 if (!BP_NOMCP(bp)) { in bnx2x_hw_stats_update()
894 SHMEM_RD(bp, port_mb[BP_PORT(bp)].stat_nig_timer); in bnx2x_hw_stats_update()
905 static int bnx2x_storm_stats_validate_counters(struct bnx2x *bp) in bnx2x_storm_stats_validate_counters() argument
907 struct stats_counter *counters = &bp->fw_stats_data->storm_counters; in bnx2x_storm_stats_validate_counters()
912 cur_stats_counter = bp->stats_counter - 1; in bnx2x_storm_stats_validate_counters()
918 le16_to_cpu(counters->xstats_counter), bp->stats_counter); in bnx2x_storm_stats_validate_counters()
925 le16_to_cpu(counters->ustats_counter), bp->stats_counter); in bnx2x_storm_stats_validate_counters()
932 le16_to_cpu(counters->cstats_counter), bp->stats_counter); in bnx2x_storm_stats_validate_counters()
939 le16_to_cpu(counters->tstats_counter), bp->stats_counter); in bnx2x_storm_stats_validate_counters()
945 static int bnx2x_storm_stats_update(struct bnx2x *bp) in bnx2x_storm_stats_update() argument
948 &bp->fw_stats_data->port.tstorm_port_statistics; in bnx2x_storm_stats_update()
950 &bp->fw_stats_data->pf.tstorm_pf_statistics; in bnx2x_storm_stats_update()
951 struct host_func_stats *fstats = &bp->func_stats; in bnx2x_storm_stats_update()
952 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_storm_stats_update()
953 struct bnx2x_eth_stats_old *estats_old = &bp->eth_stats_old; in bnx2x_storm_stats_update()
957 if (IS_PF(bp) && bnx2x_storm_stats_validate_counters(bp)) in bnx2x_storm_stats_update()
963 for_each_eth_queue(bp, i) { in bnx2x_storm_stats_update()
964 struct bnx2x_fastpath *fp = &bp->fp[i]; in bnx2x_storm_stats_update()
966 &bp->fw_stats_data->queue_stats[i]. in bnx2x_storm_stats_update()
969 &bnx2x_fp_stats(bp, fp)->old_tclient; in bnx2x_storm_stats_update()
971 &bp->fw_stats_data->queue_stats[i]. in bnx2x_storm_stats_update()
974 &bnx2x_fp_stats(bp, fp)->old_uclient; in bnx2x_storm_stats_update()
976 &bp->fw_stats_data->queue_stats[i]. in bnx2x_storm_stats_update()
979 &bnx2x_fp_stats(bp, fp)->old_xclient; in bnx2x_storm_stats_update()
981 &bnx2x_fp_stats(bp, fp)->eth_q_stats; in bnx2x_storm_stats_update()
983 &bnx2x_fp_stats(bp, fp)->eth_q_stats_old; in bnx2x_storm_stats_update()
1128 if (bp->port.pmf) { in bnx2x_storm_stats_update()
1129 struct bnx2x_fw_port_stats_old *fwstats = &bp->fw_stats_old; in bnx2x_storm_stats_update()
1138 bp->stats_pending = 0; in bnx2x_storm_stats_update()
1143 static void bnx2x_net_stats_update(struct bnx2x *bp) in bnx2x_net_stats_update() argument
1145 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_net_stats_update()
1146 struct net_device_stats *nstats = &bp->dev->stats; in bnx2x_net_stats_update()
1165 for_each_rx_queue(bp, i) { in bnx2x_net_stats_update()
1167 &bp->fp_stats[i].old_tclient; in bnx2x_net_stats_update()
1170 nstats->rx_dropped = tmp + bp->net_stats_old.rx_dropped; in bnx2x_net_stats_update()
1213 static void bnx2x_drv_stats_update(struct bnx2x *bp) in bnx2x_drv_stats_update() argument
1215 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_drv_stats_update()
1218 for_each_queue(bp, i) { in bnx2x_drv_stats_update()
1219 struct bnx2x_eth_q_stats *qstats = &bp->fp_stats[i].eth_q_stats; in bnx2x_drv_stats_update()
1221 &bp->fp_stats[i].eth_q_stats_old; in bnx2x_drv_stats_update()
1231 static bool bnx2x_edebug_stats_stopped(struct bnx2x *bp) in bnx2x_edebug_stats_stopped() argument
1235 if (SHMEM2_HAS(bp, edebug_driver_if[1])) { in bnx2x_edebug_stats_stopped()
1236 val = SHMEM2_RD(bp, edebug_driver_if[1]); in bnx2x_edebug_stats_stopped()
1245 static void bnx2x_stats_update(struct bnx2x *bp) in bnx2x_stats_update() argument
1247 u32 *stats_comp = bnx2x_sp(bp, stats_comp); in bnx2x_stats_update()
1252 if (down_trylock(&bp->stats_sema)) in bnx2x_stats_update()
1255 if (bnx2x_edebug_stats_stopped(bp) || !bp->stats_started) in bnx2x_stats_update()
1258 if (IS_PF(bp)) { in bnx2x_stats_update()
1262 if (bp->port.pmf) in bnx2x_stats_update()
1263 bnx2x_hw_stats_update(bp); in bnx2x_stats_update()
1265 if (bnx2x_storm_stats_update(bp)) { in bnx2x_stats_update()
1266 if (bp->stats_pending++ == 3) { in bnx2x_stats_update()
1276 bnx2x_storm_stats_update(bp); in bnx2x_stats_update()
1279 bnx2x_net_stats_update(bp); in bnx2x_stats_update()
1280 bnx2x_drv_stats_update(bp); in bnx2x_stats_update()
1283 if (IS_VF(bp)) in bnx2x_stats_update()
1286 if (netif_msg_timer(bp)) { in bnx2x_stats_update()
1287 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_stats_update()
1289 netdev_dbg(bp->dev, "brb drops %u brb truncate %u\n", in bnx2x_stats_update()
1293 bnx2x_hw_stats_post(bp); in bnx2x_stats_update()
1294 bnx2x_storm_stats_post(bp); in bnx2x_stats_update()
1297 up(&bp->stats_sema); in bnx2x_stats_update()
1300 static void bnx2x_port_stats_stop(struct bnx2x *bp) in bnx2x_port_stats_stop() argument
1304 int loader_idx = PMF_DMAE_C(bp); in bnx2x_port_stats_stop()
1305 u32 *stats_comp = bnx2x_sp(bp, stats_comp); in bnx2x_port_stats_stop()
1307 bp->executer_idx = 0; in bnx2x_port_stats_stop()
1309 opcode = bnx2x_dmae_opcode(bp, DMAE_SRC_PCI, DMAE_DST_GRC, false, 0); in bnx2x_port_stats_stop()
1311 if (bp->port.port_stx) { in bnx2x_port_stats_stop()
1313 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_stop()
1314 if (bp->func_stx) in bnx2x_port_stats_stop()
1321 dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, port_stats)); in bnx2x_port_stats_stop()
1322 dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, port_stats)); in bnx2x_port_stats_stop()
1323 dmae->dst_addr_lo = bp->port.port_stx >> 2; in bnx2x_port_stats_stop()
1325 dmae->len = bnx2x_get_port_stats_dma_len(bp); in bnx2x_port_stats_stop()
1326 if (bp->func_stx) { in bnx2x_port_stats_stop()
1332 U64_LO(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_port_stats_stop()
1334 U64_HI(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_port_stats_stop()
1341 if (bp->func_stx) { in bnx2x_port_stats_stop()
1343 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_stop()
1346 dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, func_stats)); in bnx2x_port_stats_stop()
1347 dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, func_stats)); in bnx2x_port_stats_stop()
1348 dmae->dst_addr_lo = bp->func_stx >> 2; in bnx2x_port_stats_stop()
1351 dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_port_stats_stop()
1352 dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_port_stats_stop()
1359 static void bnx2x_stats_stop(struct bnx2x *bp) in bnx2x_stats_stop() argument
1363 if (down_timeout(&bp->stats_sema, HZ/10)) in bnx2x_stats_stop()
1366 bp->stats_started = false; in bnx2x_stats_stop()
1368 bnx2x_stats_comp(bp); in bnx2x_stats_stop()
1370 if (bp->port.pmf) in bnx2x_stats_stop()
1371 update = (bnx2x_hw_stats_update(bp) == 0); in bnx2x_stats_stop()
1373 update |= (bnx2x_storm_stats_update(bp) == 0); in bnx2x_stats_stop()
1376 bnx2x_net_stats_update(bp); in bnx2x_stats_stop()
1378 if (bp->port.pmf) in bnx2x_stats_stop()
1379 bnx2x_port_stats_stop(bp); in bnx2x_stats_stop()
1381 bnx2x_hw_stats_post(bp); in bnx2x_stats_stop()
1382 bnx2x_stats_comp(bp); in bnx2x_stats_stop()
1385 up(&bp->stats_sema); in bnx2x_stats_stop()
1388 static void bnx2x_stats_do_nothing(struct bnx2x *bp) in bnx2x_stats_do_nothing() argument
1393 void (*action)(struct bnx2x *bp);
1411 void bnx2x_stats_handle(struct bnx2x *bp, enum bnx2x_stats_event event) in bnx2x_stats_handle() argument
1414 void (*action)(struct bnx2x *bp); in bnx2x_stats_handle()
1415 if (unlikely(bp->panic)) in bnx2x_stats_handle()
1418 spin_lock_bh(&bp->stats_lock); in bnx2x_stats_handle()
1419 state = bp->stats_state; in bnx2x_stats_handle()
1420 bp->stats_state = bnx2x_stats_stm[state][event].next_state; in bnx2x_stats_handle()
1422 spin_unlock_bh(&bp->stats_lock); in bnx2x_stats_handle()
1424 action(bp); in bnx2x_stats_handle()
1426 if ((event != STATS_EVENT_UPDATE) || netif_msg_timer(bp)) in bnx2x_stats_handle()
1428 state, event, bp->stats_state); in bnx2x_stats_handle()
1431 static void bnx2x_port_stats_base_init(struct bnx2x *bp) in bnx2x_port_stats_base_init() argument
1434 u32 *stats_comp = bnx2x_sp(bp, stats_comp); in bnx2x_port_stats_base_init()
1437 if (!bp->port.pmf || !bp->port.port_stx) { in bnx2x_port_stats_base_init()
1442 bp->executer_idx = 0; in bnx2x_port_stats_base_init()
1444 dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); in bnx2x_port_stats_base_init()
1445 dmae->opcode = bnx2x_dmae_opcode(bp, DMAE_SRC_PCI, DMAE_DST_GRC, in bnx2x_port_stats_base_init()
1447 dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, port_stats)); in bnx2x_port_stats_base_init()
1448 dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, port_stats)); in bnx2x_port_stats_base_init()
1449 dmae->dst_addr_lo = bp->port.port_stx >> 2; in bnx2x_port_stats_base_init()
1451 dmae->len = bnx2x_get_port_stats_dma_len(bp); in bnx2x_port_stats_base_init()
1452 dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_port_stats_base_init()
1453 dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, stats_comp)); in bnx2x_port_stats_base_init()
1457 bnx2x_hw_stats_post(bp); in bnx2x_port_stats_base_init()
1458 bnx2x_stats_comp(bp); in bnx2x_port_stats_base_init()
1465 static void bnx2x_prep_fw_stats_req(struct bnx2x *bp) in bnx2x_prep_fw_stats_req() argument
1469 struct stats_query_header *stats_hdr = &bp->fw_stats_req->hdr; in bnx2x_prep_fw_stats_req()
1474 stats_hdr->cmd_num = bp->fw_stats_num; in bnx2x_prep_fw_stats_req()
1483 cur_data_offset = bp->fw_stats_data_mapping + in bnx2x_prep_fw_stats_req()
1494 memset(&bp->fw_stats_data->storm_counters, 0xff, in bnx2x_prep_fw_stats_req()
1498 cur_data_offset = bp->fw_stats_data_mapping + in bnx2x_prep_fw_stats_req()
1501 cur_query_entry = &bp->fw_stats_req->query[BNX2X_PORT_QUERY_IDX]; in bnx2x_prep_fw_stats_req()
1505 cur_query_entry->index = BP_PORT(bp); in bnx2x_prep_fw_stats_req()
1507 cur_query_entry->funcID = cpu_to_le16(BP_FUNC(bp)); in bnx2x_prep_fw_stats_req()
1512 cur_data_offset = bp->fw_stats_data_mapping + in bnx2x_prep_fw_stats_req()
1515 cur_query_entry = &bp->fw_stats_req->query[BNX2X_PF_QUERY_IDX]; in bnx2x_prep_fw_stats_req()
1519 cur_query_entry->index = BP_PORT(bp); in bnx2x_prep_fw_stats_req()
1520 cur_query_entry->funcID = cpu_to_le16(BP_FUNC(bp)); in bnx2x_prep_fw_stats_req()
1525 if (!NO_FCOE(bp)) { in bnx2x_prep_fw_stats_req()
1526 cur_data_offset = bp->fw_stats_data_mapping + in bnx2x_prep_fw_stats_req()
1530 &bp->fw_stats_req->query[BNX2X_FCOE_QUERY_IDX]; in bnx2x_prep_fw_stats_req()
1534 cur_query_entry->index = BP_PORT(bp); in bnx2x_prep_fw_stats_req()
1535 cur_query_entry->funcID = cpu_to_le16(BP_FUNC(bp)); in bnx2x_prep_fw_stats_req()
1543 cur_data_offset = bp->fw_stats_data_mapping + in bnx2x_prep_fw_stats_req()
1549 if (!NO_FCOE(bp)) in bnx2x_prep_fw_stats_req()
1554 for_each_eth_queue(bp, i) { in bnx2x_prep_fw_stats_req()
1556 &bp->fw_stats_req-> in bnx2x_prep_fw_stats_req()
1560 cur_query_entry->index = bnx2x_stats_id(&bp->fp[i]); in bnx2x_prep_fw_stats_req()
1561 cur_query_entry->funcID = cpu_to_le16(BP_FUNC(bp)); in bnx2x_prep_fw_stats_req()
1571 if (!NO_FCOE(bp)) { in bnx2x_prep_fw_stats_req()
1573 &bp->fw_stats_req-> in bnx2x_prep_fw_stats_req()
1577 cur_query_entry->index = bnx2x_stats_id(&bp->fp[FCOE_IDX(bp)]); in bnx2x_prep_fw_stats_req()
1578 cur_query_entry->funcID = cpu_to_le16(BP_FUNC(bp)); in bnx2x_prep_fw_stats_req()
1586 void bnx2x_memset_stats(struct bnx2x *bp) in bnx2x_memset_stats() argument
1591 for_each_queue(bp, i) { in bnx2x_memset_stats()
1592 struct bnx2x_fp_stats *fp_stats = &bp->fp_stats[i]; in bnx2x_memset_stats()
1600 if (bp->stats_init) { in bnx2x_memset_stats()
1608 memset(&bp->dev->stats, 0, sizeof(bp->dev->stats)); in bnx2x_memset_stats()
1610 if (bp->stats_init) { in bnx2x_memset_stats()
1611 memset(&bp->net_stats_old, 0, sizeof(bp->net_stats_old)); in bnx2x_memset_stats()
1612 memset(&bp->fw_stats_old, 0, sizeof(bp->fw_stats_old)); in bnx2x_memset_stats()
1613 memset(&bp->eth_stats_old, 0, sizeof(bp->eth_stats_old)); in bnx2x_memset_stats()
1614 memset(&bp->eth_stats, 0, sizeof(bp->eth_stats)); in bnx2x_memset_stats()
1615 memset(&bp->func_stats, 0, sizeof(bp->func_stats)); in bnx2x_memset_stats()
1618 bp->stats_state = STATS_STATE_DISABLED; in bnx2x_memset_stats()
1620 if (bp->port.pmf && bp->port.port_stx) in bnx2x_memset_stats()
1621 bnx2x_port_stats_base_init(bp); in bnx2x_memset_stats()
1624 bp->stats_init = false; in bnx2x_memset_stats()
1627 void bnx2x_stats_init(struct bnx2x *bp) in bnx2x_stats_init() argument
1629 int /*abs*/port = BP_PORT(bp); in bnx2x_stats_init()
1630 int mb_idx = BP_FW_MB_IDX(bp); in bnx2x_stats_init()
1632 if (IS_VF(bp)) { in bnx2x_stats_init()
1633 bnx2x_memset_stats(bp); in bnx2x_stats_init()
1637 bp->stats_pending = 0; in bnx2x_stats_init()
1638 bp->executer_idx = 0; in bnx2x_stats_init()
1639 bp->stats_counter = 0; in bnx2x_stats_init()
1642 if (!BP_NOMCP(bp)) { in bnx2x_stats_init()
1643 bp->port.port_stx = SHMEM_RD(bp, port_mb[port].port_stx); in bnx2x_stats_init()
1644 bp->func_stx = SHMEM_RD(bp, func_mb[mb_idx].fw_mb_param); in bnx2x_stats_init()
1647 bp->port.port_stx = 0; in bnx2x_stats_init()
1648 bp->func_stx = 0; in bnx2x_stats_init()
1651 bp->port.port_stx, bp->func_stx); in bnx2x_stats_init()
1654 if (!bp->stats_init && bp->port.pmf && bp->port.port_stx) in bnx2x_stats_init()
1655 bnx2x_stats_handle(bp, STATS_EVENT_PMF); in bnx2x_stats_init()
1657 port = BP_PORT(bp); in bnx2x_stats_init()
1659 memset(&(bp->port.old_nig_stats), 0, sizeof(struct nig_stats)); in bnx2x_stats_init()
1660 bp->port.old_nig_stats.brb_discard = in bnx2x_stats_init()
1661 REG_RD(bp, NIG_REG_STAT0_BRB_DISCARD + port*0x38); in bnx2x_stats_init()
1662 bp->port.old_nig_stats.brb_truncate = in bnx2x_stats_init()
1663 REG_RD(bp, NIG_REG_STAT0_BRB_TRUNCATE + port*0x38); in bnx2x_stats_init()
1664 if (!CHIP_IS_E3(bp)) { in bnx2x_stats_init()
1665 REG_RD_DMAE(bp, NIG_REG_STAT0_EGRESS_MAC_PKT0 + port*0x50, in bnx2x_stats_init()
1666 &(bp->port.old_nig_stats.egress_mac_pkt0_lo), 2); in bnx2x_stats_init()
1667 REG_RD_DMAE(bp, NIG_REG_STAT0_EGRESS_MAC_PKT1 + port*0x50, in bnx2x_stats_init()
1668 &(bp->port.old_nig_stats.egress_mac_pkt1_lo), 2); in bnx2x_stats_init()
1672 bnx2x_prep_fw_stats_req(bp); in bnx2x_stats_init()
1675 if (bp->stats_init) { in bnx2x_stats_init()
1676 if (bp->func_stx) { in bnx2x_stats_init()
1677 memset(bnx2x_sp(bp, func_stats), 0, in bnx2x_stats_init()
1679 bnx2x_func_stats_init(bp); in bnx2x_stats_init()
1680 bnx2x_hw_stats_post(bp); in bnx2x_stats_init()
1681 bnx2x_stats_comp(bp); in bnx2x_stats_init()
1685 bnx2x_memset_stats(bp); in bnx2x_stats_init()
1688 void bnx2x_save_statistics(struct bnx2x *bp) in bnx2x_save_statistics() argument
1691 struct net_device_stats *nstats = &bp->dev->stats; in bnx2x_save_statistics()
1694 for_each_eth_queue(bp, i) { in bnx2x_save_statistics()
1695 struct bnx2x_fastpath *fp = &bp->fp[i]; in bnx2x_save_statistics()
1697 &bnx2x_fp_stats(bp, fp)->eth_q_stats; in bnx2x_save_statistics()
1699 &bnx2x_fp_stats(bp, fp)->eth_q_stats_old; in bnx2x_save_statistics()
1718 bp->net_stats_old.rx_dropped = nstats->rx_dropped; in bnx2x_save_statistics()
1721 if (bp->port.pmf && IS_MF(bp)) { in bnx2x_save_statistics()
1722 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_save_statistics()
1723 struct bnx2x_fw_port_stats_old *fwstats = &bp->fw_stats_old; in bnx2x_save_statistics()
1731 void bnx2x_afex_collect_stats(struct bnx2x *bp, void *void_afex_stats, in bnx2x_afex_collect_stats() argument
1736 struct bnx2x_eth_stats *estats = &bp->eth_stats; in bnx2x_afex_collect_stats()
1738 &bp->fw_stats_data->queue_stats[FCOE_IDX(bp)]; in bnx2x_afex_collect_stats()
1750 &bp->fw_stats_data->fcoe; in bnx2x_afex_collect_stats()
1754 for_each_eth_queue(bp, i) { in bnx2x_afex_collect_stats()
1755 struct bnx2x_eth_q_stats *qstats = &bp->fp_stats[i].eth_q_stats; in bnx2x_afex_collect_stats()
1849 if (!NO_FCOE(bp)) { in bnx2x_afex_collect_stats()
1985 if ((bp->port.pmf) && (stats_type == VICSTATST_UIF_INDEX)) { in bnx2x_afex_collect_stats()
2001 void bnx2x_stats_safe_exec(struct bnx2x *bp, in bnx2x_stats_safe_exec() argument
2004 if (down_timeout(&bp->stats_sema, HZ/10)) in bnx2x_stats_safe_exec()
2006 bnx2x_stats_comp(bp); in bnx2x_stats_safe_exec()
2008 __bnx2x_stats_start(bp); in bnx2x_stats_safe_exec()
2009 up(&bp->stats_sema); in bnx2x_stats_safe_exec()