aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorMaxim Uvarov <maxim.uvarov@linaro.org>2015-08-26 18:49:01 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-08-27 16:28:13 +0300
commit5176d3180d01c73092084bdc511a63be959745b2 (patch)
treedefb57fc6316e329dd65d9d181a805f8d90af516 /platform
parent8b077af2c3338166b24839ff42c47ab72f9fd538 (diff)
linux-generic: add pktio_start and pktio_stop
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> Reviewed-by: Stuart Haslam <stuart.haslam@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform')
-rw-r--r--platform/linux-generic/include/odp_packet_io_internal.h6
-rw-r--r--platform/linux-generic/odp_packet_io.c34
2 files changed, 40 insertions, 0 deletions
diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h
index 6ad33085f..a21c6838e 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 135e84f12..532c264c9 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;