get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 43243,
    "url": "http://patches.dpdk.org/api/patches/43243/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180720190447.7979-3-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-3-Ashish.Gupta@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180720190447.7979-3-Ashish.Gupta@caviumnetworks.com",
    "date": "2018-07-20T19:04:43",
    "name": "[v3,2/6] compress/octeontx: add device setup PMD ops",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "40f471821474f06ed1128e00c5b2b8c6398d4216",
    "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-3-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/43243/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/43243/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 8442E2C38;\n\tFri, 20 Jul 2018 20:42:48 +0200 (CEST)",
            "from NAM02-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam02on0072.outbound.protection.outlook.com [104.47.36.72])\n\tby dpdk.org (Postfix) with ESMTP id 951E62C36\n\tfor <dev@dpdk.org>; Fri, 20 Jul 2018 20:42:47 +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:44 +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=goafOMky+5yJ2q4rYsfpd2ld6xHT0U4nGlZvi67iA0M=;\n\tb=dApAQH/htfY6thF8trn3Oovtkf15awual49WtJnZ24Y4ahN8oQcRYVIAwNMBgoSzv5LAkK7DiLC4lHpLSiAtW8ddr1iGZDepwq86bfjJ1rGIMCtKBtH8i5RJl8GnY9NtyKDT/bcDILKNb8jN9NrYmFCC1eI1LazOw1L7F7t2sgc=",
        "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:43 +0530",
        "Message-Id": "<20180720190447.7979-3-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": "eaa6d94d-1047-4549-4085-08d5ee7095c9",
        "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:Yrr1H6buJvA/ghJuz/36fIRiXaSuovD+FT8tUEPxxWChKOkY1C0BzMPWUzjP1vniS1u2w7HRVixY0yGXK4fKfn1+P4ywVeLKJY81ActEULBAUxrvNg5oGoRWhSyuoysXdNOOMt+zqltPFQWWJzNSO+8QfXQwREN8Oea0FcvxW56CJF4p+/xF6Bwlo3Ly1WbiVU/63/z+oWcQve8duErsFUHBHFENk66QtGQ3ItW1DuKo7hchToY3go0RhpSs3oVt;\n\t25:vz0gXZ2Qyib+9/jFqTz4K4KuB/Yscayd1fjDuk2mKoqvjKVQsjx/gkTfnbCLZz1frzwKYKQDQ6gjkhhvjP0g4FvjdsqOQcerHa3xK53C4pSx0pclJXsSD0h2lTcwYiyerEh6uRzliRQa8EERl0vUnxupRxPnFitBmafGeFwRi3FWl5JvYepXIY1md6tQ1KlnDfLjYv/1DLhrUVf2rX6dfoLSlc54W9/cUFdmT366q7Jty6L8AkqwfwxmpFn4PxJSHME5fIJhj8oSrd466oB4O8mCiVPvkZHBeGr7R8K0GBhSX+CEfNh2vtjcvDUW4WPDo/Ve3inap2xh4G9MkJ4Omw==;\n\t31:cBQZeqY6fgqoS7D+dqttnO21RDwAE/LUah6FiM4/2KcIsrZ7kHXm45YQnjFQpnCPBvg7ixMalt1aLhs/WEYk7Xfy95qmuJ4vOqCotOqITTf8C5cPrWO6Q59EO20S+8+JRlUz31AyLFUdGk70/MRh8jbx5rjuK1hrTJE52yxTVsHhaU8G84tpEv0dJ6JEPA/VNn4/XaP6wI5fhzH9T8T+zBJJSak7BCfCyegQFOmvM+g=",
            "1; BN6PR07MB3057;\n\t20:4n4aVY/h6uwLYjlUgUvIYTJ23Hzn0BAO3NsCdAl018qL38YEbkyWjplL9/topD3bNgkiqWFsZWiKVg906iAf4Xm3Q0eoybrU7xycJfVcPvwaLnqZfKcz2iLqDJdU95ix+jshZetbMrQA5+8091eCP5NGGGZblVrkKsRD1ZODQ6za8WNqygxLXU5JoZzIEEUg1tIhapqHV8AJIOM26By525ZxG1fhPMhKWg94tVVp6l9YTnVeQs0m2vBcTve0tGW8yv6dP8JdV1fwxli6yrAqtP9oOLsNqh5Rpg3aqeSUseMO+gjyKLkitYdV6146yA4Iw/dNG6NMbuiKOvhLr80rAr8TgTgT86CGwKawv8Csm4sDTeGuw4K/dBvQf6ke0aI0DHRXCvzH43bvy9/t1u9/iSwdJIcJIaN8VR6VHyr2NfuzqBlBl2kz9zobEqm5oZBpozdpQ5gVu8fiAU59kfRIdqX3MlWhPEfeXHAZ/3enDfypZdvnuDUGMqMEO0N7j2nZD7jixgW+eJk/2OR266B+4pQIKz27Ocfxcj8+9onP0HZkdsHcXPLRnwNW5Yy+O2OMrQez6rmFCUq1Ee79VvMgFocutH4PAb12FJuX+bYt87s=;\n\t4:q0QS8TpR0ruY93IY5utwr00t/ZuC48ZkEVDDoNg1TGeTWUsXyR+nU7A2mHc9Vh5Q+vlXmb0ZHkISHuOtI5lHc3gHRnv8cdV/nTSlySCUJmGm6g2FErsK95tapo3xvVJWRbVV/EJz3lvwmb5xMaR8vRS5PoV9sSxWd31BkECxt0rwdcNdkzfnXtyTJAyBfWccU5YNLNWi3oiKFEkwxkg1nMqgKGrLDWtKDPLmd6+vjZGeGiKvPnES2zA/fxJCgMV6nwDjP2XEFXi+lGIAmtwyWQ==",
            "=?us-ascii?Q?1; BN6PR07MB3057;\n\t23:iclbWHRdRl6PYDNnVC/Cfg78bdyfdC8UktRAweaKX?=\n\tsZM8tCpelK8ED6IC1N/ADu1CIIHCNcSEU522wCTelc9kr9aRDEXnwam1IWzSbFH15Qa1B9SpYNAXUxg+kjjP9tEsxbWl/3n0x3Gd96915sl6XgChfUfCfG3CAHLC5kY1w4pCTn13LYntb3O3JRZsEPXQFmCNYqJ6H8xPOkboQ5OEvnIZh8EiS5pQIOMj39BrKgCpiuE606qZjxSyUPS1DDwb3ONE5yK6dc6G8oWrRPIn+Im88cK1fK3Ld6rKWuYEz0KgXlx6P6f3N3Nh+901f1Xei7kZhJ8tVaE1lrJZmVuzif0d/y3+ZiHxqV4bqDLY2/TJAUShHDakV04LSeKye0GZTWacOnwHaVXiiSm6ozTM+RI2OkbAt75mSCRIJQ+TozGYc3eCUP5y1zcquBAUcRZFAvPx+IKufw3KwTVFqgdXshn+kFClCyWWI/DUGjm+7IceY/63ZwRt9GSG2pgc1A4cslNNQMxya72Oa1nAGAzsfUMkm3brnrcbxFpmAVppX1+3z9QIo56Y0cnYZFKzoAek0bVPoqXng6vJ0MtDgFVjBcwDAcHcCenRR2Ubw3OYqrvbCUCfm2IBe3Vh2pDlkkhcrdNQejo133svajTD3NOH1vxr0XyJko4ePRR1u8+yg7qhBm4vaKMimjX+KNpG4eC6cck1tLrmi7FtgyzISvN1PQ/rvqW4CN6E8IrzbG59+sjvCip6hTXQS2GojOrt3YG+Y/LK+cQt6aXAW+a6Vh9+iAcd4CSmEZ5UeVG2p2hy+B1h71RDZ6gqGiFE8o7ln3DuiwoLd5EQpU+HENxjA9iv2P/aFkUE0gg/3B6H70VWWEQ/LLMXKvFMMM+LfVkiYvsa8aBNv+m59Zkp+8SUlUULprdqgPGYO7F96+FNx3Lqly8E4B/7HQEI6ctBxSsCzd6/VkbYLhWZuDLDVnpk3KMc9faZv1CYFHQpLwMgQNZ6XL2vjVtryxzhqMlakHpdyBx/NjWr/AJQXlFI5vvrmCJa14ER2vfGWExm0Ns9PmWTjNbD9vMe9/Im07P8ZN9M2Bp/ve1eV7IkltQmbR4Q+GMkLzhMgZS8HovC6oYhLWRXcAg0k6GaP/xteu7DfWeQ/jV+UqW8KfgvpR2HKr9XaTKhGKasqde+cHSe63LFpfI89CNRTGjEP5r4jhz5GJLRThiedlpq3TZpfS6RDDtZH7dKO7XcYR+AEArMqAzz0cHZGda+eQLYdGOIDdYPFLJZh2f/3vO5jsKz15OVneHDaJk5PvbiH+0oYBLjF1cJOH3+7NQ0WkC5QCO4BhcfJQU05t2dBfI0l9J43YwHDWSIEPuGw==",
            "1; BN6PR07MB3057;\n\t6:YirPTZeUvRKYl8FfVZ39S5CNwlk8QJSJ4ApnosY455d21YSvhWLKQdCj8dk1xiQ6oo/Xiv4M0EeaDISZ+s2ITzS7qM8Ay8ZpnA5BNIs9W1JXhy5QH6I2vm0WZ86w5y1XQmaeIidOvKKVfRY3gxsLxnrvD4AOxq5KeD5F1A5mcWcQJXZ1jPuXtyZZTy+VfD+kbO05Ox1prka6BRhR5iXY/Y8M0udOeihJ4BBCm96nxbnu5SemMUfdpdZXn5E/Y31yQL4zSWEIlWc+xm44NHjZpLznqk3nwOZejz0IT9qD+D0ff5KsTTrvQJLfCmuWzQ2h3kzAtddISBquIfCPQhUcQ7wgnADNOaDk2Nf8wr2xl4s5EmhiEoth/AHFh4VTkxaYD4l/fovTKXIGB8cgcpENh65PY8drIuDWetYuUd486LGdIx5rqauXxoPswZGpw55UjVsN+4CZ43JvbDJ4EB5TGQ==;\n\t5:iyVnkczGEDPb7wWGFXkbI1gLuqL4hVnacINLZAP1PeJ3yUg5q6rp9VsG2GWwxNfWDU9fXckBnfjQz4ug3GWaHTpnLj8zwg6xJkU/gnSfTaEgUmNCcH/NJmtqG1JCGw4InAb+F3psddWVPAu0U4Z8LwTRfDN3crXeP/SrFIJ1ETs=;\n\t7:c9f4cwMDGrhDS4mLL2ZqYuozQfrh6+XYKvfzjORRDV7Lw88wD6iTeYUBxiaDTmR+v1LZ3BqECBn1cvOQQ6vYSyqs4NcJYZzw1GRihAdhShfxufRl7e7rQfB/cH5cvTpSucIwA2hZiGTNEZgH/BoFqlrR411ndowtO1jDJOPz5+LQNobDGkqEgHwHZnD3ieCNXD0HG9S3p9dM5u3eQa3t8ksH6EL2Eq7CG/k9kBIiiHDarkt6X9szfODoEw7QczNK"
        ],
        "X-MS-TrafficTypeDiagnostic": "BN6PR07MB3057:",
        "X-Microsoft-Antispam-PRVS": "<BN6PR07MB3057766B12CECFEDA080AC53E1510@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)(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": "KtrsuMK/eRTZiSsyzv121ObESaYdeNAs1VcQUmBfC3i9x4mnsT+j9QV2ok2Q5x8y+iMAVCp65jcecq1yr8SW1sWL83X6LW4t+OWJ2opFhJ+tD0yT+hccRoqcgryMLM+Sp+CxJH/6ByUnBdbJU2X1UCt3cAAjxATabJl5iH8ga+wRzBnr8mXY7NbNpct8zSlGy5xZ4bqLfKxgrL6BLdt/tXNclVoZhQULVec9n4kgGxg6VZaMRmxli1GXQq1UfnqaE+GA5amfM/J5o2uq/gw6df711kuHYe5+DGkZ5+PEDcRKB8y7GCtoeGo0nX3oq07Da8IVxweEP5BlPpn9i/4FqUNZG8otTpmhaOM21W1+pS8=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "20 Jul 2018 18:42:44.0785\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "eaa6d94d-1047-4549-4085-08d5ee7095c9",
        "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 2/6] compress/octeontx: add device setup PMD\n\tops",
        "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 compression PMD device and queue pair setup ops.\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     |  71 +++++++++\n drivers/compress/octeontx/otx_zip.h     |  57 ++++++-\n drivers/compress/octeontx/otx_zip_pmd.c | 253 ++++++++++++++++++++++++++++++++\n 3 files changed, 379 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/compress/octeontx/otx_zip.c b/drivers/compress/octeontx/otx_zip.c\nindex 4a5591c97..255b095de 100644\n--- a/drivers/compress/octeontx/otx_zip.c\n+++ b/drivers/compress/octeontx/otx_zip.c\n@@ -18,6 +18,77 @@ zip_reg_write64(uint8_t *hw_addr, uint64_t offset, uint64_t val)\n \t*(uint64_t *)(base + offset) = val;\n }\n \n+static void\n+zip_q_enable(struct zipvf_qp *qp)\n+{\n+\tzip_vqx_ena_t que_ena;\n+\n+\t/*ZIP VFx command queue init*/\n+\tque_ena.u = 0ull;\n+\tque_ena.s.ena = 1;\n+\n+\tzip_reg_write64(qp->vf->vbar0, ZIP_VQ_ENA, que_ena.u);\n+\trte_wmb();\n+}\n+\n+/* initialize given qp on zip device */\n+int\n+zipvf_q_init(struct zipvf_qp *qp)\n+{\n+\tzip_vqx_sbuf_addr_t que_sbuf_addr;\n+\n+\tuint64_t size;\n+\tvoid *cmdq_addr;\n+\tuint64_t iova;\n+\tstruct zipvf_cmdq *cmdq = &qp->cmdq;\n+\tstruct zip_vf *vf = qp->vf;\n+\n+\t/* allocate and setup instruction queue */\n+\tsize = ZIP_MAX_CMDQ_SIZE;\n+\tsize = ZIP_ALIGN_ROUNDUP(size, ZIP_CMDQ_ALIGN);\n+\n+\tcmdq_addr = rte_zmalloc(qp->name, size, ZIP_CMDQ_ALIGN);\n+\tif (cmdq_addr == NULL)\n+\t\treturn -1;\n+\n+\tcmdq->sw_head = (uint64_t *)cmdq_addr;\n+\tcmdq->va = (uint8_t *)cmdq_addr;\n+\tiova = rte_mem_virt2iova(cmdq_addr);\n+\n+\tcmdq->iova = iova;\n+\n+\tque_sbuf_addr.u = 0ull;\n+\tque_sbuf_addr.s.ptr = (cmdq->iova >> 7);\n+\tzip_reg_write64(vf->vbar0, ZIP_VQ_SBUF_ADDR, que_sbuf_addr.u);\n+\n+\tzip_q_enable(qp);\n+\n+\tmemset(cmdq->va, 0, ZIP_MAX_CMDQ_SIZE);\n+\trte_spinlock_init(&cmdq->qlock);\n+\n+\treturn 0;\n+}\n+\n+int\n+zipvf_q_term(struct zipvf_qp *qp)\n+{\n+\tstruct zipvf_cmdq *cmdq = &qp->cmdq;\n+\tzip_vqx_ena_t que_ena;\n+\tstruct zip_vf *vf = qp->vf;\n+\n+\tif (cmdq->va != NULL) {\n+\t\tmemset(cmdq->va, 0, ZIP_MAX_CMDQ_SIZE);\n+\t\trte_free(cmdq->va);\n+\t}\n+\n+\t/*Disabling the ZIP queue*/\n+\tque_ena.u = 0ull;\n+\tzip_reg_write64(vf->vbar0, ZIP_VQ_ENA, que_ena.u);\n+\n+\treturn 0;\n+}\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 8a58f31f8..1289919cb 100644\n--- a/drivers/compress/octeontx/otx_zip.h\n+++ b/drivers/compress/octeontx/otx_zip.h\n@@ -77,8 +77,54 @@ int octtx_zip_logtype_driver;\n \tZIP_PMD_LOG(INFO, fmt, ## args)\n #define ZIP_PMD_ERR(fmt, args...) \\\n \tZIP_PMD_LOG(ERR, fmt, ## args)\n-#define ZIP_PMD_WARN(fmt, args...) \\\n-\tZIP_PMD_LOG(WARNING, fmt, ## args)\n+\n+/* resources required to process stream */\n+enum {\n+\tRES_BUF = 0,\n+\tCMD_BUF,\n+\tHASH_CTX_BUF,\n+\tDECOMP_CTX_BUF,\n+\tIN_DATA_BUF,\n+\tOUT_DATA_BUF,\n+\tHISTORY_DATA_BUF,\n+\tMAX_BUFS_PER_STREAM\n+} NUM_BUFS_PER_STREAM;\n+\n+\n+struct zipvf_qp;\n+\n+\n+/**\n+ * ZIP instruction Queue\n+ */\n+struct zipvf_cmdq {\n+\trte_spinlock_t qlock;\n+\t/* queue lock */\n+\tuint64_t *sw_head;\n+\t/* pointer to start of 8-byte word length queue-head */\n+\tuint8_t *va;\n+\t/* pointer to instruction queue virtual address */\n+\trte_iova_t iova;\n+\t/* iova addr of cmdq head*/\n+};\n+\n+/**\n+ * ZIP device queue structure\n+ */\n+struct zipvf_qp {\n+\tstruct zipvf_cmdq cmdq;\n+\t/* Hardware instruction queue structure */\n+\tstruct rte_ring *processed_pkts;\n+\t/* Ring for placing processed packets */\n+\tstruct rte_compressdev_stats qp_stats;\n+\t/* Queue pair statistics */\n+\tuint16_t id;\n+\t/* Queue Pair Identifier */\n+\tconst char *name;\n+\t/* Unique Queue Pair Name */\n+\tstruct zip_vf *vf;\n+\t/* pointer to device, queue belongs to */\n+} __rte_cache_aligned;\n \n /**\n  * ZIP VF device structure.\n@@ -104,6 +150,13 @@ zipvf_create(struct rte_compressdev *compressdev);\n int\n zipvf_destroy(struct rte_compressdev *compressdev);\n \n+int\n+zipvf_q_init(struct zipvf_qp *qp);\n+\n+int\n+zipvf_q_term(struct zipvf_qp *qp);\n+\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 b2cb115e0..f6285508a 100644\n--- a/drivers/compress/octeontx/otx_zip_pmd.c\n+++ b/drivers/compress/octeontx/otx_zip_pmd.c\n@@ -11,8 +11,261 @@\n \n #include \"otx_zip.h\"\n \n+static const struct rte_compressdev_capabilities\n+\t\t\t\tocttx_zip_pmd_capabilities[] = {\n+\t{\t.algo = RTE_COMP_ALGO_DEFLATE,\n+\t\t/* Deflate */\n+\t\t.comp_feature_flags =\tRTE_COMP_FF_HUFFMAN_FIXED |\n+\t\t\t\t\tRTE_COMP_FF_HUFFMAN_DYNAMIC,\n+\t\t/* Non sharable Priv XFORM and Stateless */\n+\t\t.window_size = {\n+\t\t\t\t.min = 1,\n+\t\t\t\t.max = 14,\n+\t\t\t\t.increment = 1\n+\t\t\t\t/* size supported 2^1 to 2^14 */\n+\t\t},\n+\t},\n+\tRTE_COMP_END_OF_CAPABILITIES_LIST()\n+};\n+\n+/** Configure device */\n+static int\n+zip_pmd_config(struct rte_compressdev *dev,\n+\t\tstruct rte_compressdev_config *config)\n+{\n+\tint nb_streams;\n+\tchar res_pool[RTE_MEMZONE_NAMESIZE];\n+\tstruct zip_vf *vf;\n+\tstruct rte_mempool *zip_buf_mp;\n+\n+\tif (!config || !dev)\n+\t\treturn -EIO;\n+\n+\tvf = (struct zip_vf *)(dev->data->dev_private);\n+\n+\t/* create pool with maximum numbers of resources\n+\t * required by streams\n+\t */\n+\n+\t/* use common pool for non-shareable priv_xform and stream */\n+\tnb_streams = config->max_nb_priv_xforms + config->max_nb_streams;\n+\n+\tsnprintf(res_pool, RTE_MEMZONE_NAMESIZE, \"octtx_zip_res_pool%u\",\n+\t\t dev->data->dev_id);\n+\n+\t/** TBD Should we use the per core object cache for stream resources */\n+\tzip_buf_mp = rte_mempool_create(\n+\t\t\tres_pool,\n+\t\t\tnb_streams * MAX_BUFS_PER_STREAM,\n+\t\t\tZIP_BUF_SIZE,\n+\t\t\t0,\n+\t\t\t0,\n+\t\t\tNULL,\n+\t\t\tNULL,\n+\t\t\tNULL,\n+\t\t\tNULL,\n+\t\t\tSOCKET_ID_ANY,\n+\t\t\t0);\n+\n+\tif (zip_buf_mp == NULL) {\n+\t\tZIP_PMD_ERR(\n+\t\t\t\"Failed to create buf mempool octtx_zip_res_pool%u\",\n+\t\t\tdev->data->dev_id);\n+\t\treturn -1;\n+\t}\n+\n+\tvf->zip_mp = zip_buf_mp;\n+\n+\treturn 0;\n+}\n+\n+/** Start device */\n+static int\n+zip_pmd_start(__rte_unused struct rte_compressdev *dev)\n+{\n+\treturn 0;\n+}\n+\n+/** Stop device */\n+static void\n+zip_pmd_stop(__rte_unused struct rte_compressdev *dev)\n+{\n+\n+}\n+\n+/** Close device */\n+static int\n+zip_pmd_close(struct rte_compressdev *dev)\n+{\n+\tif (dev == NULL)\n+\t\treturn -1;\n+\n+\tstruct zip_vf *vf = (struct zip_vf *)dev->data->dev_private;\n+\trte_mempool_free(vf->zip_mp);\n+\n+\treturn 0;\n+}\n+\n+/** Get device statistics */\n+static void\n+zip_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 zipvf_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+zip_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 zipvf_qp *qp = dev->data->queue_pairs[qp_id];\n+\t\tmemset(&qp->qp_stats, 0, sizeof(qp->qp_stats));\n+\t}\n+}\n+\n+/** Get device info */\n+static void\n+zip_pmd_info_get(struct rte_compressdev *dev,\n+\t\tstruct rte_compressdev_info *dev_info)\n+{\n+\tstruct zip_vf *vf = (struct zip_vf *)dev->data->dev_private;\n+\n+\tif (dev_info != NULL) {\n+\t\tdev_info->driver_name = dev->device->driver->name;\n+\t\tdev_info->feature_flags = dev->feature_flags;\n+\t\tdev_info->capabilities = octtx_zip_pmd_capabilities;\n+\t\tdev_info->max_nb_queue_pairs = vf->max_nb_queue_pairs;\n+\t}\n+}\n+\n+/** Release queue pair */\n+static int\n+zip_pmd_qp_release(struct rte_compressdev *dev, uint16_t qp_id)\n+{\n+\tstruct zipvf_qp *qp = dev->data->queue_pairs[qp_id];\n+\n+\tif (qp != NULL) {\n+\t\tzipvf_q_term(qp);\n+\n+\t\tif (qp->processed_pkts)\n+\t\t\trte_ring_free(qp->processed_pkts);\n+\n+\t\trte_free(qp);\n+\t\tdev->data->queue_pairs[qp_id] = NULL;\n+\t}\n+\treturn 0;\n+}\n+\n+/** Create a ring to place process packets on */\n+static struct rte_ring *\n+zip_pmd_qp_create_processed_pkts_ring(struct zipvf_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\tZIP_PMD_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\tZIP_PMD_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+zip_pmd_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,\n+\t\tuint32_t max_inflight_ops, int socket_id)\n+{\n+\tstruct zipvf_qp *qp = NULL;\n+\tstruct zip_vf *vf;\n+\tchar *name;\n+\tint ret;\n+\n+\tif (!dev)\n+\t\treturn -1;\n+\n+\tvf = (struct zip_vf *) (dev->data->dev_private);\n+\n+\t/* Free memory prior to re-allocation if needed. */\n+\tif (dev->data->queue_pairs[qp_id] != NULL) {\n+\t\tZIP_PMD_INFO(\"Using existing queue pair %d \", qp_id);\n+\t\treturn 0;\n+\t}\n+\n+\tname =  rte_malloc(NULL, RTE_COMPRESSDEV_NAME_MAX_LEN, 0);\n+\tsnprintf(name, RTE_COMPRESSDEV_NAME_MAX_LEN,\n+\t\t \"zip_pmd_%u_qp_%u\",\n+\t\t dev->data->dev_id, qp_id);\n+\n+\t/* Allocate the queue pair data structure. */\n+\tqp = rte_zmalloc_socket(name, sizeof(*qp),\n+\t\t\t\tRTE_CACHE_LINE_SIZE, socket_id);\n+\tif (qp == NULL)\n+\t\treturn (-ENOMEM);\n+\n+\tqp->name = name;\n+\n+\t/* Create completion queue upto max_inflight_ops */\n+\tqp->processed_pkts = zip_pmd_qp_create_processed_pkts_ring(qp,\n+\t\t\t\t\t\tmax_inflight_ops, socket_id);\n+\tif (qp->processed_pkts == NULL)\n+\t\tgoto qp_setup_cleanup;\n+\n+\tqp->id = qp_id;\n+\tqp->vf = vf;\n+\n+\tret = zipvf_q_init(qp);\n+\tif (ret < 0)\n+\t\tgoto qp_setup_cleanup;\n+\n+\tdev->data->queue_pairs[qp_id] = qp;\n+\n+\tmemset(&qp->qp_stats, 0, sizeof(qp->qp_stats));\n+\treturn 0;\n+\n+qp_setup_cleanup:\n+\tif (qp->processed_pkts)\n+\t\trte_ring_free(qp->processed_pkts);\n+\tif (qp)\n+\t\trte_free(qp);\n+\treturn -1;\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+\t\t.dev_stop\t\t= zip_pmd_stop,\n+\t\t.dev_close\t\t= zip_pmd_close,\n+\n+\t\t.stats_get\t\t= zip_pmd_stats_get,\n+\t\t.stats_reset\t\t= zip_pmd_stats_reset,\n+\n+\t\t.dev_infos_get\t\t= zip_pmd_info_get,\n \n+\t\t.queue_pair_setup\t= zip_pmd_qp_setup,\n+\t\t.queue_pair_release\t= zip_pmd_qp_release,\n };\n \n static int\n",
    "prefixes": [
        "v3",
        "2/6"
    ]
}