diff options
author | Matias Elo <matias.elo@nokia.com> | 2021-07-02 14:29:59 +0300 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2021-07-02 14:29:59 +0300 |
commit | 21689a2b95763d5c3b64b835419ddda220322fc0 (patch) | |
tree | 4181f63a3923a4c5b62feb330a5cdfd54c0cf198 /platform/linux-generic/odp_packet_io.c | |
parent | 3a7a24023021f5959dd2f00fe83cf2635bf25c2d (diff) | |
parent | cb9c89bdd732640915cb04a4775f0e866c932de2 (diff) |
Merge tag 'v1.30.0.0' of https://github.com/OpenDataPlane/odp into odp-dpdk
Signed-off-by: Matias Elo <matias.elo@nokia.com>
Diffstat (limited to 'platform/linux-generic/odp_packet_io.c')
-rw-r--r-- | platform/linux-generic/odp_packet_io.c | 125 |
1 files changed, 98 insertions, 27 deletions
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 711e5f8a6..694b0a741 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -377,7 +377,7 @@ static const char *driver_name(odp_pktio_t hdl) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_ERR("pktio entry %d does not exist\n", hdl); + ODP_ERR("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return "bad handle"; } @@ -1253,7 +1253,7 @@ static inline uint32_t pktio_maxlen(odp_pktio_t hdl) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", hdl); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return 0; } @@ -1296,7 +1296,7 @@ int odp_pktio_maxlen_set(odp_pktio_t hdl, uint32_t maxlen_input, entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_ERR("Pktio entry %d does not exist\n", hdl); + ODP_ERR("Pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return -1; } @@ -1360,7 +1360,7 @@ int odp_pktio_promisc_mode_set(odp_pktio_t hdl, odp_bool_t enable) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", hdl); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return -1; } @@ -1390,7 +1390,7 @@ int odp_pktio_promisc_mode(odp_pktio_t hdl) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", hdl); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return -1; } @@ -1421,7 +1421,7 @@ int odp_pktio_mac_addr(odp_pktio_t hdl, void *mac_addr, int addr_size) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", hdl); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return -1; } @@ -1456,7 +1456,7 @@ int odp_pktio_mac_addr_set(odp_pktio_t hdl, const void *mac_addr, int addr_size) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", hdl); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return -1; } @@ -1487,7 +1487,7 @@ odp_pktio_link_status_t odp_pktio_link_status(odp_pktio_t hdl) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", hdl); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return ODP_PKTIO_LINK_STATUS_UNKNOWN; } @@ -1543,7 +1543,7 @@ int odp_pktio_info(odp_pktio_t hdl, odp_pktio_info_t *info) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", hdl); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return -1; } @@ -1563,7 +1563,7 @@ int odp_pktio_link_info(odp_pktio_t hdl, odp_pktio_link_info_t *info) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", hdl); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return -1; } @@ -1579,7 +1579,7 @@ uint64_t odp_pktio_ts_res(odp_pktio_t hdl) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_ERR("pktio entry %d does not exist\n", hdl); + ODP_ERR("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return 0; } @@ -1596,7 +1596,7 @@ odp_time_t odp_pktio_ts_from_ns(odp_pktio_t hdl, uint64_t ns) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_ERR("pktio entry %d does not exist\n", hdl); + ODP_ERR("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return ODP_TIME_NULL; } @@ -1613,7 +1613,7 @@ odp_time_t odp_pktio_time(odp_pktio_t hdl, odp_time_t *global_ts) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_ERR("pktio entry %d does not exist\n", hdl); + ODP_ERR("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return ODP_TIME_NULL; } @@ -1652,7 +1652,7 @@ void odp_pktio_print(odp_pktio_t hdl) entry = get_pktio_entry(hdl); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", hdl); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return; } @@ -1781,7 +1781,7 @@ int odp_pktio_capability(odp_pktio_t pktio, odp_pktio_capability_t *capa) entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -1850,7 +1850,7 @@ int odp_pktio_stats(odp_pktio_t pktio, entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -1880,7 +1880,7 @@ int odp_pktio_stats_reset(odp_pktio_t pktio) entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -1920,7 +1920,7 @@ int odp_pktin_queue_config(odp_pktio_t pktio, entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -2065,6 +2065,77 @@ int odp_pktin_queue_config(odp_pktio_t pktio, return 0; } +int _odp_pktio_pktout_tm_config(odp_pktio_t pktio_hdl, + odp_pktout_queue_t *queue, bool reconf) +{ + odp_pktout_queue_param_t param; + bool pktio_started = false; + odp_pktout_mode_t mode; + pktio_entry_t *entry; + unsigned int i; + int rc = 0; + + odp_pktout_queue_param_init(¶m); + param.num_queues = 1; + + entry = get_pktio_entry(pktio_hdl); + if (entry == NULL) { + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio_hdl); + return -1; + } + + rc = -ENOTSUP; + mode = entry->s.param.out_mode; + /* Don't proceed further if mode is not TM */ + if (mode != ODP_PKTOUT_MODE_TM) + return rc; + + /* Don't reconfigure unless requested */ + if (entry->s.num_out_queue && !reconf) { + *queue = entry->s.out_queue[0].pktout; + return 0; + } + + if (entry->s.state == PKTIO_STATE_STARTED) { + pktio_started = true; + rc = odp_pktio_stop(pktio_hdl); + if (rc) { + ODP_ERR("Unable to stop pktio, rc=%d\n", rc); + return rc; + } + } + + /* If re-configuring, destroy old queues */ + if (entry->s.num_out_queue) { + destroy_out_queues(entry, entry->s.num_out_queue); + entry->s.num_out_queue = 0; + } + + init_out_queues(entry); + for (i = 0; i < param.num_queues; i++) { + entry->s.out_queue[i].pktout.index = i; + entry->s.out_queue[i].pktout.pktio = pktio_hdl; + } + + entry->s.num_out_queue = param.num_queues; + + rc = 0; + if (entry->s.ops->output_queues_config) { + rc = entry->s.ops->output_queues_config(entry, ¶m); + if (rc) + ODP_ERR("Unable to setup output queues, rc=%d\n", rc); + } + + /* Return pktout queue on success */ + if (!rc) + *queue = entry->s.out_queue[0].pktout; + + /* Take pktio back to its previous state */ + if (pktio_started) + rc |= odp_pktio_start(pktio_hdl); + return rc; +} + int odp_pktout_queue_config(odp_pktio_t pktio, const odp_pktout_queue_param_t *param) { @@ -2083,7 +2154,7 @@ int odp_pktout_queue_config(odp_pktio_t pktio, entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -2189,7 +2260,7 @@ int odp_pktin_event_queue(odp_pktio_t pktio, odp_queue_t queues[], int num) entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -2229,7 +2300,7 @@ int odp_pktin_queue(odp_pktio_t pktio, odp_pktin_queue_t queues[], int num) entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -2268,7 +2339,7 @@ int odp_pktout_event_queue(odp_pktio_t pktio, odp_queue_t queues[], int num) entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -2299,7 +2370,7 @@ int odp_pktout_queue(odp_pktio_t pktio, odp_pktout_queue_t queues[], int num) entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -2336,7 +2407,7 @@ int odp_pktin_recv(odp_pktin_queue_t queue, odp_packet_t packets[], int num) entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -2365,7 +2436,7 @@ int odp_pktin_recv_tmo(odp_pktin_queue_t queue, odp_packet_t packets[], int num, entry = get_pktio_entry(queue.pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", queue.pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)queue.pktio); return -1; } @@ -2520,7 +2591,7 @@ int odp_pktout_send(odp_pktout_queue_t queue, const odp_packet_t packets[], entry = get_pktio_entry(pktio); if (entry == NULL) { - ODP_DBG("pktio entry %d does not exist\n", pktio); + ODP_DBG("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)pktio); return -1; } @@ -2546,7 +2617,7 @@ int odp_pktout_ts_read(odp_pktio_t hdl, odp_time_t *ts) entry = get_pktio_entry(hdl); if (odp_unlikely(entry == NULL)) { - ODP_ERR("pktio entry %d does not exist\n", hdl); + ODP_ERR("pktio entry %" PRIuPTR " does not exist\n", (uintptr_t)hdl); return -1; } |