1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell.
7 #include "cn9k_worker.h"
10 cn9k_sso_hws_enq(void *port, const struct rte_event *ev)
12 struct cn9k_sso_hws *ws = port;
15 case RTE_EVENT_OP_NEW:
16 return cn9k_sso_hws_new_event(ws, ev);
17 case RTE_EVENT_OP_FORWARD:
18 cn9k_sso_hws_forward_event(ws, ev);
20 case RTE_EVENT_OP_RELEASE:
21 cnxk_sso_hws_swtag_flush(ws->tag_op, ws->swtag_flush_op);
31 cn9k_sso_hws_enq_burst(void *port, const struct rte_event ev[],
34 RTE_SET_USED(nb_events);
35 return cn9k_sso_hws_enq(port, ev);
39 cn9k_sso_hws_enq_new_burst(void *port, const struct rte_event ev[],
42 struct cn9k_sso_hws *ws = port;
45 for (i = 0; i < nb_events && rc; i++)
46 rc = cn9k_sso_hws_new_event(ws, &ev[i]);
52 cn9k_sso_hws_enq_fwd_burst(void *port, const struct rte_event ev[],
55 struct cn9k_sso_hws *ws = port;
57 RTE_SET_USED(nb_events);
58 cn9k_sso_hws_forward_event(ws, ev);
64 cn9k_sso_hws_deq(void *port, struct rte_event *ev, uint64_t timeout_ticks)
66 struct cn9k_sso_hws *ws = port;
68 RTE_SET_USED(timeout_ticks);
72 cnxk_sso_hws_swtag_wait(ws->tag_op);
76 return cn9k_sso_hws_get_work(ws, ev);
80 cn9k_sso_hws_deq_burst(void *port, struct rte_event ev[], uint16_t nb_events,
81 uint64_t timeout_ticks)
83 RTE_SET_USED(nb_events);
85 return cn9k_sso_hws_deq(port, ev, timeout_ticks);
89 cn9k_sso_hws_tmo_deq(void *port, struct rte_event *ev, uint64_t timeout_ticks)
91 struct cn9k_sso_hws *ws = port;
97 cnxk_sso_hws_swtag_wait(ws->tag_op);
101 ret = cn9k_sso_hws_get_work(ws, ev);
102 for (iter = 1; iter < timeout_ticks && (ret == 0); iter++)
103 ret = cn9k_sso_hws_get_work(ws, ev);
109 cn9k_sso_hws_tmo_deq_burst(void *port, struct rte_event ev[],
110 uint16_t nb_events, uint64_t timeout_ticks)
112 RTE_SET_USED(nb_events);
114 return cn9k_sso_hws_tmo_deq(port, ev, timeout_ticks);
120 cn9k_sso_hws_dual_enq(void *port, const struct rte_event *ev)
122 struct cn9k_sso_hws_dual *dws = port;
123 struct cn9k_sso_hws_state *vws;
125 vws = &dws->ws_state[!dws->vws];
127 case RTE_EVENT_OP_NEW:
128 return cn9k_sso_hws_dual_new_event(dws, ev);
129 case RTE_EVENT_OP_FORWARD:
130 cn9k_sso_hws_dual_forward_event(dws, vws, ev);
132 case RTE_EVENT_OP_RELEASE:
133 cnxk_sso_hws_swtag_flush(vws->tag_op, vws->swtag_flush_op);
143 cn9k_sso_hws_dual_enq_burst(void *port, const struct rte_event ev[],
146 RTE_SET_USED(nb_events);
147 return cn9k_sso_hws_dual_enq(port, ev);
151 cn9k_sso_hws_dual_enq_new_burst(void *port, const struct rte_event ev[],
154 struct cn9k_sso_hws_dual *dws = port;
157 for (i = 0; i < nb_events && rc; i++)
158 rc = cn9k_sso_hws_dual_new_event(dws, &ev[i]);
164 cn9k_sso_hws_dual_enq_fwd_burst(void *port, const struct rte_event ev[],
167 struct cn9k_sso_hws_dual *dws = port;
169 RTE_SET_USED(nb_events);
170 cn9k_sso_hws_dual_forward_event(dws, &dws->ws_state[!dws->vws], ev);
176 cn9k_sso_hws_dual_deq(void *port, struct rte_event *ev, uint64_t timeout_ticks)
178 struct cn9k_sso_hws_dual *dws = port;
181 RTE_SET_USED(timeout_ticks);
182 if (dws->swtag_req) {
184 cnxk_sso_hws_swtag_wait(dws->ws_state[!dws->vws].tag_op);
188 gw = cn9k_sso_hws_dual_get_work(&dws->ws_state[dws->vws],
189 &dws->ws_state[!dws->vws], ev);
190 dws->vws = !dws->vws;
195 cn9k_sso_hws_dual_deq_burst(void *port, struct rte_event ev[],
196 uint16_t nb_events, uint64_t timeout_ticks)
198 RTE_SET_USED(nb_events);
200 return cn9k_sso_hws_dual_deq(port, ev, timeout_ticks);
204 cn9k_sso_hws_dual_tmo_deq(void *port, struct rte_event *ev,
205 uint64_t timeout_ticks)
207 struct cn9k_sso_hws_dual *dws = port;
211 if (dws->swtag_req) {
213 cnxk_sso_hws_swtag_wait(dws->ws_state[!dws->vws].tag_op);
217 ret = cn9k_sso_hws_dual_get_work(&dws->ws_state[dws->vws],
218 &dws->ws_state[!dws->vws], ev);
219 dws->vws = !dws->vws;
220 for (iter = 1; iter < timeout_ticks && (ret == 0); iter++) {
221 ret = cn9k_sso_hws_dual_get_work(&dws->ws_state[dws->vws],
222 &dws->ws_state[!dws->vws], ev);
223 dws->vws = !dws->vws;
230 cn9k_sso_hws_dual_tmo_deq_burst(void *port, struct rte_event ev[],
231 uint16_t nb_events, uint64_t timeout_ticks)
233 RTE_SET_USED(nb_events);
235 return cn9k_sso_hws_dual_tmo_deq(port, ev, timeout_ticks);