61 odp_stash_t *
const event_group_stash)
63 odp_stash_param_t stash_param;
64 odp_stash_capability_t stash_capa;
66 if (odp_stash_capability(&stash_capa, ODP_STASH_TYPE_FIFO) != 0)
71 "Maximum number of event groups(%d) exceeds the maximum\n"
72 "number of object handles(%" PRIu64
") a stash can hold.\n",
80 odp_stash_param_init(&stash_param);
82 stash_param.type = ODP_STASH_TYPE_FIFO;
83 stash_param.put_mode = ODP_STASH_OP_MT;
84 stash_param.get_mode = ODP_STASH_OP_MT;
86 stash_param.obj_size =
sizeof(uint32_t);
92 stash_param.strict_size =
true;
94 odp_stash_t stash = odp_stash_create(
"event_grp", &stash_param);
96 if (stash == ODP_STASH_INVALID)
106 egrp_elem = &
em_shm->event_group_tbl.egrp_elem[idx];
110 egrp_elem->event_group = egrp_idx2hdl(idx);
114 if (odp_stash_put_u32(stash, &idx, 1) != 1) {
120 *event_group_stash = stash;
125 for (uint32_t i = 0; i < idx; i++) {
128 odp_stash_get_u32(stash, &val, 1);
129 egrp_elem = &
em_shm->event_group_tbl.egrp_elem[i];
134 odp_stash_destroy(stash);
140 odp_stash_t stash =
em_shm->event_group_stash;
144 int32_t num = odp_stash_get_u32(stash, &tmp, 1);
152 EM_PRINT(
"Stash get failed: %i\n", num);
156 if (odp_stash_destroy(stash))
162em_event_group_t event_group_alloc(
void)
167 if (unlikely(odp_stash_get_u32(
em_shm->event_group_stash, &idx, 1) != 1))
173 egrp_elem = &
em_shm->event_group_tbl.egrp_elem[idx];
178 return egrp_idx2hdl(idx);
181em_status_t event_group_free(em_event_group_t event_group)
184 uint32_t idx = (uint32_t)egrp_hdl2idx(event_group);
186 if (unlikely(egrp_elem == NULL))
193 if (unlikely(odp_stash_put_u32(
em_shm->event_group_stash, &idx, 1) != 1)) {
202unsigned int event_group_count(
void)
207#define EGRP_INFO_HDR_FMT \
208"Number of event groups: %u\n\n" \
209"ID Applied Cnt(pre) Cnt(post) Gen Num-notif\n" \
210"-------------------------------------------------------\n%s\n"
212#define EGRP_INFO_LEN 56
213#define EGRP_INFO_FMT "%-10" PRI_EGRP "%-9c%-10u%-11u%-6u%-9d\n"
215void event_group_info_print(
void)
217 unsigned int egrp_num;
218 em_event_group_t egrp;
236 const int egrp_info_str_len = (egrp_num + 10) * EGRP_INFO_LEN + 1;
237 char egrp_info_str[egrp_info_str_len];
240 egrp_elem = event_group_elem_get(egrp);
242 if (unlikely(egrp_elem == NULL || !event_group_allocated(egrp_elem))) {
249 n_print = snprintf(egrp_info_str + len,
250 egrp_info_str_len - len,
252 egrp_count.
applied ?
'Y' :
'N',
257 if (n_print >= egrp_info_str_len - len)
266 EM_PRINT(
"No event group!\n");
274 egrp_info_str[len] =
'\0';
275 EM_PRINT(EGRP_INFO_HDR_FMT, egrp_num, egrp_info_str);
#define EM_MAX_EVENT_GROUPS
#define EM_EVENT_GROUP_UNDEF
em_event_group_t em_event_group_next(void)
em_event_group_t em_event_group_first(unsigned int *num)
odp_atomic_u32_t event_group_count