get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 136594,
    "url": "https://patches.dpdk.org/api/patches/136594/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20240212134743.15153-4-rnagadheeraj@marvell.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20240212134743.15153-4-rnagadheeraj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240212134743.15153-4-rnagadheeraj@marvell.com",
    "date": "2024-02-12T13:47:39",
    "name": "[v2,3/7] common/nitrox: add compress hardware queue management",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "d1469a4d1b6c828e8fa9094c776143e241897259",
    "submitter": {
        "id": 1365,
        "url": "https://patches.dpdk.org/api/people/1365/?format=api",
        "name": "Nagadheeraj Rottela",
        "email": "rnagadheeraj@marvell.com"
    },
    "delegate": {
        "id": 6690,
        "url": "https://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20240212134743.15153-4-rnagadheeraj@marvell.com/mbox/",
    "series": [
        {
            "id": 31075,
            "url": "https://patches.dpdk.org/api/series/31075/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=31075",
            "date": "2024-02-12T13:47:36",
            "name": "add Nitrox compress device support",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/31075/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/136594/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/136594/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 2C67943B01;\n\tMon, 12 Feb 2024 14:48:17 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 398B340DC9;\n\tMon, 12 Feb 2024 14:48:03 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 8E53140A79\n for <dev@dpdk.org>; Mon, 12 Feb 2024 14:48:01 +0100 (CET)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id\n 41C2U7cn023155; Mon, 12 Feb 2024 05:48:01 -0800",
            "from dc5-exch01.marvell.com ([199.233.59.181])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3w69hkc8bm-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Mon, 12 Feb 2024 05:48:00 -0800 (PST)",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48;\n Mon, 12 Feb 2024 05:47:58 -0800",
            "from hyd1399.caveonetworks.com.com (10.69.176.80) by\n DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id\n 15.0.1497.48 via Frontend Transport; Mon, 12 Feb 2024 05:47:56 -0800"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=\n from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding:content-type; s=\n pfpt0220; bh=F9f8P0Hd1RrWedPllQBKMuFrx8fjA93arBbjU3NwDxE=; b=UJx\n ofgQOw1Smfj56YtXq4NPClkk1aTpU/GJ9cXn+TiYHEG+S4kuADhkZ7E5VPnqxaPu\n 3ctulW0sc2up/6rBvoOgt7opY2Z39nC/aBpEvsTvxNbKZHai+Kxy00lU05qDaGYT\n oY7J4BnQfiFHJBEHEz+sC3IkztSYnx0CAiktgI4j/himgnya2jh9JvNCnWgWpU8Y\n T2EuwEzJPXLeRGNaUfjz/ouMffv4vpCJ01cUJelnHGmaw2n5irRLLVe7v1XnNsWU\n 7mZhT8fQtBwr79ZPeZNCRdtPwizLA5tVCDoClxKmJMKaQJh+1Cs/u8Fh97kYwbs7\n vTV11DA3Jo13/Y8+RDg==",
        "From": "Nagadheeraj Rottela <rnagadheeraj@marvell.com>",
        "To": "<gakhil@marvell.com>, <fanzhang.oss@gmail.com>, <ashishg@marvell.com>",
        "CC": "<dev@dpdk.org>, Nagadheeraj Rottela <rnagadheeraj@marvell.com>",
        "Subject": "[PATCH v2 3/7] common/nitrox: add compress hardware queue management",
        "Date": "Mon, 12 Feb 2024 19:17:39 +0530",
        "Message-ID": "<20240212134743.15153-4-rnagadheeraj@marvell.com>",
        "X-Mailer": "git-send-email 2.42.0",
        "In-Reply-To": "<20240212134743.15153-1-rnagadheeraj@marvell.com>",
        "References": "<20240212134743.15153-1-rnagadheeraj@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "LGR-7mMDlvy80Cf2RHS-flgODGnYE2lo",
        "X-Proofpoint-GUID": "LGR-7mMDlvy80Cf2RHS-flgODGnYE2lo",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26\n definitions=2024-02-12_10,2024-02-12_03,2023-05-22_02",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <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 <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Add compress device ring initialization and cleanup code.\n\nSigned-off-by: Nagadheeraj Rottela <rnagadheeraj@marvell.com>\n---\n drivers/common/nitrox/nitrox_csr.h |  12 +++\n drivers/common/nitrox/nitrox_hal.c | 116 +++++++++++++++++++++++++++++\n drivers/common/nitrox/nitrox_hal.h | 115 ++++++++++++++++++++++++++++\n drivers/common/nitrox/nitrox_qp.c  |  53 +++++++++++--\n drivers/common/nitrox/nitrox_qp.h  |  35 ++++++++-\n 5 files changed, 322 insertions(+), 9 deletions(-)",
    "diff": "diff --git a/drivers/common/nitrox/nitrox_csr.h b/drivers/common/nitrox/nitrox_csr.h\nindex de7a3c6713..97c797c2e2 100644\n--- a/drivers/common/nitrox/nitrox_csr.h\n+++ b/drivers/common/nitrox/nitrox_csr.h\n@@ -25,6 +25,18 @@\n /* AQM Virtual Function Registers */\n #define AQMQ_QSZX(_i)\t\t\t(0x20008UL + ((_i) * 0x40000UL))\n \n+/* ZQM virtual function registers */\n+#define ZQMQ_DRBLX(_i)\t\t\t(0x30000UL + ((_i) * 0x40000UL))\n+#define ZQMQ_QSZX(_i)\t\t\t(0x30008UL + ((_i) * 0x40000UL))\n+#define ZQMQ_BADRX(_i)\t\t\t(0x30010UL + ((_i) * 0x40000UL))\n+#define ZQMQ_NXT_CMDX(_i)\t\t(0x30018UL + ((_i) * 0x40000UL))\n+#define ZQMQ_CMD_CNTX(_i)\t\t(0x30020UL + ((_i) * 0x40000UL))\n+#define ZQMQ_CMP_THRX(_i)\t\t(0x30028UL + ((_i) * 0x40000UL))\n+#define ZQMQ_CMP_CNTX(_i)\t\t(0x30030UL + ((_i) * 0x40000UL))\n+#define ZQMQ_TIMER_LDX(_i)\t\t(0x30038UL + ((_i) * 0x40000UL))\n+#define ZQMQ_ENX(_i)\t\t\t(0x30048UL + ((_i) * 0x40000UL))\n+#define ZQMQ_ACTIVITY_STATX(_i)\t\t(0x30050UL + ((_i) * 0x40000UL))\n+\n static inline uint64_t\n nitrox_read_csr(uint8_t *bar_addr, uint64_t offset)\n {\ndiff --git a/drivers/common/nitrox/nitrox_hal.c b/drivers/common/nitrox/nitrox_hal.c\nindex 433f3adb20..451549a664 100644\n--- a/drivers/common/nitrox/nitrox_hal.c\n+++ b/drivers/common/nitrox/nitrox_hal.c\n@@ -9,6 +9,7 @@\n \n #include \"nitrox_hal.h\"\n #include \"nitrox_csr.h\"\n+#include \"nitrox_logs.h\"\n \n #define MAX_VF_QUEUES\t8\n #define MAX_PF_QUEUES\t64\n@@ -164,6 +165,121 @@ setup_nps_pkt_solicit_output_port(uint8_t *bar_addr, uint16_t port)\n \t}\n }\n \n+int\n+zqmq_input_ring_disable(uint8_t *bar_addr, uint16_t ring)\n+{\n+\tunion zqmq_activity_stat zqmq_activity_stat;\n+\tunion zqmq_en zqmq_en;\n+\tunion zqmq_cmp_cnt zqmq_cmp_cnt;\n+\tuint64_t reg_addr;\n+\tint max_retries = 5;\n+\n+\t/* clear queue enable */\n+\treg_addr = ZQMQ_ENX(ring);\n+\tzqmq_en.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tzqmq_en.s.queue_enable = 0;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_en.u64);\n+\trte_delay_us_block(100);\n+\n+\t/* wait for queue active to clear */\n+\treg_addr = ZQMQ_ACTIVITY_STATX(ring);\n+\tzqmq_activity_stat.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\twhile (zqmq_activity_stat.s.queue_active && max_retries--) {\n+\t\trte_delay_ms(10);\n+\t\tzqmq_activity_stat.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\t}\n+\n+\tif (zqmq_activity_stat.s.queue_active) {\n+\t\tNITROX_LOG(ERR, \"Failed to disable zqmq ring %d\\n\", ring);\n+\t\treturn -EBUSY;\n+\t}\n+\n+\t/* clear commands completed count */\n+\treg_addr = ZQMQ_CMP_CNTX(ring);\n+\tzqmq_cmp_cnt.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_cmp_cnt.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\treturn 0;\n+}\n+\n+int\n+setup_zqmq_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,\n+\t\t      phys_addr_t raddr)\n+{\n+\tunion zqmq_drbl zqmq_drbl;\n+\tunion zqmq_qsz zqmq_qsz;\n+\tunion zqmq_en zqmq_en;\n+\tunion zqmq_cmp_thr zqmq_cmp_thr;\n+\tunion zqmq_timer_ld zqmq_timer_ld;\n+\tuint64_t reg_addr = 0;\n+\tint max_retries = 5;\n+\tint err = 0;\n+\n+\terr = zqmq_input_ring_disable(bar_addr, ring);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* clear doorbell count */\n+\treg_addr = ZQMQ_DRBLX(ring);\n+\tzqmq_drbl.u64 = 0;\n+\tzqmq_drbl.s.dbell_count = 0xFFFFFFFF;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_drbl.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\treg_addr = ZQMQ_NXT_CMDX(ring);\n+\tnitrox_write_csr(bar_addr, reg_addr, 0);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* write queue length */\n+\treg_addr = ZQMQ_QSZX(ring);\n+\tzqmq_qsz.u64 = 0;\n+\tzqmq_qsz.s.host_queue_size = rsize;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_qsz.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* write queue base address */\n+\treg_addr = ZQMQ_BADRX(ring);\n+\tnitrox_write_csr(bar_addr, reg_addr, raddr);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* write commands completed threshold */\n+\treg_addr = ZQMQ_CMP_THRX(ring);\n+\tzqmq_cmp_thr.u64 = 0;\n+\tzqmq_cmp_thr.s.commands_completed_threshold = 0;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_cmp_thr.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* write timer load value */\n+\treg_addr = ZQMQ_TIMER_LDX(ring);\n+\tzqmq_timer_ld.u64 = 0;\n+\tzqmq_timer_ld.s.timer_load_value = 0;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_timer_ld.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\treg_addr = ZQMQ_ENX(ring);\n+\tzqmq_en.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tzqmq_en.s.queue_enable = 1;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_en.u64);\n+\trte_delay_us_block(100);\n+\n+\t/* enable queue */\n+\tzqmq_en.u64 = 0;\n+\tzqmq_en.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\twhile (!zqmq_en.s.queue_enable && max_retries--) {\n+\t\trte_delay_ms(10);\n+\t\tzqmq_en.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\t}\n+\n+\tif (!zqmq_en.s.queue_enable) {\n+\t\tNITROX_LOG(ERR, \"Failed to enable zqmq ring %d\\n\", ring);\n+\t\terr = -EFAULT;\n+\t} else {\n+\t\terr = 0;\n+\t}\n+\n+\treturn err;\n+}\n+\n int\n vf_get_vf_config_mode(uint8_t *bar_addr)\n {\ndiff --git a/drivers/common/nitrox/nitrox_hal.h b/drivers/common/nitrox/nitrox_hal.h\nindex dcfbd11d85..2367b967e5 100644\n--- a/drivers/common/nitrox/nitrox_hal.h\n+++ b/drivers/common/nitrox/nitrox_hal.h\n@@ -146,6 +146,101 @@ union aqmq_qsz {\n \t} s;\n };\n \n+union zqmq_activity_stat {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 63;\n+\t\tuint64_t queue_active\t: 1;\n+#else\n+\t\tuint64_t queue_active\t: 1;\n+\t\tuint64_t raz\t\t: 63;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_en {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 63;\n+\t\tuint64_t queue_enable\t: 1;\n+#else\n+\t\tuint64_t queue_enable\t: 1;\n+\t\tuint64_t raz\t\t: 63;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_cmp_cnt {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t\t: 30;\n+\t\tuint64_t resend\t\t\t: 1;\n+\t\tuint64_t completion_status\t: 1;\n+\t\tuint64_t commands_completed_count: 32;\n+#else\n+\t\tuint64_t commands_completed_count: 32;\n+\t\tuint64_t completion_status\t: 1;\n+\t\tuint64_t resend\t\t\t: 1;\n+\t\tuint64_t raz\t\t\t: 30;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_drbl {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 32;\n+\t\tuint64_t dbell_count\t: 32;\n+#else\n+\t\tuint64_t dbell_count\t: 32;\n+\t\tuint64_t raz\t\t: 32;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_qsz {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 32;\n+\t\tuint64_t host_queue_size: 32;\n+#else\n+\t\tuint64_t host_queue_size: 32;\n+\t\tuint64_t raz\t\t: 32;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_cmp_thr {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t\t\t: 32;\n+\t\tuint64_t commands_completed_threshold\t: 32;\n+#else\n+\t\tuint64_t commands_completed_threshold\t: 32;\n+\t\tuint64_t raz\t\t\t\t: 32;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_timer_ld {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 32;\n+\t\tuint64_t timer_load_value: 32;\n+#else\n+\t\tuint64_t timer_load_value: 32;\n+\t\tuint64_t raz\t\t: 32;\n+#endif\n+\t} s;\n+};\n+\n enum nitrox_vf_mode {\n \tNITROX_MODE_PF = 0x0,\n \tNITROX_MODE_VF16 = 0x1,\n@@ -154,6 +249,23 @@ enum nitrox_vf_mode {\n \tNITROX_MODE_VF128 = 0x4,\n };\n \n+static inline int\n+inc_zqmq_next_cmd(uint8_t *bar_addr, uint16_t ring)\n+{\n+\tuint64_t reg_addr = 0;\n+\tuint64_t val;\n+\n+\treg_addr = ZQMQ_NXT_CMDX(ring);\n+\tval = nitrox_read_csr(bar_addr, reg_addr);\n+\tval++;\n+\tnitrox_write_csr(bar_addr, reg_addr, val);\n+\trte_delay_us_block(CSR_DELAY);\n+\tif (nitrox_read_csr(bar_addr, reg_addr) != val)\n+\t\treturn -EIO;\n+\n+\treturn 0;\n+}\n+\n int vf_get_vf_config_mode(uint8_t *bar_addr);\n int vf_config_mode_to_nr_queues(enum nitrox_vf_mode vf_mode);\n void setup_nps_pkt_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,\n@@ -161,5 +273,8 @@ void setup_nps_pkt_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,\n void setup_nps_pkt_solicit_output_port(uint8_t *bar_addr, uint16_t port);\n void nps_pkt_input_ring_disable(uint8_t *bar_addr, uint16_t ring);\n void nps_pkt_solicited_port_disable(uint8_t *bar_addr, uint16_t port);\n+int setup_zqmq_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,\n+\t\t\t  phys_addr_t raddr);\n+int zqmq_input_ring_disable(uint8_t *bar_addr, uint16_t ring);\n \n #endif /* _NITROX_HAL_H_ */\ndiff --git a/drivers/common/nitrox/nitrox_qp.c b/drivers/common/nitrox/nitrox_qp.c\nindex 5e85ccbd51..6ec0781f1a 100644\n--- a/drivers/common/nitrox/nitrox_qp.c\n+++ b/drivers/common/nitrox/nitrox_qp.c\n@@ -2,7 +2,7 @@\n  * Copyright(C) 2019 Marvell International Ltd.\n  */\n \n-#include <rte_cryptodev.h>\n+#include <rte_memzone.h>\n #include <rte_malloc.h>\n \n #include \"nitrox_qp.h\"\n@@ -20,6 +20,7 @@ nitrox_setup_cmdq(struct nitrox_qp *qp, uint8_t *bar_addr,\n \tconst struct rte_memzone *mz;\n \tsize_t cmdq_size = qp->count * instr_size;\n \tuint64_t offset;\n+\tint err = 0;\n \n \tsnprintf(mz_name, sizeof(mz_name), \"%s_cmdq_%d\", dev_name, qp->qno);\n \tmz = rte_memzone_reserve_aligned(mz_name, cmdq_size, socket_id,\n@@ -32,14 +33,34 @@ nitrox_setup_cmdq(struct nitrox_qp *qp, uint8_t *bar_addr,\n \t\treturn -ENOMEM;\n \t}\n \n+\tswitch (qp->type) {\n+\tcase NITROX_QUEUE_SE:\n+\t\toffset = NPS_PKT_IN_INSTR_BAOFF_DBELLX(qp->qno);\n+\t\tqp->cmdq.dbell_csr_addr = NITROX_CSR_ADDR(bar_addr, offset);\n+\t\tsetup_nps_pkt_input_ring(bar_addr, qp->qno, qp->count,\n+\t\t\t\t\t mz->iova);\n+\t\tsetup_nps_pkt_solicit_output_port(bar_addr, qp->qno);\n+\t\tbreak;\n+\tcase NITROX_QUEUE_ZIP:\n+\t\toffset = ZQMQ_DRBLX(qp->qno);\n+\t\tqp->cmdq.dbell_csr_addr = NITROX_CSR_ADDR(bar_addr, offset);\n+\t\terr = setup_zqmq_input_ring(bar_addr, qp->qno, qp->count,\n+\t\t\t\t\t    mz->iova);\n+\t\tbreak;\n+\tdefault:\n+\t\tNITROX_LOG(ERR, \"Invalid queue type %d\\n\", qp->type);\n+\t\terr = -EINVAL;\n+\t\tbreak;\n+\t}\n+\n+\tif (err) {\n+\t\trte_memzone_free(mz);\n+\t\treturn err;\n+\t}\n+\n \tqp->cmdq.mz = mz;\n-\toffset = NPS_PKT_IN_INSTR_BAOFF_DBELLX(qp->qno);\n-\tqp->cmdq.dbell_csr_addr = NITROX_CSR_ADDR(bar_addr, offset);\n \tqp->cmdq.ring = mz->addr;\n \tqp->cmdq.instr_size = instr_size;\n-\tsetup_nps_pkt_input_ring(bar_addr, qp->qno, qp->count, mz->iova);\n-\tsetup_nps_pkt_solicit_output_port(bar_addr, qp->qno);\n-\n \treturn 0;\n }\n \n@@ -62,8 +83,23 @@ nitrox_setup_ridq(struct nitrox_qp *qp, int socket_id)\n static int\n nitrox_release_cmdq(struct nitrox_qp *qp, uint8_t *bar_addr)\n {\n-\tnps_pkt_solicited_port_disable(bar_addr, qp->qno);\n-\tnps_pkt_input_ring_disable(bar_addr, qp->qno);\n+\tint err = 0;\n+\n+\tswitch (qp->type) {\n+\tcase NITROX_QUEUE_SE:\n+\t\tnps_pkt_solicited_port_disable(bar_addr, qp->qno);\n+\t\tnps_pkt_input_ring_disable(bar_addr, qp->qno);\n+\t\tbreak;\n+\tcase NITROX_QUEUE_ZIP:\n+\t\terr = zqmq_input_ring_disable(bar_addr, qp->qno);\n+\t\tbreak;\n+\tdefault:\n+\t\terr = -EINVAL;\n+\t}\n+\n+\tif (err)\n+\t\treturn err;\n+\n \treturn rte_memzone_free(qp->cmdq.mz);\n }\n \n@@ -83,6 +119,7 @@ nitrox_qp_setup(struct nitrox_qp *qp, uint8_t *bar_addr, const char *dev_name,\n \t\treturn -EINVAL;\n \t}\n \n+\tqp->bar_addr = bar_addr;\n \tqp->count = count;\n \tqp->head = qp->tail = 0;\n \trte_atomic16_init(&qp->pending_count);\ndiff --git a/drivers/common/nitrox/nitrox_qp.h b/drivers/common/nitrox/nitrox_qp.h\nindex d42d53f92b..177bcd7705 100644\n--- a/drivers/common/nitrox/nitrox_qp.h\n+++ b/drivers/common/nitrox/nitrox_qp.h\n@@ -8,9 +8,16 @@\n #include <stdbool.h>\n \n #include <rte_io.h>\n+#include \"nitrox_hal.h\"\n \n struct nitrox_softreq;\n \n+enum nitrox_queue_type {\n+\tNITROX_QUEUE_SE,\n+\tNITROX_QUEUE_AE,\n+\tNITROX_QUEUE_ZIP,\n+};\n+\n struct command_queue {\n \tconst struct rte_memzone *mz;\n \tuint8_t *dbell_csr_addr;\n@@ -22,14 +29,23 @@ struct rid {\n \tstruct nitrox_softreq *sr;\n };\n \n+struct nitrox_qp_stats {\n+\tuint64_t enqueued_count;\n+\tuint64_t dequeued_count;\n+\tuint64_t enqueue_err_count;\n+\tuint64_t dequeue_err_count;\n+};\n+\n struct nitrox_qp {\n+\tenum nitrox_queue_type type;\n+\tuint8_t *bar_addr;\n \tstruct command_queue cmdq;\n \tstruct rid *ridq;\n \tuint32_t count;\n \tuint32_t head;\n \tuint32_t tail;\n \tstruct rte_mempool *sr_mp;\n-\tstruct rte_cryptodev_stats stats;\n+\tstruct nitrox_qp_stats stats;\n \tuint16_t qno;\n \trte_atomic16_t pending_count;\n };\n@@ -89,6 +105,23 @@ nitrox_qp_enqueue(struct nitrox_qp *qp, void *instr, struct nitrox_softreq *sr)\n \trte_atomic16_inc(&qp->pending_count);\n }\n \n+static inline int\n+nitrox_qp_enqueue_sr(struct nitrox_qp *qp, struct nitrox_softreq *sr)\n+{\n+\tuint32_t head = qp->head % qp->count;\n+\tint err;\n+\n+\terr = inc_zqmq_next_cmd(qp->bar_addr, qp->qno);\n+\tif (unlikely(err))\n+\t\treturn err;\n+\n+\tqp->head++;\n+\tqp->ridq[head].sr = sr;\n+\trte_smp_wmb();\n+\trte_atomic16_inc(&qp->pending_count);\n+\treturn 0;\n+}\n+\n static inline void\n nitrox_qp_dequeue(struct nitrox_qp *qp)\n {\n",
    "prefixes": [
        "v2",
        "3/7"
    ]
}