diff options
author | Petri Savolainen <petri.savolainen@nokia.com> | 2016-01-20 10:26:16 +0200 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2016-02-08 20:45:24 +0300 |
commit | a1103e3048df459b356397e9794659c8cb9f65cc (patch) | |
tree | 9bb220a1d06e45752b5581f80d091c8953f567cc /platform | |
parent | 07037ebd529eef8547fd9d011fe3edacadd57efd (diff) |
linux-generic: pktio: added poll type input queue
Added support for poll type input queues.
Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com>
Reviewed-and-tested-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_queue_internal.h | 2 | ||||
-rw-r--r-- | platform/linux-generic/odp_packet_io.c | 23 | ||||
-rw-r--r-- | platform/linux-generic/odp_queue.c | 2 |
3 files changed, 22 insertions, 5 deletions
diff --git a/platform/linux-generic/include/odp_queue_internal.h b/platform/linux-generic/include/odp_queue_internal.h index 1cc0ed26e..2d349466f 100644 --- a/platform/linux-generic/include/odp_queue_internal.h +++ b/platform/linux-generic/include/odp_queue_internal.h @@ -76,7 +76,7 @@ struct queue_entry_s { odp_event_t cmd_ev; odp_queue_type_t type; odp_queue_param_t param; - odp_pktio_t pktin; + odp_pktin_queue_t pktin; odp_pktio_t pktout; char name[ODP_QUEUE_NAME_LEN]; uint64_t order_in; diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 1fa611d28..ba776f458 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -499,7 +499,8 @@ int odp_pktio_inq_setdef(odp_pktio_t id, odp_queue_t queue) /* User polls the input queue */ queue_lock(qentry); - qentry->s.pktin = id; + qentry->s.pktin.pktio = id; + qentry->s.pktin.index = 0; queue_unlock(qentry); return 0; @@ -525,7 +526,7 @@ int odp_pktio_inq_remdef(odp_pktio_t id) qentry = queue_to_qentry(queue); queue_lock(qentry); - qentry->s.pktin = ODP_PKTIO_INVALID; + qentry->s.pktin = PKTIN_INVALID; queue_unlock(qentry); pktio_entry->s.in_queue[0].queue = ODP_QUEUE_INVALID; @@ -616,7 +617,7 @@ odp_buffer_hdr_t *pktin_dequeue(queue_entry_t *qentry) if (buf_hdr != NULL) return buf_hdr; - pktio = qentry->s.pktin; + pktio = qentry->s.pktin.pktio; pkts = odp_pktio_recv(pktio, pkt_tbl, QUEUE_MULTI_MAX); if (pkts <= 0) @@ -661,7 +662,7 @@ int pktin_deq_multi(queue_entry_t *qentry, odp_buffer_hdr_t *buf_hdr[], int num) if (nbr == num) return nbr; - pktio = qentry->s.pktin; + pktio = qentry->s.pktin.pktio; pkts = odp_pktio_recv(pktio, pkt_tbl, QUEUE_MULTI_MAX); if (pkts <= 0) @@ -1105,6 +1106,20 @@ int odp_pktio_input_queues_config(odp_pktio_t pktio, destroy_in_queues(entry, i + 1); return -1; } + + if (mode == ODP_PKTIN_MODE_POLL) { + queue_entry_t *qentry; + + qentry = queue_to_qentry(queue); + qentry->s.pktin.index = i; + qentry->s.pktin.pktio = pktio; + + qentry->s.enqueue = pktin_enqueue; + qentry->s.dequeue = pktin_dequeue; + qentry->s.enqueue_multi = pktin_enq_multi; + qentry->s.dequeue_multi = pktin_deq_multi; + } + entry->s.in_queue[i].queue = queue; } else { entry->s.in_queue[i].queue = ODP_QUEUE_INVALID; diff --git a/platform/linux-generic/odp_queue.c b/platform/linux-generic/odp_queue.c index 7f1147825..7817afe22 100644 --- a/platform/linux-generic/odp_queue.c +++ b/platform/linux-generic/odp_queue.c @@ -126,6 +126,8 @@ static int queue_init(queue_entry_t *queue, const char *name, break; } + queue->s.pktin = PKTIN_INVALID; + queue->s.head = NULL; queue->s.tail = NULL; |