37#ifndef EM_ATOMIC_GROUP_H_
38#define EM_ATOMIC_GROUP_H_
56#define invalid_atomic_group(atomic_group) \
57 ((unsigned int)agrp_hdl2idx((atomic_group)) >= EM_MAX_ATOMIC_GROUPS)
67atomic_group_free(em_atomic_group_t atomic_group);
81agrp_hdl2idx(
const em_atomic_group_t atomic_group)
83 return (
int)((uintptr_t)atomic_group - 1);
86static inline em_atomic_group_t
87agrp_idx2hdl(
const int atomic_group_index)
89 return (em_atomic_group_t)(uintptr_t)(atomic_group_index + 1);
93atomic_group_elem_get(
const em_atomic_group_t atomic_group)
95 const int ag_idx = agrp_hdl2idx(atomic_group);
101 ag_elem = &
em_shm->atomic_group_tbl.ag_elem[ag_idx];
110 odp_ticketlock_lock(&ag_elem->lock);
115 odp_ticketlock_unlock(&ag_elem->lock);
122 odp_ticketlock_lock(&ag_elem->lock);
129 odp_ticketlock_unlock(&ag_elem->lock);
135atomic_group_count(
void);
143void print_ag_elem_info(
void);
em_status_t atomic_group_init(atomic_group_tbl_t *const atomic_group_tbl, atomic_group_pool_t *const atomic_group_pool)
void atomic_group_release(void)
void atomic_group_remove_queue(queue_elem_t *const q_elem)
em_atomic_group_t atomic_group_alloc(void)
void print_atomic_group_queues(em_atomic_group_t ag)
void print_atomic_group_info(void)
void atomic_group_dispatch(odp_event_t odp_evtbl[], const int num_events, queue_elem_t *q_elem)
#define EM_MAX_ATOMIC_GROUPS
odp_atomic_u32_t num_queues
odp_atomic_u32_t num_hi_prio_queues
objpool_elem_t atomic_group_pool_elem
q_elem_atomic_group_t agrp