From patchwork Sat Jan 14 12:08:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe Reynes X-Patchwork-Id: 715345 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 3v0yw44KW8z9t0w for ; Sat, 14 Jan 2017 23:09:08 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tBidCcAU"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751966AbdANMIj (ORCPT ); Sat, 14 Jan 2017 07:08:39 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:32971 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751907AbdANMIi (ORCPT ); Sat, 14 Jan 2017 07:08:38 -0500 Received: by mail-wm0-f65.google.com with SMTP id r144so18021111wme.0; Sat, 14 Jan 2017 04:08:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=XOX2zlyts7FoqStKhOph0DOVokQr61Ry8rHixhx//vc=; b=tBidCcAU8ZhIDc41rlUlIpUKpM8sWLCCQ2xrL8KeGe4h+b+qU7il61/yPiEWdV3xBr GmCXcN2MnoNh/oeZtOe2FovQHrqEwiDhFDKj8jzSngcPqvcSRzn/mi79Ds75+dLbaAfO 2czFfwD30H/BObF0jarwSO6Gvr+fhTKfbmO7Y4ys79CL6I9EWretD9viucdiRmqGNyxl u/hIwqvz5jb8e+iRUrPjC2Ryg32tX5ao304rxmF3MCZxJ/T9Xy8miAYaeQc1myzC6u5c E/IvRBnNAkyU7rcZ0XEGsWv3P7YrxgXfMUnmJtuaViXylmLSBHYTFHgOje2VNfJ9qsr6 Bhtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=XOX2zlyts7FoqStKhOph0DOVokQr61Ry8rHixhx//vc=; b=SFHE7GXQyYrSvJpA39KqQjwcYwUoloIIbz65chn9Vvj2kMd/PiAw/3umA3JjA/sQKS u+FJNEUh+G33m0dlrIDZ6JhtZbBqjojWa4rZjFebtzDGQyCUYb69N0a3AQD7mEDUBwya PAmXak+tOZyj+6Jct2od0sHRGB29rA7EhMUQDh/fxsplkubukCzc53fXlthE2b7oLi7y nOJqXCTESI9yxwNI8CkCu+sxlUW2S4X/42Omtl8PP69M4q4HrFRIWLWE4h50nFcxRuQg iqiY6j9128SqgrLn+Rw/cdsINGg1hymGVBlptPEJswm2eJZvgjj+LN2qhfFJ48po046u 35WQ== X-Gm-Message-State: AIkVDXLIWsrcKtkYC+sm1snU8nxN03w7WeAM2DVemFfZN/GvUmm19X8a41bhVQwxcFlyzw== X-Received: by 10.28.8.213 with SMTP id 204mr5662803wmi.100.1484395716841; Sat, 14 Jan 2017 04:08:36 -0800 (PST) Received: from localhost.localdomain (bny93-7-88-161-33-221.fbx.proxad.net. [88.161.33.221]) by smtp.gmail.com with ESMTPSA id y127sm12243922wmg.12.2017.01.14.04.08.34 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 14 Jan 2017 04:08:35 -0800 (PST) From: Philippe Reynes To: mlindner@marvell.com, stephen@networkplumber.org, davem@davemloft.net Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Philippe Reynes Subject: [PATCH] net: marvell: skge: use new api ethtool_{get|set}_link_ksettings Date: Sat, 14 Jan 2017 13:08:28 +0100 Message-Id: <1484395708-4107-1-git-send-email-tremyfr@gmail.com> X-Mailer: git-send-email 1.7.4.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The ethtool api {get|set}_settings is deprecated. We move this driver to new api {get|set}_link_ksettings. The callback set_link_ksettings no longer update the value of advertising, as the struct ethtool_link_ksettings is defined as const. Signed-off-by: Philippe Reynes --- drivers/net/ethernet/marvell/skge.c | 63 ++++++++++++++++++++-------------- 1 files changed, 37 insertions(+), 26 deletions(-) diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c index 9146a51..81106b7 100644 --- a/drivers/net/ethernet/marvell/skge.c +++ b/drivers/net/ethernet/marvell/skge.c @@ -300,65 +300,76 @@ static u32 skge_supported_modes(const struct skge_hw *hw) return supported; } -static int skge_get_settings(struct net_device *dev, - struct ethtool_cmd *ecmd) +static int skge_get_link_ksettings(struct net_device *dev, + struct ethtool_link_ksettings *cmd) { struct skge_port *skge = netdev_priv(dev); struct skge_hw *hw = skge->hw; + u32 supported, advertising; - ecmd->transceiver = XCVR_INTERNAL; - ecmd->supported = skge_supported_modes(hw); + supported = skge_supported_modes(hw); if (hw->copper) { - ecmd->port = PORT_TP; - ecmd->phy_address = hw->phy_addr; + cmd->base.port = PORT_TP; + cmd->base.phy_address = hw->phy_addr; } else - ecmd->port = PORT_FIBRE; + cmd->base.port = PORT_FIBRE; + + advertising = skge->advertising; + cmd->base.autoneg = skge->autoneg; + cmd->base.speed = skge->speed; + cmd->base.duplex = skge->duplex; + + ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, + supported); + ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, + advertising); - ecmd->advertising = skge->advertising; - ecmd->autoneg = skge->autoneg; - ethtool_cmd_speed_set(ecmd, skge->speed); - ecmd->duplex = skge->duplex; return 0; } -static int skge_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) +static int skge_set_link_ksettings(struct net_device *dev, + const struct ethtool_link_ksettings *cmd) { struct skge_port *skge = netdev_priv(dev); const struct skge_hw *hw = skge->hw; u32 supported = skge_supported_modes(hw); int err = 0; + u32 advertising; + + ethtool_convert_link_mode_to_legacy_u32(&advertising, + cmd->link_modes.advertising); - if (ecmd->autoneg == AUTONEG_ENABLE) { - ecmd->advertising = supported; + if (cmd->base.autoneg == AUTONEG_ENABLE) { + advertising = supported; skge->duplex = -1; skge->speed = -1; } else { u32 setting; - u32 speed = ethtool_cmd_speed(ecmd); + u32 speed = cmd->base.speed; switch (speed) { case SPEED_1000: - if (ecmd->duplex == DUPLEX_FULL) + if (cmd->base.duplex == DUPLEX_FULL) setting = SUPPORTED_1000baseT_Full; - else if (ecmd->duplex == DUPLEX_HALF) + else if (cmd->base.duplex == DUPLEX_HALF) setting = SUPPORTED_1000baseT_Half; else return -EINVAL; break; case SPEED_100: - if (ecmd->duplex == DUPLEX_FULL) + if (cmd->base.duplex == DUPLEX_FULL) setting = SUPPORTED_100baseT_Full; - else if (ecmd->duplex == DUPLEX_HALF) + else if (cmd->base.duplex == DUPLEX_HALF) setting = SUPPORTED_100baseT_Half; else return -EINVAL; break; case SPEED_10: - if (ecmd->duplex == DUPLEX_FULL) + if (cmd->base.duplex == DUPLEX_FULL) setting = SUPPORTED_10baseT_Full; - else if (ecmd->duplex == DUPLEX_HALF) + else if (cmd->base.duplex == DUPLEX_HALF) setting = SUPPORTED_10baseT_Half; else return -EINVAL; @@ -371,11 +382,11 @@ static int skge_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) return -EINVAL; skge->speed = speed; - skge->duplex = ecmd->duplex; + skge->duplex = cmd->base.duplex; } - skge->autoneg = ecmd->autoneg; - skge->advertising = ecmd->advertising; + skge->autoneg = cmd->base.autoneg; + skge->advertising = advertising; if (netif_running(dev)) { skge_down(dev); @@ -875,8 +886,6 @@ static int skge_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom } static const struct ethtool_ops skge_ethtool_ops = { - .get_settings = skge_get_settings, - .set_settings = skge_set_settings, .get_drvinfo = skge_get_drvinfo, .get_regs_len = skge_get_regs_len, .get_regs = skge_get_regs, @@ -899,6 +908,8 @@ static int skge_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom .set_phys_id = skge_set_phys_id, .get_sset_count = skge_get_sset_count, .get_ethtool_stats = skge_get_ethtool_stats, + .get_link_ksettings = skge_get_link_ksettings, + .set_link_ksettings = skge_set_link_ksettings, }; /*