From patchwork Wed Dec 7 16:54:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raghu Vatsavayi X-Patchwork-Id: 703661 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3tYl3r1knLz9tB1 for ; Thu, 8 Dec 2016 03:55:20 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="c6k9BP3g"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932883AbcLGQzJ (ORCPT ); Wed, 7 Dec 2016 11:55:09 -0500 Received: from mail-cys01nam02on0084.outbound.protection.outlook.com ([104.47.37.84]:43712 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932685AbcLGQzG (ORCPT ); Wed, 7 Dec 2016 11:55:06 -0500 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=vNleLCysdNiP5JpEjheTeZTFMMHSynL/AHLlSyP3a94=; b=c6k9BP3gPNf0DS7b/E4gRdO8kpj/xL+BD3N0u7fs2o2N4enpYK3OrPkCoFAW76iAmmwdTiFJ1IHqkWmgk7jM+59iFZlrOOPOj5+OmtMVo3IHqga9DzmlamcyS+yTyCZgSAWSUjT2LLctNkjnpSaZuqYIKZcD3spDHof1YwRRRkk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Raghu.Vatsavayi@cavium.com; Received: from localhost.caveonetworks.com.com (50.233.148.156) by CY1PR07MB2133.namprd07.prod.outlook.com (10.164.112.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.761.9; Wed, 7 Dec 2016 16:54:55 +0000 From: Raghu Vatsavayi To: CC: , Raghu Vatsavayi , Raghu Vatsavayi , Derek Chickles , Satanand Burla , Felix Manlunas Subject: [PATCH net-next V3 3/7] liquidio CN23XX: VF mac address Date: Wed, 7 Dec 2016 08:54:33 -0800 Message-ID: <1481129677-10586-4-git-send-email-rvatsavayi@caviumnetworks.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1481129677-10586-1-git-send-email-rvatsavayi@caviumnetworks.com> References: <1481129677-10586-1-git-send-email-rvatsavayi@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: CY4PR13CA0035.namprd13.prod.outlook.com (10.173.156.149) To CY1PR07MB2133.namprd07.prod.outlook.com (10.164.112.11) X-MS-Office365-Filtering-Correlation-Id: 5c898d0b-e7a3-463b-a244-08d41ec1c671 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY1PR07MB2133; X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2133; 3:uJ0nmTQRu7YaHBxPODTXwPRyyU1l/R+Qksq1n/Blw9gKZ4Hfj1tm5OVUsX/AzYCewP5oqLsc3RbaK9xLUrXZNb4EHV4LbsoaRCJYQv5KzUKzzvuaG2Htt1743cEeb0r+hThoLgqjggPFyWjjq8oK5SrxZZUMBPnG7It6/M5KdHmyWwpZHQrbpwcW/WPx+q0J3F384N7S0zm1VNVUwgUANaF48Gj/WYFkIkg+oaJcUwqZ8wbx5uN4wj3YM/Zlgpa3WC+aFA7ROQ+kAQwVcdHplg== X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2133; 25:r5gZ0/D9WkWAMQrsEzOw4pRnNzfptQ/06UG8O+RpOMA1FyCvFvzSqZZlFGPrJRuhl0hZARWtWjlV3oaBiWYyyxHl3kNSqg3g25U4drbyQ6OpOouwAa1tkv/VPZEgGvzGmYxvmXip9to13jq5jFP7+d5KkHY5Kuv5u/5jTiHEGO52icrOqBnJ22SoIX74nZtduAm0venpEq1zttR85ldMD3mcIUDuDXFnhQyohDxzFwMliT2TIEROIjpcSQlzge8kr18i69RTPvgZwp45RIsMEc3WvF+8mMRDPvQxSn9sQ59zQEK2pp4KEUiT1J7yTb93dARvyEUuHdXAsznF9VE58vRtq8wn6/R76oQsGydG6+S8Gg6qEThKnRtBqFAOzPKxR2VyRmUuPQVpyIAjVIALTUro2+sla6wssVC9svY7EQtHkjAOP7d8y05iXO53rxNDm1Q079nvgGyIF+KUN9FJ2VvBTTXzbTP9yxOiS8IB3EIPAnv10c/+vmHQmkuTLgGooF84F7wkM6Uc24vj9G/yz8BKBLtSRhcCfcUIM5SfnCiEJqOkh7ZNcuxGpWORU/qR4tP0bBvQwF0HDXKo0AE22mxP/uUF2jB+uQ+Yirdv4OtTzH4Cxs/btnAgxlFfrValGbgOyo66fRWRiHG4RzTN2pWcycYu/tfsH/S7GpWOp5TOXZxKWeJJDtKVzCypYzPL2zJQejIX5BwrPImCU99N239hdLZz2qvzo0dIr7u35Zdws8pTwSL0LTkaLGKYbOIl/xBfWDqFXL7EGsZRCwELSoABoppWpWMtYS8irblfjfY= X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2133; 31:rIBKsYPHpB6Wa/gRxDMKmREqG0x4jicSZvctIXXaAWXrTYwS3ILVxcz5AkSMjcHlOUecTQXLFOMehwEeZPAmLmGd6v639c4D4DhCYGNhl22Q+YNxVFGg5gxeoujFD8xDLxGNSgA2d3Fa76nxbL/ZS0ynyuVdOw5LBeIBCF8Dsud5vxbjcACsYn3WuF9Y9q9Zq86sFBlz2wyXu7TS51wfLjuR4rnP1RWS/gMc4UJZmVEI+8+doy369DBbCK6V1Ea+QeC3VJgrH+luP/eBdX+qvQ==; 20:j7v0EZZwBkjbghRpW+dHc/W0YTnx1rfYwmjTfe14TTY+1h+IWo/p5AyDMP8YP0QZzmhsXwg8dXWpzHsZA1W4iTNz2ZxY/1BZr44AM/FrJYqdE7inLxCw8uUvpPKtMoynMjXfbZu4gtWDA1Tk0dq/rOwjSP0hGJKywKkXxgKw7XphJsfskj3EBFOBXVCZFZxdiCuUWqNq1kaB298aqHm0GpwEPjJt07GLNgl0D1L9Qvkdu8BBG1ExsNAWkcrY6faJeSo6paJUPt8Enqs0m+j46Vv5yuh/PVVSThXPce7siR//cbqu4R3bkwOvOmmGtoAAGJvU/rqRYmStbeGg6R45rA1oY5a/tgPjziga/NmOFE3NidvpW/TnnjBQCAfKanXasU2vvSBMNk4pQ2Yc09bOAm1IjVdIwPeMc0JuWwTjfAAZ1TVNmJMP+I/NjgZw6M8PxGq4M1g3l0QaXfIZFIjFAt0g1Be2kJ5MiEMw/aHb/1THc8/OtHHB5kDR4gQWXxITWX9hPXRIOdRcoFGS7QtZyAo90DkbQn6TPVJHtK+mOde9xH/vpUAWuAWjmh+Gpcoh+v1ietkaX3kk1zshfQaqSvRg4r/qTOo/FonNEzzOtFI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(6072148); SRVR:CY1PR07MB2133; BCL:0; PCL:0; RULEID:; SRVR:CY1PR07MB2133; X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2133; 4:RJasYbplyecidzEVDiZNUbOU00HX7LL5A9O5KZrmFDc86vdqcobH5zrRhNfjpjzLG606Pp2cklYvcOTwdMWDZU/wjsHBiFp7wCNcGyHI/VgrREVuWW8bqIrZvsUmgEYIR+MRtOixgSsyT/8GUFVQb4VmBjlxIXaE7X7DYQhL3UXHd/aXPbAUZ5SJH8jbw/29stYseN3N8P4MFx8ssH7UNSypz/YZ430wrBYsBaLSmnJwWv3EkWnuqqRu8xkl20UiGzdrVHf84U7jJV0XF/xLENlzg1VAR4vzH/n7mFzK/rsvanWBt3zqJYeUn8AgfEGwlh/evSxAtixXfuiiEPbQIXRL0JEEk0KYhlZ/U2WiVhv3aYI6Z+G4gE/6Umz0DWbP4PNrdduiU82g/q9I1Nz0Y1b7dRkecAHD8XdldEa/+7kPXGrlZ3yx40vG7DBn8PcvqmACBcPfd8xEgBveOCJK/vHoAa9KfPR8f57h6DZjhdGUP9MfzIySmgCcDZBOyhIpxPblSfxsiTbDbpHItlWsu6UVIzQEggP8L7CzN8URjStzZVZ2aG6m8ECEsdYn00/QQbCadWIRvDCyFSrky0iyYA== X-Forefront-PRVS: 01494FA7F7 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(189002)(199003)(5003940100001)(189998001)(6512006)(5660300001)(6486002)(3846002)(6116002)(733004)(39410400001)(50466002)(48376002)(2906002)(47776003)(33646002)(42882006)(6916009)(42186005)(6506006)(110136003)(4720700003)(6666003)(4001430100002)(97736004)(39450400002)(2950100002)(76506005)(107886002)(105586002)(68736007)(4326007)(7736002)(39850400001)(7846002)(305945005)(39840400001)(106356001)(2351001)(38730400001)(92566002)(66066001)(36756003)(50226002)(8676002)(76176999)(101416001)(50986999)(81166006)(81156014); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR07MB2133; H:localhost.caveonetworks.com.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR07MB2133; 23:dha+7VhSqc9O28CKE7FazNZ7dH3ffKVxUW8T9lYZR?= =?us-ascii?Q?LQrrHH2mai3tMBCGKHcU/PjWOO8rIk1xOA+uRI4A/1Vy5sLu8/7cmd8yalU3?= =?us-ascii?Q?Dx2Kx5TLJMIHgqHhStFU3E2Y8jl5wkkv8XKQTw31LZu8Xz8m0z5nBnwLg9oZ?= =?us-ascii?Q?qIEEwGFWIX+piPtXji/sNBNhEAIy1hgio4LVHWrTwhf7eg5Yf3+d78SaS1IS?= =?us-ascii?Q?wgEVjPSY+yvfZTqFun+n8zDIHpz8CSlNSNVPs4ZsLMgJYTTjmL0jvAGpaV9q?= =?us-ascii?Q?ZESn6mt+rDIKZjFCSQ9rwu9w5jGerALu48oXYnlXK4B35TgD1PWxsPUTx0u2?= =?us-ascii?Q?lQ2i48N/WuxeMkk5RmHMrQqefREhiMHL/c/3hS7i1sojk5y4z/V5PsEBss8L?= =?us-ascii?Q?8eMmAd6tCLfq4m4uQDxbRzopiXZQhUOdp+3tiA6A/jVfOOUIUE4OhApRaIlM?= =?us-ascii?Q?EjvXTIctPSdKouCmKpg4AUiJuAifFFqung+7z51Qsu1cm3bQwNe2ejNFKHNx?= =?us-ascii?Q?oheztW1GCpu18/EzSxojaqZ8pYdDvXzUiDUz3TbF5h1Li9oaU5RDgiSEGXJ9?= =?us-ascii?Q?FEeJTfS2/kL3zRRcFs68xBWejiD6MqGPaFzuGxTVYr2KRH1Mjj3OwcoP3H+r?= =?us-ascii?Q?v23EofXIgdnW47ZT89U4D1H39KMqq8DZnN33T/Y2d15/uKM+PlW3QWNOtwKp?= =?us-ascii?Q?Cp4svboWTULwEczoDwC3eVPQ66G4Iemjiht/Q6/JPHnBomtsIGLwjxQZMzaZ?= =?us-ascii?Q?v1/XgwK3c5Pys/KUM2wUcsq/+U9/7Cc4BKH0Nhmm9V2A/xeLNvKAbidro9sK?= =?us-ascii?Q?Vqv087/D2ntXLvrTAtoH+xIhOZCt4IHTofxaOktp0BoaoLyN0c+iyjs8A82c?= =?us-ascii?Q?PrlwhTc58s+yd7OybkUfaifev/kJlTwzVPBSsBTnIYMzin1uTBtn+QGJds9j?= =?us-ascii?Q?GQaEgJbZhIpLiNNTdAOgGe14Tpwd5mN5WEsp1/9EvEOs29x9T8p5Ee1k2OYO?= =?us-ascii?Q?FWowrX/u1JjAF84BssSjYMKdqjeW8JaJufkHnIXntCvHu87uHc+TyrBRsBqb?= =?us-ascii?Q?UvvtEsZh5+f0q7WTVw8ip15Hd/+LIW66EFOYjs272ueGnAJJ36ScjAbqRqSQ?= =?us-ascii?Q?dK307wJ87Vd54VU48Ght54g7tzVD7yGIW6rm3yoJIKOihwYqdVNHrdyrG4Co?= =?us-ascii?Q?hO7R/yiOlyxB0dnraKi7CMBtPU9ETcejvPUZD5C91UWQrN7tz51YKMacfHWM?= =?us-ascii?Q?vPmJaOtMFb1t3XyRWfKjth5Vep+T77z8yLnetcKhABRoPjBl5zogby8xs5fO?= =?us-ascii?Q?EoKrx7WeWErDPI9Fm5mcwo=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2133; 6:2PkuzsthM63JEUMJUDbZchE2bQEmTin8AyXq8LkN4AowI11ugKVzdLl2LpRHc8tuQPvNud4b2HyMcUjMgzBY4fDRaeubTRmYpqZCu0Dad7rxVbmENbkdvjRRaXxvSjCUh3x5D5FbsMzrE9xl6BXXTssYvWlZlwQtBzhuq+lWPqy4FncSTUmCEUjs8Xw65jtRc61ABfTdTKbcDXdOuP+brDgkGQc7fgIBNMpkYwzx3ON3OjCd9qr6rCfOc3LQ0ZJC6EFTtZLVVNU1e1X/GX54Ol7KKETOAH8Ut+4DwJggEIsPpBvztWImkCYwq9WJ4d+LxS8fJDD4CcsCFGgWCUPsBhTCcFS2YVGI2tqktLISn/xwU4aWH49jc3lNyn02ciBn83XA1A51dWiidSs80gqjL002IJ7eHV0RVSk//poQcew=; 5:VeCw/35OUPhbYM+w7UQlBORNHGvDy27fgijm63f2PWSIwO6ctk5QTLgNVQJHGMr3hwfkSEtPHzWpe9tcGgsfOLp9A06GuXfiAv42zdUphOYUyuy3i3hg5zDYtsH5tpnJnmBoPKru0lEjw/G2Z8eLSqKbw8R8eZ+BjVIRefM5eOM=; 24:HLzgpwUc1pDG1eHCQM9AWrlAhrwe5R6I7JhJUA6zg7uTkPGq1JD3MU43HcAirahQPAbf1AhERdSCwjjqq5XUZDYeuqoo5OMMCdYFAKw12Is= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2133; 7:+EoqvuvarF1lNTnur6v/9+y2oyY09+BxK1RdmQf1kOlpckw9IFfahbWg/0VGMAxufyoJnVRC3nBMcGWTudkXMAbAhhKtYSyVz/qN00u0vtvQzdTN+HfQ85ahsA7hMq5ezr6dJ5yPz+7q+BRkSClNQShxDESSiuUDEa2USSjXjXggi/rdje2kEeXrUySqwmB8tsxtqEn6udPLJjcw6CVVL7LckBPbRs3vNGT1JlKOzMDTlVHz/VujiJHhNK3tdaWOOSK6njkSwlyQA8FuPHw/zlFeE+asDXpEitiXFDqFpukOX5Nb5zLiZiI+L0/3+kR7ichKqMz+thHQcvKbujbHYRDUKisHwkoQ7X5MbMfO25h1KD5/qQPso3LbQFr/6LZM2YOyfA27oh8pqXwyMfpKW8kUMgCiSHSsF48ZxalQsx+mrlKKbmc5CZvsQTZjFjCwIuOrYow/AeJCDHzZnJSaUA== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2016 16:54:55.2753 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2133 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Adds support for configuring mtu, multicast and mac address. Signed-off-by: Raghu Vatsavayi Signed-off-by: Derek Chickles Signed-off-by: Satanand Burla Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 195 +++++++++++++++++++++ .../net/ethernet/cavium/liquidio/liquidio_common.h | 1 + .../net/ethernet/cavium/liquidio/octeon_network.h | 1 + 3 files changed, 197 insertions(+) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c index 07e4864..6f23944 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c @@ -864,6 +864,194 @@ static int liquidio_stop(struct net_device *netdev) return 0; } +/** + * \brief Converts a mask based on net device flags + * @param netdev network device + * + * This routine generates a octnet_ifflags mask from the net device flags + * received from the OS. + */ +static enum octnet_ifflags get_new_flags(struct net_device *netdev) +{ + enum octnet_ifflags f = OCTNET_IFFLAG_UNICAST; + + if (netdev->flags & IFF_PROMISC) + f |= OCTNET_IFFLAG_PROMISC; + + if (netdev->flags & IFF_ALLMULTI) + f |= OCTNET_IFFLAG_ALLMULTI; + + if (netdev->flags & IFF_MULTICAST) { + f |= OCTNET_IFFLAG_MULTICAST; + + /* Accept all multicast addresses if there are more than we + * can handle + */ + if (netdev_mc_count(netdev) > MAX_OCTEON_MULTICAST_ADDR) + f |= OCTNET_IFFLAG_ALLMULTI; + } + + if (netdev->flags & IFF_BROADCAST) + f |= OCTNET_IFFLAG_BROADCAST; + + return f; +} + +static void liquidio_set_uc_list(struct net_device *netdev) +{ + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct = lio->oct_dev; + struct octnic_ctrl_pkt nctrl; + struct netdev_hw_addr *ha; + u64 *mac; + + if (lio->netdev_uc_count == netdev_uc_count(netdev)) + return; + + if (netdev_uc_count(netdev) > MAX_NCTRL_UDD) { + dev_err(&oct->pci_dev->dev, "too many MAC addresses in netdev uc list\n"); + return; + } + + lio->netdev_uc_count = netdev_uc_count(netdev); + + memset(&nctrl, 0, sizeof(struct octnic_ctrl_pkt)); + nctrl.ncmd.s.cmd = OCTNET_CMD_SET_UC_LIST; + nctrl.ncmd.s.more = lio->netdev_uc_count; + nctrl.ncmd.s.param1 = oct->vf_num; + nctrl.iq_no = lio->linfo.txpciq[0].s.q_no; + nctrl.netpndev = (u64)netdev; + nctrl.cb_fn = liquidio_link_ctrl_cmd_completion; + + /* copy all the addresses into the udd */ + mac = &nctrl.udd[0]; + netdev_for_each_uc_addr(ha, netdev) { + ether_addr_copy(((u8 *)mac) + 2, ha->addr); + mac++; + } + + octnet_send_nic_ctrl_pkt(lio->oct_dev, &nctrl); +} + +/** + * \brief Net device set_multicast_list + * @param netdev network device + */ +static void liquidio_set_mcast_list(struct net_device *netdev) +{ + int mc_count = min(netdev_mc_count(netdev), MAX_OCTEON_MULTICAST_ADDR); + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct = lio->oct_dev; + struct octnic_ctrl_pkt nctrl; + struct netdev_hw_addr *ha; + u64 *mc; + int ret; + + memset(&nctrl, 0, sizeof(struct octnic_ctrl_pkt)); + + /* Create a ctrl pkt command to be sent to core app. */ + nctrl.ncmd.u64 = 0; + nctrl.ncmd.s.cmd = OCTNET_CMD_SET_MULTI_LIST; + nctrl.ncmd.s.param1 = get_new_flags(netdev); + nctrl.ncmd.s.param2 = mc_count; + nctrl.ncmd.s.more = mc_count; + nctrl.netpndev = (u64)netdev; + nctrl.cb_fn = liquidio_link_ctrl_cmd_completion; + + /* copy all the addresses into the udd */ + mc = &nctrl.udd[0]; + netdev_for_each_mc_addr(ha, netdev) { + *mc = 0; + ether_addr_copy(((u8 *)mc) + 2, ha->addr); + /* no need to swap bytes */ + if (++mc > &nctrl.udd[mc_count]) + break; + } + + nctrl.iq_no = lio->linfo.txpciq[0].s.q_no; + + /* Apparently, any activity in this call from the kernel has to + * be atomic. So we won't wait for response. + */ + nctrl.wait_time = 0; + + ret = octnet_send_nic_ctrl_pkt(lio->oct_dev, &nctrl); + if (ret < 0) { + dev_err(&oct->pci_dev->dev, "DEVFLAGS change failed in core (ret: 0x%x)\n", + ret); + } + + liquidio_set_uc_list(netdev); +} + +/** + * \brief Net device set_mac_address + * @param netdev network device + */ +static int liquidio_set_mac(struct net_device *netdev, void *p) +{ + struct sockaddr *addr = (struct sockaddr *)p; + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct = lio->oct_dev; + struct octnic_ctrl_pkt nctrl; + int ret = 0; + + if (!is_valid_ether_addr(addr->sa_data)) + return -EADDRNOTAVAIL; + + if (ether_addr_equal(addr->sa_data, netdev->dev_addr)) + return 0; + + if (lio->linfo.macaddr_is_admin_asgnd) + return -EPERM; + + memset(&nctrl, 0, sizeof(struct octnic_ctrl_pkt)); + + nctrl.ncmd.u64 = 0; + nctrl.ncmd.s.cmd = OCTNET_CMD_CHANGE_MACADDR; + nctrl.ncmd.s.param1 = 0; + nctrl.ncmd.s.more = 1; + nctrl.iq_no = lio->linfo.txpciq[0].s.q_no; + nctrl.netpndev = (u64)netdev; + nctrl.cb_fn = liquidio_link_ctrl_cmd_completion; + nctrl.wait_time = 100; + + nctrl.udd[0] = 0; + /* The MAC Address is presented in network byte order. */ + ether_addr_copy((u8 *)&nctrl.udd[0] + 2, addr->sa_data); + + ret = octnet_send_nic_ctrl_pkt(lio->oct_dev, &nctrl); + if (ret < 0) { + dev_err(&oct->pci_dev->dev, "MAC Address change failed\n"); + return -ENOMEM; + } + memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); + ether_addr_copy(((u8 *)&lio->linfo.hw_addr) + 2, addr->sa_data); + + return 0; +} + +/** + * \brief Net device change_mtu + * @param netdev network device + */ +static int liquidio_change_mtu(struct net_device *netdev, int new_mtu) +{ + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct = lio->oct_dev; + + lio->mtu = new_mtu; + + netif_info(lio, probe, lio->netdev, "MTU Changed from %d to %d\n", + netdev->mtu, new_mtu); + dev_info(&oct->pci_dev->dev, "%s MTU Changed from %d to %d\n", + netdev->name, netdev->mtu, new_mtu); + + netdev->mtu = new_mtu; + + return 0; +} + /** Sending command to enable/disable RX checksum offload * @param netdev pointer to network device * @param command OCTNET_CMD_TNL_RX_CSUM_CTL @@ -966,6 +1154,9 @@ static int liquidio_set_features(struct net_device *netdev, static const struct net_device_ops lionetdevops = { .ndo_open = liquidio_open, .ndo_stop = liquidio_stop, + .ndo_set_mac_address = liquidio_set_mac, + .ndo_set_rx_mode = liquidio_set_mcast_list, + .ndo_change_mtu = liquidio_change_mtu, .ndo_fix_features = liquidio_fix_features, .ndo_set_features = liquidio_set_features, .ndo_select_queue = select_q, @@ -1165,6 +1356,10 @@ static int setup_nic_devices(struct octeon_device *octeon_dev) netdev->hw_features = lio->dev_capability; + /* MTU range: 68 - 16000 */ + netdev->min_mtu = LIO_MIN_MTU_SIZE; + netdev->max_mtu = LIO_MAX_MTU_SIZE; + /* Point to the properties for octeon device to which this * interface belongs. */ diff --git a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h index f308ee4..ba329f6 100644 --- a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h +++ b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h @@ -212,6 +212,7 @@ static inline void add_sg_size(struct octeon_sg_entry *sg_entry, #define OCTNET_CMD_ID_ACTIVE 0x1a +#define OCTNET_CMD_SET_UC_LIST 0x1b #define OCTNET_CMD_SET_VF_LINKSTATE 0x1c #define OCTNET_CMD_VXLAN_PORT_ADD 0x0 #define OCTNET_CMD_VXLAN_PORT_DEL 0x1 diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_network.h b/drivers/net/ethernet/cavium/liquidio/octeon_network.h index e94edc8..6bb8941 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_network.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_network.h @@ -123,6 +123,7 @@ struct lio { /* work queue for link status */ struct cavium_wq link_status_wq; + int netdev_uc_count; }; #define LIO_SIZE (sizeof(struct lio))