diff mbox

[PATCHv3,1/7] linux-generic: add pktio_start and pktio_stop

Message ID 1439990341-12037-2-git-send-email-maxim.uvarov@linaro.org
State Superseded
Headers show

Commit Message

Maxim Uvarov Aug. 19, 2015, 1:18 p.m. UTC
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
---
 .../linux-generic/include/odp_packet_io_internal.h |  6 ++++
 platform/linux-generic/odp_packet_io.c             | 34 ++++++++++++++++++++++
 2 files changed, 40 insertions(+)
diff mbox

Patch

diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h
index 5ae3718..f56d100 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -50,6 +50,10 @@  struct pktio_entry {
 		pkt_sock_mmap_t pkt_sock_mmap;	/**< using socket mmap
 						 *   API for IO */
 	};
+	enum {
+		STATE_START = 0,
+		STATE_STOP
+	} state;
 	classifier_t cls;		/**< classifier linked with this pktio*/
 	char name[IF_NAMESIZE];		/**< name of pktio provided to
 					   pktio_open() */
@@ -72,6 +76,8 @@  typedef struct pktio_if_ops {
 	int (*open)(odp_pktio_t pktio, pktio_entry_t *pktio_entry,
 		    const char *devname, odp_pool_t pool);
 	int (*close)(pktio_entry_t *pktio_entry);
+	int (*start)(pktio_entry_t *pktio_entry);
+	int (*stop)(pktio_entry_t *pktio_entry);
 	int (*recv)(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[],
 		    unsigned len);
 	int (*send)(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[],
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c
index 135e84f..532c264 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -289,6 +289,40 @@  int odp_pktio_close(odp_pktio_t id)
 	return 0;
 }
 
+int odp_pktio_start(odp_pktio_t id)
+{
+	pktio_entry_t *entry;
+	int res = 0;
+
+	entry = get_pktio_entry(id);
+	if (!entry)
+		return -1;
+
+	lock_entry(entry);
+	if (entry->s.ops->start)
+		res = entry->s.ops->start(entry);
+	unlock_entry(entry);
+
+	return res;
+}
+
+int odp_pktio_stop(odp_pktio_t id)
+{
+	pktio_entry_t *entry;
+	int res = 0;
+
+	entry = get_pktio_entry(id);
+	if (!entry)
+		return -1;
+
+	lock_entry(entry);
+	if (entry->s.ops->stop)
+		res = entry->s.ops->stop(entry);
+	unlock_entry(entry);
+
+	return res;
+}
+
 odp_pktio_t odp_pktio_lookup(const char *dev)
 {
 	odp_pktio_t id = ODP_PKTIO_INVALID;