From patchwork Mon May 21 10:40:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudarsana Reddy Kalluru X-Patchwork-Id: 917537 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="jsrJKK+Q"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40qFgC3xdYz9rxs for ; Mon, 21 May 2018 20:40:55 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752750AbeEUKkw (ORCPT ); Mon, 21 May 2018 06:40:52 -0400 Received: from mail-sn1nam01on0041.outbound.protection.outlook.com ([104.47.32.41]:46477 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751694AbeEUKko (ORCPT ); Mon, 21 May 2018 06:40:44 -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:X-MS-Exchange-SenderADCheck; bh=cchK+8wxtnBSXPOpvOGFcVMIW6N4OJPCc/dbaTKgPnk=; b=jsrJKK+Qrwi+rjkO0shCwKhkQqOy5nd5ViwhgAvybEb5n/0/omJUIiKNgMiByEMUS7GvzT72Ii840sqrMlGVScu+TMc9m0w+8TJ6wOkXBQPoMTpM3EAWwZxmWSTtP9Y6Xhqj4gI0GI198RVptd6r/TloYKe8/snyCy2rckLH99U= Received: from DM6PR07CA0023.namprd07.prod.outlook.com (2603:10b6:5:94::36) by BN6PR07MB3172.namprd07.prod.outlook.com (2603:10b6:404:a6::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.776.11; Mon, 21 May 2018 10:40:43 +0000 Received: from CO1NAM05FT050.eop-nam05.prod.protection.outlook.com (2a01:111:f400:7e50::204) by DM6PR07CA0023.outlook.office365.com (2603:10b6:5:94::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.776.11 via Frontend Transport; Mon, 21 May 2018 10:40:42 +0000 Authentication-Results: spf=pass (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=cavium.com; Received-SPF: Pass (protection.outlook.com: domain of cavium.com designates 50.232.66.26 as permitted sender) receiver=protection.outlook.com; client-ip=50.232.66.26; helo=CAEXCH02.caveonetworks.com; Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by CO1NAM05FT050.mail.protection.outlook.com (10.152.96.165) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.797.3 via Frontend Transport; Mon, 21 May 2018 10:40:41 +0000 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 21 May 2018 03:40:21 -0700 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id w4LAeMbl005559; Mon, 21 May 2018 03:40:22 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id w4LAeMOW005558; Mon, 21 May 2018 03:40:22 -0700 From: Sudarsana Reddy Kalluru To: CC: , , , Subject: [PATCH net-next 4/8] qede: Add support for populating ethernet TLVs. Date: Mon, 21 May 2018 03:40:14 -0700 Message-ID: <20180521104018.5506-5-sudarsana.kalluru@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20180521104018.5506-1-sudarsana.kalluru@cavium.com> References: <20180521104018.5506-1-sudarsana.kalluru@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(376002)(346002)(39380400002)(39860400002)(396003)(2980300002)(438002)(199004)(189003)(80596001)(336012)(48376002)(486006)(87636003)(305945005)(50466002)(4326008)(446003)(126002)(69596002)(2616005)(476003)(11346002)(8936002)(6916009)(50226002)(81166006)(8676002)(81156014)(72206003)(6666003)(356003)(478600001)(2906002)(186003)(16586007)(42186006)(51416003)(36756003)(76176011)(106466001)(54906003)(59450400001)(47776003)(1076002)(107886003)(26005)(86362001)(5660300001)(2351001)(316002)(106002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR07MB3172; H:CAEXCH02.caveonetworks.com; FPR:; SPF:Pass; LANG:en; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; CO1NAM05FT050; 1:gkXVKJPooTxvqWsH4pQ9pBc3mHiJ4RPB95Pkva10xVAdtMrGUDfVpNjOk5b9ODar21m8+BlgQdXGEl2Cx4I+VT6y38TRC+2FpvajwIsGSpedArrU8K3J8xZuGCcc81Rz X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4608076)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:BN6PR07MB3172; X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 3:drUR3KNQZhNbeDLcdjd3sJszT1IggIgEbCe4OvcvTkxPIPGWXLJZmcWePc20SB8HSx28tHa2MZt2/arN2aL8gS4VWlboO8IzofCe4tygMWqHN1IgyWVXeq/vj4uIr2mtFgUTvjtK+xG6zKTp1VMyYm/rW5MVXoeOwLBQafG4lDvApeAa+LSr1/IuuRpSzrX/aCRFdnvNjx75oHeB/bu/rQQHNeyQqwRvs0jbVirdRT+o9i1eqMzGF+pBdz9kpdE0omNwJaC0LXZpyYs8QOpNnlLAIh9hOkcEm6OSjEDLXc2/G7iO695NOKi5FxOiJZuSHhO62DFm7bJq7uEJTqSUTxWtPpGfjWQzBfYGLIYqFLk=; 25:nQXuI/HzSSYkgCMC98hFqg+KxAhoiI7KImM8faHPCH3+W8jgdX6rXimKglWrPm5NI4tXlOEVWFPEJ+a+An35kZePHVEB8RmzFfRKj2Dm+3EVboKpuCNBXFBdHiV/MM+1pPQ4/jpUZypUkCVMGPCHsfespxjdQn7GX1ky8hsys3J3iJyOr6SnIQvS1jxzUPFhbWpstBKyOy7dgmy/OVRpEjTwb2SUJIaNzCED1tY4m5DOBMyJ5OF7ZDLyORvrIorvU1DyN8ZPMS31wyIvBJbxW0iXqCmnjfevYLwi+JHtR3GxLT+psqwhyEmWEHJNzoNik2Ug8SrovSdKYyuxMHKPHw== X-MS-TrafficTypeDiagnostic: BN6PR07MB3172: X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 31:2RQJOG3Iv5bUHkA/188vTbdwXI0c40IiEahDLH4cLSFoC/3K6qakG+trKxhFM1biBkcdgMU6fHWkoH3DCKPSR07P/fVAENefzWJ0+mgEzqQw/YdOyIotwTBAMaz0mUSnkSo7C8bMpORkwfm3mu9MNjB7oVrxZbwmWQOvERcYPaYfyQvb2NSJBYRgnqRlLbjGjhVeArrvUxGR+Z/N2pETLQKB+py9OBi52//LUoi0dWg=; 20:rFFw2St347QutxsMuvihtmTBrLx+Oc0Byh7ylduY71MYabauR1Y8SRDHmTQvt0IqJbhn1DwqKWxvG06UEHdeskU8n8D1feF/uwmoBJs2J3ayfKVPhcC3oGtEeFzbdfuwoVGhkNITqm4EKpVFf+u+9mIz78Z0lnJPqNwW6ahlhpzZh2S3p9liAfcG771JhlX3Jr8o6LRljEtzQZLeRYvt4u0iFx9RbCW6TnZ7fuBwGXjPc+hSYVwdfANXcyQMIyYgVfhZlI5MWDpIELgy9dB1T2SXcdaZYamSmEBAHNpYtCaDHrnu9xodxaHUaII0OlVb8y4igjK9HxlC8R7uAj90ygieJLgda1rilPdbEiv7zk6N1shUy5Hj22vTpgyI7XXuKknev+g9cTB/RgQlaokzWD9HPVWM32DGk7/APdNJbz5DKf1Vt4Qq8Ci0z2Bj1ncjGYf2725uf7WK1wG8Kqd48oacLc+0+vabbOO+eHEwDB9PP1KLEB14R1m+jozFpTyV X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231254)(944501410)(52105095)(93006095)(93004095)(3002001)(10201501046)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123562045)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BN6PR07MB3172; BCL:0; PCL:0; RULEID:; SRVR:BN6PR07MB3172; X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 4:1fhL4ByFV8ySMyGJPEQFM11TGsWLsX78mVYqJ5C8VLkLkLzPBUC565p7ytCSFXkjaNm9APbbtx+98s03hZ2M1dXotg1WWh7f4WFaiYoIn0vwG8Nd4t0HBQuhAnRpVK57MwHbN33ctkKCUAr8uYBV0M2oVPyVory06BeOrCGa5aS1IAzzuo8kzEguB90xSqia3QXDS0ESDosOVmE8mbMi2yhTIsdqJYCS12GmoXcrcwKPDN19KpN+QQN4l+ieK6LK6Vfd7Lbfb59F4w+ZmuHl+Q== X-Forefront-PRVS: 06793E740F X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 23:0IjP9qaSZKsX8rhUE+jyJAqhqVbvG8hfu8GRrg7wg0BycU6/xSPlmOi+11vnutw0r0im1ZAYd941hImLlBd3sS2A5SNA9iM71kbfqR1jaMSoCh8Pk10DpVW+ZoZ5QOiqXowwvmIwSYlvLC34W+Wz+Arzu92qTpkQ65778ZgLyrBGvh3x8JakVFGij9SUw5KIeIYWb18dyhNZlQ3HLOQN2k4TKJ8mBmWVCgjHG7rzD4bEKJm/dsGc0U169PCi6rEEDYh6xmb3UiJSu9Q4vuQ7M0jYJfjDzFstjrhf/HrQ+/EL99WoErUKvCVUEhwuNxEyxBVfesX3L+Nmmp6o7vxYMoaSNCBYxbGifKUMmlaoHCsEadpKkKHW0QLFt2tSulKWLBSAn1ZkMFcaxyBSH7co+ZYcmq08GBWF6wsZVhskMwjxhGc6ulgw2sLe/lWxhrC6DxmyrvrexzDk2EtME4mCI9WNasp9f6votahOatmMCbcTWXay1p0eRRcjV4FpFGwzBA9N70e06rRaXoU5u45MnNyMxQw/AaOxrdPJykKwm1pDQ6ZhPVKpq6DawxMvdj5/u7eMTjRvkFiTMGwFtPCb+KE1CXA3wxvAgxNTZsRTeB0rAnA+8FPAQVoE5MEluMvZ9W4fFwj9sZPOxRLoiiXxLMcADIHUQo79ebcWxEQ6wJ0KqLGtnlbDD9iEGUsZ6rcJtv39hnmLAv24nOEYqTLsE+RqbJr0NLeb0gnArMJ9Ge+EFwEoYdoLok7G/EAgX5xx1mv0w5Um8Qw1XZ3eUhVveduswYN954GtCKo9dO/6LhIJD1ls5rhyITJpJq+k4kJKwBn3sypDcmjyFyAs1DiQFWfrSVDAOfU8hnOfFZLv5Ulf54BTMVZjkktZgmvpiLw4kBbbClbsL8LpPwgiDRGN81px0nGbY6TN86aAc+DZpvlARs2hfl3cXm0bYRdhq057PXAyfGLjZvnMxP9Pp5pPnM2XSB6sTQDlamM3vOlN42gWGQDVlZUPI7baEu8veXqS68QdQ6NDpR1C7Y2z5f1hOwtbJzwTlAWLrsjwcXlQ8i82Ir7kCJ/DOE4TpaDAEQQyYbU/4CK0liFqQ4qwMxGEZ/JXOHoXyVesYWAPn+l49KpQqN0uXvSCetbSRTPXl8tBOS9eXYtqeZgTrC39fv1arg== X-Microsoft-Antispam-Message-Info: F+Z56iTL11LCDe8OE7IM8fz/P+NCt0PVxJaPIHA6YCnQIvTdGRhtj9Qr1DOdgDpLIl+HJZcfJaTwpRLxWekcbFbdFKtALQnrxhk8oS6Z7ErntAoyObikx2i6QQolOstw5L2pj/XRg6mYWGyjNT/Y4PjYYXcChUIwHTRz+z28wceZu6TMs1+EBX+BJNEVI9lF X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 6:crB5frmdgeIITvHg0uWoi++Tn1WAKiQM0MJgFb42JMroP5LyeupkKsyuk2tLQZB/JadgUgETgGbvV20z/yV0XYD5oRoV2UlRTVHkYpt4P6vFWZRYS8ZAfsBZDGlaPWNIr5VwM47kI7tQgcngjdrT9SShgSr00jTffQ5io5mjtqLBgFknWHI/ly/PSq5yNzO2Dj75pOuYuzQh/oyYX9dC47JxFc0WLQ+t8O9Gh9o1KJAK1qByhKdDi58jbYdzg15vTCssllMFHEAm86F7ayC8JhqP41Nvwve1s3OsISAlQ8ajvL3qzM6vJxWWXIpiTefDJ6VaCpdHq/LVZL0KMuJIRmgkJjRs7pjIsiiEGUb07wgQ6hSVLIWls+cdbBKNWED8HUlqN4EGGzDWL97Uv1kXPbJ8fCmxm4sFuEpyu9JVJsHir5YrwqKqZIdN4Q/1vM0n8fbTw9M4+eUWUEpOSeKU4g==; 5:0cp7G/0TCPGKB57csrsepqoVrVwZ7GQOXoRryiM8ajhxiKrXamtidJSlHX3x1R8mc/2bVJsyu9YW/Zj+V8VqtE/DxsUfrULuAvZU3KAp3UaZtI2L0h10L3owjhgYgqHfsASbQaggdjsYVDQ/VGSsEdo8+g5+x4WWL/rvNY67zHk=; 24:bwAGl03tazm/62NCyQMGCEfokyyIrv9U3+eCrtKnqt9MtyfQRFBjdjufcm+eqrhxdkC3gw7vy4Cimf3zwOwmBxG6KSQcHejCkA8oCVNJ04A= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 7:FoPSPhrh3qI9I5hoy/9YRTCFhfZF+QnO7ogwRB4Ue4Jw72fRmkm1EOhYN2NCUrN7QGO8FH7nFlCBkxEstNrmJC2gS2yPrDq0V4m6yuaWi6Yiafh1byzGFFO6lAhIKvNIAwtbkTb+7jmGXQQMUDuakhR6EwY2dJVDlpuK6gTlmkaN9eOAUHgKeyWKzirhy/HMNLFlKq8yOJDP7fVax1ve5vbBh/8Ai5XuQuiPFwVP3tiE4b2exH/QuhrzOw2VFp7G X-MS-Office365-Filtering-Correlation-Id: 1dd264b4-584d-400a-e623-08d5bf074d2a X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2018 10:40:41.5626 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1dd264b4-584d-400a-e623-08d5bf074d2a X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR07MB3172 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds callbacks for providing the ethernet protocol driver TLVs. Signed-off-by: Sudarsana Reddy Kalluru Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qede/qede_main.c | 101 +++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c index 40e2b92..0db8f8c 100644 --- a/drivers/net/ethernet/qlogic/qede/qede_main.c +++ b/drivers/net/ethernet/qlogic/qede/qede_main.c @@ -133,6 +133,9 @@ enum qede_pci_private { static void qede_remove(struct pci_dev *pdev); static void qede_shutdown(struct pci_dev *pdev); static void qede_link_update(void *dev, struct qed_link_output *link); +static void qede_get_eth_tlv_data(void *edev, void *data); +static void qede_get_generic_tlv_data(void *edev, + struct qed_generic_tlvs *data); /* The qede lock is used to protect driver state change and driver flows that * are not reentrant. @@ -228,6 +231,8 @@ static int qede_sriov_configure(struct pci_dev *pdev, int num_vfs_param) .arfs_filter_op = qede_arfs_filter_op, #endif .link_update = qede_link_update, + .get_generic_tlv_data = qede_get_generic_tlv_data, + .get_protocol_tlv_data = qede_get_eth_tlv_data, }, .force_mac = qede_force_mac, .ports_update = qede_udp_ports_update, @@ -2132,3 +2137,99 @@ static void qede_link_update(void *dev, struct qed_link_output *link) } } } + +static bool qede_is_txq_full(struct qede_dev *edev, struct qede_tx_queue *txq) +{ + struct netdev_queue *netdev_txq; + + netdev_txq = netdev_get_tx_queue(edev->ndev, txq->index); + if (netif_xmit_stopped(netdev_txq)) + return true; + + return false; +} + +static void qede_get_generic_tlv_data(void *dev, struct qed_generic_tlvs *data) +{ + struct qede_dev *edev = dev; + struct netdev_hw_addr *ha; + int i; + + if (edev->ndev->features & NETIF_F_IP_CSUM) + data->feat_flags |= QED_TLV_IP_CSUM; + if (edev->ndev->features & NETIF_F_TSO) + data->feat_flags |= QED_TLV_LSO; + + ether_addr_copy(data->mac[0], edev->ndev->dev_addr); + memset(data->mac[1], 0, ETH_ALEN); + memset(data->mac[2], 0, ETH_ALEN); + /* Copy the first two UC macs */ + netif_addr_lock_bh(edev->ndev); + i = 1; + netdev_for_each_uc_addr(ha, edev->ndev) { + ether_addr_copy(data->mac[i++], ha->addr); + if (i == QED_TLV_MAC_COUNT) + break; + } + + netif_addr_unlock_bh(edev->ndev); +} + +static void qede_get_eth_tlv_data(void *dev, void *data) +{ + struct qed_mfw_tlv_eth *etlv = data; + struct qede_dev *edev = dev; + struct qede_fastpath *fp; + int i; + + etlv->lso_maxoff_size = 0XFFFF; + etlv->lso_maxoff_size_set = true; + etlv->lso_minseg_size = (u16)ETH_TX_LSO_WINDOW_MIN_LEN; + etlv->lso_minseg_size_set = true; + etlv->prom_mode = !!(edev->ndev->flags & IFF_PROMISC); + etlv->prom_mode_set = true; + etlv->tx_descr_size = QEDE_TSS_COUNT(edev); + etlv->tx_descr_size_set = true; + etlv->rx_descr_size = QEDE_RSS_COUNT(edev); + etlv->rx_descr_size_set = true; + etlv->iov_offload = QED_MFW_TLV_IOV_OFFLOAD_VEB; + etlv->iov_offload_set = true; + + /* Fill information regarding queues; Should be done under the qede + * lock to guarantee those don't change beneath our feet. + */ + etlv->txqs_empty = true; + etlv->rxqs_empty = true; + etlv->num_txqs_full = 0; + etlv->num_rxqs_full = 0; + + __qede_lock(edev); + for_each_queue(i) { + fp = &edev->fp_array[i]; + if (fp->type & QEDE_FASTPATH_TX) { + if (fp->txq->sw_tx_cons != fp->txq->sw_tx_prod) + etlv->txqs_empty = false; + if (qede_is_txq_full(edev, fp->txq)) + etlv->num_txqs_full++; + } + if (fp->type & QEDE_FASTPATH_RX) { + if (qede_has_rx_work(fp->rxq)) + etlv->rxqs_empty = false; + + /* This one is a bit tricky; Firmware might stop + * placing packets if ring is not yet full. + * Give an approximation. + */ + if (le16_to_cpu(*fp->rxq->hw_cons_ptr) - + qed_chain_get_cons_idx(&fp->rxq->rx_comp_ring) > + RX_RING_SIZE - 100) + etlv->num_rxqs_full++; + } + } + __qede_unlock(edev); + + etlv->txqs_empty_set = true; + etlv->rxqs_empty_set = true; + etlv->num_txqs_full_set = true; + etlv->num_rxqs_full_set = true; +}