Combine enqueue and dequeue function pointer set functions into pktin/pktout calls so that queue interface size gets smaller and code more readable. Also provide single call for TM.
Signed-off-by: Petri Savolainen <petri.savolai...@linaro.org> --- platform/linux-generic/include/odp_queue_if.h | 30 +++++++++-------- platform/linux-generic/odp_packet_io.c | 44 ++++++++++++------------- platform/linux-generic/odp_queue.c | 46 +++++++++++++-------------- platform/linux-generic/odp_traffic_mngr.c | 6 ++-- 4 files changed, 61 insertions(+), 65 deletions(-) diff --git a/platform/linux-generic/include/odp_queue_if.h b/platform/linux-generic/include/odp_queue_if.h index b5cbd515..ad807d75 100644 --- a/platform/linux-generic/include/odp_queue_if.h +++ b/platform/linux-generic/include/odp_queue_if.h @@ -61,17 +61,22 @@ typedef int (*queue_enq_multi_fn_t)(queue_t q_int, odp_buffer_hdr_t **, int); typedef odp_buffer_hdr_t *(*queue_deq_fn_t)(queue_t q_int); typedef int (*queue_deq_multi_fn_t)(queue_t q_int, odp_buffer_hdr_t **, int); typedef odp_pktout_queue_t (*queue_get_pktout_fn_t)(queue_t q_int); -typedef void (*queue_set_pktout_fn_t)(queue_t q_int, odp_pktio_t pktio, - int index); typedef odp_pktin_queue_t (*queue_get_pktin_fn_t)(queue_t q_int); -typedef void (*queue_set_pktin_fn_t)(queue_t q_int, odp_pktio_t pktio, - int index); -typedef void (*queue_set_enq_fn_t)(queue_t q_int, queue_enq_fn_t func); -typedef void (*queue_set_enq_multi_fn_t)(queue_t q_int, - queue_enq_multi_fn_t func); -typedef void (*queue_set_deq_fn_t)(queue_t q_int, queue_deq_fn_t func); -typedef void (*queue_set_deq_multi_fn_t)(queue_t q_int, - queue_deq_multi_fn_t func); +typedef void (*queue_set_pktin_fn_t)(odp_queue_t handle, odp_pktio_t pktio, + int idx, + queue_enq_fn_t enq, + queue_enq_multi_fn_t enq_multi, + queue_deq_fn_t deq, + queue_deq_multi_fn_t deq_multi); +typedef void (*queue_set_pktout_fn_t)(odp_queue_t handle, odp_pktio_t pktio, + int idx, + queue_enq_fn_t enq, + queue_enq_multi_fn_t enq_multi, + queue_deq_fn_t deq, + queue_deq_multi_fn_t deq_multi); +typedef void (*queue_set_enq_fn_t)(queue_t q_int, + queue_enq_fn_t enq, + queue_enq_multi_fn_t enq_multi); typedef void (*queue_set_type_fn_t)(queue_t q_int, odp_queue_type_t type); /* Queue functions towards other internal components */ @@ -90,10 +95,7 @@ typedef struct { queue_set_pktout_fn_t set_pktout; queue_get_pktin_fn_t get_pktin; queue_set_pktin_fn_t set_pktin; - queue_set_enq_fn_t set_enq_fn; - queue_set_enq_multi_fn_t set_enq_multi_fn; - queue_set_deq_fn_t set_deq_fn; - queue_set_deq_multi_fn_t set_deq_multi_fn; + queue_set_enq_fn_t set_enq; queue_set_type_fn_t set_type; } queue_fn_t; diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index f230db01..a48bbafb 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -1156,30 +1156,30 @@ int odp_pktio_stats_reset(odp_pktio_t pktio) return ret; } -static int pktin_enqueue(queue_t q_int ODP_UNUSED, - odp_buffer_hdr_t *buf_hdr ODP_UNUSED) +static int abort_pktin_enqueue(queue_t q_int ODP_UNUSED, + odp_buffer_hdr_t *buf_hdr ODP_UNUSED) { ODP_ABORT("attempted enqueue to a pktin queue"); return -1; } -static int pktin_enq_multi(queue_t q_int ODP_UNUSED, - odp_buffer_hdr_t *buf_hdr[] ODP_UNUSED, - int num ODP_UNUSED) +static int abort_pktin_enq_multi(queue_t q_int ODP_UNUSED, + odp_buffer_hdr_t *buf_hdr[] ODP_UNUSED, + int num ODP_UNUSED) { ODP_ABORT("attempted enqueue to a pktin queue"); return 0; } -static odp_buffer_hdr_t *pktout_dequeue(queue_t q_int ODP_UNUSED) +static odp_buffer_hdr_t *abort_pktout_dequeue(queue_t q_int ODP_UNUSED) { ODP_ABORT("attempted dequeue from a pktout queue"); return NULL; } -static int pktout_deq_multi(queue_t q_int ODP_UNUSED, - odp_buffer_hdr_t *buf_hdr[] ODP_UNUSED, - int num ODP_UNUSED) +static int abort_pktout_deq_multi(queue_t q_int ODP_UNUSED, + odp_buffer_hdr_t *buf_hdr[] ODP_UNUSED, + int num ODP_UNUSED) { ODP_ABORT("attempted dequeue from a pktout queue"); return 0; @@ -1273,13 +1273,12 @@ int odp_pktin_queue_config(odp_pktio_t pktio, q_int = queue_fn->from_ext(queue); if (mode == ODP_PKTIN_MODE_QUEUE) { - queue_fn->set_pktin(q_int, pktio, i); - queue_fn->set_enq_fn(q_int, pktin_enqueue); - queue_fn->set_deq_fn(q_int, pktin_dequeue); - queue_fn->set_enq_multi_fn(q_int, - pktin_enq_multi); - queue_fn->set_deq_multi_fn(q_int, - pktin_deq_multi); + /* Override default en-/dequeue functions */ + queue_fn->set_pktin(queue, pktio, i, + abort_pktin_enqueue, + abort_pktin_enq_multi, + pktin_dequeue, + pktin_deq_multi); } entry->s.in_queue[i].queue = queue; @@ -1379,7 +1378,6 @@ int odp_pktout_queue_config(odp_pktio_t pktio, for (i = 0; i < num_queues; i++) { odp_queue_t queue; odp_queue_param_t queue_param; - queue_t q_int; char name[ODP_QUEUE_NAME_LEN]; int pktio_id = pktio_to_id(pktio); @@ -1399,14 +1397,12 @@ int odp_pktout_queue_config(odp_pktio_t pktio, return -1; } - q_int = queue_fn->from_ext(queue); - queue_fn->set_pktout(q_int, pktio, i); - /* Override default enqueue / dequeue functions */ - queue_fn->set_enq_fn(q_int, pktout_enqueue); - queue_fn->set_deq_fn(q_int, pktout_dequeue); - queue_fn->set_enq_multi_fn(q_int, pktout_enq_multi); - queue_fn->set_deq_multi_fn(q_int, pktout_deq_multi); + queue_fn->set_pktout(queue, pktio, i, + pktout_enqueue, + pktout_enq_multi, + abort_pktout_dequeue, + abort_pktout_deq_multi); entry->s.out_queue[i].queue = queue; } diff --git a/platform/linux-generic/odp_queue.c b/platform/linux-generic/odp_queue.c index 9d74f092..6cbf1040 100644 --- a/platform/linux-generic/odp_queue.c +++ b/platform/linux-generic/odp_queue.c @@ -781,12 +781,18 @@ static odp_pktout_queue_t queue_get_pktout(queue_t q_int) return qentry_from_int(q_int)->s.pktout; } -static void queue_set_pktout(queue_t q_int, odp_pktio_t pktio, int index) +static void queue_set_pktout(odp_queue_t handle, odp_pktio_t pktio, int index, + queue_enq_fn_t enq, queue_enq_multi_fn_t enq_multi, + queue_deq_fn_t deq, queue_deq_multi_fn_t deq_multi) { - queue_entry_t *qentry = qentry_from_int(q_int); + queue_entry_t *qentry = handle_to_qentry(handle); qentry->s.pktout.pktio = pktio; qentry->s.pktout.index = index; + qentry->s.enqueue = enq; + qentry->s.enqueue_multi = enq_multi; + qentry->s.dequeue = deq; + qentry->s.dequeue_multi = deq_multi; } static odp_pktin_queue_t queue_get_pktin(queue_t q_int) @@ -794,32 +800,27 @@ static odp_pktin_queue_t queue_get_pktin(queue_t q_int) return qentry_from_int(q_int)->s.pktin; } -static void queue_set_pktin(queue_t q_int, odp_pktio_t pktio, int index) +static void queue_set_pktin(odp_queue_t handle, odp_pktio_t pktio, int index, + queue_enq_fn_t enq, queue_enq_multi_fn_t enq_multi, + queue_deq_fn_t deq, queue_deq_multi_fn_t deq_multi) { - queue_entry_t *qentry = qentry_from_int(q_int); + queue_entry_t *qentry = handle_to_qentry(handle); qentry->s.pktin.pktio = pktio; qentry->s.pktin.index = index; + qentry->s.enqueue = enq; + qentry->s.enqueue_multi = enq_multi; + qentry->s.dequeue = deq; + qentry->s.dequeue_multi = deq_multi; } -static void queue_set_enq_func(queue_t q_int, queue_enq_fn_t func) -{ - qentry_from_int(q_int)->s.enqueue = func; -} - -static void queue_set_enq_multi_func(queue_t q_int, queue_enq_multi_fn_t func) +static void queue_set_enq(queue_t q_int, + queue_enq_fn_t enq, queue_enq_multi_fn_t enq_multi) { - qentry_from_int(q_int)->s.enqueue_multi = func; -} - -static void queue_set_deq_func(queue_t q_int, queue_deq_fn_t func) -{ - qentry_from_int(q_int)->s.dequeue = func; -} + queue_entry_t *qentry = qentry_from_int(q_int); -static void queue_set_deq_multi_func(queue_t q_int, queue_deq_multi_fn_t func) -{ - qentry_from_int(q_int)->s.dequeue_multi = func; + qentry->s.enqueue = enq; + qentry->s.enqueue_multi = enq_multi; } static void queue_set_type(queue_t q_int, odp_queue_type_t type) @@ -875,9 +876,6 @@ queue_fn_t queue_default_fn = { .set_pktout = queue_set_pktout, .get_pktin = queue_get_pktin, .set_pktin = queue_set_pktin, - .set_enq_fn = queue_set_enq_func, - .set_enq_multi_fn = queue_set_enq_multi_func, - .set_deq_fn = queue_set_deq_func, - .set_deq_multi_fn = queue_set_deq_multi_func, + .set_enq = queue_set_enq, .set_type = queue_set_type }; diff --git a/platform/linux-generic/odp_traffic_mngr.c b/platform/linux-generic/odp_traffic_mngr.c index 8b5f3187..04239884 100644 --- a/platform/linux-generic/odp_traffic_mngr.c +++ b/platform/linux-generic/odp_traffic_mngr.c @@ -3927,9 +3927,9 @@ odp_tm_queue_t odp_tm_queue_create(odp_tm_t odp_tm, } tm_queue_obj->tm_qentry = queue_fn->from_ext(queue); queue_fn->set_type(tm_queue_obj->tm_qentry, QUEUE_TYPE_TM); - queue_fn->set_enq_fn(tm_queue_obj->tm_qentry, queue_tm_reenq); - queue_fn->set_enq_multi_fn(tm_queue_obj->tm_qentry, - queue_tm_reenq_multi); + queue_fn->set_enq(tm_queue_obj->tm_qentry, + queue_tm_reenq, + queue_tm_reenq_multi); tm_system->queue_num_tbl[tm_queue_obj->queue_num - 1] = tm_queue_obj; odp_ticketlock_lock(&tm_system->tm_system_lock); -- 2.13.0