1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /* $FreeBSD$ */
4 #ifndef ADF_C4XXX_INLINE_H_
5 #define ADF_C4XXX_INLINE_H_
6 
7 /* Inline register addresses in SRAM BAR */
8 #define ARAM_CSR_BAR_OFFSET 0x100000
9 #define ADF_C4XXX_REG_SA_CTRL_LOCK (ARAM_CSR_BAR_OFFSET + 0x00)
10 #define ADF_C4XXX_REG_SA_SCRATCH_0 (ARAM_CSR_BAR_OFFSET + 0x04)
11 #define ADF_C4XXX_REG_SA_SCRATCH_2 (ARAM_CSR_BAR_OFFSET + 0x0C)
12 #define ADF_C4XXX_REG_SA_ENTRY_CTRL (ARAM_CSR_BAR_OFFSET + 0x18)
13 #define ADF_C4XXX_REG_SA_DB_CTRL (ARAM_CSR_BAR_OFFSET + 0x1C)
14 #define ADF_C4XXX_REG_SA_REMAP (ARAM_CSR_BAR_OFFSET + 0x20)
15 #define ADF_C4XXX_REG_SA_INLINE_CAPABILITY (ARAM_CSR_BAR_OFFSET + 0x24)
16 #define ADF_C4XXX_REG_SA_INLINE_ENABLE (ARAM_CSR_BAR_OFFSET + 0x28)
17 #define ADF_C4XXX_REG_SA_LINK_UP (ARAM_CSR_BAR_OFFSET + 0x2C)
18 #define ADF_C4XXX_REG_SA_FUNC_LIMITS (ARAM_CSR_BAR_OFFSET + 0x38)
19 
20 #define ADF_C4XXX_SADB_SIZE_BIT BIT(24)
21 #define ADF_C4XXX_SADB_SIZE_IN_WORDS(accel_dev)                                \
22 	((accel_dev)->aram_info->sadb_region_size / 32)
23 #define ADF_C4XXX_DEFAULT_MAX_CHAIN_LEN 0
24 #define ADF_C4XXX_DEFAULT_LIMIT_CHAIN_LEN 0
25 /* SADB CTRL register bit offsets */
26 #define ADF_C4XXX_SADB_BIT_OFFSET 6
27 #define ADF_C4XXX_MAX_CHAIN_LEN_BIT_OFFS 1
28 
29 #define ADF_C4XXX_SADB_REG_VALUE(accel_dev)                                    \
30 	((ADF_C4XXX_SADB_SIZE_IN_WORDS(accel_dev)                              \
31 	  << ADF_C4XXX_SADB_BIT_OFFSET) |                                      \
32 	 (ADF_C4XXX_DEFAULT_MAX_CHAIN_LEN                                      \
33 	  << ADF_C4XXX_MAX_CHAIN_LEN_BIT_OFFS) |                               \
34 	 (ADF_C4XXX_DEFAULT_LIMIT_CHAIN_LEN))
35 
36 #define ADF_C4XXX_INLINE_INGRESS_OFFSET 0x0
37 #define ADF_C4XXX_INLINE_EGRESS_OFFSET 0x1000
38 
39 /* MAC_CFG register access related definitions */
40 #define ADF_C4XXX_STATS_REQUEST_ENABLED BIT(16)
41 #define ADF_C4XXX_STATS_REQUEST_DISABLED ~BIT(16)
42 #define ADF_C4XXX_UNLOCK true
43 #define ADF_C4XXX_LOCK false
44 
45 /* MAC IP register access related definitions */
46 #define ADF_C4XXX_MAC_STATS_READY BIT(0)
47 #define ADF_C4XXX_MAX_NUM_STAT_READY_READS 10
48 #define ADF_C4XXX_MAC_STATS_POLLING_INTERVAL 100
49 #define ADF_C4XXX_MAC_ERROR_TX_UNDERRUN BIT(6)
50 #define ADF_C4XXX_MAC_ERROR_TX_FCS BIT(7)
51 #define ADF_C4XXX_MAC_ERROR_TX_DATA_CORRUPT BIT(8)
52 #define ADF_C4XXX_MAC_ERROR_RX_OVERRUN BIT(9)
53 #define ADF_C4XXX_MAC_ERROR_RX_RUNT BIT(10)
54 #define ADF_C4XXX_MAC_ERROR_RX_UNDERSIZE BIT(11)
55 #define ADF_C4XXX_MAC_ERROR_RX_JABBER BIT(12)
56 #define ADF_C4XXX_MAC_ERROR_RX_OVERSIZE BIT(13)
57 #define ADF_C4XXX_MAC_ERROR_RX_FCS BIT(14)
58 #define ADF_C4XXX_MAC_ERROR_RX_FRAME BIT(15)
59 #define ADF_C4XXX_MAC_ERROR_RX_CODE BIT(16)
60 #define ADF_C4XXX_MAC_ERROR_RX_PREAMBLE BIT(17)
61 #define ADF_C4XXX_MAC_RX_LINK_UP BIT(21)
62 #define ADF_C4XXX_MAC_INVALID_SPEED BIT(31)
63 #define ADF_C4XXX_MAC_PIA_RX_FIFO_OVERRUN (1ULL << 32)
64 #define ADF_C4XXX_MAC_PIA_TX_FIFO_OVERRUN (1ULL << 33)
65 #define ADF_C4XXX_MAC_PIA_TX_FIFO_UNDERRUN (1ULL << 34)
66 
67 /* 64-bit inline control registers. It will require
68  * adding ADF_C4XXX_INLINE_INGRESS_OFFSET to the address for ingress
69  * direction or ADF_C4XXX_INLINE_EGRESS_OFFSET to the address for
70  * egress direction
71  */
72 #define ADF_C4XXX_MAC_IP 0x8
73 #define ADF_C4XXX_MAC_CFG 0x18
74 #define ADF_C4XXX_MAC_PIA_CFG 0xA0
75 
76 /* Default MAC_CFG value
77  * - MAC_LINKUP_ENABLE = 1
78  * - MAX_FRAME_LENGTH = 0x2600
79  */
80 #define ADF_C4XXX_MAC_CFG_VALUE 0x00000000FA0C2600
81 
82 /* Bit definitions for MAC_PIA_CFG register */
83 #define ADF_C4XXX_ONPI_ENABLE BIT(0)
84 #define ADF_C4XXX_XOFF_ENABLE BIT(10)
85 
86 /* New default value for MAC_PIA_CFG register */
87 #define ADF_C4XXX_MAC_PIA_CFG_VALUE                                            \
88 	(ADF_C4XXX_XOFF_ENABLE | ADF_C4XXX_ONPI_ENABLE)
89 
90 /* 64-bit Inline statistics registers. It will require
91  * adding ADF_C4XXX_INLINE_INGRESS_OFFSET to the address for ingress
92  * direction or ADF_C4XXX_INLINE_EGRESS_OFFSET to the address for
93  * egress direction
94  */
95 #define ADF_C4XXX_MAC_STAT_TX_OCTET 0x100
96 #define ADF_C4XXX_MAC_STAT_TX_FRAME 0x110
97 #define ADF_C4XXX_MAC_STAT_TX_BAD_FRAME 0x118
98 #define ADF_C4XXX_MAC_STAT_TX_FCS_ERROR 0x120
99 #define ADF_C4XXX_MAC_STAT_TX_64 0x130
100 #define ADF_C4XXX_MAC_STAT_TX_65 0x138
101 #define ADF_C4XXX_MAC_STAT_TX_128 0x140
102 #define ADF_C4XXX_MAC_STAT_TX_256 0x148
103 #define ADF_C4XXX_MAC_STAT_TX_512 0x150
104 #define ADF_C4XXX_MAC_STAT_TX_1024 0x158
105 #define ADF_C4XXX_MAC_STAT_TX_1519 0x160
106 #define ADF_C4XXX_MAC_STAT_TX_JABBER 0x168
107 #define ADF_C4XXX_MAC_STAT_RX_OCTET 0x200
108 #define ADF_C4XXX_MAC_STAT_RX_FRAME 0x210
109 #define ADF_C4XXX_MAC_STAT_RX_BAD_FRAME 0x218
110 #define ADF_C4XXX_MAC_STAT_RX_FCS_ERROR 0x220
111 #define ADF_C4XXX_MAC_STAT_RX_64 0x250
112 #define ADF_C4XXX_MAC_STAT_RX_65 0x258
113 #define ADF_C4XXX_MAC_STAT_RX_128 0x260
114 #define ADF_C4XXX_MAC_STAT_RX_256 0x268
115 #define ADF_C4XXX_MAC_STAT_RX_512 0x270
116 #define ADF_C4XXX_MAC_STAT_RX_1024 0x278
117 #define ADF_C4XXX_MAC_STAT_RX_1519 0x280
118 #define ADF_C4XXX_MAC_STAT_RX_OVERSIZE 0x288
119 #define ADF_C4XXX_MAC_STAT_RX_JABBER 0x290
120 
121 /* 32-bit Inline statistics registers. It will require
122  * adding ADF_C4XXX_INLINE_INGRESS_OFFSET to the address for ingress
123  * direction or ADF_C4XXX_INLINE_EGRESS_OFFSET to the address for
124  * egress direction
125  */
126 #define ADF_C4XXX_IC_PAR_IPSEC_DESC_COUNT 0xBC0
127 #define ADF_C4XXX_IC_PAR_MIXED_DESC_COUNT 0xBC4
128 #define ADF_C4XXX_IC_PAR_FULLY_CLEAR_DESC_COUNT 0xBC8
129 #define ADF_C4XXX_IC_PAR_CLR_COUNT 0xBCC
130 #define ADF_C4XXX_IC_CTPB_PKT_COUNT 0xDF4
131 #define ADF_C4XXX_RB_DATA_COUNT 0xDF8
132 #define ADF_C4XXX_IC_CLEAR_DESC_COUNT 0xDFC
133 #define ADF_C4XXX_IC_IPSEC_DESC_COUNT 0xE00
134 
135 /* REG_CMD_DIS_MISC bit definitions */
136 #define ADF_C4XXX_BYTE_SWAP_ENABLE BIT(0)
137 #define ADF_C4XXX_REG_CMD_DIS_MISC_DEFAULT_VALUE (ADF_C4XXX_BYTE_SWAP_ENABLE)
138 
139 /* Command Dispatch Misc Register */
140 #define ADF_C4XXX_INGRESS_CMD_DIS_MISC (ADF_C4XXX_INLINE_INGRESS_OFFSET + 0x8A8)
141 
142 #define ADF_C4XXX_EGRESS_CMD_DIS_MISC (ADF_C4XXX_INLINE_EGRESS_OFFSET + 0x8A8)
143 
144 /* Congestion management threshold registers */
145 #define ADF_C4XXX_NEXT_FCTHRESH_OFFSET 4
146 
147 /* Number of congestion management domains */
148 #define ADF_C4XXX_NUM_CONGEST_DOMAINS 8
149 
150 #define ADF_C4XXX_BB_FCHTHRESH_OFFSET 0xB78
151 
152 /* IC_BB_FCHTHRESH registers */
153 #define ADF_C4XXX_ICI_BB_FCHTHRESH_OFFSET                                      \
154 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + ADF_C4XXX_BB_FCHTHRESH_OFFSET)
155 
156 #define ADF_C4XXX_ICE_BB_FCHTHRESH_OFFSET                                      \
157 	(ADF_C4XXX_INLINE_EGRESS_OFFSET + ADF_C4XXX_BB_FCHTHRESH_OFFSET)
158 
159 #define ADF_C4XXX_WR_ICI_BB_FCHTHRESH(csr_base_addr, index, value)             \
160 	ADF_CSR_WR(csr_base_addr,                                              \
161 		   (ADF_C4XXX_ICI_BB_FCHTHRESH_OFFSET +                        \
162 		    (index)*ADF_C4XXX_NEXT_FCTHRESH_OFFSET),                   \
163 		   value)
164 
165 #define ADF_C4XXX_WR_ICE_BB_FCHTHRESH(csr_base_addr, index, value)             \
166 	ADF_CSR_WR(csr_base_addr,                                              \
167 		   (ADF_C4XXX_ICE_BB_FCHTHRESH_OFFSET +                        \
168 		    (index)*ADF_C4XXX_NEXT_FCTHRESH_OFFSET),                   \
169 		   value)
170 
171 #define ADF_C4XXX_BB_FCLTHRESH_OFFSET 0xB98
172 
173 /* IC_BB_FCLTHRESH registers */
174 #define ADF_C4XXX_ICI_BB_FCLTHRESH_OFFSET                                      \
175 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + ADF_C4XXX_BB_FCLTHRESH_OFFSET)
176 
177 #define ADF_C4XXX_ICE_BB_FCLTHRESH_OFFSET                                      \
178 	(ADF_C4XXX_INLINE_EGRESS_OFFSET + ADF_C4XXX_BB_FCLTHRESH_OFFSET)
179 
180 #define ADF_C4XXX_WR_ICI_BB_FCLTHRESH(csr_base_addr, index, value)             \
181 	ADF_CSR_WR(csr_base_addr,                                              \
182 		   (ADF_C4XXX_ICI_BB_FCLTHRESH_OFFSET +                        \
183 		    (index)*ADF_C4XXX_NEXT_FCTHRESH_OFFSET),                   \
184 		   value)
185 
186 #define ADF_C4XXX_WR_ICE_BB_FCLTHRESH(csr_base_addr, index, value)             \
187 	ADF_CSR_WR(csr_base_addr,                                              \
188 		   (ADF_C4XXX_ICE_BB_FCLTHRESH_OFFSET +                        \
189 		    (index)*ADF_C4XXX_NEXT_FCTHRESH_OFFSET),                   \
190 		   value)
191 
192 #define ADF_C4XXX_BB_BEHTHRESH_OFFSET 0xBB8
193 #define ADF_C4XXX_BB_BELTHRESH_OFFSET 0xBBC
194 #define ADF_C4XXX_BEWIP_THRESH_OFFSET 0xDEC
195 #define ADF_C4XXX_CTPB_THRESH_OFFSET 0xDE8
196 #define ADF_C4XXX_CIRQ_OFFSET 0xDE4
197 #define ADF_C4XXX_Q2MEMAP_OFFSET 0xC04
198 
199 /* IC_BB_BEHTHRESH register */
200 #define ADF_C4XXX_ICI_BB_BEHTHRESH_OFFSET                                      \
201 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + ADF_C4XXX_BB_BEHTHRESH_OFFSET)
202 
203 #define ADF_C4XXX_ICE_BB_BEHTHRESH_OFFSET                                      \
204 	(ADF_C4XXX_INLINE_EGRESS_OFFSET + ADF_C4XXX_BB_BEHTHRESH_OFFSET)
205 
206 /* IC_BB_BELTHRESH register */
207 #define ADF_C4XXX_ICI_BB_BELTHRESH_OFFSET                                      \
208 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + ADF_C4XXX_BB_BELTHRESH_OFFSET)
209 
210 #define ADF_C4XXX_ICE_BB_BELTHRESH_OFFSET                                      \
211 	(ADF_C4XXX_INLINE_EGRESS_OFFSET + ADF_C4XXX_BB_BELTHRESH_OFFSET)
212 
213 /* IC_BEWIP_THRESH register */
214 #define ADF_C4XXX_ICI_BEWIP_THRESH_OFFSET                                      \
215 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + ADF_C4XXX_BEWIP_THRESH_OFFSET)
216 
217 #define ADF_C4XXX_ICE_BEWIP_THRESH_OFFSET                                      \
218 	(ADF_C4XXX_INLINE_EGRESS_OFFSET + ADF_C4XXX_BEWIP_THRESH_OFFSET)
219 
220 /* IC_CTPB_THRESH register */
221 #define ADF_C4XXX_ICI_CTPB_THRESH_OFFSET                                       \
222 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + ADF_C4XXX_CTPB_THRESH_OFFSET)
223 
224 #define ADF_C4XXX_ICE_CTPB_THRESH_OFFSET                                       \
225 	(ADF_C4XXX_INLINE_EGRESS_OFFSET + ADF_C4XXX_CTPB_THRESH_OFFSET)
226 
227 /* ADF_C4XXX_ICI_CIRQ_OFFSET */
228 #define ADF_C4XXX_ICI_CIRQ_OFFSET                                              \
229 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + ADF_C4XXX_CIRQ_OFFSET)
230 
231 #define ADF_C4XXX_ICE_CIRQ_OFFSET                                              \
232 	(ADF_C4XXX_INLINE_EGRESS_OFFSET + ADF_C4XXX_CIRQ_OFFSET)
233 
234 /* IC_Q2MEMAP register */
235 #define ADF_C4XXX_ICI_Q2MEMAP_OFFSET                                           \
236 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + ADF_C4XXX_Q2MEMAP_OFFSET)
237 
238 #define ADF_C4XXX_ICE_Q2MEMAP_OFFSET                                           \
239 	(ADF_C4XXX_INLINE_EGRESS_OFFSET + ADF_C4XXX_Q2MEMAP_OFFSET)
240 
241 #define ADF_C4XXX_NEXT_Q2MEMAP_OFFSET 4
242 #define ADF_C4XXX_NUM_Q2MEMAP_REGISTERS 8
243 
244 #define ADF_C4XXX_WR_CSR_ICI_Q2MEMAP(csr_base_addr, index, value)              \
245 	ADF_CSR_WR(csr_base_addr,                                              \
246 		   (ADF_C4XXX_ICI_Q2MEMAP_OFFSET +                             \
247 		    (index)*ADF_C4XXX_NEXT_Q2MEMAP_OFFSET),                    \
248 		   value)
249 
250 #define ADF_C4XXX_WR_CSR_ICE_Q2MEMAP(csr_base_addr, index, value)              \
251 	ADF_CSR_WR(csr_base_addr,                                              \
252 		   (ADF_C4XXX_ICE_Q2MEMAP_OFFSET +                             \
253 		    (index)*ADF_C4XXX_NEXT_Q2MEMAP_OFFSET),                    \
254 		   value)
255 
256 /* IC_PARSE_CTRL register */
257 #define ADF_C4XXX_DEFAULT_KEY_LENGTH 21
258 #define ADF_C4XXX_DEFAULT_REL_ABS_OFFSET 1
259 #define ADF_C4XXX_DEFAULT_NUM_TUPLES 4
260 #define ADF_C4XXX_IC_PARSE_CTRL_OFFSET_DEFAULT_VALUE                           \
261 	((ADF_C4XXX_DEFAULT_KEY_LENGTH << 4) |                                 \
262 	 (ADF_C4XXX_DEFAULT_REL_ABS_OFFSET << 3) |                             \
263 	 (ADF_C4XXX_DEFAULT_NUM_TUPLES))
264 
265 /* Configuration parsing register definitions */
266 #define ADF_C4XXX_IC_PARSE_CTRL_OFFSET (ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB00)
267 
268 /* Fixed data parsing register */
269 #define ADF_C4XXX_IC_PARSE_FIXED_DATA(i)                                       \
270 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB04 + ((i)*4))
271 #define ADF_C4XXX_DEFAULT_IC_PARSE_FIXED_DATA_0 0x32
272 
273 /* Fixed length parsing register */
274 #define ADF_C4XXX_IC_PARSE_FIXED_LENGTH                                        \
275 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB14)
276 #define ADF_C4XXX_DEFAULT_IC_PARSE_FIXED_LEN 0x0
277 
278 /* IC_PARSE_IPV4 offset and length registers */
279 #define ADF_C4XXX_IC_PARSE_IPV4_OFFSET_0                                       \
280 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB18)
281 #define ADF_C4XXX_IC_PARSE_IPV4_OFFSET_1                                       \
282 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB1C)
283 #define ADF_C4XXX_IC_PARSE_IPV4_OFFSET_2                                       \
284 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB20)
285 #define ADF_C4XXX_IC_PARSE_IPV4_OFFSET_3                                       \
286 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB24)
287 #define ADF_C4XXX_IC_PARSE_IPV4_OFFSET_4                                       \
288 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB28)
289 #define ADF_C4XXX_IC_PARSE_IPV4_OFFSET_5                                       \
290 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB2C)
291 
292 #define ADF_C4XXX_IC_PARSE_IPV4_LENGTH_0                                       \
293 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB30)
294 #define ADF_C4XXX_IC_PARSE_IPV4_LENGTH_1                                       \
295 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB34)
296 #define ADF_C4XXX_IC_PARSE_IPV4_LENGTH_2                                       \
297 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB38)
298 #define ADF_C4XXX_IC_PARSE_IPV4_LENGTH_3                                       \
299 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB3C)
300 #define ADF_C4XXX_IC_PARSE_IPV4_LENGTH_4                                       \
301 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB40)
302 #define ADF_C4XXX_IC_PARSE_IPV4_LENGTH_5                                       \
303 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB44)
304 
305 #define ADF_C4XXX_IPV4_OFFSET_0_PARSER_BASE 0x1
306 #define ADF_C4XXX_IPV4_OFFSET_0_OFFSET 0x0
307 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV4_OFFS_0_VALUE                           \
308 	((ADF_C4XXX_IPV4_OFFSET_0_PARSER_BASE << 29) |                         \
309 	 ADF_C4XXX_IPV4_OFFSET_0_OFFSET)
310 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV4_LEN_0_VALUE 0
311 
312 #define ADF_C4XXX_IPV4_OFFSET_1_PARSER_BASE 0x2
313 #define ADF_C4XXX_IPV4_OFFSET_1_OFFSET 0x0
314 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV4_OFFS_1_VALUE                           \
315 	((ADF_C4XXX_IPV4_OFFSET_1_PARSER_BASE << 29) |                         \
316 	 ADF_C4XXX_IPV4_OFFSET_1_OFFSET)
317 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV4_LEN_1_VALUE 3
318 
319 #define ADF_C4XXX_IPV4_OFFSET_2_PARSER_BASE 0x4
320 #define ADF_C4XXX_IPV4_OFFSET_2_OFFSET 0x10
321 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV4_OFFS_2_VALUE                           \
322 	((ADF_C4XXX_IPV4_OFFSET_2_PARSER_BASE << 29) |                         \
323 	 ADF_C4XXX_IPV4_OFFSET_2_OFFSET)
324 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV4_LEN_2_VALUE 3
325 
326 #define ADF_C4XXX_IPV4_OFFSET_3_PARSER_BASE 0x0
327 #define ADF_C4XXX_IPV4_OFFSET_3_OFFSET 0x0
328 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV4_OFFS_3_VALUE                           \
329 	((ADF_C4XXX_IPV4_OFFSET_3_PARSER_BASE << 29) |                         \
330 	 ADF_C4XXX_IPV4_OFFSET_3_OFFSET)
331 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV4_LEN_3_VALUE 0
332 
333 /* IC_PARSE_IPV6 offset and length registers */
334 #define ADF_C4XXX_IC_PARSE_IPV6_OFFSET_0                                       \
335 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB48)
336 #define ADF_C4XXX_IC_PARSE_IPV6_OFFSET_1                                       \
337 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB4C)
338 #define ADF_C4XXX_IC_PARSE_IPV6_OFFSET_2                                       \
339 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB50)
340 #define ADF_C4XXX_IC_PARSE_IPV6_OFFSET_3                                       \
341 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB54)
342 #define ADF_C4XXX_IC_PARSE_IPV6_OFFSET_4                                       \
343 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB58)
344 #define ADF_C4XXX_IC_PARSE_IPV6_OFFSET_5                                       \
345 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB5C)
346 
347 #define ADF_C4XXX_IC_PARSE_IPV6_LENGTH_0                                       \
348 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB60)
349 #define ADF_C4XXX_IC_PARSE_IPV6_LENGTH_1                                       \
350 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB64)
351 #define ADF_C4XXX_IC_PARSE_IPV6_LENGTH_2                                       \
352 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB68)
353 #define ADF_C4XXX_IC_PARSE_IPV6_LENGTH_3                                       \
354 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB6C)
355 #define ADF_C4XXX_IC_PARSE_IPV6_LENGTH_4                                       \
356 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB70)
357 #define ADF_C4XXX_IC_PARSE_IPV6_LENGTH_5                                       \
358 	(ADF_C4XXX_INLINE_INGRESS_OFFSET + 0xB74)
359 
360 #define ADF_C4XXX_IPV6_OFFSET_0_PARSER_BASE 0x1
361 #define ADF_C4XXX_IPV6_OFFSET_0_OFFSET 0x0
362 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV6_OFFS_0_VALUE                           \
363 	((ADF_C4XXX_IPV6_OFFSET_0_PARSER_BASE << 29) |                         \
364 	 (ADF_C4XXX_IPV6_OFFSET_0_OFFSET))
365 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV6_LEN_0_VALUE 0
366 
367 #define ADF_C4XXX_IPV6_OFFSET_1_PARSER_BASE 0x2
368 #define ADF_C4XXX_IPV6_OFFSET_1_OFFSET 0x0
369 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV6_OFFS_1_VALUE                           \
370 	((ADF_C4XXX_IPV6_OFFSET_1_PARSER_BASE << 29) |                         \
371 	 (ADF_C4XXX_IPV6_OFFSET_1_OFFSET))
372 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV6_LEN_1_VALUE 3
373 
374 #define ADF_C4XXX_IPV6_OFFSET_2_PARSER_BASE 0x4
375 #define ADF_C4XXX_IPV6_OFFSET_2_OFFSET 0x18
376 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV6_OFFS_2_VALUE                           \
377 	((ADF_C4XXX_IPV6_OFFSET_2_PARSER_BASE << 29) |                         \
378 	 (ADF_C4XXX_IPV6_OFFSET_2_OFFSET))
379 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV6_LEN_2_VALUE 0xF
380 
381 #define ADF_C4XXX_IPV6_OFFSET_3_PARSER_BASE 0x0
382 #define ADF_C4XXX_IPV6_OFFSET_3_OFFSET 0x0
383 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV6_OFFS_3_VALUE                           \
384 	((ADF_C4XXX_IPV6_OFFSET_3_PARSER_BASE << 29) |                         \
385 	 (ADF_C4XXX_IPV6_OFFSET_3_OFFSET))
386 #define ADF_C4XXX_DEFAULT_IC_PARSE_IPV6_LEN_3_VALUE 0x0
387 
388 /* error notification configuration registers */
389 
390 #define ADF_C4XXX_IC_CD_RF_PARITY_ERR_0 0xA00
391 #define ADF_C4XXX_IC_CD_RF_PARITY_ERR_1 0xA04
392 #define ADF_C4XXX_IC_CD_RF_PARITY_ERR_2 0xA08
393 #define ADF_C4XXX_IC_CD_RF_PARITY_ERR_3 0xA0C
394 #define ADF_C4XXX_IC_CD_CERR 0xA10
395 #define ADF_C4XXX_IC_CD_UERR 0xA14
396 
397 #define ADF_C4XXX_IC_INLN_RF_PARITY_ERR_0 0xF00
398 #define ADF_C4XXX_IC_INLN_RF_PARITY_ERR_1 0xF04
399 #define ADF_C4XXX_IC_INLN_RF_PARITY_ERR_2 0xF08
400 #define ADF_C4XXX_IC_INLN_RF_PARITY_ERR_3 0xF0C
401 #define ADF_C4XXX_IC_INLN_RF_PARITY_ERR_4 0xF10
402 #define ADF_C4XXX_IC_INLN_RF_PARITY_ERR_5 0xF14
403 #define ADF_C4XXX_IC_PARSER_CERR 0xF18
404 #define ADF_C4XXX_IC_PARSER_UERR 0xF1C
405 #define ADF_C4XXX_IC_CTPB_CERR 0xF28
406 #define ADF_C4XXX_IC_CTPB_UERR 0xF2C
407 #define ADF_C4XXX_IC_CPPM_ERR_STAT 0xF3C
408 #define ADF_C4XXX_IC_CONGESTION_MGMT_INT 0xF58
409 
410 #define ADF_C4XXX_IC_CPPT_ERR_STAT 0x704
411 #define ADF_C4XXX_IC_MAC_IM 0x10
412 
413 #define ADF_C4XXX_CD_RF_PARITY_ERR_0_VAL 0x22222222
414 #define ADF_C4XXX_CD_RF_PARITY_ERR_1_VAL 0x22222323
415 #define ADF_C4XXX_CD_RF_PARITY_ERR_2_VAL 0x00022222
416 #define ADF_C4XXX_CD_RF_PARITY_ERR_3_VAL 0x00000000
417 #define ADF_C4XXX_CD_UERR_VAL 0x00000008
418 #define ADF_C4XXX_CD_CERR_VAL 0x00000008
419 #define ADF_C4XXX_PARSER_UERR_VAL 0x00100008
420 #define ADF_C4XXX_PARSER_CERR_VAL 0x00000008
421 #define ADF_C4XXX_INLN_RF_PARITY_ERR_0_VAL 0x33333333
422 #define ADF_C4XXX_INLN_RF_PARITY_ERR_1_VAL 0x33333333
423 #define ADF_C4XXX_INLN_RF_PARITY_ERR_2_VAL 0x33333333
424 #define ADF_C4XXX_INLN_RF_PARITY_ERR_3_VAL 0x22222222
425 #define ADF_C4XXX_INLN_RF_PARITY_ERR_4_VAL 0x22222222
426 #define ADF_C4XXX_INLN_RF_PARITY_ERR_5_VAL 0x00333232
427 #define ADF_C4XXX_CTPB_UERR_VAL 0x00000008
428 #define ADF_C4XXX_CTPB_CERR_VAL 0x00000008
429 #define ADF_C4XXX_CPPM_ERR_STAT_VAL 0x00007000
430 #define ADF_C4XXX_CPPT_ERR_STAT_VAL 0x000001C0
431 #define ADF_C4XXX_CONGESTION_MGMT_INI_VAL 0x00000001
432 #define ADF_C4XXX_MAC_IM_VAL 0x000000087FDC003E
433 
434 /* parser ram ecc uerr */
435 #define ADF_C4XXX_PARSER_UERR_INTR BIT(0)
436 /* multiple err */
437 #define ADF_C4XXX_PARSER_MUL_UERR_INTR BIT(18)
438 #define ADF_C4XXX_PARSER_DESC_UERR_INTR_ENA BIT(20)
439 
440 #define ADF_C4XXX_RF_PAR_ERR_BITS 32
441 #define ADF_C4XXX_MAX_STR_LEN 64
442 #define RF_PAR_MUL_MAP(bit_num) (((bit_num)-2) / 4)
443 #define RF_PAR_MAP(bit_num) (((bit_num)-3) / 4)
444 
445 /* cd rf parity error
446  * BIT(2) rf parity mul 0
447  * BIT(3) rf parity 0
448  * BIT(10) rf parity mul 2
449  * BIT(11) rf parity 2
450  */
451 #define ADF_C4XXX_CD_RF_PAR_ERR_1_INTR (BIT(2) | BIT(3) | BIT(10) | BIT(11))
452 
453 /* inln rf parity error
454  * BIT(2) rf parity mul 0
455  * BIT(3) rf parity 0
456  * BIT(6) rf parity mul 1
457  * BIT(7) rf parity 1
458  * BIT(10) rf parity mul 2
459  * BIT(11) rf parity 2
460  * BIT(14) rf parity mul 3
461  * BIT(15) rf parity 3
462  * BIT(18) rf parity mul 4
463  * BIT(19) rf parity 4
464  * BIT(22) rf parity mul 5
465  * BIT(23) rf parity 5
466  * BIT(26) rf parity mul 6
467  * BIT(27) rf parity 6
468  * BIT(30) rf parity mul 7
469  * BIT(31) rf parity 7
470  */
471 #define ADF_C4XXX_INLN_RF_PAR_ERR_0_INTR                                       \
472 	(BIT(2) | BIT(3) | BIT(6) | BIT(7) | BIT(10) | BIT(11) | BIT(14) |     \
473 	 BIT(15) | BIT(18) | BIT(19) | BIT(22) | BIT(23) | BIT(26) | BIT(27) | \
474 	 BIT(30) | BIT(31))
475 #define ADF_C4XXX_INLN_RF_PAR_ERR_1_INTR ADF_C4XXX_INLN_RF_PAR_ERR_0_INTR
476 #define ADF_C4XXX_INLN_RF_PAR_ERR_2_INTR ADF_C4XXX_INLN_RF_PAR_ERR_0_INTR
477 #define ADF_C4XXX_INLN_RF_PAR_ERR_5_INTR                                       \
478 	(BIT(6) | BIT(7) | BIT(14) | BIT(15) | BIT(18) | BIT(19) | BIT(22) |   \
479 	 BIT(23))
480 
481 /* Congestion mgmt events */
482 #define ADF_C4XXX_CONGESTION_MGMT_CTPB_GLOBAL_CROSSED BIT(1)
483 #define ADF_C4XXX_CONGESTION_MGMT_XOFF_CIRQ_OUT BIT(2)
484 #define ADF_C4XXX_CONGESTION_MGMT_XOFF_CIRQ_IN BIT(3)
485 
486 /* AEAD algorithm definitions in REG_SA_SCRATCH[0] register.
487  * Bits<6:5> are reserved for expansion.
488  */
489 #define AES128_GCM BIT(0)
490 #define AES192_GCM BIT(1)
491 #define AES256_GCM BIT(2)
492 #define AES128_CCM BIT(3)
493 #define CHACHA20_POLY1305 BIT(4)
494 /* Cipher algorithm definitions in REG_SA_SCRATCH[0] register
495  * Bit<15> is reserved for expansion.
496  */
497 #define CIPHER_NULL BIT(7)
498 #define AES128_CBC BIT(8)
499 #define AES192_CBC BIT(9)
500 #define AES256_CBC BIT(10)
501 #define AES128_CTR BIT(11)
502 #define AES192_CTR BIT(12)
503 #define AES256_CTR BIT(13)
504 #define _3DES_CBC BIT(14)
505 /* Authentication algorithm definitions in REG_SA_SCRATCH[0] register
506  * Bits<25:30> are reserved for expansion.
507  */
508 #define HMAC_MD5_96 BIT(16)
509 #define HMAC_SHA1_96 BIT(17)
510 #define HMAC_SHA256_128 BIT(18)
511 #define HMAC_SHA384_192 BIT(19)
512 #define HMAC_SHA512_256 BIT(20)
513 #define AES_GMAC_AES_128 BIT(21)
514 #define AES_XCBC_MAC_96 BIT(22)
515 #define AES_CMAC_96 BIT(23)
516 #define AUTH_NULL BIT(24)
517 
518 /* Algo group0:DEFAULT */
519 #define ADF_C4XXX_DEFAULT_SUPPORTED_ALGORITHMS                                 \
520 	(AES128_GCM |                                                          \
521 	 (AES192_GCM | AES256_GCM | AES128_CCM | CHACHA20_POLY1305) |          \
522 	 (CIPHER_NULL | AES128_CBC | AES192_CBC | AES256_CBC) |                \
523 	 (AES128_CTR | AES192_CTR | AES256_CTR | _3DES_CBC) |                  \
524 	 (HMAC_MD5_96 | HMAC_SHA1_96 | HMAC_SHA256_128) |                      \
525 	 (HMAC_SHA384_192 | HMAC_SHA512_256 | AES_GMAC_AES_128) |              \
526 	 (AES_XCBC_MAC_96 | AES_CMAC_96 | AUTH_NULL))
527 
528 /* Algo group1 */
529 #define ADF_C4XXX_SUPPORTED_ALGORITHMS_GROUP1                                  \
530 	(AES128_GCM | (AES256_GCM | CHACHA20_POLY1305))
531 
532 /* Supported crypto offload features in REG_SA_SCRATCH[2] register */
533 #define ADF_C4XXX_IPSEC_ESP BIT(0)
534 #define ADF_C4XXX_IPSEC_AH BIT(1)
535 #define ADF_C4XXX_UDP_ENCAPSULATION BIT(2)
536 #define ADF_C4XXX_IPSEC_TUNNEL_MODE BIT(3)
537 #define ADF_C4XXX_IPSEC_TRANSPORT_MODE BIT(4)
538 #define ADF_C4XXX_IPSEC_EXT_SEQ_NUM BIT(5)
539 
540 #define ADF_C4XXX_DEFAULT_CY_OFFLOAD_FEATURES                                  \
541 	(ADF_C4XXX_IPSEC_ESP |                                                 \
542 	 (ADF_C4XXX_UDP_ENCAPSULATION | ADF_C4XXX_IPSEC_TUNNEL_MODE) |         \
543 	 (ADF_C4XXX_IPSEC_TRANSPORT_MODE | ADF_C4XXX_IPSEC_EXT_SEQ_NUM))
544 
545 /* REG_SA_CTRL_LOCK default value */
546 #define ADF_C4XXX_DEFAULT_SA_CTRL_LOCKOUT BIT(0)
547 
548 /* SA ENTRY CTRL default values */
549 #define ADF_C4XXX_DEFAULT_LU_KEY_LEN 21
550 
551 /* Sa size for algo group0 */
552 #define ADF_C4XXX_DEFAULT_SA_SIZE 6
553 
554 /* Sa size for algo group1 */
555 #define ADF_C4XXX_ALGO_GROUP1_SA_SIZE 2
556 
557 /* SA size is based on 32byte granularity
558  * A value of zero indicates an SA size of 32 bytes
559  */
560 #define ADF_C4XXX_SA_SIZE_IN_BYTES(sa_size) (((sa_size) + 1) * 32)
561 
562 /* SA ENTRY CTRL register bit offsets */
563 #define ADF_C4XXX_LU_KEY_LEN_BIT_OFFSET 5
564 
565 /* REG_SA_FUNC_LIMITS default value */
566 #define ADF_C4XXX_FUNC_LIMIT(accel_dev, sa_size)                               \
567 	(ADF_C4XXX_SADB_SIZE_IN_WORDS(accel_dev) / ((sa_size) + 1))
568 
569 /* REG_SA_INLINE_ENABLE bit definition */
570 #define ADF_C4XXX_INLINE_ENABLED BIT(0)
571 
572 /* REG_SA_INLINE_CAPABILITY bit definitions */
573 #define ADF_C4XXX_INLINE_INGRESS_ENABLE BIT(0)
574 #define ADF_C4XXX_INLINE_EGRESS_ENABLE BIT(1)
575 #define ADF_C4XXX_INLINE_CAPABILITIES                                          \
576 	(ADF_C4XXX_INLINE_INGRESS_ENABLE | ADF_C4XXX_INLINE_EGRESS_ENABLE)
577 
578 /* Congestion management profile information */
579 enum congest_mngt_profile_info {
580 	CIRQ_CFG_1 = 0,
581 	CIRQ_CFG_2,
582 	CIRQ_CFG_3,
583 	BEST_EFFORT_SINGLE_QUEUE,
584 	BEST_EFFORT_8_QUEUES,
585 };
586 
587 /* IPsec Algo Group */
588 enum ipsec_algo_group_info {
589 	IPSEC_DEFAUL_ALGO_GROUP = 0,
590 	IPSEC_ALGO_GROUP1,
591 	IPSEC_ALGO_GROUP_DELIMITER
592 };
593 
594 int get_congestion_management_profile(struct adf_accel_dev *accel_dev,
595 				      u8 *profile);
596 int c4xxx_init_congestion_management(struct adf_accel_dev *accel_dev);
597 int c4xxx_init_debugfs_inline_dir(struct adf_accel_dev *accel_dev);
598 void c4xxx_exit_debugfs_inline_dir(struct adf_accel_dev *accel_dev);
599 #endif /* ADF_C4XXX_INLINE_H_ */
600