get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 28773,
    "url": "http://patches.dpdk.org/api/patches/28773/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1505559161-29222-4-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": "<1505559161-29222-4-git-send-email-hemant.agrawal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1505559161-29222-4-git-send-email-hemant.agrawal@nxp.com",
    "date": "2017-09-16T10:52:17",
    "name": "[dpdk-dev,v3,03/27] bus/fslmc: add qbman API to do enqueue with multiple frames",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "889a2d7690041a421237f98ff2c963de9929a8b4",
    "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/1505559161-29222-4-git-send-email-hemant.agrawal@nxp.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/28773/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/28773/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E85C37D26;\n\tSat, 16 Sep 2017 12:53:24 +0200 (CEST)",
            "from NAM03-DM3-obe.outbound.protection.outlook.com\n\t(mail-dm3nam03on0046.outbound.protection.outlook.com [104.47.41.46])\n\tby dpdk.org (Postfix) with ESMTP id BB3A01AEF0\n\tfor <dev@dpdk.org>; Sat, 16 Sep 2017 12:53:16 +0200 (CEST)",
            "from BN6PR03CA0014.namprd03.prod.outlook.com (10.168.230.152) by\n\tCY4PR03MB2694.namprd03.prod.outlook.com (10.173.43.137) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.20.56.11; Sat, 16 Sep 2017 10:53:15 +0000",
            "from BL2FFO11FD016.protection.gbl (2a01:111:f400:7c09::130) 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_P256) id 15.20.56.9 via\n\tFrontend Transport; Sat, 16 Sep 2017 10:53:14 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBL2FFO11FD016.mail.protection.outlook.com (10.173.160.224) with\n\tMicrosoft\n\tSMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id\n\t15.20.13.11 via Frontend Transport; Sat, 16 Sep 2017 10:53:14 +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\tv8GAr6uo028328; Sat, 16 Sep 2017 03:53:12 -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": "Sat, 16 Sep 2017 16:22:17 +0530",
        "Message-ID": "<1505559161-29222-4-git-send-email-hemant.agrawal@nxp.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1505559161-29222-1-git-send-email-hemant.agrawal@nxp.com>",
        "References": "<1504860327-18451-1-git-send-email-hemant.agrawal@nxp.com>\n\t<1505559161-29222-1-git-send-email-hemant.agrawal@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131500327944718444;\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)(376002)(346002)(39860400002)(39380400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(85426001)(76176999)(316002)(50986999)(54906002)(6916009)(110136004)(97736004)(48376002)(105606002)(50466002)(53936002)(36756003)(4326008)(2351001)(104016004)(16586007)(106466001)(33646002)(47776003)(77096006)(2906002)(8656003)(8676002)(5003940100001)(86362001)(81156014)(81166006)(305945005)(189998001)(5660300001)(356003)(8936002)(498600001)(68736007)(2950100002)(50226002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR03MB2694;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BL2FFO11FD016;\n\t1:dH3RO7789J2VZy4lKKG3YtAtg4LamBDkI3g/xlfjwHtscxUAXK1V0P0eWCWbANtdWJu4AlpcU51/KKFMlT1xgfQAzPecrQISsSbhXF7T8jrXKIQpE8BtsAr3qE0eLLAL",
            "1; CY4PR03MB2694;\n\t3:PaqPNtiT3RvfN7imfYmMi9DkL4tHJukHmHdaJ/mvnJ3quX4iWOS5zSvyapEeFrgQMiwzOCAGol8PypcaNQDJgl1eZ6+EyiINRGRYK87xpDte6XCM4n7C9YuET41fT/5vTE+0SDTP2ocs2FFxGLaUbpBziPsJO/ubphJb0KdZjLgjJCWeX1xCmpZl+uRhjBDkn50pUBvO0TFhQhC9o/v1VP2gFIR6D9Z/mTBi4DIjV/4wR5MwgSFU6nc0H/9JBrNZb+MMWW9X8+6Ej+Vo7jz4YFRfjhztgkbRXicbnT/DPSjQN/WV5wu/2sCxh88Q6iCnz4gdf/8VjxQmYI4HlL8Elo5j605wATd3phVLLtaDygI=;\n\t25:vqOmKVsAsUub0Xy4HWVVFfIQVFUceKgk0BFDXyz7YCNZTlf32k4IOLD2SSpkNNlqMnGz+xjIjx+f1GO+OSAn3X40vQ2JVmGcuUxswCncp/RZGn/hqEGV0Qsdcs2xpsIxdBchyAmUf1ApwJsa3DxQCu21y4dWbS30HDckRlNtvxp92XPYOBhWNABqqQfsXE8Cxr//6R0Qd4mg1mu4qJ9SMrayT8UqiZH466JRXxiepq+wINJapVO7njAZECUEikQAKPO4umcQhCAxOtDX9Z1KLmniiPRhlzfx6iPBKKkiHtRqlmtq07t7Zb2y8o2x01aCf8cDlWqaCg1hgLw9wyqohQ==",
            "1; CY4PR03MB2694;\n\t31:pAGoHKImd8r+Xwmo2fRWKsmO4o6H6yIksnlBW0s7JG3lbddccOw2ARv/cXD56LXjA0JAjOPMkHgtnNIdDarFXbr/Ict8/gGWaiDNNO1C/nZm3/jEgeLH3qRpMWCNnfKMhX8ByaUwqpyAtJlHdt293tGqgWlatLK0pyX8hmDrDXzmeDnTOCsOXwdS8shmIgQPXCgWuMlQf/qVvaGD8LwWKCPdo741EwL8OBoi815DARs=;\n\t4:XOkQzyssbO/y6628E/hC7r1dtRmCpY4cjSJRh/kiw/XOH9vd7jqUEDusxb9XZmQkpk72Nn6pz+p+Y15XZ+EPT+wG74RnQVDj4W5ozJ9A1Y1gUHfddtUVL3F5dBPyFEzLUywKC851DybpkJ8kE7z+Stewq5Zli1ibBxas+aMK4y4pdvFsoS6RlSZYLO3+DLttXOKI7ShzqScXkBQZYLNs6V7EjqpXSntVQR/Rfbo9z2SHW2vRWp/bVxh5Iayj3ASH3/lbpcGWTG4svKMDo7OO/ari4n6yjgxEk3TqE+uEITsQ5XlinHnKgH2Yb+K3ro13pSP/Kd3NMtnNsfEJsl35Fg==",
            "=?us-ascii?Q?1; CY4PR03MB2694;\n\t23:ktNuno3KtgLaklvtu7CkxgBI7YACTSZn/X0GPojZ+?=\n\ttKAiZf3u6SLytsKqQ/6mrfM5Pv5lTqWdXVPrp6LgqbyZIU0eGYNaX0Fs+OFBooqiGg//9CQBj13eNR78RNs7D3R/vln4NAKiJK4+WTooY2QIlV8Y/f/UliIbzMXP3sGQ0iH+8cBhXu16SU7FrWoYpf/G6pm8iDkq4hTz1uLe0OZXdHm6ItcfZPm+ka2Adm4WJMWUy9JRtjSQeEa05culv1/q9l04KmDhltVnFVxHwEnr20lpXeQN9zIAdCEcHwQ8RkASTtGxArpIZt3Wx+HwdO4HHVuLclijrL803MTR91z0RA+u2MyzmYm9jH7ZwhF3jjQCCkppFEgLrcG8uOvdOS0aM5PiXtwxrPPYvyWXTIio9n4JO3vquJBajx7HbP7+7v8xyXJsTS+4xCjGbE2JMkeS++xZdjLep6PWQol67wEeSynJ95RKWg7kLY4wBNSi5Majc/NyiduemmFEXNtWboQt5ojalDPWlvnGl+hmO5UbBGHjKjnsqFAxeTlISTeAzT/yfby0jqJhWS1fIIaqawLDnoR85S360bokvPu3woJLUtLfJ95Z5Vc3y6fH2G0x/2G0cLE10aosOEm5DaU6z/z6LqNNRrUZsC3qZ9HeQeGyPyvex3e9jWdQAPr7MzLVxQFw+d14Lh8CNxOB/4QRHmCRsLMxD++dTU9P7SnR34bcdDwI1S+V7ykGiHE8Ds3HVx1xB3iTRoeSl6E3XpBjiecUirqGgWeVCCw34oVqG92iRtGtYnT5qAJe9tz7Des7703veYysTkvuUokQEl8Db3GW35JCLaPWlZBuex2HDEhOkpovrw1UvVLMPPBDliZ9zYhV4xQfaohVayXnBjZWhIjFD22tYJe7dMeaAcaZG9Vruf38g1PY6MzP59YkYW9Oi+ItqEYjcpwl+RTeXIdALS+ZbtcPwh7p2mLGwpySjxR0EZp1rZ2cCOR30wYAJvAv8LTZPDOB1DLuJWnnbwcu6kZLaDZUad3h147AVt5fx9AwqaSPrLcyvsY2Zu0eQGUJDvBjllPL2AFME2ET72VY8PzcQ2jPkQj8B6gBAmTGDpWYCIuQIBcWJYj7hHZTSkqWUChY3JAJ+12GAz2QibyA6Wa2tASZr9eS/+fCdHNWuWcKw==",
            "1; CY4PR03MB2694;\n\t6:M+TNwwsm8monBzlv6LXlrJu1hZeIHu7XoOvub7pZCEZjAzcx+aLsqxsuRK59+HF2EpCeBu30sSSkXuA/fiK6npQpbv+uwxDeHBOoHiWYMxh27vH7sEtiZwJcml9TzsN0ePRVD/AAt1vImVOFctuKE096N/wn1MK/a7hAOsremEX6GfRI7csGleS2/ux3y3GdbfBcNCDLO2fAHty/TejCJ8/+ZG/fpqcVtj/nvnxeN78tTcTkRQZJ/NuSxNP5cEWub3ldF5KuEM4AoNDdqCfzGguCE5t2fNEAZfyexbJlzigF4zv+t2xPpnDle4ZLsNaje4fiuxJHwbhBeG1t8R/u+Q==;\n\t5:XFyZQrYl2IAHkx5tiGuKxmrrNhe7PlVI0O1QmvG/D/ieaFwCr2GAXXbAKIM1H5RsW6D+eOx0uoscTuADqYzN7QrW4lzj1Tu9bYDBO110mFqli2KrKpKt+iMkfVPoz+2yyQzoKyg4Rp/Kn9NFMW3EvHse+Oy4oVRpcxIY7eJp6is=;\n\t24:Ul4LZDhRgcMXjd00JLb2pL5T7GOzxvEvyCVKswJyI+2v4r3W4ZgUgcZZqnpTMc3E8AUBzQaoOS9ck8Rys1sgaa9ZvCnZopWFWgc6Yxsh3eg=;\n\t7:g1UEpYI/RNMsrHDSH1n4cnsRd9CL+ZrZ+gUnb/hy2MjiDdNmqP1d0oTuABk9aI2B8xd084tky9ZcGKFuJuaYaRctUhrhHprn23jUCqcPd0WlOmI+zJ7JSinao3K+LTqAtHCRNoS/gNYIAlApNjjCoZCC7/U5hBE3EaEx7v/IpYN0PztHUUT0c/TqwloNQiJrVMJSVyfmpToDPnn52hEbZhfbDiSD9Ul+Sq7IWiEyzpI="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "a414cbb1-aa32-4a53-a70b-08d4fcf12172",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(2017052603199)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:CY4PR03MB2694; ",
        "X-MS-TrafficTypeDiagnostic": "CY4PR03MB2694:",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197)(275809806118684); ",
        "X-Microsoft-Antispam-PRVS": "<CY4PR03MB26948074ADA7468E703DBF37896D0@CY4PR03MB2694.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(2401047)(8121501046)(5005006)(3002001)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(6055026)(6096035)(20161123563025)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123556025)(20161123561025)(20161123559100)(20161123565025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:CY4PR03MB2694; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:CY4PR03MB2694; ",
        "X-Forefront-PRVS": "0432A04947",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "16 Sep 2017 10:53:14.3002\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": "CY4PR03MB2694",
        "Subject": "[dpdk-dev] [PATCH v3 03/27] bus/fslmc: add qbman API to do enqueue\n\twith multiple frames",
        "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": "From: Haiying Wang <Haiying.Wang@nxp.com>\n\nClean it up and update the prototype.\n\nSigned-off-by: Haiying Wang <Haiying.Wang@nxp.com>\nSigned-off-by: Hemant Agrawal <Hemant.Agrawal@nxp.com>\n---\n drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h |  32 ++--\n drivers/bus/fslmc/qbman/qbman_portal.c             | 200 +++++++--------------\n drivers/bus/fslmc/rte_bus_fslmc_version.map        |   3 +-\n drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c        |   2 +-\n drivers/event/dpaa2/dpaa2_eventdev.c               |   2 +-\n drivers/net/dpaa2/dpaa2_rxtx.c                     |   2 +-\n 6 files changed, 83 insertions(+), 158 deletions(-)",
    "diff": "diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h\nindex 23c3d13..fe1cc94 100644\n--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h\n+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h\n@@ -914,19 +914,33 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,\n int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,\n \t\t      const struct qbman_fd *fd);\n /**\n- * qbman_swp_enqueue_multiple_eqdesc() - Enqueue multiple frames with separte\n- * enqueue descriptors.\n+ * qbman_swp_enqueue_multiple() - Enqueue multiple frames with same\n+\t\t\t\t  eq descriptor\n  * @s: the software portal used for enqueue.\n- * @d: the enqueue descriptors\n+ * @d: the enqueue descriptor.\n  * @fd: the frame descriptor to be enqueued.\n  * @num_frames: the number of the frames to be enqueued.\n  *\n  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.\n  */\n-int qbman_swp_enqueue_multiple_eqdesc(struct qbman_swp *s,\n+int qbman_swp_enqueue_multiple(struct qbman_swp *s,\n \t\t\t       const struct qbman_eq_desc *d,\n \t\t\t       const struct qbman_fd *fd,\n \t\t\t       int num_frames);\n+/**\n+ * qbman_swp_enqueue_multiple_desc() - Enqueue multiple frames with\n+ *\t\t\t\t       individual eq descriptor.\n+ * @s: the software portal used for enqueue.\n+ * @d: the enqueue descriptor.\n+ * @fd: the frame descriptor to be enqueued.\n+ * @num_frames: the number of the frames to be enqueued.\n+ *\n+ * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.\n+ */\n+int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,\n+\t\t\t\t    const struct qbman_eq_desc *d,\n+\t\t\t\t    const struct qbman_fd *fd,\n+\t\t\t\t    int num_frames);\n \n /* TODO:\n  * qbman_swp_enqueue_thresh() - Set threshold for EQRI interrupt.\n@@ -1119,16 +1133,6 @@ int qbman_swp_CDAN_disable(struct qbman_swp *s, uint16_t channelid);\n  */\n int qbman_swp_CDAN_set_context_enable(struct qbman_swp *s, uint16_t channelid,\n \t\t\t\t      uint64_t ctx);\n-int qbman_swp_fill_ring(struct qbman_swp *s,\n-\t\t\tconst struct qbman_eq_desc *d,\n-\t\t       const struct qbman_fd *fd,\n-\t\t       uint8_t burst_index);\n-int qbman_swp_flush_ring(struct qbman_swp *s);\n-void qbman_sync(void);\n-int qbman_swp_send_multiple(struct qbman_swp *s,\n-\t\t\t    const struct qbman_eq_desc *d,\n-\t\t\t    const struct qbman_fd *fd,\n-\t\t\t    int frames_to_send);\n \n int qbman_check_command_complete(struct qbman_swp *s,\n \t\t\t\t const struct qbman_result *dq);\ndiff --git a/drivers/bus/fslmc/qbman/qbman_portal.c b/drivers/bus/fslmc/qbman/qbman_portal.c\nindex 97df703..f212829 100644\n--- a/drivers/bus/fslmc/qbman/qbman_portal.c\n+++ b/drivers/bus/fslmc/qbman/qbman_portal.c\n@@ -525,15 +525,26 @@ static int qbman_swp_enqueue_ring_mode(struct qbman_swp *s,\n \treturn 0;\n }\n \n-int qbman_swp_fill_ring(struct qbman_swp *s,\n-\t\t\tconst struct qbman_eq_desc *d,\n-\t\t\tconst struct qbman_fd *fd,\n-\t\t\t__attribute__((unused)) uint8_t burst_index)\n+int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,\n+\t\t      const struct qbman_fd *fd)\n+{\n+\tif (s->sys.eqcr_mode == qman_eqcr_vb_array)\n+\t\treturn qbman_swp_enqueue_array_mode(s, d, fd);\n+\telse    /* Use ring mode by default */\n+\t\treturn qbman_swp_enqueue_ring_mode(s, d, fd);\n+}\n+\n+int qbman_swp_enqueue_multiple(struct qbman_swp *s,\n+\t\t\t       const struct qbman_eq_desc *d,\n+\t\t\t       const struct qbman_fd *fd,\n+\t\t\t       int num_frames)\n {\n \tuint32_t *p;\n \tconst uint32_t *cl = qb_cl(d);\n-\tuint32_t eqcr_ci;\n+\tuint32_t eqcr_ci, eqcr_pi;\n \tuint8_t diff;\n+\tint i, num_enqueued = 0;\n+\tuint64_t addr_cena;\n \n \tif (!s->eqcr.available) {\n \t\teqcr_ci = s->eqcr.ci;\n@@ -543,62 +554,58 @@ int qbman_swp_fill_ring(struct qbman_swp *s,\n \t\t\t\t   eqcr_ci, s->eqcr.ci);\n \t\ts->eqcr.available += diff;\n \t\tif (!diff)\n-\t\t\treturn -EBUSY;\n+\t\t\treturn 0;\n \t}\n-\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n-\t\tQBMAN_CENA_SWP_EQCR((s->eqcr.pi/* +burst_index */) & 7));\n-\tmemcpy(&p[1], &cl[1], 7 * 4);\n-\tmemcpy(&p[8], fd, sizeof(struct qbman_fd));\n-\n-\t/* lwsync(); */\n-\tp[0] = cl[0] | s->eqcr.pi_vb;\n-\n-\ts->eqcr.pi++;\n-\ts->eqcr.pi &= 0xF;\n-\ts->eqcr.available--;\n-\tif (!(s->eqcr.pi & 7))\n-\t\ts->eqcr.pi_vb ^= QB_VALID_BIT;\n-\n-\treturn 0;\n-}\n \n-int qbman_swp_flush_ring(struct qbman_swp *s)\n-{\n-\tvoid *ptr = s->sys.addr_cena;\n+\teqcr_pi = s->eqcr.pi;\n+\tnum_enqueued = (s->eqcr.available < num_frames) ?\n+\t\t\ts->eqcr.available : num_frames;\n+\ts->eqcr.available -= num_enqueued;\n+\t/* Fill in the EQCR ring */\n+\tfor (i = 0; i < num_enqueued; i++) {\n+\t\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n+\t\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7));\n+\t\tmemcpy(&p[1], &cl[1], 28);\n+\t\tmemcpy(&p[8], &fd[i], sizeof(*fd));\n+\t\teqcr_pi++;\n+\t\teqcr_pi &= 0xF;\n+\t}\n \n-\tdcbf((uint64_t)ptr);\n-\tdcbf((uint64_t)ptr + 0x40);\n-\tdcbf((uint64_t)ptr + 0x80);\n-\tdcbf((uint64_t)ptr + 0xc0);\n-\tdcbf((uint64_t)ptr + 0x100);\n-\tdcbf((uint64_t)ptr + 0x140);\n-\tdcbf((uint64_t)ptr + 0x180);\n-\tdcbf((uint64_t)ptr + 0x1c0);\n+\tlwsync();\n \n-\treturn 0;\n-}\n+\t/* Set the verb byte, have to substitute in the valid-bit */\n+\teqcr_pi = s->eqcr.pi;\n+\tfor (i = 0; i < num_enqueued; i++) {\n+\t\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n+\t\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7));\n+\t\tp[0] = cl[0] | s->eqcr.pi_vb;\n+\t\teqcr_pi++;\n+\t\teqcr_pi &= 0xF;\n+\t\tif (!(eqcr_pi & 7))\n+\t\t\ts->eqcr.pi_vb ^= QB_VALID_BIT;\n+\t}\n \n-void qbman_sync(void)\n-{\n-\tlwsync();\n-}\n+\t/* Flush all the cacheline without load/store in between */\n+\teqcr_pi = s->eqcr.pi;\n+\taddr_cena = (uint64_t)s->sys.addr_cena;\n+\tfor (i = 0; i < num_enqueued; i++) {\n+\t\tdcbf((uint64_t *)(addr_cena +\n+\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7)));\n+\t\teqcr_pi++;\n+\t\teqcr_pi &= 0xF;\n+\t}\n+\ts->eqcr.pi = eqcr_pi;\n \n-int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,\n-\t\t      const struct qbman_fd *fd)\n-{\n-\tif (s->sys.eqcr_mode == qman_eqcr_vb_array)\n-\t\treturn qbman_swp_enqueue_array_mode(s, d, fd);\n-\telse    /* Use ring mode by default */\n-\t\treturn qbman_swp_enqueue_ring_mode(s, d, fd);\n+\treturn num_enqueued;\n }\n \n-int qbman_swp_enqueue_multiple_eqdesc(struct qbman_swp *s,\n-\t\t\t       const struct qbman_eq_desc *d,\n-\t\t\t       const struct qbman_fd *fd,\n-\t\t\t       int num_frames)\n+int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,\n+\t\t\t\t    const struct qbman_eq_desc *d,\n+\t\t\t\t    const struct qbman_fd *fd,\n+\t\t\t\t    int num_frames)\n {\n \tuint32_t *p;\n-\tconst uint32_t *cl = qb_cl(d);\n+\tconst uint32_t *cl;\n \tuint32_t eqcr_ci, eqcr_pi;\n \tuint8_t diff;\n \tint i, num_enqueued = 0;\n@@ -623,29 +630,26 @@ int qbman_swp_enqueue_multiple_eqdesc(struct qbman_swp *s,\n \tfor (i = 0; i < num_enqueued; i++) {\n \t\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n \t\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7));\n+\t\tcl = qb_cl(&d[i]);\n \t\tmemcpy(&p[1], &cl[1], 28);\n \t\tmemcpy(&p[8], &fd[i], sizeof(*fd));\n \t\teqcr_pi++;\n \t\teqcr_pi &= 0xF;\n-\t\t/*Pointing to the next enqueue descriptor*/\n-\t\tcl += (sizeof(struct qbman_eq_desc) / sizeof(uint32_t));\n \t}\n \n \tlwsync();\n \n \t/* Set the verb byte, have to substitute in the valid-bit */\n \teqcr_pi = s->eqcr.pi;\n-\tcl = qb_cl(d);\n \tfor (i = 0; i < num_enqueued; i++) {\n \t\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n \t\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7));\n+\t\tcl = qb_cl(&d[i]);\n \t\tp[0] = cl[0] | s->eqcr.pi_vb;\n \t\teqcr_pi++;\n \t\teqcr_pi &= 0xF;\n \t\tif (!(eqcr_pi & 7))\n \t\t\ts->eqcr.pi_vb ^= QB_VALID_BIT;\n-\t\t/*Pointing to the next enqueue descriptor*/\n-\t\tcl += (sizeof(struct qbman_eq_desc) / sizeof(uint32_t));\n \t}\n \n \t/* Flush all the cacheline without load/store in between */\n@@ -1493,87 +1497,3 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx)\n \tdq = qbman_cena_read(&s->sys, QBMAN_CENA_SWP_DQRR(idx));\n \treturn dq;\n }\n-\n-int qbman_swp_send_multiple(struct qbman_swp *s,\n-\t\t\t    const struct qbman_eq_desc *d,\n-\t\t\t    const struct qbman_fd *fd,\n-\t\t\t    int frames_to_send)\n-{\n-\tuint32_t *p;\n-\tconst uint32_t *cl = qb_cl(d);\n-\tuint32_t eqcr_ci;\n-\tuint8_t diff;\n-\tint sent = 0;\n-\tint i;\n-\tint initial_pi = s->eqcr.pi;\n-\tuint64_t start_pointer;\n-\n-\tif (!s->eqcr.available) {\n-\t\teqcr_ci = s->eqcr.ci;\n-\t\ts->eqcr.ci = qbman_cena_read_reg(&s->sys,\n-\t\t\t\t QBMAN_CENA_SWP_EQCR_CI) & 0xF;\n-\t\tdiff = qm_cyc_diff(QBMAN_EQCR_SIZE,\n-\t\t\t\t   eqcr_ci, s->eqcr.ci);\n-\t\tif (!diff)\n-\t\t\tgoto done;\n-\t\ts->eqcr.available += diff;\n-\t}\n-\n-\t/* we are trying to send frames_to_send,\n-\t * if we have enough space in the ring\n-\t */\n-\twhile (s->eqcr.available && frames_to_send--) {\n-\t\tp = qbman_cena_write_start_wo_shadow_fast(&s->sys,\n-\t\t\t\t\tQBMAN_CENA_SWP_EQCR((initial_pi) & 7));\n-\t\t/* Write command (except of first byte) and FD */\n-\t\tmemcpy(&p[1], &cl[1], 7 * 4);\n-\t\tmemcpy(&p[8], &fd[sent], sizeof(struct qbman_fd));\n-\n-\t\tinitial_pi++;\n-\t\tinitial_pi &= 0xF;\n-\t\ts->eqcr.available--;\n-\t\tsent++;\n-\t}\n-\n-done:\n-\tinitial_pi =  s->eqcr.pi;\n-\tlwsync();\n-\n-\t/* in order for flushes to complete faster:\n-\t * we use a following trick: we record all lines in 32 bit word\n-\t */\n-\n-\tinitial_pi =  s->eqcr.pi;\n-\tfor (i = 0; i < sent; i++) {\n-\t\tp = qbman_cena_write_start_wo_shadow_fast(&s->sys,\n-\t\t\t\t\tQBMAN_CENA_SWP_EQCR((initial_pi) & 7));\n-\n-\t\tp[0] = cl[0] | s->eqcr.pi_vb;\n-\t\tinitial_pi++;\n-\t\tinitial_pi &= 0xF;\n-\n-\t\tif (!(initial_pi & 7))\n-\t\t\ts->eqcr.pi_vb ^= QB_VALID_BIT;\n-\t}\n-\n-\tinitial_pi = s->eqcr.pi;\n-\n-\t/* We need  to flush all the lines but without\n-\t * load/store operations between them.\n-\t * We assign start_pointer before we start loop so that\n-\t * in loop we do not read it from memory\n-\t */\n-\tstart_pointer = (uint64_t)s->sys.addr_cena;\n-\tfor (i = 0; i < sent; i++) {\n-\t\tp = (uint32_t *)(start_pointer\n-\t\t\t\t + QBMAN_CENA_SWP_EQCR(initial_pi & 7));\n-\t\tdcbf((uint64_t)p);\n-\t\tinitial_pi++;\n-\t\tinitial_pi &= 0xF;\n-\t}\n-\n-\t/* Update producer index for the next call */\n-\ts->eqcr.pi = initial_pi;\n-\n-\treturn sent;\n-}\ndiff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map\nindex 6ac256d..13fb46a 100644\n--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map\n+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map\n@@ -69,7 +69,8 @@ DPDK_17.08 {\n \tqbman_result_SCN_state_in_mem;\n \tqbman_swp_dqrr_consume;\n \tqbman_swp_dqrr_next;\n-\tqbman_swp_enqueue_multiple_eqdesc;\n+\tqbman_swp_enqueue_multiple;\n+\tqbman_swp_enqueue_multiple_desc;\n \tqbman_swp_interrupt_clear_status;\n \tqbman_swp_push_set;\n \trte_dpaa2_alloc_dpci_dev;\ndiff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\nindex 95c3951..094cf30 100644\n--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n@@ -634,7 +634,7 @@ dpaa2_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,\n \t\t}\n \t\tloop = 0;\n \t\twhile (loop < frames_to_send) {\n-\t\t\tloop += qbman_swp_send_multiple(swp, &eqdesc,\n+\t\t\tloop += qbman_swp_enqueue_multiple(swp, &eqdesc,\n \t\t\t\t\t\t\t&fd_arr[loop],\n \t\t\t\t\t\t\tframes_to_send - loop);\n \t\t}\ndiff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c\nindex cf2d274..81286a8 100644\n--- a/drivers/event/dpaa2/dpaa2_eventdev.c\n+++ b/drivers/event/dpaa2/dpaa2_eventdev.c\n@@ -144,7 +144,7 @@ dpaa2_eventdev_enqueue_burst(void *port, const struct rte_event ev[],\n \t\t}\n \t\tloop = 0;\n \t\twhile (loop < frames_to_send) {\n-\t\t\tloop += qbman_swp_enqueue_multiple_eqdesc(swp,\n+\t\t\tloop += qbman_swp_enqueue_multiple_desc(swp,\n \t\t\t\t\t&eqdesc[loop], &fd_arr[loop],\n \t\t\t\t\tframes_to_send - loop);\n \t\t}\ndiff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c\nindex 3c057a3..4342c73 100644\n--- a/drivers/net/dpaa2/dpaa2_rxtx.c\n+++ b/drivers/net/dpaa2/dpaa2_rxtx.c\n@@ -622,7 +622,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)\n \t\t}\n \t\tloop = 0;\n \t\twhile (loop < frames_to_send) {\n-\t\t\tloop += qbman_swp_send_multiple(swp, &eqdesc,\n+\t\t\tloop += qbman_swp_enqueue_multiple(swp, &eqdesc,\n \t\t\t\t\t&fd_arr[loop], frames_to_send - loop);\n \t\t}\n \n",
    "prefixes": [
        "dpdk-dev",
        "v3",
        "03/27"
    ]
}