@@ -30,6 +30,8 @@ odpapiplatinclude_HEADERS = \
include/odp/api/plat/packet_inline_types.h \
include/odp/api/plat/packet_inlines.h \
include/odp/api/plat/packet_inlines_api.h \
+ include/odp/api/plat/pktio_inlines.h \
+ include/odp/api/plat/pktio_inlines_api.h \
include/odp/api/plat/pool_inline_types.h \
include/odp/api/plat/std_clib_inlines.h \
include/odp/api/plat/strong_types.h \
@@ -205,6 +207,7 @@ __LIB__libodp_linux_la_SOURCES += \
odp_byteorder.c \
odp_packet_api.c \
odp_packet_flags_api.c \
+ odp_pktio_api.c \
odp_std_clib.c \
odp_sync.c \
odp_thread_api.c \
@@ -51,6 +51,10 @@ typedef struct odp_pktout_queue_t {
* @}
*/
+#define _ODP_INLINE static inline
+#include <odp/api/plat/pktio_inlines.h>
+#include <odp/api/plat/pktio_inlines_api.h>
+
#ifdef __cplusplus
}
#endif
new file mode 100644
@@ -0,0 +1,27 @@
+/* Copyright (c) 2018, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_PLAT_PKTIO_INLINES_H_
+#define ODP_PLAT_PKTIO_INLINES_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @cond _ODP_HIDE_FROM_DOXYGEN_ */
+
+static inline int _odp_pktio_index(odp_pktio_t pktio)
+{
+ return (int)(uintptr_t)pktio - 1;
+}
+
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
new file mode 100644
@@ -0,0 +1,31 @@
+/* Copyright (c) 2018, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/**
+ * @file
+ */
+
+#ifndef ODP_PLAT_PKTIO_INLINES_API_H_
+#define ODP_PLAT_PKTIO_INLINES_API_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_ODP_INLINE int odp_pktio_index(odp_pktio_t pktio)
+{
+ return _odp_pktio_index(pktio);
+}
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
@@ -18,6 +18,8 @@
extern "C" {
#endif
+#include <odp/api/packet_io.h>
+#include <odp/api/plat/pktio_inlines.h>
#include <odp/api/spinlock.h>
#include <odp/api/ticketlock.h>
#include <odp_classification_datamodel.h>
@@ -235,13 +237,10 @@ typedef struct pktio_if_ops {
extern void *pktio_entry_ptr[];
-static inline int pktio_to_id(odp_pktio_t pktio)
-{
- return _odp_typeval(pktio) - 1;
-}
-
static inline pktio_entry_t *get_pktio_entry(odp_pktio_t pktio)
{
+ int idx;
+
if (odp_unlikely(pktio == ODP_PKTIO_INVALID))
return NULL;
@@ -251,7 +250,9 @@ static inline pktio_entry_t *get_pktio_entry(odp_pktio_t pktio)
return NULL;
}
- return pktio_entry_ptr[pktio_to_id(pktio)];
+ idx = _odp_pktio_index(pktio);
+
+ return pktio_entry_ptr[idx];
}
static inline int pktio_cls_enabled(pktio_entry_t *entry)
@@ -13,6 +13,8 @@
#include <odp/api/hints.h>
#include <odp/api/byteorder.h>
#include <odp/api/plat/byteorder_inlines.h>
+#include <odp/api/packet_io.h>
+#include <odp/api/plat/pktio_inlines.h>
#include <protocols/eth.h>
#include <protocols/ip.h>
@@ -1269,7 +1271,7 @@ void *odp_packet_offset(odp_packet_t pkt, uint32_t offset, uint32_t *len,
int odp_packet_input_index(odp_packet_t pkt)
{
- return odp_pktio_index(packet_hdr(pkt)->input);
+ return _odp_pktio_index(packet_hdr(pkt)->input);
}
void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ctx)
@@ -9,6 +9,7 @@
#include <odp_posix_extensions.h>
#include <odp/api/packet_io.h>
+#include <odp/api/plat/pktio_inlines.h>
#include <odp_packet_io_internal.h>
#include <odp/api/packet.h>
#include <odp_packet_internal.h>
@@ -481,7 +482,7 @@ int odp_pktio_start(odp_pktio_t hdl)
}
}
- sched_fn->pktio_start(pktio_to_id(hdl), num, index, odpq);
+ sched_fn->pktio_start(_odp_pktio_index(hdl), num, index, odpq);
}
return res;
@@ -1022,16 +1023,6 @@ int odp_pktio_info(odp_pktio_t hdl, odp_pktio_info_t *info)
return 0;
}
-int odp_pktio_index(odp_pktio_t pktio)
-{
- pktio_entry_t *entry = get_pktio_entry(pktio);
-
- if (!entry || is_free(entry))
- return -1;
-
- return pktio_to_id(pktio);
-}
-
uint64_t odp_pktin_ts_res(odp_pktio_t hdl)
{
pktio_entry_t *entry;
@@ -1361,7 +1352,7 @@ int odp_pktin_queue_config(odp_pktio_t pktio,
mode == ODP_PKTIN_MODE_SCHED) {
odp_queue_param_t queue_param;
char name[ODP_QUEUE_NAME_LEN];
- int pktio_id = pktio_to_id(pktio);
+ int pktio_id = _odp_pktio_index(pktio);
snprintf(name, sizeof(name), "odp-pktin-%i-%i",
pktio_id, i);
@@ -1496,7 +1487,7 @@ int odp_pktout_queue_config(odp_pktio_t pktio,
odp_queue_param_t queue_param;
queue_t q_int;
char name[ODP_QUEUE_NAME_LEN];
- int pktio_id = pktio_to_id(pktio);
+ int pktio_id = _odp_pktio_index(pktio);
snprintf(name, sizeof(name), "odp-pktout-%i-%i",
pktio_id, i);
new file mode 100644
@@ -0,0 +1,14 @@
+/* Copyright (c) 2018, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "config.h"
+
+#include <odp/api/packet_io.h>
+#include <odp/api/plat/pktio_inlines.h>
+
+/* Include non-inlined versions of API functions */
+#define _ODP_INLINE
+#include <odp/api/plat/pktio_inlines_api.h>