diff options
author | Ciprian Barbu <ciprian.barbu@linaro.org> | 2014-10-01 18:53:50 +0300 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2014-10-02 13:51:35 +0400 |
commit | e968af6c153700149d1516c733766478e3b52006 (patch) | |
tree | cfa2d027597410a8d082d8b8e678898a7040164f /platform | |
parent | 885542fb76691c49fd61f279f07d3d92841c249b (diff) |
Remove pktio type awareness
Signed-off-by: Ciprian Barbu <ciprian.barbu@linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform')
-rw-r--r-- | platform/linux-generic/include/api/odp_packet_io.h | 4 | ||||
-rw-r--r-- | platform/linux-generic/include/odp_packet_io_internal.h | 6 | ||||
-rw-r--r-- | platform/linux-generic/odp_packet_io.c | 110 |
3 files changed, 49 insertions, 71 deletions
diff --git a/platform/linux-generic/include/api/odp_packet_io.h b/platform/linux-generic/include/api/odp_packet_io.h index cfefac09e..9f9e7541f 100644 --- a/platform/linux-generic/include/api/odp_packet_io.h +++ b/platform/linux-generic/include/api/odp_packet_io.h @@ -36,12 +36,10 @@ typedef uint32_t odp_pktio_t; * * @param dev Packet IO device * @param pool Pool to use for packet IO - * @param params Set of parameters to pass to the arch dependent implementation * * @return ODP packet IO handle or ODP_PKTIO_INVALID on error */ -odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool, - odp_pktio_params_t *params); +odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool); /** * Close an ODP packet IO instance diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h index 881cc5ffd..7ba72df11 100644 --- a/platform/linux-generic/include/odp_packet_io_internal.h +++ b/platform/linux-generic/include/odp_packet_io_internal.h @@ -20,9 +20,6 @@ extern "C" { #include <odp_spinlock.h> #include <odp_packet_socket.h> -#ifdef ODP_HAVE_NETMAP -#include <odp_packet_netmap.h> -#endif struct pktio_entry { odp_spinlock_t lock; /**< entry spinlock */ @@ -32,9 +29,6 @@ struct pktio_entry { odp_pktio_params_t params; /**< pktio parameters */ pkt_sock_t pkt_sock; /**< using socket API for IO */ pkt_sock_mmap_t pkt_sock_mmap; /**< using socket mmap API for IO */ -#ifdef ODP_HAVE_NETMAP - pkt_netmap_t pkt_nm; /**< using netmap API for IO */ -#endif }; typedef union { diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index c06653fef..719e1d095 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -109,32 +109,16 @@ static void unlock_entry(pktio_entry_t *entry) odp_spinlock_unlock(&entry->s.lock); } -static void init_pktio_entry(pktio_entry_t *entry, odp_pktio_params_t *params) +static void init_pktio_entry(pktio_entry_t *entry) { set_taken(entry); entry->s.inq_default = ODP_QUEUE_INVALID; - switch (params->type) { - case ODP_PKTIO_TYPE_SOCKET_BASIC: - case ODP_PKTIO_TYPE_SOCKET_MMSG: - case ODP_PKTIO_TYPE_SOCKET_MMAP: - memset(&entry->s.pkt_sock, 0, sizeof(entry->s.pkt_sock)); - memset(&entry->s.pkt_sock_mmap, 0, - sizeof(entry->s.pkt_sock_mmap)); - break; -#ifdef ODP_HAVE_NETMAP - case ODP_PKTIO_TYPE_NETMAP: - memset(&entry->s.pkt_nm, 0, sizeof(entry->s.pkt_nm)); - break; -#endif - default: - ODP_ERR("Packet I/O type not supported. Please recompile\n"); - break; - } - /* Save pktio parameters, type is the most useful */ - memcpy(&entry->s.params, params, sizeof(*params)); + memset(&entry->s.params, 0, sizeof(entry->s.params)); + memset(&entry->s.pkt_sock, 0, sizeof(entry->s.pkt_sock)); + memset(&entry->s.pkt_sock_mmap, 0, sizeof(entry->s.pkt_sock_mmap)); } -static odp_pktio_t alloc_lock_pktio_entry(odp_pktio_params_t *params) +static odp_pktio_t alloc_lock_pktio_entry(void) { odp_pktio_t id; pktio_entry_t *entry; @@ -145,7 +129,7 @@ static odp_pktio_t alloc_lock_pktio_entry(odp_pktio_params_t *params) if (is_free(entry)) { lock_entry(entry); if (is_free(entry)) { - init_pktio_entry(entry, params); + init_pktio_entry(entry); id = i + 1; return id; /* return with entry locked! */ } @@ -168,30 +152,14 @@ static int free_pktio_entry(odp_pktio_t id) return 0; } -odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool, - odp_pktio_params_t *params) +odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool) { odp_pktio_t id; pktio_entry_t *pktio_entry; int res; + int fanout = 1; - if (params == NULL) { - ODP_ERR("Invalid pktio params\n"); - return ODP_PKTIO_INVALID; - } - - switch (params->type) { - case ODP_PKTIO_TYPE_SOCKET_BASIC: - case ODP_PKTIO_TYPE_SOCKET_MMSG: - case ODP_PKTIO_TYPE_SOCKET_MMAP: - ODP_DBG("Allocating socket pktio\n"); - break; - default: - ODP_ERR("Invalid pktio type: %02x\n", params->type); - return ODP_PKTIO_INVALID; - } - - id = alloc_lock_pktio_entry(params); + id = alloc_lock_pktio_entry(); if (id == ODP_PKTIO_INVALID) { ODP_ERR("No resources available.\n"); return ODP_PKTIO_INVALID; @@ -200,33 +168,51 @@ odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool, pktio_entry = get_entry(id); - switch (params->type) { - case ODP_PKTIO_TYPE_SOCKET_BASIC: - case ODP_PKTIO_TYPE_SOCKET_MMSG: + ODP_DBG("ODP_PKTIO_USE_FANOUT: %d\n", fanout); + if (getenv("ODP_PKTIO_DISABLE_SOCKET_MMAP") == NULL) { + pktio_entry->s.params.sock_params.type = + ODP_PKTIO_TYPE_SOCKET_MMAP; + pktio_entry->s.params.sock_params.fanout = fanout; + res = setup_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap, dev, + pool, fanout); + if (res != -1) { + ODP_DBG("IO type: ODP_PKTIO_TYPE_SOCKET_MMAP\n"); + goto done; + } + close_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap); + } + + if (getenv("ODP_PKTIO_DISABLE_SOCKET_MMSG") == NULL) { + pktio_entry->s.params.sock_params.type = + ODP_PKTIO_TYPE_SOCKET_MMSG; + pktio_entry->s.params.sock_params.fanout = fanout; res = setup_pkt_sock(&pktio_entry->s.pkt_sock, dev, pool); - if (res == -1) { - close_pkt_sock(&pktio_entry->s.pkt_sock); - free_pktio_entry(id); - id = ODP_PKTIO_INVALID; + if (res != -1) { + ODP_DBG("IO type: ODP_PKTIO_TYPE_SOCKET_MMSG\n"); + goto done; } - break; - case ODP_PKTIO_TYPE_SOCKET_MMAP: - res = setup_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap, dev, - pool, params->sock_params.fanout); - if (res == -1) { - close_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap); - free_pktio_entry(id); - id = ODP_PKTIO_INVALID; + close_pkt_sock(&pktio_entry->s.pkt_sock); + } + + if (getenv("ODP_PKTIO_DISABLE_SOCKET_BASIC") == NULL) { + pktio_entry->s.params.sock_params.type = + ODP_PKTIO_TYPE_SOCKET_BASIC; + pktio_entry->s.params.sock_params.fanout = fanout; + res = setup_pkt_sock(&pktio_entry->s.pkt_sock, dev, pool); + if (res != -1) { + ODP_DBG("IO type: ODP_PKTIO_TYPE_SOCKET_BASIC\n"); + goto done; } - break; - default: - free_pktio_entry(id); - id = ODP_PKTIO_INVALID; - ODP_ERR("This type of I/O is not supported. Please recompile.\n"); - break; + close_pkt_sock(&pktio_entry->s.pkt_sock); } unlock_entry(pktio_entry); + free_pktio_entry(id); + ODP_ERR("Unable to init any I/O type.\n"); + return ODP_PKTIO_INVALID; + +done: + unlock_entry(pktio_entry); return id; } |