get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/720435/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 720435,
    "url": "http://patchwork.ozlabs.org/api/patches/720435/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1485465593-12561-1-git-send-email-tremyfr@gmail.com/",
    "project": {
        "id": 46,
        "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api",
        "name": "Intel Wired Ethernet development",
        "link_name": "intel-wired-lan",
        "list_id": "intel-wired-lan.osuosl.org",
        "list_email": "intel-wired-lan@osuosl.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1485465593-12561-1-git-send-email-tremyfr@gmail.com>",
    "list_archive_url": null,
    "date": "2017-01-26T21:19:53",
    "name": "net: intel: e1000e: use new api ethtool_{get|set}_link_ksettings",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "20476d3305e9c275b5f14aa33a6da1880c3c89e9",
    "submitter": {
        "id": 65172,
        "url": "http://patchwork.ozlabs.org/api/people/65172/?format=api",
        "name": "Philippe Reynes",
        "email": "tremyfr@gmail.com"
    },
    "delegate": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/users/68/?format=api",
        "username": "jtkirshe",
        "first_name": "Jeff",
        "last_name": "Kirsher",
        "email": "jeffrey.t.kirsher@intel.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1485465593-12561-1-git-send-email-tremyfr@gmail.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/720435/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/720435/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@lists.osuosl.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Received": [
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3v8f0S2Bbyz9t0p\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 27 Jan 2017 10:54:31 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id B7F2689AF7;\n\tThu, 26 Jan 2017 23:54:29 +0000 (UTC)",
            "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id qf1im5asdcFt; Thu, 26 Jan 2017 23:54:27 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 2030A89A22;\n\tThu, 26 Jan 2017 23:54:27 +0000 (UTC)",
            "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id AEE741C274F\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 26 Jan 2017 21:20:04 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id A8BDF93E94\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 26 Jan 2017 21:20:04 +0000 (UTC)",
            "from hemlock.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id z31GxbViybMh for <intel-wired-lan@lists.osuosl.org>;\n\tThu, 26 Jan 2017 21:20:03 +0000 (UTC)",
            "from mail-wm0-f67.google.com (mail-wm0-f67.google.com\n\t[74.125.82.67])\n\tby hemlock.osuosl.org (Postfix) with ESMTPS id 3F14793E73\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 26 Jan 2017 21:20:03 +0000 (UTC)",
            "by mail-wm0-f67.google.com with SMTP id r144so53359273wme.0\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 26 Jan 2017 13:20:03 -0800 (PST)",
            "from localhost.localdomain (bny93-7-88-161-33-221.fbx.proxad.net.\n\t[88.161.33.221]) by smtp.gmail.com with ESMTPSA id\n\th75sm4463336wrh.37.2017.01.26.13.19.59\n\t(version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tThu, 26 Jan 2017 13:20:00 -0800 (PST)"
        ],
        "Authentication-Results": "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"Fvjz7IAQ\"; dkim-atps=neutral",
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=from:to:cc:subject:date:message-id;\n\tbh=RLr8YXXdC48ODjIQhYewYtEVDdTmX92vOxFFYUho36Q=;\n\tb=Fvjz7IAQ0lxK7E+j8bxlvrUQ84CXCMiwdZ3wc9JfNpytTDypHDAE1bUdJzuSYhTL0Q\n\td4UgB/aMxymV2V5HkE6LV6Vuka3BdoS1nnIW5olkyRG7j/GAoa7+g9/N53de9CjYrhp0\n\tL2dWmNTY3DkyMfGurWCDKQs1J8XqzSZCYiGo+3keBYdMKFNgaawquh7rihH4rHrg0w92\n\tBVt7x0uU076y3i+847codSIwIWKagQrBOL5ohMwOVlM/GHpredzsXxws37OPZz1le8uY\n\t5XhS6eJBsCZJjb47pd4BOHiPOiVfGfo1qrVeiuFeSAAUO4NcKnCBXmAZIAK2mcYXyvYC\n\tMyTw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id;\n\tbh=RLr8YXXdC48ODjIQhYewYtEVDdTmX92vOxFFYUho36Q=;\n\tb=BUGHwA4ySaec2zMBh8ZeZn1ugLQvapOIte3YdQROTkgckzC+4h/N8sXXKdo4udgZYE\n\t5RVJ1789vq58emUtk3tiJ7BuiVVFAINWkUZTNEUXbS01Wom0Phyygpn3Dt+Z/Fh1iZzJ\n\tKVz8p7VIEECp6WcE5NjCovB2MmNBPAhiqbIRy/TgkJlkf/5/bh/oNPdhK48omYzdJ+9c\n\tTbMGNApcOqj1o6PdtmtThdXKFNEBPWpK54QMCCX00AF4a0plCHyjvKsG/GAOCBeDwOXB\n\tuUl9Ui0Q8dnU0ywQBqT2k1FuI/I5tf5GPPcClEvCFgJSgLOPFs8a1IRYogk5peqUimg2\n\tO1KA==",
        "X-Gm-Message-State": "AIkVDXIRAm/wWGehb8EwPqtz/5lE3nzjiboZSFN3nPV4vMh5MqCxg1Q5kPHNCqVmidQxlQ==",
        "X-Received": "by 10.223.128.77 with SMTP id 71mr4533892wrk.163.1485465601491; \n\tThu, 26 Jan 2017 13:20:01 -0800 (PST)",
        "From": "Philippe Reynes <tremyfr@gmail.com>",
        "To": "jeffrey.t.kirsher@intel.com,\n\tdavem@davemloft.net",
        "Date": "Thu, 26 Jan 2017 22:19:53 +0100",
        "Message-Id": "<1485465593-12561-1-git-send-email-tremyfr@gmail.com>",
        "X-Mailer": "git-send-email 1.7.4.4",
        "X-Mailman-Approved-At": "Thu, 26 Jan 2017 23:54:26 +0000",
        "Cc": "netdev@vger.kernel.org, intel-wired-lan@lists.osuosl.org,\n\tlinux-kernel@vger.kernel.org, Philippe Reynes <tremyfr@gmail.com>",
        "Subject": "[Intel-wired-lan] [PATCH] net: intel: e1000e: use new api\n\tethtool_{get|set}_link_ksettings",
        "X-BeenThere": "intel-wired-lan@lists.osuosl.org",
        "X-Mailman-Version": "2.1.18-1",
        "Precedence": "list",
        "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.lists.osuosl.org>",
        "List-Unsubscribe": "<http://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@lists.osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@lists.osuosl.org?subject=help>",
        "List-Subscribe": "<http://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.osuosl.org?subject=subscribe>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "intel-wired-lan-bounces@lists.osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@lists.osuosl.org>"
    },
    "content": "The ethtool api {get|set}_settings is deprecated.\nWe move this driver to new api {get|set}_link_ksettings.\n\nAs I don't have the hardware, I'd be very pleased if\nsomeone may test this patch.\n\nSigned-off-by: Philippe Reynes <tremyfr@gmail.com>\n---\n drivers/net/ethernet/intel/e1000e/ethtool.c |   91 ++++++++++++++------------\n 1 files changed, 49 insertions(+), 42 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c\nindex 7aff68a..3768a5c 100644\n--- a/drivers/net/ethernet/intel/e1000e/ethtool.c\n+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c\n@@ -117,15 +117,15 @@ struct e1000_stats {\n \n #define E1000_TEST_LEN ARRAY_SIZE(e1000_gstrings_test)\n \n-static int e1000_get_settings(struct net_device *netdev,\n-\t\t\t      struct ethtool_cmd *ecmd)\n+static int e1000_get_link_ksettings(struct net_device *netdev,\n+\t\t\t\t    struct ethtool_link_ksettings *cmd)\n {\n \tstruct e1000_adapter *adapter = netdev_priv(netdev);\n \tstruct e1000_hw *hw = &adapter->hw;\n-\tu32 speed;\n+\tu32 speed, supported, advertising;\n \n \tif (hw->phy.media_type == e1000_media_type_copper) {\n-\t\tecmd->supported = (SUPPORTED_10baseT_Half |\n+\t\tsupported = (SUPPORTED_10baseT_Half |\n \t\t\t\t   SUPPORTED_10baseT_Full |\n \t\t\t\t   SUPPORTED_100baseT_Half |\n \t\t\t\t   SUPPORTED_100baseT_Full |\n@@ -133,39 +133,36 @@ static int e1000_get_settings(struct net_device *netdev,\n \t\t\t\t   SUPPORTED_Autoneg |\n \t\t\t\t   SUPPORTED_TP);\n \t\tif (hw->phy.type == e1000_phy_ife)\n-\t\t\tecmd->supported &= ~SUPPORTED_1000baseT_Full;\n-\t\tecmd->advertising = ADVERTISED_TP;\n+\t\t\tsupported &= ~SUPPORTED_1000baseT_Full;\n+\t\tadvertising = ADVERTISED_TP;\n \n \t\tif (hw->mac.autoneg == 1) {\n-\t\t\tecmd->advertising |= ADVERTISED_Autoneg;\n+\t\t\tadvertising |= ADVERTISED_Autoneg;\n \t\t\t/* the e1000 autoneg seems to match ethtool nicely */\n-\t\t\tecmd->advertising |= hw->phy.autoneg_advertised;\n+\t\t\tadvertising |= hw->phy.autoneg_advertised;\n \t\t}\n \n-\t\tecmd->port = PORT_TP;\n-\t\tecmd->phy_address = hw->phy.addr;\n-\t\tecmd->transceiver = XCVR_INTERNAL;\n-\n+\t\tcmd->base.port = PORT_TP;\n+\t\tcmd->base.phy_address = hw->phy.addr;\n \t} else {\n-\t\tecmd->supported   = (SUPPORTED_1000baseT_Full |\n+\t\tsupported   = (SUPPORTED_1000baseT_Full |\n \t\t\t\t     SUPPORTED_FIBRE |\n \t\t\t\t     SUPPORTED_Autoneg);\n \n-\t\tecmd->advertising = (ADVERTISED_1000baseT_Full |\n+\t\tadvertising = (ADVERTISED_1000baseT_Full |\n \t\t\t\t     ADVERTISED_FIBRE |\n \t\t\t\t     ADVERTISED_Autoneg);\n \n-\t\tecmd->port = PORT_FIBRE;\n-\t\tecmd->transceiver = XCVR_EXTERNAL;\n+\t\tcmd->base.port = PORT_FIBRE;\n \t}\n \n \tspeed = SPEED_UNKNOWN;\n-\tecmd->duplex = DUPLEX_UNKNOWN;\n+\tcmd->base.duplex = DUPLEX_UNKNOWN;\n \n \tif (netif_running(netdev)) {\n \t\tif (netif_carrier_ok(netdev)) {\n \t\t\tspeed = adapter->link_speed;\n-\t\t\tecmd->duplex = adapter->link_duplex - 1;\n+\t\t\tcmd->base.duplex = adapter->link_duplex - 1;\n \t\t}\n \t} else if (!pm_runtime_suspended(netdev->dev.parent)) {\n \t\tu32 status = er32(STATUS);\n@@ -179,30 +176,36 @@ static int e1000_get_settings(struct net_device *netdev,\n \t\t\t\tspeed = SPEED_10;\n \n \t\t\tif (status & E1000_STATUS_FD)\n-\t\t\t\tecmd->duplex = DUPLEX_FULL;\n+\t\t\t\tcmd->base.duplex = DUPLEX_FULL;\n \t\t\telse\n-\t\t\t\tecmd->duplex = DUPLEX_HALF;\n+\t\t\t\tcmd->base.duplex = DUPLEX_HALF;\n \t\t}\n \t}\n \n-\tethtool_cmd_speed_set(ecmd, speed);\n-\tecmd->autoneg = ((hw->phy.media_type == e1000_media_type_fiber) ||\n+\tcmd->base.speed = speed;\n+\tcmd->base.autoneg = ((hw->phy.media_type == e1000_media_type_fiber) ||\n \t\t\t hw->mac.autoneg) ? AUTONEG_ENABLE : AUTONEG_DISABLE;\n \n \t/* MDI-X => 2; MDI =>1; Invalid =>0 */\n \tif ((hw->phy.media_type == e1000_media_type_copper) &&\n \t    netif_carrier_ok(netdev))\n-\t\tecmd->eth_tp_mdix = hw->phy.is_mdix ? ETH_TP_MDI_X : ETH_TP_MDI;\n+\t\tcmd->base.eth_tp_mdix = hw->phy.is_mdix ?\n+\t\t\tETH_TP_MDI_X : ETH_TP_MDI;\n \telse\n-\t\tecmd->eth_tp_mdix = ETH_TP_MDI_INVALID;\n+\t\tcmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;\n \n \tif (hw->phy.mdix == AUTO_ALL_MODES)\n-\t\tecmd->eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO;\n+\t\tcmd->base.eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO;\n \telse\n-\t\tecmd->eth_tp_mdix_ctrl = hw->phy.mdix;\n+\t\tcmd->base.eth_tp_mdix_ctrl = hw->phy.mdix;\n \n \tif (hw->phy.media_type != e1000_media_type_copper)\n-\t\tecmd->eth_tp_mdix_ctrl = ETH_TP_MDI_INVALID;\n+\t\tcmd->base.eth_tp_mdix_ctrl = ETH_TP_MDI_INVALID;\n+\n+\tethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,\n+\t\t\t\t\t\tsupported);\n+\tethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,\n+\t\t\t\t\t\tadvertising);\n \n \treturn 0;\n }\n@@ -262,12 +265,16 @@ static int e1000_set_spd_dplx(struct e1000_adapter *adapter, u32 spd, u8 dplx)\n \treturn -EINVAL;\n }\n \n-static int e1000_set_settings(struct net_device *netdev,\n-\t\t\t      struct ethtool_cmd *ecmd)\n+static int e1000_set_link_ksettings(struct net_device *netdev,\n+\t\t\t\t    const struct ethtool_link_ksettings *cmd)\n {\n \tstruct e1000_adapter *adapter = netdev_priv(netdev);\n \tstruct e1000_hw *hw = &adapter->hw;\n \tint ret_val = 0;\n+\tu32 advertising;\n+\n+\tethtool_convert_link_mode_to_legacy_u32(&advertising,\n+\t\t\t\t\t\tcmd->link_modes.advertising);\n \n \tpm_runtime_get_sync(netdev->dev.parent);\n \n@@ -285,14 +292,14 @@ static int e1000_set_settings(struct net_device *netdev,\n \t * some hardware doesn't allow MDI setting when speed or\n \t * duplex is forced.\n \t */\n-\tif (ecmd->eth_tp_mdix_ctrl) {\n+\tif (cmd->base.eth_tp_mdix_ctrl) {\n \t\tif (hw->phy.media_type != e1000_media_type_copper) {\n \t\t\tret_val = -EOPNOTSUPP;\n \t\t\tgoto out;\n \t\t}\n \n-\t\tif ((ecmd->eth_tp_mdix_ctrl != ETH_TP_MDI_AUTO) &&\n-\t\t    (ecmd->autoneg != AUTONEG_ENABLE)) {\n+\t\tif ((cmd->base.eth_tp_mdix_ctrl != ETH_TP_MDI_AUTO) &&\n+\t\t    (cmd->base.autoneg != AUTONEG_ENABLE)) {\n \t\t\te_err(\"forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\\n\");\n \t\t\tret_val = -EINVAL;\n \t\t\tgoto out;\n@@ -302,35 +309,35 @@ static int e1000_set_settings(struct net_device *netdev,\n \twhile (test_and_set_bit(__E1000_RESETTING, &adapter->state))\n \t\tusleep_range(1000, 2000);\n \n-\tif (ecmd->autoneg == AUTONEG_ENABLE) {\n+\tif (cmd->base.autoneg == AUTONEG_ENABLE) {\n \t\thw->mac.autoneg = 1;\n \t\tif (hw->phy.media_type == e1000_media_type_fiber)\n \t\t\thw->phy.autoneg_advertised = ADVERTISED_1000baseT_Full |\n \t\t\t    ADVERTISED_FIBRE | ADVERTISED_Autoneg;\n \t\telse\n-\t\t\thw->phy.autoneg_advertised = ecmd->advertising |\n+\t\t\thw->phy.autoneg_advertised = advertising |\n \t\t\t    ADVERTISED_TP | ADVERTISED_Autoneg;\n-\t\tecmd->advertising = hw->phy.autoneg_advertised;\n+\t\tadvertising = hw->phy.autoneg_advertised;\n \t\tif (adapter->fc_autoneg)\n \t\t\thw->fc.requested_mode = e1000_fc_default;\n \t} else {\n-\t\tu32 speed = ethtool_cmd_speed(ecmd);\n+\t\tu32 speed = cmd->base.speed;\n \t\t/* calling this overrides forced MDI setting */\n-\t\tif (e1000_set_spd_dplx(adapter, speed, ecmd->duplex)) {\n+\t\tif (e1000_set_spd_dplx(adapter, speed, cmd->base.duplex)) {\n \t\t\tret_val = -EINVAL;\n \t\t\tgoto out;\n \t\t}\n \t}\n \n \t/* MDI-X => 2; MDI => 1; Auto => 3 */\n-\tif (ecmd->eth_tp_mdix_ctrl) {\n+\tif (cmd->base.eth_tp_mdix_ctrl) {\n \t\t/* fix up the value for auto (3 => 0) as zero is mapped\n \t\t * internally to auto\n \t\t */\n-\t\tif (ecmd->eth_tp_mdix_ctrl == ETH_TP_MDI_AUTO)\n+\t\tif (cmd->base.eth_tp_mdix_ctrl == ETH_TP_MDI_AUTO)\n \t\t\thw->phy.mdix = AUTO_ALL_MODES;\n \t\telse\n-\t\t\thw->phy.mdix = ecmd->eth_tp_mdix_ctrl;\n+\t\t\thw->phy.mdix = cmd->base.eth_tp_mdix_ctrl;\n \t}\n \n \t/* reset the link */\n@@ -2313,8 +2320,6 @@ static int e1000e_get_ts_info(struct net_device *netdev,\n }\n \n static const struct ethtool_ops e1000_ethtool_ops = {\n-\t.get_settings\t\t= e1000_get_settings,\n-\t.set_settings\t\t= e1000_set_settings,\n \t.get_drvinfo\t\t= e1000_get_drvinfo,\n \t.get_regs_len\t\t= e1000_get_regs_len,\n \t.get_regs\t\t= e1000_get_regs,\n@@ -2342,6 +2347,8 @@ static int e1000e_get_ts_info(struct net_device *netdev,\n \t.get_ts_info\t\t= e1000e_get_ts_info,\n \t.get_eee\t\t= e1000e_get_eee,\n \t.set_eee\t\t= e1000e_set_eee,\n+\t.get_link_ksettings\t= e1000_get_link_ksettings,\n+\t.set_link_ksettings\t= e1000_set_link_ksettings,\n };\n \n void e1000e_set_ethtool_ops(struct net_device *netdev)\n",
    "prefixes": []
}