36#ifndef EM_QUEUE_INLINE_H_
37#define EM_QUEUE_INLINE_H_
68queue_hdl2idx(em_queue_t queue)
79static inline em_queue_t
80queue_idx2hdl(
int queue_idx)
92queue_id2idx(uint16_t queue_id)
99queue_idx2id(
int queue_idx)
105static inline em_queue_t
106queue_id2hdl(uint16_t queue_id)
110 iq.queue_id = queue_id;
123queue_external(em_queue_t queue)
135queue_elem_get(
const em_queue_t queue)
142 queue_idx = queue_id2idx(iq.queue_id);
145 (uint16_t)queue_idx >
em_shm->queue_tbl.max_queue_num - 1))
148 queue_elem = &
em_shm->queue_tbl.queue_elem[queue_idx];
153static inline em_queue_t
158 if (unlikely(q_elem == NULL))
161 return (em_queue_t)(uintptr_t)q_elem->
queue;
172eo_queue_node_to_queue_elem(
const list_node_t *
const list_node)
177 return likely(list_node != NULL) ? q_elem : NULL;
192 odp_schedule_sync_t *odp_schedule_sync )
196 *odp_schedule_sync = ODP_SCHED_SYNC_ATOMIC;
199 *odp_schedule_sync = ODP_SCHED_SYNC_PARALLEL;
202 *odp_schedule_sync = ODP_SCHED_SYNC_ORDERED;
210scheduled_queue_type_odp2em(odp_schedule_sync_t odp_schedule_sync,
213 switch (odp_schedule_sync) {
214 case ODP_SCHED_SYNC_ATOMIC:
217 case ODP_SCHED_SYNC_PARALLEL:
220 case ODP_SCHED_SYNC_ORDERED:
229static inline em_event_t
232 odp_queue_t odp_queue;
233 odp_event_t odp_event;
237 odp_event = odp_queue_deq(odp_queue);
238 if (odp_event == ODP_EVENT_INVALID)
241 event = event_odp2em(odp_event);
252 odp_event_type(odp_event) == ODP_EVENT_VECTOR)) {
261 odp_event_vector_t odp_evvec = odp_event_vector_from_event(odp_event);
262 event_hdr_t *ev_hdr = odp_event_vector_user_area(odp_evvec);
264 return evhdr_init_evvec(ev_hdr, event, odp_evvec,
271 event = evstate_em2usr(event, ev_hdr, EVSTATE__DEQUEUE);
279 em_event_t events[],
int num)
281 odp_queue_t odp_queue;
285 odp_event_t *
const odp_events = (odp_event_t *)events;
288 ret = odp_queue_deq_multi(odp_queue, odp_events , num);
306 for (
int i = 0; i < ret; i++) {
307 if (odp_event_type(odp_events[i]) == ODP_EVENT_VECTOR) {
308 odp_event_vector_t evvec =
309 odp_event_vector_from_event(odp_events[i]);
311 odp_event_vector_user_area(evvec);
313 events[i] = evhdr_init_evvec(ev_hdr,
314 event_odp2em(odp_events[i]),
317 }
else if (esv_enabled()) {
320 events[i] = evstate_em2usr(events[i], ev_hdr,
321 EVSTATE__DEQUEUE_MULTI);
330 event_to_hdr_multi(events, ev_hdrs, ret);
331 evstate_em2usr_multi(events, ev_hdrs, ret,
332 EVSTATE__DEQUEUE_MULTI);
ENV_LOCAL em_locm_t em_locm
#define EM_QUEUE_PRIO_NUM
#define EM_QUEUE_RANGE_OFFSET
em_queue_type_t em_queue_type(em_queue_t queue)
em_locm_current_t current
struct em_shm_t::@53 queue_prio
int map[EM_QUEUE_PRIO_NUM]
objpool_elem_t queue_pool_elem