get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 42111,
    "url": "http://patchwork.dpdk.org/api/patches/42111/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/1530550477-22444-5-git-send-email-shally.verma@caviumnetworks.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<1530550477-22444-5-git-send-email-shally.verma@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1530550477-22444-5-git-send-email-shally.verma@caviumnetworks.com",
    "date": "2018-07-02T16:54:35",
    "name": "[v2,4/6] compress/octeontx: add ops enq deq apis",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "7ec80e4e3be3577968c1b9a0eb714b24b91f9bfd",
    "submitter": {
        "id": 960,
        "url": "http://patchwork.dpdk.org/api/people/960/?format=api",
        "name": "Shally Verma",
        "email": "shally.verma@caviumnetworks.com"
    },
    "delegate": {
        "id": 22,
        "url": "http://patchwork.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://patchwork.dpdk.org/project/dpdk/patch/1530550477-22444-5-git-send-email-shally.verma@caviumnetworks.com/mbox/",
    "series": [
        {
            "id": 361,
            "url": "http://patchwork.dpdk.org/api/series/361/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=361",
            "date": "2018-07-02T16:54:31",
            "name": "compress: add Octeontx ZIP compression PMD",
            "version": 2,
            "mbox": "http://patchwork.dpdk.org/series/361/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/42111/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/42111/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 864CB1B55A;\n\tMon,  2 Jul 2018 18:56:09 +0200 (CEST)",
            "from NAM03-CO1-obe.outbound.protection.outlook.com\n\t(mail-co1nam03on0087.outbound.protection.outlook.com [104.47.40.87])\n\tby dpdk.org (Postfix) with ESMTP id 3F6FF1B55A\n\tfor <dev@dpdk.org>; Mon,  2 Jul 2018 18:56:08 +0200 (CEST)",
            "from hyd1sverma-dt.caveonetworks.com (115.113.156.2) by\n\tMWHPR0701MB3644.namprd07.prod.outlook.com (2603:10b6:301:7d::37) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.906.20;\n\tMon, 2 Jul 2018 16:55: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:X-MS-Exchange-SenderADCheck;\n\tbh=m6gsSnzz9B1cnabXVSf7BxPeVES7eA3aWSaj+r3UCJU=;\n\tb=fhmbR5x80VbKkGzeNMTviAN8Jg5Ca0R7i5q6vly/E2GbucvZVG4Pq2NglwyXqBja+O8SIW0KxVVwAnG4bQ9vB1JdMRcdjJFX5J1U6TRwqzqW9RYcBLw4+coSUnWVFofrRlV80hfZ/c3m1euu/UPWXIltqVLQYxadnNeawrjZqGI=",
        "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": "dev@dpdk.org, pathreya@caviumnetworks.com, mchalla@caviumnetworks.com,\n\tAshish Gupta <Ashish.Gupta@caviumnetworks.com>,\n\tAshish Gupta <ashish.gupta@caviumnetworks.com>,\n\tSunila Sahu <sunila.sahu@caviumnetworks.com>",
        "Date": "Mon,  2 Jul 2018 22:24:35 +0530",
        "Message-Id": "<1530550477-22444-5-git-send-email-shally.verma@caviumnetworks.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1530550477-22444-1-git-send-email-shally.verma@caviumnetworks.com>",
        "References": "<1530550477-22444-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": "MAXPR0101CA0007.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:a00:c::17) To MWHPR0701MB3644.namprd07.prod.outlook.com\n\t(2603:10b6:301:7d::37)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "8745f7aa-11f2-49df-97fb-08d5e03cb3d9",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989117)(5600053)(711020)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020);\n\tSRVR:MWHPR0701MB3644; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; MWHPR0701MB3644;\n\t3:weE3rhS7l8EVpHCAsoIDOhoTJYd3+rq483vwgTBFRX+0J/xN56d9MQvtlrP9WiCCKPviJo5NvP7gCag3l+YYRy4b8GjGEkY20QjNV7oau2aHizrv7p/5hv7bRFo32eUerZuDRp9FKo3dMWv7EZMvEOchJNDWynNIUs/2tQ1bXkU2zWYAVAbw/VF7F6ebJNsmtHJS2LKU29UTe6PGh5XgF+aIT8JN3LG/OSWTdZ2PtcQaiySOl17TArVb/ty8sNEf;\n\t25:P8Ae/0TKFV1FZA5KYzNdaD1UcbOFvsflpFKzZMGpTDF2GizRbsYb/gGzK74SdFpMx4bdCpxb9FSIIjEzXmBvGWgxEU+0qBiCrJD+TPnrOuRPoXd3EC7CMHss6mnu64modBTUkHCDAX7khCV3x+141ZZNDevI2Y+vu+uO7mXDXS0ghH/0+ArYJcwgD7QZw3pOdfpyuoHnJASsgZgIjuobCCj+FcWq4nMQFmJcAM7hK2CRY8Xoksv+xgLXJ732bqLoHoKPg/HSh+k7JyoAORE5y1o2KQNxurN6o/LZRQzCtDyOZe/I6gSMK5cL9YG7BQwkJrSE0c4uEs/fKSJ2FO4CGQ==;\n\t31:mVr7uImO9uCx2XlMjtHW9wMuTO8wrtlMhZNrfgcSSycjUSTYuD4j8bytEij4gejaK+q0VbW3KOGK0pL6kUNylVrevLnfPm/pQiIGefXZFJfjEKFkK8UPN61GUHW+5V8PpRnI9t6UHDR3FGsovCd9vzsRaRqKZdlQKe3nrKIm6vZKfzHXisMbNWGZ2GV139aEq7UdafFFNfMEd89T5Qgupfom8Y3mem1haAER/G2qMbU=",
            "1; MWHPR0701MB3644;\n\t20:HA4ThxUwtPHq2Vx1yQMEvAMYkovGPYDcth5VBmL90C/BS+VNqg7inGDFj5AFQWglXS+Hdq9CaOTMnLmlVOQEuI1d8VWHnRHxG4vUwxURO5QIut6Px/4NyzGEcHBV2/cDO6bHmD5KgU/FWsbZcTMY58bX4qR/YwJxLvaJEfatioOoZ1X/vz5ecNNC9r7UZu3kpgu8E5oy9S4auNnv46xNK2IDY6OSUAKerHuOItaB2eMjFGGATGdv6zUato+zHZNEUwP9erncvLMUMPPbDR1VAs+0kBsd8G/T56ZsWenGI1exUID6XxACVCZ+4FxoNZlpgocNjFEOr9biznYQPT80C/W8+BSiZ5DQb2TVl57u3cio9GElTgEraxjHJeJK6MEgWA48Ak4SELvsgBvpmu3kPk5fx84JAyIPy91tHja3sEooFVrT+OcUPCQbSuvDYlM0g7gUqtg4yyb/0Fmj0bKSmXzx8HKuW7vi+GjxTkBxdTcNCNq99rAqe483cHJlox1SAXM2iEWAheCP484v8Jv4bOfVpuv4JQ4iU5JvT9WeUkHONsfmzxXMc13f1bQiMjtdYHH02QXvrVyeSkNLw+O0YteGRtIAZgBsQVZqbT2/0U8=;\n\t4:nDF2qXZ/2ngDUjv4qr4H9ExNmAfsrzZGkUU4ARr7VNpE+lBPr+kDv0RwH4cqwSzg7w6Ttdn6pEpGvNJOSfHKf7+b5Ro0HYLOjksmvS9eMexA07GE3F76KJp8tY3StMKCvKNcPy1rf3Gg7iwklXtkgmMxgDpMbqACwRVnFbXrf+0l2tw2vnZQe0W6eMqHs1sb5p86PvGERdRSYpBS8ip95e2h20gLLPXXHiO5pugSTZQH/H7pe8i5jy414Qt4SZgUOMbO5P5JUExNk+D69jMCbg==",
            "=?us-ascii?Q?1; MWHPR0701MB3644;\n\t23:D2L4gPe7Vi9diHwfteL+KjQmrr3ZT6Myn1AmntM?=\n\tRkKrYa9uIrgweCTFc1tLERpF9Ht15YIaJdn7XeXkmp7IWd2fi8TC8RQU0x0OY7gqwGmq+Zqd+lgdBNrkoA5Zcua3jtO4I4vG+IrDbHL7pI8koaiWHdnduXl8EYJE+dao9vr2I6iuMBHjoqhpRkTAm8ZAwqHEr16kk9gzLO45xF+lfQ1/jJ9v2+7n2VHX/ReaZYKRbSVxcKqsqlMSCSqm/kzqUzQITdQUM7JjLU+43b8x0OeZH7LrzLtiInyBSQ12KcNYgD23S5xFWeyAa4/nS4OfqmTdlwE95NamciKjYQFODbHgC0MdDkFnrgafrA6op1RO9tECmxw+bXsLH9LLD5UYDehraF/EpZSZgnBa3cdqpSQxeeDKenHEkplHiIUVNSdvaafyQ4PKYQBCWMFdxw2nQZ9mDTzNyxFLsU6pXeKmCXkepmhwh4eYtShUtnNsLCm+HZm6bnJfLq/dk7XDOC7uGgV47vgspxk+ulkggnXBOidkwVff210GZ1kH5QjE2Q5kwgQTVETFJUrMJMfEPzZEhNJGYtfEfgSNasr41CboR17Ozuv/dHTwMeSZJghn31I8MZlC9t7WUaL6xt5ZcvOPaxohYwMTR0lWTxjOebR7+BJJux1vS2Rx9GkXfb9xPhFOXlMxUggLoM69+nJOk6tENVwC7ioeuSwZYhwAh/dxqIuuktlV7IrJGmWtjpTklpz8/hC6DZH4Loy5lUUrvK3XhXg5cFVKAYVumUOrvsmzPSj31jqSKKSc6TbfEPSlZ65ZssCowf35iZgL3LZgGd8ZqTyq8VPuORw4uMaBhxzc/x8/XGGRA8YHITemUkYG1qzEwH1zfIgRmMOOTVZSCQZgo7+01DdzM502365zMFWXqEcO9QnrsL+/xciJP49IBX0650hbzy0/rGFYVZxngiLFIxccE/mpVxLQKogrgqH56/GbkfduZRVkkuvNbc91qYURDGqtdR2N4iNKiUy5W2/UIGxvh3+2on3Cb7L6IwjaObRcnBOKPSYR3qp9iQxtiXgaLTh+E+42qtzaMulI2KYxIlbR7wfEqVUxaUv5rh3AAgGv+6zJE/kMGI6VLDovKA9ygZPr4exNibNKL/NH9cBWwZioNZ4xIjv5ZBszBvDLZTII+PqXq+Pt4uwdUj06llouVhQeGOAb+ak5DaCtSXzGV5Ej++DQ9VuYapgh9g2UInewHabXvkTVZ2GNJmTQ88gbkAA96oNThhv31BzT8PtZfHlgBXhg07VUfQP72qun1Q+Bjjd7aP45EdhZS2ajsdK5w8Ig0/9jpK0WiY018RzwCxMNobU7Dvu1ycDtBZCmmztgjUUvkNqr1wJeNi3EYXSNcDKSBEHt7UA6TIdO3imSr",
            "1; MWHPR0701MB3644;\n\t6:eS735T7bOkSsMMMaE1CrfkC+t+hji0tinvjNmSA03WFwZke/66MUrFE7wqfj9HpjFG8OjlzT3cxnKjjixvkjec5G+AlVKUxxnIAgnmYd8ccpV0Wz9PaEu+gzWrbjcLB4wABzdsk23ESFjx9g1KxuQCd6JnW36v15evrvRYnybXTarI1g6MnFdr13N+FjzwCN1Vnas1vaU83pbA5pC8AJei7pAQwn3/gmU1ccHjxOQBRBwTIXI+3eQZ01q3PpHp68vVxW4OoTUW+5xmuUh8FNynSPD4NJgrJua1oS9RER9MIM4uTn/Vpx7OF/qtVE0vfjYg93ARPQAhNiIHZIxUE2twxbOtCvgaHk08C5n3pdh5VEHsuyHKOuakSpN4q1uA2QJqFqOekndFtlGmPd1H5/EGmMCt4wsZ1XbME+fsGhxxyxqLyehn/FLKm4e1XoQv2R/A+INUlQUNs9Dsazb0ZLFw==;\n\t5:PLOiIh2LptCWTlG86BQOeSDkHcHrwAkaXwlwM+Fh9x5XwVOX9ZDK45I/FrPS2cisZH/odSyX6gKpyc58ioYiQuOOO5I3LeMTqrsVu6p3XVVbPj2Ozs9QDPfoFdVt1rFIrmio3iGqhP98oGQXrpcwlEJ8fo7gceDlGMgudyQwrd0=;\n\t24:Q9OmSnxxEpS4u0RHlrzN+ZJBIoWWow8LnrbTH4AqxnYdZoSMmHPWfgEWrrb1miOrZUBiCveTpdPr2Ck/Yf3KCVuhE8GXE9DD7JbnX8/Txcg=",
            "1; MWHPR0701MB3644;\n\t7:zJFncf7mRushsqXFuMDOMvySUUPvkHVmWw/Rw6OQVsxNsBs9a+houBfxET7sXkGJVKZmUcnkTjhdf8eXefpd387Vk9HmOB6TJDprhURdZFkCqtPEpYWEYoGNDDsKWvajxPSamvyQDtSxHcVbz75BNkfbbIOlC/Pcq0LwuG+hBWvghsnHpjHMvDz9EwdiKNxfe31TMQsXL+veev/T/MkbOaj86nsseF9KSecW0rVzxPiA6ZGsg9ORuJ5y1EWRxI1D"
        ],
        "X-MS-TrafficTypeDiagnostic": "MWHPR0701MB3644:",
        "X-Microsoft-Antispam-PRVS": "<MWHPR0701MB3644BFE0DC44E24D00F5FA89F0430@MWHPR0701MB3644.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)(8121501046)(5005006)(93006095)(10201501046)(3002001)(3231254)(944501410)(52105095)(149027)(150027)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123562045)(6072148)(201708071742011)(7699016);\n\tSRVR:MWHPR0701MB3644; BCL:0; PCL:0; RULEID:; SRVR:MWHPR0701MB3644; ",
        "X-Forefront-PRVS": "07215D0470",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(366004)(396003)(136003)(39860400002)(346002)(376002)(189003)(199004)(6506007)(25786009)(55236004)(107886003)(3846002)(6116002)(16586007)(2906002)(14444005)(186003)(51416003)(52116002)(16526019)(76176011)(4326008)(6486002)(105586002)(386003)(36756003)(6512007)(2351001)(42882007)(54906003)(69596002)(72206003)(2361001)(53936002)(26005)(48376002)(50466002)(316002)(68736007)(478600001)(6916009)(476003)(81166006)(66066001)(81156014)(8936002)(575784001)(97736004)(8676002)(47776003)(446003)(11346002)(106356001)(50226002)(2616005)(956004)(6666003)(44832011)(53416004)(486006)(7736002)(305945005)(5660300001);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR0701MB3644;\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": "8Kq0CPmvjHvjtHWNVd+yxpiNneNdSvhOGUpaCRUxOOu6sUJVhLNx8WZwk2ZvS5i7Vn4i1WI3Foyv6o6lp6g381TwSU+cisKJJbX1WLYvnI9+Z4Lvn8Vn4B9wqR/DirPO8hB0CErPxJlD/oiGV5RKUOVIYbtjmCwLFdtgFpzlMsVeeYUyx/pua+UwutfA01K71CR89U27hVF3QHVfvHYdYgEkj/KzqVEvoHb2vBGTAUCoDFTAQiAtkBI6RtzhcWWV+ix4Xrf7eJhYV/jEgUP/WaguTRThvum7eHP0oBRmBA7PgBqGXxFJ527YMApyBvB48MbUo4LcixJZtj3jG2GY+r6oNYr1NVX//iTz9c6uM6s=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "02 Jul 2018 16:55:59.2520\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "8745f7aa-11f2-49df-97fb-08d5e03cb3d9",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MWHPR0701MB3644",
        "Subject": "[dpdk-dev] [PATCH v2 4/6] compress/octeontx: add ops enq deq apis",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Ashish Gupta <Ashish.Gupta@caviumnetworks.com>\n\nimplement enqueue and dequeue apis\n\nSigned-off-by: Ashish Gupta <ashish.gupta@caviumnetworks.com>\nSigned-off-by: Shally Verma <shally.verma@caviumnetworks.com>\nSigned-off-by: Sunila Sahu <sunila.sahu@caviumnetworks.com>\n---\n drivers/compress/octeontx/zip_pmd.c | 114 ++++++++++++++++++++++++\n drivers/compress/octeontx/zipvf.c   |  49 +++++++++++\n drivers/compress/octeontx/zipvf.h   | 169 ++++++++++++++++++++++++++++++++++++\n 3 files changed, 332 insertions(+)",
    "diff": "diff --git a/drivers/compress/octeontx/zip_pmd.c b/drivers/compress/octeontx/zip_pmd.c\nindex c8feb96bc..4a0eea41a 100644\n--- a/drivers/compress/octeontx/zip_pmd.c\n+++ b/drivers/compress/octeontx/zip_pmd.c\n@@ -25,6 +25,67 @@ static const struct rte_compressdev_capabilities\n \tRTE_COMP_END_OF_CAPABILITIES_LIST()\n };\n \n+/*\n+ * Reset session to default state for next set of stateless operation\n+ */\n+static inline void\n+reset_stream(struct zip_stream *z_stream)\n+{\n+\tunion zip_inst_s *inst = (union zip_inst_s *)(z_stream->inst);\n+\n+\tinst->s.bf = 1;\n+\tinst->s.ef = 0;\n+}\n+\n+int\n+zip_process_op(struct rte_comp_op *op,\n+\t\tstruct zipvf_qp *qp,\n+\t\tstruct zip_stream *zstrm)\n+{\n+\tint ret;\n+\tunion zip_inst_s *inst = zstrm->inst;\n+\tvolatile union zip_zres_s *zresult = NULL;\n+\n+\tzipvf_prepare_cmd_stateless(op, zstrm);\n+\n+\tzresult = (union zip_zres_s *)zstrm->bufs[RES_BUF];\n+\tzresult->s.compcode = 0;\n+\n+#ifdef ZIP_DBG\n+\tzip_dump_instruction(inst);\n+#endif\n+\n+\t/* Submit zip command */\n+\tret = zipvf_push_command(qp, (void *)inst);\n+\n+\t/* Check and Process results in sync mode */\n+\tdo {\n+\t} while (!zresult->s.compcode);\n+\n+\tif (zresult->s.compcode == ZIP_COMP_E_SUCCESS) {\n+\t\top->status = RTE_COMP_OP_STATUS_SUCCESS;\n+\t} else {\n+\t\t/* FATAL error cannot do anything */\n+\t\tZIP_PMD_ERR(\"operation failed with error code:%d\\n\",\n+\t\t\tzresult->s.compcode);\n+\t\tif (zresult->s.compcode == ZIP_COMP_E_DSTOP)\n+\t\t\top->status = RTE_COMP_OP_STATUS_OUT_OF_SPACE_TERMINATED;\n+\t\telse\n+\t\t\top->status = RTE_COMP_OP_STATUS_ERROR;\n+\t}\n+\n+\tZIP_PMD_INFO(\"ret %d,written %d\\n\", ret, zresult->s.totalbyteswritten);\n+\n+\top->produced = zresult->s.totalbyteswritten;\n+\top->consumed = zresult->s.totalbytesread;\n+\n+\tif (zresult->s.ef == 1)\n+\t\treset_stream(zstrm);\n+\n+\tzresult->s.compcode = 0;\n+\treturn ret;\n+}\n+\n /** Parse xform parameters and setup a stream */\n int\n zip_set_stream_parameters(struct rte_compressdev *dev,\n@@ -111,6 +172,7 @@ zip_set_stream_parameters(struct rte_compressdev *dev,\n \tinst->s.res_ptr_ctl.s.length = 0;\n \n \tz_stream->inst = inst;\n+\tz_stream->func = zip_process_op;\n \n \treturn 0;\n \n@@ -385,6 +447,56 @@ zip_pmd_stream_free(struct rte_compressdev *dev, void *stream)\n \treturn 0;\n }\n \n+static uint16_t\n+zip_pmd_enqueue_burst_sync(void *queue_pair,\n+\t\tstruct rte_comp_op **ops, uint16_t nb_ops)\n+{\n+\tstruct zipvf_qp *qp = queue_pair;\n+\tstruct rte_comp_op *op;\n+\tstruct zip_stream *zstrm;\n+\tint ret, i;\n+\tuint16_t enqd = 0;\n+\n+\tfor (i = 0; i < nb_ops; i++) {\n+\t\top = ops[i];\n+\t\tif (op->op_type == RTE_COMP_OP_STATEFUL)\n+\t\t\top->status = RTE_COMP_OP_STATUS_INVALID_ARGS;\n+\t\telse {\n+\t\t\t/* process stateless ops */\n+\t\t\tzstrm = (struct zip_stream *)op->private_xform;\n+\t\t\tret = zstrm->func(op, qp, zstrm);\n+\t\t}\n+\n+\t\t/* Whatever is out of op, put it into completion queue with\n+\t\t * its status\n+\t\t */\n+\t\tret = rte_ring_enqueue(qp->processed_pkts, (void *)op);\n+\t\tif (unlikely(ret < 0)) {\n+\t\t\t/* increment count if failed to enqueue op*/\n+\t\t\tqp->qp_stats.enqueue_err_count++;\n+\t\t} else {\n+\t\t\tqp->qp_stats.enqueued_count++;\n+\t\t\tenqd++;\n+\t\t}\n+\t}\n+\treturn enqd;\n+}\n+\n+static uint16_t\n+zip_pmd_dequeue_burst_sync(void *queue_pair,\n+\t\tstruct rte_comp_op **ops, uint16_t nb_ops)\n+{\n+\tstruct zipvf_qp *qp = queue_pair;\n+\n+\tunsigned int nb_dequeued = 0;\n+\n+\tnb_dequeued = rte_ring_dequeue_burst(qp->processed_pkts,\n+\t\t\t(void **)ops, nb_ops, NULL);\n+\tqp->qp_stats.dequeued_count += nb_dequeued;\n+\n+\treturn nb_dequeued;\n+}\n+\n struct rte_compressdev_ops octtx_zip_pmd_ops = {\n \t\t.dev_configure\t\t= zip_pmd_config,\n \t\t.dev_start\t\t= zip_pmd_start,\n@@ -446,6 +558,8 @@ zip_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,\n \n \tcompressdev->dev_ops = &octtx_zip_pmd_ops;\n \t/* register rx/tx burst functions for data path */\n+\tcompressdev->dequeue_burst = zip_pmd_dequeue_burst_sync;\n+\tcompressdev->enqueue_burst = zip_pmd_enqueue_burst_sync;\n \tcompressdev->feature_flags = RTE_COMPDEV_FF_HW_ACCELERATED;\n \treturn ret;\n }\ndiff --git a/drivers/compress/octeontx/zipvf.c b/drivers/compress/octeontx/zipvf.c\nindex 2a74e8bbb..996ae69ab 100644\n--- a/drivers/compress/octeontx/zipvf.c\n+++ b/drivers/compress/octeontx/zipvf.c\n@@ -91,6 +91,55 @@ zipvf_q_term(struct zipvf_qp *qp)\n }\n \n \n+int\n+zipvf_push_command(struct zipvf_qp *qp, union zip_inst_s *cmd)\n+{\n+\tzip_quex_doorbell_t dbell;\n+\tunion zip_nptr_s ncp;\n+\tuint64_t *ncb_ptr;\n+\tstruct zipvf_cmdq *cmdq = &qp->cmdq;\n+\tvoid *reg_base = qp->vf->vbar0;\n+\n+\t/*Held queue lock*/\n+\trte_spinlock_lock(&(cmdq->qlock));\n+\n+\t/* Check space availability in zip cmd queue */\n+\tif ((((cmdq->sw_head - (uint64_t *)cmdq->va) * sizeof(uint64_t *)) +\n+\t\tZIP_CMD_SIZE) == (ZIP_MAX_CMDQ_SIZE - 8)) {\n+\t\t/*Last buffer of the command queue*/\n+\t\tmemcpy((uint8_t *)cmdq->sw_head,\n+\t\t\t(uint8_t *)cmd,\n+\t\t\tsizeof(union zip_inst_s));\n+\t\t/* move pointer to next loc in unit of 64-bit word */\n+\t\tcmdq->sw_head += ZIP_CMD_SIZE_WORDS;\n+\n+\t\t/* now, point the \"Next-Chunk Buffer Ptr\" to sw_head */\n+\t\tncb_ptr = cmdq->sw_head;\n+\t\t/* Pointing head again to cmdqueue base*/\n+\t\tcmdq->sw_head = (uint64_t *)cmdq->va;\n+\n+\t\tncp.u = 0ull;\n+\t\tncp.s.addr = cmdq->iova;\n+\t\t*ncb_ptr = ncp.u;\n+\t} else {\n+\t\t/*Enough buffers available in the command queue*/\n+\t\tmemcpy((uint8_t *)cmdq->sw_head,\n+\t\t\t(uint8_t *)cmd,\n+\t\t\tsizeof(union zip_inst_s));\n+\t\tcmdq->sw_head += ZIP_CMD_SIZE_WORDS;\n+\t}\n+\n+\trte_wmb();\n+\n+\t/* Ringing ZIP VF doorbell */\n+\tdbell.u = 0ull;\n+\tdbell.s.dbell_cnt = 1;\n+\tzip_reg_write64(reg_base, ZIP_VQ_DOORBELL, dbell.u);\n+\n+\trte_spinlock_unlock(&(cmdq->qlock));\n+\treturn 0;\n+}\n+\n int\n zipvf_create(struct rte_compressdev *compressdev)\n {\ndiff --git a/drivers/compress/octeontx/zipvf.h b/drivers/compress/octeontx/zipvf.h\nindex 038877e4e..ee39b8eb3 100644\n--- a/drivers/compress/octeontx/zipvf.h\n+++ b/drivers/compress/octeontx/zipvf.h\n@@ -156,6 +156,170 @@ struct zip_vf {\n \t/* pointer to pools */\n } __rte_cache_aligned;\n \n+\n+static inline int\n+zipvf_prepare_in_buf(struct zip_stream *zstrm, struct rte_comp_op *op)\n+{\n+\tuint32_t offset, inlen;\n+\tunion zip_zptr_s *sg_list = NULL;\n+\tstruct rte_mbuf *m_src;\n+\tunion zip_inst_s *inst = zstrm->inst;\n+\trte_iova_t iova;\n+\n+\tinlen = op->src.length;\n+\toffset = op->src.offset;\n+\tm_src = op->m_src;\n+\n+\tif (m_src->nb_segs == 1) {\n+\t\t/* Prepare direct input data pointer */\n+\t\tinst->s.dg = 0;\n+\t\tinst->s.inp_ptr_addr.s.addr =\n+\t\t\trte_pktmbuf_iova_offset(m_src, offset);\n+\t\tinst->s.inp_ptr_ctl.s.length = inlen;\n+\t\treturn 0;\n+\t}\n+\n+\tZIP_PMD_INFO(\"Input packet is segmented\\n\");\n+\n+\t/* Packet is segmented, create gather buffer */\n+\tinst->s.dg = 1;\n+\tiova = rte_mempool_virt2iova(zstrm->bufs[IN_DATA_BUF]);\n+\tif (iova & 0xF) {\n+\t\t/* Align it to 16 Byte address */\n+\t\tiova = ZIP_ALIGN_ROUNDUP(iova, ZIP_SGPTR_ALIGN);\n+\t}\n+\n+\tinst->s.inp_ptr_addr.s.addr = iova;\n+\tinst->s.inp_ptr_ctl.s.length = (m_src->nb_segs < MAX_SG_LEN) ?\n+\t\t\t\t\t(m_src->nb_segs) : MAX_SG_LEN;\n+\n+\tsg_list = (union zip_zptr_s *)(zstrm->bufs[IN_DATA_BUF]);\n+\n+\tint i = 0;\n+\trte_iova_t addr;\n+\tuint16_t len;\n+\n+\twhile (i < inst->s.inp_ptr_ctl.s.length) {\n+\t\taddr = rte_pktmbuf_iova_offset(m_src, offset);\n+\t\tlen = rte_pktmbuf_data_len(m_src);\n+\t\tif (len > inlen)\n+\t\t\tlen = inlen;\n+\t\tsg_list[i].s.addr = addr;\n+\t\tsg_list[i].s.length = len;\n+\t\ti++;\n+\t\tinlen -= len;\n+\t\tm_src = m_src->next;//try offset += len instead\n+\t\toffset = 0;\n+\t}\n+\treturn 0;\n+}\n+\n+static inline int\n+zipvf_prepare_out_buf(struct zip_stream *zstrm, struct rte_comp_op *op)\n+{\n+\tuint32_t offset;\n+\tunion zip_zptr_s *sg_list = NULL;\n+\tstruct rte_mbuf *m_dst;\n+\tunion zip_inst_s *inst = zstrm->inst;\n+\trte_iova_t iova;\n+\n+\toffset = op->src.offset;\n+\tm_dst = op->m_dst;\n+\n+\tif (m_dst->nb_segs == 1) {\n+\t\t/* Prepare direct input data pointer */\n+\t\tinst->s.ds = 0;\n+\t\tinst->s.out_ptr_addr.s.addr =\n+\t\t\trte_pktmbuf_iova_offset(m_dst, offset);\n+\t\tinst->s.totaloutputlength = rte_pktmbuf_data_len(m_dst) -\n+\t\t\t\t\t    op->dst.offset;\n+\t\tinst->s.out_ptr_ctl.s.length = inst->s.totaloutputlength;\n+\t\treturn 0;\n+\t}\n+\n+\tZIP_PMD_INFO(\"output packet is segmented\\n\");\n+\n+\t/* Packet is segmented, create gather buffer */\n+\tinst->s.ds = 1;\n+\tiova = rte_mempool_virt2iova(zstrm->bufs[OUT_DATA_BUF]);\n+\tif (iova & 0xF) {\n+\t\t/* Align it to 16 Byte address */\n+\t\tiova = ZIP_ALIGN_ROUNDUP(iova, ZIP_SGPTR_ALIGN);\n+\t}\n+\n+\tinst->s.out_ptr_addr.s.addr = iova;\n+\tinst->s.inp_ptr_ctl.s.length = (m_dst->nb_segs < MAX_SG_LEN) ?\n+\t\t\t\t\t(m_dst->nb_segs) : MAX_SG_LEN;\n+\n+\tsg_list = (union zip_zptr_s *)(zstrm->bufs[OUT_DATA_BUF]);\n+\n+\tint i = 0;\n+\n+\twhile (i < inst->s.inp_ptr_ctl.s.length) {\n+\t\tsg_list[i].s.addr = rte_pktmbuf_iova_offset(m_dst, offset);\n+\t\tsg_list[i].s.length = rte_pktmbuf_data_len(m_dst);\n+\t\tinst->s.totaloutputlength += sg_list[i].s.length;\n+\t\tm_dst = m_dst->next;//try offset += len instead\n+\t\toffset = 0;\n+\t\ti++;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static inline int\n+zipvf_prepare_cmd_stateless(struct rte_comp_op *op, struct zip_stream *zstrm)\n+{\n+\tunion zip_inst_s *inst = zstrm->inst;\n+\n+\t/* set flush flag to always 1*/\n+\tinst->s.ef = 1;\n+\n+\tif (inst->s.op == ZIP_OP_E_DECOMP)\n+\t\tinst->s.sf = 1;\n+\telse\n+\t\tinst->s.sf = 0;\n+\n+\t/* Set input checksum */\n+\tinst->s.adlercrc32 = op->input_chksum;\n+\n+\t/* Prepare gather buffers if input packet is segmented */\n+\tzipvf_prepare_in_buf(zstrm, op);\n+\tzipvf_prepare_out_buf(zstrm, op);\n+\n+\treturn 0;\n+}\n+\n+#ifdef ZIP_DBG\n+static inline void\n+zip_dump_instruction(void *inst)\n+{\n+\tunion zip_inst_s *cmd83 = (union zip_inst_s *)inst;\n+\tprintf(\"####### START ########\\n\");\n+\tprintf(\"doneint:%d totaloutputlength:%d\\n\", cmd83->s.doneint,\n+\t\tcmd83->s.totaloutputlength);\n+\tprintf(\"exnum:%d iv:%d exbits:%d hmif:%d halg:%d\\n\", cmd83->s.exn,\n+\t\tcmd83->s.iv, cmd83->s.exbits, cmd83->s.hmif, cmd83->s.halg);\n+\tprintf(\"flush:%d speed:%d cc:%d\\n\", cmd83->s.sf,\n+\t\tcmd83->s.ss, cmd83->s.cc);\n+\tprintf(\"eof:%d bof:%d op:%d dscatter:%d dgather:%d hgather:%d\\n\",\n+\t\tcmd83->s.ef, cmd83->s.bf, cmd83->s.op, cmd83->s.ds,\n+\t\tcmd83->s.dg, cmd83->s.hg);\n+\tprintf(\"historylength:%d adler32:%d\\n\", cmd83->s.historylength,\n+\t\tcmd83->s.adlercrc32);\n+\tprintf(\"ctx_ptr.addr:0x%lx\\n\", cmd83->s.ctx_ptr_addr.s.addr);\n+\tprintf(\"ctx_ptr.len:%d\\n\", cmd83->s.ctx_ptr_ctl.s.length);\n+\tprintf(\"history_ptr.addr:0x%lx\\n\", cmd83->s.his_ptr_addr.s.addr);\n+\tprintf(\"history_ptr.len:%d\\n\", cmd83->s.his_ptr_ctl.s.length);\n+\tprintf(\"inp_ptr.addr:0x%lx\\n\", cmd83->s.inp_ptr_addr.s.addr);\n+\tprintf(\"inp_ptr.len:%d\\n\", cmd83->s.inp_ptr_ctl.s.length);\n+\tprintf(\"out_ptr.addr:0x%lx\\n\", cmd83->s.out_ptr_addr.s.addr);\n+\tprintf(\"out_ptr.len:%d\\n\", cmd83->s.out_ptr_ctl.s.length);\n+\tprintf(\"result_ptr.len:%d\\n\", cmd83->s.res_ptr_ctl.s.length);\n+\tprintf(\"####### END ########\\n\");\n+}\n+#endif\n+\n int\n zipvf_create(struct rte_compressdev *compressdev);\n \n@@ -176,6 +340,11 @@ zip_set_stream_parameters(struct rte_compressdev *dev,\n \t\t\t\tconst struct rte_comp_xform *xform,\n \t\t\t\tstruct zip_stream *z_stream);\n \n+int\n+zip_process_op(struct rte_comp_op *op,\n+\t\t\t\tstruct zipvf_qp *qp,\n+\t\t\t\tstruct zip_stream *zstrm);\n+\n uint64_t\n zip_reg_read64(uint8_t *hw_addr, uint64_t offset);\n \n",
    "prefixes": [
        "v2",
        "4/6"
    ]
}