get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 24441,
    "url": "https://patches.dpdk.org/api/patches/24441/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1495445969-29199-17-git-send-email-hemant.agrawal@nxp.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<1495445969-29199-17-git-send-email-hemant.agrawal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1495445969-29199-17-git-send-email-hemant.agrawal@nxp.com",
    "date": "2017-05-22T09:39:25",
    "name": "[dpdk-dev,v3,16/20] net/dpaa2: add support for flow control",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "61e310d4e04d99f19d9ffbeb22217eb01dd766ff",
    "submitter": {
        "id": 477,
        "url": "https://patches.dpdk.org/api/people/477/?format=api",
        "name": "Hemant Agrawal",
        "email": "hemant.agrawal@nxp.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1495445969-29199-17-git-send-email-hemant.agrawal@nxp.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/24441/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/24441/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 9AE6120F;\n\tMon, 22 May 2017 11:40:45 +0200 (CEST)",
            "from NAM03-BY2-obe.outbound.protection.outlook.com\n\t(mail-by2nam03on0087.outbound.protection.outlook.com [104.47.42.87])\n\tby dpdk.org (Postfix) with ESMTP id B4C4E326C\n\tfor <dev@dpdk.org>; Mon, 22 May 2017 11:40:17 +0200 (CEST)",
            "from BLUPR0301CA0040.namprd03.prod.outlook.com (10.162.113.178) by\n\tDM2PR0301MB0910.namprd03.prod.outlook.com (10.160.217.140) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14;\n\tMon, 22 May 2017 09:40:15 +0000",
            "from BN1AFFO11FD010.protection.gbl (2a01:111:f400:7c10::178) by\n\tBLUPR0301CA0040.outlook.office365.com (2a01:111:e400:5259::50) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14\n\tvia Frontend Transport; Mon, 22 May 2017 09:40:15 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBN1AFFO11FD010.mail.protection.outlook.com (10.58.52.70) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5\n\tvia Frontend Transport; Mon, 22 May 2017 09:40:15 +0000",
            "from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net\n\t[10.232.134.28])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv4M9dk4B031538; Mon, 22 May 2017 02:40:13 -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;",
        "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": "<ferruh.yigit@intel.com>, <shreyansh.jain@nxp.com>",
        "Date": "Mon, 22 May 2017 15:09:25 +0530",
        "Message-ID": "<1495445969-29199-17-git-send-email-hemant.agrawal@nxp.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com>",
        "References": "<1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com>\n\t<1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131399196155156164;\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)(39860400002)(39450400003)(39850400002)(39840400002)(39380400002)(39410400002)(39400400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(9170700003)(53936002)(54906002)(50226002)(8656002)(47776003)(498600001)(2906002)(4326008)(8936002)(8676002)(104016004)(81166006)(85426001)(76176999)(48376002)(110136004)(50986999)(38730400002)(50466002)(6666003)(2950100002)(189998001)(86362001)(33646002)(305945005)(6916009)(5660300001)(77096006)(106466001)(5003940100001)(105606002)(36756003)(2351001)(356003);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0301MB0910;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent;\n\tLANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BN1AFFO11FD010;\n\t1:XnG+7zeS5nGTf1to61uoVZ9KoseuFr3XmnJSeCULEnQsG8w0xQegYs21czUOAwoJgPgZeEAkB4gHHNkoxs3qmmIOOca9Vx5TvV2BeUbodkcybFfBbK+3fEZenXnQt7WvBoXA7vE7uxhaqrXEsrVmbAJ6l5NnBhCZlKtByBdvdKec8Gh7gVywCrcSsk7kbuv9nQPr8CN5VLxd7M/gleqHOehw6og7BEnucsHP15FQo8rAPZLpTnRq/s6qOqFhWYJHwkGS8YJkYDOXLwC3xXcRORs0hJWIzRFNKfqyx60s666ZZho4j5JsDRLd+4kwW4pS5IrEq7VOo1tgHfs0mSKPiNJWi3gJBHdCTgG1oLMRJZQzBvHj8TRWxthH4TaZvr2h09RnyBhzdNWl+w5njhQTAXGKFKBQmIknnXGsfiMFafIeyu6D07s8AuFMhaQnq3Ez5CHFFN+zIw1Y/rurQ5O6dXiHx3tyoSIzTQt9hDUUtvoDEtk45FY3lBknlCvxg6S550LUW+FF0Z+LztZZKPjT4Ho9CXISTjk2iN5jRRIJcl4gUKEXVcAiGi3WFNzwdyIPvZfuzVk6HxlqlHZXFHudNWXHbRx4uW1yqj+JFmDIhp3HHJxTrUjNtanFokTQE+L7Deuq+oY+9y1CctNPTTzafUsePJSekHxQPkGQf/8/X41O9BgICpi3dERauMsWcMjUZPQtD8XqlTgTdH3Cgp1fN9RUXzKA6laClbS6slxEiAuhY18YYUHufVURcIi1OzUbDsjJXC0eZ6kutSUedKNQvA==",
            "1; DM2PR0301MB0910;\n\t3:x2so4bBzwcUzs9aWls7R1rmRy3x2jcd0syhK2VKvWGPqhBu3oxsI6Y3S7KmXwZZ9VzPV2UUb+Ur82tZ04Lr/gf92SuR5xWYxvrxsvi7LeGFYbtE9czHcDODCSoxHKjmXHcy/wujRRzqhoxEyYSJOmd9xZvubxtpHiDc6IYV5B12T6lF2/nhBPH+nh66MCS2EKKLgpfbmgxTOLMfITYotZTfH+AAmGRmKfJIBTEqYEOKx7o9eDYn5xiE5YMRZg1ITOXOU3ARu4LnZZP6dmWkabDg6RZBwgYncMFeAPM2ZtvoPpQ3iHMHlCjPv3t12j+TfFbLIc1DN5PLH095bQptmY3aRPkaFZv1l50xqG+2rVBDnZ4yMrgpl4ngum7qCnsnvEoZ/TsnIQnyCbyYSTwB3IWMYVmUjMrQPyT5huhr2x4/aDAo8xCn7DjOMtodCypZb;\n\t25:4L4/UliQmxvH0D8jWsKV/KNi4OW/NgO0z/Mz3Y3eJNZ+Grd1/WDOEPhqkKLcfzO30Ql1t0T8jwUFv4eO1U5gsWr4SCTGHYRPqrJ5pjFg01akWPWi4f/dVrxDqlJt5HcvD6ihS2zFlxnenCWBR59tnozQOHJ1jH5uxJ9Iwkyz7lE3s7LGjqdNnV6uvgYIFwswXo4Vfpa8jcxNxdiVO+zSJdAPnx6AJhkTG+sjjLsuTpN7JOscDz1cHtDyApGaUDezI9ibZdjKOLRy5RDXfoJYaF60m0dLuf3NgtoBXz8Pqu2X44oCjJmO0N/kDuk33N8JUXpNUN91UERiJ8xoogTgTMAN6PlPV7XSIDbNh/jaK8LtJwQNsVO35GlBzDGHg+9ojHfOrebc18Pi0UJBkvd9ZCS6tex05J5ZhRbiPNfcypbwJteC196Ay3tUZie3Lrog+d7VY0nLzDEJ7O7R8GDcs1jy7qPtD5k/NJX5z+6YUoo=",
            "1; DM2PR0301MB0910;\n\t31:nfHgl9r2phST1LsegR9SqfgsIbf3YhYg6Rk+XfQdY+UiyuQv5FDLq1bU4WjRPVKgT5r2XJHr4NDmJ9cdZlRQlTAoJ/Mjs+0DCcAId3kL1ZIjUuc6ckTuPDl+AA6LbKkLvUWf/QRT/ion48M4mrv2H1yXB5sHTwcfs6EZqP5yH5LmRB91jzOQM04+DrnH6wjxSspVh0yK07JU74BV1AljOiIt/O7aLPS3+PADvpgIqGlo5EE2M72nNzuPZP89g2Ci",
            "=?us-ascii?Q?1; DM2PR0301MB0910;\n\t4:sh5Uxeagi8gTQjELzb1PN/baD+uQh+weie/3XLC8?=\n\t+86x5e0eMgL//UiaVNwuBfZkFnku8SPdbg0JVLE7Lz4uZmG6zOs6+DGH7CsEZnB/BDXqCiCt13sGi1Alcl5PtzAU1jj0cnYkDLnwGZe/7PpTCkJOaNBSu1bEsI8hpu72Xy4GHWdritWDAL8Bd744OxjX2HmDKEcrrUispyzU0ZrSugvhRPCeH11stRRv0Vueu5BmZMFFHsnnli25fOnGOYqDcUJGiUEjszwkB5S+IpAR7PI7vlr1DBa6kofyGKa/Cikg8unR6WjN/FEZ7Hp3066wSHCChhzfl3TYFNYY/kki8ArJJaY8s7vioOzJI3Ou2uZ34zQ5EKkUS3FewO2psevHNuZlhSJxZQKCLfazVmG0nfeRMXFZdjDtBSu31YLUpOgjqnkaqE9+lL36CCZ1SODf5SWts4cKeHJ78pdN9E7x2KHGFy0KFK8LM3ylCTX0bZ0tLLmo1b8k0gh0vUylSWZ3bvCVCvgnPZcwD1YYT4Y4LEy7j61Xa67TJqNMiRmMM3bOcasUJ5k9yQ/mvLfXYoElas3deDj9S4wqmvHHGpoap3iyKu9z0jusJuDt+pTpTruN5d8bA3GJVNR7laK7ST2/IvC/2BF8p19qGq/Z/sHUQ9904yteBrMm4DnrinJZc+4A8QiV+ynytK1hJv4l6WN/gR7+X75Re6dLrp5God5OEPe5dwGVC7J2NZCLO0qAWjeORIJUsQQHgdvN5+EqAYruVyPNxMy9d4WDTB8v+ZKgF/fo8Qm7XjkRccnQU6CO6VS99xj2xsVZTwlZsG/Uw6crJT7KBIja4SVCLuqq37Nv9BLjfp+Bl8Umw5aEmIvJAmKq9/nLlGa3TMQXvJWVOnVY67iNkpI31Sg6YwJPuxvHSwhlqCvfw0FWH1EKpveuUkMfQCL15DK0MWAnCybNTkDRy99cp6NF8xx7UopIsnc8gIbVuu/+XAdOXYHZIKb70HE=",
            "=?us-ascii?Q?1; DM2PR0301MB0910;\n\t23:zKQ1b/8NpPBcPIsr13YG31aoc9R3aN/0YCFDPym?=\n\tB0kkvElacOBxuAHR2azKemwbwRR8Pb7d2bTJzoVbreewjtrfCEgYEijeHPdgV3/9sy/h9rdLm6WtREN5P/AvUujVSX3J8/dcFm/BGefG/c/CuXsdpKgTSn0m1tVya+wg6ZZaUdTnvGPkch88jJM4u6EqHKKkOVts3MQoS1v9Yq10eq40aicCLkNIAD4mWU2xkpoxtEba8N4KeN/ppxqhg9Gm0H8zXcVjU4xG6tGPcMLtse+bkM1VoXtz0/5rZaACphNGesAPPRyv8UTbaFDPhnecKN3ewAdudSow04g/TFRGy/yjxI0a53U72wQlYFbGXxGYIauP8CrIoI+qQpbmt7nvbUK1ftZgJpzBXKdowEmeMTovPTTEo4khEJBILRC65/FPh+5UuZntUNiCmRMsJq1xrSMSNDwurS6aBKSGQrSR4K/OMqK7Gm1rGmokS88OLrt398VIWauT5i7t+GE4TgA7k5dwLfPvPEftLK4U79jSs4MgKWW/cLVz4C2Vso/WZzCn3wTnVOnhcsBFdeT9QffCTHInOCJYmjnPWEEBMGk0c4+RjXBWHGa0q9epjC11HiVgqFwU9YhVbEdU0RfUyCRinlvecaZ6LZZ0PViM84ToygIPOMuayXRgbhWwZSJJGElLqM7KGnMQV3Y8DAyMSN0OMrS09X+hlVODpVgujrz+7BBaCnDpjS3OOm3W4gx3j5H6zFaskwiC28v1DSwTU4Lb3asBmyLoimMBGVsDO1aPwmZqjTOWe0Lx3+uZtQkudlr1lFSnzNutfCH2r27CoakFziWB6l+HrkNF5RNOGWiIlDHuo+M1NWTzJu8mGpWMx6AGG9f6OC2gSPL+jglwF1OvDH/b/kzu7kxtad+9mUOnWZZ5euBfKoeEVlg/dPXAVibOI4ja5Yk4AIW0lS3Xvp5OqwvglFS/yeHcNUz/wZRqAvcP/lhPaV7x/LCX2xmvBh7QN/veoPcOT5q36imo8rhwwdcVBP00iwFGgE1lw7JKlqsE0x2S+LT288XbHYvVudaswr+IcW9JeEP9jtR7SjhWaV0GALi39zxYDkhCXImU4TWncYoxS9doDB1emFdVqO0znK+PIHJFkF4G/hSBqA3rKOGOb5OW9VtGIpa6135v2KoJpMHtww0d2vjKJloLW0VMLi2sNBHCNWaAnwaJ4s+9dnD7KcpIDjcKVzuKb3HARlgibwteLsAMkiXGiC1mLgbM=",
            "1; DM2PR0301MB0910;\n\t6:1zDf1f+PfwSVT4AklThvfs8NO9/wNcP0iZvWOFNhjyRr2FGwfov4C4bitxg74BJfGlYSZhiQM4kg4f/1zxOMpKysrTnkjPaM6RJwmVP1anaEaJm5XjzGg3kA2TokR0g6TWGkJYxas8RRwizeaFmFAtLozCctjVxsU/jA6/UqOE3iAH/aa2M0rdEwBt4rTUboJJawKPLo4Tub5b2FUhOYqAdtL1g5yfnPHms1mRdO79kgmWqATlAzK1wOY2G4BI0Qj9H+nH2+e5s69OHELm8/ylD9fylz/YKHF5OLy0G8Sxuf9s/XLayGk4znQAlasD+Qbl6dm+DgUIQpjcGftPy9RoNCnpGxcpI23EIPpa/BegCf5+6jXxl9WbYmRwxlOw7W6B4Sk9OFf8TfVzeALCINzQnxa8CFbLp7vbgJhyJLe8p0ub74i4OP/VFzJ7pWGI62YnplvWQLI0MMOXGnptC3KjePKMALPWUWs72S0PVIzI4b4zCUOlbpiwksDRkKmxNCAsXO7R1RKTlH25VdRojoYA==;\n\t5:I1maOsfG6oNbWmjgv+aSdrdXkWIhEdGdi26WYIMKAaWsjPHNElxshlKv/329m7petxHPW7k62DQGh+Z5kf4eZNnhT95LF4HgWyHFyYcqg0xECuSqxRdYQoy0PXL5fetfdq5Y65KSfcLSugO5d7BcThYR+vV5Hjvq5CSZLuzMTtj7YnI0qwShxu4wQdONRBKx;\n\t24:H74l1D7K7TIu5+WkU2xUsRiLK2A3g95aERBXKDRV1LuJX3zcpCKVULMyn7Ky1fhM7V6rKPdfML+TSXpwJvq6igKs8zUJu9pmPrYAB7IaY1c=",
            "1; DM2PR0301MB0910;\n\t7:aGYQbjwx/tQFDqLOtTWAZ9+Myq07nx5q/yCOIB5toOXCRlRzMVfVSQaaBLTzulIBIBCwwNOg7SQaba3fZlLZtsZ5fuvB3qJp76thxGXPIcI5R16viVHUB8GsYg4wCmy2Bvl7jeKIQizvP8F6iWSvs9QqPzEdjQwlIDDhrBHP/xEreuV/iYHLDwmKK8Jc3se6ejcctasCG5Lp8oggP/e0u88seuQeh02jE3d59hFnv3i8F69YrZ5U265XmLlzaJuOYJcr/7Sz+eI0l4jhPRojQQUGHy+/LQJI5u1dG2bPZ4TEqBo0WcqTfeo78UzJKQNrIqcsQ2887XYQTFD9CpMpvg=="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "DM2PR0301MB0910:",
        "X-MS-Office365-Filtering-Correlation-Id": "71acb2ce-14d4-47ec-d402-08d4a0f68d0b",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(22001)(201703131430075)(201703131517081); SRVR:DM2PR0301MB0910;",
        "X-Microsoft-Antispam-PRVS": "<DM2PR0301MB0910001506B6C79E959C026C89F80@DM2PR0301MB0910.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197)(275809806118684); ",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6095135)(601004)(2401047)(8121501046)(13015025)(13023025)(13018025)(13017025)(13024025)(5005006)(93006095)(93001095)(10201501046)(3002001)(6055026)(6096035)(20161123556025)(20161123561025)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123559100)(20161123563025)(20161123565025);\n\tSRVR:DM2PR0301MB0910; BCL:0; PCL:0; RULEID:(400006);\n\tSRVR:DM2PR0301MB0910; ",
        "X-Forefront-PRVS": "03152A99FF",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "22 May 2017 09:40:15.3284\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": "DM2PR0301MB0910",
        "Subject": "[dpdk-dev] [PATCH v3 16/20] net/dpaa2: add support for flow control",
        "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    | 142 ++++++++++++++++++++++++++++++++++++\n drivers/net/dpaa2/mc/dpni.c         |  18 +++++\n drivers/net/dpaa2/mc/fsl_dpni.h     |  24 ++++++\n drivers/net/dpaa2/mc/fsl_dpni_cmd.h |   8 ++\n 5 files changed, 193 insertions(+)",
    "diff": "diff --git a/doc/guides/nics/features/dpaa2.ini b/doc/guides/nics/features/dpaa2.ini\nindex 4b1e000..720c35b 100644\n--- a/doc/guides/nics/features/dpaa2.ini\n+++ b/doc/guides/nics/features/dpaa2.ini\n@@ -12,6 +12,7 @@ Allmulticast mode    = Y\n Unicast MAC filter   = Y\n RSS hash             = Y\n VLAN filter          = Y\n+Flow control         = Y\n VLAN offload         = Y\n L3 checksum offload  = Y\n L4 checksum offload  = Y\ndiff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c\nindex fa9db17..edff04a 100644\n--- a/drivers/net/dpaa2/dpaa2_ethdev.c\n+++ b/drivers/net/dpaa2/dpaa2_ethdev.c\n@@ -1105,6 +1105,146 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev)\n \treturn ret;\n }\n \n+static int\n+dpaa2_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)\n+{\n+\tint ret = -EINVAL;\n+\tstruct dpaa2_dev_priv *priv;\n+\tstruct fsl_mc_io *dpni;\n+\tstruct dpni_link_state state = {0};\n+\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\tpriv = dev->data->dev_private;\n+\tdpni = (struct fsl_mc_io *)priv->hw;\n+\n+\tif (dpni == NULL || fc_conf == NULL) {\n+\t\tRTE_LOG(ERR, PMD, \"device not configured\");\n+\t\treturn ret;\n+\t}\n+\n+\tret = dpni_get_link_state(dpni, CMD_PRI_LOW, priv->token, &state);\n+\tif (ret) {\n+\t\tRTE_LOG(ERR, PMD, \"error: dpni_get_link_state %d\", ret);\n+\t\treturn ret;\n+\t}\n+\n+\tmemset(fc_conf, 0, sizeof(struct rte_eth_fc_conf));\n+\tif (state.options & DPNI_LINK_OPT_PAUSE) {\n+\t\t/* DPNI_LINK_OPT_PAUSE set\n+\t\t *  if ASYM_PAUSE not set,\n+\t\t *\tRX Side flow control (handle received Pause frame)\n+\t\t *\tTX side flow control (send Pause frame)\n+\t\t *  if ASYM_PAUSE set,\n+\t\t *\tRX Side flow control (handle received Pause frame)\n+\t\t *\tNo TX side flow control (send Pause frame disabled)\n+\t\t */\n+\t\tif (!(state.options & DPNI_LINK_OPT_ASYM_PAUSE))\n+\t\t\tfc_conf->mode = RTE_FC_FULL;\n+\t\telse\n+\t\t\tfc_conf->mode = RTE_FC_RX_PAUSE;\n+\t} else {\n+\t\t/* DPNI_LINK_OPT_PAUSE not set\n+\t\t *  if ASYM_PAUSE set,\n+\t\t *\tTX side flow control (send Pause frame)\n+\t\t *\tNo RX side flow control (No action on pause frame rx)\n+\t\t *  if ASYM_PAUSE not set,\n+\t\t *\tFlow control disabled\n+\t\t */\n+\t\tif (state.options & DPNI_LINK_OPT_ASYM_PAUSE)\n+\t\t\tfc_conf->mode = RTE_FC_TX_PAUSE;\n+\t\telse\n+\t\t\tfc_conf->mode = RTE_FC_NONE;\n+\t}\n+\n+\treturn ret;\n+}\n+\n+static int\n+dpaa2_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)\n+{\n+\tint ret = -EINVAL;\n+\tstruct dpaa2_dev_priv *priv;\n+\tstruct fsl_mc_io *dpni;\n+\tstruct dpni_link_state state = {0};\n+\tstruct dpni_link_cfg cfg = {0};\n+\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\tpriv = dev->data->dev_private;\n+\tdpni = (struct fsl_mc_io *)priv->hw;\n+\n+\tif (dpni == NULL) {\n+\t\tRTE_LOG(ERR, PMD, \"dpni is NULL\");\n+\t\treturn ret;\n+\t}\n+\n+\t/* It is necessary to obtain the current state before setting fc_conf\n+\t * as MC would return error in case rate, autoneg or duplex values are\n+\t * different.\n+\t */\n+\tret = dpni_get_link_state(dpni, CMD_PRI_LOW, priv->token, &state);\n+\tif (ret) {\n+\t\tRTE_LOG(ERR, PMD, \"Unable to get link state (err=%d)\", ret);\n+\t\treturn -1;\n+\t}\n+\n+\t/* Disable link before setting configuration */\n+\tdpaa2_dev_set_link_down(dev);\n+\n+\t/* Based on fc_conf, update cfg */\n+\tcfg.rate = state.rate;\n+\tcfg.options = state.options;\n+\n+\t/* update cfg with fc_conf */\n+\tswitch (fc_conf->mode) {\n+\tcase RTE_FC_FULL:\n+\t\t/* Full flow control;\n+\t\t * OPT_PAUSE set, ASYM_PAUSE not set\n+\t\t */\n+\t\tcfg.options |= DPNI_LINK_OPT_PAUSE;\n+\t\tcfg.options &= ~DPNI_LINK_OPT_ASYM_PAUSE;\n+\tcase RTE_FC_TX_PAUSE:\n+\t\t/* Enable RX flow control\n+\t\t * OPT_PAUSE not set;\n+\t\t * ASYM_PAUSE set;\n+\t\t */\n+\t\tcfg.options |= DPNI_LINK_OPT_ASYM_PAUSE;\n+\t\tcfg.options &= ~DPNI_LINK_OPT_PAUSE;\n+\t\tbreak;\n+\tcase RTE_FC_RX_PAUSE:\n+\t\t/* Enable TX Flow control\n+\t\t * OPT_PAUSE set\n+\t\t * ASYM_PAUSE set\n+\t\t */\n+\t\tcfg.options |= DPNI_LINK_OPT_PAUSE;\n+\t\tcfg.options |= DPNI_LINK_OPT_ASYM_PAUSE;\n+\t\tbreak;\n+\tcase RTE_FC_NONE:\n+\t\t/* Disable Flow control\n+\t\t * OPT_PAUSE not set\n+\t\t * ASYM_PAUSE not set\n+\t\t */\n+\t\tcfg.options &= ~DPNI_LINK_OPT_PAUSE;\n+\t\tcfg.options &= ~DPNI_LINK_OPT_ASYM_PAUSE;\n+\t\tbreak;\n+\tdefault:\n+\t\tRTE_LOG(ERR, PMD, \"Incorrect Flow control flag (%d)\",\n+\t\t\tfc_conf->mode);\n+\t\treturn -1;\n+\t}\n+\n+\tret = dpni_set_link_cfg(dpni, CMD_PRI_LOW, priv->token, &cfg);\n+\tif (ret)\n+\t\tRTE_LOG(ERR, PMD, \"Unable to set Link configuration (err=%d)\",\n+\t\t\tret);\n+\n+\t/* Enable link */\n+\tdpaa2_dev_set_link_up(dev);\n+\n+\treturn ret;\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@@ -1128,6 +1268,8 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev)\n \t.rx_queue_release  = dpaa2_dev_rx_queue_release,\n \t.tx_queue_setup    = dpaa2_dev_tx_queue_setup,\n \t.tx_queue_release  = dpaa2_dev_tx_queue_release,\n+\t.flow_ctrl_get\t      = dpaa2_flow_ctrl_get,\n+\t.flow_ctrl_set\t      = dpaa2_flow_ctrl_set,\n \t.mac_addr_add         = dpaa2_dev_add_mac_addr,\n \t.mac_addr_remove      = dpaa2_dev_remove_mac_addr,\n \t.mac_addr_set         = dpaa2_dev_set_mac_addr,\ndiff --git a/drivers/net/dpaa2/mc/dpni.c b/drivers/net/dpaa2/mc/dpni.c\nindex e92fe06..5e56b19 100644\n--- a/drivers/net/dpaa2/mc/dpni.c\n+++ b/drivers/net/dpaa2/mc/dpni.c\n@@ -444,6 +444,24 @@ int dpni_get_qdid(struct fsl_mc_io *mc_io,\n \n \treturn 0;\n }\n+\n+int dpni_set_link_cfg(struct fsl_mc_io *mc_io,\n+\t\t      uint32_t cmd_flags,\n+\t\t      uint16_t token,\n+\t\t      const struct dpni_link_cfg *cfg)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_LINK_CFG,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPNI_CMD_SET_LINK_CFG(cmd, cfg);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n int dpni_get_link_state(struct fsl_mc_io *mc_io,\n \t\t\tuint32_t cmd_flags,\n \t\t\tuint16_t token,\ndiff --git a/drivers/net/dpaa2/mc/fsl_dpni.h b/drivers/net/dpaa2/mc/fsl_dpni.h\nindex 20ab869..fa5a134 100644\n--- a/drivers/net/dpaa2/mc/fsl_dpni.h\n+++ b/drivers/net/dpaa2/mc/fsl_dpni.h\n@@ -740,6 +740,30 @@ int dpni_get_qdid(struct fsl_mc_io\t*mc_io,\n #define DPNI_LINK_OPT_ASYM_PAUSE\t0x0000000000000008ULL\n \n /**\n+ * struct - Structure representing DPNI link configuration\n+ * @rate: Rate\n+ * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values\n+ */\n+struct dpni_link_cfg {\n+\tuint32_t rate;\n+\tuint64_t options;\n+};\n+\n+/**\n+ * dpni_set_link_cfg() - set the link configuration.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPNI object\n+ * @cfg:\tLink configuration\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpni_set_link_cfg(struct fsl_mc_io\t\t\t*mc_io,\n+\t\t      uint32_t\t\t\t\tcmd_flags,\n+\t\t      uint16_t\t\t\t\ttoken,\n+\t\t      const struct dpni_link_cfg\t*cfg);\n+\n+/**\n  * struct dpni_link_state - Structure representing DPNI link state\n  * @rate: Rate\n  * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values\ndiff --git a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h b/drivers/net/dpaa2/mc/fsl_dpni_cmd.h\nindex 6e96271..4395aac 100644\n--- a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h\n+++ b/drivers/net/dpaa2/mc/fsl_dpni_cmd.h\n@@ -64,6 +64,7 @@\n #define DPNI_CMDID_GET_LINK_STATE                      ((0x215 << 4) | (0x1))\n #define DPNI_CMDID_SET_MAX_FRAME_LENGTH                ((0x216 << 4) | (0x1))\n #define DPNI_CMDID_GET_MAX_FRAME_LENGTH                ((0x217 << 4) | (0x1))\n+#define DPNI_CMDID_SET_LINK_CFG                        ((0x21a << 4) | (0x1))\n \n #define DPNI_CMDID_SET_MCAST_PROMISC                   ((0x220 << 4) | (0x1))\n #define DPNI_CMDID_GET_MCAST_PROMISC                   ((0x221 << 4) | (0x1))\n@@ -238,6 +239,13 @@\n } while (0)\n \n /*                cmd, param, offset, width, type, arg_name */\n+#define DPNI_CMD_SET_LINK_CFG(cmd, cfg) \\\n+do { \\\n+\tMC_CMD_OP(cmd, 1, 0,  32, uint32_t, cfg->rate);\\\n+\tMC_CMD_OP(cmd, 2, 0,  64, uint64_t, cfg->options);\\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n #define DPNI_RSP_GET_LINK_STATE(cmd, state) \\\n do { \\\n \tMC_RSP_OP(cmd, 0, 32,  1, int,      state->up);\\\n",
    "prefixes": [
        "dpdk-dev",
        "v3",
        "16/20"
    ]
}