event/cnxk: add cn9k crypto adapter fast path
[dpdk.git] / drivers / event / cnxk / cn9k_worker.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #include "roc_api.h"
6
7 #include "cn9k_worker.h"
8 #include "cn9k_cryptodev_ops.h"
9
10 uint16_t __rte_hot
11 cn9k_sso_hws_enq(void *port, const struct rte_event *ev)
12 {
13         struct cn9k_sso_hws *ws = port;
14
15         switch (ev->op) {
16         case RTE_EVENT_OP_NEW:
17                 return cn9k_sso_hws_new_event(ws, ev);
18         case RTE_EVENT_OP_FORWARD:
19                 cn9k_sso_hws_forward_event(ws, ev);
20                 break;
21         case RTE_EVENT_OP_RELEASE:
22                 cnxk_sso_hws_swtag_flush(ws->tag_op, ws->swtag_flush_op);
23                 break;
24         default:
25                 return 0;
26         }
27
28         return 1;
29 }
30
31 uint16_t __rte_hot
32 cn9k_sso_hws_enq_burst(void *port, const struct rte_event ev[],
33                        uint16_t nb_events)
34 {
35         RTE_SET_USED(nb_events);
36         return cn9k_sso_hws_enq(port, ev);
37 }
38
39 uint16_t __rte_hot
40 cn9k_sso_hws_enq_new_burst(void *port, const struct rte_event ev[],
41                            uint16_t nb_events)
42 {
43         struct cn9k_sso_hws *ws = port;
44         uint16_t i, rc = 1;
45
46         for (i = 0; i < nb_events && rc; i++)
47                 rc = cn9k_sso_hws_new_event(ws, &ev[i]);
48
49         return nb_events;
50 }
51
52 uint16_t __rte_hot
53 cn9k_sso_hws_enq_fwd_burst(void *port, const struct rte_event ev[],
54                            uint16_t nb_events)
55 {
56         struct cn9k_sso_hws *ws = port;
57
58         RTE_SET_USED(nb_events);
59         cn9k_sso_hws_forward_event(ws, ev);
60
61         return 1;
62 }
63
64 /* Dual ws ops. */
65
66 uint16_t __rte_hot
67 cn9k_sso_hws_dual_enq(void *port, const struct rte_event *ev)
68 {
69         struct cn9k_sso_hws_dual *dws = port;
70         struct cn9k_sso_hws_state *vws;
71
72         vws = &dws->ws_state[!dws->vws];
73         switch (ev->op) {
74         case RTE_EVENT_OP_NEW:
75                 return cn9k_sso_hws_dual_new_event(dws, ev);
76         case RTE_EVENT_OP_FORWARD:
77                 cn9k_sso_hws_dual_forward_event(dws, vws, ev);
78                 break;
79         case RTE_EVENT_OP_RELEASE:
80                 cnxk_sso_hws_swtag_flush(vws->tag_op, vws->swtag_flush_op);
81                 break;
82         default:
83                 return 0;
84         }
85
86         return 1;
87 }
88
89 uint16_t __rte_hot
90 cn9k_sso_hws_dual_enq_burst(void *port, const struct rte_event ev[],
91                             uint16_t nb_events)
92 {
93         RTE_SET_USED(nb_events);
94         return cn9k_sso_hws_dual_enq(port, ev);
95 }
96
97 uint16_t __rte_hot
98 cn9k_sso_hws_dual_enq_new_burst(void *port, const struct rte_event ev[],
99                                 uint16_t nb_events)
100 {
101         struct cn9k_sso_hws_dual *dws = port;
102         uint16_t i, rc = 1;
103
104         for (i = 0; i < nb_events && rc; i++)
105                 rc = cn9k_sso_hws_dual_new_event(dws, &ev[i]);
106
107         return nb_events;
108 }
109
110 uint16_t __rte_hot
111 cn9k_sso_hws_dual_enq_fwd_burst(void *port, const struct rte_event ev[],
112                                 uint16_t nb_events)
113 {
114         struct cn9k_sso_hws_dual *dws = port;
115
116         RTE_SET_USED(nb_events);
117         cn9k_sso_hws_dual_forward_event(dws, &dws->ws_state[!dws->vws], ev);
118
119         return 1;
120 }
121
122 uint16_t __rte_hot
123 cn9k_sso_hws_ca_enq(void *port, struct rte_event ev[], uint16_t nb_events)
124 {
125         struct cn9k_sso_hws *ws = port;
126
127         RTE_SET_USED(nb_events);
128
129         return cn9k_cpt_crypto_adapter_enqueue(ws->tag_op, ev->event_ptr);
130 }
131
132 uint16_t __rte_hot
133 cn9k_sso_hws_dual_ca_enq(void *port, struct rte_event ev[], uint16_t nb_events)
134 {
135         struct cn9k_sso_hws_dual *dws = port;
136
137         RTE_SET_USED(nb_events);
138
139         return cn9k_cpt_crypto_adapter_enqueue(dws->ws_state[!dws->vws].tag_op,
140                                                ev->event_ptr);
141 }