Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/19814/?format=api
http://patches.dpdk.org/api/patches/19814/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/1484832240-2048-30-git-send-email-hemant.agrawal@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": "<1484832240-2048-30-git-send-email-hemant.agrawal@nxp.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1484832240-2048-30-git-send-email-hemant.agrawal@nxp.com", "date": "2017-01-19T13:23:54", "name": "[dpdk-dev,PATCHv5,27/33] net/dpaa2: link status update", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "b3185a7a5d12d0814cfa33cc4abaf357210cba2d", "submitter": { "id": 477, "url": "http://patches.dpdk.org/api/people/477/?format=api", "name": "Hemant Agrawal", "email": "hemant.agrawal@nxp.com" }, "delegate": { "id": 319, "url": "http://patches.dpdk.org/api/users/319/?format=api", "username": "fyigit", "first_name": "Ferruh", "last_name": "Yigit", "email": "ferruh.yigit@amd.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/1484832240-2048-30-git-send-email-hemant.agrawal@nxp.com/mbox/", "series": [], "comments": "http://patches.dpdk.org/api/patches/19814/comments/", "check": "success", "checks": "http://patches.dpdk.org/api/patches/19814/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@dpdk.org", "Delivered-To": "patchwork@dpdk.org", "Received": [ "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id CB10AFAED;\n\tThu, 19 Jan 2017 14:26:17 +0100 (CET)", "from NAM03-CO1-obe.outbound.protection.outlook.com\n\t(mail-co1nam03on0049.outbound.protection.outlook.com [104.47.40.49])\n\tby dpdk.org (Postfix) with ESMTP id 232B9FA41\n\tfor <dev@dpdk.org>; Thu, 19 Jan 2017 14:25:44 +0100 (CET)", "from BN6PR03CA0014.namprd03.prod.outlook.com (10.168.230.152) by\n\tMWHPR03MB2479.namprd03.prod.outlook.com (10.169.200.149) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id\n\t15.1.860.13; Thu, 19 Jan 2017 13:25:43 +0000", "from BY2FFO11FD029.protection.gbl (2a01:111:f400:7c0c::150) by\n\tBN6PR03CA0014.outlook.office365.com (2603:10b6:404:23::24) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13 via\n\tFrontend Transport; Thu, 19 Jan 2017 13:25:43 +0000", "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBY2FFO11FD029.mail.protection.outlook.com (10.1.14.212) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8\n\tvia Frontend Transport; Thu, 19 Jan 2017 13:25:42 +0000", "from bf-netperf1.idc ([10.232.134.28])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv0JDO4f5015351; Thu, 19 Jan 2017 06:25:39 -0700" ], "Authentication-Results": "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed)\n\theader.d=none; nxp.com; dmarc=fail action=none header.from=nxp.com;\n\tnxp.com; \n\tdkim=none (message not signed) header.d=none;", "Received-SPF": "Fail (protection.outlook.com: domain of nxp.com does not\n\tdesignate 192.88.168.50 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=192.88.168.50; helo=tx30smr01.am.freescale.net;", "From": "Hemant Agrawal <hemant.agrawal@nxp.com>", "To": "<dev@dpdk.org>", "CC": "<thomas.monjalon@6wind.com>, <bruce.richardson@intel.com>,\n\t<shreyansh.jain@nxp.com>, <john.mcnamara@intel.com>,\n\t<ferruh.yigit@intel.com>, <jerin.jacob@caviumnetworks.com>,\n\tHemant Agrawal <hemant.agrawal@nxp.com>", "Date": "Thu, 19 Jan 2017 18:53:54 +0530", "Message-ID": "<1484832240-2048-30-git-send-email-hemant.agrawal@nxp.com>", "X-Mailer": "git-send-email 1.9.1", "In-Reply-To": "<1484832240-2048-1-git-send-email-hemant.agrawal@nxp.com>", "References": "<1484679174-4174-1-git-send-email-hemant.agrawal@nxp.com>\n\t<1484832240-2048-1-git-send-email-hemant.agrawal@nxp.com>", "X-EOPAttributedMessage": "0", "X-Matching-Connectors": "131293059423221628;\n\t(91ab9b29-cfa4-454e-5278-08d120cd25b8); ()", "X-Forefront-Antispam-Report": "CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI;\n\tSFV:NSPM;\n\tSFS:(10009020)(6009001)(336005)(7916002)(39850400002)(39400400002)(39410400002)(39450400003)(39380400002)(39840400002)(39860400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(97736004)(8656002)(54906002)(2906002)(4326007)(50226002)(47776003)(105606002)(68736007)(36756003)(189998001)(86362001)(8936002)(53936002)(92566002)(85426001)(8676002)(81156014)(81166006)(76176999)(50986999)(5003940100001)(104016004)(6916009)(6666003)(356003)(5660300001)(2950100002)(2351001)(106466001)(77096006)(305945005)(33646002)(50466002)(15650500001)(110136003)(48376002)(38730400001)(626004);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR03MB2479;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; ", "X-Microsoft-Exchange-Diagnostics": [ "1; BY2FFO11FD029;\n\t1:uOVSkywBL27DUpnuqWNu665KkinQcRWEUpymwtHe3GyxCnJyNtpht2S3tbaQa8ey1sc48roSCnjcgaEfk5O7Q0C/S4aiH+6R5qmerdylgIE8e3ICPaIbCAf9yWG8X+MXTCZUZ7IXXBjGQnQv4rtVBscnpVjS7Mrk9Uu/N1qeJzgvKat1lZ27ZbOo59OngBkmQWzyRacGRQXlkJcwOpJnMXGwm/xa94vMdncv/DbRYf7V7oQF+4qtH3RkVcb9p6+XxeELnCvPT75nc7zabiPcLx5msAEI2UFKCpmrANGsPBfmSdUZImqHer7BEpEfg2AmsrwQ9CA4S20Yw1fwq1wDAU8YTAhKXPIf+htP7xOANee/1wX2m9rONC+CcXTdgEdYP8cEJw+NaqhPHRttIvYF+APn9VEQNiZFc2iOMK4N4TjhsJ7vzMWp8s7ldOry75Me316VfumbGdoswTDxfRzew5l9CR7KfWEQ+XBUuye7LOFiyzT07WwELlNbhcYxkkNeqbPOV1XwTCEpxp6mPtvjd+SFACL7vZG20u3oc/3ae8pxB9n14HNO3t3shjQUdOxX5rwzIi6Bvt79ZgVPOuo5zriX4Z6+e4naPdJ3Ui4GN+p2RXpnqCatwwgIRBUcGOuluNf+IkgzJp8o9uKyjTAxXMefamKUxyDeQ6gX3Fel9wafMOaNZxhQFy/aFcuvIfoqHefpSwziUgEtQBIUv44Fx4KgRJJ9exJebHUs5Knei+lqg+72Vk9FEqrzBG6N4fVC", "1; MWHPR03MB2479;\n\t3:/hAmN9uHxu8YpyGJnEVozVuLbGr4w4dCsuUbXoVNrbZyGZKHRdLF4zMxQ9Fg//TrHzxodobjqw6d//H+KPVTLRVeoyF+XCked9GVFCLTbaLJubnjMW/c3zKUhydbCdrEzPJlymZXY7IyryzRHWNwa3nt9OYOFKQFHaFmwbPOG153qRdP9g8ZMgPKqCt5lTFFlZfmmoohAdnbm3FXEeJ/WgPTFhDGRLc2DAxGcL05i1bOkr8NJ9FIxrn1+Pf4pnwA+zMnwMnpl19XJ7bc5xVtwJbdSRaMinbdEhezlM/P1y16ZZ+gpsih8IJT+OZU9cAJ7xDf0kNoOffSu3G2UbeKGhqCLTBlKAeez+CWO/93Xd13rpLS37EdyaOJJqWZQSVR;\n\t25:4Vq+SWLeZkhKY3yu57vfN9slumBkRRVpknprE8TVmwtPM5EFRaL18aO7DXhTW+Vh86AGFlggea2KDoZxEhuq21NVgxOM+P1OqmF534H3kloYCCuFdBV8FMmbQJPdbV8p/IUyw+Dgd47ap8X/G/CubcrePjUPpznv9sMV6VfIqW3BjO3NQTGVHrHwMl+ZBDW38l7u0MQ3x2pTK1FfNKv1jsUUCxR3AFp60BLbhltMEignvuBvAKPOQgO4ZSvbXgXl6fcvihqgtFJBG3FdnLhZX9LIVO/N2MJyCaSn3zxfI7xik/zFvcm+mlbN7hXpx9QiTNu1US1qrge7Ifcty1o+L78ENg965iz+NejeKt1x3jskAGjkYZzMPu2VRf6ToxGWE11o1To58ptBdDEXSdCpszMTZN/ikJ8+63smxYK0qroFxUFpXokFcH5u736ET17tuB1LVGe5WRXpEe4ypzWNFg==", "1; MWHPR03MB2479;\n\t31:OapdbwZVQzQvkqjT6o0EAyTAx4zHYGuMeQk3bGMEyu3YoTx/PKfr/yfbPNFM1Y5J44BsNc24o37dL9dgwGqqVkszuNpf2khN2sPXeHj8zDUu4LLNSgf6ZFcfpdKM+LfQpT5+oMlP+8mbrZ4po+XxCnm/Sx0L/GgGnj6YsFCjxeUS3QbCCJDQot/XrfelfaFWDKZgPx5yhoeFNGAo38WPtknrlOCK99H5meErPBdjR4tZCo3oJ1LkAi0C6qhx5vxN1avM3sLSfxQ5+0Cx6FpeOA==", "1; MWHPR03MB2479;\n\t4:ZNAmbxpMgezNMWUYsGX61OmKYSTTppoRMe6f5bxjrhkL4g76i7DuRMPi4NF0GzkjlDQjye8AdPqF7h9+5xQXbLdcOD6lNqUErl9rnNm2q6nfDrZLdnPtpMGz8VNE8Y58I0w7CoNR9Vu72IhB37G5Ki/WPveEesNRUAw2oQ3v2YdGM2pN3HZ3k30jn7prdzGZfSAZY3hM+4wRf2LQ/P+/Us7UoRV7qx3KSGrgHtP0DyTFFHWX2h0I3wKIliFjuDWzRoXHBztsHzupkawJ8H1eyMxIVocZuszcvVS5wpcaAKHl9dO6E4V/0qr8/bObouiMWbLFPM8IcQ43XXMsr72IcdsX6BJLL+kY7Wo075Qo+ZDuT1Lb24kHHTS/baBhHOn7giFmAu2anOB0xRdYQVIoMmCTlyXKJ7piTXOATH41mXDDZbvbDwSV2T6s1GKMeglt+BdUXcznbrZDZCD3siVwkIJ5B0IdDIh2dF+2cshG4XKXi9txHw8bsvnJVT6IbrbBGx0o+Z+drI0UEE5NmMLz/8kJiqpXLocbrgbwFszDRqCey4caWMsKWT1aVwNCv1JWt6P7lrlNcX57LkbiJIaPkrdbu+Hmo6tpnfcwkFzfs9KDXzuV95Vfv7v0UqfnWTwAZlYhGo3/cFHvCMcWvwp1y1ZqzgdyNVu5ZTzzcs9czA1Fwyo7ZzoAMxAM4hghGlpOotZtj6VIkJ5zZ9xFtSkS6PFsswA8XFJfHh9bzvRsXY7dAakEJTWeUpDFyK3P7Y2h", "=?us-ascii?Q?1; MWHPR03MB2479;\n\t23:VeZ4X4u7Yb5Qg+7ktp5YA5gP4X/57uCE7hNjhvJt2?=\n\tDDFJmxjLBjI6ART4tMmpe8JNBtzrom0gnOP6+hlpDEwKAyQek6bB4DGu93DawZYmgiuSoT8/c9Qe5udjD5a0NUBhzHhyA5Kab5lulcH07LCT1uu+C2p+6mAKpDCjIMkqweHtD8ddzKUqLN1kTym2Klj1wr7B1gVUPgEzY33soxctYmur4i1FhHlqVHO6UrU8klG/hxVXx2vvqLlKcooHbRZ1R+Q2m2hAmk3IoBBd3EkUUe9iXai9qneMz6TWAvtBSIjvuByF202VuGAS0t0zysDcHAiM42EgSeM1bkDERHv95GE1FRiOhYTCYduqCEvK9mrfWiHbUcqB4j7G9mbjeyjsDuAoYKNWRv7TNeLoCi5f9+YCaMQpoWjsYWOorkbAmsGgbqx4dPr7pr5Hdd59qCSgXQ8Z57qi795Bpl7XgMEvGsgiGjwtl7oGS41ykXNF1ngIX+G2LjfNe5mVcToIwMcDShv4xNzuhyfdGMrxWaZLjZwvfk6iPVZ6EODF2ysFZR8pI+CulL6CmvZndEPIdnBOXTvNiYQGhVixtSnaYgmWaGJwfRJUp2yDd08fVWwEEVODeyp0kbESZ1e/H2a8XzLEQIKUEZK5Qy81UcVdMq2InmlT8NjnJ5YXa+ZFl/xOMB73e2kQaUOpeE9u3vWk9L8BUWjh8Vu1dQZnmrL/9xEDqg9reaJZPRMmz6xmYaoG/h/NPEGTupW7WAmSvT9pT1xkI1EjBuUCJh8PFQqjosrSoIjG8qwVZklS8gW+OUv7vqS4bxxpfETReKUgxNyvUE+6Z4/x7e1p/U1T9MhlOW52Lc12KwI0Oe+439H5Eirb6+AinPlQ0wSSOr2YVce8euyJ3MCEWJm7RoYmTHRnO7I4eju6eg9ulA1s1WeONjQEttt/Ler2b09i6VZm14q7aD2inEMGr9Dc2GjzR6bPWDLwsluTT31uhemuAG1WfIeHbxJjQPOPmvGLTZG0KxGt6N22P7wAW0Mxn1HcXYv+KrAC5vWaaLCiW1/dsJxATOay/vpT2sGtEx7dxpB42Mxq+7J5Mho2mfoPVZIaxATdaRkSgTMPgmOyd7p1obInAbrOblSNr2L7f4TS7vloSNDSjRqc+o7RyrydTP0cslZeU/56T8h/g2l+IeBUKP0XooaNWXOT130spN5z6NEE7oTKRgDI/8ahpGTSTe1L09P+RnXTRMixveZbMbbKErEVOgp/eD0vSUHvaD81+wAr2PX3zID2vMyS/XInIA1CXVvcKsNMXg4F6GcaKGQ+oBFDGyyFt/12c5zbNfetFzd241JgPz8", "1; MWHPR03MB2479;\n\t6:t7H/F2SDNcp/VKSwpHxASgP1LfgEZkH37W1/DqpJy3dBIJ6XNLr7L6qC9Zt8HLfFz5s9dqc+pykbzTIvB1JT8hcKHtXmuL66wSOkQkYB0BE/wbCEMTURWEU8l/YxedzYgl9yssAO6BbKxOpJraYmTkjuDeXtLSKZYunl+yEVD0Ss0Qi3a/2U54E12bO4MJOc4XJh0Gabal92wCR6C4FWHhZs3eD21Uajw9o9IQ/8p0DPvuqIjOuAZoke2bVDk0jbYBX6xa1zfFfQxmT+VIT+WrO3gsHIgl6mLxDL3Qim4ozoonAadXFu4ABgxpb01ACJmIHgVluiJhlxIDJXFrUUuBb0RBaWDlqn6QQG07Ez4ojtE3r06DfsJUNl6ea97vMRmvVfwlps6ebPzZDGHxw3ySvy1hOTiShXbIELvWVUoFrJmdedJnXdXijNDk1EYV5h;\n\t5:x4q1QWm+qII+mnGGoABjIVFcuT9P2CRvH/SBDDrRUEGsnnwgFlh1wgeFy37qrtf/u0VAY3YD/p9/bxvYI6AEum2H/R+TmfB7WM+elawWj2LRwzgNtRSfb2VLNJkVRQabNW11dCWeqlRmGParg9CPdMIaqcSvp+fzG7dYB7M26Y/qcj+eVEtGEfi6bd1GMWr6;\n\t24:+Godg7Pgw2OB0mFTgvwZp75O3L6b1wLBD3Xvc4NPYiIFiFN0L5/ZA8NqBM5eL8/G87mqOTl17LaI4yWNOkc25w45cwiIvkjjIJOKq5anuPg=", "1; MWHPR03MB2479;\n\t7:13eNR8o0/X8WQHMPufttQl/mvQ2PvD+Rl1oVCYlryQSzEO0ux8tfY37rCWhGLIbsKe2gZexhBj5pMfAQ3TUqXWYAWfSb71wBNNjz3gfFklbpjpMc+Tz3ZfiLN7LNU23FId+mw+y0TbVhaKNF14VjTB4qCO+cA9dNzEu8CPh4KKco0bSSQvfLhjQq30kCrgwuJQcqz5P5Ds+0P23lwTqTkEx6NBuZ6V3x9UwGDxCXHdSPbuZ2B3XnoHYgZ2xdEenyVL+IR7A1FN5xTva5Lih9mldkq2kKiE5axbjnfSDXjAAW5sBv8t8i0Tp9tIi3HXdsAW0leoBEuaCQlcyQ57IIsABhECcUeKoBxoMn2p7mFKgadDq6AugLXwM/hK41z6WuOol1sY2W690pV3d0oZBhCZtEJw6vtZCnenAQeJrNnpUygcPd8H9jVvT6LBUZTSLtHklSdfTL0xPV6bGIDqKdwA==" ], "MIME-Version": "1.0", "Content-Type": "text/plain", "X-MS-Office365-Filtering-Correlation-Id": "7f5cd3d2-ecf3-49da-377c-08d4406eaadc", "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0; RULEID:(22001);\n\tSRVR:MWHPR03MB2479; ", "X-Microsoft-Antispam-PRVS": "<MWHPR03MB24793609E6CF6D0FD3DCA70C897E0@MWHPR03MB2479.namprd03.prod.outlook.com>", "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197);", "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6095060)(601004)(2401047)(13015025)(13017025)(13023025)(13024025)(13018025)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6096035)(20161123565025)(20161123563025)(20161123556025)(20161123559025)(20161123561025);\n\tSRVR:MWHPR03MB2479; BCL:0; PCL:0; RULEID:(400006); SRVR:MWHPR03MB2479;", "X-Forefront-PRVS": "0192E812EC", "SpamDiagnosticOutput": "1:99", "SpamDiagnosticMetadata": "NSPM", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "19 Jan 2017 13:25:42.1193\n\t(UTC)", "X-MS-Exchange-CrossTenant-Id": "5afe0b00-7697-4969-b663-5eab37d5f47e", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;\n\tIp=[192.88.168.50]; \n\tHelo=[tx30smr01.am.freescale.net]", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MWHPR03MB2479", "Subject": "[dpdk-dev] [PATCHv5 27/33] net/dpaa2: link status update", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://dpdk.org/ml/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>\n---\n doc/guides/nics/features/dpaa2.ini | 1 +\n drivers/net/dpaa2/dpaa2_ethdev.c | 107 +++++++++++++++++++++++++++++++++++++\n 2 files changed, 108 insertions(+)", "diff": "diff --git a/doc/guides/nics/features/dpaa2.ini b/doc/guides/nics/features/dpaa2.ini\nindex 0746d4b..0660cab 100644\n--- a/doc/guides/nics/features/dpaa2.ini\n+++ b/doc/guides/nics/features/dpaa2.ini\n@@ -4,6 +4,7 @@\n ; Refer to default.ini for the full list of available PMD features.\n ;\n [Features]\n+Link status = Y\n Queue start/stop = Y\n MTU update = Y\n Promiscuous mode = Y\ndiff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c\nindex cbcf806..70264b6 100644\n--- a/drivers/net/dpaa2/dpaa2_ethdev.c\n+++ b/drivers/net/dpaa2/dpaa2_ethdev.c\n@@ -55,6 +55,58 @@\n /* Name of the DPAA2 Net PMD */\n static const char *drivername = \"DPAA2 PMD\";\n \n+/**\n+ * Atomically reads the link status information from global\n+ * structure rte_eth_dev.\n+ *\n+ * @param dev\n+ * - Pointer to the structure rte_eth_dev to read from.\n+ * - Pointer to the buffer to be saved with the link status.\n+ *\n+ * @return\n+ * - On success, zero.\n+ * - On failure, negative value.\n+ */\n+static inline int\n+dpaa2_dev_atomic_read_link_status(struct rte_eth_dev *dev,\n+\t\t\t\t struct rte_eth_link *link)\n+{\n+\tstruct rte_eth_link *dst = link;\n+\tstruct rte_eth_link *src = &dev->data->dev_link;\n+\n+\tif (rte_atomic64_cmpset((uint64_t *)dst, *(uint64_t *)dst,\n+\t\t\t\t*(uint64_t *)src) == 0)\n+\t\treturn -1;\n+\n+\treturn 0;\n+}\n+\n+/**\n+ * Atomically writes the link status information into global\n+ * structure rte_eth_dev.\n+ *\n+ * @param dev\n+ * - Pointer to the structure rte_eth_dev to read from.\n+ * - Pointer to the buffer to be saved with the link status.\n+ *\n+ * @return\n+ * - On success, zero.\n+ * - On failure, negative value.\n+ */\n+static inline int\n+dpaa2_dev_atomic_write_link_status(struct rte_eth_dev *dev,\n+\t\t\t\t struct rte_eth_link *link)\n+{\n+\tstruct rte_eth_link *dst = &dev->data->dev_link;\n+\tstruct rte_eth_link *src = link;\n+\n+\tif (rte_atomic64_cmpset((uint64_t *)dst, *(uint64_t *)dst,\n+\t\t\t\t*(uint64_t *)src) == 0)\n+\t\treturn -1;\n+\n+\treturn 0;\n+}\n+\n static void\n dpaa2_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n {\n@@ -431,6 +483,7 @@\n \tstruct dpaa2_dev_priv *priv = dev->data->dev_private;\n \tstruct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw;\n \tint ret;\n+\tstruct rte_eth_link link;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -440,6 +493,10 @@\n \t\t\t ret, priv->hw_id);\n \t\treturn;\n \t}\n+\n+\t/* clear the recorded link status */\n+\tmemset(&link, 0, sizeof(link));\n+\tdpaa2_dev_atomic_write_link_status(dev, &link);\n }\n \n static void\n@@ -532,6 +589,55 @@\n \treturn 0;\n }\n \n+/* return 0 means link status changed, -1 means not changed */\n+static int\n+dpaa2_dev_link_update(struct rte_eth_dev *dev,\n+\t\t\tint wait_to_complete __rte_unused)\n+{\n+\tint ret;\n+\tstruct dpaa2_dev_priv *priv = dev->data->dev_private;\n+\tstruct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw;\n+\tstruct rte_eth_link link, old;\n+\tstruct dpni_link_state state = {0};\n+\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\tif (dpni == NULL) {\n+\t\tRTE_LOG(ERR, PMD, \"error : dpni is NULL\");\n+\t\treturn 0;\n+\t}\n+\tmemset(&old, 0, sizeof(old));\n+\tdpaa2_dev_atomic_read_link_status(dev, &old);\n+\n+\tret = dpni_get_link_state(dpni, CMD_PRI_LOW, priv->token, &state);\n+\tif (ret < 0) {\n+\t\tRTE_LOG(ERR, PMD, \"error: dpni_get_link_state %d\", ret);\n+\t\treturn -1;\n+\t}\n+\n+\tif ((old.link_status == state.up) && (old.link_speed == state.rate)) {\n+\t\tRTE_LOG(DEBUG, PMD, \"No change in status\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\tmemset(&link, 0, sizeof(struct rte_eth_link));\n+\tlink.link_status = state.up;\n+\tlink.link_speed = state.rate;\n+\n+\tif (state.options & DPNI_LINK_OPT_HALF_DUPLEX)\n+\t\tlink.link_duplex = ETH_LINK_HALF_DUPLEX;\n+\telse\n+\t\tlink.link_duplex = ETH_LINK_FULL_DUPLEX;\n+\n+\tdpaa2_dev_atomic_write_link_status(dev, &link);\n+\n+\tif (link.link_status)\n+\t\tPMD_DRV_LOG(INFO, \"Port %d Link is Up\\n\", dev->data->port_id);\n+\telse\n+\t\tPMD_DRV_LOG(INFO, \"Port %d Link is Down\\n\", dev->data->port_id);\n+\treturn 0;\n+}\n+\n static struct eth_dev_ops dpaa2_ethdev_ops = {\n \t.dev_configure\t = dpaa2_eth_dev_configure,\n \t.dev_start\t = dpaa2_dev_start,\n@@ -539,6 +645,7 @@\n \t.dev_close\t = dpaa2_dev_close,\n \t.promiscuous_enable = dpaa2_dev_promiscuous_enable,\n \t.promiscuous_disable = dpaa2_dev_promiscuous_disable,\n+\t.link_update\t = dpaa2_dev_link_update,\n \t.dev_infos_get\t = dpaa2_dev_info_get,\n \t.dev_supported_ptypes_get = dpaa2_supported_ptypes_get,\n \t.mtu_set = dpaa2_dev_mtu_set,\n", "prefixes": [ "dpdk-dev", "PATCHv5", "27/33" ] }{ "id": 19814, "url": "