get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 77350,
    "url": "http://patches.dpdk.org/api/patches/77350/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200911075911.3214-7-sachin.saxena@oss.nxp.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20200911075911.3214-7-sachin.saxena@oss.nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200911075911.3214-7-sachin.saxena@oss.nxp.com",
    "date": "2020-09-11T07:59:09",
    "name": "[v1,6/8] bus/dpaa: enhance link status support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2bff2c77afbd3b242b04321fa78c42bc30a389e5",
    "submitter": {
        "id": 1782,
        "url": "http://patches.dpdk.org/api/people/1782/?format=api",
        "name": "Sachin Saxena (OSS)",
        "email": "sachin.saxena@oss.nxp.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200911075911.3214-7-sachin.saxena@oss.nxp.com/mbox/",
    "series": [
        {
            "id": 12135,
            "url": "http://patches.dpdk.org/api/series/12135/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12135",
            "date": "2020-09-11T07:59:03",
            "name": "enhancements and fixes for nxp dpaax platform",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/12135/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/77350/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/77350/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 49602A04B5;\n\tFri, 11 Sep 2020 10:00:28 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E53891C124;\n\tFri, 11 Sep 2020 09:59:40 +0200 (CEST)",
            "from EUR02-HE1-obe.outbound.protection.outlook.com\n (mail-eopbgr10043.outbound.protection.outlook.com [40.107.1.43])\n by dpdk.org (Postfix) with ESMTP id EDA311C10C\n for <dev@dpdk.org>; Fri, 11 Sep 2020 09:59:37 +0200 (CEST)",
            "from VI1PR04MB5837.eurprd04.prod.outlook.com (2603:10a6:803:ec::28)\n by VI1PR04MB6094.eurprd04.prod.outlook.com (2603:10a6:803:f4::16)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.17; Fri, 11 Sep\n 2020 07:59:36 +0000",
            "from VI1PR04MB5837.eurprd04.prod.outlook.com\n ([fe80::cc01:9fe2:2544:8a4b]) by VI1PR04MB5837.eurprd04.prod.outlook.com\n ([fe80::cc01:9fe2:2544:8a4b%7]) with mapi id 15.20.3348.019; Fri, 11 Sep 2020\n 07:59:36 +0000",
            "from lsv03161.swis.in-blr01.nxp.com (14.142.151.118) by\n SG2PR06CA0136.apcprd06.prod.outlook.com (2603:1096:1:1f::14) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id\n 15.20.3370.16 via Frontend Transport; Fri, 11 Sep 2020 07:59:34 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=Uk0H/Dva8R9KtJlOLEje6ZHhC1HYqhScdBDvjhDGJDE2Ym1n8zS2QUMxm70050gOB0cn4foHZrB0WyRrENjnf/HDNEnkZe2ODQ36KfmXNHfZRHpxZww9QpPOFcyI+eRR81vhVGCFiNpK3ekQ9Y7SbMFYrK37hTpZlLxqPgy0OVylQHFoqr6TAaV42RIGTag6CqhElxsI7zX42FvF+9yP4BE/8JXRmIwzZmXlzLYfLJQsfiRDVq1tudpwKN4Ia1cZgubkP8lrzvYiJXUN7NnKX9eipl14Fl75jqY8/ka8Oz9QEq5CcH7yeIkcUr2TGHrItHP8pTkuahhbCleZ3dycbA==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=sPCTFmX+RLoyQ4zdBOg/zqm0vya0e8nHxMfnVHBTPC8=;\n b=g3nMt1CRdE73eYO/QEA4RY/0kGY8+R4/NlBuu0MSEUw60NsCP0uxjwDEDPLTv5dKdIq6KxBeUQW3/SYUjUvSSAvXZzHb1DIt7wELX5IY3q4XwxbWoLxenXRQV1VjBddubQr8N1Hc0LsKl5rYsAb9Z/oDDQle+2T3HMsk67KCgyvHJXCO6Csn4sNrnE9ZZ/5LVTFXb9zJDaaMOQJMnwJe742DikqUa9jtfFKbWOjeQNnKoWaksXdJLCVxvrcyGQqr8gNyruCAH4sQvJatLF1xUrAkA9l1EoJdxedbTLE1M/DAi8g6JjtngPJl/FFp4VOQxIp9EUm2dHqLj9I8rQOQxQ==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com;\n dkim=pass header.d=oss.nxp.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com;\n s=selector2-NXP1-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=sPCTFmX+RLoyQ4zdBOg/zqm0vya0e8nHxMfnVHBTPC8=;\n b=hPKP1uupqkvv5clc2k2OjtfcsyaR/P4NW8sKIa7VS9PzF0zZKEdEFT2XXnMGYf7KQEW7qPe4aQ3lI/rJ8EZ4yiCMH9H6oqFVLMT0WQRrG2QKjk7AXceus1Aat0531lPznDL6ZAPFXbeoOlG4uIolvwO4jwcatOu289J0Iz6ucjY=",
        "Authentication-Results": "dpdk.org; dkim=none (message not signed)\n header.d=none;dpdk.org; dmarc=none action=none header.from=oss.nxp.com;",
        "From": "\"Sachin Saxena (OSS)\" <sachin.saxena@oss.nxp.com>",
        "To": "dev@dpdk.org,\n\tferruh.yigit@intel.com",
        "Date": "Fri, 11 Sep 2020 13:29:09 +0530",
        "Message-Id": "<20200911075911.3214-7-sachin.saxena@oss.nxp.com>",
        "X-Mailer": [
            "git-send-email 2.28.0",
            "git-send-email 2.28.0"
        ],
        "In-Reply-To": "<20200911075911.3214-1-sachin.saxena@oss.nxp.com>",
        "References": "<20200911075911.3214-1-sachin.saxena@oss.nxp.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SG2PR06CA0136.apcprd06.prod.outlook.com\n (2603:1096:1:1f::14) To VI1PR04MB5837.eurprd04.prod.outlook.com\n (2603:10a6:803:ec::28)",
        "MIME-Version": "1.0",
        "X-MS-Exchange-MessageSentRepresentingType": "1",
        "X-Originating-IP": "[14.142.151.118]",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-MS-Office365-Filtering-Correlation-Id": "bc47d3f6-b036-47cc-9539-08d85628a02b",
        "X-MS-TrafficTypeDiagnostic": "VI1PR04MB6094:",
        "X-MS-Exchange-SharedMailbox-RoutingAgent-Processed": "True",
        "X-MS-Exchange-Transport-Forked": "True",
        "X-Microsoft-Antispam-PRVS": "\n <VI1PR04MB609487AF16A6C955EF7A04B9A2240@VI1PR04MB6094.eurprd04.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:127;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n BXwbR7lzAdjVmQWCwXGlVEYkZ+IxEhBezemEx3e+px1IWEjnHBw3vd6JTTRbMyBIkbJVekX3jUCUDLlu0MM6VOYwvNsMYFPTj/BfwheXmNnIocfDQJQkkGJnhHxncvjLXXnTjfErK3LdUwxGL0Wn/Ww2zvCVhq7GHaLalkHCKEoQr5YHT7xK0U+zk0RYVu7fop7VUvZ4Oiy/X/PAjuZmwj/GxoMznWbnjaLtzMN/1G2CbXvyrRYi6BOdthx0vZQZu8dgGPWNQpRtObPhWiQL9pxH9sNb2TxpYe/UE3wp5k1zqradHIKrGWZc4XerKwsPDMplUv/7aMiARVxb8At/8pnwYUU3QsGjBBdsaPIITfErqx9CY75Yf/4B8nZ23i1M",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:VI1PR04MB5837.eurprd04.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(4636009)(376002)(136003)(39860400002)(346002)(396003)(366004)(478600001)(52116002)(2616005)(55236004)(86362001)(6486002)(6506007)(8676002)(316002)(16526019)(8936002)(26005)(186003)(6512007)(2906002)(956004)(5660300002)(66556008)(66476007)(30864003)(1076003)(66946007)(83380400001)(6666004)(1006002)(110426005);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData": "\n O8goFIpaXCnFeYM7e2XuVVNu2yZbMrvPa/WvCKx6lC0hHScR2Orbhvd+XH5cfZvEsroAwglyzmpq8TeL4HH6LVV2y9ldsYWpsq7CsOVbWUilLbJtRX+Wq5oYL3jTkslIz7VtctlLSFSrw8L9t0EgAqSaPsZ00YEEq9ukzrmxQq0aDlLSNsWB0YVksvyGSwNzeo2bVJKvhL/ANdSN/v9p2D0lj5rBZ+ZnhBWwE9+/Py1DQnKUyvkN0xuFP4oS3C/PogcYTa9ZRqC10Taj4ZtoGjmJSQCLIYFl0vs811K5XcFrTP1HKWv6ijtDsPug9MLEy/7zBI+g0CGBWfEtGIuv0e+r7/CfN3dS4HIcwMrTq68qhhl60U5AC3KhuTKo0wBYJW3SlGwHZbz3lCkJjSHu/HnMp9xX8mwGXWFzZi1811U50O2ObWqYD+/JoPYT2H4dmVIM14zbCjcy7xvhXzrS0touZNywXx05g3pJIjGXNSashi35d6uoo0TfI3taZL/JL+QYHR28rIlfxPwbnJk+P7a0sDeS4hUfags6JBK7WPd545eA5sCnBXxuf1SDyVF7pNuShdYXwS6v7dj4gKcbChYES/E7jVoUCtWMVqghSYqIxNmUrA3bNwzxi/d3HZb9wtTKkj+Ogud4rTiAIn4i0A==",
        "X-OriginatorOrg": "oss.nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n bc47d3f6-b036-47cc-9539-08d85628a02b",
        "X-MS-Exchange-CrossTenant-AuthSource": "VI1PR04MB5837.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "11 Sep 2020 07:59:36.3364 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "686ea1d3-bc2b-4c6f-a92c-d99c5c301635",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n KjvQgPCYu1i7QYOhalZYr5zXyP6xB9KUE1TPINcEDY0ghugPtznBHylkGzqst7uJwqq0wk6Z56tP4Aw/tc7+/Q==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "VI1PR04MB6094",
        "Subject": "[dpdk-dev] [PATCH v1 6/8] bus/dpaa: enhance link status support",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Rohit Raj <rohit.raj@nxp.com>\n\nThis patch adds support to get/set link speed, duplex and\nautoneg mode status from/to PHY. Enahnce device capabilities\nto advertise all supported link speeds according to mac type.\n\nAlso enables fallback support for get link status api where\nkernel support is mssing.\n\nSigned-off-by: Sachin Saxena <sachin.saxena@oss.nxp.com>\nSigned-off-by: Rohit Raj <rohit.raj@nxp.com>\n---\n drivers/bus/dpaa/base/qbman/process.c     | 123 +++++++++++++++++++---\n drivers/bus/dpaa/include/process.h        |  34 +++++-\n drivers/bus/dpaa/rte_bus_dpaa_version.map |   3 +\n drivers/net/dpaa/dpaa_ethdev.c            | 113 ++++++++++++++++----\n 4 files changed, 241 insertions(+), 32 deletions(-)",
    "diff": "diff --git a/drivers/bus/dpaa/base/qbman/process.c b/drivers/bus/dpaa/base/qbman/process.c\nindex 6f7e37957..9bc92681c 100644\n--- a/drivers/bus/dpaa/base/qbman/process.c\n+++ b/drivers/bus/dpaa/base/qbman/process.c\n@@ -8,6 +8,7 @@\n #include <fcntl.h>\n #include <unistd.h>\n #include <sys/ioctl.h>\n+#include <rte_ethdev.h>\n \n #include \"process.h\"\n \n@@ -341,30 +342,78 @@ int dpaa_intr_disable(char *if_name)\n \treturn 0;\n }\n \n+#define DPAA_IOCTL_GET_IOCTL_VERSION \\\n+\t_IOR(DPAA_IOCTL_MAGIC, 0x14, int)\n+\n+int dpaa_get_ioctl_version_number(void)\n+{\n+\tint version_num, ret = check_fd();\n+\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = ioctl(fd, DPAA_IOCTL_GET_IOCTL_VERSION, &version_num);\n+\tif (ret) {\n+\t\tif (errno == EINVAL) {\n+\t\t\tversion_num = 1;\n+\t\t} else {\n+\t\t\tprintf(\"Failed to get ioctl version number\\n\");\n+\t\t\tversion_num = -1;\n+\t\t}\n+\t}\n+\n+\treturn version_num;\n+}\n+\n #define DPAA_IOCTL_GET_LINK_STATUS \\\n \t_IOWR(DPAA_IOCTL_MAGIC, 0x10, struct usdpaa_ioctl_link_status_args)\n \n-int dpaa_get_link_status(char *if_name)\n+#define DPAA_IOCTL_GET_LINK_STATUS_OLD \\\n+\t_IOWR(DPAA_IOCTL_MAGIC, 0x10, struct usdpaa_ioctl_link_status_args_old)\n+\n+\n+int dpaa_get_link_status(char *if_name, struct rte_eth_link *link)\n {\n-\tint ret = check_fd();\n-\tstruct usdpaa_ioctl_link_status_args args;\n+\tint ioctl_version, ret = check_fd();\n \n \tif (ret)\n \t\treturn ret;\n \n-\tstrcpy(args.if_name, if_name);\n-\targs.link_status = 0;\n+\tioctl_version = dpaa_get_ioctl_version_number();\n \n-\tret = ioctl(fd, DPAA_IOCTL_GET_LINK_STATUS, &args);\n-\tif (ret) {\n-\t\tif (errno == EINVAL)\n-\t\t\tprintf(\"Failed to get link status: Not Supported\\n\");\n-\t\telse\n+\tif (ioctl_version == 2) {\n+\t\tstruct usdpaa_ioctl_link_status_args args;\n+\n+\t\tstrcpy(args.if_name, if_name);\n+\n+\t\tret = ioctl(fd, DPAA_IOCTL_GET_LINK_STATUS, &args);\n+\t\tif (ret) {\n \t\t\tprintf(\"Failed to get link status\\n\");\n-\t\treturn ret;\n+\t\t\treturn ret;\n+\t\t}\n+\n+\t\tlink->link_status = args.link_status;\n+\t\tlink->link_speed = args.link_speed;\n+\t\tlink->link_duplex = args.link_duplex;\n+\t\tlink->link_autoneg = args.link_autoneg;\n+\t} else {\n+\t\tstruct usdpaa_ioctl_link_status_args_old args;\n+\n+\t\tstrcpy(args.if_name, if_name);\n+\n+\t\tret = ioctl(fd, DPAA_IOCTL_GET_LINK_STATUS_OLD, &args);\n+\t\tif (ret) {\n+\t\t\tif (errno == EINVAL)\n+\t\t\t\tprintf(\"Get link status: Not Supported\\n\");\n+\t\t\telse\n+\t\t\t\tprintf(\"Failed to get link status\\n\");\n+\t\t\treturn ret;\n+\t\t}\n+\n+\t\tlink->link_status = args.link_status;\n \t}\n \n-\treturn args.link_status;\n+\treturn 0;\n }\n \n #define DPAA_IOCTL_UPDATE_LINK_STATUS \\\n@@ -393,3 +442,53 @@ int dpaa_update_link_status(char *if_name, int link_status)\n \n \treturn 0;\n }\n+\n+#define DPAA_IOCTL_UPDATE_LINK_SPEED \\\n+\t_IOW(DPAA_IOCTL_MAGIC, 0x12, struct usdpaa_ioctl_update_link_speed)\n+\n+int dpaa_update_link_speed(char *if_name, int link_speed, int link_duplex)\n+{\n+\tstruct usdpaa_ioctl_update_link_speed args;\n+\tint ret;\n+\n+\tret = check_fd();\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tstrcpy(args.if_name, if_name);\n+\targs.link_speed = link_speed;\n+\targs.link_duplex = link_duplex;\n+\n+\tret = ioctl(fd, DPAA_IOCTL_UPDATE_LINK_SPEED, &args);\n+\tif (ret) {\n+\t\tif (errno == EINVAL)\n+\t\t\tprintf(\"Failed to set link speed: Not Supported\\n\");\n+\t\telse\n+\t\t\tprintf(\"Failed to set link speed\\n\");\n+\t\treturn ret;\n+\t}\n+\n+\treturn ret;\n+}\n+\n+#define DPAA_IOCTL_RESTART_LINK_AUTONEG \\\n+\t_IOW(DPAA_IOCTL_MAGIC, 0x13, char *)\n+\n+int dpaa_restart_link_autoneg(char *if_name)\n+{\n+\tint ret = check_fd();\n+\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = ioctl(fd, DPAA_IOCTL_RESTART_LINK_AUTONEG, &if_name);\n+\tif (ret) {\n+\t\tif (errno == EINVAL)\n+\t\t\tprintf(\"Failed to restart autoneg: Not Supported\\n\");\n+\t\telse\n+\t\t\tprintf(\"Failed to restart autoneg\\n\");\n+\t\treturn ret;\n+\t}\n+\n+\treturn ret;\n+}\ndiff --git a/drivers/bus/dpaa/include/process.h b/drivers/bus/dpaa/include/process.h\nindex f52ea1635..be52e6f72 100644\n--- a/drivers/bus/dpaa/include/process.h\n+++ b/drivers/bus/dpaa/include/process.h\n@@ -10,6 +10,7 @@\n #define\t__PROCESS_H\n \n #include <compat.h>\n+#include <rte_ethdev.h>\n \n /* The process device underlies process-wide user/kernel interactions, such as\n  * mapping dma_mem memory and providing accompanying ioctl()s. (This isn't used\n@@ -86,10 +87,25 @@ int dpaa_intr_enable(char *if_name, int efd);\n __rte_internal\n int dpaa_intr_disable(char *if_name);\n \n+struct usdpaa_ioctl_link_status_args_old {\n+\t/* network device node name */\n+\tchar    if_name[IF_NAME_MAX_LEN];\n+\t/* link status(ETH_LINK_UP/DOWN) */\n+\tint     link_status;\n+};\n+\n struct usdpaa_ioctl_link_status_args {\n \t/* network device node name */\n \tchar    if_name[IF_NAME_MAX_LEN];\n+\t/* link status(ETH_LINK_UP/DOWN) */\n \tint     link_status;\n+\t/* link speed (ETH_SPEED_NUM_)*/\n+\tint     link_speed;\n+\t/* link duplex (ETH_LINK_[HALF/FULL]_DUPLEX)*/\n+\tint     link_duplex;\n+\t/* link autoneg (ETH_LINK_AUTONEG/FIXED)*/\n+\tint     link_autoneg;\n+\n };\n \n struct usdpaa_ioctl_update_link_status_args {\n@@ -99,10 +115,24 @@ struct usdpaa_ioctl_update_link_status_args {\n \tint     link_status;\n };\n \n-__rte_internal\n-int dpaa_get_link_status(char *if_name);\n+struct usdpaa_ioctl_update_link_speed {\n+\t/* network device node name*/\n+\tchar    if_name[IF_NAME_MAX_LEN];\n+\t/* link speed (ETH_SPEED_NUM_)*/\n+\tint     link_speed;\n+\t/* link duplex (ETH_LINK_[HALF/FULL]_DUPLEX)*/\n+\tint     link_duplex;\n+};\n \n+__rte_internal\n+int dpaa_get_link_status(char *if_name, struct rte_eth_link *link);\n __rte_internal\n int dpaa_update_link_status(char *if_name, int link_status);\n+__rte_internal\n+int dpaa_update_link_speed(char *if_name, int speed, int duplex);\n+__rte_internal\n+int dpaa_restart_link_autoneg(char *if_name);\n+__rte_internal\n+int dpaa_get_ioctl_version_number(void);\n \n #endif\t/*  __PROCESS_H */\ndiff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map\nindex 5b97b6eb2..26436e9fe 100644\n--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map\n+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map\n@@ -8,10 +8,13 @@ INTERNAL {\n \tbman_query_free_buffers;\n \tbman_release;\n \tbman_thread_irq;\n+\tdpaa_get_ioctl_version_number;\n \tdpaa_get_eth_port_cfg;\n \tdpaa_get_qm_channel_caam;\n \tdpaa_get_qm_channel_pool;\n \tdpaa_get_link_status;\n+\tdpaa_restart_link_autoneg;\n+\tdpaa_update_link_speed;\n \tdpaa_intr_disable;\n \tdpaa_intr_enable;\n \tdpaa_svr_family;\ndiff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c\nindex ccf0bf1e8..0c76fa610 100644\n--- a/drivers/net/dpaa/dpaa_ethdev.c\n+++ b/drivers/net/dpaa/dpaa_ethdev.c\n@@ -205,10 +205,12 @@ dpaa_eth_dev_configure(struct rte_eth_dev *dev)\n \tuint64_t rx_offloads = eth_conf->rxmode.offloads;\n \tuint64_t tx_offloads = eth_conf->txmode.offloads;\n \tstruct rte_device *rdev = dev->device;\n+\tstruct rte_eth_link *link = &dev->data->dev_link;\n \tstruct rte_dpaa_device *dpaa_dev;\n \tstruct fman_if *fif = dev->process_private;\n \tstruct __fman_if *__fif;\n \tstruct rte_intr_handle *intr_handle;\n+\tint speed, duplex;\n \tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n@@ -292,6 +294,60 @@ dpaa_eth_dev_configure(struct rte_eth_dev *dev)\n \t\t\tdev->data->dev_flags &= ~RTE_ETH_DEV_INTR_LSC;\n \t\t}\n \t}\n+\n+\t/* Wait for link status to get updated */\n+\tif (!link->link_status)\n+\t\tsleep(1);\n+\n+\t/* Configure link only if link is UP*/\n+\tif (link->link_status) {\n+\t\tif (eth_conf->link_speeds == ETH_LINK_SPEED_AUTONEG) {\n+\t\t\t/* Start autoneg only if link is not in autoneg mode */\n+\t\t\tif (!link->link_autoneg)\n+\t\t\t\tdpaa_restart_link_autoneg(__fif->node_name);\n+\t\t} else if (eth_conf->link_speeds & ETH_LINK_SPEED_FIXED) {\n+\t\t\tswitch (eth_conf->link_speeds & ~ETH_LINK_SPEED_FIXED) {\n+\t\t\tcase ETH_LINK_SPEED_10M_HD:\n+\t\t\t\tspeed = ETH_SPEED_NUM_10M;\n+\t\t\t\tduplex = ETH_LINK_HALF_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_10M:\n+\t\t\t\tspeed = ETH_SPEED_NUM_10M;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_100M_HD:\n+\t\t\t\tspeed = ETH_SPEED_NUM_100M;\n+\t\t\t\tduplex = ETH_LINK_HALF_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_100M:\n+\t\t\t\tspeed = ETH_SPEED_NUM_100M;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_1G:\n+\t\t\t\tspeed = ETH_SPEED_NUM_1G;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_2_5G:\n+\t\t\t\tspeed = ETH_SPEED_NUM_2_5G;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_10G:\n+\t\t\t\tspeed = ETH_SPEED_NUM_10G;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\tspeed = ETH_SPEED_NUM_NONE;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t/* Set link speed */\n+\t\t\tdpaa_update_link_speed(__fif->node_name, speed, duplex);\n+\t\t} else {\n+\t\t\t/* Manual autoneg - custom advertisement speed. */\n+\t\t\tprintf(\"Custom Advertisement speeds not supported\\n\");\n+\t\t}\n+\t}\n+\n \treturn 0;\n }\n \n@@ -377,6 +433,7 @@ static void dpaa_eth_dev_close(struct rte_eth_dev *dev)\n \tstruct rte_device *rdev = dev->device;\n \tstruct rte_dpaa_device *dpaa_dev;\n \tstruct rte_intr_handle *intr_handle;\n+\tstruct rte_eth_link *link = &dev->data->dev_link;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -386,6 +443,10 @@ static void dpaa_eth_dev_close(struct rte_eth_dev *dev)\n \n \tdpaa_eth_dev_stop(dev);\n \n+\t/* Reset link to autoneg */\n+\tif (link->link_status && !link->link_autoneg)\n+\t\tdpaa_restart_link_autoneg(__fif->node_name);\n+\n \tif (intr_handle && intr_handle->fd &&\n \t    dev->data->dev_conf.intr_conf.lsc != 0) {\n \t\tdpaa_intr_disable(__fif->node_name);\n@@ -446,12 +507,24 @@ static int dpaa_eth_dev_info(struct rte_eth_dev *dev,\n \tdev_info->flow_type_rss_offloads = DPAA_RSS_OFFLOAD_ALL;\n \n \tif (fif->mac_type == fman_mac_1g) {\n-\t\tdev_info->speed_capa = ETH_LINK_SPEED_1G;\n+\t\tdev_info->speed_capa = ETH_LINK_SPEED_10M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_10M\n+\t\t\t\t\t| ETH_LINK_SPEED_100M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_100M\n+\t\t\t\t\t| ETH_LINK_SPEED_1G;\n \t} else if (fif->mac_type == fman_mac_2_5g) {\n-\t\tdev_info->speed_capa = ETH_LINK_SPEED_1G\n+\t\tdev_info->speed_capa = ETH_LINK_SPEED_10M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_10M\n+\t\t\t\t\t| ETH_LINK_SPEED_100M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_100M\n+\t\t\t\t\t| ETH_LINK_SPEED_1G\n \t\t\t\t\t| ETH_LINK_SPEED_2_5G;\n \t} else if (fif->mac_type == fman_mac_10g) {\n-\t\tdev_info->speed_capa = ETH_LINK_SPEED_1G\n+\t\tdev_info->speed_capa = ETH_LINK_SPEED_10M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_10M\n+\t\t\t\t\t| ETH_LINK_SPEED_100M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_100M\n+\t\t\t\t\t| ETH_LINK_SPEED_1G\n \t\t\t\t\t| ETH_LINK_SPEED_2_5G\n \t\t\t\t\t| ETH_LINK_SPEED_10G;\n \t} else {\n@@ -548,31 +621,35 @@ static int dpaa_eth_link_update(struct rte_eth_dev *dev,\n \tstruct rte_eth_link *link = &dev->data->dev_link;\n \tstruct fman_if *fif = dev->process_private;\n \tstruct __fman_if *__fif = container_of(fif, struct __fman_if, __if);\n-\tint ret;\n+\tint ret, ioctl_version;\n \n \tPMD_INIT_FUNC_TRACE();\n \n-\tif (fif->mac_type == fman_mac_1g)\n-\t\tlink->link_speed = ETH_SPEED_NUM_1G;\n-\telse if (fif->mac_type == fman_mac_2_5g)\n-\t\tlink->link_speed = ETH_SPEED_NUM_2_5G;\n-\telse if (fif->mac_type == fman_mac_10g)\n-\t\tlink->link_speed = ETH_SPEED_NUM_10G;\n-\telse\n-\t\tDPAA_PMD_ERR(\"invalid link_speed: %s, %d\",\n-\t\t\t     dpaa_intf->name, fif->mac_type);\n+\tioctl_version = dpaa_get_ioctl_version_number();\n+\n \n \tif (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC) {\n-\t\tret = dpaa_get_link_status(__fif->node_name);\n-\t\tif (ret < 0)\n+\t\tret = dpaa_get_link_status(__fif->node_name, link);\n+\t\tif (ret)\n \t\t\treturn ret;\n-\t\tlink->link_status = ret;\n \t} else {\n \t\tlink->link_status = dpaa_intf->valid;\n \t}\n \n-\tlink->link_duplex = ETH_LINK_FULL_DUPLEX;\n-\tlink->link_autoneg = ETH_LINK_AUTONEG;\n+\tif (ioctl_version < 2) {\n+\t\tlink->link_duplex = ETH_LINK_FULL_DUPLEX;\n+\t\tlink->link_autoneg = ETH_LINK_AUTONEG;\n+\n+\t\tif (fif->mac_type == fman_mac_1g)\n+\t\t\tlink->link_speed = ETH_SPEED_NUM_1G;\n+\t\telse if (fif->mac_type == fman_mac_2_5g)\n+\t\t\tlink->link_speed = ETH_SPEED_NUM_2_5G;\n+\t\telse if (fif->mac_type == fman_mac_10g)\n+\t\t\tlink->link_speed = ETH_SPEED_NUM_10G;\n+\t\telse\n+\t\t\tDPAA_PMD_ERR(\"invalid link_speed: %s, %d\",\n+\t\t\t\t     dpaa_intf->name, fif->mac_type);\n+\t}\n \n \tDPAA_PMD_INFO(\"Port %d Link is %s\\n\", dev->data->port_id,\n \t\t      link->link_status ? \"Up\" : \"Down\");\n",
    "prefixes": [
        "v1",
        "6/8"
    ]
}