From patchwork Tue Mar 12 15:01:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 138219 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A515243C93; Tue, 12 Mar 2024 16:02:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2AE89402E0; Tue, 12 Mar 2024 16:02:54 +0100 (CET) Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) by mails.dpdk.org (Postfix) with ESMTP id 702F4402D8 for ; Tue, 12 Mar 2024 16:02:52 +0100 (CET) Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-6e66da40b18so2774565b3a.0 for ; Tue, 12 Mar 2024 08:02:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1710255771; x=1710860571; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rhH5WijYFPxkvogx+a3OwCvbtdycTggZwrd8BEQKRlM=; b=eg8be2sZ/OuorGWMgEID4b1NJgVxm4IDkzsesZ6AZbf03cU9eIzkdassoxlgsMQ2Em hJ1jJfT8tTl7Yvorooo5XgWk12f8l35Vvim2dfe649e7Pgo66MDF7rxG4z6FrKSkc5RL I/+lHAgidjNFundOg3vcugG50fw36JTq0ABgxcs6RtUOgoAnldzwdiidHn1hcWHLySDp h0Tkm+Npke8CjqO9MoHEMMKzqTWw8Byty8QmNCyprGnlS8Jo/4Ii6APplD0+NR5ZQWyk 6ffu9SL9AUGlZQBnmm3Fx2GDbUFe82Utw0uICjlxw8qWgicDuvzaUkdopRiLhYcyl1TZ qP4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710255771; x=1710860571; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rhH5WijYFPxkvogx+a3OwCvbtdycTggZwrd8BEQKRlM=; b=UadzbeP4S3xNwyPQS5EikTFCLjP+ZYE+AHszsVNl/QsXt7BnadR6jBhavZZXK0Mwwc fDUxmR+jvYdObBf1lpDjNagSGiHGtS+yppeY7O5/TxBnHVjwVhEPqLj35QB10AYM1s5q 67cmHk2kyrtPjDNZuETKo7tN1R0tJo+HHe+oAuzegcvix1/rA5kSSA3QHBlmtl/X0t9r FSEbX9G7b/rh5ixTo0B7vDNva69L3hbgwb2Vz6jl46in0CixC8goPG2fwGvZ0eFOkD++ LWer46Jy9KyH2Ja+x+wjRZotyA36j7UQz5eS1lojJ84ew+5HjtcOi1C1NakbWVfFbtsq KbNw== X-Gm-Message-State: AOJu0Yzi9ZMRoVm5vL7uGgKOB/p9wFNazFdPQE9Om+kohDYN6n2HlTdH 8TsWqBa7CSQTcyznZpukAVwcyjLFu2xMxcLeOcWxZMeLyUlzAWZLfu6hTb+uqp4OdPTPzHLKsBI m X-Google-Smtp-Source: AGHT+IGtPXqJ9y839bGvRteBGoGZCCRqnuagiJ1tRlLrFl5VUBU2GHIUxFv79xwIPK8clg4qJ2LtoA== X-Received: by 2002:a05:6a20:c419:b0:1a1:859f:e3b5 with SMTP id en25-20020a056a20c41900b001a1859fe3b5mr1668572pzb.16.1710255770695; Tue, 12 Mar 2024 08:02:50 -0700 (PDT) Received: from hermes.local (204-195-123-141.wavecable.com. [204.195.123.141]) by smtp.gmail.com with ESMTPSA id fd29-20020a056a002e9d00b006e580678dfbsm6269199pfb.193.2024.03.12.08.02.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Mar 2024 08:02:50 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Julien Aube Subject: [PATCH v2] net/bnx2x: fix indentation Date: Tue, 12 Mar 2024 08:01:28 -0700 Message-ID: <20240312150240.6373-1-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240311163912.11229-1-stephen@networkplumber.org> References: <20240311163912.11229-1-stephen@networkplumber.org> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The DPDK style of indentation uses tabs not spaces. This file had mix of both. Convert it. Signed-off-by: Stephen Hemminger --- v2 - fix resulting checkpatch warnings drivers/net/bnx2x/bnx2x_stats.c | 1659 +++++++++++++++---------------- 1 file changed, 818 insertions(+), 841 deletions(-) diff --git a/drivers/net/bnx2x/bnx2x_stats.c b/drivers/net/bnx2x/bnx2x_stats.c index 69132c7c806e..f15b97116b94 100644 --- a/drivers/net/bnx2x/bnx2x_stats.c +++ b/drivers/net/bnx2x/bnx2x_stats.c @@ -29,14 +29,12 @@ bnx2x_get_port_stats_dma_len(struct bnx2x_softc *sc) /* 'newest' convention - shmem2 contains the size of the port stats */ if (SHMEM2_HAS(sc, sizeof_port_stats)) { size = SHMEM2_RD(sc, sizeof_port_stats); - if (size) { + if (size) res = size; - } /* prevent newer BC from causing buffer overflow */ - if (res > sizeof(struct host_port_stats)) { + if (res > sizeof(struct host_port_stats)) res = sizeof(struct host_port_stats); - } } /* @@ -44,7 +42,7 @@ bnx2x_get_port_stats_dma_len(struct bnx2x_softc *sc) * the 'not_used' field */ if (!res) { - res = (offsetof(struct host_port_stats, not_used) + 4); + res = offsetof(struct host_port_stats, not_used) + 4; /* if PFC stats are supported by the MFW, DMA them as well */ if (sc->devinfo.bc_ver >= REQ_BC_VER_4_PFC_STATS_SUPPORTED) { @@ -75,9 +73,8 @@ bnx2x_storm_stats_post(struct bnx2x_softc *sc) int rc; if (!sc->stats_pending) { - if (sc->stats_pending) { + if (sc->stats_pending) return; - } sc->fw_stats_req->hdr.drv_stats_counter = htole16(sc->stats_counter++); @@ -93,9 +90,8 @@ bnx2x_storm_stats_post(struct bnx2x_softc *sc) U64_HI(sc->fw_stats_req_mapping), U64_LO(sc->fw_stats_req_mapping), NONE_CONNECTION_TYPE); - if (rc == 0) { + if (rc == 0) sc->stats_pending = 1; - } } } @@ -108,15 +104,13 @@ bnx2x_hw_stats_post(struct bnx2x_softc *sc) uint32_t opcode; *stats_comp = DMAE_COMP_VAL; - if (CHIP_REV_IS_SLOW(sc)) { + if (CHIP_REV_IS_SLOW(sc)) return; - } /* Update MCP's statistics if possible */ - if (sc->func_stx) { + if (sc->func_stx) memcpy(BNX2X_SP(sc, func_stats), &sc->func_stats, sizeof(sc->func_stats)); - } /* loader */ if (sc->executer_idx) { @@ -230,667 +224,664 @@ bnx2x_stats_pmf_update(struct bnx2x_softc *sc) static void bnx2x_port_stats_init(struct bnx2x_softc *sc) { - struct dmae_command *dmae; - int port = SC_PORT(sc); - uint32_t opcode; - int loader_idx = PMF_DMAE_C(sc); - uint32_t mac_addr; - uint32_t *stats_comp = BNX2X_SP(sc, stats_comp); - - /* sanity */ - if (!sc->link_vars.link_up || !sc->port.pmf) { - PMD_DRV_LOG(ERR, sc, "BUG!"); - return; - } - - sc->executer_idx = 0; - - /* MCP */ - opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_PCI, DMAE_DST_GRC, - TRUE, DMAE_COMP_GRC); - - if (sc->port.port_stx) { - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, port_stats)); - dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, port_stats)); - dmae->dst_addr_lo = sc->port.port_stx >> 2; - dmae->dst_addr_hi = 0; - dmae->len = bnx2x_get_port_stats_dma_len(sc); - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - } + struct dmae_command *dmae; + int port = SC_PORT(sc); + uint32_t opcode; + int loader_idx = PMF_DMAE_C(sc); + uint32_t mac_addr; + uint32_t *stats_comp = BNX2X_SP(sc, stats_comp); - if (sc->func_stx) { - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, func_stats)); - dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, func_stats)); - dmae->dst_addr_lo = (sc->func_stx >> 2); - dmae->dst_addr_hi = 0; - dmae->len = (sizeof(struct host_func_stats) >> 2); - dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - } + /* sanity */ + if (!sc->link_vars.link_up || !sc->port.pmf) { + PMD_DRV_LOG(ERR, sc, "BUG!"); + return; + } - /* MAC */ - opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_GRC, DMAE_DST_PCI, - TRUE, DMAE_COMP_GRC); + sc->executer_idx = 0; - /* EMAC is special */ - if (sc->link_vars.mac_type == ELINK_MAC_TYPE_EMAC) { - mac_addr = (port ? GRCBASE_EMAC1 : GRCBASE_EMAC0); + /* MCP */ + opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_PCI, DMAE_DST_GRC, + TRUE, DMAE_COMP_GRC); - /* EMAC_REG_EMAC_RX_STAT_AC (EMAC_REG_EMAC_RX_STAT_AC_COUNT)*/ - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = (mac_addr + EMAC_REG_EMAC_RX_STAT_AC) >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, mac_stats)); - dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, mac_stats)); - dmae->len = EMAC_REG_EMAC_RX_STAT_AC_COUNT; - dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; + if (sc->port.port_stx) { + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, port_stats)); + dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, port_stats)); + dmae->dst_addr_lo = sc->port.port_stx >> 2; + dmae->dst_addr_hi = 0; + dmae->len = bnx2x_get_port_stats_dma_len(sc); + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + } - /* EMAC_REG_EMAC_RX_STAT_AC_28 */ - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = ((mac_addr + EMAC_REG_EMAC_RX_STAT_AC_28) >> 2); - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, mac_stats) + - offsetof(struct emac_stats, - rx_stat_falsecarriererrors)); - dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, mac_stats) + - offsetof(struct emac_stats, - rx_stat_falsecarriererrors)); - dmae->len = 1; - dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; + if (sc->func_stx) { + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, func_stats)); + dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, func_stats)); + dmae->dst_addr_lo = (sc->func_stx >> 2); + dmae->dst_addr_hi = 0; + dmae->len = (sizeof(struct host_func_stats) >> 2); + dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + } - /* EMAC_REG_EMAC_TX_STAT_AC (EMAC_REG_EMAC_TX_STAT_AC_COUNT)*/ - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = ((mac_addr + EMAC_REG_EMAC_TX_STAT_AC) >> 2); - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, mac_stats) + - offsetof(struct emac_stats, - tx_stat_ifhcoutoctets)); - dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, mac_stats) + - offsetof(struct emac_stats, - tx_stat_ifhcoutoctets)); - dmae->len = EMAC_REG_EMAC_TX_STAT_AC_COUNT; - dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - } else { - uint32_t tx_src_addr_lo, rx_src_addr_lo; - uint16_t rx_len, tx_len; + /* MAC */ + opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_GRC, DMAE_DST_PCI, + TRUE, DMAE_COMP_GRC); - /* configure the params according to MAC type */ - switch (sc->link_vars.mac_type) { - case ELINK_MAC_TYPE_BMAC: - mac_addr = (port) ? NIG_REG_INGRESS_BMAC1_MEM : - NIG_REG_INGRESS_BMAC0_MEM; - - /* BIGMAC_REGISTER_TX_STAT_GTPKT .. - BIGMAC_REGISTER_TX_STAT_GTBYT */ - if (CHIP_IS_E1x(sc)) { - tx_src_addr_lo = - ((mac_addr + BIGMAC_REGISTER_TX_STAT_GTPKT) >> 2); - tx_len = ((8 + BIGMAC_REGISTER_TX_STAT_GTBYT - - BIGMAC_REGISTER_TX_STAT_GTPKT) >> 2); - rx_src_addr_lo = - ((mac_addr + BIGMAC_REGISTER_RX_STAT_GR64) >> 2); - rx_len = ((8 + BIGMAC_REGISTER_RX_STAT_GRIPJ - - BIGMAC_REGISTER_RX_STAT_GR64) >> 2); - } else { - tx_src_addr_lo = - ((mac_addr + BIGMAC2_REGISTER_TX_STAT_GTPOK) >> 2); - tx_len = ((8 + BIGMAC2_REGISTER_TX_STAT_GTBYT - - BIGMAC2_REGISTER_TX_STAT_GTPOK) >> 2); - rx_src_addr_lo = - ((mac_addr + BIGMAC2_REGISTER_RX_STAT_GR64) >> 2); - rx_len = ((8 + BIGMAC2_REGISTER_RX_STAT_GRIPJ - - BIGMAC2_REGISTER_RX_STAT_GR64) >> 2); - } - - break; - - case ELINK_MAC_TYPE_UMAC: /* handled by MSTAT */ - case ELINK_MAC_TYPE_XMAC: /* handled by MSTAT */ - default: - mac_addr = (port) ? GRCBASE_MSTAT1 : GRCBASE_MSTAT0; - tx_src_addr_lo = ((mac_addr + MSTAT_REG_TX_STAT_GTXPOK_LO) >> 2); - rx_src_addr_lo = ((mac_addr + MSTAT_REG_RX_STAT_GR64_LO) >> 2); - tx_len = - (sizeof(sc->sp->mac_stats.mstat_stats.stats_tx) >> 2); - rx_len = - (sizeof(sc->sp->mac_stats.mstat_stats.stats_rx) >> 2); - break; + /* EMAC is special */ + if (sc->link_vars.mac_type == ELINK_MAC_TYPE_EMAC) { + mac_addr = (port ? GRCBASE_EMAC1 : GRCBASE_EMAC0); + + /* EMAC_REG_EMAC_RX_STAT_AC (EMAC_REG_EMAC_RX_STAT_AC_COUNT)*/ + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = (mac_addr + EMAC_REG_EMAC_RX_STAT_AC) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, mac_stats)); + dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, mac_stats)); + dmae->len = EMAC_REG_EMAC_RX_STAT_AC_COUNT; + dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + /* EMAC_REG_EMAC_RX_STAT_AC_28 */ + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = ((mac_addr + EMAC_REG_EMAC_RX_STAT_AC_28) >> 2); + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, mac_stats) + + offsetof(struct emac_stats, + rx_stat_falsecarriererrors)); + dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, mac_stats) + + offsetof(struct emac_stats, + rx_stat_falsecarriererrors)); + dmae->len = 1; + dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + /* EMAC_REG_EMAC_TX_STAT_AC (EMAC_REG_EMAC_TX_STAT_AC_COUNT)*/ + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = ((mac_addr + EMAC_REG_EMAC_TX_STAT_AC) >> 2); + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, mac_stats) + + offsetof(struct emac_stats, + tx_stat_ifhcoutoctets)); + dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, mac_stats) + + offsetof(struct emac_stats, + tx_stat_ifhcoutoctets)); + dmae->len = EMAC_REG_EMAC_TX_STAT_AC_COUNT; + dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + } else { + uint32_t tx_src_addr_lo, rx_src_addr_lo; + uint16_t rx_len, tx_len; + + /* configure the params according to MAC type */ + switch (sc->link_vars.mac_type) { + case ELINK_MAC_TYPE_BMAC: + mac_addr = (port) ? NIG_REG_INGRESS_BMAC1_MEM : + NIG_REG_INGRESS_BMAC0_MEM; + + /* + * BIGMAC_REGISTER_TX_STAT_GTPKT .. + * BIGMAC_REGISTER_TX_STAT_GTBYT + */ + if (CHIP_IS_E1x(sc)) { + tx_src_addr_lo = + ((mac_addr + BIGMAC_REGISTER_TX_STAT_GTPKT) >> 2); + tx_len = ((8 + BIGMAC_REGISTER_TX_STAT_GTBYT - + BIGMAC_REGISTER_TX_STAT_GTPKT) >> 2); + rx_src_addr_lo = + ((mac_addr + BIGMAC_REGISTER_RX_STAT_GR64) >> 2); + rx_len = ((8 + BIGMAC_REGISTER_RX_STAT_GRIPJ - + BIGMAC_REGISTER_RX_STAT_GR64) >> 2); + } else { + tx_src_addr_lo = + ((mac_addr + BIGMAC2_REGISTER_TX_STAT_GTPOK) >> 2); + tx_len = ((8 + BIGMAC2_REGISTER_TX_STAT_GTBYT - + BIGMAC2_REGISTER_TX_STAT_GTPOK) >> 2); + rx_src_addr_lo = + ((mac_addr + BIGMAC2_REGISTER_RX_STAT_GR64) >> 2); + rx_len = ((8 + BIGMAC2_REGISTER_RX_STAT_GRIPJ - + BIGMAC2_REGISTER_RX_STAT_GR64) >> 2); + } + + break; + + case ELINK_MAC_TYPE_UMAC: /* handled by MSTAT */ + case ELINK_MAC_TYPE_XMAC: /* handled by MSTAT */ + default: + mac_addr = (port) ? GRCBASE_MSTAT1 : GRCBASE_MSTAT0; + tx_src_addr_lo = ((mac_addr + MSTAT_REG_TX_STAT_GTXPOK_LO) >> 2); + rx_src_addr_lo = ((mac_addr + MSTAT_REG_RX_STAT_GR64_LO) >> 2); + tx_len = + (sizeof(sc->sp->mac_stats.mstat_stats.stats_tx) >> 2); + rx_len = + (sizeof(sc->sp->mac_stats.mstat_stats.stats_rx) >> 2); + break; + } + + /* TX stats */ + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = tx_src_addr_lo; + dmae->src_addr_hi = 0; + dmae->len = tx_len; + dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, mac_stats)); + dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, mac_stats)); + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + /* RX stats */ + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_hi = 0; + dmae->src_addr_lo = rx_src_addr_lo; + dmae->dst_addr_lo = + U64_LO(BNX2X_SP_MAPPING(sc, mac_stats) + (tx_len << 2)); + dmae->dst_addr_hi = + U64_HI(BNX2X_SP_MAPPING(sc, mac_stats) + (tx_len << 2)); + dmae->len = rx_len; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; } - /* TX stats */ - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = tx_src_addr_lo; - dmae->src_addr_hi = 0; - dmae->len = tx_len; - dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, mac_stats)); - dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, mac_stats)); - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; + /* NIG */ + if (!CHIP_IS_E3(sc)) { + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = + (port ? NIG_REG_STAT1_EGRESS_MAC_PKT0 : + NIG_REG_STAT0_EGRESS_MAC_PKT0) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, nig_stats) + + offsetof(struct nig_stats, + egress_mac_pkt0_lo)); + dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, nig_stats) + + offsetof(struct nig_stats, + egress_mac_pkt0_lo)); + dmae->len = ((2 * sizeof(uint32_t)) >> 2); + dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; - /* RX stats */ - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_hi = 0; - dmae->src_addr_lo = rx_src_addr_lo; - dmae->dst_addr_lo = - U64_LO(BNX2X_SP_MAPPING(sc, mac_stats) + (tx_len << 2)); - dmae->dst_addr_hi = - U64_HI(BNX2X_SP_MAPPING(sc, mac_stats) + (tx_len << 2)); - dmae->len = rx_len; - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - } + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = + (port ? NIG_REG_STAT1_EGRESS_MAC_PKT1 : + NIG_REG_STAT0_EGRESS_MAC_PKT1) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, nig_stats) + + offsetof(struct nig_stats, + egress_mac_pkt1_lo)); + dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, nig_stats) + + offsetof(struct nig_stats, + egress_mac_pkt1_lo)); + dmae->len = ((2 * sizeof(uint32_t)) >> 2); + dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + } - /* NIG */ - if (!CHIP_IS_E3(sc)) { dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = opcode; + dmae->opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_GRC, DMAE_DST_PCI, + TRUE, DMAE_COMP_PCI); dmae->src_addr_lo = - (port ? NIG_REG_STAT1_EGRESS_MAC_PKT0 : - NIG_REG_STAT0_EGRESS_MAC_PKT0) >> 2; + (port ? NIG_REG_STAT1_BRB_DISCARD : + NIG_REG_STAT0_BRB_DISCARD) >> 2; dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, nig_stats) + - offsetof(struct nig_stats, - egress_mac_pkt0_lo)); - dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, nig_stats) + - offsetof(struct nig_stats, - egress_mac_pkt0_lo)); - dmae->len = ((2 * sizeof(uint32_t)) >> 2); - dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; + dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, nig_stats)); + dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, nig_stats)); + dmae->len = (sizeof(struct nig_stats) - 4 * sizeof(uint32_t)) >> 2; - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = - (port ? NIG_REG_STAT1_EGRESS_MAC_PKT1 : - NIG_REG_STAT0_EGRESS_MAC_PKT1) >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, nig_stats) + - offsetof(struct nig_stats, - egress_mac_pkt1_lo)); - dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, nig_stats) + - offsetof(struct nig_stats, - egress_mac_pkt1_lo)); - dmae->len = ((2 * sizeof(uint32_t)) >> 2); - dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - } - - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_GRC, DMAE_DST_PCI, - TRUE, DMAE_COMP_PCI); - dmae->src_addr_lo = - (port ? NIG_REG_STAT1_BRB_DISCARD : - NIG_REG_STAT0_BRB_DISCARD) >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, nig_stats)); - dmae->dst_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, nig_stats)); - dmae->len = (sizeof(struct nig_stats) - 4*sizeof(uint32_t)) >> 2; - - dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_val = DMAE_COMP_VAL; - - *stats_comp = 0; + dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + *stats_comp = 0; } static void bnx2x_func_stats_init(struct bnx2x_softc *sc) { - struct dmae_command *dmae = &sc->stats_dmae; - uint32_t *stats_comp = BNX2X_SP(sc, stats_comp); - - /* sanity */ - if (!sc->func_stx) { - PMD_DRV_LOG(ERR, sc, "BUG!"); - return; - } - - sc->executer_idx = 0; - memset(dmae, 0, sizeof(struct dmae_command)); - - dmae->opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_PCI, DMAE_DST_GRC, - TRUE, DMAE_COMP_PCI); - dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, func_stats)); - dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, func_stats)); - dmae->dst_addr_lo = (sc->func_stx >> 2); - dmae->dst_addr_hi = 0; - dmae->len = (sizeof(struct host_func_stats) >> 2); - dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_val = DMAE_COMP_VAL; - - *stats_comp = 0; + struct dmae_command *dmae = &sc->stats_dmae; + uint32_t *stats_comp = BNX2X_SP(sc, stats_comp); + + /* sanity */ + if (!sc->func_stx) { + PMD_DRV_LOG(ERR, sc, "BUG!"); + return; + } + + sc->executer_idx = 0; + memset(dmae, 0, sizeof(struct dmae_command)); + + dmae->opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_PCI, DMAE_DST_GRC, + TRUE, DMAE_COMP_PCI); + dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, func_stats)); + dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, func_stats)); + dmae->dst_addr_lo = (sc->func_stx >> 2); + dmae->dst_addr_hi = 0; + dmae->len = (sizeof(struct host_func_stats) >> 2); + dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + *stats_comp = 0; } static void bnx2x_stats_start(struct bnx2x_softc *sc) { - /* - * VFs travel through here as part of the statistics FSM, but no action - * is required - */ - if (IS_VF(sc)) { - return; - } - - if (sc->port.pmf) { - bnx2x_port_stats_init(sc); - } - - else if (sc->func_stx) { - bnx2x_func_stats_init(sc); - } - - bnx2x_hw_stats_post(sc); - bnx2x_storm_stats_post(sc); + /* + * VFs travel through here as part of the statistics FSM, but no action + * is required + */ + if (IS_VF(sc)) + return; + + if (sc->port.pmf) + bnx2x_port_stats_init(sc); + else if (sc->func_stx) + bnx2x_func_stats_init(sc); + + bnx2x_hw_stats_post(sc); + bnx2x_storm_stats_post(sc); } static void bnx2x_stats_pmf_start(struct bnx2x_softc *sc) { - bnx2x_stats_comp(sc); - bnx2x_stats_pmf_update(sc); - bnx2x_stats_start(sc); + bnx2x_stats_comp(sc); + bnx2x_stats_pmf_update(sc); + bnx2x_stats_start(sc); } static void bnx2x_stats_restart(struct bnx2x_softc *sc) { - /* - * VFs travel through here as part of the statistics FSM, but no action - * is required - */ - if (IS_VF(sc)) { - return; - } - - bnx2x_stats_comp(sc); - bnx2x_stats_start(sc); + /* + * VFs travel through here as part of the statistics FSM, but no action + * is required + */ + if (IS_VF(sc)) + return; + + bnx2x_stats_comp(sc); + bnx2x_stats_start(sc); } static void bnx2x_bmac_stats_update(struct bnx2x_softc *sc) { - struct host_port_stats *pstats = BNX2X_SP(sc, port_stats); - struct bnx2x_eth_stats *estats = &sc->eth_stats; - struct { - uint32_t lo; - uint32_t hi; - } diff; - - if (CHIP_IS_E1x(sc)) { - struct bmac1_stats *new = BNX2X_SP(sc, mac_stats.bmac1_stats); - - /* the macros below will use "bmac1_stats" type */ - UPDATE_STAT64(rx_stat_grerb, rx_stat_ifhcinbadoctets); - UPDATE_STAT64(rx_stat_grfcs, rx_stat_dot3statsfcserrors); - UPDATE_STAT64(rx_stat_grund, rx_stat_etherstatsundersizepkts); - UPDATE_STAT64(rx_stat_grovr, rx_stat_dot3statsframestoolong); - UPDATE_STAT64(rx_stat_grfrg, rx_stat_etherstatsfragments); - UPDATE_STAT64(rx_stat_grjbr, rx_stat_etherstatsjabbers); - UPDATE_STAT64(rx_stat_grxcf, rx_stat_maccontrolframesreceived); - UPDATE_STAT64(rx_stat_grxpf, rx_stat_xoffstateentered); - UPDATE_STAT64(rx_stat_grxpf, rx_stat_mac_xpf); - - UPDATE_STAT64(tx_stat_gtxpf, tx_stat_outxoffsent); - UPDATE_STAT64(tx_stat_gtxpf, tx_stat_flowcontroldone); - UPDATE_STAT64(tx_stat_gt64, tx_stat_etherstatspkts64octets); - UPDATE_STAT64(tx_stat_gt127, - tx_stat_etherstatspkts65octetsto127octets); - UPDATE_STAT64(tx_stat_gt255, - tx_stat_etherstatspkts128octetsto255octets); - UPDATE_STAT64(tx_stat_gt511, - tx_stat_etherstatspkts256octetsto511octets); - UPDATE_STAT64(tx_stat_gt1023, - tx_stat_etherstatspkts512octetsto1023octets); - UPDATE_STAT64(tx_stat_gt1518, - tx_stat_etherstatspkts1024octetsto1522octets); - UPDATE_STAT64(tx_stat_gt2047, tx_stat_mac_2047); - UPDATE_STAT64(tx_stat_gt4095, tx_stat_mac_4095); - UPDATE_STAT64(tx_stat_gt9216, tx_stat_mac_9216); - UPDATE_STAT64(tx_stat_gt16383, tx_stat_mac_16383); - UPDATE_STAT64(tx_stat_gterr, - tx_stat_dot3statsinternalmactransmiterrors); - UPDATE_STAT64(tx_stat_gtufl, tx_stat_mac_ufl); - } else { - struct bmac2_stats *new = BNX2X_SP(sc, mac_stats.bmac2_stats); - struct bnx2x_fw_port_stats_old *fwstats = &sc->fw_stats_old; - - /* the macros below will use "bmac2_stats" type */ - UPDATE_STAT64(rx_stat_grerb, rx_stat_ifhcinbadoctets); - UPDATE_STAT64(rx_stat_grfcs, rx_stat_dot3statsfcserrors); - UPDATE_STAT64(rx_stat_grund, rx_stat_etherstatsundersizepkts); - UPDATE_STAT64(rx_stat_grovr, rx_stat_dot3statsframestoolong); - UPDATE_STAT64(rx_stat_grfrg, rx_stat_etherstatsfragments); - UPDATE_STAT64(rx_stat_grjbr, rx_stat_etherstatsjabbers); - UPDATE_STAT64(rx_stat_grxcf, rx_stat_maccontrolframesreceived); - UPDATE_STAT64(rx_stat_grxpf, rx_stat_xoffstateentered); - UPDATE_STAT64(rx_stat_grxpf, rx_stat_mac_xpf); - UPDATE_STAT64(tx_stat_gtxpf, tx_stat_outxoffsent); - UPDATE_STAT64(tx_stat_gtxpf, tx_stat_flowcontroldone); - UPDATE_STAT64(tx_stat_gt64, tx_stat_etherstatspkts64octets); - UPDATE_STAT64(tx_stat_gt127, - tx_stat_etherstatspkts65octetsto127octets); - UPDATE_STAT64(tx_stat_gt255, - tx_stat_etherstatspkts128octetsto255octets); - UPDATE_STAT64(tx_stat_gt511, - tx_stat_etherstatspkts256octetsto511octets); - UPDATE_STAT64(tx_stat_gt1023, - tx_stat_etherstatspkts512octetsto1023octets); - UPDATE_STAT64(tx_stat_gt1518, - tx_stat_etherstatspkts1024octetsto1522octets); - UPDATE_STAT64(tx_stat_gt2047, tx_stat_mac_2047); - UPDATE_STAT64(tx_stat_gt4095, tx_stat_mac_4095); - UPDATE_STAT64(tx_stat_gt9216, tx_stat_mac_9216); - UPDATE_STAT64(tx_stat_gt16383, tx_stat_mac_16383); - UPDATE_STAT64(tx_stat_gterr, - tx_stat_dot3statsinternalmactransmiterrors); - UPDATE_STAT64(tx_stat_gtufl, tx_stat_mac_ufl); - - /* collect PFC stats */ - pstats->pfc_frames_tx_hi = new->tx_stat_gtpp_hi; - pstats->pfc_frames_tx_lo = new->tx_stat_gtpp_lo; - ADD_64(pstats->pfc_frames_tx_hi, fwstats->pfc_frames_tx_hi, - pstats->pfc_frames_tx_lo, fwstats->pfc_frames_tx_lo); - - pstats->pfc_frames_rx_hi = new->rx_stat_grpp_hi; - pstats->pfc_frames_rx_lo = new->rx_stat_grpp_lo; - ADD_64(pstats->pfc_frames_rx_hi, fwstats->pfc_frames_rx_hi, - pstats->pfc_frames_rx_lo, fwstats->pfc_frames_rx_lo); - } - - estats->pause_frames_received_hi = pstats->mac_stx[1].rx_stat_mac_xpf_hi; - estats->pause_frames_received_lo = pstats->mac_stx[1].rx_stat_mac_xpf_lo; - - estats->pause_frames_sent_hi = pstats->mac_stx[1].tx_stat_outxoffsent_hi; - estats->pause_frames_sent_lo = pstats->mac_stx[1].tx_stat_outxoffsent_lo; - - estats->pfc_frames_received_hi = pstats->pfc_frames_rx_hi; - estats->pfc_frames_received_lo = pstats->pfc_frames_rx_lo; - estats->pfc_frames_sent_hi = pstats->pfc_frames_tx_hi; - estats->pfc_frames_sent_lo = pstats->pfc_frames_tx_lo; + struct host_port_stats *pstats = BNX2X_SP(sc, port_stats); + struct bnx2x_eth_stats *estats = &sc->eth_stats; + struct { + uint32_t lo; + uint32_t hi; + } diff; + + if (CHIP_IS_E1x(sc)) { + struct bmac1_stats *new = BNX2X_SP(sc, mac_stats.bmac1_stats); + + /* the macros below will use "bmac1_stats" type */ + UPDATE_STAT64(rx_stat_grerb, rx_stat_ifhcinbadoctets); + UPDATE_STAT64(rx_stat_grfcs, rx_stat_dot3statsfcserrors); + UPDATE_STAT64(rx_stat_grund, rx_stat_etherstatsundersizepkts); + UPDATE_STAT64(rx_stat_grovr, rx_stat_dot3statsframestoolong); + UPDATE_STAT64(rx_stat_grfrg, rx_stat_etherstatsfragments); + UPDATE_STAT64(rx_stat_grjbr, rx_stat_etherstatsjabbers); + UPDATE_STAT64(rx_stat_grxcf, rx_stat_maccontrolframesreceived); + UPDATE_STAT64(rx_stat_grxpf, rx_stat_xoffstateentered); + UPDATE_STAT64(rx_stat_grxpf, rx_stat_mac_xpf); + + UPDATE_STAT64(tx_stat_gtxpf, tx_stat_outxoffsent); + UPDATE_STAT64(tx_stat_gtxpf, tx_stat_flowcontroldone); + UPDATE_STAT64(tx_stat_gt64, tx_stat_etherstatspkts64octets); + UPDATE_STAT64(tx_stat_gt127, + tx_stat_etherstatspkts65octetsto127octets); + UPDATE_STAT64(tx_stat_gt255, + tx_stat_etherstatspkts128octetsto255octets); + UPDATE_STAT64(tx_stat_gt511, + tx_stat_etherstatspkts256octetsto511octets); + UPDATE_STAT64(tx_stat_gt1023, + tx_stat_etherstatspkts512octetsto1023octets); + UPDATE_STAT64(tx_stat_gt1518, + tx_stat_etherstatspkts1024octetsto1522octets); + UPDATE_STAT64(tx_stat_gt2047, tx_stat_mac_2047); + UPDATE_STAT64(tx_stat_gt4095, tx_stat_mac_4095); + UPDATE_STAT64(tx_stat_gt9216, tx_stat_mac_9216); + UPDATE_STAT64(tx_stat_gt16383, tx_stat_mac_16383); + UPDATE_STAT64(tx_stat_gterr, + tx_stat_dot3statsinternalmactransmiterrors); + UPDATE_STAT64(tx_stat_gtufl, tx_stat_mac_ufl); + } else { + struct bmac2_stats *new = BNX2X_SP(sc, mac_stats.bmac2_stats); + struct bnx2x_fw_port_stats_old *fwstats = &sc->fw_stats_old; + + /* the macros below will use "bmac2_stats" type */ + UPDATE_STAT64(rx_stat_grerb, rx_stat_ifhcinbadoctets); + UPDATE_STAT64(rx_stat_grfcs, rx_stat_dot3statsfcserrors); + UPDATE_STAT64(rx_stat_grund, rx_stat_etherstatsundersizepkts); + UPDATE_STAT64(rx_stat_grovr, rx_stat_dot3statsframestoolong); + UPDATE_STAT64(rx_stat_grfrg, rx_stat_etherstatsfragments); + UPDATE_STAT64(rx_stat_grjbr, rx_stat_etherstatsjabbers); + UPDATE_STAT64(rx_stat_grxcf, rx_stat_maccontrolframesreceived); + UPDATE_STAT64(rx_stat_grxpf, rx_stat_xoffstateentered); + UPDATE_STAT64(rx_stat_grxpf, rx_stat_mac_xpf); + UPDATE_STAT64(tx_stat_gtxpf, tx_stat_outxoffsent); + UPDATE_STAT64(tx_stat_gtxpf, tx_stat_flowcontroldone); + UPDATE_STAT64(tx_stat_gt64, tx_stat_etherstatspkts64octets); + UPDATE_STAT64(tx_stat_gt127, + tx_stat_etherstatspkts65octetsto127octets); + UPDATE_STAT64(tx_stat_gt255, + tx_stat_etherstatspkts128octetsto255octets); + UPDATE_STAT64(tx_stat_gt511, + tx_stat_etherstatspkts256octetsto511octets); + UPDATE_STAT64(tx_stat_gt1023, + tx_stat_etherstatspkts512octetsto1023octets); + UPDATE_STAT64(tx_stat_gt1518, + tx_stat_etherstatspkts1024octetsto1522octets); + UPDATE_STAT64(tx_stat_gt2047, tx_stat_mac_2047); + UPDATE_STAT64(tx_stat_gt4095, tx_stat_mac_4095); + UPDATE_STAT64(tx_stat_gt9216, tx_stat_mac_9216); + UPDATE_STAT64(tx_stat_gt16383, tx_stat_mac_16383); + UPDATE_STAT64(tx_stat_gterr, + tx_stat_dot3statsinternalmactransmiterrors); + UPDATE_STAT64(tx_stat_gtufl, tx_stat_mac_ufl); + + /* collect PFC stats */ + pstats->pfc_frames_tx_hi = new->tx_stat_gtpp_hi; + pstats->pfc_frames_tx_lo = new->tx_stat_gtpp_lo; + ADD_64(pstats->pfc_frames_tx_hi, fwstats->pfc_frames_tx_hi, + pstats->pfc_frames_tx_lo, fwstats->pfc_frames_tx_lo); + + pstats->pfc_frames_rx_hi = new->rx_stat_grpp_hi; + pstats->pfc_frames_rx_lo = new->rx_stat_grpp_lo; + ADD_64(pstats->pfc_frames_rx_hi, fwstats->pfc_frames_rx_hi, + pstats->pfc_frames_rx_lo, fwstats->pfc_frames_rx_lo); + } + + estats->pause_frames_received_hi = pstats->mac_stx[1].rx_stat_mac_xpf_hi; + estats->pause_frames_received_lo = pstats->mac_stx[1].rx_stat_mac_xpf_lo; + + estats->pause_frames_sent_hi = pstats->mac_stx[1].tx_stat_outxoffsent_hi; + estats->pause_frames_sent_lo = pstats->mac_stx[1].tx_stat_outxoffsent_lo; + + estats->pfc_frames_received_hi = pstats->pfc_frames_rx_hi; + estats->pfc_frames_received_lo = pstats->pfc_frames_rx_lo; + estats->pfc_frames_sent_hi = pstats->pfc_frames_tx_hi; + estats->pfc_frames_sent_lo = pstats->pfc_frames_tx_lo; } static void bnx2x_mstat_stats_update(struct bnx2x_softc *sc) { - struct host_port_stats *pstats = BNX2X_SP(sc, port_stats); - struct bnx2x_eth_stats *estats = &sc->eth_stats; - struct mstat_stats *new = BNX2X_SP(sc, mac_stats.mstat_stats); - - ADD_STAT64(stats_rx.rx_grerb, rx_stat_ifhcinbadoctets); - ADD_STAT64(stats_rx.rx_grfcs, rx_stat_dot3statsfcserrors); - ADD_STAT64(stats_rx.rx_grund, rx_stat_etherstatsundersizepkts); - ADD_STAT64(stats_rx.rx_grovr, rx_stat_dot3statsframestoolong); - ADD_STAT64(stats_rx.rx_grfrg, rx_stat_etherstatsfragments); - ADD_STAT64(stats_rx.rx_grxcf, rx_stat_maccontrolframesreceived); - ADD_STAT64(stats_rx.rx_grxpf, rx_stat_xoffstateentered); - ADD_STAT64(stats_rx.rx_grxpf, rx_stat_mac_xpf); - ADD_STAT64(stats_tx.tx_gtxpf, tx_stat_outxoffsent); - ADD_STAT64(stats_tx.tx_gtxpf, tx_stat_flowcontroldone); - - /* collect pfc stats */ - ADD_64(pstats->pfc_frames_tx_hi, new->stats_tx.tx_gtxpp_hi, - pstats->pfc_frames_tx_lo, new->stats_tx.tx_gtxpp_lo); - ADD_64(pstats->pfc_frames_rx_hi, new->stats_rx.rx_grxpp_hi, - pstats->pfc_frames_rx_lo, new->stats_rx.rx_grxpp_lo); - - ADD_STAT64(stats_tx.tx_gt64, tx_stat_etherstatspkts64octets); - ADD_STAT64(stats_tx.tx_gt127, tx_stat_etherstatspkts65octetsto127octets); - ADD_STAT64(stats_tx.tx_gt255, tx_stat_etherstatspkts128octetsto255octets); - ADD_STAT64(stats_tx.tx_gt511, tx_stat_etherstatspkts256octetsto511octets); - ADD_STAT64(stats_tx.tx_gt1023, - tx_stat_etherstatspkts512octetsto1023octets); - ADD_STAT64(stats_tx.tx_gt1518, - tx_stat_etherstatspkts1024octetsto1522octets); - ADD_STAT64(stats_tx.tx_gt2047, tx_stat_mac_2047); - - ADD_STAT64(stats_tx.tx_gt4095, tx_stat_mac_4095); - ADD_STAT64(stats_tx.tx_gt9216, tx_stat_mac_9216); - ADD_STAT64(stats_tx.tx_gt16383, tx_stat_mac_16383); - - ADD_STAT64(stats_tx.tx_gterr, tx_stat_dot3statsinternalmactransmiterrors); - ADD_STAT64(stats_tx.tx_gtufl, tx_stat_mac_ufl); - - estats->etherstatspkts1024octetsto1522octets_hi = - pstats->mac_stx[1].tx_stat_etherstatspkts1024octetsto1522octets_hi; - estats->etherstatspkts1024octetsto1522octets_lo = - pstats->mac_stx[1].tx_stat_etherstatspkts1024octetsto1522octets_lo; - - estats->etherstatspktsover1522octets_hi = - pstats->mac_stx[1].tx_stat_mac_2047_hi; - estats->etherstatspktsover1522octets_lo = - pstats->mac_stx[1].tx_stat_mac_2047_lo; - - ADD_64(estats->etherstatspktsover1522octets_hi, - pstats->mac_stx[1].tx_stat_mac_4095_hi, - estats->etherstatspktsover1522octets_lo, - pstats->mac_stx[1].tx_stat_mac_4095_lo); - - ADD_64(estats->etherstatspktsover1522octets_hi, - pstats->mac_stx[1].tx_stat_mac_9216_hi, - estats->etherstatspktsover1522octets_lo, - pstats->mac_stx[1].tx_stat_mac_9216_lo); - - ADD_64(estats->etherstatspktsover1522octets_hi, - pstats->mac_stx[1].tx_stat_mac_16383_hi, - estats->etherstatspktsover1522octets_lo, - pstats->mac_stx[1].tx_stat_mac_16383_lo); - - estats->pause_frames_received_hi = pstats->mac_stx[1].rx_stat_mac_xpf_hi; - estats->pause_frames_received_lo = pstats->mac_stx[1].rx_stat_mac_xpf_lo; - - estats->pause_frames_sent_hi = pstats->mac_stx[1].tx_stat_outxoffsent_hi; - estats->pause_frames_sent_lo = pstats->mac_stx[1].tx_stat_outxoffsent_lo; - - estats->pfc_frames_received_hi = pstats->pfc_frames_rx_hi; - estats->pfc_frames_received_lo = pstats->pfc_frames_rx_lo; - estats->pfc_frames_sent_hi = pstats->pfc_frames_tx_hi; - estats->pfc_frames_sent_lo = pstats->pfc_frames_tx_lo; + struct host_port_stats *pstats = BNX2X_SP(sc, port_stats); + struct bnx2x_eth_stats *estats = &sc->eth_stats; + struct mstat_stats *new = BNX2X_SP(sc, mac_stats.mstat_stats); + + ADD_STAT64(stats_rx.rx_grerb, rx_stat_ifhcinbadoctets); + ADD_STAT64(stats_rx.rx_grfcs, rx_stat_dot3statsfcserrors); + ADD_STAT64(stats_rx.rx_grund, rx_stat_etherstatsundersizepkts); + ADD_STAT64(stats_rx.rx_grovr, rx_stat_dot3statsframestoolong); + ADD_STAT64(stats_rx.rx_grfrg, rx_stat_etherstatsfragments); + ADD_STAT64(stats_rx.rx_grxcf, rx_stat_maccontrolframesreceived); + ADD_STAT64(stats_rx.rx_grxpf, rx_stat_xoffstateentered); + ADD_STAT64(stats_rx.rx_grxpf, rx_stat_mac_xpf); + ADD_STAT64(stats_tx.tx_gtxpf, tx_stat_outxoffsent); + ADD_STAT64(stats_tx.tx_gtxpf, tx_stat_flowcontroldone); + + /* collect pfc stats */ + ADD_64(pstats->pfc_frames_tx_hi, new->stats_tx.tx_gtxpp_hi, + pstats->pfc_frames_tx_lo, new->stats_tx.tx_gtxpp_lo); + ADD_64(pstats->pfc_frames_rx_hi, new->stats_rx.rx_grxpp_hi, + pstats->pfc_frames_rx_lo, new->stats_rx.rx_grxpp_lo); + + ADD_STAT64(stats_tx.tx_gt64, tx_stat_etherstatspkts64octets); + ADD_STAT64(stats_tx.tx_gt127, tx_stat_etherstatspkts65octetsto127octets); + ADD_STAT64(stats_tx.tx_gt255, tx_stat_etherstatspkts128octetsto255octets); + ADD_STAT64(stats_tx.tx_gt511, tx_stat_etherstatspkts256octetsto511octets); + ADD_STAT64(stats_tx.tx_gt1023, + tx_stat_etherstatspkts512octetsto1023octets); + ADD_STAT64(stats_tx.tx_gt1518, + tx_stat_etherstatspkts1024octetsto1522octets); + ADD_STAT64(stats_tx.tx_gt2047, tx_stat_mac_2047); + + ADD_STAT64(stats_tx.tx_gt4095, tx_stat_mac_4095); + ADD_STAT64(stats_tx.tx_gt9216, tx_stat_mac_9216); + ADD_STAT64(stats_tx.tx_gt16383, tx_stat_mac_16383); + + ADD_STAT64(stats_tx.tx_gterr, tx_stat_dot3statsinternalmactransmiterrors); + ADD_STAT64(stats_tx.tx_gtufl, tx_stat_mac_ufl); + + estats->etherstatspkts1024octetsto1522octets_hi = + pstats->mac_stx[1].tx_stat_etherstatspkts1024octetsto1522octets_hi; + estats->etherstatspkts1024octetsto1522octets_lo = + pstats->mac_stx[1].tx_stat_etherstatspkts1024octetsto1522octets_lo; + + estats->etherstatspktsover1522octets_hi = + pstats->mac_stx[1].tx_stat_mac_2047_hi; + estats->etherstatspktsover1522octets_lo = + pstats->mac_stx[1].tx_stat_mac_2047_lo; + + ADD_64(estats->etherstatspktsover1522octets_hi, + pstats->mac_stx[1].tx_stat_mac_4095_hi, + estats->etherstatspktsover1522octets_lo, + pstats->mac_stx[1].tx_stat_mac_4095_lo); + + ADD_64(estats->etherstatspktsover1522octets_hi, + pstats->mac_stx[1].tx_stat_mac_9216_hi, + estats->etherstatspktsover1522octets_lo, + pstats->mac_stx[1].tx_stat_mac_9216_lo); + + ADD_64(estats->etherstatspktsover1522octets_hi, + pstats->mac_stx[1].tx_stat_mac_16383_hi, + estats->etherstatspktsover1522octets_lo, + pstats->mac_stx[1].tx_stat_mac_16383_lo); + + estats->pause_frames_received_hi = pstats->mac_stx[1].rx_stat_mac_xpf_hi; + estats->pause_frames_received_lo = pstats->mac_stx[1].rx_stat_mac_xpf_lo; + + estats->pause_frames_sent_hi = pstats->mac_stx[1].tx_stat_outxoffsent_hi; + estats->pause_frames_sent_lo = pstats->mac_stx[1].tx_stat_outxoffsent_lo; + + estats->pfc_frames_received_hi = pstats->pfc_frames_rx_hi; + estats->pfc_frames_received_lo = pstats->pfc_frames_rx_lo; + estats->pfc_frames_sent_hi = pstats->pfc_frames_tx_hi; + estats->pfc_frames_sent_lo = pstats->pfc_frames_tx_lo; } static void bnx2x_emac_stats_update(struct bnx2x_softc *sc) { - struct emac_stats *new = BNX2X_SP(sc, mac_stats.emac_stats); - struct host_port_stats *pstats = BNX2X_SP(sc, port_stats); - struct bnx2x_eth_stats *estats = &sc->eth_stats; - - UPDATE_EXTEND_STAT(rx_stat_ifhcinbadoctets); - UPDATE_EXTEND_STAT(tx_stat_ifhcoutbadoctets); - UPDATE_EXTEND_STAT(rx_stat_dot3statsfcserrors); - UPDATE_EXTEND_STAT(rx_stat_dot3statsalignmenterrors); - UPDATE_EXTEND_STAT(rx_stat_dot3statscarriersenseerrors); - UPDATE_EXTEND_STAT(rx_stat_falsecarriererrors); - UPDATE_EXTEND_STAT(rx_stat_etherstatsundersizepkts); - UPDATE_EXTEND_STAT(rx_stat_dot3statsframestoolong); - UPDATE_EXTEND_STAT(rx_stat_etherstatsfragments); - UPDATE_EXTEND_STAT(rx_stat_etherstatsjabbers); - UPDATE_EXTEND_STAT(rx_stat_maccontrolframesreceived); - UPDATE_EXTEND_STAT(rx_stat_xoffstateentered); - UPDATE_EXTEND_STAT(rx_stat_xonpauseframesreceived); - UPDATE_EXTEND_STAT(rx_stat_xoffpauseframesreceived); - UPDATE_EXTEND_STAT(tx_stat_outxonsent); - UPDATE_EXTEND_STAT(tx_stat_outxoffsent); - UPDATE_EXTEND_STAT(tx_stat_flowcontroldone); - UPDATE_EXTEND_STAT(tx_stat_etherstatscollisions); - UPDATE_EXTEND_STAT(tx_stat_dot3statssinglecollisionframes); - UPDATE_EXTEND_STAT(tx_stat_dot3statsmultiplecollisionframes); - UPDATE_EXTEND_STAT(tx_stat_dot3statsdeferredtransmissions); - UPDATE_EXTEND_STAT(tx_stat_dot3statsexcessivecollisions); - UPDATE_EXTEND_STAT(tx_stat_dot3statslatecollisions); - UPDATE_EXTEND_STAT(tx_stat_etherstatspkts64octets); - UPDATE_EXTEND_STAT(tx_stat_etherstatspkts65octetsto127octets); - UPDATE_EXTEND_STAT(tx_stat_etherstatspkts128octetsto255octets); - UPDATE_EXTEND_STAT(tx_stat_etherstatspkts256octetsto511octets); - UPDATE_EXTEND_STAT(tx_stat_etherstatspkts512octetsto1023octets); - UPDATE_EXTEND_STAT(tx_stat_etherstatspkts1024octetsto1522octets); - UPDATE_EXTEND_STAT(tx_stat_etherstatspktsover1522octets); - UPDATE_EXTEND_STAT(tx_stat_dot3statsinternalmactransmiterrors); - - estats->pause_frames_received_hi = - pstats->mac_stx[1].rx_stat_xonpauseframesreceived_hi; - estats->pause_frames_received_lo = - pstats->mac_stx[1].rx_stat_xonpauseframesreceived_lo; - ADD_64(estats->pause_frames_received_hi, - pstats->mac_stx[1].rx_stat_xoffpauseframesreceived_hi, - estats->pause_frames_received_lo, - pstats->mac_stx[1].rx_stat_xoffpauseframesreceived_lo); - - estats->pause_frames_sent_hi = - pstats->mac_stx[1].tx_stat_outxonsent_hi; - estats->pause_frames_sent_lo = - pstats->mac_stx[1].tx_stat_outxonsent_lo; - ADD_64(estats->pause_frames_sent_hi, - pstats->mac_stx[1].tx_stat_outxoffsent_hi, - estats->pause_frames_sent_lo, - pstats->mac_stx[1].tx_stat_outxoffsent_lo); + struct emac_stats *new = BNX2X_SP(sc, mac_stats.emac_stats); + struct host_port_stats *pstats = BNX2X_SP(sc, port_stats); + struct bnx2x_eth_stats *estats = &sc->eth_stats; + + UPDATE_EXTEND_STAT(rx_stat_ifhcinbadoctets); + UPDATE_EXTEND_STAT(tx_stat_ifhcoutbadoctets); + UPDATE_EXTEND_STAT(rx_stat_dot3statsfcserrors); + UPDATE_EXTEND_STAT(rx_stat_dot3statsalignmenterrors); + UPDATE_EXTEND_STAT(rx_stat_dot3statscarriersenseerrors); + UPDATE_EXTEND_STAT(rx_stat_falsecarriererrors); + UPDATE_EXTEND_STAT(rx_stat_etherstatsundersizepkts); + UPDATE_EXTEND_STAT(rx_stat_dot3statsframestoolong); + UPDATE_EXTEND_STAT(rx_stat_etherstatsfragments); + UPDATE_EXTEND_STAT(rx_stat_etherstatsjabbers); + UPDATE_EXTEND_STAT(rx_stat_maccontrolframesreceived); + UPDATE_EXTEND_STAT(rx_stat_xoffstateentered); + UPDATE_EXTEND_STAT(rx_stat_xonpauseframesreceived); + UPDATE_EXTEND_STAT(rx_stat_xoffpauseframesreceived); + UPDATE_EXTEND_STAT(tx_stat_outxonsent); + UPDATE_EXTEND_STAT(tx_stat_outxoffsent); + UPDATE_EXTEND_STAT(tx_stat_flowcontroldone); + UPDATE_EXTEND_STAT(tx_stat_etherstatscollisions); + UPDATE_EXTEND_STAT(tx_stat_dot3statssinglecollisionframes); + UPDATE_EXTEND_STAT(tx_stat_dot3statsmultiplecollisionframes); + UPDATE_EXTEND_STAT(tx_stat_dot3statsdeferredtransmissions); + UPDATE_EXTEND_STAT(tx_stat_dot3statsexcessivecollisions); + UPDATE_EXTEND_STAT(tx_stat_dot3statslatecollisions); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts64octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts65octetsto127octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts128octetsto255octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts256octetsto511octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts512octetsto1023octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts1024octetsto1522octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspktsover1522octets); + UPDATE_EXTEND_STAT(tx_stat_dot3statsinternalmactransmiterrors); + + estats->pause_frames_received_hi = + pstats->mac_stx[1].rx_stat_xonpauseframesreceived_hi; + estats->pause_frames_received_lo = + pstats->mac_stx[1].rx_stat_xonpauseframesreceived_lo; + ADD_64(estats->pause_frames_received_hi, + pstats->mac_stx[1].rx_stat_xoffpauseframesreceived_hi, + estats->pause_frames_received_lo, + pstats->mac_stx[1].rx_stat_xoffpauseframesreceived_lo); + + estats->pause_frames_sent_hi = + pstats->mac_stx[1].tx_stat_outxonsent_hi; + estats->pause_frames_sent_lo = + pstats->mac_stx[1].tx_stat_outxonsent_lo; + ADD_64(estats->pause_frames_sent_hi, + pstats->mac_stx[1].tx_stat_outxoffsent_hi, + estats->pause_frames_sent_lo, + pstats->mac_stx[1].tx_stat_outxoffsent_lo); } static int bnx2x_hw_stats_update(struct bnx2x_softc *sc) { - struct nig_stats *new = BNX2X_SP(sc, nig_stats); - struct nig_stats *old = &(sc->port.old_nig_stats); - struct host_port_stats *pstats = BNX2X_SP(sc, port_stats); - struct bnx2x_eth_stats *estats = &sc->eth_stats; - uint32_t lpi_reg, nig_timer_max; - struct { - uint32_t lo; - uint32_t hi; - } diff; - - switch (sc->link_vars.mac_type) { - case ELINK_MAC_TYPE_BMAC: - bnx2x_bmac_stats_update(sc); - break; - - case ELINK_MAC_TYPE_EMAC: - bnx2x_emac_stats_update(sc); - break; - - case ELINK_MAC_TYPE_UMAC: - case ELINK_MAC_TYPE_XMAC: - bnx2x_mstat_stats_update(sc); - break; - - case ELINK_MAC_TYPE_NONE: /* unreached */ - PMD_DRV_LOG(DEBUG, sc, - "stats updated by DMAE but no MAC active"); - return -1; - - default: /* unreached */ - PMD_DRV_LOG(ERR, sc, "stats update failed, unknown MAC type"); - } - - ADD_EXTEND_64(pstats->brb_drop_hi, pstats->brb_drop_lo, - new->brb_discard - old->brb_discard); - ADD_EXTEND_64(estats->brb_truncate_hi, estats->brb_truncate_lo, - new->brb_truncate - old->brb_truncate); - - if (!CHIP_IS_E3(sc)) { - UPDATE_STAT64_NIG(egress_mac_pkt0, - etherstatspkts1024octetsto1522octets); - UPDATE_STAT64_NIG(egress_mac_pkt1, - etherstatspktsover1522octets); - } + struct nig_stats *new = BNX2X_SP(sc, nig_stats); + struct nig_stats *old = &sc->port.old_nig_stats; + struct host_port_stats *pstats = BNX2X_SP(sc, port_stats); + struct bnx2x_eth_stats *estats = &sc->eth_stats; + uint32_t lpi_reg, nig_timer_max; + struct { + uint32_t lo; + uint32_t hi; + } diff; + + switch (sc->link_vars.mac_type) { + case ELINK_MAC_TYPE_BMAC: + bnx2x_bmac_stats_update(sc); + break; + + case ELINK_MAC_TYPE_EMAC: + bnx2x_emac_stats_update(sc); + break; + + case ELINK_MAC_TYPE_UMAC: + case ELINK_MAC_TYPE_XMAC: + bnx2x_mstat_stats_update(sc); + break; + + case ELINK_MAC_TYPE_NONE: /* unreached */ + PMD_DRV_LOG(DEBUG, sc, + "stats updated by DMAE but no MAC active"); + return -1; + + default: /* unreached */ + PMD_DRV_LOG(ERR, sc, "stats update failed, unknown MAC type"); + } + + ADD_EXTEND_64(pstats->brb_drop_hi, pstats->brb_drop_lo, + new->brb_discard - old->brb_discard); + ADD_EXTEND_64(estats->brb_truncate_hi, estats->brb_truncate_lo, + new->brb_truncate - old->brb_truncate); + + if (!CHIP_IS_E3(sc)) { + UPDATE_STAT64_NIG(egress_mac_pkt0, + etherstatspkts1024octetsto1522octets); + UPDATE_STAT64_NIG(egress_mac_pkt1, + etherstatspktsover1522octets); + } memcpy(old, new, sizeof(struct nig_stats)); memcpy(RTE_PTR_ADD(estats, offsetof(struct bnx2x_eth_stats, rx_stat_ifhcinbadoctets_hi)), - &pstats->mac_stx[1], sizeof(struct mac_stx)); - estats->brb_drop_hi = pstats->brb_drop_hi; - estats->brb_drop_lo = pstats->brb_drop_lo; - - pstats->host_port_stats_counter++; - - if (CHIP_IS_E3(sc)) { - lpi_reg = (SC_PORT(sc)) ? - MISC_REG_CPMU_LP_SM_ENT_CNT_P1 : - MISC_REG_CPMU_LP_SM_ENT_CNT_P0; - estats->eee_tx_lpi += REG_RD(sc, lpi_reg); - } - - if (!BNX2X_NOMCP(sc)) { - nig_timer_max = SHMEM_RD(sc, port_mb[SC_PORT(sc)].stat_nig_timer); - if (nig_timer_max != estats->nig_timer_max) { - estats->nig_timer_max = nig_timer_max; - PMD_DRV_LOG(ERR, sc, "invalid NIG timer max (%u)", - estats->nig_timer_max); + &pstats->mac_stx[1], sizeof(struct mac_stx)); + estats->brb_drop_hi = pstats->brb_drop_hi; + estats->brb_drop_lo = pstats->brb_drop_lo; + + pstats->host_port_stats_counter++; + + if (CHIP_IS_E3(sc)) { + lpi_reg = (SC_PORT(sc)) ? + MISC_REG_CPMU_LP_SM_ENT_CNT_P1 : + MISC_REG_CPMU_LP_SM_ENT_CNT_P0; + estats->eee_tx_lpi += REG_RD(sc, lpi_reg); } - } - return 0; + if (!BNX2X_NOMCP(sc)) { + nig_timer_max = SHMEM_RD(sc, port_mb[SC_PORT(sc)].stat_nig_timer); + if (nig_timer_max != estats->nig_timer_max) { + estats->nig_timer_max = nig_timer_max; + PMD_DRV_LOG(ERR, sc, "invalid NIG timer max (%u)", + estats->nig_timer_max); + } + } + + return 0; } static int bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc) { - struct stats_counter *counters = &sc->fw_stats_data->storm_counters; - uint16_t cur_stats_counter; - - /* - * Make sure we use the value of the counter - * used for sending the last stats ramrod. - */ - cur_stats_counter = (sc->stats_counter - 1); - - /* are storm stats valid? */ - if (le16toh(counters->xstats_counter) != cur_stats_counter) { - PMD_DRV_LOG(DEBUG, sc, - "stats not updated by xstorm, " - "counter 0x%x != stats_counter 0x%x", - le16toh(counters->xstats_counter), sc->stats_counter); - return -EAGAIN; - } - - if (le16toh(counters->ustats_counter) != cur_stats_counter) { - PMD_DRV_LOG(DEBUG, sc, - "stats not updated by ustorm, " - "counter 0x%x != stats_counter 0x%x", - le16toh(counters->ustats_counter), sc->stats_counter); - return -EAGAIN; - } - - if (le16toh(counters->cstats_counter) != cur_stats_counter) { - PMD_DRV_LOG(DEBUG, sc, - "stats not updated by cstorm, " - "counter 0x%x != stats_counter 0x%x", - le16toh(counters->cstats_counter), sc->stats_counter); - return -EAGAIN; - } - - if (le16toh(counters->tstats_counter) != cur_stats_counter) { - PMD_DRV_LOG(DEBUG, sc, - "stats not updated by tstorm, " - "counter 0x%x != stats_counter 0x%x", - le16toh(counters->tstats_counter), sc->stats_counter); - return -EAGAIN; - } - - return 0; + struct stats_counter *counters = &sc->fw_stats_data->storm_counters; + uint16_t cur_stats_counter; + + /* + * Make sure we use the value of the counter + * used for sending the last stats ramrod. + */ + cur_stats_counter = sc->stats_counter - 1; + + /* are storm stats valid? */ + if (le16toh(counters->xstats_counter) != cur_stats_counter) { + PMD_DRV_LOG(DEBUG, sc, + "stats not updated by xstorm, " + "counter 0x%x != stats_counter 0x%x", + le16toh(counters->xstats_counter), sc->stats_counter); + return -EAGAIN; + } + + if (le16toh(counters->ustats_counter) != cur_stats_counter) { + PMD_DRV_LOG(DEBUG, sc, + "stats not updated by ustorm, " + "counter 0x%x != stats_counter 0x%x", + le16toh(counters->ustats_counter), sc->stats_counter); + return -EAGAIN; + } + + if (le16toh(counters->cstats_counter) != cur_stats_counter) { + PMD_DRV_LOG(DEBUG, sc, + "stats not updated by cstorm, " + "counter 0x%x != stats_counter 0x%x", + le16toh(counters->cstats_counter), sc->stats_counter); + return -EAGAIN; + } + + if (le16toh(counters->tstats_counter) != cur_stats_counter) { + PMD_DRV_LOG(DEBUG, sc, + "stats not updated by tstorm, " + "counter 0x%x != stats_counter 0x%x", + le16toh(counters->tstats_counter), sc->stats_counter); + return -EAGAIN; + } + + return 0; } static int @@ -906,9 +897,8 @@ bnx2x_storm_stats_update(struct bnx2x_softc *sc) int i; /* vfs stat counter is managed by pf */ - if (IS_PF(sc) && bnx2x_storm_stats_validate_counters(sc)) { + if (IS_PF(sc) && bnx2x_storm_stats_validate_counters(sc)) return -EAGAIN; - } estats->error_bytes_received_hi = 0; estats->error_bytes_received_lo = 0; @@ -1074,61 +1064,60 @@ bnx2x_storm_stats_update(struct bnx2x_softc *sc) static void bnx2x_drv_stats_update(struct bnx2x_softc *sc) { - struct bnx2x_eth_stats *estats = &sc->eth_stats; - int i; - - for (i = 0; i < sc->num_queues; i++) { - struct bnx2x_eth_q_stats *qstats = &sc->fp[i].eth_q_stats; - struct bnx2x_eth_q_stats_old *qstats_old = &sc->fp[i].eth_q_stats_old; - - UPDATE_ESTAT_QSTAT(rx_calls); - UPDATE_ESTAT_QSTAT(rx_pkts); - UPDATE_ESTAT_QSTAT(rx_soft_errors); - UPDATE_ESTAT_QSTAT(rx_hw_csum_errors); - UPDATE_ESTAT_QSTAT(rx_ofld_frames_csum_ip); - UPDATE_ESTAT_QSTAT(rx_ofld_frames_csum_tcp_udp); - UPDATE_ESTAT_QSTAT(rx_budget_reached); - UPDATE_ESTAT_QSTAT(tx_pkts); - UPDATE_ESTAT_QSTAT(tx_soft_errors); - UPDATE_ESTAT_QSTAT(tx_ofld_frames_csum_ip); - UPDATE_ESTAT_QSTAT(tx_ofld_frames_csum_tcp); - UPDATE_ESTAT_QSTAT(tx_ofld_frames_csum_udp); - UPDATE_ESTAT_QSTAT(tx_encap_failures); - UPDATE_ESTAT_QSTAT(tx_hw_queue_full); - UPDATE_ESTAT_QSTAT(tx_hw_max_queue_depth); - UPDATE_ESTAT_QSTAT(tx_dma_mapping_failure); - UPDATE_ESTAT_QSTAT(tx_max_drbr_queue_depth); - UPDATE_ESTAT_QSTAT(tx_window_violation_std); - UPDATE_ESTAT_QSTAT(tx_chain_lost_mbuf); - UPDATE_ESTAT_QSTAT(tx_frames_deferred); - UPDATE_ESTAT_QSTAT(tx_queue_xoff); - - /* mbuf driver statistics */ - UPDATE_ESTAT_QSTAT(mbuf_defrag_attempts); - UPDATE_ESTAT_QSTAT(mbuf_defrag_failures); - UPDATE_ESTAT_QSTAT(mbuf_rx_bd_alloc_failed); - UPDATE_ESTAT_QSTAT(mbuf_rx_bd_mapping_failed); - - /* track the number of allocated mbufs */ - UPDATE_ESTAT_QSTAT(mbuf_alloc_tx); - UPDATE_ESTAT_QSTAT(mbuf_alloc_rx); - } + struct bnx2x_eth_stats *estats = &sc->eth_stats; + int i; + + for (i = 0; i < sc->num_queues; i++) { + struct bnx2x_eth_q_stats *qstats = &sc->fp[i].eth_q_stats; + struct bnx2x_eth_q_stats_old *qstats_old = &sc->fp[i].eth_q_stats_old; + + UPDATE_ESTAT_QSTAT(rx_calls); + UPDATE_ESTAT_QSTAT(rx_pkts); + UPDATE_ESTAT_QSTAT(rx_soft_errors); + UPDATE_ESTAT_QSTAT(rx_hw_csum_errors); + UPDATE_ESTAT_QSTAT(rx_ofld_frames_csum_ip); + UPDATE_ESTAT_QSTAT(rx_ofld_frames_csum_tcp_udp); + UPDATE_ESTAT_QSTAT(rx_budget_reached); + UPDATE_ESTAT_QSTAT(tx_pkts); + UPDATE_ESTAT_QSTAT(tx_soft_errors); + UPDATE_ESTAT_QSTAT(tx_ofld_frames_csum_ip); + UPDATE_ESTAT_QSTAT(tx_ofld_frames_csum_tcp); + UPDATE_ESTAT_QSTAT(tx_ofld_frames_csum_udp); + UPDATE_ESTAT_QSTAT(tx_encap_failures); + UPDATE_ESTAT_QSTAT(tx_hw_queue_full); + UPDATE_ESTAT_QSTAT(tx_hw_max_queue_depth); + UPDATE_ESTAT_QSTAT(tx_dma_mapping_failure); + UPDATE_ESTAT_QSTAT(tx_max_drbr_queue_depth); + UPDATE_ESTAT_QSTAT(tx_window_violation_std); + UPDATE_ESTAT_QSTAT(tx_chain_lost_mbuf); + UPDATE_ESTAT_QSTAT(tx_frames_deferred); + UPDATE_ESTAT_QSTAT(tx_queue_xoff); + + /* mbuf driver statistics */ + UPDATE_ESTAT_QSTAT(mbuf_defrag_attempts); + UPDATE_ESTAT_QSTAT(mbuf_defrag_failures); + UPDATE_ESTAT_QSTAT(mbuf_rx_bd_alloc_failed); + UPDATE_ESTAT_QSTAT(mbuf_rx_bd_mapping_failed); + + /* track the number of allocated mbufs */ + UPDATE_ESTAT_QSTAT(mbuf_alloc_tx); + UPDATE_ESTAT_QSTAT(mbuf_alloc_rx); + } } static uint8_t bnx2x_edebug_stats_stopped(struct bnx2x_softc *sc) { - uint32_t val; + uint32_t val; - if (SHMEM2_HAS(sc, edebug_driver_if[1])) { - val = SHMEM2_RD(sc, edebug_driver_if[1]); + if (SHMEM2_HAS(sc, edebug_driver_if[1])) { + val = SHMEM2_RD(sc, edebug_driver_if[1]); - if (val == EDEBUG_DRIVER_IF_OP_CODE_DISABLE_STAT) { - return TRUE; + if (val == EDEBUG_DRIVER_IF_OP_CODE_DISABLE_STAT) + return TRUE; } - } - return FALSE; + return FALSE; } static void @@ -1136,9 +1125,8 @@ bnx2x_stats_update(struct bnx2x_softc *sc) { uint32_t *stats_comp = BNX2X_SP(sc, stats_comp); - if (bnx2x_edebug_stats_stopped(sc)) { + if (bnx2x_edebug_stats_stopped(sc)) return; - } if (IS_PF(sc)) { @@ -1147,18 +1135,15 @@ bnx2x_stats_update(struct bnx2x_softc *sc) bnx2x_storm_stats_post(sc); DELAY_MS(5); - if (*stats_comp != DMAE_COMP_VAL) { + if (*stats_comp != DMAE_COMP_VAL) return; - } - if (sc->port.pmf) { + if (sc->port.pmf) bnx2x_hw_stats_update(sc); - } if (bnx2x_storm_stats_update(sc)) { - if (sc->stats_pending++ == 3) { + if (sc->stats_pending++ == 3) rte_panic("storm stats not updated for 3 times"); - } return; } } else { @@ -1175,113 +1160,107 @@ bnx2x_stats_update(struct bnx2x_softc *sc) static void bnx2x_port_stats_stop(struct bnx2x_softc *sc) { - struct dmae_command *dmae; - uint32_t opcode; - int loader_idx = PMF_DMAE_C(sc); - uint32_t *stats_comp = BNX2X_SP(sc, stats_comp); + struct dmae_command *dmae; + uint32_t opcode; + int loader_idx = PMF_DMAE_C(sc); + uint32_t *stats_comp = BNX2X_SP(sc, stats_comp); - sc->executer_idx = 0; + sc->executer_idx = 0; - opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_PCI, DMAE_DST_GRC, FALSE, 0); + opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_PCI, DMAE_DST_GRC, FALSE, 0); - if (sc->port.port_stx) { - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + if (sc->port.port_stx) { + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - if (sc->func_stx) { - dmae->opcode = bnx2x_dmae_opcode_add_comp(opcode, DMAE_COMP_GRC); - } else { - dmae->opcode = bnx2x_dmae_opcode_add_comp(opcode, DMAE_COMP_PCI); + if (sc->func_stx) + dmae->opcode = bnx2x_dmae_opcode_add_comp(opcode, DMAE_COMP_GRC); + else + dmae->opcode = bnx2x_dmae_opcode_add_comp(opcode, DMAE_COMP_PCI); + + dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, port_stats)); + dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, port_stats)); + dmae->dst_addr_lo = sc->port.port_stx >> 2; + dmae->dst_addr_hi = 0; + dmae->len = bnx2x_get_port_stats_dma_len(sc); + if (sc->func_stx) { + dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + } else { + dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + *stats_comp = 0; + } } - dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, port_stats)); - dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, port_stats)); - dmae->dst_addr_lo = sc->port.port_stx >> 2; - dmae->dst_addr_hi = 0; - dmae->len = bnx2x_get_port_stats_dma_len(sc); if (sc->func_stx) { - dmae->comp_addr_lo = (dmae_reg_go_c[loader_idx] >> 2); - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - } else { - dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_val = DMAE_COMP_VAL; + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = bnx2x_dmae_opcode_add_comp(opcode, DMAE_COMP_PCI); + dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, func_stats)); + dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, func_stats)); + dmae->dst_addr_lo = (sc->func_stx >> 2); + dmae->dst_addr_hi = 0; + dmae->len = (sizeof(struct host_func_stats) >> 2); + dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; - *stats_comp = 0; + *stats_comp = 0; } - } - - if (sc->func_stx) { - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = bnx2x_dmae_opcode_add_comp(opcode, DMAE_COMP_PCI); - dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, func_stats)); - dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, func_stats)); - dmae->dst_addr_lo = (sc->func_stx >> 2); - dmae->dst_addr_hi = 0; - dmae->len = (sizeof(struct host_func_stats) >> 2); - dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_val = DMAE_COMP_VAL; - - *stats_comp = 0; - } } static void bnx2x_stats_stop(struct bnx2x_softc *sc) { - uint8_t update = FALSE; + uint8_t update = FALSE; - bnx2x_stats_comp(sc); + bnx2x_stats_comp(sc); - if (sc->port.pmf) { - update = bnx2x_hw_stats_update(sc) == 0; - } + if (sc->port.pmf) + update = bnx2x_hw_stats_update(sc) == 0; - update |= bnx2x_storm_stats_update(sc) == 0; + update |= bnx2x_storm_stats_update(sc) == 0; - if (update) { + if (update) { + if (sc->port.pmf) + bnx2x_port_stats_stop(sc); - if (sc->port.pmf) { - bnx2x_port_stats_stop(sc); + bnx2x_hw_stats_post(sc); + bnx2x_stats_comp(sc); } - - bnx2x_hw_stats_post(sc); - bnx2x_stats_comp(sc); - } } static void bnx2x_stats_do_nothing(__rte_unused struct bnx2x_softc *sc) { - return; } static const struct { - void (*action)(struct bnx2x_softc *sc); - enum bnx2x_stats_state next_state; + void (*action)(struct bnx2x_softc *sc); + enum bnx2x_stats_state next_state; } bnx2x_stats_stm[STATS_STATE_MAX][STATS_EVENT_MAX] = { - { - /* DISABLED PMF */ { bnx2x_stats_pmf_update, STATS_STATE_DISABLED }, - /* LINK_UP */ { bnx2x_stats_start, STATS_STATE_ENABLED }, - /* UPDATE */ { bnx2x_stats_do_nothing, STATS_STATE_DISABLED }, - /* STOP */ { bnx2x_stats_do_nothing, STATS_STATE_DISABLED } - }, - { - /* ENABLED PMF */ { bnx2x_stats_pmf_start, STATS_STATE_ENABLED }, - /* LINK_UP */ { bnx2x_stats_restart, STATS_STATE_ENABLED }, - /* UPDATE */ { bnx2x_stats_update, STATS_STATE_ENABLED }, - /* STOP */ { bnx2x_stats_stop, STATS_STATE_DISABLED } - } + { + /* DISABLED PMF */ { bnx2x_stats_pmf_update, STATS_STATE_DISABLED }, + /* LINK_UP */ { bnx2x_stats_start, STATS_STATE_ENABLED }, + /* UPDATE */ { bnx2x_stats_do_nothing, STATS_STATE_DISABLED }, + /* STOP */ { bnx2x_stats_do_nothing, STATS_STATE_DISABLED } + }, + { + /* ENABLED PMF */ { bnx2x_stats_pmf_start, STATS_STATE_ENABLED }, + /* LINK_UP */ { bnx2x_stats_restart, STATS_STATE_ENABLED }, + /* UPDATE */ { bnx2x_stats_update, STATS_STATE_ENABLED }, + /* STOP */ { bnx2x_stats_stop, STATS_STATE_DISABLED } + } }; void bnx2x_stats_handle(struct bnx2x_softc *sc, enum bnx2x_stats_event event) { enum bnx2x_stats_state state; - if (unlikely(sc->panic)) { + if (unlikely(sc->panic)) return; - } state = sc->stats_state; sc->stats_state = bnx2x_stats_stm[state][event].next_state; @@ -1298,32 +1277,32 @@ void bnx2x_stats_handle(struct bnx2x_softc *sc, enum bnx2x_stats_event event) static void bnx2x_port_stats_base_init(struct bnx2x_softc *sc) { - struct dmae_command *dmae; - uint32_t *stats_comp = BNX2X_SP(sc, stats_comp); - - /* sanity */ - if (!sc->port.pmf || !sc->port.port_stx) { - PMD_DRV_LOG(ERR, sc, "BUG!"); - return; - } - - sc->executer_idx = 0; - - dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); - dmae->opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_PCI, DMAE_DST_GRC, - TRUE, DMAE_COMP_PCI); - dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, port_stats)); - dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, port_stats)); - dmae->dst_addr_lo = (sc->port.port_stx >> 2); - dmae->dst_addr_hi = 0; - dmae->len = bnx2x_get_port_stats_dma_len(sc); - dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); - dmae->comp_val = DMAE_COMP_VAL; - - *stats_comp = 0; - bnx2x_hw_stats_post(sc); - bnx2x_stats_comp(sc); + struct dmae_command *dmae; + uint32_t *stats_comp = BNX2X_SP(sc, stats_comp); + + /* sanity */ + if (!sc->port.pmf || !sc->port.port_stx) { + PMD_DRV_LOG(ERR, sc, "BUG!"); + return; + } + + sc->executer_idx = 0; + + dmae = BNX2X_SP(sc, dmae[sc->executer_idx++]); + dmae->opcode = bnx2x_dmae_opcode(sc, DMAE_SRC_PCI, DMAE_DST_GRC, + TRUE, DMAE_COMP_PCI); + dmae->src_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, port_stats)); + dmae->src_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, port_stats)); + dmae->dst_addr_lo = (sc->port.port_stx >> 2); + dmae->dst_addr_hi = 0; + dmae->len = bnx2x_get_port_stats_dma_len(sc); + dmae->comp_addr_lo = U64_LO(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_addr_hi = U64_HI(BNX2X_SP_MAPPING(sc, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + *stats_comp = 0; + bnx2x_hw_stats_post(sc); + bnx2x_stats_comp(sc); } /* @@ -1334,84 +1313,84 @@ bnx2x_port_stats_base_init(struct bnx2x_softc *sc) static void bnx2x_prep_fw_stats_req(struct bnx2x_softc *sc) { - int i; - int first_queue_query_index; - struct stats_query_header *stats_hdr = &sc->fw_stats_req->hdr; - rte_iova_t cur_data_offset; - struct stats_query_entry *cur_query_entry; - - stats_hdr->cmd_num = sc->fw_stats_num; - stats_hdr->drv_stats_counter = 0; - - /* - * The storm_counters struct contains the counters of completed - * statistics requests per storm which are incremented by FW - * each time it completes hadning a statistics ramrod. We will - * check these counters in the timer handler and discard a - * (statistics) ramrod completion. - */ - cur_data_offset = (sc->fw_stats_data_mapping + - offsetof(struct bnx2x_fw_stats_data, storm_counters)); - - stats_hdr->stats_counters_addrs.hi = htole32(U64_HI(cur_data_offset)); - stats_hdr->stats_counters_addrs.lo = htole32(U64_LO(cur_data_offset)); - - /* - * Prepare the first stats ramrod (will be completed with - * the counters equal to zero) - init counters to something different. - */ - memset(&sc->fw_stats_data->storm_counters, 0xff, - sizeof(struct stats_counter)); - - /**** Port FW statistics data ****/ - cur_data_offset = (sc->fw_stats_data_mapping + - offsetof(struct bnx2x_fw_stats_data, port)); - - cur_query_entry = &sc->fw_stats_req->query[BNX2X_PORT_QUERY_IDX]; - - cur_query_entry->kind = STATS_TYPE_PORT; - /* For port query index is a DON'T CARE */ - cur_query_entry->index = SC_PORT(sc); - /* For port query funcID is a DON'T CARE */ - cur_query_entry->funcID = htole16(SC_FUNC(sc)); - cur_query_entry->address.hi = htole32(U64_HI(cur_data_offset)); - cur_query_entry->address.lo = htole32(U64_LO(cur_data_offset)); - - /**** PF FW statistics data ****/ - cur_data_offset = (sc->fw_stats_data_mapping + - offsetof(struct bnx2x_fw_stats_data, pf)); - - cur_query_entry = &sc->fw_stats_req->query[BNX2X_PF_QUERY_IDX]; - - cur_query_entry->kind = STATS_TYPE_PF; - /* For PF query index is a DON'T CARE */ - cur_query_entry->index = SC_PORT(sc); - cur_query_entry->funcID = htole16(SC_FUNC(sc)); - cur_query_entry->address.hi = htole32(U64_HI(cur_data_offset)); - cur_query_entry->address.lo = htole32(U64_LO(cur_data_offset)); - - /**** Clients' queries ****/ - cur_data_offset = (sc->fw_stats_data_mapping + - offsetof(struct bnx2x_fw_stats_data, queue_stats)); - - /* - * First queue query index depends whether FCoE offloaded request will - * be included in the ramrod - */ - first_queue_query_index = (BNX2X_FIRST_QUEUE_QUERY_IDX - 1); + int i; + int first_queue_query_index; + struct stats_query_header *stats_hdr = &sc->fw_stats_req->hdr; + rte_iova_t cur_data_offset; + struct stats_query_entry *cur_query_entry; + + stats_hdr->cmd_num = sc->fw_stats_num; + stats_hdr->drv_stats_counter = 0; + + /* + * The storm_counters struct contains the counters of completed + * statistics requests per storm which are incremented by FW + * each time it completes hadning a statistics ramrod. We will + * check these counters in the timer handler and discard a + * (statistics) ramrod completion. + */ + cur_data_offset = (sc->fw_stats_data_mapping + + offsetof(struct bnx2x_fw_stats_data, storm_counters)); + + stats_hdr->stats_counters_addrs.hi = htole32(U64_HI(cur_data_offset)); + stats_hdr->stats_counters_addrs.lo = htole32(U64_LO(cur_data_offset)); + + /* + * Prepare the first stats ramrod (will be completed with + * the counters equal to zero) - init counters to something different. + */ + memset(&sc->fw_stats_data->storm_counters, 0xff, + sizeof(struct stats_counter)); - for (i = 0; i < sc->num_queues; i++) { - cur_query_entry = - &sc->fw_stats_req->query[first_queue_query_index + i]; + /**** Port FW statistics data ****/ + cur_data_offset = (sc->fw_stats_data_mapping + + offsetof(struct bnx2x_fw_stats_data, port)); - cur_query_entry->kind = STATS_TYPE_QUEUE; - cur_query_entry->index = bnx2x_stats_id(&sc->fp[i]); + cur_query_entry = &sc->fw_stats_req->query[BNX2X_PORT_QUERY_IDX]; + + cur_query_entry->kind = STATS_TYPE_PORT; + /* For port query index is a DON'T CARE */ + cur_query_entry->index = SC_PORT(sc); + /* For port query funcID is a DON'T CARE */ + cur_query_entry->funcID = htole16(SC_FUNC(sc)); + cur_query_entry->address.hi = htole32(U64_HI(cur_data_offset)); + cur_query_entry->address.lo = htole32(U64_LO(cur_data_offset)); + + /**** PF FW statistics data ****/ + cur_data_offset = (sc->fw_stats_data_mapping + + offsetof(struct bnx2x_fw_stats_data, pf)); + + cur_query_entry = &sc->fw_stats_req->query[BNX2X_PF_QUERY_IDX]; + + cur_query_entry->kind = STATS_TYPE_PF; + /* For PF query index is a DON'T CARE */ + cur_query_entry->index = SC_PORT(sc); cur_query_entry->funcID = htole16(SC_FUNC(sc)); cur_query_entry->address.hi = htole32(U64_HI(cur_data_offset)); cur_query_entry->address.lo = htole32(U64_LO(cur_data_offset)); - cur_data_offset += sizeof(struct per_queue_stats); - } + /**** Clients' queries ****/ + cur_data_offset = (sc->fw_stats_data_mapping + + offsetof(struct bnx2x_fw_stats_data, queue_stats)); + + /* + * First queue query index depends whether FCoE offloaded request will + * be included in the ramrod + */ + first_queue_query_index = (BNX2X_FIRST_QUEUE_QUERY_IDX - 1); + + for (i = 0; i < sc->num_queues; i++) { + cur_query_entry = + &sc->fw_stats_req->query[first_queue_query_index + i]; + + cur_query_entry->kind = STATS_TYPE_QUEUE; + cur_query_entry->index = bnx2x_stats_id(&sc->fp[i]); + cur_query_entry->funcID = htole16(SC_FUNC(sc)); + cur_query_entry->address.hi = htole32(U64_HI(cur_data_offset)); + cur_query_entry->address.lo = htole32(U64_LO(cur_data_offset)); + + cur_data_offset += sizeof(struct per_queue_stats); + } } void bnx2x_memset_stats(struct bnx2x_softc *sc) @@ -1479,9 +1458,8 @@ bnx2x_stats_init(struct bnx2x_softc *sc) sc->port.port_stx, sc->func_stx); /* pmf should retrieve port statistics from SP on a non-init*/ - if (!sc->stats_init && sc->port.pmf && sc->port.port_stx) { + if (!sc->stats_init && sc->port.pmf && sc->port.port_stx) bnx2x_stats_handle(sc, STATS_EVENT_PMF); - } port = SC_PORT(sc); /* port stats */ @@ -1533,9 +1511,8 @@ bnx2x_stats_init(struct bnx2x_softc *sc) sc->stats_state = STATS_STATE_DISABLED; - if (sc->port.pmf && sc->port.port_stx) { + if (sc->port.pmf && sc->port.port_stx) bnx2x_port_stats_base_init(sc); - } /* mark the end of statistics initialization */ sc->stats_init = FALSE;