xref: /dpdk/drivers/common/sfc_efx/base/siena_impl.h (revision 672386c1e9e1f64f7aa3b1360ad22dc737ea8d72)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  *
3  * Copyright(c) 2019-2021 Xilinx, Inc.
4  * Copyright(c) 2009-2019 Solarflare Communications Inc.
5  */
6 
7 #ifndef _SYS_SIENA_IMPL_H
8 #define	_SYS_SIENA_IMPL_H
9 
10 #include "efx.h"
11 #include "efx_regs.h"
12 #include "siena_flash.h"
13 
14 #ifdef	__cplusplus
15 extern "C" {
16 #endif
17 
18 #ifndef EFX_TXQ_DC_SIZE
19 #define	EFX_TXQ_DC_SIZE 1 /* 16 descriptors */
20 #endif
21 #ifndef EFX_RXQ_DC_SIZE
22 #define	EFX_RXQ_DC_SIZE 3 /* 64 descriptors */
23 #endif
24 #define	EFX_TXQ_DC_NDESCS(_dcsize)	(8 << (_dcsize))
25 #define	EFX_RXQ_DC_NDESCS(_dcsize)	(8 << (_dcsize))
26 
27 #define	SIENA_EVQ_MAXNEVS	32768
28 #define	SIENA_EVQ_MINNEVS	512
29 
30 #define	SIENA_TXQ_MAXNDESCS	4096
31 #define	SIENA_TXQ_MINNDESCS	512
32 
33 #define	SIENA_RXQ_MAXNDESCS	4096
34 #define	SIENA_RXQ_MINNDESCS	512
35 
36 #define	SIENA_EVQ_DESC_SIZE	(sizeof (efx_qword_t))
37 #define	SIENA_RXQ_DESC_SIZE	(sizeof (efx_qword_t))
38 #define	SIENA_TXQ_DESC_SIZE	(sizeof (efx_qword_t))
39 
40 #define	SIENA_NVRAM_CHUNK 0x80
41 
42 
43 LIBEFX_INTERNAL
44 extern	__checkReturn	efx_rc_t
45 siena_nic_probe(
46 	__in		efx_nic_t *enp);
47 
48 LIBEFX_INTERNAL
49 extern	__checkReturn	efx_rc_t
50 siena_nic_reset(
51 	__in		efx_nic_t *enp);
52 
53 LIBEFX_INTERNAL
54 extern	__checkReturn	efx_rc_t
55 siena_nic_init(
56 	__in		efx_nic_t *enp);
57 
58 #if EFSYS_OPT_DIAG
59 
60 LIBEFX_INTERNAL
61 extern	efx_sram_pattern_fn_t	__efx_sram_pattern_fns[];
62 
63 typedef struct siena_register_set_s {
64 	unsigned int		address;
65 	unsigned int		step;
66 	unsigned int		rows;
67 	efx_oword_t		mask;
68 } siena_register_set_t;
69 
70 LIBEFX_INTERNAL
71 extern	__checkReturn	efx_rc_t
72 siena_nic_register_test(
73 	__in		efx_nic_t *enp);
74 
75 #endif	/* EFSYS_OPT_DIAG */
76 
77 LIBEFX_INTERNAL
78 extern			void
79 siena_nic_fini(
80 	__in		efx_nic_t *enp);
81 
82 LIBEFX_INTERNAL
83 extern			void
84 siena_nic_unprobe(
85 	__in		efx_nic_t *enp);
86 
87 #define	SIENA_SRAM_ROWS	0x12000
88 
89 LIBEFX_INTERNAL
90 extern			void
91 siena_sram_init(
92 	__in		efx_nic_t *enp);
93 
94 #if EFSYS_OPT_DIAG
95 
96 LIBEFX_INTERNAL
97 extern	__checkReturn	efx_rc_t
98 siena_sram_test(
99 	__in		efx_nic_t *enp,
100 	__in		efx_sram_pattern_fn_t func);
101 
102 #endif	/* EFSYS_OPT_DIAG */
103 
104 #if EFSYS_OPT_MCDI
105 
106 LIBEFX_INTERNAL
107 extern	__checkReturn	efx_rc_t
108 siena_mcdi_init(
109 	__in		efx_nic_t *enp,
110 	__in		const efx_mcdi_transport_t *mtp);
111 
112 LIBEFX_INTERNAL
113 extern			void
114 siena_mcdi_send_request(
115 	__in			efx_nic_t *enp,
116 	__in_bcount(hdr_len)	void *hdrp,
117 	__in			size_t hdr_len,
118 	__in_bcount(sdu_len)	void *sdup,
119 	__in			size_t sdu_len);
120 
121 LIBEFX_INTERNAL
122 extern	__checkReturn	boolean_t
123 siena_mcdi_poll_response(
124 	__in		efx_nic_t *enp);
125 
126 LIBEFX_INTERNAL
127 extern			void
128 siena_mcdi_read_response(
129 	__in			efx_nic_t *enp,
130 	__out_bcount(length)	void *bufferp,
131 	__in			size_t offset,
132 	__in			size_t length);
133 
134 LIBEFX_INTERNAL
135 extern			efx_rc_t
136 siena_mcdi_poll_reboot(
137 	__in		efx_nic_t *enp);
138 
139 LIBEFX_INTERNAL
140 extern			void
141 siena_mcdi_fini(
142 	__in		efx_nic_t *enp);
143 
144 LIBEFX_INTERNAL
145 extern	__checkReturn	efx_rc_t
146 siena_mcdi_feature_supported(
147 	__in		efx_nic_t *enp,
148 	__in		efx_mcdi_feature_id_t id,
149 	__out		boolean_t *supportedp);
150 
151 LIBEFX_INTERNAL
152 extern			void
153 siena_mcdi_get_timeout(
154 	__in		efx_nic_t *enp,
155 	__in		efx_mcdi_req_t *emrp,
156 	__out		uint32_t *timeoutp);
157 
158 #endif /* EFSYS_OPT_MCDI */
159 
160 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
161 
162 LIBEFX_INTERNAL
163 extern	__checkReturn		efx_rc_t
164 siena_nvram_partn_lock(
165 	__in			efx_nic_t *enp,
166 	__in			uint32_t partn);
167 
168 LIBEFX_INTERNAL
169 extern	__checkReturn		efx_rc_t
170 siena_nvram_partn_unlock(
171 	__in			efx_nic_t *enp,
172 	__in			uint32_t partn,
173 	__out_opt		uint32_t *verify_resultp);
174 
175 LIBEFX_INTERNAL
176 extern	__checkReturn		efx_rc_t
177 siena_nvram_get_dynamic_cfg(
178 	__in			efx_nic_t *enp,
179 	__in			uint32_t partn,
180 	__in			boolean_t vpd,
181 	__out			siena_mc_dynamic_config_hdr_t **dcfgp,
182 	__out			size_t *sizep);
183 
184 #endif	/* EFSYS_OPT_VPD || EFSYS_OPT_NVRAM */
185 
186 #if EFSYS_OPT_NVRAM
187 
188 #if EFSYS_OPT_DIAG
189 
190 LIBEFX_INTERNAL
191 extern	__checkReturn		efx_rc_t
192 siena_nvram_test(
193 	__in			efx_nic_t *enp);
194 
195 #endif	/* EFSYS_OPT_DIAG */
196 
197 LIBEFX_INTERNAL
198 extern	__checkReturn		efx_rc_t
199 siena_nvram_get_subtype(
200 	__in			efx_nic_t *enp,
201 	__in			uint32_t partn,
202 	__out			uint32_t *subtypep);
203 
204 LIBEFX_INTERNAL
205 extern	__checkReturn		efx_rc_t
206 siena_nvram_type_to_partn(
207 	__in			efx_nic_t *enp,
208 	__in			efx_nvram_type_t type,
209 	__out			uint32_t *partnp);
210 
211 LIBEFX_INTERNAL
212 extern	__checkReturn		efx_rc_t
213 siena_nvram_partn_size(
214 	__in			efx_nic_t *enp,
215 	__in			uint32_t partn,
216 	__out			size_t *sizep);
217 
218 LIBEFX_INTERNAL
219 extern	__checkReturn		efx_rc_t
220 siena_nvram_partn_info(
221 	__in			efx_nic_t *enp,
222 	__in			uint32_t partn,
223 	__out			efx_nvram_info_t * enip);
224 
225 LIBEFX_INTERNAL
226 extern	__checkReturn		efx_rc_t
227 siena_nvram_partn_rw_start(
228 	__in			efx_nic_t *enp,
229 	__in			uint32_t partn,
230 	__out			size_t *chunk_sizep);
231 
232 LIBEFX_INTERNAL
233 extern	__checkReturn		efx_rc_t
234 siena_nvram_partn_read(
235 	__in			efx_nic_t *enp,
236 	__in			uint32_t partn,
237 	__in			unsigned int offset,
238 	__out_bcount(size)	caddr_t data,
239 	__in			size_t size);
240 
241 LIBEFX_INTERNAL
242 extern	__checkReturn		efx_rc_t
243 siena_nvram_partn_erase(
244 	__in			efx_nic_t *enp,
245 	__in			uint32_t partn,
246 	__in			unsigned int offset,
247 	__in			size_t size);
248 
249 LIBEFX_INTERNAL
250 extern	__checkReturn		efx_rc_t
251 siena_nvram_partn_write(
252 	__in			efx_nic_t *enp,
253 	__in			uint32_t partn,
254 	__in			unsigned int offset,
255 	__out_bcount(size)	caddr_t data,
256 	__in			size_t size);
257 
258 LIBEFX_INTERNAL
259 extern	__checkReturn		efx_rc_t
260 siena_nvram_partn_rw_finish(
261 	__in			efx_nic_t *enp,
262 	__in			uint32_t partn,
263 	__out_opt		uint32_t *verify_resultp);
264 
265 LIBEFX_INTERNAL
266 extern	__checkReturn		efx_rc_t
267 siena_nvram_partn_get_version(
268 	__in			efx_nic_t *enp,
269 	__in			uint32_t partn,
270 	__out			uint32_t *subtypep,
271 	__out_ecount(4)		uint16_t version[4]);
272 
273 LIBEFX_INTERNAL
274 extern	__checkReturn		efx_rc_t
275 siena_nvram_partn_set_version(
276 	__in			efx_nic_t *enp,
277 	__in			uint32_t partn,
278 	__in_ecount(4)		uint16_t version[4]);
279 
280 #endif	/* EFSYS_OPT_NVRAM */
281 
282 #if EFSYS_OPT_VPD
283 
284 LIBEFX_INTERNAL
285 extern	__checkReturn		efx_rc_t
286 siena_vpd_init(
287 	__in			efx_nic_t *enp);
288 
289 LIBEFX_INTERNAL
290 extern	__checkReturn		efx_rc_t
291 siena_vpd_size(
292 	__in			efx_nic_t *enp,
293 	__out			size_t *sizep);
294 
295 LIBEFX_INTERNAL
296 extern	__checkReturn		efx_rc_t
297 siena_vpd_read(
298 	__in			efx_nic_t *enp,
299 	__out_bcount(size)	caddr_t data,
300 	__in			size_t size);
301 
302 LIBEFX_INTERNAL
303 extern	__checkReturn		efx_rc_t
304 siena_vpd_verify(
305 	__in			efx_nic_t *enp,
306 	__in_bcount(size)	caddr_t data,
307 	__in			size_t size);
308 
309 LIBEFX_INTERNAL
310 extern	__checkReturn		efx_rc_t
311 siena_vpd_reinit(
312 	__in			efx_nic_t *enp,
313 	__in_bcount(size)	caddr_t data,
314 	__in			size_t size);
315 
316 LIBEFX_INTERNAL
317 extern	__checkReturn		efx_rc_t
318 siena_vpd_get(
319 	__in			efx_nic_t *enp,
320 	__in_bcount(size)	caddr_t data,
321 	__in			size_t size,
322 	__inout			efx_vpd_value_t *evvp);
323 
324 LIBEFX_INTERNAL
325 extern	__checkReturn		efx_rc_t
326 siena_vpd_set(
327 	__in			efx_nic_t *enp,
328 	__in_bcount(size)	caddr_t data,
329 	__in			size_t size,
330 	__in			efx_vpd_value_t *evvp);
331 
332 LIBEFX_INTERNAL
333 extern	__checkReturn		efx_rc_t
334 siena_vpd_next(
335 	__in			efx_nic_t *enp,
336 	__in_bcount(size)	caddr_t data,
337 	__in			size_t size,
338 	__out			efx_vpd_value_t *evvp,
339 	__inout			unsigned int *contp);
340 
341 LIBEFX_INTERNAL
342 extern __checkReturn		efx_rc_t
343 siena_vpd_write(
344 	__in			efx_nic_t *enp,
345 	__in_bcount(size)	caddr_t data,
346 	__in			size_t size);
347 
348 LIBEFX_INTERNAL
349 extern				void
350 siena_vpd_fini(
351 	__in			efx_nic_t *enp);
352 
353 #endif	/* EFSYS_OPT_VPD */
354 
355 typedef struct siena_link_state_s {
356 	uint32_t		sls_adv_cap_mask;
357 	uint32_t		sls_lp_cap_mask;
358 	unsigned int		sls_fcntl;
359 	efx_link_mode_t		sls_link_mode;
360 #if EFSYS_OPT_LOOPBACK
361 	efx_loopback_type_t	sls_loopback;
362 #endif
363 	boolean_t		sls_mac_up;
364 } siena_link_state_t;
365 
366 LIBEFX_INTERNAL
367 extern			void
368 siena_phy_link_ev(
369 	__in		efx_nic_t *enp,
370 	__in		efx_qword_t *eqp,
371 	__out		efx_link_mode_t *link_modep);
372 
373 LIBEFX_INTERNAL
374 extern	__checkReturn	efx_rc_t
375 siena_phy_get_link(
376 	__in		efx_nic_t *enp,
377 	__out		siena_link_state_t *slsp);
378 
379 LIBEFX_INTERNAL
380 extern	__checkReturn	efx_rc_t
381 siena_phy_power(
382 	__in		efx_nic_t *enp,
383 	__in		boolean_t on);
384 
385 LIBEFX_INTERNAL
386 extern	__checkReturn	efx_rc_t
387 siena_phy_reconfigure(
388 	__in		efx_nic_t *enp);
389 
390 LIBEFX_INTERNAL
391 extern	__checkReturn	efx_rc_t
392 siena_phy_verify(
393 	__in		efx_nic_t *enp);
394 
395 LIBEFX_INTERNAL
396 extern	__checkReturn	efx_rc_t
397 siena_phy_oui_get(
398 	__in		efx_nic_t *enp,
399 	__out		uint32_t *ouip);
400 
401 #if EFSYS_OPT_PHY_STATS
402 
403 LIBEFX_INTERNAL
404 extern						void
405 siena_phy_decode_stats(
406 	__in					efx_nic_t *enp,
407 	__in					uint32_t vmask,
408 	__in_opt				efsys_mem_t *esmp,
409 	__out_opt				uint64_t *smaskp,
410 	__inout_ecount_opt(EFX_PHY_NSTATS)	uint32_t *stat);
411 
412 LIBEFX_INTERNAL
413 extern	__checkReturn			efx_rc_t
414 siena_phy_stats_update(
415 	__in				efx_nic_t *enp,
416 	__in				efsys_mem_t *esmp,
417 	__inout_ecount(EFX_PHY_NSTATS)	uint32_t *stat);
418 
419 #endif	/* EFSYS_OPT_PHY_STATS */
420 
421 #if EFSYS_OPT_BIST
422 
423 LIBEFX_INTERNAL
424 extern	__checkReturn		efx_rc_t
425 siena_phy_bist_start(
426 	__in			efx_nic_t *enp,
427 	__in			efx_bist_type_t type);
428 
429 LIBEFX_INTERNAL
430 extern	__checkReturn		efx_rc_t
431 siena_phy_bist_poll(
432 	__in			efx_nic_t *enp,
433 	__in			efx_bist_type_t type,
434 	__out			efx_bist_result_t *resultp,
435 	__out_opt __drv_when(count > 0, __notnull)
436 	uint32_t	*value_maskp,
437 	__out_ecount_opt(count)	__drv_when(count > 0, __notnull)
438 	unsigned long	*valuesp,
439 	__in			size_t count);
440 
441 LIBEFX_INTERNAL
442 extern				void
443 siena_phy_bist_stop(
444 	__in			efx_nic_t *enp,
445 	__in			efx_bist_type_t type);
446 
447 #endif	/* EFSYS_OPT_BIST */
448 
449 LIBEFX_INTERNAL
450 extern	__checkReturn	efx_rc_t
451 siena_mac_poll(
452 	__in		efx_nic_t *enp,
453 	__out		efx_link_mode_t *link_modep);
454 
455 LIBEFX_INTERNAL
456 extern	__checkReturn	efx_rc_t
457 siena_mac_up(
458 	__in		efx_nic_t *enp,
459 	__out		boolean_t *mac_upp);
460 
461 LIBEFX_INTERNAL
462 extern	__checkReturn	efx_rc_t
463 siena_mac_reconfigure(
464 	__in	efx_nic_t *enp);
465 
466 LIBEFX_INTERNAL
467 extern	__checkReturn	efx_rc_t
468 siena_mac_pdu_get(
469 	__in	efx_nic_t *enp,
470 	__out	size_t *pdu);
471 
472 #if EFSYS_OPT_LOOPBACK
473 
474 LIBEFX_INTERNAL
475 extern	__checkReturn	efx_rc_t
476 siena_mac_loopback_set(
477 	__in		efx_nic_t *enp,
478 	__in		efx_link_mode_t link_mode,
479 	__in		efx_loopback_type_t loopback_type);
480 
481 #endif	/* EFSYS_OPT_LOOPBACK */
482 
483 #if EFSYS_OPT_MAC_STATS
484 
485 LIBEFX_INTERNAL
486 extern	__checkReturn			efx_rc_t
487 siena_mac_stats_get_mask(
488 	__in				efx_nic_t *enp,
489 	__inout_bcount(mask_size)	uint32_t *maskp,
490 	__in				size_t mask_size);
491 
492 LIBEFX_INTERNAL
493 extern	__checkReturn			efx_rc_t
494 siena_mac_stats_update(
495 	__in				efx_nic_t *enp,
496 	__in				efsys_mem_t *esmp,
497 	__inout_ecount(EFX_MAC_NSTATS)	efsys_stat_t *stat,
498 	__inout_opt			uint32_t *generationp);
499 
500 #endif	/* EFSYS_OPT_MAC_STATS */
501 
502 #ifdef	__cplusplus
503 }
504 #endif
505 
506 #endif	/* _SYS_SIENA_IMPL_H */
507