@@ -27,6 +27,7 @@ extern "C" {
#include <odp/api/crypto.h>
#include <odp_crypto_internal.h>
#include <odp/api/plat/packet_types.h>
+#include <odp_queue_if.h>
/** Minimum segment length expected by packet_parse_common() */
#define PACKET_PARSE_SEG_LEN 96
@@ -126,7 +127,7 @@ typedef struct {
odp_time_t timestamp;
/* Classifier destination queue */
- odp_queue_t dst_queue;
+ queue_t dst_queue;
/* Result for crypto */
odp_crypto_generic_op_result_t op_result;
@@ -48,6 +48,8 @@ typedef struct {
typedef struct { char dummy; } _queue_t;
typedef _queue_t *queue_t;
+#define QUEUE_NULL ((queue_t)NULL)
+
typedef int (*queue_init_global_fn_t)(void);
typedef int (*queue_term_global_fn_t)(void);
typedef int (*queue_init_local_fn_t)(void);
@@ -162,7 +162,7 @@ odp_cos_t odp_cls_cos_create(const char *name, odp_cls_cos_param_t *param)
/* Packets are dropped if Queue or Pool is invalid*/
if (param->queue == ODP_QUEUE_INVALID)
- queue = NULL;
+ queue = QUEUE_NULL;
else
queue = queue_fn->from_ext(param->queue);
@@ -264,7 +264,7 @@ int odp_cos_queue_set(odp_cos_t cos_id, odp_queue_t queue_id)
/* Locking is not required as intermittent stale
data during CoS modification is acceptable*/
if (queue_id == ODP_QUEUE_INVALID)
- cos->s.queue = NULL;
+ cos->s.queue = QUEUE_NULL;
else
cos->s.queue = queue_fn->from_ext(queue_id);
return 0;
@@ -279,7 +279,7 @@ odp_queue_t odp_cos_queue(odp_cos_t cos_id)
return ODP_QUEUE_INVALID;
}
- if (!cos->s.queue)
+ if (cos->s.queue == QUEUE_NULL)
return ODP_QUEUE_INVALID;
return queue_fn->to_ext(cos->s.queue);
@@ -841,12 +841,12 @@ int cls_classify_packet(pktio_entry_t *entry, const uint8_t *base,
if (cos == NULL)
return -EINVAL;
- if (cos->s.queue == NULL || cos->s.pool == ODP_POOL_INVALID)
+ if (cos->s.queue == QUEUE_NULL || cos->s.pool == ODP_POOL_INVALID)
return -EFAULT;
*pool = cos->s.pool;
pkt_hdr->p.input_flags.dst_queue = 1;
- pkt_hdr->dst_queue = queue_fn->to_ext(cos->s.queue);
+ pkt_hdr->dst_queue = cos->s.queue;
return 0;
}
@@ -566,11 +566,9 @@ static inline int pktin_recv_buf(odp_pktin_queue_t queue,
buf_hdr = packet_to_buf_hdr(pkt);
if (pkt_hdr->p.input_flags.dst_queue) {
- queue_t dst_queue;
int ret;
- dst_queue = queue_fn->from_ext(pkt_hdr->dst_queue);
- ret = queue_fn->enq(dst_queue, buf_hdr);
+ ret = queue_fn->enq(pkt_hdr->dst_queue, buf_hdr);
if (ret < 0)
odp_packet_free(pkt);
continue;
Use internal queue type instead of API handle. This way per packet queue conversions are avoided. Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> --- platform/linux-generic/include/odp_packet_internal.h | 3 ++- platform/linux-generic/include/odp_queue_if.h | 2 ++ platform/linux-generic/odp_classification.c | 10 +++++----- platform/linux-generic/odp_packet_io.c | 4 +--- 4 files changed, 10 insertions(+), 9 deletions(-) -- 2.13.0