aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/include/odp/api/plat/event_inlines.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-generic/include/odp/api/plat/event_inlines.h')
-rw-r--r--platform/linux-generic/include/odp/api/plat/event_inlines.h61
1 files changed, 59 insertions, 2 deletions
diff --git a/platform/linux-generic/include/odp/api/plat/event_inlines.h b/platform/linux-generic/include/odp/api/plat/event_inlines.h
index 4e3368ff0..2e7c7db5e 100644
--- a/platform/linux-generic/include/odp/api/plat/event_inlines.h
+++ b/platform/linux-generic/include/odp/api/plat/event_inlines.h
@@ -9,12 +9,12 @@
#define ODP_PLAT_EVENT_INLINES_H_
#include <odp/api/buffer_types.h>
-#include <odp/api/dma.h>
#include <odp/api/event_types.h>
#include <odp/api/packet_types.h>
#include <odp/api/timer_types.h>
#include <odp/api/plat/buffer_inline_types.h>
+#include <odp/api/plat/debug_inlines.h>
#include <odp/api/plat/event_inline_types.h>
#include <odp/api/plat/event_vector_inline_types.h>
#include <odp/api/plat/packet_inline_types.h>
@@ -28,8 +28,10 @@
#define odp_event_type __odp_event_type
#define odp_event_type_multi __odp_event_type_multi
#define odp_event_user_area __odp_event_user_area
+ #define odp_event_user_area_and_flag __odp_event_user_area_and_flag
#define odp_event_subtype __odp_event_subtype
#define odp_event_types __odp_event_types
+ #define odp_event_types_multi __odp_event_types_multi
#define odp_event_flow_id __odp_event_flow_id
#define odp_event_flow_id_set __odp_event_flow_id_set
#else
@@ -72,6 +74,7 @@ _ODP_INLINE void *odp_event_user_area(odp_event_t event)
switch (type) {
case ODP_EVENT_BUFFER:
+ case ODP_EVENT_DMA_COMPL:
return _odp_buffer_get((odp_buffer_t)event, void *, uarea_addr);
case ODP_EVENT_PACKET:
return _odp_pkt_get((odp_packet_t)event, void *, user_area);
@@ -79,9 +82,47 @@ _ODP_INLINE void *odp_event_user_area(odp_event_t event)
return _odp_event_vect_get((odp_packet_vector_t)event, void *, uarea_addr);
case ODP_EVENT_TIMEOUT:
return _odp_timeout_hdr_field((odp_timeout_t)event, void *, uarea_addr);
+ default:
+ return NULL;
+ }
+}
+
+_ODP_INLINE void *odp_event_user_area_and_flag(odp_event_t event, int *flag)
+{
+ const odp_event_type_t type = __odp_event_type_get(event);
+
+ _ODP_ASSERT(flag != NULL);
+
+ switch (type) {
+ case ODP_EVENT_BUFFER:
case ODP_EVENT_DMA_COMPL:
- return odp_dma_compl_user_area((odp_dma_compl_t)event);
+ *flag = -1;
+ return _odp_buffer_get((odp_buffer_t)event, void *, uarea_addr);
+ case ODP_EVENT_PACKET:
+ {
+ _odp_packet_flags_t pkt_flags;
+ odp_packet_t pkt = (odp_packet_t)event;
+
+ pkt_flags.all_flags = _odp_pkt_get(pkt, uint32_t, flags);
+ *flag = pkt_flags.user_flag;
+
+ return _odp_pkt_get(pkt, void *, user_area);
+ }
+ case ODP_EVENT_PACKET_VECTOR:
+ {
+ _odp_event_vector_flags_t pktv_flags;
+ odp_packet_vector_t pktv = (odp_packet_vector_t)event;
+
+ pktv_flags.all_flags = _odp_event_vect_get(pktv, uint32_t, flags);
+ *flag = pktv_flags.user_flag;
+
+ return _odp_event_vect_get(pktv, void *, uarea_addr);
+ }
+ case ODP_EVENT_TIMEOUT:
+ *flag = -1;
+ return _odp_timeout_hdr_field((odp_timeout_t)event, void *, uarea_addr);
default:
+ *flag = -1;
return NULL;
}
}
@@ -106,6 +147,22 @@ _ODP_INLINE odp_event_type_t odp_event_types(odp_event_t event,
return event_type;
}
+_ODP_INLINE void odp_event_types_multi(const odp_event_t event[], odp_event_type_t type[],
+ odp_event_subtype_t subtype[], int num)
+{
+ for (int i = 0; i < num; i++)
+ type[i] = __odp_event_type_get(event[i]);
+
+ if (subtype == NULL)
+ return;
+
+ for (int i = 0; i < num; i++) {
+ subtype[i] = (type[i] == ODP_EVENT_PACKET) ?
+ (odp_event_subtype_t)_odp_pkt_get((odp_packet_t)event[i], int8_t,
+ subtype) : ODP_EVENT_NO_SUBTYPE;
+ }
+}
+
_ODP_INLINE uint32_t odp_event_flow_id(odp_event_t event)
{
return _odp_event_hdr_field(event, uint8_t, flow_id);