get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 40044,
    "url": "http://patches.dpdk.org/api/patches/40044/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1526380346-7386-3-git-send-email-shally.verma@caviumnetworks.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": "<1526380346-7386-3-git-send-email-shally.verma@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1526380346-7386-3-git-send-email-shally.verma@caviumnetworks.com",
    "date": "2018-05-15T10:32:22",
    "name": "[dpdk-dev,v1,2/6] compress/zlib: add device setup PMD ops",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "200b644cee42a487df9b94af6e4849544382e549",
    "submitter": {
        "id": 960,
        "url": "http://patches.dpdk.org/api/people/960/?format=api",
        "name": "Shally Verma",
        "email": "shally.verma@caviumnetworks.com"
    },
    "delegate": {
        "id": 22,
        "url": "http://patches.dpdk.org/api/users/22/?format=api",
        "username": "pdelarag",
        "first_name": "Pablo",
        "last_name": "de Lara Guarch",
        "email": "pablo.de.lara.guarch@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1526380346-7386-3-git-send-email-shally.verma@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/40044/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/40044/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 B90071BA05;\n\tTue, 15 May 2018 12:33:04 +0200 (CEST)",
            "from NAM02-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam02on0061.outbound.protection.outlook.com [104.47.36.61])\n\tby dpdk.org (Postfix) with ESMTP id C88377D08\n\tfor <dev@dpdk.org>; Tue, 15 May 2018 12:33:02 +0200 (CEST)",
            "from hyd1sverma-dt.caveonetworks.com (115.113.156.2) by\n\tSN4PR0701MB3646.namprd07.prod.outlook.com (2603:10b6:803:4d::12) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.755.16;\n\tTue, 15 May 2018 10:32:59 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=d8cE6D4fp0fGNm+AGC0mikFsCg+urXzYZofajM8Ml68=;\n\tb=LgYNn0PyyBTsze1NACh4C2dP0l+QN+t+c2qVU0Buwz70ompHC23cFq2byI2ROyv7zue9YEiO/QtXVVFKrJYW61THWSC3HWQ7WeQC5gSTMbRIXqlGCigZp+bL4YKYDiljg7sH6PpEQGCsAh19C0lwMPeIcwRdiqH4X9KfU5FHEKs=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Shally.Verma@cavium.com; ",
        "From": "Shally Verma <shally.verma@caviumnetworks.com>",
        "To": "pablo.de.lara.guarch@intel.com",
        "Cc": "fiona.trahe@intel.com, dev@dpdk.org, pathreay@caviumnetworks.com,\n\tSunila Sahu <sunila.sahu@caviumnetworks.com>,\n\tAshish Gupta <ashish.gupta@caviumnetworks.com>",
        "Date": "Tue, 15 May 2018 16:02:22 +0530",
        "Message-Id": "<1526380346-7386-3-git-send-email-shally.verma@caviumnetworks.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1526380346-7386-1-git-send-email-shally.verma@caviumnetworks.com>",
        "References": "<1526380346-7386-1-git-send-email-shally.verma@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[115.113.156.2]",
        "X-ClientProxiedBy": "BMXPR01CA0033.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:b00:c::19) To SN4PR0701MB3646.namprd07.prod.outlook.com\n\t(2603:10b6:803:4d::12)",
        "X-MS-PublicTrafficType": "Email",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652020)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(5600026)(2017052603328)(7153060)(7193020);\n\tSRVR:SN4PR0701MB3646; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; SN4PR0701MB3646;\n\t3:8/fARUQQpCHcLqG5Tk6bJjicz7Q8ChlhPMbZQB30AaiLe0CPyt+ZL6ynKNwrs3xWTOxinjkI7qEQ43mfWf5KxkA+D4Dnt4M5WgX36DOZ1CQzcbmr5pSQZnhx/EgdGV2apSogcNvmnPeGVQOrLO5O10E7NdgbUMQTul2pKjkI28X7suJnfdSUqrYbcAyZpV9s6Ck7dG2eTFGTZqsxQr5SMEqzmZvgZoCZudOnMXRenh+6Elr+K7oNV7XzTMCeDcGH;\n\t25:0LxJUaXIWfE3Sq5HEuvDCFgeqVQEShuFUCyyf6px0ZGhvHG/mKCr0reX4xCV1dcGQ95cduwsSfnm2e6p/3wgcT3t4T8SEqwEgg7WOYQQEYUJ9Y/Nupt050kdwhMGlzHb1Lzl3jWiRQ3PVbKT8gCxs1c/Nx7Ar/EZZHy0j4zjk4ZhbwnXOwaUQq5j8gvGEkisQxB8adEcWrxFDCo/nxYpFuatn3p9leB7NWZO/PFPSDPoCDCK/Xvvgzs67N2gn7i42rpFtF+HNliCiPBzYUUGfnfHECTelp4ULf+Fhbf5VKTKt2PQ5v8PWrSLZVrzq2qPR0Zox+rf9nZGoKfFTELfpA==;\n\t31:9aOKep6+3TuoRuMzKrYYs8pFcMXHJX9ypP6FPDXZI8UzHiaoMDwcueeuf0FUlQn5+dkc4z/qTdH5OfH6OYqU1+3hxksImwiLeLP9JPoz+H4ReHHlTBH+xECteB9i15W6r/Qxt9aOYnUKa3zuQnLmepQUZyNRIlpD5HzDF83cqRwHf0CPTfTjixZX1woP4wspSesKq9qBX5xQ1fvgjXPMUKDgkZcARHEwKsH9paoe8e0=",
            "1; SN4PR0701MB3646;\n\t20:vGbRKj2kaGukeWNXJ8A1X/qzNFAUnHMOxMH63ShA4UbS6oDwKxhLE0hw81YjfnomObMcNMlk+l2EJqtXfjFckxA/BqZzmQ9AUXZqN3ECc+Xh8d9kiA9kbANX+2ahnLynqNrK+SzIPN9bXyhyjsOX5OOB0OFvdh9ToYuSwGQGfr1sxq5ZG8+BRQ6M9Qd/Qll4oVm9u2VCMSfNqPEEi8gTgc8InBXwhvlFMN/q4Ngahyn+oo4XWJqWq4E7qwF0Xz1h1dWTAl/NAvzNKnd7rEPa7BzJQ9BiyZn5hUPsVpyEpqgFjFsXXP1bmpGZWhmnRmkrZ0EAkCHnAmzvN+IQ8cMeerUawRaldRX4ao3Yss8idFjaZOq7d+CKMgdihPhftmOYo5H8ohzNDvhAR+J7wDI/YIFLCOrgTenHzlyAcO61iP6wqKseLIGN2238DJqDBW8Fccs+GWfM8HKh3a0UUrKO0zhNeloYUugcYRiVYHAyLCUtA0Pes7PmlRnCaN+ki/4+kxGGP4K+pYqrYP6iENeVc/xl4/38iiEhWMBL3zQ1kmostfWd6F5oWBHyPI48YOkTo/oxAO4ym/4qqG4vAqokEwUWcKXg9KxBoeHcOXAk5+Q=;\n\t4:8SCG3G8wGvctdY/orLIaqfnu90a/lDRVoLHBnNIsCAj59YHgqhB/TU4E++eoyMljly7I9uSn5sgBeiSmJpgKVw7n0miKOjaJmgezRmLL80FjW/TmBh5T7ZidZipSbFu4i36mWRFqL/vl8CYxSefcStBio1L9zF48U5MdZPOWshXx06IymJrJfXgoE6ZOEbytq9f/hMHIz52OxJ7GfEnD41z+r8w8BZLit9Cd9Xr9N2SIRK3bUfz2p84vo5AEW17g0kkgYiTrz5xPt5BAJ4/t+Q==",
            "=?us-ascii?Q?1; SN4PR0701MB3646;\n\t23:D97ilp24s3ymMKsWJXmoDlrtOQEiDr9QzAxxlft?=\n\tROzdXWjCVEnXxyhR0ltlfW3bSln9eQ9KjDuqymHI8zo5eoC69avfU911BlGHH3vL6eOZWEWPZjhoFeuAdcNUvRlsLWXJffylAaRNhC6ZtHsXnNcxjut9MBd/6p2RsH6rjxiHCwNxJnZO4sKXk11fRVXrBgSC0SmuKObOfEOd+GN65EQhbTzSuESc85nW7ftKbQ22UTVo0ACwe71JzRkXm4s1F9ZAU3BiIH+/XIRDVU2EOofJePeTNbCc8UgQyycpdO9+QwMhVIeOwOUL4LTJCPfwepfpRTWeUsf3QQIWeN4EEK2NJR+BK6yWlbOqClhvEwvh5ejXvb47tYO9hP6RaERnIdlV1iLeKYxIoNIo7SWZXiDEd/do20eFi++OyGvOdQ+WafJDaGlu/miOPWvuLzcAAJk/QZFGa0uQQgFUrF+G08hlOKWeb2ntNCFkD8a+fJts/UhVOwsBmWDvMg15zVTmY3tHkepXMIp+AU4Y7L1ffuU6t96mzQMjS1aufikb4ItvuUZRWNq2vzsYZYit4tVFmssgUcAWphNtp8CemgVmo0WoU+PpUd2PrzUsJko609o4c6KpEyTDNhJuaU0Nw0pS2LvOmKp85dhe8z5FIthRyQK1zDNfZg7qIoaZj6Ua+yFkfiqzrvPSJN+8wx0W5m8f4mWloTMFP6YtRae+w5IHHdTe1ajS7PYnVjCwsn9gS+2YApamMn7VkJsHRzpw9FYIdu9Ha2+57rG8NEVo3vBIFOLrZXbm5sDpW8jOvMXPi4KI+qGkeiR+ixvmszSp3eExnMF2u2sfQrPAx8j18RAKpa3+2Tx40QyGdmwpovz/2R65UKkjgkPWViJK5HgZZG+eoR0BYfCzo6eNAjZ+2njucrzJ5dzCCY4T+BUJa6ow37OdwAKAe+8iPr/fUGxnl1HkifWS8H7WAbqnElXqYYS+qYOAHkcICp0lfHs+vB96WhHhFiXAj+TnqMRnmALnbzbhIu/dW0rxX07svx5DOdAEs+uZTld3JyvtJwNf6mYSVeVjsOUHyX7NAL86amRcOsnTEL2XBIGWpyp0wYykzQMTUOnyG+oyT9RzyGCtE93Qxfmc3LlP+tUIBBfa6WrPdM/qrab/nsSJRI76rIyFwYScUYptzPuTFwGoIVnQsTEeqcl9N34rKIwVgPsA/vp7x9DBoPcGENvhFas+1D9g7hECRBdubKTcIjpbYKaf0GXQf/bJ5zYaPoTT51ksNFOgtqVOxULzzfKc2joQhJhEsDwSXCvaGJZHOU/nAtkE36LNwCyXxPDE/USGxkFtf9D0qQW988/vkMKdlj4iPBo6T9WuxjxzMdxWptHm+wUh5KrQ7q27ewQv+kLi6WnzLUKjQGh2h",
            "1; SN4PR0701MB3646;\n\t6:BzGLnBrrF7HMNhYAoAX2DkEb2hcEPpHVDMN/ypmE8ICdngGU8szg2WQY+oqFqtP38fNjYR1ZRcCk2P1k5hDUJ2MMkQ4HevC9PWn2P4iA20axt4xZsU9ilveqmiSkFi5XdOSRM5MQudubnacP4l64AO1n+5tQRyCsdky7W2o+Qm0eaEpl0MX+JnI5e95Qn3sDeFM3yHOBztowwwbi2TSzOcpA7l/61hBlrG5s63u6VvQW+C9AsU98/ahLfmEkt0QtHB6nHQpMxUkrxKe2RVepbTVY6aLgOaC1EAbjwNDlN6xgQJr7KHnRjmspDktcMmO5JlEJ+KF4ZWySal4LumS0ZD77pVhnHogA+njBNimxBhzxMRJw9LAOEeXsRTPBp42TQtPBlTT5TKwekVNdhOlE2BLhtXjJ1KVF1yQjf8jfMnnYeHURbkn7+cHwvBwJMHd18UtbwuntLmncYRl1MKWIzw==;\n\t5:2gPIEJ6Lse0lzUgUzQL4meqgInxJ5HJwVI7KMQknPy/ern13wJ6RSDI+VjNlwEXzEFakE0vZGhKGDH1J73LK6s0WEoba89jt7ro7ey1N7aoKBFm/sYRLdUUpGQ7R5neAeuV0g/6MOyaEau69Me2CWXqZ+J1IlY8S57H2JmMDbo8=;\n\t24:smb8DN+RVXVgitwIU+RPlpMeS+3R9HapAbEW3H194hpbZr6+ZdUw7ltqtLxPdvpy0OhT1I/2c0Gn+QNn2mItvROAgdBl73xwEqfrJcJI2d0=",
            "1; SN4PR0701MB3646;\n\t7:vGXMVyKdBsOcbS+4fywhxK+exDxZ7MFDtLH+RYSS+7j8C3QVFd8vlSQxhGJG6u+oU+8J5OBFyVcIEDWIRudqo6re0Yd7VyJ9bpGSnvjIT+gQiRo2t/pya/CIubdk0mF+ciKrvON2N6EfA72sJ1AqIDTpDIb5MU6GMyWPTQ7lwXIQvhK3xiuMcK3CqS4YPaMVKj/qjk3TZ3UASuESabJizdZ2qDBuv0+seRAaES9d6EZeU1o3DBRpK9tnWA5ODMAe"
        ],
        "X-MS-TrafficTypeDiagnostic": "SN4PR0701MB3646:",
        "X-Microsoft-Antispam-PRVS": "<SN4PR0701MB3646388DE0F200AC0B6FF0A2F0930@SN4PR0701MB3646.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231254)(944501410)(52105095)(93006095)(3002001)(10201501046)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011);\n\tSRVR:SN4PR0701MB3646; BCL:0; PCL:0; RULEID:; SRVR:SN4PR0701MB3646; ",
        "X-Forefront-PRVS": "0673F5BE31",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(39380400002)(39860400002)(376002)(366004)(396003)(346002)(189003)(199004)(478600001)(486006)(55236004)(44832011)(16586007)(54906003)(316002)(47776003)(2906002)(59450400001)(6506007)(386003)(8936002)(66066001)(6486002)(72206003)(6116002)(3846002)(25786009)(97736004)(5660300001)(42882007)(50226002)(36756003)(8676002)(48376002)(53416004)(52116002)(107886003)(26005)(50466002)(2616005)(81156014)(105586002)(81166006)(2361001)(53936002)(6666003)(6916009)(4326008)(16526019)(68736007)(476003)(446003)(956004)(106356001)(76176011)(186003)(7736002)(2351001)(69596002)(6512007)(305945005)(51416003)(11346002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:SN4PR0701MB3646;\n\tH:hyd1sverma-dt.caveonetworks.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; MX:1; A:1; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "DSoR0xlb+wfK8e87qQdRNCzf0uk2TCRnz9n1jDqE1RNggBHUD8cw2dWFpszbH/8n+5aDORhkV16tCZbE4bah6C7uSLV1DRSvEv+bxvOeRk4Gnnoxn3d0DlLD7o6uHFSqcQm5D0zegXsHZly81AsbE7F3Rtxu/EZ9GhQqURbYrUTwRMHT2PD0f2vDkXraL/x9",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Office365-Filtering-Correlation-Id": "c8e4fc17-087b-4f23-a211-08d5ba4f3bff",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "15 May 2018 10:32:59.2397\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "c8e4fc17-087b-4f23-a211-08d5ba4f3bff",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SN4PR0701MB3646",
        "Subject": "[dpdk-dev] [PATCH v1 2/6] compress/zlib: add device setup PMD ops",
        "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://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": "<https://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": "Implement device configure and PMD ops\n\nSigned-off-by: Sunila Sahu <sunila.sahu@caviumnetworks.com>\nSigned-off-by: Shally Verma <shally.verma@caviumnetworks.com>\nSigned-off-by: Ashish Gupta <ashish.gupta@caviumnetworks.com>\n---\n drivers/compress/zlib/zlib_pmd_ops.c     | 238 +++++++++++++++++++++++++++++++\n drivers/compress/zlib/zlib_pmd_private.h |  77 ++++++++++\n 2 files changed, 315 insertions(+)",
    "diff": "diff --git a/drivers/compress/zlib/zlib_pmd_ops.c b/drivers/compress/zlib/zlib_pmd_ops.c\nnew file mode 100644\nindex 0000000..0bd42f3\n--- /dev/null\n+++ b/drivers/compress/zlib/zlib_pmd_ops.c\n@@ -0,0 +1,238 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018 Cavium Networks\n+ */\n+\n+#include <string.h>\n+\n+#include <rte_common.h>\n+#include <rte_malloc.h>\n+#include <rte_compressdev_pmd.h>\n+\n+#include \"zlib_pmd_private.h\"\n+\n+static const struct rte_compressdev_capabilities zlib_pmd_capabilities[] = {\n+\t{   /* Deflate */\n+\t\t.algo = RTE_COMP_ALGO_DEFLATE,\n+\t\t.comp_feature_flags = RTE_COMP_FF_SHAREABLE_PRIV_XFORM,\n+\t\t.window_size = {\n+\t\t\t.min = 8,\n+\t\t\t.max = 15,\n+\t\t\t.increment = 2\n+\t\t},\n+\t},\n+\n+\tRTE_COMP_END_OF_CAPABILITIES_LIST()\n+\n+};\n+\n+/** Configure device */\n+static int\n+zlib_pmd_config(struct rte_compressdev *dev,\n+\t\tstruct rte_compressdev_config *config)\n+{\n+\tstruct rte_mempool *mp;\n+\n+\tstruct zlib_private *internals = dev->data->dev_private;\n+\tsnprintf(internals->mp_name, RTE_MEMPOOL_NAMESIZE,\n+\t\t\t\"stream_mp_%u\", dev->data->dev_id);\n+\tmp = rte_mempool_create(internals->mp_name,\n+\t\t\tconfig->max_nb_priv_xforms + config->max_nb_streams,\n+\t\t\tsizeof(struct zlib_priv_xform),\n+\t\t\t0, 0, NULL, NULL, NULL,\n+\t\t\tNULL, config->socket_id,\n+\t\t\t0);\n+\tif (mp == NULL) {\n+\t\tZLIB_LOG_ERR(\"Cannot create private xform pool on socket %d\\n\",\n+\t\t\t\tconfig->socket_id);\n+\t\treturn -ENOMEM;\n+\t}\n+\treturn 0;\n+}\n+\n+/** Start device */\n+static int\n+zlib_pmd_start(__rte_unused struct rte_compressdev *dev)\n+{\n+\treturn 0;\n+}\n+\n+/** Stop device */\n+static void\n+zlib_pmd_stop(struct rte_compressdev *dev)\n+{\n+\tstruct zlib_private *internals = dev->data->dev_private;\n+\tstruct rte_mempool *mp = rte_mempool_lookup(internals->mp_name);\n+\trte_mempool_free(mp);\n+}\n+\n+/** Close device */\n+static int\n+zlib_pmd_close(__rte_unused struct rte_compressdev *dev)\n+{\n+\treturn 0;\n+}\n+\n+/** Get device statistics */\n+static void\n+zlib_pmd_stats_get(struct rte_compressdev *dev,\n+\t\tstruct rte_compressdev_stats *stats)\n+{\n+\tint qp_id;\n+\n+\tfor (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {\n+\t\tstruct zlib_qp *qp = dev->data->queue_pairs[qp_id];\n+\n+\t\tstats->enqueued_count += qp->qp_stats.enqueued_count;\n+\t\tstats->dequeued_count += qp->qp_stats.dequeued_count;\n+\n+\t\tstats->enqueue_err_count += qp->qp_stats.enqueue_err_count;\n+\t\tstats->dequeue_err_count += qp->qp_stats.dequeue_err_count;\n+\t}\n+}\n+\n+/** Reset device statistics */\n+static void\n+zlib_pmd_stats_reset(struct rte_compressdev *dev)\n+{\n+\tint qp_id;\n+\n+\tfor (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {\n+\t\tstruct zlib_qp *qp = dev->data->queue_pairs[qp_id];\n+\n+\t\tmemset(&qp->qp_stats, 0, sizeof(qp->qp_stats));\n+\t}\n+}\n+\n+/** Get device info */\n+static void\n+zlib_pmd_info_get(struct rte_compressdev *dev,\n+\t\tstruct rte_compressdev_info *dev_info)\n+{\n+\tstruct zlib_private *internals = dev->data->dev_private;\n+\n+\tif (dev_info != NULL) {\n+\t\tdev_info->driver_name = dev->device->name;\n+\t\tdev_info->feature_flags = dev->feature_flags;\n+\t\tdev_info->capabilities = zlib_pmd_capabilities;\n+\t\tdev_info->max_nb_queue_pairs = internals->max_nb_queue_pairs;\n+\t}\n+}\n+\n+/** Release queue pair */\n+static int\n+zlib_pmd_qp_release(struct rte_compressdev *dev, uint16_t qp_id)\n+{\n+\tstruct zlib_qp *qp = dev->data->queue_pairs[qp_id];\n+\tstruct rte_ring *r = NULL;\n+\n+\tif (qp != NULL) {\n+\t\tr = rte_ring_lookup(qp->name);\n+\t\tif (r)\n+\t\t\trte_ring_free(r);\n+\t\trte_free(qp);\n+\t\tdev->data->queue_pairs[qp_id] = NULL;\n+\t}\n+\treturn 0;\n+}\n+\n+/** set a unique name for the queue pair based on it's name, dev_id and qp_id */\n+static int\n+zlib_pmd_qp_set_unique_name(struct rte_compressdev *dev,\n+\t\tstruct zlib_qp *qp)\n+{\n+\tunsigned int n = snprintf(qp->name, sizeof(qp->name),\n+\t\t\t\t\"zlib_pmd_%u_qp_%u\",\n+\t\t\t\tdev->data->dev_id, qp->id);\n+\n+\tif (n >= sizeof(qp->name))\n+\t\treturn -1;\n+\n+\treturn 0;\n+}\n+\n+/** Create a ring to place process packets on */\n+static struct rte_ring *\n+zlib_pmd_qp_create_processed_pkts_ring(struct zlib_qp *qp,\n+\t\tunsigned int ring_size, int socket_id)\n+{\n+\tstruct rte_ring *r;\n+\n+\tr = rte_ring_lookup(qp->name);\n+\tif (r) {\n+\t\tif (rte_ring_get_size(r) >= ring_size) {\n+\t\t\tZLIB_LOG_INFO(\"Reusing existing ring %s for processed\"\n+\t\t\t\t\t\" packets\", qp->name);\n+\t\t\treturn r;\n+\t\t}\n+\n+\t\tZLIB_LOG_ERR(\"Unable to reuse existing ring %s for processed\"\n+\t\t\t\t\" packets\", qp->name);\n+\t\treturn NULL;\n+\t}\n+\n+\treturn rte_ring_create(qp->name, ring_size, socket_id,\n+\t\t\t\t\t\tRING_F_EXACT_SZ);\n+}\n+\n+/** Setup a queue pair */\n+static int\n+zlib_pmd_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,\n+\t\tuint32_t max_inflight_ops, int socket_id)\n+{\n+\tstruct zlib_qp *qp = NULL;\n+\n+\t/* Free memory prior to re-allocation if needed. */\n+\tif (dev->data->queue_pairs[qp_id] != NULL)\n+\t\tzlib_pmd_qp_release(dev, qp_id);\n+\n+\t/* Allocate the queue pair data structure. */\n+\tqp = rte_zmalloc_socket(\"ZLIB PMD Queue Pair\", sizeof(*qp),\n+\t\t\t\t\tRTE_CACHE_LINE_SIZE, socket_id);\n+\tif (qp == NULL)\n+\t\treturn (-ENOMEM);\n+\n+\tqp->id = qp_id;\n+\tdev->data->queue_pairs[qp_id] = qp;\n+\n+\tif (zlib_pmd_qp_set_unique_name(dev, qp))\n+\t\tgoto qp_setup_cleanup;\n+\n+\tqp->processed_pkts = zlib_pmd_qp_create_processed_pkts_ring(qp,\n+\t\t\tmax_inflight_ops, socket_id);\n+\tif (qp->processed_pkts == NULL)\n+\t\tgoto qp_setup_cleanup;\n+\n+\tmemset(&qp->qp_stats, 0, sizeof(qp->qp_stats));\n+\treturn 0;\n+\n+qp_setup_cleanup:\n+\tif (qp) {\n+\t\trte_free(qp);\n+\t\tqp = NULL;\n+\t}\n+\treturn -1;\n+}\n+\n+struct rte_compressdev_ops zlib_pmd_ops = {\n+\t\t.dev_configure\t\t= zlib_pmd_config,\n+\t\t.dev_start\t\t= zlib_pmd_start,\n+\t\t.dev_stop\t\t= zlib_pmd_stop,\n+\t\t.dev_close\t\t= zlib_pmd_close,\n+\n+\t\t.stats_get\t\t= zlib_pmd_stats_get,\n+\t\t.stats_reset\t\t= zlib_pmd_stats_reset,\n+\n+\t\t.dev_infos_get\t\t= zlib_pmd_info_get,\n+\n+\t\t/* TODO:Check if no q-pair count needed*/\n+\t\t.queue_pair_setup\t= zlib_pmd_qp_setup,\n+\t\t.queue_pair_release\t= zlib_pmd_qp_release,\n+\n+\t\t.private_xform_create\t= NULL,\n+\t\t.private_xform_free\t= NULL,\n+\n+\t\t.stream_create\t= NULL,\n+\t\t.stream_free\t= NULL\n+};\n+\n+struct rte_compressdev_ops *rte_zlib_pmd_ops = &zlib_pmd_ops;\ndiff --git a/drivers/compress/zlib/zlib_pmd_private.h b/drivers/compress/zlib/zlib_pmd_private.h\nnew file mode 100644\nindex 0000000..d29dc59\n--- /dev/null\n+++ b/drivers/compress/zlib/zlib_pmd_private.h\n@@ -0,0 +1,77 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2017-2018 Cavium Networks\n+ */\n+\n+#ifndef _RTE_ZLIB_PMD_PRIVATE_H_\n+#define _RTE_ZLIB_PMD_PRIVATE_H_\n+\n+#include <zlib.h>\n+#include <rte_comp.h>\n+#include <rte_compressdev.h>\n+#include <rte_compressdev_pmd.h>\n+\n+#define COMPRESSDEV_NAME_ZLIB_PMD\tcompress_zlib\n+/**< ZLIB PMD device name */\n+\n+#define ZLIB_PMD_MAX_NB_QUEUE_PAIRS\t1\n+/**< ZLIB PMD specified queue pairs */\n+\n+#define DEF_MEM_LEVEL\t\t\t8\n+\n+int zlib_logtype_driver;\n+#define ZLIB_LOG(level, fmt, args...) \\\n+\trte_log(RTE_LOG_ ## level, zlib_logtype_driver, \"%s(): \"fmt \"\\n\", \\\n+\t\t\t__func__, ##args)\n+\n+#define ZLIB_LOG_INFO(fmt, args...) \\\n+\tZLIB_LOG(INFO, fmt, ## args)\n+#define ZLIB_LOG_ERR(fmt, args...) \\\n+\tZLIB_LOG(ERR, fmt, ## args)\n+#define ZLIB_LOG_WARN(fmt, args...) \\\n+\tZLIB_LOG(WARNING, fmt, ## args)\n+\n+struct zlib_private {\n+\tuint32_t max_nb_queue_pairs;\n+\tchar mp_name[RTE_MEMPOOL_NAMESIZE];\n+};\n+\n+struct zlib_qp {\n+\tstruct rte_ring *processed_pkts;\n+\t/**< Ring for placing process packets */\n+\tstruct rte_compressdev_stats qp_stats;\n+\t/**< Queue pair statistics */\n+\tuint16_t id;\n+\t/**< Queue Pair Identifier */\n+\tchar name[RTE_COMPRESSDEV_NAME_MAX_LEN];\n+\t/**< Unique Queue Pair Name */\n+} __rte_cache_aligned;\n+\n+/* Algorithm handler function prototype */\n+typedef void (*comp_func_t)(struct rte_comp_op *op, z_stream *strm);\n+\n+typedef int (*comp_free_t)(z_stream *strm);\n+\n+/** ZLIB Stream structure */\n+struct zlib_stream {\n+\tz_stream strm;\n+\t/**< zlib stream structure */\n+\tcomp_func_t comp;\n+\t/**< Operation (compression/decompression) */\n+\tcomp_free_t free;\n+\t/**< Free Operation (compression/decompression) */\n+} __rte_cache_aligned;\n+\n+/** ZLIB private xform structure */\n+struct zlib_priv_xform {\n+\tstruct zlib_stream stream;\n+} __rte_cache_aligned;\n+\n+/** Set ZLIB compression private-xform/Stream parameters */\n+extern int\n+zlib_set_stream_parameters(const struct rte_comp_xform *xform,\n+\tstruct zlib_stream *stream);\n+\n+/** Device specific operations function pointer structure */\n+extern struct rte_compressdev_ops *rte_zlib_pmd_ops;\n+\n+#endif /* _RTE_ZLIB_PMD_PRIVATE_H_ */\n",
    "prefixes": [
        "dpdk-dev",
        "v1",
        "2/6"
    ]
}