get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 43360,
    "url": "http://patches.dpdk.org/api/patches/43360/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180725170456.3319-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": "<20180725170456.3319-3-Ashish.Gupta@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180725170456.3319-3-Ashish.Gupta@caviumnetworks.com",
    "date": "2018-07-25T17:04:52",
    "name": "[v4,2/6] compress/octeontx: add device setup PMD ops",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "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/20180725170456.3319-3-Ashish.Gupta@caviumnetworks.com/mbox/",
    "series": [
        {
            "id": 773,
            "url": "http://patches.dpdk.org/api/series/773/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=773",
            "date": "2018-07-25T17:04:50",
            "name": "compress: add Octeontx ZIP compression PMD",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/773/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/43360/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/43360/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 8E9BE34EF;\n\tWed, 25 Jul 2018 18:43:06 +0200 (CEST)",
            "from NAM01-BN3-obe.outbound.protection.outlook.com\n\t(mail-bn3nam01on0045.outbound.protection.outlook.com [104.47.33.45])\n\tby dpdk.org (Postfix) with ESMTP id 4E4C2F72\n\tfor <dev@dpdk.org>; Wed, 25 Jul 2018 18:43:04 +0200 (CEST)",
            "from hyd1agupta-dt.caveonetworks.com (115.113.156.2) by\n\tCY4PR07MB3062.namprd07.prod.outlook.com (2603:10b6:903:d1::15) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.973.21; Wed, 25 Jul 2018 16:42: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=KY6dYFSsjpaT3llV95gDFLpEXmNzYgvujQi2CV3Fu/o=;\n\tb=ThxN4+xIOaL3JWuIPYEQo5ykR+2fcZlx44zI3esnqwysUMD9WKLxszMzJnxRi5N7ear17hFvfU22EyGjq/B8vGRatp729WsfG0EiANg1IZkLPsKs/oNdbAKDS0KXMWegTRPvBIb9G2hVGicBaLqthqCyQthxHw3PbOejmqNRSyE=",
        "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\tfiona.trahe@intel.com, Ashish Gupta <ashish.gupta@caviumnetworks.com>,\n\tShally Verma <shally.verma@caviumnetworks.com>,\n\tSunila Sahu <sunila.sahu@caviumnetworks.com>",
        "Date": "Wed, 25 Jul 2018 22:34:52 +0530",
        "Message-Id": "<20180725170456.3319-3-Ashish.Gupta@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.14.3",
        "In-Reply-To": "<20180725170456.3319-1-Ashish.Gupta@caviumnetworks.com>",
        "References": "<20180725170456.3319-1-Ashish.Gupta@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[115.113.156.2]",
        "X-ClientProxiedBy": "MA1PR01CA0106.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:a00:1::22) To CY4PR07MB3062.namprd07.prod.outlook.com\n\t(2603:10b6:903:d1::15)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "e298c970-0c86-4ff1-1993-08d5f24db036",
        "X-Microsoft-Antispam": "BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989117)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(5600073)(711020)(2017052603328)(7153060)(7193020);\n\tSRVR:CY4PR07MB3062; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; CY4PR07MB3062;\n\t3:dffjdJ4Y5ii7TUz1XcdbMfV3yzVASK94wWX+YWFlIfKq73aym2o+qOfWHTlCD311B91MBoW9Cy1zWfgrJwf21jUvNiQH2q+D3bWHgRT/+yW5ru9H7AIroKAa/RpVWiZZPfqH8Ey85vHH36S2Nn+L8ifNGT5EqvjfTpd99pPLfcc6/pikWLWZ0agDhQO3SISKwoN+N9iVTgjaee/tEQIjfj/mNr+XIt9FoMLD+I3dG8Imn2x3Q/GIsnuN2uqWOhFC;\n\t25:mMYJwQoHJwfxncj35gXPUhzGpZmsf29Rdi1GIXB7JWJgqmp5j/sOOAMxnRB3OpOhFHVvuvwUo8XPqWHbakSWDXWMAH/Yg/tVMpnAVoy97uYmcxXTl5MGk4i7iD7DbBvzj1nnyYZB2aJrfkUbMeq/mc4QGJ6roQDgY/i+hV3p34YlJ3H+rV8+qH2l3vqdn5iA1S4WDudn/8qsXJt3p7waw7b/aIB8RKZBtJqrrPhmkXC8q6LhLZWGkSgRZM8C+1NJT7KbNOHKmgRii12vCwGXkBlUz5wq8stHHYBq8TkdgaY9IygoJ66BBDaEGuFxnjjAfEm/Qr8RxmYsJzans9WGbA==;\n\t31:STamSYOV52djxgKuv2Ll210WeoN7DaEt0IEkpQYftIkBIDZIEiaAJCtmPZ4PfyowfpeJBbttAIlcZGCPndVKXgobDpLNsZ0srSk13ipkFgoKJLZomoNIxekHFRzztFgoPBYgJCGddT1JSXV0S179Mh9n8c09ymg9cD1vV/D8/BCOEhpYcZ/3ZL44Ja2Kp4rBx/rjEnRysAN3myEPE8T7cnwFGFMYWHkt4gkEe1G3W0w=",
            "1; CY4PR07MB3062;\n\t20:MPRWlmhdH4/gQKrf5K2s5oCkWz0jqAivFFQ8CAkNfUAOwk0sbdVkWAKL25nRngJWIQkdL+Lxi8PQ4l/orOGtloJpn9e34GebQsr1p5LKUXX9BDKm8jMIcyC/JQ3oJ74nt9CLabw8E3RvlcKJoMDvHZ8k1ENn2Cb3GmiSCERUDhMn+Uym3E7mP6wO95NvxFuRvP9gxUTbcVxwcfkd7QuDM1H+vTyB+I9IJSCyJa9vJ3bRYisLwroG8MhM1PKYtf8dtR9ccyluxsg4Oh60AqthBnMkRx+rfMowJwi7B/CPV+WQTjWR8ekPUcUaCWarNc0ritdN14wTGarUHhezH5jEk9wgH4WdJhyXuUjVLznUfzPa6nRMuLEkSS3yPV38I+CUoABERAXmRTKviLzf2P7aw1V5gafwMN55CgseWCgmK1ceOWyVkcJi/iTkKXY0lcjZ6OcX15G5o+uRIoapHynciq6KWX8kB9axsTO1Y/hqlPJCeaAFDYTESdv1sqZHpPImtwVPn6x8VT/CWpZnnwM6c/vSQavQijOupi+JpPj3coU73ASHVt25hacOyZHCuN6cxtcdrcVzx5O2xsa01XgqYRgD48tx1nVO0lw7CTH+jyY=;\n\t4:e2b+riG6jj1+g68a2Q6knWTknlCLni5h9psForjOSZK9fP0BlOXhuPy5R47tMsUaw0NnpN86iRiM8PfH0q5pGuUhFz/YBiUXTWLSFSgJCGDJHOaGAVRzoLXN/xlYNC9oZPwFysiU2EYGPmxLCSQKTlcMtgbjtopAEOOs+lbC3Z77T+dPEFLhZMVAoY7fAAGaU8R5Y6vwaPWUd/7q+6RpA1P9kvhAUOnbHtLi0GXtCVPX2qVHTro4b8C3iXPqzC+vWXqBjq2tkVs2eQHfehOMQQ==",
            "=?us-ascii?Q?1; CY4PR07MB3062;\n\t23:4O43mD77iqObezHre9TlUnj8IhWK47n8cB/F9KfpJ?=\n\tChOvXIN+BrX9JZKvutF11poZ2fCmgMgMOWQg1v9PvvF5MV7/1hZJk/Oo4WPWByfYoSR/gAk2OCfFBlKedBIlmREASI4TtWEELiKFnA2v/U7zCEHRUebabASzOIHwmwq6ne1K79p8MQtsAqdMOffbJK1GRHKwK1robycxIQ32PL5J0XPXv5ABpdZCx41limJgsrWGgDugNzYXhnIxATElxfkRFyCHzHJ8RRk2ekBFVJ7qJrx6mDGh/fg2ekNwRHjcYWLUFo+UFimuq/0cq3s+2gnfsDXkqtlTwVGfQIU4ykh22X0S4yaS7xKdLfktgZfopeuuKuDxkmvdksPj6xLmcwtR9+j6FxKvbr3kE2brH4zK1dXtj6hjkgTUDjRu6eb4kXv4HMBfGTE/ZX6e7f/FwHg7LEZheN12OI3ynsSucdbiEL9EUZF18ZzD+FMTD8v/5YIdSaRi8gmNebJbvuLYRUNXM7xpoUbgAzKrmEGQIBFC/Ka7wvjiwsE1FBXl/s62snJKPf63Zf9cQftfapxuRSd3HJXteXzpgQIgSAewLe5cOe8x2UpmYBxywobhjoxydWVLlTg3+D4e/XCgJtbsrrcl2vtgSEeUGiLLCIjenLFNXVYXLP0pc+Q/RzoJRT9bXNsGdxv3Z0VhADpjaH8U02wURvYrKz2/3WvnKtYq+z03d7r1bhWbN2kE/fvKDjwHzG78y5WefFAi6ZaeW0TObYFqeuqNd05v1W/qnReiFjyfFOPUQzRTVFfjrAmYfs0nlBeV4FUUivjEbkhxCdRBPHzOrQMe2ytDD6BzhPwLfEEZRR/dcI5LeDH47QrekgOHouRimLMRJVlRtjFSypYOezETCikPVjDcBpR22xIYbWeVdLRa6O/x1pYoUNzI7ChSVhNE5QWruXKNYFbUToX79EFJM6YysyU/vzke3QF2bmQE2zRSN7J5w1oHYHYWRNHN2rzPHvTdVyMjeXGmZ1jIWwgT2ebvyXD4bQH3MUDcBNXAFQQ62npHKnWEhkewrOVs+/2xPcFfoGdkwk9kiodAlUqdbFvDufk23stlyyP7AlypxArtHCRmTIu3TOViTWrZHIPfgsboumH2vP1kjtO0bBvk6vNPBfvWMaO6AzLX3F2BHUw9g2UJ1WlBSo1jN/bZfsIECDTwMr0Z7ErGgKfVbQxCrlNDB/bDGy9YXb3N+MxjIHy7/OhE32UyWzAqxVcH7h6bXTPmxu33QkW51eM+qswPQrI9QhgPl9aZZjoskrZVhiEBVABkPApo/yhybKMChe5Akwpbb1jXC1ntzyr+A7TwFX2BWjU2A4JhnYHWWI51tEE8z/gEX7ISKZDdGQZr/I=",
            "1; CY4PR07MB3062;\n\t6:mOQnubDq+spOPUM7qF7O2QJi+ldsKL1DHL/iUFyL1y2Q6bO5EV2sQKr49zQfF3y1NCX2l2kL38UJl0xrMbNptp2C7DXBwB6DYtDtjD9/QTd2XtclEHXKJKasZP3ZQPQcJubzkStKQnAXbkUavAaBtgrpShOEYP1eXxmIYGgZ8NbhK7DLFjC4cWpjuyaGVajUiHJf1b8wJQEmxQYyXfB7KnO+svQOAjBS5P+nieu4MnmKiCoN55iU74m2fAxsnhVPXrHA1eNtj3rIHcgsNrbsf1dcBZpt7skBxqgn/OHnypDpWZ6cVnoBJs/Kq3zctb70OhSqZEi7dWbVXY9MwfvH5QkDBTh1NV95AGhRwElQXQZ2p4YnwPUIwBhU3v9h3uLmPx2CSZOKuwAHnl6xOaB+HX+Yk0T95SsLFC0yQHhFKm4hCJuEkordJ5ssN88iUr9YkUgr49WJVYe1zY3W1hiLFA==;\n\t5:f+sq/ix9mSI46nj7uQ8faVsSHVhm+uXsX9tEImddyeRLCxCXkNUbr+2D2bYW1RqjZfS0lnmKh2ylcyOTn0MG2V7Gl/Qj/a+vVM7TpYm6AsaKSvasULXqhrRfFfvmLuuPB6NJ0NfEIfZLsGF8eM5M4YnfQ23uJAS3ZhtN8RmidvU=;\n\t7:yk5Ah49TX8mVsTbrr+V3KGwI+ch8G646NAFXXiE2c5Vdsuxc5/MtTuY5M4XQalejDYPjOXRvY1cnqTKgqRhUzIfdUoCBeNX1nMeKgsETugYUGoB36qGBjs1z+233zhUl28BVlbIT30mQZaHHTz1M0ligTLjGMpvhm/pb//ELjy3rIB5Lcs9T4YCEqgPrG9z9fZbAl1thGTazYqMzHdOVPGmUaocDk6FYSbg6dUkDSAT/BBQzLg5rPGdCQHF0lsUp"
        ],
        "X-MS-TrafficTypeDiagnostic": "CY4PR07MB3062:",
        "X-Microsoft-Antispam-PRVS": "<CY4PR07MB3062CE6ACC2412C6272CA08EE1540@CY4PR07MB3062.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)(10201501046)(3002001)(93006095)(3231311)(944501410)(52105095)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016);\n\tSRVR:CY4PR07MB3062; BCL:0; PCL:0; RULEID:; SRVR:CY4PR07MB3062; ",
        "X-Forefront-PRVS": "0744CFB5E8",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(396003)(376002)(346002)(136003)(366004)(39860400002)(189003)(199004)(2616005)(956004)(446003)(25786009)(69596002)(6486002)(2351001)(53416004)(81156014)(8676002)(11346002)(47776003)(105586002)(4326008)(66066001)(81166006)(486006)(8936002)(476003)(2361001)(26005)(186003)(16526019)(42882007)(7736002)(106356001)(68736007)(386003)(305945005)(6506007)(50226002)(107886003)(6512007)(51416003)(48376002)(52116002)(54906003)(72206003)(14444005)(50466002)(6666003)(97736004)(6916009)(5660300001)(478600001)(76176011)(16586007)(53936002)(3846002)(36756003)(2906002)(6116002)(55236004)(1076002)(316002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB3062;\n\tH:hyd1agupta-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": "iJvS17CwqlHLf+ws6PK8MKQy2w1mrUuaZ2ymU+tWRk3ggwWjFDL3H1VpoGb14lkrN91Z7MF4NJBPP3upMrcANsYVCrGgLeLUvDcQe5xmR5vaYhR+lpvir6K83a0wOo5PAgr2G/yLbpd0ATIrndvnrYQGceP2gQNyeV0ywTH0+BiIkxaGbFvzqn7Jas9JBOb6vU69BNiSxTPdYv8zVloqvYFiCDzQ6U/RyUuFtVQW38SwMGEXGIG0v0HjsAuJfn17SUroa9hsuGZy6lF/m9H+4WFWUZPW2SW3Fmq7itaxxWmxmXz5rbbhf2yDmbwc4b+EqrEXdOc+gzqOmjD11p1GTfTAEXNN7k8dp/BrvCmEA/c=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "25 Jul 2018 16:42:59.9920\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "e298c970-0c86-4ff1-1993-08d5f24db036",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY4PR07MB3062",
        "Subject": "[dpdk-dev] [PATCH v4 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 7a1dd58..7c81db1 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 8a58f31..1289919 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 4d92c9d..b670f87 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": [
        "v4",
        "2/6"
    ]
}