From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <Shijith.Thotton@cavium.com>
Received: from NAM03-CO1-obe.outbound.protection.outlook.com
 (mail-co1nam03on0059.outbound.protection.outlook.com [104.47.40.59])
 by dpdk.org (Postfix) with ESMTP id 4C279FA3F
 for <dev@dpdk.org>; Thu,  2 Mar 2017 12:39:02 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=bv1cEvQ83cW91q62NkLO9bnYTrUAO7i+Pxb0L5ljQmE=;
 b=IMlRYslib8ADuI1dFwBEk4TfOXfggtvFs+ZTU2ytUAz1QZ4yZXZoZ40xYJJvWkAB/tDqK7zu7qKMq22JZ6gBmrmH9IJ7tlsaFpHpf5ITAC7VaFE8klar+zDHijjoDS/P6izzOXA3P5iMAKzqLZREKJ5Hh7jdrYEjriXj/auXWfY=
Authentication-Results: intel.com; dkim=none (message not signed)
 header.d=none;intel.com; dmarc=none action=none
 header.from=caviumnetworks.com;
Received: from lio357.in.caveonetworks.com (14.140.2.178) by
 CY1PR07MB2277.namprd07.prod.outlook.com (10.164.112.155) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.947.12; Thu, 2 Mar 2017 11:38:58 +0000
From: Shijith Thotton <shijith.thotton@caviumnetworks.com>
To: ferruh.yigit@intel.com
Cc: dev@dpdk.org, Jerin Jacob <jerin.jacob@caviumnetworks.com>,
 Derek Chickles <derek.chickles@caviumnetworks.com>,
 Venkat Koppula <venkat.koppula@caviumnetworks.com>,
 Srisivasubramanian S <ssrinivasan@caviumnetworks.com>,
 Mallesham Jatharakonda <mjatharakonda@oneconvergence.com>
Date: Thu,  2 Mar 2017 17:02:26 +0530
Message-Id: <1488454371-3342-22-git-send-email-shijith.thotton@caviumnetworks.com>
X-Mailer: git-send-email 1.8.3.1
In-Reply-To: <1488454371-3342-1-git-send-email-shijith.thotton@caviumnetworks.com>
References: <1487669225-30091-1-git-send-email-shijith.thotton@caviumnetworks.com>
 <1488454371-3342-1-git-send-email-shijith.thotton@caviumnetworks.com>
MIME-Version: 1.0
Content-Type: text/plain
X-Originating-IP: [14.140.2.178]
X-ClientProxiedBy: BM1PR01CA0021.INDPRD01.PROD.OUTLOOK.COM (10.163.198.156) To
 CY1PR07MB2277.namprd07.prod.outlook.com (10.164.112.155)
X-MS-Office365-Filtering-Correlation-Id: a2094556-56ea-4dba-23e4-08d46160b8be
X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:CY1PR07MB2277;
X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277;
 3:kqhoM8VpCGUkfLzPki6gDuLuWD27Is3V9sedxNBXalYF0mIhHv13aTG0rxXyhpvmciobl+GJoXGyWIXr/38nN5gYUC/LXk/PbYIQyjrWLZ8cQRpg8EKyeTsQXwKoqZ6izuXfOw4TVkkOV9I1QgvWFUBD8dBApLQr1d35n+blDeWNs7HWZTePpDg3837v07t5Ln3bTpoAT/jrmpl1xj3+DPpr1RTPh93O+j6LGcCE6JrxUjNs69pDwsJTtMvEon5fD5aRf9aOO+aWCPPuM+KW5w==;
 25:BqYoLnnQF3P3KtY9tghuKJq//Be/nm1MDcrxqPcLoTxJdhGrW6D/vT3m/68xXJyRxIE9jx++1ftqwf3WdPIwOGipSKV0AMDuiT5Embrqy2zT+l48s02N+i3lwRZ/v/BJHsW3va7GJZZWrIVkchrPMcvpdGM63m/eYCiOTOT35eSmvPkStboGijD+TbcG+p/nuiW0m1kRg18/FI7EzloRMU/l45ErMcpAIUfHyAautEBOV6qdwcBdBTlCz7+pfSZ2yvpeoO+AnwCjKq5TdJL5uqUzSlGPoHsvojJsXM+c0BUNer0tEI8NEOvFSDSm0x/WDNvgfo/E6VMmqDuBj4V4JPJ1MPtACqGRlzeJy5Z9SlU5JCMoZpfoK3auMxXDDV9i18O6F2qmnw+OiJJ8GeiwxVR5t+P/bGxH9VPFVXp2Xxx4istUdjNzzaLjPQYaoGeYTq8PZLrnMFQTTXdzMNar8w==
X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277;
 31:24uuBEFMg9sD1y/jNrpPbiAnyfGViNpyehMB1P88LbOkRbRdAJlVnsfekNO/Wo2jTa8WOKZXuDI4OgMbHlbyjo30hOEOCN/YISEWefUrjNmEHNtetU7TC/yAYzbQrRr9twWhMicq7UTPXI36BZLlBpZysolR/3RoKufDhkIWoi9XKgxsboKEf4dyb62HgZdu2IE+K8u09beiv53j8RCfEUtaoBpNlv/44lF/0Z1qybs=;
 20:A6jKkVkwhAaVkraaUo4Bc+2SfU7QqAJxHSQb08MKhyYfOKdr0YT9QlOsOE0yJVuJIADCwscxd0wS50ER73Qq0OJeGWzf74pCIpHuVwxti2Wg+DIilelU7w5nPcX6OmqW7eLwHweO3mBJf6N2DgP4tE7c7RxqQPGbWP/2UMrYKk1exFHiO8mnpTpXOcq9MMHQ51JLS9ZjxFoBc2DmrYeTDTcPw49x5zYf37KzRxBlfE2+cFko8UhYUtz1yUPK7+r2pW+0Kx3PxINdWvsIl4CLf69DaHgewoss8Hmqtekaj3BEN9OYus7cBLpoSZ/sVls+ky1kplQCM7SrUteiZ0FIr3stUVEO4ZsG0dPWcUA+M1oVssKsQrBrw6XEsDMdlS/MVQlC/Fw39/1Le02RfadQQ4GV4HXp7Th+3GBFiSFC9C64HTArA5kyGp9Y73RWMq5sp2FxZSeWI7jqm8jw0LQyIRpFPnL+76pRX8Izr/XHRfSWgMAGh6Rh+scjtflaCeir25vQzCNdcbTMzLWM5jEyhI63M68cd3/ut3xICfKafkMOwzbv9PKwUluX2J9g2IMc0Bat8JQWXxbsrRxbzNphqP5nwL8mb4YFcD4JQfl34z4=
X-Microsoft-Antispam-PRVS: <CY1PR07MB227778816957F209EC7A3FE381280@CY1PR07MB2277.namprd07.prod.outlook.com>
X-Exchange-Antispam-Report-Test: UriScan:;
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041248)(20161123558025)(20161123555025)(20161123560025)(20161123564025)(20161123562025)(6072148);
 SRVR:CY1PR07MB2277; BCL:0; PCL:0; RULEID:; SRVR:CY1PR07MB2277; 
X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277;
 4:xk5wnAdomhSbY+XIvOJE49QKtBCnU3ZJvehhxGZlORyfZPiB/V5Tye5neV1twC8TROeG2cZgJuA5vC7CCUpSBzoFzx2PGa8EirR2XDQvJ0dV3vqNc8JzWeoEMBDH4J2OFsKV/atWIFkB94Ap2KioxSZcesnRZUMWC2Pm3hUDruCbSDRJCuUW4Aac70TATlP1WxTIgoB7T4T6cU+D8fQqKtAQQvLjhcKK7aBVcypPM/m0n9fOSfz0fNManJIgFjLQ3FxqiqSfRPy7S5Ci+JkZtRLM0uCJizF2x3/lmWFoMlx8DQj/ySund5gePb1oexUovbNHMpy5sLLnVRsGPr0L5wau36FTtLSwVO9lCCp3W7hybS75EBDxk6D0aCk42OB67VcwY+MV24hRvFeNyEfmkD/NzaciIlrpKFZ9DXQ5JcAXjX2XTWV4fsdXZ7hBvQd9pp2LB0Hqihnk0Xax01Vjr0DcKQPBv25c/aXWSjoXzm4dM7LyucAEi2DlkBLHPvtw2AkUxJDlxpJhPD076Dy/fgfczn0cqkoM1eczSqlX4pPIVSqBBQjJKrzxr7ZBaYy77EuxkxfAxtbcbNJflV/6Nny0sRKtglJklpKaCrif0Wk=
X-Forefront-PRVS: 023495660C
X-Forefront-Antispam-Report: SFV:NSPM;
 SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(2950100002)(6916009)(42882006)(5660300001)(92566002)(4720700003)(33646002)(48376002)(50226002)(6666003)(2906002)(5003940100001)(36756003)(8676002)(50466002)(81166006)(110136004)(38730400002)(4326008)(305945005)(2361001)(53936002)(2351001)(25786008)(6512007)(189998001)(54906002)(47776003)(6506006)(6486002)(66066001)(6116002)(3846002)(50986999)(76176999)(5009440100003)(42186005)(7736002)(7099028)(110426004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR07MB2277; H:lio357.in.caveonetworks.com;
 FPR:; SPF:None; MLV:nov; PTR:InfoNoRecords; LANG:en; 
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR07MB2277;
 23:mA14NlRC5ih3MBasyBCyywyBDx5aJ2MvDXVw/O3Yk?=
 =?us-ascii?Q?UAe3F3xSUo2DMVEetOWuITr5gKTbGiVKZLjvXpdGL4lCMRk3Yp3tZtccI4Oi?=
 =?us-ascii?Q?CZ3y7yOZr/5xX8aFuVDqYOMADOdN4fM64GWZJCnLkMfVne94lp3+n3QelTSk?=
 =?us-ascii?Q?66NqDkHtiRCk8kNUhBZnNJ1jbvxM1Pr+dMhDo9tq2yx7IAiNanc3ujTq3anr?=
 =?us-ascii?Q?kEGByvOlGWbpUthLMifOghr/nkz67Cgs6rSs/vLZy6hz8LejmKJQ4nG71tBL?=
 =?us-ascii?Q?OTi8465JBp/3qCwrTtrwhXPqTpN8R/YjhIDaPnsDZcMnFLaJOvzl6HwluXCo?=
 =?us-ascii?Q?ELsqgYrl/IzBuheqttLAVJodrQePypa8drepArDdnT7Ae/F6jHtPJfquwlOQ?=
 =?us-ascii?Q?E5eEY3M9mTkv1SxGMGFw56SsA8ep13XTWjnda6wICwZkPBs4WZcjYJWi+SOT?=
 =?us-ascii?Q?a4DSUoQZ4iDimUFOb849/raFeWkImhkvTUcgK3DxJgpi4aE2INRammnzC2JI?=
 =?us-ascii?Q?JU+FSCqB7Wsm7w+0EL9/s80rEhkcxifFhjcnYPCN0GBNe8kvBdittkW6gcqd?=
 =?us-ascii?Q?7xJZZuVgTOK9372KN1rsDkRuyGx3wdAh3ThbDL+Yyqf2fI2C3WpvrcpcqT/C?=
 =?us-ascii?Q?LIwBnK2IOBcWVl1Nf01YZumARskAmHaIR63SaxoQu4qM69pvDp19StNG5R4j?=
 =?us-ascii?Q?uKlxVS6vlKGJQmsd9FA1RwFVxz8sWL+my3Epzfx2fXwMmUpSxrNl6kM6LvEy?=
 =?us-ascii?Q?TDI1uRAakfOd1RsFCO0uBIGKJNcImifTaci7SmNJjDDNWwbdV6TuKSi4+crz?=
 =?us-ascii?Q?vmWWHY/upKAu0rYwAWhcEYgA1tF9lnCWigwot6+y18pdLeuSQI5ZFsxZm+vs?=
 =?us-ascii?Q?5NZJ+OodlODZ5mckhxvC6GHPFQmJEZT/YWUGz/F5jX963nWB5SQv3J4FYrzv?=
 =?us-ascii?Q?W22aSvsGIlXPhxLNmdwiNSFihNlvffOgxP/VETiRX58R3/127igjybZjn3DH?=
 =?us-ascii?Q?A9typgKa3gm4kR33u2SuJF1XU0FBmetKWDcZm2p9UKMwh2YhctIXnua/6W9h?=
 =?us-ascii?Q?asbfp0iHQujqXtnPbwq2s1CF4f43NHhRkPBbg+afz73yyackA=3D=3D?=
X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277;
 6:QMsiD6s4QuAdtd3A3R5f+RNoBUbJ39uB6DMAvK5Rz+vpW1zYNCtz+z+ACb0ZI94hakUej60McTU2wVdk53DZ5Du+tJw3w7MIuLKjGIzhqEAZyw/kiqk7PQ3XRdpZ8DP1je3cibWKMjUq4HZ712Pe97j3yHct5GudFJ1KJ4PCJARhobtmY0Lm4Ha765Iqau36h01Qrfi0lFqFJsOTrWbeYKIr8+LWW4dNFHLrgW1T70a4X02Yv5Tu2hU/Kf7DQXIPxQYIG8LUxNpsLeScDnMl+3dsacU4HAhySlxm3F3CGQh6jKDoKBDFQzEFLFa5l7To2obORusFCiBF8350YlDb8DUeFC1IJj8AbAgyw+sBprS9AYyEW6hc3bPOqYgS2c8Z9rMUkQna9fS01g5Wc+qrGQ==;
 5:C3voOqkqGsj7TtdrMEqYYfmLOqB6bM2fyhgkLur1fDJiQ/xQnyM+A5Vzh7iiXBI94BCS8+7n5xCzlE5qYOr7DdbASHzq1UtYIPsQzubeUJFUA1clMg0z66yOAPyXAm4bJqfTgrCC4YYun/NdsC/oQg==;
 24:pIT8i6VQX9qDS0T8+n/80QyuYTUnLR5/uPGxP6iAHE4JsaTk30u9FoplVZQobl8eBP+NtiQcJRvF1h7Vc/GSeE4nrDwOuHJQl9QuGwCWcuQ=
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277;
 7:txe6B5rZPuTfVM1/IJfQcotMi80tpwPu25jmJO611dqAGr0nUyaA1/nmgUmugnb4OZuERnuYwKVht3EKVu8QTJnMpPLBLAkEcqpZJZYHYhqVFYrHp1XYrf0PMDY4Tzt4yl/6NIl6RM5qUUE9J1bKYSYUZkr++yECtc07YDrWDmx4V4DknuxnMkoMo7RO51xTJleOe4fuYoWgC6QqXM263UEhVFHEXp3WLZyJ2z12/S6uqqreiy+eD5b8ccqz1GmCAaTVnF2kAJkK67y749c5O93QLJoxN7zQeGR0skxRJUAYfBIOz8swu36TiFMw5eW7XgzuWZQV5jV0PnYC61nLRQ==
X-OriginatorOrg: caviumnetworks.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2017 11:38:58.6242 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2277
Subject: [dpdk-dev] [PATCH v2 21/46] net/liquidio: initialize Rx queue
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Thu, 02 Mar 2017 11:39:03 -0000

Initialize Rx queue registers and allocate packet buffers for Rx queue.

Signed-off-by: Shijith Thotton <shijith.thotton@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Signed-off-by: Derek Chickles <derek.chickles@caviumnetworks.com>
Signed-off-by: Venkat Koppula <venkat.koppula@caviumnetworks.com>
Signed-off-by: Srisivasubramanian S <ssrinivasan@caviumnetworks.com>
Signed-off-by: Mallesham Jatharakonda <mjatharakonda@oneconvergence.com>
---
 drivers/net/liquidio/base/lio_23xx_vf.c | 22 ++++++++
 drivers/net/liquidio/base/lio_hw_defs.h |  2 +
 drivers/net/liquidio/lio_rxtx.c         | 96 +++++++++++++++++++++++++++++++++
 drivers/net/liquidio/lio_rxtx.h         | 20 +++++++
 drivers/net/liquidio/lio_struct.h       |  1 +
 5 files changed, 141 insertions(+)

diff --git a/drivers/net/liquidio/base/lio_23xx_vf.c b/drivers/net/liquidio/base/lio_23xx_vf.c
index 181f830..44d90c0 100644
--- a/drivers/net/liquidio/base/lio_23xx_vf.c
+++ b/drivers/net/liquidio/base/lio_23xx_vf.c
@@ -233,6 +233,27 @@
 }
 
 static void
+cn23xx_vf_setup_oq_regs(struct lio_device *lio_dev, uint32_t oq_no)
+{
+	struct lio_droq *droq = lio_dev->droq[oq_no];
+
+	PMD_INIT_FUNC_TRACE();
+
+	lio_write_csr64(lio_dev, CN23XX_SLI_OQ_BASE_ADDR64(oq_no),
+			droq->desc_ring_dma);
+	lio_write_csr(lio_dev, CN23XX_SLI_OQ_SIZE(oq_no), droq->max_count);
+
+	lio_write_csr(lio_dev, CN23XX_SLI_OQ_BUFF_INFO_SIZE(oq_no),
+		      (droq->buffer_size | (OCTEON_RH_SIZE << 16)));
+
+	/* Get the mapped address of the pkt_sent and pkts_credit regs */
+	droq->pkts_sent_reg = (uint8_t *)lio_dev->hw_addr +
+					CN23XX_SLI_OQ_PKTS_SENT(oq_no);
+	droq->pkts_credit_reg = (uint8_t *)lio_dev->hw_addr +
+					CN23XX_SLI_OQ_PKTS_CREDIT(oq_no);
+}
+
+static void
 cn23xx_vf_free_mbox(struct lio_device *lio_dev)
 {
 	PMD_INIT_FUNC_TRACE();
@@ -436,6 +457,7 @@
 		return -1;
 
 	lio_dev->fn_list.setup_iq_regs		= cn23xx_vf_setup_iq_regs;
+	lio_dev->fn_list.setup_oq_regs		= cn23xx_vf_setup_oq_regs;
 	lio_dev->fn_list.setup_mbox		= cn23xx_vf_setup_mbox;
 	lio_dev->fn_list.free_mbox		= cn23xx_vf_free_mbox;
 
diff --git a/drivers/net/liquidio/base/lio_hw_defs.h b/drivers/net/liquidio/base/lio_hw_defs.h
index 35d59fd..4271730 100644
--- a/drivers/net/liquidio/base/lio_hw_defs.h
+++ b/drivers/net/liquidio/base/lio_hw_defs.h
@@ -116,6 +116,8 @@ enum octeon_tag_type {
 /* This subcode is sent by core PCI driver to indicate cores are ready. */
 #define LIO_OPCODE_IF_CFG		0x09
 
+#define LIO_MAX_RX_PKTLEN		(64 * 1024)
+
 /* Interface flags communicated between host driver and core app. */
 enum lio_ifflags {
 	LIO_IFFLAG_UNICAST	= 0x10
diff --git a/drivers/net/liquidio/lio_rxtx.c b/drivers/net/liquidio/lio_rxtx.c
index 942fe9b..9948023 100644
--- a/drivers/net/liquidio/lio_rxtx.c
+++ b/drivers/net/liquidio/lio_rxtx.c
@@ -41,6 +41,96 @@
 #include "lio_rxtx.h"
 
 static void
+lio_droq_compute_max_packet_bufs(struct lio_droq *droq)
+{
+	uint32_t count = 0;
+
+	do {
+		count += droq->buffer_size;
+	} while (count < LIO_MAX_RX_PKTLEN);
+}
+
+static void
+lio_droq_reset_indices(struct lio_droq *droq)
+{
+	droq->read_idx	= 0;
+	droq->write_idx	= 0;
+	droq->refill_idx = 0;
+	droq->refill_count = 0;
+	rte_atomic64_set(&droq->pkts_pending, 0);
+}
+
+static void
+lio_droq_destroy_ring_buffers(struct lio_droq *droq)
+{
+	uint32_t i;
+
+	for (i = 0; i < droq->max_count; i++) {
+		if (droq->recv_buf_list[i].buffer) {
+			rte_pktmbuf_free((struct rte_mbuf *)
+					 droq->recv_buf_list[i].buffer);
+			droq->recv_buf_list[i].buffer = NULL;
+		}
+	}
+
+	lio_droq_reset_indices(droq);
+}
+
+static void *
+lio_recv_buffer_alloc(struct lio_device *lio_dev, int q_no)
+{
+	struct lio_droq *droq = lio_dev->droq[q_no];
+	struct rte_mempool *mpool = droq->mpool;
+	struct rte_mbuf *m;
+
+	m = rte_pktmbuf_alloc(mpool);
+	if (m == NULL) {
+		lio_dev_err(lio_dev, "Cannot allocate\n");
+		return NULL;
+	}
+
+	rte_mbuf_refcnt_set(m, 1);
+	m->next = NULL;
+	m->data_off = RTE_PKTMBUF_HEADROOM;
+	m->nb_segs = 1;
+	m->pool = mpool;
+
+	return m;
+}
+
+static int
+lio_droq_setup_ring_buffers(struct lio_device *lio_dev,
+			    struct lio_droq *droq)
+{
+	struct lio_droq_desc *desc_ring = droq->desc_ring;
+	uint32_t i;
+	void *buf;
+
+	for (i = 0; i < droq->max_count; i++) {
+		buf = lio_recv_buffer_alloc(lio_dev, droq->q_no);
+		if (buf == NULL) {
+			lio_dev_err(lio_dev, "buffer alloc failed\n");
+			lio_droq_destroy_ring_buffers(droq);
+			return -ENOMEM;
+		}
+
+		droq->recv_buf_list[i].buffer = buf;
+		droq->info_list[i].length = 0;
+
+		/* map ring buffers into memory */
+		desc_ring[i].info_ptr = lio_map_ring_info(droq, i);
+		desc_ring[i].buffer_ptr =
+			lio_map_ring(droq->recv_buf_list[i].buffer);
+	}
+
+	lio_droq_reset_indices(droq);
+
+	lio_droq_compute_max_packet_bufs(droq);
+
+	return 0;
+}
+
+static void
 lio_dma_zone_free(struct lio_device *lio_dev, const struct rte_memzone *mz)
 {
 	const struct rte_memzone *mz_tmp;
@@ -75,6 +165,7 @@
 
 	lio_dev_dbg(lio_dev, "OQ[%d]\n", q_no);
 
+	lio_droq_destroy_ring_buffers(droq);
 	rte_free(droq->recv_buf_list);
 	droq->recv_buf_list = NULL;
 	lio_dma_zone_free(lio_dev, droq->info_mz);
@@ -172,10 +263,15 @@
 		goto init_droq_fail;
 	}
 
+	if (lio_droq_setup_ring_buffers(lio_dev, droq))
+		goto init_droq_fail;
+
 	droq->refill_threshold = c_refill_threshold;
 
 	rte_spinlock_init(&droq->lock);
 
+	lio_dev->fn_list.setup_oq_regs(lio_dev, q_no);
+
 	lio_dev->io_qmask.oq |= (1ULL << q_no);
 
 	return 0;
diff --git a/drivers/net/liquidio/lio_rxtx.h b/drivers/net/liquidio/lio_rxtx.h
index 05f4704..fc623ad 100644
--- a/drivers/net/liquidio/lio_rxtx.h
+++ b/drivers/net/liquidio/lio_rxtx.h
@@ -495,6 +495,26 @@ enum {
 	}
 }
 
+static inline uint64_t
+lio_map_ring(void *buf)
+{
+	phys_addr_t dma_addr;
+
+	dma_addr = rte_mbuf_data_dma_addr_default(((struct rte_mbuf *)buf));
+
+	return (uint64_t)dma_addr;
+}
+
+static inline uint64_t
+lio_map_ring_info(struct lio_droq *droq, uint32_t i)
+{
+	phys_addr_t dma_addr;
+
+	dma_addr = droq->info_list_dma + (i * LIO_DROQ_INFO_SIZE);
+
+	return (uint64_t)dma_addr;
+}
+
 /* Macro to increment index.
  * Index is incremented by count; if the sum exceeds
  * max, index is wrapped-around to the start.
diff --git a/drivers/net/liquidio/lio_struct.h b/drivers/net/liquidio/lio_struct.h
index 3df79e1..7a7a4a6 100644
--- a/drivers/net/liquidio/lio_struct.h
+++ b/drivers/net/liquidio/lio_struct.h
@@ -306,6 +306,7 @@ struct lio_io_enable {
 
 struct lio_fn_list {
 	void (*setup_iq_regs)(struct lio_device *, uint32_t);
+	void (*setup_oq_regs)(struct lio_device *, uint32_t);
 
 	int (*setup_mbox)(struct lio_device *);
 	void (*free_mbox)(struct lio_device *);
-- 
1.8.3.1