net/mlx5: fix meter policy flow match item
[dpdk.git] / drivers / event / cnxk / cn10k_worker.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #include "cn10k_worker.h"
6 #include "cnxk_eventdev.h"
7 #include "cnxk_worker.h"
8
9 uint16_t __rte_hot
10 cn10k_sso_hws_enq(void *port, const struct rte_event *ev)
11 {
12         struct cn10k_sso_hws *ws = port;
13
14         switch (ev->op) {
15         case RTE_EVENT_OP_NEW:
16                 return cn10k_sso_hws_new_event(ws, ev);
17         case RTE_EVENT_OP_FORWARD:
18                 cn10k_sso_hws_forward_event(ws, ev);
19                 break;
20         case RTE_EVENT_OP_RELEASE:
21                 cnxk_sso_hws_swtag_flush(ws->tag_wqe_op, ws->swtag_flush_op);
22                 break;
23         default:
24                 return 0;
25         }
26
27         return 1;
28 }
29
30 uint16_t __rte_hot
31 cn10k_sso_hws_enq_burst(void *port, const struct rte_event ev[],
32                         uint16_t nb_events)
33 {
34         RTE_SET_USED(nb_events);
35         return cn10k_sso_hws_enq(port, ev);
36 }
37
38 uint16_t __rte_hot
39 cn10k_sso_hws_enq_new_burst(void *port, const struct rte_event ev[],
40                             uint16_t nb_events)
41 {
42         struct cn10k_sso_hws *ws = port;
43         uint16_t i, rc = 1;
44
45         for (i = 0; i < nb_events && rc; i++)
46                 rc = cn10k_sso_hws_new_event(ws, &ev[i]);
47
48         return nb_events;
49 }
50
51 uint16_t __rte_hot
52 cn10k_sso_hws_enq_fwd_burst(void *port, const struct rte_event ev[],
53                             uint16_t nb_events)
54 {
55         struct cn10k_sso_hws *ws = port;
56
57         RTE_SET_USED(nb_events);
58         cn10k_sso_hws_forward_event(ws, ev);
59
60         return 1;
61 }
62
63 uint16_t __rte_hot
64 cn10k_sso_hws_deq(void *port, struct rte_event *ev, uint64_t timeout_ticks)
65 {
66         struct cn10k_sso_hws *ws = port;
67
68         RTE_SET_USED(timeout_ticks);
69
70         if (ws->swtag_req) {
71                 ws->swtag_req = 0;
72                 cnxk_sso_hws_swtag_wait(ws->tag_wqe_op);
73                 return 1;
74         }
75
76         return cn10k_sso_hws_get_work(ws, ev);
77 }
78
79 uint16_t __rte_hot
80 cn10k_sso_hws_deq_burst(void *port, struct rte_event ev[], uint16_t nb_events,
81                         uint64_t timeout_ticks)
82 {
83         RTE_SET_USED(nb_events);
84
85         return cn10k_sso_hws_deq(port, ev, timeout_ticks);
86 }
87
88 uint16_t __rte_hot
89 cn10k_sso_hws_tmo_deq(void *port, struct rte_event *ev, uint64_t timeout_ticks)
90 {
91         struct cn10k_sso_hws *ws = port;
92         uint16_t ret = 1;
93         uint64_t iter;
94
95         if (ws->swtag_req) {
96                 ws->swtag_req = 0;
97                 cnxk_sso_hws_swtag_wait(ws->tag_wqe_op);
98                 return ret;
99         }
100
101         ret = cn10k_sso_hws_get_work(ws, ev);
102         for (iter = 1; iter < timeout_ticks && (ret == 0); iter++)
103                 ret = cn10k_sso_hws_get_work(ws, ev);
104
105         return ret;
106 }
107
108 uint16_t __rte_hot
109 cn10k_sso_hws_tmo_deq_burst(void *port, struct rte_event ev[],
110                             uint16_t nb_events, uint64_t timeout_ticks)
111 {
112         RTE_SET_USED(nb_events);
113
114         return cn10k_sso_hws_tmo_deq(port, ev, timeout_ticks);
115 }