From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 3F34BC36A for ; Fri, 17 Apr 2015 17:16:48 +0200 (CEST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP; 17 Apr 2015 08:16:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,595,1422950400"; d="scan'208";a="681727300" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga001.jf.intel.com with ESMTP; 17 Apr 2015 08:16:46 -0700 Received: from sivswdev01.ir.intel.com (sivswdev01.ir.intel.com [10.237.217.45]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id t3HFGjCd030425; Fri, 17 Apr 2015 16:16:45 +0100 Received: from sivswdev01.ir.intel.com (localhost [127.0.0.1]) by sivswdev01.ir.intel.com with ESMTP id t3HFGjxZ028146; Fri, 17 Apr 2015 16:16:45 +0100 Received: (from bricha3@localhost) by sivswdev01.ir.intel.com with id t3HFGj1J028142; Fri, 17 Apr 2015 16:16:45 +0100 From: Bruce Richardson To: dev@dpdk.org, keith.wiles@intel.com Date: Fri, 17 Apr 2015 16:16:43 +0100 Message-Id: <1429283804-28087-4-git-send-email-bruce.richardson@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1429283804-28087-1-git-send-email-bruce.richardson@intel.com> References: <1428954274-26944-1-git-send-email-keith.wiles@intel.com> <1429283804-28087-1-git-send-email-bruce.richardson@intel.com> Subject: [dpdk-dev] [RFC PATCH 3/4] add support for a ring to be a pktdev X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Apr 2015 15:16:48 -0000 Add a new public API function, and two internal wrapper functions so we can use ring as a pktdev. --- lib/librte_ring/rte_ring.c | 41 +++++++++++++++++++++++++++++++++++++++++ lib/librte_ring/rte_ring.h | 3 +++ 2 files changed, 44 insertions(+) diff --git a/lib/librte_ring/Makefile b/lib/librte_ring/Makefile index 84ad3d3..bc5dd09 100644 --- a/lib/librte_ring/Makefile +++ b/lib/librte_ring/Makefile @@ -47,6 +47,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_RING) := rte_ring.c SYMLINK-$(CONFIG_RTE_LIBRTE_RING)-include := rte_ring.h # this lib needs eal and rte_malloc -DEPDIRS-$(CONFIG_RTE_LIBRTE_RING) += lib/librte_eal lib/librte_malloc +DEPDIRS-$(CONFIG_RTE_LIBRTE_RING) += lib/librte_eal lib/librte_malloc lib/librte_pktdev include $(RTE_SDK)/mk/rte.lib.mk diff --git a/lib/librte_ring/rte_ring.c b/lib/librte_ring/rte_ring.c index c9e59d4..424da20 100644 --- a/lib/librte_ring/rte_ring.c +++ b/lib/librte_ring/rte_ring.c @@ -86,6 +86,7 @@ #include #include #include +#include #include "rte_ring.h" @@ -208,6 +208,47 @@ rte_ring_create(const char *name, unsigned count, int socket_id, return r; } +static uint16_t +dev_rx(void *r, struct rte_mbuf **pkts, uint16_t max_pkts) +{ + return rte_ring_dequeue_burst(r, (void *)pkts, max_pkts); +} + +static uint16_t +dev_tx(void *r, struct rte_mbuf **pkts, uint16_t max_pkts) +{ + return rte_ring_enqueue_burst(r, (void *)pkts, max_pkts); +} + +#define rte_ring_dev_data rte_pkt_dev_data + +struct rte_pkt_dev * +rte_ring_get_dev(struct rte_ring *r) +{ + struct ring_as_pktdev { + RTE_PKT_DEV_HDR(rte_ring_dev); + struct rte_ring_dev_data dev_data; + void *ring; + } *p; + if (r == NULL || + (p = rte_zmalloc(NULL, sizeof(*p), 0)) == NULL) + return NULL; + + p->ring = r; + p->rx_pkt_burst = dev_rx; + p->tx_pkt_burst = dev_tx; + p->data = &p->dev_data; + + snprintf(p->dev_data.name, sizeof(p->dev_data.name), "%s", r->name); + p->dev_data.nb_rx_queues = 1; + p->dev_data.nb_tx_queues = 1; + p->dev_data.rx_queues = &p->ring; + p->dev_data.tx_queues = &p->ring; + + return (void *)p; +} + + /* * change the high water mark. If *count* is 0, water marking is * disabled diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h index af68888..c2f28be 100644 --- a/lib/librte_ring/rte_ring.h +++ b/lib/librte_ring/rte_ring.h @@ -301,6 +302,10 @@ int rte_ring_init(struct rte_ring *r, const char *name, unsigned count, struct rte_ring *rte_ring_create(const char *name, unsigned count, int socket_id, unsigned flags); +struct rte_pkt_dev; + +struct rte_pkt_dev *rte_ring_get_dev(struct rte_ring *r); + /** * Change the high water mark. * -- 2.1.0