MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ssows_flush_events

Function ssows_flush_events

dpdk/drivers/event/octeontx/ssovf_worker.c:205–249  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

203}
204
205void
206ssows_flush_events(struct ssows *ws, uint8_t queue_id,
207 ssows_handle_event_t fn, void *arg)
208{
209 uint32_t reg_off;
210 struct rte_event ev;
211 uint64_t enable, aq_cnt = 1, cq_ds_cnt = 1;
212 uint64_t get_work0, get_work1;
213 uint64_t sched_type_queue;
214 uint8_t *base = ssovf_bar(OCTEONTX_SSO_GROUP, queue_id, 0);
215
216 enable = ssovf_read64(base + SSO_VHGRP_QCTL);
217 if (!enable)
218 return;
219
220 reg_off = SSOW_VHWS_OP_GET_WORK0;
221 reg_off |= 1 << 17; /* Grouped */
222 reg_off |= 1 << 16; /* WAIT */
223 reg_off |= queue_id << 4; /* INDEX_GGRP_MASK(group number) */
224 while (aq_cnt || cq_ds_cnt) {
225 aq_cnt = ssovf_read64(base + SSO_VHGRP_AQ_CNT);
226 cq_ds_cnt = ssovf_read64(base + SSO_VHGRP_INT_CNT);
227 /* Extract cq and ds count */
228 cq_ds_cnt &= 0x1FFF1FFF0000;
229
230 ssovf_load_pair(get_work0, get_work1, ws->base + reg_off);
231
232 sched_type_queue = (get_work0 >> 32) & 0xfff;
233 ws->cur_tt = sched_type_queue & 0x3;
234 ws->cur_grp = sched_type_queue >> 2;
235 sched_type_queue = sched_type_queue << 38;
236 ev.event = sched_type_queue | (get_work0 & 0xffffffff);
237 if (get_work1 && ev.event_type == RTE_EVENT_TYPE_ETHDEV)
238 ev.mbuf = ssovf_octeontx_wqe_to_pkt(get_work1,
239 (ev.event >> 20) & 0x7F,
240 OCCTX_RX_OFFLOAD_NONE |
241 OCCTX_RX_MULTI_SEG_F,
242 ws->lookup_mem);
243 else
244 ev.u64 = get_work1;
245
246 if (fn != NULL && ev.u64 != 0)
247 fn(arg, ev);
248 }
249}
250
251void
252ssows_reset(struct ssows *ws)

Callers 2

ssovf_startFunction · 0.85
ssovf_stopFunction · 0.85

Calls 2

ssovf_barFunction · 0.85

Tested by

no test coverage detected