From patchwork Fri Nov 4 10:36:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Allan W. Nielsen" X-Patchwork-Id: 691207 X-Patchwork-Delegate: linville@tuxdriver.com 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 3t9JDw6t9mz9t2G for ; Fri, 4 Nov 2016 21:37:20 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=mscc365.onmicrosoft.com header.i=@mscc365.onmicrosoft.com header.b="ZSpPOtFG"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932386AbcKDKhQ (ORCPT ); Fri, 4 Nov 2016 06:37:16 -0400 Received: from mail-co1nam03on0078.outbound.protection.outlook.com ([104.47.40.78]:5690 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1761240AbcKDKhO (ORCPT ); Fri, 4 Nov 2016 06:37:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mscc365.onmicrosoft.com; s=selector1-microsemi-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=gZPz20/bItMVN8PPHk0C5qfKQxbbLGwYelcoJLAfcIU=; b=ZSpPOtFGXiUD/EgkO2E9QqDQPbYKh8J91vO6GLTI81yvmjdzg918NBw+G0n2rL+gqo9ads+n4+KzaNKAaLReXcKurei76rw/Nck4maw4cs0MvCCNy5Fyzzi288dL8H+aayJ/5rezQ5EOVRltId0pxVYdzOfsGiZC8c/PA994HiY= Received: from BN6PR02CA0052.namprd02.prod.outlook.com (10.175.94.142) by CY1PR0201MB1067.namprd02.prod.outlook.com (10.161.214.156) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.707.6; Fri, 4 Nov 2016 10:37:11 +0000 Received: from BY2FFO11FD001.protection.gbl (2a01:111:f400:7c0c::160) by BN6PR02CA0052.outlook.office365.com (2603:10b6:404:f9::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.693.12 via Frontend Transport; Fri, 4 Nov 2016 10:37:11 +0000 Authentication-Results: spf=none (sender IP is 208.19.100.21) smtp.mailfrom=microsemi.com; lunn.ch; dkim=none (message not signed) header.d=none; lunn.ch; dmarc=none action=none header.from=microsemi.com; Received-SPF: None (protection.outlook.com: microsemi.com does not designate permitted sender hosts) Received: from avsrvexchhts1.microsemi.net (208.19.100.21) by BY2FFO11FD001.mail.protection.outlook.com (10.1.14.123) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.693.6 via Frontend Transport; Fri, 4 Nov 2016 10:37:10 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:1139; Count:14 Received: from xrelay.vitesse.com (10.9.45.188) by avsrvexchhts1.microsemi.net (10.100.34.105) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 4 Nov 2016 03:37:04 -0700 Received: from localhost (lx-anielsen.dk.vitesse.com [10.10.130.62]) by xrelay.vitesse.com (8.13.8/8.13.8) with ESMTP id uA4Aawqq023422; Fri, 4 Nov 2016 03:36:59 -0700 From: "Allan W. Nielsen" To: CC: , , , , , , "Raju Lakkaraju" Subject: [PATCH ethtool 2/2] Ethtool: Implements ETHTOOL_PHY_GTUNABLE/ETHTOOL_PHY_STUNABLE and PHY downshift Date: Fri, 4 Nov 2016 11:36:45 +0100 Message-ID: <1478255805-25823-3-git-send-email-allan.nielsen@microsemi.com> X-Mailer: git-send-email 2.7.3 In-Reply-To: <1478255805-25823-1-git-send-email-allan.nielsen@microsemi.com> References: <1478255805-25823-1-git-send-email-allan.nielsen@microsemi.com> MIME-Version: 1.0 X-IncomingHeaderCount: 14 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:208.19.100.21; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(428002)(189002)(199003)(81166006)(36756003)(107886002)(4326007)(2906002)(4001430100002)(81156014)(47776003)(69596002)(101416001)(7846002)(19580395003)(356003)(6916009)(2950100002)(19580405001)(8676002)(105586002)(57986006)(76506005)(77096005)(5660300001)(626004)(8936002)(50226002)(48376002)(110136003)(575784001)(86362001)(229853001)(2351001)(106466001)(189998001)(50466002)(68736007)(5003940100001)(33646002)(11100500001)(76176999)(50986999)(586003)(97736004)(87936001)(305945005)(92566002)(6666003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0201MB1067; H:avsrvexchhts1.microsemi.net; FPR:; SPF:None; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD001; 1:+wlKxEhX+7cWvWS8sHRPRYVav/KmeylcRi/g2HKMB/GDfAXmcA3bCtvvIn+DWGO/ltZKHcGVpai7hBbOdO6370I/3IsGOA8E8e2EsVvtuTAirg9TxEuE3x2Yvx5q3f8UCMqJWSRUnoZEClHTNA50asnJiGn5/85v++hWE/EiQi5liu63FDpAqhHcWW1Up2Q/fiFZG5SDVLJ2+3QDY2eiucaCbh3H+iLQ/M/Q5wlIJfYFrx/hyPQR+Xk2cIXr5QPPzJ5zrcuVnoABMn88rO8Y9hpSgMgkrO/T4S8MhPl1nqfxZVTqbTcRlfph49iq2h+QjKxczyCwYJs2JC9LblngpXi9z/re+8mZBYeIIV/o1+fJq7m0YJe1V8tY6qR0OR5H56Qtz+1cXNPyOCVNa5FTuOvCv7y+Oh/XWZI54n7GPWPzn3vylS6EOcNxnlDyqHOuopzl7qKFIs/QtlsaQRxiCUzoztcepBlNmFyJm60fWfbV+A/ojJzL4aq/WIrli0CuWc/hs7Ooy3qqit9gWKuD9Qb/yHwblsUkW+lDgHHZ2/nljKZZ2DwKdURj96Dj2T7uX54iIbBfQ4avYDEeljzF2dez06bxOzlPldcIanhcF+k= X-MS-Office365-Filtering-Correlation-Id: 5e0e525e-43da-4818-e583-08d4049e8882 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1067; 2:YkaPOHCsSvunBsS+fLdTxpo/oL2x32RpMZZ88cwY3rDlDO7MAZkiXj4L/G/NkETiJz3aeolcC0nPwHa7aoWTdPkH5pkQ7IHaafRzW4PenWJnh8+0IChIvDTCFrnQU6OoAU2aqPy5quMqEtVMuUAldeqcj9FZbxC9mi9jK8k+qQlZIJpsu3SDtLEZSsKaZdxbJCcpZZQZDR2wGzq64A+riw==; 3:sYmD3kxQY8OlaNaTVEj05iY6a1NquxjNh9zR3z7ots/u8bQrs00rZOouOy4WCDT3cmA1EX9zMbc7L4QF+nSLx19Sv25t6oDH2/ZUKSv++aeY6oRo29kKhyWeFZ02+nksz0/f9cRyfBAwyLgue8RVjMh30y18pAQcZn0LmJ3aiew/ZhYwb6z2iNAq4p97o1+ZEjrrhz++k+wJULlTQMY+zFXo26tcvlR98EByoAQoct+hp+2/FgCXc81MgaoAKmB1 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0201MB1067; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1067; 25:KqB+zg6TCXHQLKQ0zqX0ShDlXwXcIwvxSw91tJiobWrt84kg3z/vn+EnERwHlCIj49MO+HaaLAE0HUXFluaE5K6gD24DzOConCl2PieIfcWk8r7NDCSU6ifBSj0fycXFvkGNALPpweq7/CgnR6CFjWe0A4dYWx0R7F5izS16sxiXkquMSQEm6v42C6KiLYrPbbLbleu1AwCFpq14ICd4zvaHRInKIrDdg0rpEErQPWHOIOmOY6mrEUkjw7SV4iIlmZqn7dAcGHWvVoqoQsX+RzUm3D2gSqBvnd1Hdw3E9s62F1wsqWNKbdiWQCEYC3kU4wH8ffJo7VTDum2cAkIuLER5cHeaSjyu88zLLNzz6wKpQ1zkPpiLMVimJfjC/0IXhQfU5PHsDMyTG/Jm+3Eti0I6Dcv8XxZNEFPXxmMZjJ3ZtcjM+h4OOb7cqBly0dOBpVS6/WV+39tuLpqS49mk4UrqUaIKy2bPZz19pgY2PXZx3TCdk5QFSt/4lDIbZeLzOqXCmwVZZVPHktgiuzYd02NU1novmvH0zm81hLghQvBSngMXE086p62t169hDxe/JNScXXONzWldDlTs4Hh2t84+B0QeZkrTMToGe5xHxxDxtPNpa30OouISccwG7uAPIoNON0hz5Hf9fz8czA9+BmY2XBL0ajXjfE5Tew7JUEaFGG5avKH/IwlP+zwTOuyGu3ZJI3nioTe8SHmjGyxRhuqxdn7h0Xf+U+8K6684CLaOTtwaSCM+0wJwjzK5WwwRkpVj8i1ydPiX8yCyBm7/35p7hQ18NLigCfIMv51QqRU= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1067; 31:17s1G3ncTcgySsiG+Vky1s7fqk3bHdCk792BrpP6x2sXjYTl7ULAt6RYbxpOUaLvUBp7pUF2/wI+cvHubqnSWoCc88sk/wbVBGsIWDtJ+PoU5J0UmDZdPj/kFoSboGD3p7E9e1JUwYWXVXq8ylh2xGiZd6LpHjjUlmWVQI5fZlroWKhIElSLCAxPfwI99E9yqIG50dAvMNrE1H1T2Q4pGDpd+UdJzMhh97cLnX9+hHRfCt0rLKectc8LixmsJUj5wIlt2OrA2bAZ8I4HNSAcrEAhYLS33DfLjDt3VEq8EQk=; 20:KOfKgGvxywYkhw49N+qY9n5Stb6hpQwOuSXISs1Wqk/0X7ZogiglLAFYghWQ2kA5F8EfFn1lkXZ2hTz3AxZwf3wMI9NxtSDfh4FAvu1iZRrjX5wyUFdsKf4r3FACaSCwH5bCNZhi7wW/Kgha6ff1Iwi6JnRkSoGLICaWYlnPIQ+PHZSqa0PsYXCnyFtyjHstfTwJ1CJFIyEXLaDydh6BO20CHSfgXlt976L2M7YkK2mmZi7W0upTyQCXU/yZtvajlvLSEuMcGx+ta3Q2r9XqVcxLRFk1J3ief/dEjU9rJ+/OjMlWo4dwWibYeo6Cb3oPIKbdNoSMk0YxJ0L6u62J/FayN4vE9i1V0lQtbLUur+yJVJKEkmYUBo250203qqL6LeORChnJ8eyClhslb6ijfAio9Hr6rD4fyiK9L/z0/zhp1TtDnQ6T2rVMMGVgByfYU8pEbVHfGkrzE1NxM+8rNRmi7l+4Ow2oEespB7qWlfS/Qv5iSvWO6hEblDyUNs4j X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(72170198267865); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(13015025)(13024025)(13023025)(13018025)(13017025)(8121501046)(5005006)(10201501046)(3002001)(6055026); SRVR:CY1PR0201MB1067; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0201MB1067; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1067; 4:mPmXsRAKyzYrcwMsp/kdhjf8NOFa0uO5vMgUJrg3ALOjLc3VWrHWgihTTlYBbyLFW3YDIXkm4Q5bK8gbclGYgMdWV71CuZyCkiQRRLp68KxsKY5HR1qZRCGThe96PSJptMxAv/sTuLTseyGkPVDPlAiBO2HZXDTP87p4HX93mbTX5sNlaOsaW6b28QtCAED+MZLz4oVkgMikQxn5MeVnDAliYYpZqaci0nhLGXEbCYqCLNDOEdn1kxN7kKfF3OAfKxiqX8VgDWf1H+j+IQfdQ6GIwWdW7SAZkSRX+Wq9yB7Si7aoXrsCi+QPnQqWHq/u2LqWwXnl6W64Wp6m3CYD8XMGjKFYzgYlRe/yZbSM8brnGmK7nNjmCOuGL4QJE/Ih8SexndDckgInB4tW8BPXXZ/dKCj8l5KP0WMBxOwQVLgzXx6le4a/gW0jFUP6z5uBOnixPUYjxSSz9EWEN+kmFc90e6w2Jns3l9quvz6TtJhqdn+O50tJYJ6gztO3BtitNVFn+tNQ8jFENKYsPvt1jyz0PZy+FiJb4w4IZ7yPbaLyd3v3+NeC2/rRQxl2IFnt X-Forefront-PRVS: 01165471DB X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0201MB1067; 23:Z0X+/oXGWkuWITWplt9TXZ77XIAP91CgeKwlU1Y?= =?us-ascii?Q?kQ+FG3tQeh6xrfXMnvCb2SDGXpHszlaYOAUFMxgdK7yjL8roLh1Rpg1uMSSk?= =?us-ascii?Q?oD39B6UrsugzajHYoQ0gxDwuMPUj/qoH8QMpSt6fQJUroBEvn/+FCdzjbECN?= =?us-ascii?Q?ruQEv7nBLrIKA/2C/ogJSQ23zYEsmd1UkzgaLIqs2eZcrT0NgMNsPDvqQpMs?= =?us-ascii?Q?mEMU5hCCIDmeKfCYNY7d6eaCAztlZEfIY7Q2HjBSGfnc2bTt+Mw1fHmnLVnj?= =?us-ascii?Q?TwPxScm8o+Ul5KyPQpcVDQK9tNFA5z1VLuz+Zmxb9QPcIV/VVgWHaRQLUo1I?= =?us-ascii?Q?KeILCGO6WFUynRNqaPwvs8OWMEqLvjepLdq0ysvzNpC4qE1rVxJ+dTl+KHmb?= =?us-ascii?Q?3HoJcmcts7P66a82Sq/nwhh5yM0g8DiU52DdYJhn9JICT4V3HbTJg9p94aVJ?= =?us-ascii?Q?wy9t864irsbBXg9DKuhUbc0f6Xb9/SI2VgYvvwz04TjxJKebwcfhM+dcqupM?= =?us-ascii?Q?2LizpQZWIMk0ianTqdRqfZ9OW2AYSzueuHdvw/APr9EDdtto+8yT3nWhPvY7?= =?us-ascii?Q?MCF9H8oEnbZBUJS7OhWlZ462UaZCIz9KfS0CpcPeBh+98WYYkO+5ulO6sUOf?= =?us-ascii?Q?4OK1LYzg8pAj6QcPiMHxJ1xSZNrmdbydZL0wUDX+EDATrkACifa5D/5gRv0D?= =?us-ascii?Q?xuZ1JsZYZOhNg4sXoMH7/zL9daUamoAzU9I1jEnPwb5WRnukH5bEXaDZME4q?= =?us-ascii?Q?RFGGibLySSt7Wa6Nv3fRkDUQGs3VKnYEiOoPYFutATSZyFBVdWbRwLWV95gU?= =?us-ascii?Q?/V9QmCCnLZ6TEkEcHuhvD5WLoanoV8xaBz3dyhTg8QtrkKD5yp+bZ51hy3DG?= =?us-ascii?Q?haCqLal2s3RihmdmMTCJgsGc+cGTdxpTPd5NaSTSacoyAoqkgTXAF47GiYc4?= =?us-ascii?Q?1jwTE4uVjGQqTggAssT94iZPTy1Eo0XG9dTcdG8SrDVqtjFhA3ArW+JxYLtt?= =?us-ascii?Q?7zLdMJj5yRJlhOveBAGl6KIXSl8YQgQoWe1HES+WRjVeOmCNiOzXog4wHctn?= =?us-ascii?Q?YK4fXqBlFpSozyPeLDQ84+GHDBxqD9nkqtJ1Y1vcGhuWDZSV3jJW2aiR21Z9?= =?us-ascii?Q?zJP7GAYyrABXKwahnaPfFIB1J44i3cEreiPRzWp19V0opS1ObG0qvPGrBrvA?= =?us-ascii?Q?bDFwB7I1X3X9HRtD892Na7WvWxFVBY7RRPw9g50F/ZwJ6eJbmx61PKgcr90w?= =?us-ascii?Q?6ggPnPVdFpIWdju6J/mg=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1067; 6:OYcZbTKu30g3QPDayO6+gP4E14uTflbQ6OMrp4dgNUxLGRfx0OaB8MXzgS/+SIYJG0xcJn0joeRSWtUZTRhoE091JU8Nyn1wfAEDXfBbKrlKFQS6giaW0M1piXNVjHHKRlulNhAJPzryHFRWW/XLAcBh24xJ/AaRyykgBYgrms9/oFOuQJTD3H0MOogTq/r8iZRNbkDzvftrR6HsAkHrAOkqhr7yxw1kvU1AKGOU42KptBN98Oipb/Js+iqrGb+IBEyxxMj/DSlF1i805qeEkOxtn/aWIikBg7M5cvXEkQoYwRBvrcbgZIvoC6uwxVl7aCxChYZMSbzdhGnwXNhswvsQt1JO8kXv37Q/X0wmD5I=; 5:RKZTWoCe41ta0z4EMbTAcFmFdVCmwsomtqjFPLdRO6bm+YL03EzCykaZ6d3J6fHMUGB5ClN0/PEDimDrdZKlg2zjQUsYiOANAfi80yxJxz1BRm2V8qEp6U/6lDry7hC9TBWAMJn5/xKRM5uuc2XsUw==; 24:VyIV1MdQ2pcX25aQB/vCtN9PdUTsxkjjf6YGAkykuEmAyhOSk5Wr8kXwY3oPsA3vKcK/IrIf504EzZzEpX6pIp08V5PUzvJV0nMLD+JGcGU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1067; 7:Oucmla7yo6K4Gk936PyWXqtJam044eea604D6idHmRHEMis7asyDQ1dIg+wpe0UaU7lsTyAY9c98bu2OZmoXJLoIDFN5i04CpzISjHMb3Rh4BModuV3fDff4aX6R9/Xn8mh63E1aCDpetvL81Zd0KiKo+gtxPAG5j9nDKlRDdEF8TnRwM0lmtKhh1uUjopb+22+TmEcQW6FqUIMhysGCPIf0L2yEH1b8nZIQp+XjXi9/PWxmlL+uk3MOLpndurHiXB3a6pl3lIuj7ATlUMzvac2FQhpmgHDzWVeYaTPoPTApxcXLm8pPgdSj9j0CUGbBU2IeKe3PiK4xXWFqpUug+OfSWHGDNSKake2223qFZZU= X-OriginatorOrg: microsemi.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2016 10:37:10.5366 (UTC) X-MS-Exchange-CrossTenant-Id: f267a5c8-86d8-4cc9-af71-1fd2c67c8fad X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f267a5c8-86d8-4cc9-af71-1fd2c67c8fad; Ip=[208.19.100.21]; Helo=[avsrvexchhts1.microsemi.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0201MB1067 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Raju Lakkaraju Add ethtool get and set tunable to access PHY drivers. Ethtool Help: ethtool -h for PHY tunables ethtool --set-phy-tunable DEVNAME Set PHY tunable [ downshift on|off|%d ] ethtool --get-phy-tunable DEVNAME Get PHY tunable [ downshift ] Ethtool ex: ethtool --set-phy-tuanble eth0 downshift on ethtool --set-phy-tuanble eth0 downshift off ethtool --set-phy-tuanble eth0 downshift 2 ethtool --get-phy-tunable eth0 downshift Signed-off-by: Raju Lakkaraju Signed-off-by: Allan W. Nielsen --- ethtool.8.in | 27 ++++++++++++++++++ ethtool.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) diff --git a/ethtool.8.in b/ethtool.8.in index 9631847..e1fd51f 100644 --- a/ethtool.8.in +++ b/ethtool.8.in @@ -340,6 +340,14 @@ ethtool \- query or control network driver and hardware settings .B2 tx-lpi on off .BN tx-timer .BN advertise +.HP +.B ethtool \-\-set\-phy\-tunable +.I devname +.B3 downshift on off N +.HP +.B ethtool \-\-get\-phy\-tunable +.I devname +.RB [ downshift ] . .\" Adjust lines (i.e. full justification) and hyphenate. .ad @@ -947,6 +955,25 @@ Values are as for Sets the amount of time the device should stay in idle mode prior to asserting its Tx LPI (in microseconds). This has meaning only when Tx LPI is enabled. .RE +.TP +.B \-\-set\-phy\-tunable +Sets the PHY tunable parameters. +.RS 4 +.TP +.A2 downshift on off +Specifies whether downshift should be enabled +.TP +.BI downshift \ N +Sets the PHY downshift count. +.RE +.TP +.B \-\-get\-phy\-tunable +Gets the PHY tunable parameters. +.RS 4 +.TP +.B downshift +Gets the PHY downshift count/status. +.RE .SH BUGS Not supported (in part or whole) on all network drivers. .SH AUTHOR diff --git a/ethtool.c b/ethtool.c index 49ac94e..c9a0a1d 100644 --- a/ethtool.c +++ b/ethtool.c @@ -4520,6 +4520,94 @@ static int do_seee(struct cmd_context *ctx) return 0; } +static int do_get_phy_tunable(struct cmd_context *ctx) +{ + int argc = ctx->argc; + char **argp = ctx->argp; + int err, i; + u8 downshift_changed; + + if (argc < 1) + exit_bad_args(); + for (i = 0; i < argc; i++) { + if (!strcmp(argp[i], "downshift")) { + downshift_changed = 1; + i += 1; + } else { + exit_bad_args(); + } + } + + if (downshift_changed) { + struct ethtool_tunable ds; + u8 count = 0; + + ds.cmd = ETHTOOL_PHY_GTUNABLE; + ds.id = ETHTOOL_PHY_DOWNSHIFT; + ds.type_id = ETHTOOL_TUNABLE_U8; + ds.len = 1; + ds.data[0] = &count; + err = send_ioctl(ctx, &ds); + if (err < 0) { + perror("Cannot Get PHY downshift count"); + err = 87; + } + count = *((u8 *)&ds.data[0]); + if (count) + fprintf(stdout, " Downshift count: %d\n", + count); + else + fprintf(stdout, " Downshift disabled\n"); + } + + return err; +} + +static int do_set_phy_tunable(struct cmd_context *ctx) +{ + int argc = ctx->argc; + char **argp = ctx->argp; + int err, i; + u8 downshift_changed, downshift_wanted = 0; + + for (i = 0; i < argc; i++) { + if (!strcmp(argp[i], "downshift")) { + downshift_changed = 1; + i += 1; + if (i >= argc) + exit_bad_args(); + if (!strcmp(argp[i], "on")) + downshift_wanted = DOWNSHIFT_DEV_DEFAULT_COUNT; + else if (!strcmp(argp[i], "off")) + downshift_wanted = DOWNSHIFT_DEV_DISABLE; + else + downshift_wanted = + get_uint_range(argp[i], 0, 0xff); + } else { + exit_bad_args(); + } + } + + if (downshift_changed) { + struct ethtool_tunable ds; + u8 count; + + ds.cmd = ETHTOOL_PHY_STUNABLE; + ds.id = ETHTOOL_PHY_DOWNSHIFT; + ds.type_id = ETHTOOL_TUNABLE_U8; + ds.len = 1; + ds.data[0] = &count; + *((u8 *)&ds.data[0]) = downshift_wanted; + err = send_ioctl(ctx, &ds); + if (err < 0) { + perror("Cannot Set PHY downshift count"); + err = 87; + } + } + + return err; +} + #ifndef TEST_ETHTOOL int send_ioctl(struct cmd_context *ctx, void *cmd) { @@ -4681,6 +4769,10 @@ static const struct option { " [ advertise %x ]\n" " [ tx-lpi on|off ]\n" " [ tx-timer %d ]\n"}, + { "--set-phy-tunable", 1, do_set_phy_tunable, "Set PHY tunable", + " [ downshift on|off|%d ]\n"}, + { "--get-phy-tunable", 1, do_get_phy_tunable, "Get PHY tunable", + " [ downshift ]\n"}, { "-h|--help", 0, show_usage, "Show this help" }, { "--version", 0, do_version, "Show version number" }, {}