@@ -19,6 +19,7 @@ include_HEADERS = \
$(top_srcdir)/platform/linux-generic/include/api/odp_coremask.h \
$(top_srcdir)/platform/linux-generic/include/api/odp_crypto.h \
$(top_srcdir)/platform/linux-generic/include/api/odp_debug.h \
+ $(top_srcdir)/platform/linux-generic/include/api/odp_event.h \
$(top_srcdir)/platform/linux-generic/include/api/odp_hints.h \
$(top_srcdir)/platform/linux-generic/include/api/odp_init.h \
$(top_srcdir)/platform/linux-generic/include/api/odp_packet_flags.h \
@@ -80,6 +81,7 @@ __LIB__libodp_la_SOURCES = \
odp_classification.c \
odp_coremask.c \
odp_crypto.c \
+ odp_event.c \
odp_init.c \
odp_impl.c \
odp_linux.c \
@@ -49,6 +49,7 @@ extern "C" {
#include <odp_crypto.h>
#include <odp_classification.h>
#include <odp_rwlock.h>
+#include <odp_event.h>
#ifdef __cplusplus
}
@@ -29,6 +29,28 @@ extern "C" {
/**
+ * Get buffer handle from event
+ *
+ * Converts an ODP_EVENT_BUFFER type event to a buffer.
+ *
+ * @param ev Event handle
+ *
+ * @return Buffer handle
+ *
+ * @see odp_event_type()
+ */
+odp_buffer_t odp_buffer_from_event(odp_event_t ev);
+
+/**
+ * Convert buffer handle to event
+ *
+ * @param buf Buffer handle
+ *
+ * @return Event handle
+ */
+odp_event_t odp_buffer_to_event(odp_buffer_t buf);
+
+/**
* Buffer start address
*
* @param buf Buffer handle
new file mode 100644
@@ -0,0 +1,59 @@
+/* Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+
+/**
+ * @file
+ *
+ * ODP event
+ */
+
+#ifndef ODP_EVENT_H_
+#define ODP_EVENT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <odp_std_types.h>
+#include <odp_platform_types.h>
+
+/** @defgroup odp_event ODP EVENT
+ * Operations on an event.
+ * @{
+ */
+
+
+/**
+ * Event type
+ *
+ * @param event Event handle
+ *
+ * @return Event type or ODP_EVENT_TYPE_INVALID
+ */
+int odp_event_type(odp_event_t event);
+
+/**< Invalid event type */
+#define ODP_EVENT_TYPE_INVALID (-1)
+/**< Packet event */
+#define ODP_EVENT_PACKET (ODP_EVENT_TYPE_INVALID + 1)
+/**< Buffer event */
+#define ODP_EVENT_BUFFER (ODP_EVENT_TYPE_INVALID + 2)
+/**< Timeout event */
+#define ODP_EVENT_TIMEOUT (ODP_EVENT_TYPE_INVALID + 3)
+
+
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
@@ -113,6 +113,27 @@ odp_packet_t odp_packet_from_buffer(odp_buffer_t buf);
*/
odp_buffer_t odp_packet_to_buffer(odp_packet_t pkt);
+/**
+ * Get packet handle from event
+ *
+ * Converts an ODP_EVENT_PACKET type event to a packet.
+ *
+ * @param ev Event handle
+ *
+ * @return Packet handle
+ *
+ * @see odp_event_type()
+ */
+odp_packet_t odp_packet_from_event(odp_event_t ev);
+
+/**
+ * Convert packet handle to event
+ *
+ * @param buf Packet handle
+ *
+ * @return Event handle
+ */
+odp_event_t odp_packet_to_event(odp_packet_t pkt);
/*
*
@@ -65,6 +65,12 @@ typedef uint32_t odp_pktio_t;
/** odp_pktio_t value to indicate any port */
#define ODP_PKTIO_ANY ((odp_pktio_t)~0)
+/** ODP event */
+typedef odp_buffer_t odp_event_t;
+
+/** Invalid event */
+#define ODP_EVENT_INVALID ODP_BUFFER_INVALID
+
/**
* ODP shared memory block
*/
@@ -21,6 +21,7 @@ extern "C" {
#include <stdlib.h>
#include <odp_std_types.h>
#include <odp_buffer.h>
+#include <odp_event.h>
#include <odp_queue.h>
/** @defgroup odp_timer ODP TIMER
@@ -310,6 +311,18 @@ int odp_timer_cancel(odp_timer_t tim, odp_buffer_t *tmo_buf);
odp_timeout_t odp_timeout_from_buf(odp_buffer_t buf);
/**
+ * Return timeout handle that is associated with timeout event
+ *
+ * Note: any invalid parameters will cause undefined behavior and may cause
+ * the application to abort or crash.
+ *
+ * @param buf An event of type ODP_EVENT_TIMEOUT
+ *
+ * @return timeout handle
+ */
+odp_timeout_t odp_timeout_from_event(odp_event_t ev);
+
+/**
* Check for fresh timeout
* If the corresponding timer has been reset or cancelled since this timeout
* was enqueued, the timeout is stale (not fresh).
@@ -14,6 +14,16 @@
#include <stdio.h>
+odp_buffer_t odp_buffer_from_event(odp_event_t ev)
+{
+ return (odp_buffer_t)ev;
+}
+
+odp_event_t odp_buffer_to_event(odp_buffer_t buf)
+{
+ return (odp_event_t)buf;
+}
+
void *odp_buffer_addr(odp_buffer_t buf)
{
odp_buffer_hdr_t *hdr = odp_buf_to_hdr(buf);
new file mode 100644
@@ -0,0 +1,26 @@
+/* Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <odp_event.h>
+#include <odp_buffer.h>
+
+int odp_event_type(odp_event_t event)
+{
+ odp_buffer_t buf;
+
+ buf = odp_buffer_from_event(event);
+
+ switch (odp_buffer_type(buf)) {
+ case ODP_BUFFER_TYPE_RAW:
+ return ODP_EVENT_BUFFER;
+ case ODP_BUFFER_TYPE_PACKET:
+ return ODP_EVENT_PACKET;
+ case ODP_BUFFER_TYPE_TIMEOUT:
+ return ODP_EVENT_TIMEOUT;
+ default:
+ return ODP_EVENT_TYPE_INVALID;
+ }
+}
@@ -75,6 +75,16 @@ odp_buffer_t odp_packet_to_buffer(odp_packet_t pkt)
return (odp_buffer_t)pkt;
}
+odp_packet_t odp_packet_from_event(odp_event_t ev)
+{
+ return (odp_packet_t)ev;
+}
+
+odp_event_t odp_packet_to_event(odp_packet_t pkt)
+{
+ return (odp_event_t)pkt;
+}
+
/*
*
* Pointers and lengths
@@ -39,6 +39,7 @@
#include <odp_buffer_pool_internal.h>
#include <odp_debug.h>
#include <odp_debug_internal.h>
+#include <odp_event.h>
#include <odp_hints.h>
#include <odp_internal.h>
#include <odp_queue.h>
@@ -802,6 +803,14 @@ odp_timeout_t odp_timeout_from_buf(odp_buffer_t buf)
return (odp_timeout_t)timeout_hdr_from_buf(buf);
}
+odp_timeout_t odp_timeout_from_event(odp_event_t ev)
+{
+ /* This check not mandated by the API specification */
+ if (odp_event_type(ev) != ODP_EVENT_TIMEOUT)
+ ODP_ABORT("Event not a timeout");
+ return (odp_timeout_t)timeout_hdr_from_buf(odp_buffer_from_event(ev));
+}
+
int odp_timeout_fresh(odp_timeout_t tmo)
{
const odp_timeout_hdr_t *hdr = (odp_timeout_hdr_t *)tmo;
* Added odp_event.h and odp_event.c * Added odp_event_t type and type conversion functions Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> --- platform/linux-generic/Makefile.am | 2 + platform/linux-generic/include/api/odp.h | 1 + platform/linux-generic/include/api/odp_buffer.h | 22 ++++++++ platform/linux-generic/include/api/odp_event.h | 59 ++++++++++++++++++++++ platform/linux-generic/include/api/odp_packet.h | 21 ++++++++ .../linux-generic/include/api/odp_platform_types.h | 6 +++ platform/linux-generic/include/api/odp_timer.h | 13 +++++ platform/linux-generic/odp_buffer.c | 10 ++++ platform/linux-generic/odp_event.c | 26 ++++++++++ platform/linux-generic/odp_packet.c | 10 ++++ platform/linux-generic/odp_timer.c | 9 ++++ 11 files changed, 179 insertions(+) create mode 100644 platform/linux-generic/include/api/odp_event.h create mode 100644 platform/linux-generic/odp_event.c