63em_queue_t
queue_alloc(em_queue_t queue,
const char **err_str );
69em_queue_t queue_create_param(
const char *name,
const em_queue_param_t *param,
70 const char **err_str );
101unsigned int queue_count(
void);
104 char name[],
const size_t maxlen);
110void print_queue_prio_info(
void);
111void print_queue_elem_info(
void);
122static inline unsigned int
123queue_unsched_enqueue_multi(
const em_event_t events[],
int num,
126 odp_event_t odp_events[num];
127 odp_queue_t odp_queue = q_elem->
odp_queue;
130 if (unlikely(
EM_CHECK_LEVEL > 1 && odp_queue == ODP_QUEUE_INVALID))
134 q_elem->
state != EM_QUEUE_STATE_UNSCHEDULED))
137 events_em2odp(events, odp_events, num);
153 odp_event_type_t odp_etypes[num];
155 for (
int i = 0; i < num; i++)
156 odp_etypes[i] = odp_event_type(odp_events[i]);
158 for (
int i = 0; i < num; i++) {
159 if (odp_etypes[i] == ODP_EVENT_PACKET_VECTOR)
160 pktvec_tbl2odp(odp_events[i]);
161 else if (odp_etypes[i] == ODP_EVENT_VECTOR)
162 evvec_tbl2odp(odp_events[i]);
165 ret = odp_queue_enq_multi(odp_queue, odp_events, num);
167 if (likely(ret == num))
171 int enq = ret < 0 ? 0 : ret;
173 for (
int i = enq; i < num; i++) {
174 if (odp_etypes[i] == ODP_EVENT_PACKET_VECTOR)
175 pktvec_tbl2odp_revert(odp_events[i]);
176 else if (odp_etypes[i] == ODP_EVENT_VECTOR)
177 evvec_tbl2odp_revert(odp_events[i]);
184 ret = odp_queue_enq_multi(odp_queue, odp_events, num);
185 if (unlikely(ret < 0))
196queue_unsched_enqueue(em_event_t event,
const queue_elem_t *
const q_elem)
198 odp_event_t odp_event = event_em2odp(event);
199 odp_queue_t odp_queue = q_elem->
odp_queue;
203 (odp_event == ODP_EVENT_INVALID ||
204 odp_queue == ODP_QUEUE_INVALID)))
208 q_elem->
state != EM_QUEUE_STATE_UNSCHEDULED))
218 odp_event_type_t odp_etype = odp_event_type(odp_event);
220 if (odp_etype == ODP_EVENT_PACKET_VECTOR)
221 pktvec_tbl2odp(odp_event);
222 else if (odp_etype == ODP_EVENT_VECTOR)
223 evvec_tbl2odp(odp_event);
225 ret = odp_queue_enq(odp_queue, odp_event);
231 if (unlikely(ret != 0)) {
233 if (odp_etype == ODP_EVENT_PACKET_VECTOR)
234 pktvec_tbl2odp_revert(odp_event);
235 else if (odp_etype == ODP_EVENT_VECTOR)
236 evvec_tbl2odp_revert(odp_event);
245 ret = odp_queue_enq(odp_queue, odp_event);
246 if (unlikely(ret != 0))
253next_local_queue_events(
stash_entry_t entry_tbl[],
int num_events)
269 odp_stash_t stash = locm->
local_queues.prio[prio].stash;
270 int num = odp_stash_get_u64(stash, &entry_tbl[0].u64 ,
ENV_LOCAL em_locm_t em_locm
const char * queue_state_str(queue_state_t state)
em_status_t queue_enable(queue_elem_t *const q_elem)
void queue_param_apply_conf(em_queue_param_t *param, const em_queue_conf_t *conf)
em_status_t queue_disable(queue_elem_t *const q_elem)
em_status_t queue_term_local(void)
em_status_t queue_init(queue_tbl_t *const queue_tbl, queue_pool_t *const queue_pool, queue_pool_t *const queue_pool_static, queue_pool_t *const queue_pool_aggr)
em_status_t queue_disable_all(eo_elem_t *const eo_elem)
void queue_setup_common(const char *name, const em_queue_param_t *param, queue_elem_t *q_elem)
em_status_t queue_state_change(queue_elem_t *const queue_elem, queue_state_t new_state)
em_queue_t queue_alloc(em_queue_t queue, const char **err_str)
const char * queue_type_str(em_queue_type_t type)
em_status_t queue_state_change__check(queue_state_t old_state, queue_state_t new_state, int is_setup)
em_status_t queue_enable_all(eo_elem_t *const eo_elem)
em_status_t queue_state_change_all(eo_elem_t *const eo_elem, queue_state_t new_state)
em_status_t queue_init_local(void)
void print_queue_capa(void)
em_status_t queue_delete(queue_elem_t *const queue_elem, const char **err_str)
void print_queue_info(void)
#define EM_QUEUE_PRIO_NUM
local_queues_t local_queues