From patchwork Thu Apr 26 00:00:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 904797 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cavium.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="oDvnNbuE"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40Wcdp0mRxz9s0W for ; Thu, 26 Apr 2018 10:00:30 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751512AbeDZAAZ (ORCPT ); Wed, 25 Apr 2018 20:00:25 -0400 Received: from mail-sn1nam01on0086.outbound.protection.outlook.com ([104.47.32.86]:16480 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750868AbeDZAAX (ORCPT ); Wed, 25 Apr 2018 20:00:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=/wuFlCPheUtsgAPMisrvp0LVlqzgc0IEs+pZVQPE9Hk=; b=oDvnNbuESGAMDtvQahyFM+eBBw1xH83z61inDnuYzq3Gktm+DyyDB68J6UmEXGaogoUi4nGfhUUQ9E0dl2n89ruNHMYGX9b8qeTqkGnUScC8HbmVZwvZUMe39xobF9Q3ePezZCvH+KLJZgL000fsLcVTdUVIhqx5s64o4iny1yg= Received: from localhost (50.233.148.156) by BYAPR07MB4213.namprd07.prod.outlook.com (2603:10b6:a02:be::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.696.13; Thu, 26 Apr 2018 00:00:21 +0000 Date: Wed, 25 Apr 2018 17:00:12 -0700 From: Felix Manlunas To: davem@davemloft.net Cc: netdev@vger.kernel.org, raghu.vatsavayi@cavium.com, derek.chickles@cavium.com, satananda.burla@cavium.com, felix.manlunas@cavium.com, pradeep.nalla@cavium.com Subject: [PATCH net-next 1/2] liquidio: move a couple of functions to lio_core.c Message-ID: <20180426000012.GA14071@felix-thinkpad.cavium.com> References: <20180425235942.GA14044@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180425235942.GA14044@felix-thinkpad.cavium.com> User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: BN6PR11CA0030.namprd11.prod.outlook.com (2603:10b6:404:4b::16) To BYAPR07MB4213.namprd07.prod.outlook.com (2603:10b6:a02:be::15) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:BYAPR07MB4213; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 3:jRPPv0F6MsS+31aIfPrS2kElglMe4+hmOEyoFXTO+HeTtAD2Z9c5UbxaNKAwpMhHhrKGniBVWsggC9xztH+ltUcpONLzEfgj5fc+og++q0JbbVPJg4AhqvvW0EmEVmuD84bRfHVrR6GEFxk0ACJf8qVlQiYedwN/B+niRLheJFf4KdzLtcYvb6mYMrbWKG44yccu89PsMt1fsePZ9RFZkrUNt1PcsOLtxKOzyuZXck5nJE32J+3KDPV5hfApg4Vt; 25:jMLfRFnq5yDu2kE73pRAL6IXiUFBOLpsh/VILbilt0GIGURyX2oPD61czTlUN/H9rSLiUOYBBKU+FBuS3CL1Wqm8EVBg9UxrP3Y5BJnvGYVhLp8wOoXkp/TgZQqZX5A71q/O+ASAMc5WetmDoUhbDsOeqylQLdVQkLSJ4czko62kUv2sRklOK5eOC7sVzK5qBydaHFbYAPPppiF7AyZu9YIsg/Wy6xRynL5QXCpgHpln5WCkN175zXQYZypGAbRMu5KI9GusME0RXly0Jh7txZhx4LXgm/HgZ63Ym88VMgx2C1BBWBErbBft8Tmnbg65LRrMS96t7G3ooTjXda3kXg==; 31:eLZdipWJl3tXEBnGmHUJP55UObtoSVr4NZki+BF7cd5uAPhNCQX37Sjxz52LU3xfdXN2TNTDwWS590xrAtZqetP/GsEIny9emEZLR6kd0PMaUEat4ZivHdwl3HLM9v4WljkGvyRiQWg9rxCW6A8prD9LCXNwfODAG9+8BAHqd0NM0QKLRmFywaNpMUpDmJtYB4CHMDQV9jOCNETb92SW2F5moVufqA3tG6rWlH+jZaY= X-MS-TrafficTypeDiagnostic: BYAPR07MB4213: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 20:LIMkW9lH9UC5dg5j1MfDS+3C34d7gQN9AeDSGT1E4UOUSOONTIZXQUSgAHKeL6JQpGK8oqsrdcYFpOkigzhrrQztLNrs4Lqlhht3f0n7gpIR18gPCBJI8OWOsCP6j0zZtH3ZBjl/1jRe0N5b5/L7gFGYCvCfAk4PrEjNPukO7WL5KaYNNkXrijbJoNhVVDcKJk504JdvgypWUuqzpGDTxpl9hZ8o8szKooxWQvwUmQOpHhcOus/8Z3wKV3eRoQJ2rV00+GjrODRTa5i7900pLNImgoM1dHgjA7L9YC+NzyYpKdyXsAQNGsy0JLjo5Bi2e9JIn3Z9KS8+NeMTlJ8uEFcRmHwFjaFy1HPv0N2HipdAM2EI1HXfrxb04r7sXp6YyYugmIj8WoTjrKckTGN+qXidBeP559soJY6pMNSx3TpsimumHcHNrGU/KY1xp+nDyj0S+T774R5nSuAkpPZNutCGLx5kz1lAG2CoGAoUeM6dn1icoFK/4u9tQs+1AiLI; 4:TrBc8lV8rh2K9YWUdUU1qSdn4/LTVT0btsrUhpuWMMA9CcXC/W/LwaU/l3uKtmv3vhb3EN1PXtnGmFubaClFPKHJy6vafAmai6mNZhr8McgteXN2BlQJZ/RvLSw0e8OdsXLJxUxJl4QH3Ry5+DUeCV5me5ztqLK53e1yc5rr6HCtxgTU6THgjuKYCYR2oLu6PWdjEepLubvaG+4P/XqOHS2nJjb7nEXh4iQt9mm4qaP8tn1CpzaQy44W80ydVyjV+HbOOpnDRn20y1BLRZfq/Q== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3231232)(944501410)(52105095)(3002001)(93006095)(93001095)(6041310)(20161123558120)(20161123562045)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:BYAPR07MB4213; BCL:0; PCL:0; RULEID:; SRVR:BYAPR07MB4213; X-Forefront-PRVS: 0654257CF5 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(396003)(346002)(39380400002)(366004)(39860400002)(376002)(189003)(199004)(23726003)(5660300001)(106356001)(2906002)(6116002)(3846002)(2361001)(33656002)(2351001)(305945005)(7736002)(1076002)(6916009)(6666003)(47776003)(52116002)(6496006)(478600001)(76506005)(72206003)(66066001)(44832011)(11346002)(956004)(97736004)(486006)(186003)(476003)(316002)(16586007)(16526019)(58126008)(76176011)(386003)(446003)(59450400001)(50466002)(6486002)(53936002)(26005)(105586002)(25786009)(8676002)(8936002)(81156014)(81166006)(86362001)(4326008)(107886003)(68736007)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR07MB4213; H:localhost; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 23:rC95deRFx/xJFnTm3yJQiRYoVLetcwAyF04zW4KU5NdGnObttRVY+/RulwIVC72Xj+FmqF4JJtnUCACTBwxjJfgnh+FF5p1G+XD2MitLu3RCKEGS6jcCUfBO+z1xx8vPqJ6Y6JMP3m3LGbF4GVm89zgc2vZ3x5eKXBaE0midJtGcFtuBf+N1OmQiMJkdTMSFX2FiaA5iEGyYZqAuRnwXnZslXK+0yLwJxNdJW1Aca8MH+fDQFaQ1k1bdkbu1b8uWnwGBRUMUpsRrs9ZqKEspasVEfX8M6nIndawkz2mhTxi74+ou5lGntS9/AbALnMAtJc+Ty6lI9NoSp9wgJ3r6dGY8EZcS90jy7ntsToMkJwqW2btYoUyM3RK/+qOm/vjUUIxQuOqvouBTRHFGwNPQUF8cy0tDZjIIF9dZdk0ZUxSap55K1g7Eb+lGP7tWD3LoWPZVqBBM8fnlGG0B7geZsOn08w6iuoXGA+eLB7YmcExGo36PlL/1AKdKKlaTun7Ch9hCsNA9FEfOE4vgcunn79DDK5tfvoyB7G2zVqMCuGS/rM3kyF0mHlskV/njXA9JZQzsMpjpKVWjG9NnskmyxPC4VtDJ73iWVMsLLaQvObn5l5AA9T9TQg6Et6e9lMemZulvR93KGhbqkPKIJSR1tjSpydMIwRXlzHRH6HecMWZGHRgQRyIqqWMXOI0TazJY8sxF6jC4NcQB1g+cE0gc6CQbPIl4WILTQhUxRzOlcGrVRCIaGjrTzu+OVST1noJW3dcPWawREMzZzAiOO75hzCMwHShC74FzyHcmKy++jUr4s5yV/M+pqbyzGITUTxEACVhbfn215dZB11RlsOk1hM/L58depNqvTkZDIqxN6xXyx+pCMNyNhHUy5UqDRsj0u7skyasLvs9wHbmoFGTNFCIEzkED1if7nZP4lzjUqVOLgxLrkv5tNVIWp/DN3AubLhC8rjMnXINS0kb6n7zN+CI8XgdzgT0rjFId+AOaDiuHyal32Rs3UvnuWhU51QEcGCmg6GQg+WHXBwKMsD5bfheCt9HWl1qqi9nIa/7nfb6Ofq8iR5iC2+hRtfSKoSg3Ned56p+ET60AxHZh2ykaTigbmkCQHptk/sq7gVmOSqFfx0/5fOBedialtnkMl1CmD8xTx9SYkDzEGgfPdo6FAxmQKrjWpYLtpTh48Sy3GjOf7mJND4P96v6vXAVKPPMIRmzZFxKZL62hUw70hsdsPuXBac1K0loh0ZbuFnj7zLULTyHIi1sb+XmzzIFZ1eKX08xq0OT63PqKNxEKYr6NvaYY4Bh8LaMt6cUFWXjQZUM+eLHQcCetLenvXj4bSOCq X-Microsoft-Antispam-Message-Info: 9WInvknCjV5pO/QnWgAs0NBoga91PGHRk6HDwnC0djxl61EtlboBznVC+52vxhuM8AXoI/9XVSh4kT4Ld8wtlKkz1nenD88cRqLYO+Gfu5DGMjUV5ZuExVkT/cN3DQConszDolM52e17oyk5UZstEyvk/cM1QmM9DdPmOwRcSM9LnqjpwmrmjYVhIex/qwnI X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 6:/eWQ2sRWFg8yrHOSW6c2n/2S70A7M2D8B97mYsfmoZt7Rc4Dj88LMmyqEcJ0RGWbGNKuVzr0K1cw3WD3SJWC3EeLL3OXRDmAmQ/02spizd69HSq1PtzGMBWg3O7wF0eI3AxmvfhXXFmji/B/DINrKW0x463lXAwGIWDlARmgY78rqrFWqZtWqhlFHMOQwlKP2rbpDDQe6fXjnKg2OTOZ4ffUxcY/uLTY5C9dHphph8u6P7DlF+WIBfiRsLuM7lQEmYRO2deVlkZhPlDKXS5WbgiRqp/VsdyUr/MEYXrZe/xdxLo0i2A5+c5cRHK6XARt17/CXGfgUbXaoKPRcE9o5zAOhu5Fg98v9EhTyRVsIeFC7b/wCWm48oXJ7SqWC6vOrCPkHPYg+gISs06OcBHiq6yJUGxp5Hd8jRoGeBsZ9TNfEP7q7AU21kcX2WbKKjZO76bE7mKWtip2zasGzEMIFQ==; 5:DSaanQbSJo6PtdaCFmiF3DVxTgI4wLThVg0EFtdVTppctKd7NxIT9MzEUd1sbfiqXEbA2HePzzuJKoUDHflGi3ZutEQe9m14u/fmvILACROI32+yY2RkpOhg8E9St8Bn4CVRaIY/cRyKuIGYmSjj1Atjrt3+sn67ZLXdw2iKWC4=; 24:DXd6jwNPDMgzY0/2I4nSfDYRVPxdZZJdrl+IEyMCfxRAoBo1l/2dgsrmh3xwAD8Hs12+D5cLg5wsNbb+z0tjCneIXHw3RuIr/dphVgRsEEA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 7:7Taak0US5mV8pVra1UkhQxXV5JSPngo3JZs4XTBYXxr7uFZhFVI2cd/8ID0k7E8bu6qyPxA2oJHVGbYSGgOIneItA5eDHDKXiJVfUjV1iTAgOYILG3dH4aJSYDzJpRf9CFvNaa/kvhQD2ZsccfL/tK1kdkB3L2bD3RWssUG6X/Jz6Bo+/doCeexpS1jATkPs+eG9GB2HFKSyYiJfwaFCPqgfRJkhxC2GIFA6ZFW7gUTTZyjzP+1E2x9ii922d+fc X-MS-Office365-Filtering-Correlation-Id: ce3de3aa-21d6-418b-797d-08d5ab08b454 X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2018 00:00:21.3972 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ce3de3aa-21d6-418b-797d-08d5ab08b454 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR07MB4213 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Pradeep Nalla To support the next patch in this series which has code that calls octnet_get_link_stats from two different .c files, move that function (and its dependency octnet_nic_stats_callback) to lio_core.c. Remove octnet_get_link_stats's static declaration and add its function prototype in octeon_network.h. Signed-off-by: Pradeep Nalla Acked-by: Raghu Vatsavayi Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_core.c | 152 ++++++++++++++++++++ drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 157 --------------------- .../net/ethernet/cavium/liquidio/octeon_network.h | 2 + 3 files changed, 154 insertions(+), 157 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_core.c b/drivers/net/ethernet/cavium/liquidio/lio_core.c index 2a94eee..5171dad 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_core.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_core.c @@ -1169,3 +1169,155 @@ int lio_wait_for_clean_oq(struct octeon_device *oct) return pending_pkts; } + +static void +octnet_nic_stats_callback(struct octeon_device *oct_dev, + u32 status, void *ptr) +{ + struct octeon_soft_command *sc = (struct octeon_soft_command *)ptr; + struct oct_nic_stats_resp *resp = + (struct oct_nic_stats_resp *)sc->virtrptr; + struct oct_nic_stats_ctrl *ctrl = + (struct oct_nic_stats_ctrl *)sc->ctxptr; + struct nic_rx_stats *rsp_rstats = &resp->stats.fromwire; + struct nic_tx_stats *rsp_tstats = &resp->stats.fromhost; + struct nic_rx_stats *rstats = &oct_dev->link_stats.fromwire; + struct nic_tx_stats *tstats = &oct_dev->link_stats.fromhost; + + if (status != OCTEON_REQUEST_TIMEOUT && !resp->status) { + octeon_swap_8B_data((u64 *)&resp->stats, + (sizeof(struct oct_link_stats)) >> 3); + + /* RX link-level stats */ + rstats->total_rcvd = rsp_rstats->total_rcvd; + rstats->bytes_rcvd = rsp_rstats->bytes_rcvd; + rstats->total_bcst = rsp_rstats->total_bcst; + rstats->total_mcst = rsp_rstats->total_mcst; + rstats->runts = rsp_rstats->runts; + rstats->ctl_rcvd = rsp_rstats->ctl_rcvd; + /* Accounts for over/under-run of buffers */ + rstats->fifo_err = rsp_rstats->fifo_err; + rstats->dmac_drop = rsp_rstats->dmac_drop; + rstats->fcs_err = rsp_rstats->fcs_err; + rstats->jabber_err = rsp_rstats->jabber_err; + rstats->l2_err = rsp_rstats->l2_err; + rstats->frame_err = rsp_rstats->frame_err; + rstats->red_drops = rsp_rstats->red_drops; + + /* RX firmware stats */ + rstats->fw_total_rcvd = rsp_rstats->fw_total_rcvd; + rstats->fw_total_fwd = rsp_rstats->fw_total_fwd; + rstats->fw_err_pko = rsp_rstats->fw_err_pko; + rstats->fw_err_link = rsp_rstats->fw_err_link; + rstats->fw_err_drop = rsp_rstats->fw_err_drop; + rstats->fw_rx_vxlan = rsp_rstats->fw_rx_vxlan; + rstats->fw_rx_vxlan_err = rsp_rstats->fw_rx_vxlan_err; + + /* Number of packets that are LROed */ + rstats->fw_lro_pkts = rsp_rstats->fw_lro_pkts; + /* Number of octets that are LROed */ + rstats->fw_lro_octs = rsp_rstats->fw_lro_octs; + /* Number of LRO packets formed */ + rstats->fw_total_lro = rsp_rstats->fw_total_lro; + /* Number of times lRO of packet aborted */ + rstats->fw_lro_aborts = rsp_rstats->fw_lro_aborts; + rstats->fw_lro_aborts_port = rsp_rstats->fw_lro_aborts_port; + rstats->fw_lro_aborts_seq = rsp_rstats->fw_lro_aborts_seq; + rstats->fw_lro_aborts_tsval = rsp_rstats->fw_lro_aborts_tsval; + rstats->fw_lro_aborts_timer = rsp_rstats->fw_lro_aborts_timer; + /* intrmod: packet forward rate */ + rstats->fwd_rate = rsp_rstats->fwd_rate; + + /* TX link-level stats */ + tstats->total_pkts_sent = rsp_tstats->total_pkts_sent; + tstats->total_bytes_sent = rsp_tstats->total_bytes_sent; + tstats->mcast_pkts_sent = rsp_tstats->mcast_pkts_sent; + tstats->bcast_pkts_sent = rsp_tstats->bcast_pkts_sent; + tstats->ctl_sent = rsp_tstats->ctl_sent; + /* Packets sent after one collision*/ + tstats->one_collision_sent = rsp_tstats->one_collision_sent; + /* Packets sent after multiple collision*/ + tstats->multi_collision_sent = rsp_tstats->multi_collision_sent; + /* Packets not sent due to max collisions */ + tstats->max_collision_fail = rsp_tstats->max_collision_fail; + /* Packets not sent due to max deferrals */ + tstats->max_deferral_fail = rsp_tstats->max_deferral_fail; + /* Accounts for over/under-run of buffers */ + tstats->fifo_err = rsp_tstats->fifo_err; + tstats->runts = rsp_tstats->runts; + /* Total number of collisions detected */ + tstats->total_collisions = rsp_tstats->total_collisions; + + /* firmware stats */ + tstats->fw_total_sent = rsp_tstats->fw_total_sent; + tstats->fw_total_fwd = rsp_tstats->fw_total_fwd; + tstats->fw_err_pko = rsp_tstats->fw_err_pko; + tstats->fw_err_pki = rsp_tstats->fw_err_pki; + tstats->fw_err_link = rsp_tstats->fw_err_link; + tstats->fw_err_drop = rsp_tstats->fw_err_drop; + tstats->fw_tso = rsp_tstats->fw_tso; + tstats->fw_tso_fwd = rsp_tstats->fw_tso_fwd; + tstats->fw_err_tso = rsp_tstats->fw_err_tso; + tstats->fw_tx_vxlan = rsp_tstats->fw_tx_vxlan; + + resp->status = 1; + } else { + resp->status = -1; + } + complete(&ctrl->complete); +} + +int octnet_get_link_stats(struct net_device *netdev) +{ + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct_dev = lio->oct_dev; + struct octeon_soft_command *sc; + struct oct_nic_stats_ctrl *ctrl; + struct oct_nic_stats_resp *resp; + int retval; + + /* Alloc soft command */ + sc = (struct octeon_soft_command *) + octeon_alloc_soft_command(oct_dev, + 0, + sizeof(struct oct_nic_stats_resp), + sizeof(struct octnic_ctrl_pkt)); + + if (!sc) + return -ENOMEM; + + resp = (struct oct_nic_stats_resp *)sc->virtrptr; + memset(resp, 0, sizeof(struct oct_nic_stats_resp)); + + ctrl = (struct oct_nic_stats_ctrl *)sc->ctxptr; + memset(ctrl, 0, sizeof(struct oct_nic_stats_ctrl)); + ctrl->netdev = netdev; + init_completion(&ctrl->complete); + + sc->iq_no = lio->linfo.txpciq[0].s.q_no; + + octeon_prepare_soft_command(oct_dev, sc, OPCODE_NIC, + OPCODE_NIC_PORT_STATS, 0, 0, 0); + + sc->callback = octnet_nic_stats_callback; + sc->callback_arg = sc; + sc->wait_time = 500; /*in milli seconds*/ + + retval = octeon_send_soft_command(oct_dev, sc); + if (retval == IQ_SEND_FAILED) { + octeon_free_soft_command(oct_dev, sc); + return -EINVAL; + } + + wait_for_completion_timeout(&ctrl->complete, msecs_to_jiffies(1000)); + + if (resp->status != 1) { + octeon_free_soft_command(oct_dev, sc); + + return -EINVAL; + } + + octeon_free_soft_command(oct_dev, sc); + + return 0; +} diff --git a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c index 9926a12..351549c 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c @@ -32,7 +32,6 @@ #include "cn23xx_vf_device.h" static int lio_reset_queues(struct net_device *netdev, uint32_t num_qs); -static int octnet_get_link_stats(struct net_device *netdev); struct oct_intrmod_context { int octeon_id; @@ -1776,162 +1775,6 @@ static int octnet_set_intrmod_cfg(struct lio *lio, return -EINTR; } -static void -octnet_nic_stats_callback(struct octeon_device *oct_dev, - u32 status, void *ptr) -{ - struct octeon_soft_command *sc = (struct octeon_soft_command *)ptr; - struct oct_nic_stats_resp *resp = - (struct oct_nic_stats_resp *)sc->virtrptr; - struct oct_nic_stats_ctrl *ctrl = - (struct oct_nic_stats_ctrl *)sc->ctxptr; - struct nic_rx_stats *rsp_rstats = &resp->stats.fromwire; - struct nic_tx_stats *rsp_tstats = &resp->stats.fromhost; - - struct nic_rx_stats *rstats = &oct_dev->link_stats.fromwire; - struct nic_tx_stats *tstats = &oct_dev->link_stats.fromhost; - - if ((status != OCTEON_REQUEST_TIMEOUT) && !resp->status) { - octeon_swap_8B_data((u64 *)&resp->stats, - (sizeof(struct oct_link_stats)) >> 3); - - /* RX link-level stats */ - rstats->total_rcvd = rsp_rstats->total_rcvd; - rstats->bytes_rcvd = rsp_rstats->bytes_rcvd; - rstats->total_bcst = rsp_rstats->total_bcst; - rstats->total_mcst = rsp_rstats->total_mcst; - rstats->runts = rsp_rstats->runts; - rstats->ctl_rcvd = rsp_rstats->ctl_rcvd; - /* Accounts for over/under-run of buffers */ - rstats->fifo_err = rsp_rstats->fifo_err; - rstats->dmac_drop = rsp_rstats->dmac_drop; - rstats->fcs_err = rsp_rstats->fcs_err; - rstats->jabber_err = rsp_rstats->jabber_err; - rstats->l2_err = rsp_rstats->l2_err; - rstats->frame_err = rsp_rstats->frame_err; - rstats->red_drops = rsp_rstats->red_drops; - - /* RX firmware stats */ - rstats->fw_total_rcvd = rsp_rstats->fw_total_rcvd; - rstats->fw_total_fwd = rsp_rstats->fw_total_fwd; - rstats->fw_err_pko = rsp_rstats->fw_err_pko; - rstats->fw_err_link = rsp_rstats->fw_err_link; - rstats->fw_err_drop = rsp_rstats->fw_err_drop; - rstats->fw_rx_vxlan = rsp_rstats->fw_rx_vxlan; - rstats->fw_rx_vxlan_err = rsp_rstats->fw_rx_vxlan_err; - - /* Number of packets that are LROed */ - rstats->fw_lro_pkts = rsp_rstats->fw_lro_pkts; - /* Number of octets that are LROed */ - rstats->fw_lro_octs = rsp_rstats->fw_lro_octs; - /* Number of LRO packets formed */ - rstats->fw_total_lro = rsp_rstats->fw_total_lro; - /* Number of times lRO of packet aborted */ - rstats->fw_lro_aborts = rsp_rstats->fw_lro_aborts; - rstats->fw_lro_aborts_port = rsp_rstats->fw_lro_aborts_port; - rstats->fw_lro_aborts_seq = rsp_rstats->fw_lro_aborts_seq; - rstats->fw_lro_aborts_tsval = rsp_rstats->fw_lro_aborts_tsval; - rstats->fw_lro_aborts_timer = rsp_rstats->fw_lro_aborts_timer; - /* intrmod: packet forward rate */ - rstats->fwd_rate = rsp_rstats->fwd_rate; - - /* TX link-level stats */ - tstats->total_pkts_sent = rsp_tstats->total_pkts_sent; - tstats->total_bytes_sent = rsp_tstats->total_bytes_sent; - tstats->mcast_pkts_sent = rsp_tstats->mcast_pkts_sent; - tstats->bcast_pkts_sent = rsp_tstats->bcast_pkts_sent; - tstats->ctl_sent = rsp_tstats->ctl_sent; - /* Packets sent after one collision*/ - tstats->one_collision_sent = rsp_tstats->one_collision_sent; - /* Packets sent after multiple collision*/ - tstats->multi_collision_sent = rsp_tstats->multi_collision_sent; - /* Packets not sent due to max collisions */ - tstats->max_collision_fail = rsp_tstats->max_collision_fail; - /* Packets not sent due to max deferrals */ - tstats->max_deferral_fail = rsp_tstats->max_deferral_fail; - /* Accounts for over/under-run of buffers */ - tstats->fifo_err = rsp_tstats->fifo_err; - tstats->runts = rsp_tstats->runts; - /* Total number of collisions detected */ - tstats->total_collisions = rsp_tstats->total_collisions; - - /* firmware stats */ - tstats->fw_total_sent = rsp_tstats->fw_total_sent; - tstats->fw_total_fwd = rsp_tstats->fw_total_fwd; - tstats->fw_err_pko = rsp_tstats->fw_err_pko; - tstats->fw_err_pki = rsp_tstats->fw_err_pki; - tstats->fw_err_link = rsp_tstats->fw_err_link; - tstats->fw_err_drop = rsp_tstats->fw_err_drop; - tstats->fw_tso = rsp_tstats->fw_tso; - tstats->fw_tso_fwd = rsp_tstats->fw_tso_fwd; - tstats->fw_err_tso = rsp_tstats->fw_err_tso; - tstats->fw_tx_vxlan = rsp_tstats->fw_tx_vxlan; - - resp->status = 1; - } else { - resp->status = -1; - } - complete(&ctrl->complete); -} - -/* Configure interrupt moderation parameters */ -static int octnet_get_link_stats(struct net_device *netdev) -{ - struct lio *lio = GET_LIO(netdev); - struct octeon_device *oct_dev = lio->oct_dev; - - struct octeon_soft_command *sc; - struct oct_nic_stats_ctrl *ctrl; - struct oct_nic_stats_resp *resp; - - int retval; - - /* Alloc soft command */ - sc = (struct octeon_soft_command *) - octeon_alloc_soft_command(oct_dev, - 0, - sizeof(struct oct_nic_stats_resp), - sizeof(struct octnic_ctrl_pkt)); - - if (!sc) - return -ENOMEM; - - resp = (struct oct_nic_stats_resp *)sc->virtrptr; - memset(resp, 0, sizeof(struct oct_nic_stats_resp)); - - ctrl = (struct oct_nic_stats_ctrl *)sc->ctxptr; - memset(ctrl, 0, sizeof(struct oct_nic_stats_ctrl)); - ctrl->netdev = netdev; - init_completion(&ctrl->complete); - - sc->iq_no = lio->linfo.txpciq[0].s.q_no; - - octeon_prepare_soft_command(oct_dev, sc, OPCODE_NIC, - OPCODE_NIC_PORT_STATS, 0, 0, 0); - - sc->callback = octnet_nic_stats_callback; - sc->callback_arg = sc; - sc->wait_time = 500; /*in milli seconds*/ - - retval = octeon_send_soft_command(oct_dev, sc); - if (retval == IQ_SEND_FAILED) { - octeon_free_soft_command(oct_dev, sc); - return -EINVAL; - } - - wait_for_completion_timeout(&ctrl->complete, msecs_to_jiffies(1000)); - - if (resp->status != 1) { - octeon_free_soft_command(oct_dev, sc); - - return -EINVAL; - } - - octeon_free_soft_command(oct_dev, sc); - - return 0; -} - static int lio_get_intr_coalesce(struct net_device *netdev, struct ethtool_coalesce *intr_coal) { diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_network.h b/drivers/net/ethernet/cavium/liquidio/octeon_network.h index 4069710..d090edd 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_network.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_network.h @@ -190,6 +190,8 @@ irqreturn_t liquidio_msix_intr_handler(int irq __attribute__((unused)), int octeon_setup_interrupt(struct octeon_device *oct, u32 num_ioqs); +int octnet_get_link_stats(struct net_device *netdev); + int lio_wait_for_clean_oq(struct octeon_device *oct); /** * \brief Register ethtool operations