From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 49194A04F0; Thu, 19 Dec 2019 07:45:41 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D64E41BE8A; Thu, 19 Dec 2019 07:45:39 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 56B471BDFD for ; Thu, 19 Dec 2019 07:45:37 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id xBJ6jXm1018423; Wed, 18 Dec 2019 22:45:33 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=pfpt0818; bh=u4EB9Avek9J5G/ZfXfeKLFu7QTjT+v13vz1WCq1QaTw=; b=birc7uDfkjt/MZJ/6EvuXGnGJdb45sztrSsdyGJi+VZyU0bb0sqi0AOb7zCkFpMEXzDm 6TGYhsqP/xZQPOshFNNh1yuWnS/pPS++lDxKOD0YfwOsnCUA/75AJ0jFGVTeNYSNUEEi jKW6vQKTseZEwEUhaDe50OWJfBj1Opvc7WO6k4q6IshomImsAYt3BExQNJ0yTBeeuVr0 AIzUHSpjJTUjlM2unqQikaaIo4XZT4C6ArcqbEbCLEUmxbOqcP88APzqLPOEvepkM1Ws /Z4G9mvYMnx8IusoBkfJjYDXxURJSlPzZcbUTbwq/FEnV8eeVXsGKRfIPvjcu2goYb4s NQ== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 2wxneb1wkx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 18 Dec 2019 22:45:33 -0800 Received: from SC-EXCH02.marvell.com (10.93.176.82) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 18 Dec 2019 22:45:31 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.103) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Wed, 18 Dec 2019 22:45:31 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GJQveX0noOPPz6eWc+z8pvnUOpUUyaiNcKReynJkvrEfCwQ0/6bjZKC0A8jcd49P3qCl0YNF+o03q2EYyJNUkb9JYECvTZy1R4FhcABPjSNm8SV2hh/WyC46I5TXnnXbhVnwrpQCymoBCH4PzMidZx+ASll9LiKm1Rd/Y6tnLrZQWYixYwE+XbxnbGaTFLeEquac8ebMAXsZYGFBCbC8oMzpgOg1+Mzsi6QqOs5QkghXwi76PYIx7iMBQ96qbr2m1sCJ/lsd1/4MD/Kv5c6M22SC+2fN6g1X4KZV0VeI+8u39OYjSNWOcyp8bqvfoMkZYLAlLaJmp4jT+z59+49arg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u4EB9Avek9J5G/ZfXfeKLFu7QTjT+v13vz1WCq1QaTw=; b=nUBPUNpCXJ2Sf1/LXjd6F7bd6THbeIJpqDk0TlVbRoF5Zt2t3z1qW97aNVsRz9cSyPsccPBG9A9iBjTiOY4cvJnvW/0zsTJ5lCaydbq73MQ7PRXRny9jfgYJzKis3Zid6BiDpSBvy5q47VEcxeYSnLVerfYboBDVliczfuP0vEMUPLrDW+6CiIAtNqBdTy77MqetjlYXYQbEfcVQ80u2F2Vc+ePiin3+jAETslqruXsICr8yUrvct4zQxVCmLT5GJQkWd9JRnJUE2SyRODIHlRlNdRoMZUZa0KjGSg792xjBz4R6ysKw0p1/01VJfHHyYiIdmCgR7nfbBsJQx4TzeQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u4EB9Avek9J5G/ZfXfeKLFu7QTjT+v13vz1WCq1QaTw=; b=CPn+Vi02GFYL/yfwz8pGP4fOTnxs4aICBwLmTPZdvYdt9BLDCXStmGCPmJTrle1zSjeU/S49edREB8uoW5IUgoiVtQ18lgAcQR8Ij3uxCaM99ZLd7uxpE2aPYHekb7AoZjd9AuaXnglMESlMVr7cTj73SBCNbPqvzF/tGvmfj04= Received: from MWHPR18MB1376.namprd18.prod.outlook.com (10.173.243.18) by MWHPR18MB1630.namprd18.prod.outlook.com (10.173.246.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2538.20; Thu, 19 Dec 2019 06:45:30 +0000 Received: from MWHPR18MB1376.namprd18.prod.outlook.com ([fe80::24f5:9254:413a:4695]) by MWHPR18MB1376.namprd18.prod.outlook.com ([fe80::24f5:9254:413a:4695%7]) with mapi id 15.20.2559.012; Thu, 19 Dec 2019 06:45:30 +0000 From: Mahipal Challa To: "Gavin Hu (Arm Technology China)" , "dev@dpdk.org" CC: Jerin Jacob Kollanukkaran , "Narayana Prasad Raju Athreya" , Subrahmanyam Nilla , Venkateshwarlu Nalla , nd Thread-Topic: [dpdk-dev] [PATCH v1 5/6] raw/octeontx2_ep: add dequeue operation Thread-Index: AQHVrnLlhULJKuRUTEayrloXB9eSL6e510eAgAcqbhI= Date: Thu, 19 Dec 2019 06:45:30 +0000 Message-ID: References: <1575614365-8907-1-git-send-email-mchalla@marvell.com> <1575614365-8907-6-git-send-email-mchalla@marvell.com>, In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [115.113.156.2] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7b38bd06-b1d8-4c40-fc9b-08d7844f0a17 x-ms-traffictypediagnostic: MWHPR18MB1630: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7219; x-forefront-prvs: 0256C18696 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(396003)(39860400002)(366004)(136003)(346002)(376002)(199004)(189003)(13464003)(64756008)(66556008)(55236004)(53546011)(6506007)(4326008)(66446008)(7696005)(5660300002)(86362001)(52536014)(76116006)(91956017)(66476007)(66946007)(110136005)(33656002)(81156014)(81166006)(54906003)(30864003)(316002)(55016002)(9686003)(478600001)(19627405001)(8676002)(2906002)(71200400001)(8936002)(186003)(26005)(966005); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR18MB1630; H:MWHPR18MB1376.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rUo+VGITMOs9dMLd+nA+T5JZOOhmhUOtlcLIKJJ9My+u1S6WQrkArKZgLW2eiMBUc+hM0DhhAd4hQFMyztH68CaX8ovU2JoQ0dz04cyrn7/A/HwJbbhpOFuvONi2baNSGx/ifWMeTR2Tv1dOCxAHr5VvpggAXpcjGJCKvljoCEIKSeSq4vuyjw5R723bKdIubsiuegjGQqVxOHdRJ1cGnaH0Btro/xgXN1bGZ/hmtIlwLscAhyGUt9OU0nXJlEwlPs/tOChzxqEIpqX59PCRu4AxI9FVL19U8iFGhpQq6DEGRfskQqDGmwtg8pUB0wFt58u89hyXR6nDI7cWTSw2xX81nh9ZuSgzF1JCz712GE3Yq4HYD8GTsJvB4DeFD7hVK7iRlAKgwC1uoU/EFRorVUmgkpPc+flTMT+HN9+tuWaD5iB4Td1iu08bT7BEJBrLqyr+zxcRjOra4ttXaAOiVelXeqYLpxneE+HjN3t6fX4xkC0hEJnHrBl71t3/M+Yc6nERpkWWXSk4M/KYPt1JERNboJn3qOy7TckzMp+xOQk= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 7b38bd06-b1d8-4c40-fc9b-08d7844f0a17 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Dec 2019 06:45:30.1382 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 6eWm7H2Oq1JccyjftG0oiRNo8EAkFWVYc3s39RI/+TKsEJOIAcgJmbS8d3TMOBBQyRNjzzeCPm/BfAwV2s2czQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR18MB1630 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,18.0.572 definitions=2019-12-18_08:2019-12-17,2019-12-18 signatures=0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v1 5/6] raw/octeontx2_ep: add dequeue operation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Gavin, Please see response inline. ________________________________ From: Gavin Hu (Arm Technology China) Sent: Saturday, December 14, 2019 9:48 PM To: Mahipal Challa ; dev@dpdk.org Cc: Jerin Jacob Kollanukkaran ; Narayana Prasad Raju At= hreya ; Subrahmanyam Nilla ; Venk= ateshwarlu Nalla ; nd Subject: [EXT] RE: [dpdk-dev] [PATCH v1 5/6] raw/octeontx2_ep: add dequeue = operation External Email ---------------------------------------------------------------------- Hi Mahipal, > -----Original Message----- > From: dev On Behalf Of Mahipal Challa > Sent: Friday, December 6, 2019 2:39 PM > To: dev@dpdk.org > Cc: jerinj@marvell.com; pathreya@marvell.com; snilla@marvell.com; > venkatn@marvell.com > Subject: [dpdk-dev] [PATCH v1 5/6] raw/octeontx2_ep: add dequeue > operation > > Add rawdev dequeue operation for SDP VF devices. > > Signed-off-by: Mahipal Challa > --- > drivers/raw/octeontx2_ep/otx2_ep_enqdeq.c | 199 > ++++++++++++++++++++++++++++++ > drivers/raw/octeontx2_ep/otx2_ep_enqdeq.h | 2 + > drivers/raw/octeontx2_ep/otx2_ep_rawdev.c | 1 + > drivers/raw/octeontx2_ep/otx2_ep_rawdev.h | 18 ++- > 4 files changed, 219 insertions(+), 1 deletion(-) > > diff --git a/drivers/raw/octeontx2_ep/otx2_ep_enqdeq.c > b/drivers/raw/octeontx2_ep/otx2_ep_enqdeq.c > index ebbacfb..451fcc0 100644 > --- a/drivers/raw/octeontx2_ep/otx2_ep_enqdeq.c > +++ b/drivers/raw/octeontx2_ep/otx2_ep_enqdeq.c > @@ -260,6 +260,7 @@ > rte_mempool_get(sdpvf->enqdeq_mpool, &buf); > if (buf =3D=3D NULL) { > otx2_err("OQ buffer alloc failed"); > + droq->stats.rx_alloc_failure++; > /* sdp_droq_destroy_ring_buffers(droq);*/ > return -ENOMEM; > } > @@ -645,3 +646,201 @@ > return SDP_IQ_SEND_FAILED; > } > > +static uint32_t > +sdp_droq_refill(struct sdp_device *sdpvf, struct sdp_droq *droq) > +{ > + struct sdp_droq_desc *desc_ring; > + uint32_t desc_refilled =3D 0; > + void *buf =3D NULL; > + > + desc_ring =3D droq->desc_ring; > + > + while (droq->refill_count && (desc_refilled < droq->nb_desc)) { > + /* If a valid buffer exists (happens if there is no dispatc= h), > + * reuse the buffer, else allocate. > + */ > + if (droq->recv_buf_list[droq->refill_idx].buffer !=3D NULL) > + break; > + > + rte_mempool_get(sdpvf->enqdeq_mpool, &buf); > + /* If a buffer could not be allocated, no point in > + * continuing > + */ > + if (buf =3D=3D NULL) { > + droq->stats.rx_alloc_failure++; > + break; > + } > + > + droq->recv_buf_list[droq->refill_idx].buffer =3D buf; > + desc_ring[droq->refill_idx].buffer_ptr =3D > rte_mem_virt2iova(buf); > + > + /* Reset any previous values in the length field. */ > + droq->info_list[droq->refill_idx].length =3D 0; > + > + droq->refill_idx =3D sdp_incr_index(droq->refill_idx, 1, > + droq->nb_desc); > + > + desc_refilled++; > + droq->refill_count--; > + > + } > + > + return desc_refilled; > +} > + > +static int > +sdp_droq_read_packet(struct sdp_device *sdpvf __rte_unused, > + struct sdp_droq *droq, > + struct sdp_droq_pkt *droq_pkt) > +{ > + struct sdp_droq_info *info; > + uint32_t total_len =3D 0; > + uint32_t pkt_len =3D 0; > + > + info =3D &droq->info_list[droq->read_idx]; > + sdp_swap_8B_data((uint64_t *)&info->length, 1); > + if (!info->length) { > + otx2_err("OQ info_list->length[%ld]", (long)info->length); > + goto oq_read_fail; > + } > + > + /* Deduce the actual data size */ > + info->length -=3D SDP_RH_SIZE; > + total_len +=3D (uint32_t)info->length; > + > + otx2_sdp_dbg("OQ: pkt_len[%ld], buffer_size %d", > + (long)info->length, droq->buffer_size); > + if (info->length > droq->buffer_size) { > + otx2_err("This mode is not supported: pkt_len > buffer_size= "); > + goto oq_read_fail; > + } > + > + if (info->length <=3D droq->buffer_size) { > + pkt_len =3D (uint32_t)info->length; > + droq_pkt->data =3D droq->recv_buf_list[droq->read_idx].buff= er; > + droq_pkt->len =3D pkt_len; > + > + droq->recv_buf_list[droq->read_idx].buffer =3D NULL; > + droq->read_idx =3D sdp_incr_index(droq->read_idx, 1,/* > count */ > + droq->nb_desc /* max rd idx > */); > + droq->refill_count++; > + > + } > + > + info->length =3D 0; > + > + return SDP_OQ_RECV_SUCCESS; > + > +oq_read_fail: > + return SDP_OQ_RECV_FAILED; > +} > + > +static inline uint32_t > +sdp_check_droq_pkts(struct sdp_droq *droq, uint32_t burst_size) > +{ > + uint32_t min_pkts =3D 0; > + uint32_t new_pkts; > + uint32_t pkt_count; > + > + /* Latest available OQ packets */ > + pkt_count =3D rte_read32(droq->pkts_sent_reg); > + > + /* Newly arrived packets */ > + new_pkts =3D pkt_count - droq->last_pkt_count; > + otx2_sdp_dbg("Recvd [%d] new OQ pkts", new_pkts); > + > + min_pkts =3D (new_pkts > burst_size) ? burst_size : new_pkts; > + if (min_pkts) { > + rte_atomic64_add(&droq->pkts_pending, min_pkts); > + /* Back up the aggregated packet count so far */ > + droq->last_pkt_count +=3D min_pkts; > + } > + > + return min_pkts; > +} > + > +/* Check for response arrival from OCTEON TX2 > + * returns number of requests completed > + */ > +int > +sdp_rawdev_dequeue(struct rte_rawdev *rawdev, > + struct rte_rawdev_buf **buffers, unsigned int count, > + rte_rawdev_obj_t context __rte_unused) > +{ > + struct sdp_droq_pkt *oq_pkt; > + struct sdp_device *sdpvf; > + struct sdp_droq *droq; > + > + uint32_t q_no =3D 0, pkts; > + uint32_t new_pkts; > + uint32_t ret; > + > + sdpvf =3D (struct sdp_device *)rawdev->dev_private; > + > + droq =3D sdpvf->droq[q_no]; > + if (!droq) { > + otx2_err("Invalid droq[%d]", q_no); > + goto deq_fail; > + } > + > + /* Grab the lock */ > + rte_spinlock_lock(&droq->lock); > + > + new_pkts =3D sdp_check_droq_pkts(droq, count); > + if (!new_pkts) { > + otx2_sdp_dbg("Zero new_pkts:%d", new_pkts); > + goto deq_fail; /* No pkts at this moment */ > + } > + > + otx2_sdp_dbg("Received new_pkts =3D %d", new_pkts); > + > + for (pkts =3D 0; pkts < new_pkts; pkts++) { > + > + /* Push the received pkt to application */ > + oq_pkt =3D (struct sdp_droq_pkt *)buffers[pkts]; > + > + ret =3D sdp_droq_read_packet(sdpvf, droq, oq_pkt); > + if (ret) { > + otx2_err("DROQ read pakt failed."); > + goto deq_fail; > + } > + > + /* Stats */ > + droq->stats.pkts_received++; > + droq->stats.bytes_received +=3D oq_pkt->len; > + } > + > + /* Ack the h/w with no# of pkts read by Host */ > + rte_wmb(); The following rte_write32 call has a built-in rte_io_wmb, which is sufficie= nt for IO device. The above barrier can be saved. [Mahipal]: Agreed, will remove it. > + rte_write32(pkts, droq->pkts_sent_reg); > + rte_wmb(); Rte_cio_wmb is sufficient to keep order between coherent memory domain betw= een lcore and I/O device. https://urldefense.proofpoint.com/v2/url?u=3Dhttps-3A__code.dpdk.org_dpdk_l= atest_source_lib_librte-5Feal_common_include_generic_rte-5Fatomic.h-23L137&= d=3DDwIFAg&c=3DnKjWec2b6R0mOyPaz7xtfQ&r=3D-s3WtB2eBJ7B88AJuqlVnFqXScHMHYESW= bIBMvf7lwI&m=3DXF-4neNZaxQUEDvG1kq1bRFnn4v3X44D4se5yqm58Js&s=3DDWWym_IWt8oB= 3S86IKjl70drjid0ZHFyCtVfKVwMrsI&e=3D [Mahipal]: Okay, will replace it with rte_cio_wmb() API. > + > + droq->last_pkt_count -=3D pkts; > + > + otx2_sdp_dbg("DROQ pkts[%d] pushed to application", pkts); > + > + /* Refill DROQ buffers */ > + if (droq->refill_count >=3D 2 /* droq->refill_threshold */) { > + int desc_refilled =3D sdp_droq_refill(sdpvf, droq); > + > + /* Flush the droq descriptor data to memory to be sure > + * that when we update the credits the data in memory is > + * accurate. > + */ > + rte_wmb(); Rte_cio_wmb should be the correct one, but the stronger rte_io_wmb within r= te_write32 API suffice. [Mahipal]: Agreed, will remove it. > + rte_write32(desc_refilled, droq->pkts_credit_reg); > + > + /* Ensure mmio write completes */ > + rte_wmb(); If the target to ensure the completeness of the above writes, this is ok, o= therwise it is overkill. [Mahipal]: Yes, the target is to ensure the completion of all the writes, s= o it is required. > + otx2_sdp_dbg("Refilled count =3D %d", desc_refilled); > + } > + > + /* Release the spin lock */ > + rte_spinlock_unlock(&droq->lock); > + > + return pkts; > + > +deq_fail: > + rte_spinlock_unlock(&droq->lock); > + return SDP_OQ_RECV_FAILED; > +} > diff --git a/drivers/raw/octeontx2_ep/otx2_ep_enqdeq.h > b/drivers/raw/octeontx2_ep/otx2_ep_enqdeq.h > index b9b7c0b..172fdc5 100644 > --- a/drivers/raw/octeontx2_ep/otx2_ep_enqdeq.h > +++ b/drivers/raw/octeontx2_ep/otx2_ep_enqdeq.h > @@ -11,6 +11,8 @@ > #define SDP_IQ_SEND_FAILED (-1) > #define SDP_IQ_SEND_SUCCESS (0) > > +#define SDP_OQ_RECV_FAILED (-1) > +#define SDP_OQ_RECV_SUCCESS (0) > > static inline uint64_t > sdp_endian_swap_8B(uint64_t _d) > diff --git a/drivers/raw/octeontx2_ep/otx2_ep_rawdev.c > b/drivers/raw/octeontx2_ep/otx2_ep_rawdev.c > index 4ba8473..ddb208d 100644 > --- a/drivers/raw/octeontx2_ep/otx2_ep_rawdev.c > +++ b/drivers/raw/octeontx2_ep/otx2_ep_rawdev.c > @@ -252,6 +252,7 @@ > .dev_stop =3D sdp_rawdev_stop, > .dev_close =3D sdp_rawdev_close, > .enqueue_bufs =3D sdp_rawdev_enqueue, > + .dequeue_bufs =3D sdp_rawdev_dequeue, > }; > > static int > diff --git a/drivers/raw/octeontx2_ep/otx2_ep_rawdev.h > b/drivers/raw/octeontx2_ep/otx2_ep_rawdev.h > index 8fd06fb..a77cbab 100644 > --- a/drivers/raw/octeontx2_ep/otx2_ep_rawdev.h > +++ b/drivers/raw/octeontx2_ep/otx2_ep_rawdev.h > @@ -279,6 +279,18 @@ struct sdp_recv_buffer { > }; > #define SDP_DROQ_RECVBUF_SIZE (sizeof(struct sdp_recv_buffer)) > > +/* DROQ statistics. Each output queue has four stats fields. */ > +struct sdp_droq_stats { > + /* Number of packets received in this queue. */ > + uint64_t pkts_received; > + > + /* Bytes received by this queue. */ > + uint64_t bytes_received; > + > + /* Num of failures of rte_pktmbuf_alloc() */ > + uint64_t rx_alloc_failure; > +}; > + > /* Structure to define the configuration attributes for each Output queu= e. */ > struct sdp_oq_config { > /* Max number of OQs available */ > @@ -345,6 +357,9 @@ struct sdp_droq { > */ > void *pkts_sent_reg; > > + /* Statistics for this DROQ. */ > + struct sdp_droq_stats stats; > + > /* DMA mapped address of the DROQ descriptor ring. */ > size_t desc_ring_dma; > > @@ -476,6 +491,7 @@ struct sdp_device { > > int sdp_rawdev_enqueue(struct rte_rawdev *dev, struct rte_rawdev_buf > **buffers, > unsigned int count, rte_rawdev_obj_t context); > - > +int sdp_rawdev_dequeue(struct rte_rawdev *dev, struct rte_rawdev_buf > **buffers, > + unsigned int count, rte_rawdev_obj_t context); > > #endif /* _OTX2_EP_RAWDEV_H_ */ > -- > 1.8.3.1