aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorNicolas Morey-Chaisemartin <nmorey@kalray.eu>2015-10-28 16:32:15 +0100
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-11-25 17:52:49 +0300
commitabd83ebef01cc3a6db0cad154fccb053f2bb3eb6 (patch)
treebcb2232adc8366e2506869e119224e2e065b4542 /platform
parent9759308f35e752d8f234af806a9fef3834a583d8 (diff)
linux-generic: packet: add implementation for packet alloc/free multi
Signed-off-by: Nicolas Morey-Chaisemartin <nmorey@kalray.eu> Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform')
-rw-r--r--platform/linux-generic/odp_packet.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c
index 1b496247f..07c740cfa 100644
--- a/platform/linux-generic/odp_packet.c
+++ b/platform/linux-generic/odp_packet.c
@@ -15,6 +15,7 @@
#include <odp/helper/tcp.h>
#include <odp/helper/udp.h>
+#include <errno.h>
#include <string.h>
#include <stdio.h>
@@ -127,11 +128,42 @@ odp_packet_t odp_packet_alloc(odp_pool_t pool_hdl, uint32_t len)
return packet_alloc(pool_hdl, len, 0);
}
+int odp_packet_alloc_multi(odp_pool_t pool_hdl, uint32_t len,
+ odp_packet_t pkt[], int num)
+{
+ pool_entry_t *pool = odp_pool_to_entry(pool_hdl);
+ size_t pkt_size = len ? len : pool->s.params.buf.size;
+ int count, i;
+
+ if (pool->s.params.type != ODP_POOL_PACKET) {
+ __odp_errno = EINVAL;
+ return -1;
+ }
+
+ count = buffer_alloc_multi(pool_hdl, pkt_size,
+ (odp_buffer_t *)pkt, num);
+
+ for (i = 0; i < count; ++i) {
+ odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt[i]);
+
+ packet_init(pool, pkt_hdr, pkt_size, 0);
+ if (len == 0)
+ pull_tail(pkt_hdr, pkt_size);
+ }
+
+ return count;
+}
+
void odp_packet_free(odp_packet_t pkt)
{
odp_buffer_free((odp_buffer_t)pkt);
}
+void odp_packet_free_multi(const odp_packet_t pkt[], int num)
+{
+ odp_buffer_free_multi((const odp_buffer_t *)pkt, num);
+}
+
int odp_packet_reset(odp_packet_t pkt, uint32_t len)
{
odp_packet_hdr_t *const pkt_hdr = odp_packet_hdr(pkt);