net/cnxk: improve inbound inline error handling for cn9k
[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, f6, 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(dws->base[!dws->vws] +         \
20                                                 SSOW_LF_GWS_TAG);              \
21                         return 1;                                              \
22                 }                                                              \
23                                                                                \
24                 gw = cn9k_sso_hws_dual_get_work(                               \
25                         dws->base[dws->vws], dws->base[!dws->vws], ev,         \
26                         flags | CPT_RX_WQE_F, dws->lookup_mem, dws->tstamp);   \
27                 dws->vws = !dws->vws;                                          \
28                 return gw;                                                     \
29         }                                                                      \
30                                                                                \
31         uint16_t __rte_hot cn9k_sso_hws_dual_deq_ca_burst_##name(              \
32                 void *port, struct rte_event ev[], uint16_t nb_events,         \
33                 uint64_t timeout_ticks)                                        \
34         {                                                                      \
35                 RTE_SET_USED(nb_events);                                       \
36                                                                                \
37                 return cn9k_sso_hws_dual_deq_ca_##name(port, ev,               \
38                                                        timeout_ticks);         \
39         }                                                                      \
40                                                                                \
41         uint16_t __rte_hot cn9k_sso_hws_dual_deq_ca_seg_##name(                \
42                 void *port, struct rte_event *ev, uint64_t timeout_ticks)      \
43         {                                                                      \
44                 struct cn9k_sso_hws_dual *dws = port;                          \
45                 uint16_t gw;                                                   \
46                                                                                \
47                 RTE_SET_USED(timeout_ticks);                                   \
48                 if (dws->swtag_req) {                                          \
49                         dws->swtag_req = 0;                                    \
50                         cnxk_sso_hws_swtag_wait(dws->base[!dws->vws] +         \
51                                                 SSOW_LF_GWS_TAG);              \
52                         return 1;                                              \
53                 }                                                              \
54                                                                                \
55                 gw = cn9k_sso_hws_dual_get_work(                               \
56                         dws->base[dws->vws], dws->base[!dws->vws], ev,         \
57                         flags | NIX_RX_MULTI_SEG_F | CPT_RX_WQE_F,             \
58                         dws->lookup_mem, dws->tstamp);                         \
59                 dws->vws = !dws->vws;                                          \
60                 return gw;                                                     \
61         }                                                                      \
62                                                                                \
63         uint16_t __rte_hot cn9k_sso_hws_dual_deq_ca_seg_burst_##name(          \
64                 void *port, struct rte_event ev[], uint16_t nb_events,         \
65                 uint64_t timeout_ticks)                                        \
66         {                                                                      \
67                 RTE_SET_USED(nb_events);                                       \
68                                                                                \
69                 return cn9k_sso_hws_dual_deq_ca_seg_##name(port, ev,           \
70                                                            timeout_ticks);     \
71         }
72
73 NIX_RX_FASTPATH_MODES
74 #undef R