aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoltan Kiss <zoltan.kiss@linaro.org>2015-04-17 14:29:32 +0100
committerZoltan Kiss <zoltan.kiss@linaro.org>2015-04-23 21:08:26 +0100
commit6f454ea25c56ed37963fdaf7ac3a1ff1e4ec8097 (patch)
tree5e9630cce450ed6a5b8527e8cf26a17c2d28d3e6
parent654890f132ce220e661d100c6297c9469e4f96e9 (diff)
packet: implement odp_packet_pool() and odp_packet_input()
For odp_packet_input() pktio has to be adjusted as well to store the odp_pktio_t in the pool structure. A few header file dependencies are also fixed. Signed-off-by: Zoltan Kiss <zoltan.kiss@linaro.org>
-rw-r--r--platform/linux-dpdk/include/odp_packet_io_internal.h1
-rw-r--r--platform/linux-dpdk/include/odp_pool_internal.h2
-rw-r--r--platform/linux-dpdk/odp_packet.c14
-rw-r--r--platform/linux-dpdk/odp_packet_io.c13
-rw-r--r--platform/linux-dpdk/odp_pool.c1
5 files changed, 28 insertions, 3 deletions
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h
index eb81fc054..2a8e32633 100644
--- a/platform/linux-dpdk/include/odp_packet_io_internal.h
+++ b/platform/linux-dpdk/include/odp_packet_io_internal.h
@@ -22,6 +22,7 @@ extern "C" {
#include <odp_packet_socket.h>
#include <odp_align_internal.h>
#include <odp_packet_dpdk.h>
+#include <odp/queue.h>
/**
* Packet IO types
diff --git a/platform/linux-dpdk/include/odp_pool_internal.h b/platform/linux-dpdk/include/odp_pool_internal.h
index f8d2ee51a..6c95dffdf 100644
--- a/platform/linux-dpdk/include/odp_pool_internal.h
+++ b/platform/linux-dpdk/include/odp_pool_internal.h
@@ -21,6 +21,7 @@ extern "C" {
#include <odp/std_types.h>
#include <odp/pool.h>
#include <odp_buffer_internal.h>
+#include <odp/packet_io.h>
#include <odp/align.h>
#include <odp/hints.h>
#include <odp/config.h>
@@ -55,6 +56,7 @@ struct pool_entry_s {
odp_pool_param_t params;
odp_pool_t pool_hdl;
struct rte_mempool *rte_mempool;
+ odp_pktio_t pktio;
};
typedef union pool_entry_u {
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c
index b4edc8adb..0de573185 100644
--- a/platform/linux-dpdk/odp_packet.c
+++ b/platform/linux-dpdk/odp_packet.c
@@ -226,6 +226,11 @@ void *odp_packet_offset(odp_packet_t pkt, uint32_t offset, uint32_t *len,
}
}
+odp_pool_t odp_packet_pool(odp_packet_t pkt)
+{
+ return odp_packet_hdr(pkt)->buf_hdr.pool_hdl;
+}
+
void *odp_packet_l2_ptr(odp_packet_t pkt, uint32_t *len)
{
const size_t offset = odp_packet_l2_offset(pkt);
@@ -740,8 +745,11 @@ int odp_packet_copydata_out(odp_packet_t pkt ODP_UNUSED,
ODP_ABORT("");
}
-odp_pktio_t odp_packet_input(odp_packet_t pkt ODP_UNUSED)
+
+odp_pktio_t odp_packet_input(odp_packet_t pkt)
{
- ODP_UNIMPLEMENTED();
- ODP_ABORT("");
+ odp_pool_t pool_hdl = odp_buffer_pool(_odp_packet_to_buffer(pkt));
+ uint32_t pool_id = pool_handle_to_index(pool_hdl);
+ pool_entry_t *pool = get_pool_entry(pool_id);
+ return pool->s.pktio;
}
diff --git a/platform/linux-dpdk/odp_packet_io.c b/platform/linux-dpdk/odp_packet_io.c
index 3eb888cc6..546f0fd54 100644
--- a/platform/linux-dpdk/odp_packet_io.c
+++ b/platform/linux-dpdk/odp_packet_io.c
@@ -153,6 +153,8 @@ odp_pktio_t odp_pktio_open(const char *dev, odp_pool_t pool)
odp_pktio_t id;
pktio_entry_t *pktio_entry;
int res;
+ uint32_t pool_id;
+ pool_entry_t *pool_entry;
ODP_DBG("Allocating dpdk pktio\n");
@@ -172,6 +174,10 @@ odp_pktio_t odp_pktio_open(const char *dev, odp_pool_t pool)
id = ODP_PKTIO_INVALID;
}
+ pool_id = pool_handle_to_index(pool);
+ pool_entry = get_pool_entry(pool_id);
+ pool_entry->s.pktio = id;
+
unlock_entry(pktio_entry);
return id;
}
@@ -180,6 +186,8 @@ int odp_pktio_close(odp_pktio_t id)
{
pktio_entry_t *entry;
int res = -1;
+ uint32_t pool_id;
+ pool_entry_t *pool_entry;
entry = get_entry(id);
if (entry == NULL)
@@ -190,6 +198,11 @@ int odp_pktio_close(odp_pktio_t id)
res = close_pkt_dpdk(&entry->s.pkt_dpdk);
res |= free_pktio_entry(id);
}
+
+ pool_id = pool_handle_to_index(entry->s.pkt_dpdk.pool);
+ pool_entry = get_pool_entry(pool_id);
+ pool_entry->s.pktio = ODP_PKTIO_INVALID;
+
unlock_entry(entry);
if (res != 0)
diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c
index dc84ff49c..f2c8ab7e7 100644
--- a/platform/linux-dpdk/odp_pool.c
+++ b/platform/linux-dpdk/odp_pool.c
@@ -425,6 +425,7 @@ int odp_pool_destroy(odp_pool_t pool_hdl)
uint32_t pool_id = pool_handle_to_index(pool_hdl);
pool_entry_t *pool = get_pool_entry(pool_id);
pool->s.rte_mempool = NULL;
+ /* The pktio supposed to be closed by now */
return 0;
}