event/cnxk: add cn9k crypto adapter fast path
[dpdk.git] / drivers / event / cnxk / cn9k_worker_dual_deq_ca.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_ca_##name(                    \
11                 void *port, struct rte_event *ev, uint64_t timeout_ticks)      \
12         {                                                                      \
13                 struct cn9k_sso_hws_dual *dws = port;                          \
14                 uint16_t gw;                                                   \
15                                                                                \
16                 RTE_SET_USED(timeout_ticks);                                   \
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 1;                                              \
22                 }                                                              \
23                                                                                \
24                 gw = cn9k_sso_hws_dual_get_work(&dws->ws_state[dws->vws],      \
25                                                 &dws->ws_state[!dws->vws], ev, \
26                                                 flags | CPT_RX_WQE_F,          \
27                                                 dws->lookup_mem, dws->tstamp); \
28                 dws->vws = !dws->vws;                                          \
29                 return gw;                                                     \
30         }                                                                      \
31                                                                                \
32         uint16_t __rte_hot cn9k_sso_hws_dual_deq_ca_burst_##name(              \
33                 void *port, struct rte_event ev[], uint16_t nb_events,         \
34                 uint64_t timeout_ticks)                                        \
35         {                                                                      \
36                 RTE_SET_USED(nb_events);                                       \
37                                                                                \
38                 return cn9k_sso_hws_dual_deq_ca_##name(port, ev,               \
39                                                        timeout_ticks);         \
40         }                                                                      \
41                                                                                \
42         uint16_t __rte_hot cn9k_sso_hws_dual_deq_ca_seg_##name(                \
43                 void *port, struct rte_event *ev, uint64_t timeout_ticks)      \
44         {                                                                      \
45                 struct cn9k_sso_hws_dual *dws = port;                          \
46                 uint16_t gw;                                                   \
47                                                                                \
48                 RTE_SET_USED(timeout_ticks);                                   \
49                 if (dws->swtag_req) {                                          \
50                         dws->swtag_req = 0;                                    \
51                         cnxk_sso_hws_swtag_wait(                               \
52                                 dws->ws_state[!dws->vws].tag_op);              \
53                         return 1;                                              \
54                 }                                                              \
55                                                                                \
56                 gw = cn9k_sso_hws_dual_get_work(                               \
57                         &dws->ws_state[dws->vws], &dws->ws_state[!dws->vws],   \
58                         ev, flags | NIX_RX_MULTI_SEG_F | CPT_RX_WQE_F,         \
59                         dws->lookup_mem, dws->tstamp);                         \
60                 dws->vws = !dws->vws;                                          \
61                 return gw;                                                     \
62         }                                                                      \
63                                                                                \
64         uint16_t __rte_hot cn9k_sso_hws_dual_deq_ca_seg_burst_##name(          \
65                 void *port, struct rte_event ev[], uint16_t nb_events,         \
66                 uint64_t timeout_ticks)                                        \
67         {                                                                      \
68                 RTE_SET_USED(nb_events);                                       \
69                                                                                \
70                 return cn9k_sso_hws_dual_deq_ca_seg_##name(port, ev,           \
71                                                            timeout_ticks);     \
72         }
73
74 NIX_RX_FASTPATH_MODES
75 #undef R