net/cnxk: support inline security setup for cn10k
[dpdk.git] / drivers / event / cnxk / cn9k_worker_dual_deq_tmo.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #include "cn9k_worker.h"
6 #include "cnxk_eventdev.h"
7 #include "cnxk_worker.h"
8
9 #define R(name, f5, f4, f3, f2, f1, f0, flags)                                 \
10         uint16_t __rte_hot cn9k_sso_hws_dual_deq_tmo_##name(                   \
11                 void *port, struct rte_event *ev, uint64_t timeout_ticks)      \
12         {                                                                      \
13                 struct cn9k_sso_hws_dual *dws = port;                          \
14                 uint16_t ret = 1;                                              \
15                 uint64_t iter;                                                 \
16                                                                                \
17                 if (dws->swtag_req) {                                          \
18                         dws->swtag_req = 0;                                    \
19                         cnxk_sso_hws_swtag_wait(                               \
20                                 dws->ws_state[!dws->vws].tag_op);              \
21                         return ret;                                            \
22                 }                                                              \
23                                                                                \
24                 ret = cn9k_sso_hws_dual_get_work(                              \
25                         &dws->ws_state[dws->vws], &dws->ws_state[!dws->vws],   \
26                         ev, flags, dws->lookup_mem, dws->tstamp);              \
27                 dws->vws = !dws->vws;                                          \
28                 for (iter = 1; iter < timeout_ticks && (ret == 0); iter++) {   \
29                         ret = cn9k_sso_hws_dual_get_work(                      \
30                                 &dws->ws_state[dws->vws],                      \
31                                 &dws->ws_state[!dws->vws], ev, flags,          \
32                                 dws->lookup_mem, dws->tstamp);                 \
33                         dws->vws = !dws->vws;                                  \
34                 }                                                              \
35                                                                                \
36                 return ret;                                                    \
37         }                                                                      \
38                                                                                \
39         uint16_t __rte_hot cn9k_sso_hws_dual_deq_tmo_burst_##name(             \
40                 void *port, struct rte_event ev[], uint16_t nb_events,         \
41                 uint64_t timeout_ticks)                                        \
42         {                                                                      \
43                 RTE_SET_USED(nb_events);                                       \
44                                                                                \
45                 return cn9k_sso_hws_dual_deq_tmo_##name(port, ev,              \
46                                                         timeout_ticks);        \
47         }                                                                      \
48                                                                                \
49         uint16_t __rte_hot cn9k_sso_hws_dual_deq_tmo_seg_##name(               \
50                 void *port, struct rte_event *ev, uint64_t timeout_ticks)      \
51         {                                                                      \
52                 struct cn9k_sso_hws_dual *dws = port;                          \
53                 uint16_t ret = 1;                                              \
54                 uint64_t iter;                                                 \
55                                                                                \
56                 if (dws->swtag_req) {                                          \
57                         dws->swtag_req = 0;                                    \
58                         cnxk_sso_hws_swtag_wait(                               \
59                                 dws->ws_state[!dws->vws].tag_op);              \
60                         return ret;                                            \
61                 }                                                              \
62                                                                                \
63                 ret = cn9k_sso_hws_dual_get_work(                              \
64                         &dws->ws_state[dws->vws], &dws->ws_state[!dws->vws],   \
65                         ev, flags, dws->lookup_mem, dws->tstamp);              \
66                 dws->vws = !dws->vws;                                          \
67                 for (iter = 1; iter < timeout_ticks && (ret == 0); iter++) {   \
68                         ret = cn9k_sso_hws_dual_get_work(                      \
69                                 &dws->ws_state[dws->vws],                      \
70                                 &dws->ws_state[!dws->vws], ev, flags,          \
71                                 dws->lookup_mem, dws->tstamp);                 \
72                         dws->vws = !dws->vws;                                  \
73                 }                                                              \
74                                                                                \
75                 return ret;                                                    \
76         }                                                                      \
77                                                                                \
78         uint16_t __rte_hot cn9k_sso_hws_dual_deq_tmo_seg_burst_##name(         \
79                 void *port, struct rte_event ev[], uint16_t nb_events,         \
80                 uint64_t timeout_ticks)                                        \
81         {                                                                      \
82                 RTE_SET_USED(nb_events);                                       \
83                                                                                \
84                 return cn9k_sso_hws_dual_deq_tmo_seg_##name(port, ev,          \
85                                                             timeout_ticks);    \
86         }
87
88 NIX_RX_FASTPATH_MODES
89 #undef R