get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 43245,
    "url": "http://patches.dpdk.org/api/patches/43245/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180720190447.7979-5-Ashish.Gupta@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": "<20180720190447.7979-5-Ashish.Gupta@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180720190447.7979-5-Ashish.Gupta@caviumnetworks.com",
    "date": "2018-07-20T19:04:45",
    "name": "[v3,4/6] compress/octeontx: add ops enq deq apis",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "f7d1616147402786dc2c5accc9db07e3353d9799",
    "submitter": {
        "id": 1089,
        "url": "http://patches.dpdk.org/api/people/1089/?format=api",
        "name": "Ashish Gupta",
        "email": "Ashish.Gupta@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/20180720190447.7979-5-Ashish.Gupta@caviumnetworks.com/mbox/",
    "series": [
        {
            "id": 699,
            "url": "http://patches.dpdk.org/api/series/699/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=699",
            "date": "2018-07-20T19:04:41",
            "name": "compress: add Octeontx ZIP compression PMD",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/699/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/43245/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/43245/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 C261E2F7D;\n\tFri, 20 Jul 2018 20:42:53 +0200 (CEST)",
            "from NAM02-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam02on0079.outbound.protection.outlook.com [104.47.36.79])\n\tby dpdk.org (Postfix) with ESMTP id C41DC326D\n\tfor <dev@dpdk.org>; Fri, 20 Jul 2018 20:42:51 +0200 (CEST)",
            "from hyd1agupta-dt.caveonetworks.com (115.113.156.2) by\n\tBN6PR07MB3057.namprd07.prod.outlook.com (2603:10b6:404:a8::11) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.973.16; Fri, 20 Jul 2018 18:42:48 +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=+LqiDkjJnsBCPSsTTC5yTOso7ZpcHzSsUJEkenUsXcQ=;\n\tb=dfHtLLE06P8Cs4EKiYWTGS63oVu8F+A49bjk7wRbrFs4Loap5ZU/sfzgtYDOKxbdvbNmCyJN34R4tzbfvdlGroU8LKcneD6c1G3NgO4hc2k0wOp0TpDiQGH7p/kg9yzKobUTYh4nD/bgZYqGqvP9eNa84KFrCf9bDEcigsB0awg=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Ashish.Gupta@cavium.com; ",
        "From": "Ashish Gupta <Ashish.Gupta@caviumnetworks.com>",
        "To": "pablo.de.lara.guarch@intel.com",
        "Cc": "dev@dpdk.org, narayanaprasad.athreya@cavium.com,\n\tmahipal.challa@cavium.com, \n\tAshish Gupta <ashish.gupta@caviumnetworks.com>,\n\tShally Verma <shally.verma@caviumnetworks.com>,\n\tSunila Sahu <sunila.sahu@caviumnetworks.com>",
        "Date": "Sat, 21 Jul 2018 00:34:45 +0530",
        "Message-Id": "<20180720190447.7979-5-Ashish.Gupta@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.14.3",
        "In-Reply-To": "<20180720190447.7979-1-Ashish.Gupta@caviumnetworks.com>",
        "References": "<20180720190447.7979-1-Ashish.Gupta@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[115.113.156.2]",
        "X-ClientProxiedBy": "BM1PR01CA0083.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:b00:1::23) To BN6PR07MB3057.namprd07.prod.outlook.com\n\t(2603:10b6:404:a8::11)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "f6722196-f9f0-47d2-4b88-08d5ee709899",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989117)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(5600053)(711020)(2017052603328)(7153060)(7193020);\n\tSRVR:BN6PR07MB3057; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BN6PR07MB3057;\n\t3:Tlq1tG88SWHRqJankELc+c3H1OuuuPsL8dge/yJDAI6RQP7lLthkXJ/VwVt9JBEfjksUS9XB01wjpMYnlx1uNn0LVXtCJUa3QIxHgrS+d2TPurq72h7wMo0CnOabN+ms3XIKSr2mplaFfhfahrsTKyLFoV3WYVHkle2MdQiMTEZ/7dCSK0Zuqljw3lvrtbzsHBlJfI4qlp3Rei3+HFN5YdNNDmdKjlQvnArIGDSudP7pQOCu46LEq2cwlmy2Ifra;\n\t25:sI8/+17jiIIzvhObMrr9PTkKMNpQGjYGekk9beahk6acimF5gvZ1ObvBBo4szJnzE5V/dNyPgpHYwqznogxu206KwNLgOb7Els/GcRHfgsAC+PYnzNQPUdW9uoorJnJ8UPnPn652YAiaw4s+4pmbikUD64jNM2lXvVIWaNLm5IwtzBP1h91pCKLNAzAH+mC9QVYqmzNWsdm21i03ln8V5Wy6q9+5VrZiEQVui/iWjLbh3RvyelQJTxs3Uuk2CZ8q3uBrh9R4Q58kzGB1kalu7llSXSAk9RAtNu7NkhZljPAAbAMwXl8FQC1lQ3WCT9bRo+xkdWxobIW/vpAQLUKSpQ==;\n\t31:msU/aDQffWeRNPRw/8LxXHb52+o0z7bhFhGUKksgdcO0uDAGzVWekWjDiOk60/rBRaEDdWbaRoeXZAW6tf9wII3e9g7DD8dIgESBr7M/wNKdbD294Ytx3YKPKp1ZKX/m0fQUB8hu1ByUJWsbS2CK7jpaQOiK3oZSl9EGmsLr21JJkgmY8GqTGbdkMACYFZZiPStr6EL64plibOrbqH3hZ3bnI2ge36l8yMbJMvWfjow=",
            "1; BN6PR07MB3057;\n\t20:3dByk2jzO4jYmMkSI8vnX/HSEVr1OFbv/XQUWGVZNnzEYnEwWb8GhGTHF+7cbSRxflro9hqQnPFgMWRu5ENSj0OWbFgmL/2EoLseeRmUjhj/QP4JSD1psjg7UFQfHSZufgfiSo8w18p7D4KBoQo0zBx0Msm3XHSqh9uLyHsL6nveUM8NRq8cy1xLQZr8dDqOi0E35muYBBhmZ/CL3IAcio+7XqIBHuFFkBHNw+xB1xQEy8RbfRONekQ0FBFkU1vwl04ismWjay+dCKMPOBJ1kbJmSu5+9sO5QEsWl2DJihUkKQ1GBASnnD6QOaHK9ZytoMToyGKE3XTP/s8axxiEOrfiE32YqsqUJwAxgVpTCFFr5BNTRhjxDTHAYZyCHtlXIW1xTfT5kqlcSsp+Untp/2fclOS3mgki0d7BO/bFGOQ9TeuUaCvJiVb4L6Mia0x5D6mbAf4fCjDPL2i60vCcKREmxanmfjJv+rHUFk5TeqFp1HTexI+SrlTiOJQG64eJRLtl6m/egCbxhcVimQknU2eCT0en3LiSUOyrD78LsQRlMJ0GIeR8K+jrqVwXEFcr2RXgV71ZvEyXjEj2G5W8Le3uKh58JADWa3pBAW3b7Hg=;\n\t4:1dozBZ4y+oTQN2lNgOV5zYnt+xvykvRP0RUDCjfHEZ/o0bMMwgQX/TIkuKcyLsSYDzpWtuPtR6Ve00crgLeQE3vu4uhI5vDDRw2zi9T94R24gGJmRdLU6/p0vhm4h0N53iGxwuQxVqnRq6Mlxjoy644P56eecwJfs8mpKtanziNSJ9IDELExZLqXIBbizSzK1IfTP7IbPB6SUDmha4WSIptwclJpT0cTNuTkqA4Jl06ITo4Feordsh8XHkxJK65E6AaUb9KkcoDdl3zyo4hJOQ==",
            "=?us-ascii?Q?1; BN6PR07MB3057;\n\t23:o/lNFdAuLInKui7VtcnNnPDzwsO86BnLZCBZHFEwf?=\n\tL/xDZ5cxGCANNw0DeMi3kAcsxj53n5Cxo6HjqcdfWrZpBf8PaHNQNGxrGkzequGk8MRPRqI9yetWXvKUqbxXsKWM/cv0IyTRBeRd47HB0swMpLpQ6P5vDfKC7dP4LkrY00pfdSGmXG1+O0RFbasH1f56lnpwVXYB7G5KG+fmYbVRXl1eWjyeR8YuumOpitFtoGPRST4MYKqRyd+QHtfwKW1U/ZG4afrEfgq/w2eajBTY8ZfLKEuxy72CSJ6wionGGbviz7AxylZ88iUagpwSeStesdXpF0/iQPvTgeF7p6XYDBN/jS09dhhk30YihLMyqDSZNzmxsUo5rZzXnZE6qexRzyO2JdOGAr4O8aIav2mr9gJQn+vG1Vg1Mzn9hCSI2wZT7WRc+wPpoxtdxKF2F2FmRKnmhtIG3kUod1mQvyFQkR7WwRivT/1zh1MMz9gORKLEy1znGNKgd/KdVYvbA3jXaTCevjpqBlDxlnn4anwtZOEqlM5Do6PKG8hPS2g718AXfsXK/zL4Sc3+WDTtBNMwnFc1bWMuDAlxGKCopfhhRpyS2tL1ff5nvxMT5Xj7OzJ86um2OEapSmSf0z9OedV60dx0SJAHmZ8AxVxsLUUrAmqpfS5Lg8fEZ3O7sVrxkHJmbBFxB4wphlr0hKbEISv40xGA2MnYW37QoizPEqZixrS1BA65ia37z+HSkgec/fkZsiJ586HS9UF+uKp1N7tOP8kHMh29pGm3NfXrLyRseFbqcAdTuEhBkzL116Te89QFI93ZsNXAsZtChDf08HL1nhFTutDwxlf5AStY5xtoelniKVUY8muhN/3Dxri9YmYEjaJ9z2XANVeIv34+nxlU/pgVLSk282HDIIOeH+cezRnBoNa1zO/FjHeW7emk7nWFtxFUQ+dWF0dAeOt1Kj1tKUj0vLIoKo4WxSvW3gY5xEYayMLTLEwr33K2D9I4aD/BM3dxWVBb0gNCtI6Ul/drGCaUIo6i9Y69VSiJO52NA3apTdjicJjdiZVt0XOfRCSDXXiBGpi6lw3kb69ZBb//idDd2m+ekYxhoy68jcA78FUkobHeovqvXRrfSEg9vrlQOL/JgOGYRoxZ1A0kRH7XFFl8Lwea7/PpBseqbC8RpL/6WHneq4pQzFW9iAu5IJIv22VYdnNd12dor+chMtI1q7qnzbXdSvj26OmME77EY+AgawcTr/S9CbqUtyWldeucU/r7Jkny2VWXnshJyFSyKev7ixHXxba6W4DP/ZxM0V/hCBQrLYkt7kRnA73WhBONBQgfcsg/nDfZA0KuCk7v151EkXHYJdcCNWTg58U1toXcwuRaBugy2mZR3I3FqI=",
            "1; BN6PR07MB3057;\n\t6:p0j4pHMuF9qbGQ7iRz3bFDJHGLTXTx+/I30DLmFQYqqY7iWmfAHsnW09YHoxXFNe+Mrkxs55YTMZBBSE5BCMNVbc6/eHNKNe1wvrgSJ/uh+EY1wqUw6D1UuOMZhhmA34rJpCM9KViO8GyMXN89uWt4JoCpvpakTheNMBfeQYEZFjzvi9j4uCrmMIVUImEn7e/CbVyADJuSjvUBU5pzIf8bF94SiWzYJ/7u2rSlgk9qm0KzElqxjcNi183/fPP+xX40x/P3rA97SGgrKUDlhIFV9xL/ooq28KAhlJIns4042uznbXC/ArtgMhmoFqHyzxCbwgQzt14UHsE/oJngt79/QqSxVDioK4ehgGkr9wHqOFd0JmWw+N0G0n/DjVEoGjic6rafbaQ0304IT2Ik76nX1Ebjeht9oCAGfSn3gFlWJ0gREV0H6XJaqy56A55domnGmIW2keDL2XqN0J0vbh5Q==;\n\t5:wZbD7DSswF8Zn/dzTbDsA9xmUw7JwcOlo71dVOIcLe8AsKLe5aZyWUkKclzuZBjMjSXnMYAzeTntP0VS0msvOpejjqKAmLqrV+xTQ7WLP5JRhXoqVnaKw920ub4QMuHqFi9RadBsulFyAhJKo0Btr+08D+yfyx1ARAmCNEpdWVA=;\n\t7:onSD6+J75RirVaz/fD+DD85UBLIC2Q6/QiWHnRnACB4XqhdnMj+Vj5cp5f2gaIRgo0KwKosAToxmcdYsf5WXqAkXUeyEoaYCW27CDM2qm7OzsctANnvGXSz/xV0S411D9rMIDQVWFu2P+see7TDP04wFoArGaeRpwHxiERpxoSkJyyFhn2o/RXFx7GNzf8x7sLxR/MFSxljQKMZIj4qN5lsbdk4IIKJxoBgpH1P21jmF3F7zZQFptspBtv28GqF6"
        ],
        "X-MS-TrafficTypeDiagnostic": "BN6PR07MB3057:",
        "X-Microsoft-Antispam-PRVS": "<BN6PR07MB30572CAD095FBF6171F97D12E1510@BN6PR07MB3057.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)(3231311)(944501410)(52105095)(3002001)(93006095)(10201501046)(149027)(150027)(6041310)(20161123564045)(20161123558120)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016);\n\tSRVR:BN6PR07MB3057; BCL:0; PCL:0; RULEID:; SRVR:BN6PR07MB3057; ",
        "X-Forefront-PRVS": "073966E86B",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(136003)(366004)(346002)(396003)(39860400002)(376002)(199004)(189003)(186003)(486006)(107886003)(956004)(476003)(2616005)(26005)(6512007)(446003)(16526019)(8936002)(81156014)(97736004)(81166006)(55236004)(7736002)(11346002)(8676002)(72206003)(48376002)(4326008)(2351001)(2361001)(25786009)(6486002)(16586007)(54906003)(53416004)(50466002)(316002)(105586002)(36756003)(106356001)(42882007)(478600001)(68736007)(69596002)(14444005)(5660300001)(6666003)(6916009)(66066001)(50226002)(47776003)(305945005)(76176011)(1076002)(6506007)(2906002)(6116002)(386003)(53936002)(52116002)(3846002)(51416003);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR07MB3057;\n\tH:hyd1agupta-dt.caveonetworks.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; A:1; MX:1; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "BC5P1vCIv8fiWEK48zYM748uLTTi5Cu9X49NTOuTeK4zVEjkWbztjg4oOaAv3/RzfYiN2b0r42iflaBo2ZyC95KjAgvW1AVugfLg40uLc6DJkperCJwi6XjGJ7YlRdHHocpyERP3sKfFHFfTA95pCW9PtfL0FXwohaO3GIoeW5Qw/YmX+PIXbwoR6Rn9PX9oEvWRendsrckFCAup/3Va3V+RNz3yw1FzW5j3NloP6PLb8mjIDhxlje0FJz2OXf2iwcDrVTCPbuXKVkL6S5PN0JQttaAqgfN03C2pfUDahUMmcYe/MelTPhbOcoIPPb8V2M8OQjbhDAmXOai6Do6vUSWS/pYtYrMVqsXb2FDosNg=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "20 Jul 2018 18:42:48.8129\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "f6722196-f9f0-47d2-4b88-08d5ee709899",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BN6PR07MB3057",
        "Subject": "[dpdk-dev] [PATCH v3 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": "Add enqueue/dequeue APIs to perform compression/decompression\noperations\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/otx_zip.c     |  49 +++++++++\n drivers/compress/octeontx/otx_zip.h     | 169 ++++++++++++++++++++++++++++++++\n drivers/compress/octeontx/otx_zip_pmd.c | 119 ++++++++++++++++++++++\n 3 files changed, 337 insertions(+)",
    "diff": "diff --git a/drivers/compress/octeontx/otx_zip.c b/drivers/compress/octeontx/otx_zip.c\nindex 255b095de..6499ddb86 100644\n--- a/drivers/compress/octeontx/otx_zip.c\n+++ b/drivers/compress/octeontx/otx_zip.c\n@@ -89,6 +89,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 - ZIP_MAX_NCBP_SIZE)) {\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/otx_zip.h b/drivers/compress/octeontx/otx_zip.h\nindex 3fcd86a86..73a99e624 100644\n--- a/drivers/compress/octeontx/otx_zip.h\n+++ b/drivers/compress/octeontx/otx_zip.h\n@@ -159,6 +159,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@@ -174,6 +338,11 @@ zipvf_q_term(struct zipvf_qp *qp);\n int\n zipvf_push_command(struct zipvf_qp *qp, union zip_inst_s *zcmd);\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 \ndiff --git a/drivers/compress/octeontx/otx_zip_pmd.c b/drivers/compress/octeontx/otx_zip_pmd.c\nindex fac547920..a76c95117 100644\n--- a/drivers/compress/octeontx/otx_zip_pmd.c\n+++ b/drivers/compress/octeontx/otx_zip_pmd.c\n@@ -28,6 +28,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 static int\n zip_set_stream_parameters(struct rte_compressdev *dev,\n@@ -114,6 +175,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@@ -397,6 +459,61 @@ zip_pmd_stream_free(struct rte_compressdev *dev, void *stream)\n }\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 i, ret = -1;\n+\tuint16_t enqd = 0;\n+\n+\tfor (i = 0; i < nb_ops; i++) {\n+\n+\t\top = ops[i];\n+\n+\t\tif (op->op_type == RTE_COMP_OP_STATEFUL) {\n+\t\t\tret = -1;\n+\t\t\top->status = RTE_COMP_OP_STATUS_INVALID_ARGS;\n+\t\t} else {\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\tif (!ret)\n+\t\t\tret = rte_ring_enqueue(qp->processed_pkts, (void *)op);\n+\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@@ -458,6 +575,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 }\n",
    "prefixes": [
        "v3",
        "4/6"
    ]
}