35 odp_stash_t *
const event_group_stash)
42 odp_stash_param_t stash_param;
43 odp_stash_capability_t stash_capa;
45 if (odp_stash_capability(&stash_capa, ODP_STASH_TYPE_FIFO) != 0)
50 "Maximum number of event groups(%d) exceeds the maximum\n"
51 "number of object handles(%" PRIu64
") a stash can hold.\n",
59 odp_stash_param_init(&stash_param);
61 stash_param.type = ODP_STASH_TYPE_FIFO;
62 stash_param.put_mode = ODP_STASH_OP_MT;
63 stash_param.get_mode = ODP_STASH_OP_MT;
65 stash_param.obj_size =
sizeof(uint32_t);
67 stash = odp_stash_create(
"event_grp", &stash_param);
68 if (stash == ODP_STASH_INVALID)
72 egrp_elem = &
em_shm->event_group_tbl.egrp_elem[idx];
76 env_atomic64_set(&egrp_elem->post.atomic, 0);
77 env_atomic64_set(&egrp_elem->pre.atomic, 0);
80 if (odp_stash_put_u32(stash, &idx, 1) != 1) {
87 *event_group_stash = stash;
92 for (uint32_t i = 0; i < idx; i++) {
93 odp_stash_get_u32(stash, &val, 1);
95 egrp_elem = &
em_shm->event_group_tbl.egrp_elem[i];
101 odp_stash_destroy(stash);
109 odp_stash_t stash =
em_shm->event_group_stash;
112 num = odp_stash_get_u32(stash, &tmp, 1);
120 EM_PRINT(
"Stash get failed: %i\n", num);
124 if (odp_stash_destroy(stash))
131 event_group_alloc(
void)
136 if (unlikely(odp_stash_get_u32(
em_shm->event_group_stash, &idx, 1) != 1))
142 egrp_elem = &
em_shm->event_group_tbl.egrp_elem[idx];
147 return egrp_idx2hdl(idx);
151 event_group_free(em_event_group_t event_group)
154 uint32_t idx = (uint32_t)egrp_hdl2idx(event_group);
156 if (unlikely(egrp_elem == NULL))
163 if (unlikely(odp_stash_put_u32(
em_shm->event_group_stash, &idx, 1) != 1)) {
173 event_group_count(
void)
178 #define EGRP_INFO_HDR_FMT \
179 "Number of event groups: %d\n\n" \
180 "ID Ready Cnt(post) Gen Num-notif\n" \
181 "------------------------------------------\n%s\n"
183 #define EGRP_INFO_LEN 43
184 #define EGRP_INFO_FMT "%-10" PRI_EGRP "%-7c%-11d%-5d%-9d\n"
188 unsigned int egrp_num;
189 em_event_group_t egrp;
207 const int egrp_info_str_len = (egrp_num + 10) * EGRP_INFO_LEN + 1;
208 char egrp_info_str[egrp_info_str_len];
211 egrp_elem = event_group_elem_get(egrp);
213 if (unlikely(egrp_elem == NULL || !event_group_allocated(egrp_elem))) {
218 egrp_count.all = EM_ATOMIC_GET(&egrp_elem->post.atomic);
220 n_print = snprintf(egrp_info_str + len,
221 egrp_info_str_len - len,
223 egrp_elem->
ready ?
'Y' :
'N',
228 if (n_print >= egrp_info_str_len - len)
237 EM_PRINT(
"No event group!\n");
245 egrp_info_str[len] =
'\0';
246 EM_PRINT(EGRP_INFO_HDR_FMT, egrp_num, egrp_info_str);
void event_group_info_print(void)
#define EM_EVENT_GROUP_SAFE_MODE
#define EM_MAX_EVENT_GROUPS
#define EM_EVENT_GROUP_UNDEF
em_event_group_t em_event_group_get_next(void)
em_event_group_t em_event_group_get_first(unsigned int *num)
env_atomic32_t event_group_count
em_event_group_t event_group