common/cnxk: support NIX inline inbound and outbound setup
[dpdk.git] / drivers / common / cnxk / hw / cpt.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #ifndef __CPT_HW_H__
6 #define __CPT_HW_H__
7
8 /* Register offsets */
9
10 #define CPT_COMP_NOT_DONE (0x0ull)
11 #define CPT_COMP_GOOD     (0x1ull)
12 #define CPT_COMP_FAULT    (0x2ull)
13 #define CPT_COMP_SWERR    (0x3ull)
14 #define CPT_COMP_HWERR    (0x4ull)
15 #define CPT_COMP_INSTERR  (0x5ull)
16 #define CPT_COMP_WARN     (0x6ull) /* [CN10K, .) */
17
18 #define CPT_LF_INT_VEC_MISC     (0x0ull)
19 #define CPT_LF_INT_VEC_DONE     (0x1ull)
20 #define CPT_LF_CTL              (0x10ull)
21 #define CPT_LF_DONE_WAIT        (0x30ull)
22 #define CPT_LF_INPROG           (0x40ull)
23 #define CPT_LF_DONE             (0x50ull)
24 #define CPT_LF_DONE_ACK         (0x60ull)
25 #define CPT_LF_DONE_INT_ENA_W1S (0x90ull)
26 #define CPT_LF_DONE_INT_ENA_W1C (0xa0ull)
27 #define CPT_LF_MISC_INT         (0xb0ull)
28 #define CPT_LF_MISC_INT_W1S     (0xc0ull)
29 #define CPT_LF_MISC_INT_ENA_W1S (0xd0ull)
30 #define CPT_LF_MISC_INT_ENA_W1C (0xe0ull)
31 #define CPT_LF_Q_BASE           (0xf0ull)
32 #define CPT_LF_Q_SIZE           (0x100ull)
33 #define CPT_LF_Q_INST_PTR       (0x110ull)
34 #define CPT_LF_Q_GRP_PTR        (0x120ull)
35 #define CPT_LF_NQX(a)           (0x400ull | (uint64_t)(a) << 3)
36 #define CPT_LF_CTX_CTL          (0x500ull)
37 #define CPT_LF_CTX_FLUSH        (0x510ull)
38 #define CPT_LF_CTX_ERR          (0x520ull)
39 #define CPT_LF_CTX_ENC_BYTE_CNT (0x530ull)
40 #define CPT_LF_CTX_ENC_PKT_CNT  (0x540ull)
41 #define CPT_LF_CTX_DEC_BYTE_CNT (0x550ull)
42 #define CPT_LF_CTX_DEC_PKT_CNT  (0x560ull)
43 #define CPT_LF_CTX_RELOAD       (0x570ull)
44
45 #define CPT_AF_LFX_CTL(a)  (0x27000ull | (uint64_t)(a) << 3)
46 #define CPT_AF_LFX_CTL2(a) (0x29000ull | (uint64_t)(a) << 3)
47
48 /* Structures definitions */
49
50 union cpt_lf_ctl {
51         uint64_t u;
52         struct cpt_lf_ctl_s {
53                 uint64_t ena : 1;
54                 uint64_t fc_ena : 1;
55                 uint64_t fc_up_crossing : 1;
56                 uint64_t reserved_3_3 : 1;
57                 uint64_t fc_hyst_bits : 4;
58                 uint64_t reserved_8_63 : 56;
59         } s;
60 };
61
62 union cpt_lf_ctx_flush {
63         uint64_t u;
64         struct {
65                 uint64_t cptr : 46;
66                 uint64_t inval : 1;
67                 uint64_t res : 1;
68                 uint64_t pf_func : 16;
69         } s;
70 };
71
72 union cpt_lf_ctx_reload {
73         uint64_t u;
74         struct {
75                 uint64_t cptr : 46;
76         } s;
77 };
78
79 union cpt_lf_inprog {
80         uint64_t u;
81         struct cpt_lf_inprog_s {
82                 uint64_t inflight : 9;
83                 uint64_t reserved_9_15 : 7;
84                 uint64_t eena : 1;
85                 uint64_t grp_drp : 1;
86                 uint64_t reserved_18_30 : 13;
87                 uint64_t grb_partial : 1;
88                 uint64_t grb_cnt : 8;
89                 uint64_t gwb_cnt : 8;
90                 uint64_t reserved_48_63 : 16;
91         } s;
92 };
93
94 union cpt_lf_q_base {
95         uint64_t u;
96         struct cpt_lf_q_base_s {
97                 uint64_t fault : 1;
98                 uint64_t stopped : 1;
99                 uint64_t reserved_2_6 : 5;
100                 uint64_t addr : 46;
101                 uint64_t reserved_53_63 : 11;
102         } s;
103 };
104
105 union cpt_lf_q_size {
106         uint64_t u;
107         struct cpt_lf_q_size_s {
108                 uint64_t size_div40 : 15;
109                 uint64_t reserved_15_63 : 49;
110         } s;
111 };
112
113 union cpt_lf_misc_int {
114         uint64_t u;
115         struct cpt_lf_misc_int_s {
116                 uint64_t reserved_0_0 : 1;
117                 uint64_t nqerr : 1;
118                 uint64_t irde : 1;
119                 uint64_t nwrp : 1;
120                 uint64_t reserved_4_4 : 1;
121                 uint64_t hwerr : 1;
122                 uint64_t fault : 1;
123                 uint64_t reserved_7_63 : 57;
124         } s;
125 };
126
127 union cpt_inst_w4 {
128         uint64_t u64;
129         struct {
130                 uint64_t dlen : 16;
131                 uint64_t param2 : 16;
132                 uint64_t param1 : 16;
133                 uint64_t opcode_major : 8;
134                 uint64_t opcode_minor : 8;
135         } s;
136 };
137
138 union cpt_inst_w7 {
139         uint64_t u64;
140         struct {
141                 uint64_t cptr : 60;
142                 uint64_t ctx_val : 1;
143                 uint64_t egrp : 3;
144         } s;
145 };
146
147 struct cpt_inst_s {
148         union cpt_inst_w0 {
149                 struct {
150                         uint64_t nixtxl : 3;
151                         uint64_t doneint : 1;
152                         uint64_t nixtx_addr : 60;
153                 } s;
154                 uint64_t u64;
155         } w0;
156
157         uint64_t res_addr;
158
159         union cpt_inst_w2 {
160                 struct {
161                         uint64_t tag : 32;
162                         uint64_t tt : 2;
163                         uint64_t grp : 10;
164                         uint64_t reserved_172_175 : 4;
165                         uint64_t rvu_pf_func : 16;
166                 } s;
167                 uint64_t u64;
168         } w2;
169
170         union cpt_inst_w3 {
171                 struct {
172                         uint64_t qord : 1;
173                         uint64_t reserved_194_193 : 2;
174                         uint64_t wqe_ptr : 61;
175                 } s;
176                 uint64_t u64;
177         } w3;
178
179         union cpt_inst_w4 w4;
180
181         uint64_t dptr;
182
183         uint64_t rptr;
184
185         union cpt_inst_w7 w7;
186 };
187
188 union cpt_res_s {
189         struct cpt_cn10k_res_s {
190                 uint64_t compcode : 7;
191                 uint64_t doneint : 1;
192                 uint64_t uc_compcode : 8;
193                 uint64_t rlen : 16;
194                 uint64_t spi : 32;
195
196                 uint64_t esn;
197         } cn10k;
198
199         struct cpt_cn9k_res_s {
200                 uint64_t compcode : 8;
201                 uint64_t uc_compcode : 8;
202                 uint64_t doneint : 1;
203                 uint64_t reserved_17_63 : 47;
204
205                 uint64_t reserved_64_127;
206         } cn9k;
207 };
208
209 /* [CN10K, .) */
210 struct cpt_parse_hdr_s {
211         /* WORD 0 */
212         union {
213                 uint64_t u64;
214                 struct {
215                         uint8_t pad_len : 3;
216                         uint8_t num_frags : 3;
217                         uint8_t pkt_out : 2;
218
219                         uint8_t err_sum : 1;
220                         uint8_t reas_sts : 4;
221                         uint8_t reserved_53 : 1;
222                         uint8_t et_owr : 1;
223                         uint8_t pkt_fmt : 1;
224
225                         uint16_t match_id : 16;
226
227                         uint32_t cookie : 32;
228                 };
229         } w0;
230
231         /* WORD 1 */
232         uint64_t wqe_ptr;
233
234         /* WORD 2 */
235         union {
236                 uint64_t u64;
237                 struct {
238                         uint8_t fi_pad : 3;
239                         uint8_t fi_offset : 5;
240                         uint8_t il3_off;
241                         uint16_t orig_pf_func;
242                         uint16_t reserved_145_160;
243                         uint16_t frag_age;
244                 };
245         } w2;
246
247         /* WORD 3 */
248         union {
249                 uint64_t u64;
250                 struct {
251                         uint32_t spi;
252                         uint16_t reserved_209_224;
253                         uint8_t uc_ccode;
254                         uint8_t hw_ccode;
255                 };
256         } w3;
257
258         /* WORD 4 */
259         union {
260                 uint64_t u64;
261                 uint64_t esn;
262                 uint64_t frag1_wqe_ptr;
263         };
264 };
265
266 union cpt_frag_info {
267         uint16_t info;
268         struct {
269                 uint16_t f_off : 13;
270                 uint16_t f_mf : 1;
271                 uint16_t f_rsv : 2;
272         };
273 };
274
275 struct cpt_frag_info_s {
276         /* WORD 0 */
277         union {
278                 uint64_t u64;
279                 struct {
280                         union cpt_frag_info f3;
281                         union cpt_frag_info f2;
282                         union cpt_frag_info f1;
283                         union cpt_frag_info f0;
284                 };
285         } w0;
286
287         /* WORD 1 */
288         union {
289                 uint64_t u64;
290                 struct {
291                         uint16_t frag_size3;
292                         uint16_t frag_size2;
293                         uint16_t frag_size1;
294                         uint16_t frag_size0;
295                 };
296         } w1;
297 };
298
299 #endif /* __CPT_HW_H__ */