xref: /dpdk/drivers/common/sfc_efx/base/ef10_impl.h (revision 35876819bd716ee9b94d2660f12aa847f2594a83)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  *
3  * Copyright(c) 2019-2021 Xilinx, Inc.
4  * Copyright(c) 2015-2019 Solarflare Communications Inc.
5  */
6 
7 #ifndef	_SYS_EF10_IMPL_H
8 #define	_SYS_EF10_IMPL_H
9 
10 #ifdef	__cplusplus
11 extern "C" {
12 #endif
13 
14 #define	EF10_EVQ_MAXNEVS	32768
15 #define	EF10_EVQ_MINNEVS	512
16 
17 #define	EF10_RXQ_MAXNDESCS	4096
18 #define	EF10_RXQ_MINNDESCS	512
19 
20 #define	EF10_TXQ_MINNDESCS	512
21 
22 #define	EF10_EVQ_DESC_SIZE	(sizeof (efx_qword_t))
23 #define	EF10_RXQ_DESC_SIZE	(sizeof (efx_qword_t))
24 #define	EF10_TXQ_DESC_SIZE	(sizeof (efx_qword_t))
25 
26 /* Number of hardware EVQ buffers (for compile-time resource dimensions) */
27 #define	EF10_EVQ_MAXNBUFS	(64)
28 
29 /* Maximum independent of EFX_BUG35388_WORKAROUND. */
30 #define	EF10_TXQ_MAXNBUFS	8
31 
32 #if EFSYS_OPT_HUNTINGTON
33 # if (EF10_EVQ_MAXNBUFS < HUNT_EVQ_MAXNBUFS)
34 #  error "EF10_EVQ_MAXNBUFS too small"
35 # endif
36 #endif /* EFSYS_OPT_HUNTINGTON */
37 #if EFSYS_OPT_MEDFORD
38 # if (EF10_EVQ_MAXNBUFS < MEDFORD_EVQ_MAXNBUFS)
39 #  error "EF10_EVQ_MAXNBUFS too small"
40 # endif
41 #endif /* EFSYS_OPT_MEDFORD */
42 #if EFSYS_OPT_MEDFORD2
43 # if (EF10_EVQ_MAXNBUFS < MEDFORD2_EVQ_MAXNBUFS)
44 #  error "EF10_EVQ_MAXNBUFS too small"
45 # endif
46 #endif /* EFSYS_OPT_MEDFORD2 */
47 
48 /* Number of hardware PIO buffers (for compile-time resource dimensions) */
49 #define	EF10_MAX_PIOBUF_NBUFS	(16)
50 
51 #if EFSYS_OPT_HUNTINGTON
52 # if (EF10_MAX_PIOBUF_NBUFS < HUNT_PIOBUF_NBUFS)
53 #  error "EF10_MAX_PIOBUF_NBUFS too small"
54 # endif
55 #endif /* EFSYS_OPT_HUNTINGTON */
56 #if EFSYS_OPT_MEDFORD
57 # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD_PIOBUF_NBUFS)
58 #  error "EF10_MAX_PIOBUF_NBUFS too small"
59 # endif
60 #endif /* EFSYS_OPT_MEDFORD */
61 #if EFSYS_OPT_MEDFORD2
62 # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD2_PIOBUF_NBUFS)
63 #  error "EF10_MAX_PIOBUF_NBUFS too small"
64 # endif
65 #endif /* EFSYS_OPT_MEDFORD2 */
66 
67 
68 
69 /*
70  * FIXME: This is just a power of 2 which fits in an MCDI v1 message, and could
71  * possibly be increased, or the write size reported by newer firmware used
72  * instead.
73  */
74 #define	EF10_NVRAM_CHUNK 0x80
75 
76 /*
77  * Alignment requirement for value written to RX WPTR: the WPTR must be aligned
78  * to an 8 descriptor boundary.
79  */
80 #define	EF10_RX_WPTR_ALIGN 8
81 
82 /*
83  * Max byte offset into the packet the TCP header must start for the hardware
84  * to be able to parse the packet correctly.
85  */
86 #define	EF10_TCP_HEADER_OFFSET_LIMIT	208
87 
88 /* Invalid RSS context handle */
89 #define	EF10_RSS_CONTEXT_INVALID	(0xffffffff)
90 
91 
92 /* EV */
93 
94 LIBEFX_INTERNAL
95 extern	__checkReturn	efx_rc_t
96 ef10_ev_init(
97 	__in		efx_nic_t *enp);
98 
99 LIBEFX_INTERNAL
100 extern			void
101 ef10_ev_fini(
102 	__in		efx_nic_t *enp);
103 
104 LIBEFX_INTERNAL
105 extern	__checkReturn	efx_rc_t
106 ef10_ev_qcreate(
107 	__in		efx_nic_t *enp,
108 	__in		unsigned int index,
109 	__in		efsys_mem_t *esmp,
110 	__in		size_t ndescs,
111 	__in		uint32_t id,
112 	__in		uint32_t us,
113 	__in		uint32_t flags,
114 	__in		uint32_t irq,
115 	__in		efx_evq_t *eep);
116 
117 LIBEFX_INTERNAL
118 extern			void
119 ef10_ev_qdestroy(
120 	__in		efx_evq_t *eep);
121 
122 LIBEFX_INTERNAL
123 extern	__checkReturn	efx_rc_t
124 ef10_ev_qprime(
125 	__in		efx_evq_t *eep,
126 	__in		unsigned int count);
127 
128 LIBEFX_INTERNAL
129 extern			void
130 ef10_ev_qpost(
131 	__in	efx_evq_t *eep,
132 	__in	uint16_t data);
133 
134 LIBEFX_INTERNAL
135 extern	__checkReturn	efx_rc_t
136 ef10_ev_qmoderate(
137 	__in		efx_evq_t *eep,
138 	__in		unsigned int us);
139 
140 #if EFSYS_OPT_QSTATS
141 LIBEFX_INTERNAL
142 extern			void
143 ef10_ev_qstats_update(
144 	__in				efx_evq_t *eep,
145 	__inout_ecount(EV_NQSTATS)	efsys_stat_t *stat);
146 #endif /* EFSYS_OPT_QSTATS */
147 
148 LIBEFX_INTERNAL
149 extern			void
150 ef10_ev_rxlabel_init(
151 	__in		efx_evq_t *eep,
152 	__in		efx_rxq_t *erp,
153 	__in		unsigned int label,
154 	__in		efx_rxq_type_t type);
155 
156 LIBEFX_INTERNAL
157 extern			void
158 ef10_ev_rxlabel_fini(
159 	__in		efx_evq_t *eep,
160 	__in		unsigned int label);
161 
162 LIBEFX_INTERNAL
163 extern	__checkReturn	boolean_t
164 ef10_ev_mcdi(
165 	__in		efx_evq_t *eep,
166 	__in		efx_qword_t *eqp,
167 	__in		const efx_ev_callbacks_t *eecp,
168 	__in_opt	void *arg);
169 
170 /* INTR */
171 
172 LIBEFX_INTERNAL
173 extern	__checkReturn	efx_rc_t
174 ef10_intr_init(
175 	__in		efx_nic_t *enp,
176 	__in		efx_intr_type_t type,
177 	__in		efsys_mem_t *esmp);
178 
179 LIBEFX_INTERNAL
180 extern			void
181 ef10_intr_enable(
182 	__in		efx_nic_t *enp);
183 
184 LIBEFX_INTERNAL
185 extern			void
186 ef10_intr_disable(
187 	__in		efx_nic_t *enp);
188 
189 LIBEFX_INTERNAL
190 extern			void
191 ef10_intr_disable_unlocked(
192 	__in		efx_nic_t *enp);
193 
194 LIBEFX_INTERNAL
195 extern	__checkReturn	efx_rc_t
196 ef10_intr_trigger(
197 	__in		efx_nic_t *enp,
198 	__in		unsigned int level);
199 
200 LIBEFX_INTERNAL
201 extern			void
202 ef10_intr_status_line(
203 	__in		efx_nic_t *enp,
204 	__out		boolean_t *fatalp,
205 	__out		uint32_t *qmaskp);
206 
207 LIBEFX_INTERNAL
208 extern			void
209 ef10_intr_status_message(
210 	__in		efx_nic_t *enp,
211 	__in		unsigned int message,
212 	__out		boolean_t *fatalp);
213 
214 LIBEFX_INTERNAL
215 extern			void
216 ef10_intr_fatal(
217 	__in		efx_nic_t *enp);
218 
219 LIBEFX_INTERNAL
220 extern			void
221 ef10_intr_fini(
222 	__in		efx_nic_t *enp);
223 
224 /* NIC */
225 
226 LIBEFX_INTERNAL
227 extern	__checkReturn	efx_rc_t
228 efx_mcdi_vadaptor_alloc(
229 	__in		efx_nic_t *enp,
230 	__in		uint32_t port_id);
231 
232 LIBEFX_INTERNAL
233 extern	__checkReturn	efx_rc_t
234 efx_mcdi_vadaptor_free(
235 	__in		efx_nic_t *enp,
236 	__in		uint32_t port_id);
237 
238 LIBEFX_INTERNAL
239 extern	__checkReturn	efx_rc_t
240 ef10_upstream_port_vadaptor_alloc(
241 	__in		efx_nic_t *enp);
242 
243 LIBEFX_INTERNAL
244 extern	__checkReturn	efx_rc_t
245 ef10_nic_probe(
246 	__in		efx_nic_t *enp);
247 
248 LIBEFX_INTERNAL
249 extern	__checkReturn	efx_rc_t
250 ef10_nic_set_drv_limits(
251 	__inout		efx_nic_t *enp,
252 	__in		efx_drv_limits_t *edlp);
253 
254 LIBEFX_INTERNAL
255 extern	__checkReturn	efx_rc_t
256 ef10_nic_get_vi_pool(
257 	__in		efx_nic_t *enp,
258 	__out		uint32_t *vi_countp);
259 
260 LIBEFX_INTERNAL
261 extern	__checkReturn	efx_rc_t
262 ef10_nic_get_bar_region(
263 	__in		efx_nic_t *enp,
264 	__in		efx_nic_region_t region,
265 	__out		uint32_t *offsetp,
266 	__out		size_t *sizep);
267 
268 LIBEFX_INTERNAL
269 extern	__checkReturn	efx_rc_t
270 ef10_nic_reset(
271 	__in		efx_nic_t *enp);
272 
273 LIBEFX_INTERNAL
274 extern	__checkReturn	efx_rc_t
275 ef10_nic_init(
276 	__in		efx_nic_t *enp);
277 
278 LIBEFX_INTERNAL
279 extern	__checkReturn	boolean_t
280 ef10_nic_hw_unavailable(
281 	__in		efx_nic_t *enp);
282 
283 LIBEFX_INTERNAL
284 extern			void
285 ef10_nic_set_hw_unavailable(
286 	__in		efx_nic_t *enp);
287 
288 #if EFSYS_OPT_DIAG
289 
290 LIBEFX_INTERNAL
291 extern	__checkReturn	efx_rc_t
292 ef10_nic_register_test(
293 	__in		efx_nic_t *enp);
294 
295 #endif	/* EFSYS_OPT_DIAG */
296 
297 LIBEFX_INTERNAL
298 extern			void
299 ef10_nic_fini(
300 	__in		efx_nic_t *enp);
301 
302 LIBEFX_INTERNAL
303 extern			void
304 ef10_nic_unprobe(
305 	__in		efx_nic_t *enp);
306 
307 
308 /* MAC */
309 
310 LIBEFX_INTERNAL
311 extern	__checkReturn	efx_rc_t
312 ef10_mac_poll(
313 	__in		efx_nic_t *enp,
314 	__out		efx_link_mode_t *link_modep);
315 
316 LIBEFX_INTERNAL
317 extern	__checkReturn	efx_rc_t
318 ef10_mac_up(
319 	__in		efx_nic_t *enp,
320 	__out		boolean_t *mac_upp);
321 
322 LIBEFX_INTERNAL
323 extern	__checkReturn	efx_rc_t
324 ef10_mac_addr_set(
325 	__in	efx_nic_t *enp);
326 
327 LIBEFX_INTERNAL
328 extern	__checkReturn	efx_rc_t
329 ef10_mac_pdu_set(
330 	__in	efx_nic_t *enp);
331 
332 LIBEFX_INTERNAL
333 extern	__checkReturn	efx_rc_t
334 ef10_mac_pdu_get(
335 	__in	efx_nic_t *enp,
336 	__out	size_t *pdu);
337 
338 LIBEFX_INTERNAL
339 extern	__checkReturn	efx_rc_t
340 ef10_mac_reconfigure(
341 	__in	efx_nic_t *enp);
342 
343 LIBEFX_INTERNAL
344 extern	__checkReturn	efx_rc_t
345 ef10_mac_multicast_list_set(
346 	__in				efx_nic_t *enp);
347 
348 LIBEFX_INTERNAL
349 extern	__checkReturn	efx_rc_t
350 ef10_mac_filter_default_rxq_set(
351 	__in		efx_nic_t *enp,
352 	__in		efx_rxq_t *erp,
353 	__in		boolean_t using_rss);
354 
355 LIBEFX_INTERNAL
356 extern			void
357 ef10_mac_filter_default_rxq_clear(
358 	__in		efx_nic_t *enp);
359 
360 #if EFSYS_OPT_LOOPBACK
361 
362 LIBEFX_INTERNAL
363 extern	__checkReturn	efx_rc_t
364 ef10_mac_loopback_set(
365 	__in		efx_nic_t *enp,
366 	__in		efx_link_mode_t link_mode,
367 	__in		efx_loopback_type_t loopback_type);
368 
369 #endif	/* EFSYS_OPT_LOOPBACK */
370 
371 #if EFSYS_OPT_MAC_STATS
372 
373 LIBEFX_INTERNAL
374 extern	__checkReturn			efx_rc_t
375 ef10_mac_stats_get_mask(
376 	__in				efx_nic_t *enp,
377 	__inout_bcount(mask_size)	uint32_t *maskp,
378 	__in				size_t mask_size);
379 
380 LIBEFX_INTERNAL
381 extern	__checkReturn			efx_rc_t
382 ef10_mac_stats_update(
383 	__in				efx_nic_t *enp,
384 	__in				efsys_mem_t *esmp,
385 	__inout_ecount(EFX_MAC_NSTATS)	efsys_stat_t *stat,
386 	__inout_opt			uint32_t *generationp);
387 
388 #endif	/* EFSYS_OPT_MAC_STATS */
389 
390 
391 /* MCDI */
392 
393 #if EFSYS_OPT_MCDI
394 
395 LIBEFX_INTERNAL
396 extern	__checkReturn	efx_rc_t
397 ef10_mcdi_init(
398 	__in		efx_nic_t *enp,
399 	__in		const efx_mcdi_transport_t *mtp);
400 
401 LIBEFX_INTERNAL
402 extern			void
403 ef10_mcdi_fini(
404 	__in		efx_nic_t *enp);
405 
406 LIBEFX_INTERNAL
407 extern			void
408 ef10_mcdi_send_request(
409 	__in			efx_nic_t *enp,
410 	__in_bcount(hdr_len)	void *hdrp,
411 	__in			size_t hdr_len,
412 	__in_bcount(sdu_len)	void *sdup,
413 	__in			size_t sdu_len);
414 
415 LIBEFX_INTERNAL
416 extern	__checkReturn	boolean_t
417 ef10_mcdi_poll_response(
418 	__in		efx_nic_t *enp);
419 
420 LIBEFX_INTERNAL
421 extern			void
422 ef10_mcdi_read_response(
423 	__in			efx_nic_t *enp,
424 	__out_bcount(length)	void *bufferp,
425 	__in			size_t offset,
426 	__in			size_t length);
427 
428 LIBEFX_INTERNAL
429 extern			efx_rc_t
430 ef10_mcdi_poll_reboot(
431 	__in		efx_nic_t *enp);
432 
433 LIBEFX_INTERNAL
434 extern	__checkReturn	efx_rc_t
435 ef10_mcdi_feature_supported(
436 	__in		efx_nic_t *enp,
437 	__in		efx_mcdi_feature_id_t id,
438 	__out		boolean_t *supportedp);
439 
440 LIBEFX_INTERNAL
441 extern			void
442 ef10_mcdi_get_timeout(
443 	__in		efx_nic_t *enp,
444 	__in		efx_mcdi_req_t *emrp,
445 	__out		uint32_t *timeoutp);
446 
447 #endif /* EFSYS_OPT_MCDI */
448 
449 /* NVRAM */
450 
451 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
452 
453 LIBEFX_INTERNAL
454 extern	__checkReturn		efx_rc_t
455 ef10_nvram_buf_read_tlv(
456 	__in				efx_nic_t *enp,
457 	__in_bcount(max_seg_size)	caddr_t seg_data,
458 	__in				size_t max_seg_size,
459 	__in				uint32_t tag,
460 	__deref_out_bcount_opt(*sizep)	caddr_t *datap,
461 	__out				size_t *sizep);
462 
463 LIBEFX_INTERNAL
464 extern	__checkReturn		efx_rc_t
465 ef10_nvram_buf_write_tlv(
466 	__inout_bcount(partn_size)	caddr_t partn_data,
467 	__in				size_t partn_size,
468 	__in				uint32_t tag,
469 	__in_bcount(tag_size)		caddr_t tag_data,
470 	__in				size_t tag_size,
471 	__out				size_t *total_lengthp);
472 
473 LIBEFX_INTERNAL
474 extern	__checkReturn		efx_rc_t
475 ef10_nvram_partn_read_tlv(
476 	__in				efx_nic_t *enp,
477 	__in				uint32_t partn,
478 	__in				uint32_t tag,
479 	__deref_out_bcount_opt(*sizep)	caddr_t *datap,
480 	__out				size_t *sizep);
481 
482 LIBEFX_INTERNAL
483 extern	__checkReturn		efx_rc_t
484 ef10_nvram_partn_write_tlv(
485 	__in			efx_nic_t *enp,
486 	__in			uint32_t partn,
487 	__in			uint32_t tag,
488 	__in_bcount(size)	caddr_t data,
489 	__in			size_t size);
490 
491 LIBEFX_INTERNAL
492 extern	__checkReturn		efx_rc_t
493 ef10_nvram_partn_write_segment_tlv(
494 	__in			efx_nic_t *enp,
495 	__in			uint32_t partn,
496 	__in			uint32_t tag,
497 	__in_bcount(size)	caddr_t data,
498 	__in			size_t size,
499 	__in			boolean_t all_segments);
500 
501 LIBEFX_INTERNAL
502 extern	__checkReturn		efx_rc_t
503 ef10_nvram_partn_lock(
504 	__in			efx_nic_t *enp,
505 	__in			uint32_t partn);
506 
507 LIBEFX_INTERNAL
508 extern	__checkReturn		efx_rc_t
509 ef10_nvram_partn_unlock(
510 	__in			efx_nic_t *enp,
511 	__in			uint32_t partn,
512 	__out_opt		uint32_t *resultp);
513 
514 #endif /* EFSYS_OPT_NVRAM || EFSYS_OPT_VPD */
515 
516 #if EFSYS_OPT_NVRAM
517 
518 #if EFSYS_OPT_DIAG
519 
520 LIBEFX_INTERNAL
521 extern	__checkReturn		efx_rc_t
522 ef10_nvram_test(
523 	__in			efx_nic_t *enp);
524 
525 #endif	/* EFSYS_OPT_DIAG */
526 
527 LIBEFX_INTERNAL
528 extern	__checkReturn		efx_rc_t
529 ef10_nvram_type_to_partn(
530 	__in			efx_nic_t *enp,
531 	__in			efx_nvram_type_t type,
532 	__out			uint32_t *partnp);
533 
534 LIBEFX_INTERNAL
535 extern	__checkReturn		efx_rc_t
536 ef10_nvram_partn_size(
537 	__in			efx_nic_t *enp,
538 	__in			uint32_t partn,
539 	__out			size_t *sizep);
540 
541 LIBEFX_INTERNAL
542 extern	__checkReturn		efx_rc_t
543 ef10_nvram_partn_info(
544 	__in			efx_nic_t *enp,
545 	__in			uint32_t partn,
546 	__out			efx_nvram_info_t * enip);
547 
548 LIBEFX_INTERNAL
549 extern	__checkReturn		efx_rc_t
550 ef10_nvram_partn_rw_start(
551 	__in			efx_nic_t *enp,
552 	__in			uint32_t partn,
553 	__out			size_t *chunk_sizep);
554 
555 LIBEFX_INTERNAL
556 extern	__checkReturn		efx_rc_t
557 ef10_nvram_partn_read_mode(
558 	__in			efx_nic_t *enp,
559 	__in			uint32_t partn,
560 	__in			unsigned int offset,
561 	__out_bcount(size)	caddr_t data,
562 	__in			size_t size,
563 	__in			uint32_t mode);
564 
565 LIBEFX_INTERNAL
566 extern	__checkReturn		efx_rc_t
567 ef10_nvram_partn_read(
568 	__in			efx_nic_t *enp,
569 	__in			uint32_t partn,
570 	__in			unsigned int offset,
571 	__out_bcount(size)	caddr_t data,
572 	__in			size_t size);
573 
574 LIBEFX_INTERNAL
575 extern	__checkReturn		efx_rc_t
576 ef10_nvram_partn_read_backup(
577 	__in			efx_nic_t *enp,
578 	__in			uint32_t partn,
579 	__in			unsigned int offset,
580 	__out_bcount(size)	caddr_t data,
581 	__in			size_t size);
582 
583 LIBEFX_INTERNAL
584 extern	__checkReturn		efx_rc_t
585 ef10_nvram_partn_erase(
586 	__in			efx_nic_t *enp,
587 	__in			uint32_t partn,
588 	__in			unsigned int offset,
589 	__in			size_t size);
590 
591 LIBEFX_INTERNAL
592 extern	__checkReturn		efx_rc_t
593 ef10_nvram_partn_write(
594 	__in			efx_nic_t *enp,
595 	__in			uint32_t partn,
596 	__in			unsigned int offset,
597 	__in_bcount(size)	caddr_t data,
598 	__in			size_t size);
599 
600 LIBEFX_INTERNAL
601 extern	__checkReturn		efx_rc_t
602 ef10_nvram_partn_rw_finish(
603 	__in			efx_nic_t *enp,
604 	__in			uint32_t partn,
605 	__out_opt		uint32_t *verify_resultp);
606 
607 LIBEFX_INTERNAL
608 extern	__checkReturn		efx_rc_t
609 ef10_nvram_partn_get_version(
610 	__in			efx_nic_t *enp,
611 	__in			uint32_t partn,
612 	__out			uint32_t *subtypep,
613 	__out_ecount(4)		uint16_t version[4]);
614 
615 LIBEFX_INTERNAL
616 extern	__checkReturn		efx_rc_t
617 ef10_nvram_partn_set_version(
618 	__in			efx_nic_t *enp,
619 	__in			uint32_t partn,
620 	__in_ecount(4)		uint16_t version[4]);
621 
622 LIBEFX_INTERNAL
623 extern	__checkReturn		efx_rc_t
624 ef10_nvram_buffer_validate(
625 	__in			uint32_t partn,
626 	__in_bcount(buffer_size)
627 				caddr_t bufferp,
628 	__in			size_t buffer_size);
629 
630 LIBEFX_INTERNAL
631 extern			void
632 ef10_nvram_buffer_init(
633 	__out_bcount(buffer_size)
634 				caddr_t bufferp,
635 	__in			size_t buffer_size);
636 
637 LIBEFX_INTERNAL
638 extern	__checkReturn		efx_rc_t
639 ef10_nvram_buffer_create(
640 	__in			uint32_t partn_type,
641 	__out_bcount(buffer_size)
642 				caddr_t bufferp,
643 	__in			size_t buffer_size);
644 
645 LIBEFX_INTERNAL
646 extern	__checkReturn		efx_rc_t
647 ef10_nvram_buffer_find_item_start(
648 	__in_bcount(buffer_size)
649 				caddr_t bufferp,
650 	__in			size_t buffer_size,
651 	__out			uint32_t *startp);
652 
653 LIBEFX_INTERNAL
654 extern	__checkReturn		efx_rc_t
655 ef10_nvram_buffer_find_end(
656 	__in_bcount(buffer_size)
657 				caddr_t bufferp,
658 	__in			size_t buffer_size,
659 	__in			uint32_t offset,
660 	__out			uint32_t *endp);
661 
662 LIBEFX_INTERNAL
663 extern	__checkReturn	__success(return != B_FALSE)	boolean_t
664 ef10_nvram_buffer_find_item(
665 	__in_bcount(buffer_size)
666 				caddr_t bufferp,
667 	__in			size_t buffer_size,
668 	__in			uint32_t offset,
669 	__out			uint32_t *startp,
670 	__out			uint32_t *lengthp);
671 
672 LIBEFX_INTERNAL
673 extern	__checkReturn		efx_rc_t
674 ef10_nvram_buffer_peek_item(
675 	__in_bcount(buffer_size)
676 				caddr_t bufferp,
677 	__in			size_t buffer_size,
678 	__in			uint32_t offset,
679 	__out			uint32_t *tagp,
680 	__out			uint32_t *lengthp,
681 	__out			uint32_t *value_offsetp);
682 
683 LIBEFX_INTERNAL
684 extern	__checkReturn		efx_rc_t
685 ef10_nvram_buffer_get_item(
686 	__in_bcount(buffer_size)
687 				caddr_t bufferp,
688 	__in			size_t buffer_size,
689 	__in			uint32_t offset,
690 	__in			uint32_t length,
691 	__out			uint32_t *tagp,
692 	__out_bcount_part(value_max_size, *lengthp)
693 				caddr_t valuep,
694 	__in			size_t value_max_size,
695 	__out			uint32_t *lengthp);
696 
697 LIBEFX_INTERNAL
698 extern	__checkReturn		efx_rc_t
699 ef10_nvram_buffer_insert_item(
700 	__in_bcount(buffer_size)
701 				caddr_t bufferp,
702 	__in			size_t buffer_size,
703 	__in			uint32_t offset,
704 	__in			uint32_t tag,
705 	__in_bcount(length)	caddr_t valuep,
706 	__in			uint32_t length,
707 	__out			uint32_t *lengthp);
708 
709 LIBEFX_INTERNAL
710 extern	__checkReturn		efx_rc_t
711 ef10_nvram_buffer_modify_item(
712 	__in_bcount(buffer_size)
713 				caddr_t bufferp,
714 	__in			size_t buffer_size,
715 	__in			uint32_t offset,
716 	__in			uint32_t tag,
717 	__in_bcount(length)	caddr_t valuep,
718 	__in			uint32_t length,
719 	__out			uint32_t *lengthp);
720 
721 LIBEFX_INTERNAL
722 extern	__checkReturn		efx_rc_t
723 ef10_nvram_buffer_delete_item(
724 	__in_bcount(buffer_size)
725 				caddr_t bufferp,
726 	__in			size_t buffer_size,
727 	__in			uint32_t offset,
728 	__in			uint32_t length,
729 	__in			uint32_t end);
730 
731 LIBEFX_INTERNAL
732 extern	__checkReturn		efx_rc_t
733 ef10_nvram_buffer_finish(
734 	__in_bcount(buffer_size)
735 				caddr_t bufferp,
736 	__in			size_t buffer_size);
737 
738 #endif	/* EFSYS_OPT_NVRAM */
739 
740 
741 /* PHY */
742 
743 typedef struct ef10_link_state_s {
744 	efx_phy_link_state_t	epls;
745 #if EFSYS_OPT_LOOPBACK
746 	efx_loopback_type_t	els_loopback;
747 #endif
748 	boolean_t		els_mac_up;
749 } ef10_link_state_t;
750 
751 LIBEFX_INTERNAL
752 extern			void
753 ef10_phy_link_ev(
754 	__in		efx_nic_t *enp,
755 	__in		efx_qword_t *eqp,
756 	__in		boolean_t ev_is_v2,
757 	__out		efx_link_mode_t *link_modep);
758 
759 LIBEFX_INTERNAL
760 extern	__checkReturn	efx_rc_t
761 ef10_phy_get_link(
762 	__in		efx_nic_t *enp,
763 	__out		ef10_link_state_t *elsp);
764 
765 LIBEFX_INTERNAL
766 extern	__checkReturn	efx_rc_t
767 ef10_phy_power(
768 	__in		efx_nic_t *enp,
769 	__in		boolean_t on);
770 
771 LIBEFX_INTERNAL
772 extern	__checkReturn	efx_rc_t
773 ef10_phy_reconfigure(
774 	__in		efx_nic_t *enp);
775 
776 LIBEFX_INTERNAL
777 extern	__checkReturn	efx_rc_t
778 ef10_phy_verify(
779 	__in		efx_nic_t *enp);
780 
781 LIBEFX_INTERNAL
782 extern	__checkReturn	efx_rc_t
783 ef10_phy_oui_get(
784 	__in		efx_nic_t *enp,
785 	__out		uint32_t *ouip);
786 
787 LIBEFX_INTERNAL
788 extern	__checkReturn	efx_rc_t
789 ef10_phy_link_state_get(
790 	__in		efx_nic_t *enp,
791 	__out		efx_phy_link_state_t *eplsp);
792 
793 #if EFSYS_OPT_PHY_STATS
794 
795 LIBEFX_INTERNAL
796 extern	__checkReturn			efx_rc_t
797 ef10_phy_stats_update(
798 	__in				efx_nic_t *enp,
799 	__in				efsys_mem_t *esmp,
800 	__inout_ecount(EFX_PHY_NSTATS)	uint32_t *stat);
801 
802 #endif	/* EFSYS_OPT_PHY_STATS */
803 
804 #if EFSYS_OPT_BIST
805 
806 LIBEFX_INTERNAL
807 extern	__checkReturn		efx_rc_t
808 ef10_bist_enable_offline(
809 	__in			efx_nic_t *enp);
810 
811 LIBEFX_INTERNAL
812 extern	__checkReturn		efx_rc_t
813 ef10_bist_start(
814 	__in			efx_nic_t *enp,
815 	__in			efx_bist_type_t type);
816 
817 LIBEFX_INTERNAL
818 extern	__checkReturn		efx_rc_t
819 ef10_bist_poll(
820 	__in			efx_nic_t *enp,
821 	__in			efx_bist_type_t type,
822 	__out			efx_bist_result_t *resultp,
823 	__out_opt __drv_when(count > 0, __notnull)
824 	uint32_t	*value_maskp,
825 	__out_ecount_opt(count)	__drv_when(count > 0, __notnull)
826 	unsigned long	*valuesp,
827 	__in			size_t count);
828 
829 LIBEFX_INTERNAL
830 extern				void
831 ef10_bist_stop(
832 	__in			efx_nic_t *enp,
833 	__in			efx_bist_type_t type);
834 
835 #endif	/* EFSYS_OPT_BIST */
836 
837 /* TX */
838 
839 LIBEFX_INTERNAL
840 extern	__checkReturn	efx_rc_t
841 ef10_tx_init(
842 	__in		efx_nic_t *enp);
843 
844 LIBEFX_INTERNAL
845 extern			void
846 ef10_tx_fini(
847 	__in		efx_nic_t *enp);
848 
849 LIBEFX_INTERNAL
850 extern	__checkReturn	efx_rc_t
851 ef10_tx_qcreate(
852 	__in		efx_nic_t *enp,
853 	__in		unsigned int index,
854 	__in		unsigned int label,
855 	__in		efsys_mem_t *esmp,
856 	__in		size_t ndescs,
857 	__in		uint32_t id,
858 	__in		uint16_t flags,
859 	__in		efx_evq_t *eep,
860 	__in		efx_txq_t *etp,
861 	__out		unsigned int *addedp);
862 
863 LIBEFX_INTERNAL
864 extern		void
865 ef10_tx_qdestroy(
866 	__in		efx_txq_t *etp);
867 
868 LIBEFX_INTERNAL
869 extern	__checkReturn		efx_rc_t
870 ef10_tx_qpost(
871 	__in			efx_txq_t *etp,
872 	__in_ecount(ndescs)	efx_buffer_t *ebp,
873 	__in			unsigned int ndescs,
874 	__in			unsigned int completed,
875 	__inout			unsigned int *addedp);
876 
877 LIBEFX_INTERNAL
878 extern			void
879 ef10_tx_qpush(
880 	__in		efx_txq_t *etp,
881 	__in		unsigned int added,
882 	__in		unsigned int pushed);
883 
884 #if EFSYS_OPT_RX_PACKED_STREAM
885 LIBEFX_INTERNAL
886 extern			void
887 ef10_rx_qpush_ps_credits(
888 	__in		efx_rxq_t *erp);
889 
890 LIBEFX_INTERNAL
891 extern	__checkReturn	uint8_t *
892 ef10_rx_qps_packet_info(
893 	__in		efx_rxq_t *erp,
894 	__in		uint8_t *buffer,
895 	__in		uint32_t buffer_length,
896 	__in		uint32_t current_offset,
897 	__out		uint16_t *lengthp,
898 	__out		uint32_t *next_offsetp,
899 	__out		uint32_t *timestamp);
900 #endif
901 
902 LIBEFX_INTERNAL
903 extern	__checkReturn	efx_rc_t
904 ef10_tx_qpace(
905 	__in		efx_txq_t *etp,
906 	__in		unsigned int ns);
907 
908 LIBEFX_INTERNAL
909 extern	__checkReturn	efx_rc_t
910 ef10_tx_qflush(
911 	__in		efx_txq_t *etp);
912 
913 LIBEFX_INTERNAL
914 extern			void
915 ef10_tx_qenable(
916 	__in		efx_txq_t *etp);
917 
918 LIBEFX_INTERNAL
919 extern	__checkReturn	efx_rc_t
920 ef10_tx_qpio_enable(
921 	__in		efx_txq_t *etp);
922 
923 LIBEFX_INTERNAL
924 extern			void
925 ef10_tx_qpio_disable(
926 	__in		efx_txq_t *etp);
927 
928 LIBEFX_INTERNAL
929 extern	__checkReturn	efx_rc_t
930 ef10_tx_qpio_write(
931 	__in			efx_txq_t *etp,
932 	__in_ecount(buf_length)	uint8_t *buffer,
933 	__in			size_t buf_length,
934 	__in			size_t pio_buf_offset);
935 
936 LIBEFX_INTERNAL
937 extern	__checkReturn	efx_rc_t
938 ef10_tx_qpio_post(
939 	__in			efx_txq_t *etp,
940 	__in			size_t pkt_length,
941 	__in			unsigned int completed,
942 	__inout			unsigned int *addedp);
943 
944 LIBEFX_INTERNAL
945 extern	__checkReturn	efx_rc_t
946 ef10_tx_qdesc_post(
947 	__in		efx_txq_t *etp,
948 	__in_ecount(n)	efx_desc_t *ed,
949 	__in		unsigned int n,
950 	__in		unsigned int completed,
951 	__inout		unsigned int *addedp);
952 
953 LIBEFX_INTERNAL
954 extern	void
955 ef10_tx_qdesc_dma_create(
956 	__in	efx_txq_t *etp,
957 	__in	efsys_dma_addr_t addr,
958 	__in	size_t size,
959 	__in	boolean_t eop,
960 	__out	efx_desc_t *edp);
961 
962 LIBEFX_INTERNAL
963 extern	void
964 ef10_tx_qdesc_tso_create(
965 	__in	efx_txq_t *etp,
966 	__in	uint16_t ipv4_id,
967 	__in	uint32_t tcp_seq,
968 	__in	uint8_t	 tcp_flags,
969 	__out	efx_desc_t *edp);
970 
971 LIBEFX_INTERNAL
972 extern	void
973 ef10_tx_qdesc_tso2_create(
974 	__in			efx_txq_t *etp,
975 	__in			uint16_t ipv4_id,
976 	__in			uint16_t outer_ipv4_id,
977 	__in			uint32_t tcp_seq,
978 	__in			uint16_t tcp_mss,
979 	__out_ecount(count)	efx_desc_t *edp,
980 	__in			int count);
981 
982 LIBEFX_INTERNAL
983 extern	void
984 ef10_tx_qdesc_vlantci_create(
985 	__in	efx_txq_t *etp,
986 	__in	uint16_t vlan_tci,
987 	__out	efx_desc_t *edp);
988 
989 LIBEFX_INTERNAL
990 extern	void
991 ef10_tx_qdesc_checksum_create(
992 	__in	efx_txq_t *etp,
993 	__in	uint16_t flags,
994 	__out	efx_desc_t *edp);
995 
996 #if EFSYS_OPT_QSTATS
997 
998 LIBEFX_INTERNAL
999 extern			void
1000 ef10_tx_qstats_update(
1001 	__in				efx_txq_t *etp,
1002 	__inout_ecount(TX_NQSTATS)	efsys_stat_t *stat);
1003 
1004 #endif /* EFSYS_OPT_QSTATS */
1005 
1006 typedef uint32_t	efx_piobuf_handle_t;
1007 
1008 #define	EFX_PIOBUF_HANDLE_INVALID	((efx_piobuf_handle_t)-1)
1009 
1010 LIBEFX_INTERNAL
1011 extern	__checkReturn	efx_rc_t
1012 ef10_nic_pio_alloc(
1013 	__inout		efx_nic_t *enp,
1014 	__out		uint32_t *bufnump,
1015 	__out		efx_piobuf_handle_t *handlep,
1016 	__out		uint32_t *blknump,
1017 	__out		uint32_t *offsetp,
1018 	__out		size_t *sizep);
1019 
1020 LIBEFX_INTERNAL
1021 extern	__checkReturn	efx_rc_t
1022 ef10_nic_pio_free(
1023 	__inout		efx_nic_t *enp,
1024 	__in		uint32_t bufnum,
1025 	__in		uint32_t blknum);
1026 
1027 LIBEFX_INTERNAL
1028 extern	__checkReturn	efx_rc_t
1029 ef10_nic_pio_link(
1030 	__inout		efx_nic_t *enp,
1031 	__in		uint32_t vi_index,
1032 	__in		efx_piobuf_handle_t handle);
1033 
1034 LIBEFX_INTERNAL
1035 extern	__checkReturn	efx_rc_t
1036 ef10_nic_pio_unlink(
1037 	__inout		efx_nic_t *enp,
1038 	__in		uint32_t vi_index);
1039 
1040 
1041 /* VPD */
1042 
1043 #if EFSYS_OPT_VPD
1044 
1045 LIBEFX_INTERNAL
1046 extern	__checkReturn		efx_rc_t
1047 ef10_vpd_init(
1048 	__in			efx_nic_t *enp);
1049 
1050 LIBEFX_INTERNAL
1051 extern	__checkReturn		efx_rc_t
1052 ef10_vpd_size(
1053 	__in			efx_nic_t *enp,
1054 	__out			size_t *sizep);
1055 
1056 LIBEFX_INTERNAL
1057 extern	__checkReturn		efx_rc_t
1058 ef10_vpd_read(
1059 	__in			efx_nic_t *enp,
1060 	__out_bcount(size)	caddr_t data,
1061 	__in			size_t size);
1062 
1063 LIBEFX_INTERNAL
1064 extern	__checkReturn		efx_rc_t
1065 ef10_vpd_verify(
1066 	__in			efx_nic_t *enp,
1067 	__in_bcount(size)	caddr_t data,
1068 	__in			size_t size);
1069 
1070 LIBEFX_INTERNAL
1071 extern	__checkReturn		efx_rc_t
1072 ef10_vpd_reinit(
1073 	__in			efx_nic_t *enp,
1074 	__in_bcount(size)	caddr_t data,
1075 	__in			size_t size);
1076 
1077 LIBEFX_INTERNAL
1078 extern	__checkReturn		efx_rc_t
1079 ef10_vpd_get(
1080 	__in			efx_nic_t *enp,
1081 	__in_bcount(size)	caddr_t data,
1082 	__in			size_t size,
1083 	__inout			efx_vpd_value_t *evvp);
1084 
1085 LIBEFX_INTERNAL
1086 extern	__checkReturn		efx_rc_t
1087 ef10_vpd_set(
1088 	__in			efx_nic_t *enp,
1089 	__in_bcount(size)	caddr_t data,
1090 	__in			size_t size,
1091 	__in			efx_vpd_value_t *evvp);
1092 
1093 LIBEFX_INTERNAL
1094 extern	__checkReturn		efx_rc_t
1095 ef10_vpd_next(
1096 	__in			efx_nic_t *enp,
1097 	__in_bcount(size)	caddr_t data,
1098 	__in			size_t size,
1099 	__out			efx_vpd_value_t *evvp,
1100 	__inout			unsigned int *contp);
1101 
1102 LIBEFX_INTERNAL
1103 extern __checkReturn		efx_rc_t
1104 ef10_vpd_write(
1105 	__in			efx_nic_t *enp,
1106 	__in_bcount(size)	caddr_t data,
1107 	__in			size_t size);
1108 
1109 LIBEFX_INTERNAL
1110 extern				void
1111 ef10_vpd_fini(
1112 	__in			efx_nic_t *enp);
1113 
1114 #endif	/* EFSYS_OPT_VPD */
1115 
1116 
1117 /* RX */
1118 
1119 LIBEFX_INTERNAL
1120 extern	__checkReturn	efx_rc_t
1121 ef10_rx_init(
1122 	__in		efx_nic_t *enp);
1123 
1124 #if EFSYS_OPT_RX_SCATTER
1125 LIBEFX_INTERNAL
1126 extern	__checkReturn	efx_rc_t
1127 ef10_rx_scatter_enable(
1128 	__in		efx_nic_t *enp,
1129 	__in		unsigned int buf_size);
1130 #endif	/* EFSYS_OPT_RX_SCATTER */
1131 
1132 
1133 #if EFSYS_OPT_RX_SCALE
1134 
1135 LIBEFX_INTERNAL
1136 extern	__checkReturn	efx_rc_t
1137 ef10_rx_scale_context_alloc(
1138 	__in		efx_nic_t *enp,
1139 	__in		efx_rx_scale_context_type_t type,
1140 	__in		uint32_t num_queues,
1141 	__in		uint32_t table_nentries,
1142 	__out		uint32_t *rss_contextp);
1143 
1144 LIBEFX_INTERNAL
1145 extern	__checkReturn	efx_rc_t
1146 ef10_rx_scale_context_free(
1147 	__in		efx_nic_t *enp,
1148 	__in		uint32_t rss_context);
1149 
1150 LIBEFX_INTERNAL
1151 extern	__checkReturn	efx_rc_t
1152 ef10_rx_scale_mode_set(
1153 	__in		efx_nic_t *enp,
1154 	__in		uint32_t rss_context,
1155 	__in		efx_rx_hash_alg_t alg,
1156 	__in		efx_rx_hash_type_t type,
1157 	__in		boolean_t insert);
1158 
1159 LIBEFX_INTERNAL
1160 extern	__checkReturn	efx_rc_t
1161 ef10_rx_scale_key_set(
1162 	__in		efx_nic_t *enp,
1163 	__in		uint32_t rss_context,
1164 	__in_ecount(n)	uint8_t *key,
1165 	__in		size_t n);
1166 
1167 LIBEFX_INTERNAL
1168 extern	__checkReturn		efx_rc_t
1169 ef10_rx_scale_tbl_set(
1170 	__in			efx_nic_t *enp,
1171 	__in			uint32_t rss_context,
1172 	__in_ecount(nentries)	unsigned int *table,
1173 	__in			size_t nentries);
1174 
1175 LIBEFX_INTERNAL
1176 extern	__checkReturn	uint32_t
1177 ef10_rx_prefix_hash(
1178 	__in		efx_nic_t *enp,
1179 	__in		efx_rx_hash_alg_t func,
1180 	__in		uint8_t *buffer);
1181 
1182 #endif /* EFSYS_OPT_RX_SCALE */
1183 
1184 LIBEFX_INTERNAL
1185 extern	__checkReturn	efx_rc_t
1186 ef10_rx_prefix_pktlen(
1187 	__in		efx_nic_t *enp,
1188 	__in		uint8_t *buffer,
1189 	__out		uint16_t *lengthp);
1190 
1191 LIBEFX_INTERNAL
1192 extern				void
1193 ef10_rx_qpost(
1194 	__in			efx_rxq_t *erp,
1195 	__in_ecount(ndescs)	efsys_dma_addr_t *addrp,
1196 	__in			size_t size,
1197 	__in			unsigned int ndescs,
1198 	__in			unsigned int completed,
1199 	__in			unsigned int added);
1200 
1201 LIBEFX_INTERNAL
1202 extern			void
1203 ef10_rx_qpush(
1204 	__in		efx_rxq_t *erp,
1205 	__in		unsigned int added,
1206 	__inout		unsigned int *pushedp);
1207 
1208 LIBEFX_INTERNAL
1209 extern	__checkReturn	efx_rc_t
1210 ef10_rx_qflush(
1211 	__in		efx_rxq_t *erp);
1212 
1213 LIBEFX_INTERNAL
1214 extern		void
1215 ef10_rx_qenable(
1216 	__in		efx_rxq_t *erp);
1217 
1218 union efx_rxq_type_data_u;
1219 
1220 LIBEFX_INTERNAL
1221 extern	__checkReturn	efx_rc_t
1222 ef10_rx_qcreate(
1223 	__in		efx_nic_t *enp,
1224 	__in		unsigned int index,
1225 	__in		unsigned int label,
1226 	__in		efx_rxq_type_t type,
1227 	__in_opt	const union efx_rxq_type_data_u *type_data,
1228 	__in		efsys_mem_t *esmp,
1229 	__in		size_t ndescs,
1230 	__in		uint32_t id,
1231 	__in		unsigned int flags,
1232 	__in		efx_evq_t *eep,
1233 	__in		efx_rxq_t *erp);
1234 
1235 LIBEFX_INTERNAL
1236 extern			void
1237 ef10_rx_qdestroy(
1238 	__in		efx_rxq_t *erp);
1239 
1240 LIBEFX_INTERNAL
1241 extern			void
1242 ef10_rx_fini(
1243 	__in		efx_nic_t *enp);
1244 
1245 #if EFSYS_OPT_FILTER
1246 
1247 enum efx_filter_replacement_policy_e;
1248 
1249 typedef struct ef10_filter_handle_s {
1250 	uint32_t	efh_lo;
1251 	uint32_t	efh_hi;
1252 } ef10_filter_handle_t;
1253 
1254 typedef struct ef10_filter_entry_s {
1255 	uintptr_t efe_spec; /* pointer to filter spec plus busy bit */
1256 	ef10_filter_handle_t efe_handle;
1257 } ef10_filter_entry_t;
1258 
1259 /*
1260  * BUSY flag indicates that an update is in progress.
1261  * AUTO_OLD flag is used to mark and sweep MAC packet filters.
1262  */
1263 #define	EFX_EF10_FILTER_FLAG_BUSY	1U
1264 #define	EFX_EF10_FILTER_FLAG_AUTO_OLD	2U
1265 #define	EFX_EF10_FILTER_FLAGS		3U
1266 
1267 /*
1268  * Size of the hash table used by the driver. Doesn't need to be the
1269  * same size as the hardware's table.
1270  */
1271 #define	EFX_EF10_FILTER_TBL_ROWS 8192
1272 
1273 /* Only need to allow for one directed and one unknown unicast filter */
1274 #define	EFX_EF10_FILTER_UNICAST_FILTERS_MAX	2
1275 
1276 /* Allow for the broadcast address to be added to the multicast list */
1277 #define	EFX_EF10_FILTER_MULTICAST_FILTERS_MAX	(EFX_MAC_MULTICAST_LIST_MAX + 1)
1278 
1279 /*
1280  * For encapsulated packets, there is one filter each for each combination of
1281  * IPv4 or IPv6 outer frame, VXLAN, GENEVE or NVGRE packet type, and unicast or
1282  * multicast inner frames.
1283  */
1284 #define	EFX_EF10_FILTER_ENCAP_FILTERS_MAX	12
1285 
1286 typedef struct ef10_filter_table_s {
1287 	ef10_filter_entry_t	eft_entry[EFX_EF10_FILTER_TBL_ROWS];
1288 	efx_rxq_t		*eft_default_rxq;
1289 	boolean_t		eft_using_rss;
1290 	uint32_t		eft_unicst_filter_indexes[
1291 	    EFX_EF10_FILTER_UNICAST_FILTERS_MAX];
1292 	uint32_t		eft_unicst_filter_count;
1293 	uint32_t		eft_mulcst_filter_indexes[
1294 	    EFX_EF10_FILTER_MULTICAST_FILTERS_MAX];
1295 	uint32_t		eft_mulcst_filter_count;
1296 	boolean_t		eft_using_all_mulcst;
1297 	uint32_t		eft_encap_filter_indexes[
1298 	    EFX_EF10_FILTER_ENCAP_FILTERS_MAX];
1299 	uint32_t		eft_encap_filter_count;
1300 } ef10_filter_table_t;
1301 
1302 LIBEFX_INTERNAL
1303 extern	__checkReturn	efx_rc_t
1304 ef10_filter_init(
1305 	__in		efx_nic_t *enp);
1306 
1307 LIBEFX_INTERNAL
1308 extern			void
1309 ef10_filter_fini(
1310 	__in		efx_nic_t *enp);
1311 
1312 LIBEFX_INTERNAL
1313 extern	__checkReturn	efx_rc_t
1314 ef10_filter_restore(
1315 	__in		efx_nic_t *enp);
1316 
1317 LIBEFX_INTERNAL
1318 extern	__checkReturn	efx_rc_t
1319 ef10_filter_add(
1320 	__in		efx_nic_t *enp,
1321 	__inout		efx_filter_spec_t *spec,
1322 	__in		enum efx_filter_replacement_policy_e policy);
1323 
1324 LIBEFX_INTERNAL
1325 extern	__checkReturn	efx_rc_t
1326 ef10_filter_delete(
1327 	__in		efx_nic_t *enp,
1328 	__inout		efx_filter_spec_t *spec);
1329 
1330 LIBEFX_INTERNAL
1331 extern	__checkReturn	efx_rc_t
1332 ef10_filter_supported_filters(
1333 	__in				efx_nic_t *enp,
1334 	__out_ecount(buffer_length)	uint32_t *buffer,
1335 	__in				size_t buffer_length,
1336 	__out				size_t *list_lengthp);
1337 
1338 LIBEFX_INTERNAL
1339 extern	__checkReturn	efx_rc_t
1340 ef10_filter_reconfigure(
1341 	__in				efx_nic_t *enp,
1342 	__in_ecount(6)			uint8_t const *mac_addr,
1343 	__in				boolean_t all_unicst,
1344 	__in				boolean_t mulcst,
1345 	__in				boolean_t all_mulcst,
1346 	__in				boolean_t brdcst,
1347 	__in_ecount(6*count)		uint8_t const *addrs,
1348 	__in				uint32_t count);
1349 
1350 LIBEFX_INTERNAL
1351 extern	__checkReturn	efx_rc_t
1352 ef10_filter_get_count(
1353 	__in	efx_nic_t *enp,
1354 	__out	uint32_t *countp);
1355 
1356 LIBEFX_INTERNAL
1357 extern		void
1358 ef10_filter_get_default_rxq(
1359 	__in		efx_nic_t *enp,
1360 	__out		efx_rxq_t **erpp,
1361 	__out		boolean_t *using_rss);
1362 
1363 LIBEFX_INTERNAL
1364 extern		void
1365 ef10_filter_default_rxq_set(
1366 	__in		efx_nic_t *enp,
1367 	__in		efx_rxq_t *erp,
1368 	__in		boolean_t using_rss);
1369 
1370 LIBEFX_INTERNAL
1371 extern		void
1372 ef10_filter_default_rxq_clear(
1373 	__in		efx_nic_t *enp);
1374 
1375 
1376 #endif /* EFSYS_OPT_FILTER */
1377 
1378 LIBEFX_INTERNAL
1379 extern	__checkReturn			efx_rc_t
1380 efx_mcdi_get_function_info(
1381 	__in				efx_nic_t *enp,
1382 	__out				uint32_t *pfp,
1383 	__out_opt			uint32_t *vfp,
1384 	__out_opt			efx_pcie_interface_t *intfp);
1385 
1386 LIBEFX_INTERNAL
1387 extern	__checkReturn		efx_rc_t
1388 efx_mcdi_privilege_mask(
1389 	__in			efx_nic_t *enp,
1390 	__in			uint32_t pf,
1391 	__in			uint32_t vf,
1392 	__out			uint32_t *maskp);
1393 
1394 LIBEFX_INTERNAL
1395 extern	__checkReturn	efx_rc_t
1396 efx_mcdi_get_port_assignment(
1397 	__in		efx_nic_t *enp,
1398 	__out		uint32_t *portp);
1399 
1400 LIBEFX_INTERNAL
1401 extern	__checkReturn	efx_rc_t
1402 efx_mcdi_get_port_modes(
1403 	__in		efx_nic_t *enp,
1404 	__out		uint32_t *modesp,
1405 	__out_opt	uint32_t *current_modep,
1406 	__out_opt	uint32_t *default_modep);
1407 
1408 LIBEFX_INTERNAL
1409 extern	__checkReturn	efx_rc_t
1410 ef10_nic_get_port_mode_bandwidth(
1411 	__in		efx_nic_t *enp,
1412 	__out		uint32_t *bandwidth_mbpsp);
1413 
1414 LIBEFX_INTERNAL
1415 extern	__checkReturn	efx_rc_t
1416 efx_mcdi_get_mac_address_pf(
1417 	__in			efx_nic_t *enp,
1418 	__out_ecount_opt(6)	uint8_t mac_addrp[6]);
1419 
1420 LIBEFX_INTERNAL
1421 extern	__checkReturn	efx_rc_t
1422 efx_mcdi_get_mac_address_vf(
1423 	__in			efx_nic_t *enp,
1424 	__out_ecount_opt(6)	uint8_t mac_addrp[6]);
1425 
1426 LIBEFX_INTERNAL
1427 extern	__checkReturn	efx_rc_t
1428 efx_mcdi_get_clock(
1429 	__in		efx_nic_t *enp,
1430 	__out		uint32_t *sys_freqp,
1431 	__out		uint32_t *dpcpu_freqp);
1432 
1433 
1434 LIBEFX_INTERNAL
1435 extern	__checkReturn	efx_rc_t
1436 efx_mcdi_get_rxdp_config(
1437 	__in		efx_nic_t *enp,
1438 	__out		uint32_t *end_paddingp);
1439 
1440 LIBEFX_INTERNAL
1441 extern	__checkReturn	efx_rc_t
1442 efx_mcdi_get_vector_cfg(
1443 	__in		efx_nic_t *enp,
1444 	__out_opt	uint32_t *vec_basep,
1445 	__out_opt	uint32_t *pf_nvecp,
1446 	__out_opt	uint32_t *vf_nvecp);
1447 
1448 LIBEFX_INTERNAL
1449 extern	__checkReturn	efx_rc_t
1450 efx_mcdi_alloc_vis(
1451 	__in		efx_nic_t *enp,
1452 	__in		uint32_t min_vi_count,
1453 	__in		uint32_t max_vi_count,
1454 	__out		uint32_t *vi_basep,
1455 	__out		uint32_t *vi_countp,
1456 	__out		uint32_t *vi_shiftp);
1457 
1458 LIBEFX_INTERNAL
1459 extern	__checkReturn	efx_rc_t
1460 efx_mcdi_free_vis(
1461 	__in		efx_nic_t *enp);
1462 
1463 LIBEFX_INTERNAL
1464 extern	__checkReturn		efx_rc_t
1465 ef10_get_privilege_mask(
1466 	__in			efx_nic_t *enp,
1467 	__out			uint32_t *maskp);
1468 
1469 LIBEFX_INTERNAL
1470 extern	__checkReturn	efx_rc_t
1471 efx_mcdi_nic_board_cfg(
1472 	__in		efx_nic_t *enp);
1473 
1474 LIBEFX_INTERNAL
1475 extern	__checkReturn	efx_rc_t
1476 efx_mcdi_entity_reset(
1477 	__in		efx_nic_t *enp);
1478 
1479 #if EFSYS_OPT_FW_SUBVARIANT_AWARE
1480 
1481 LIBEFX_INTERNAL
1482 extern	__checkReturn	efx_rc_t
1483 efx_mcdi_get_nic_global(
1484 	__in		efx_nic_t *enp,
1485 	__in		uint32_t key,
1486 	__out		uint32_t *valuep);
1487 
1488 LIBEFX_INTERNAL
1489 extern	__checkReturn	efx_rc_t
1490 efx_mcdi_set_nic_global(
1491 	__in		efx_nic_t *enp,
1492 	__in		uint32_t key,
1493 	__in		uint32_t value);
1494 
1495 #endif	/* EFSYS_OPT_FW_SUBVARIANT_AWARE */
1496 
1497 #if EFSYS_OPT_EVB
1498 LIBEFX_INTERNAL
1499 extern	__checkReturn	efx_rc_t
1500 ef10_evb_init(
1501 	__in		efx_nic_t *enp);
1502 
1503 LIBEFX_INTERNAL
1504 extern			void
1505 ef10_evb_fini(
1506 	__in		efx_nic_t *enp);
1507 
1508 LIBEFX_INTERNAL
1509 extern	__checkReturn	efx_rc_t
1510 ef10_evb_vswitch_alloc(
1511 	__in		efx_nic_t *enp,
1512 	__out		efx_vswitch_id_t *vswitch_idp);
1513 
1514 
1515 LIBEFX_INTERNAL
1516 extern	__checkReturn	efx_rc_t
1517 ef10_evb_vswitch_free(
1518 	__in		efx_nic_t *enp,
1519 	__in		efx_vswitch_id_t vswitch_id);
1520 
1521 LIBEFX_INTERNAL
1522 extern	__checkReturn	efx_rc_t
1523 ef10_evb_vport_alloc(
1524 	__in		efx_nic_t *enp,
1525 	__in		efx_vswitch_id_t vswitch_id,
1526 	__in		efx_vport_type_t vport_type,
1527 	__in		uint16_t vid,
1528 	__in		boolean_t vlan_restrict,
1529 	__out		efx_vport_id_t *vport_idp);
1530 
1531 
1532 LIBEFX_INTERNAL
1533 extern	__checkReturn	efx_rc_t
1534 ef10_evb_vport_free(
1535 	__in		efx_nic_t *enp,
1536 	__in		efx_vswitch_id_t vswitch_id,
1537 	__in		efx_vport_id_t vport_id);
1538 
1539 LIBEFX_INTERNAL
1540 extern	__checkReturn	efx_rc_t
1541 ef10_evb_vport_mac_addr_add(
1542 	__in		efx_nic_t *enp,
1543 	__in		efx_vswitch_id_t vswitch_id,
1544 	__in		efx_vport_id_t vport_id,
1545 	__in_ecount(6)	uint8_t *addrp);
1546 
1547 LIBEFX_INTERNAL
1548 extern	__checkReturn	efx_rc_t
1549 ef10_evb_vport_mac_addr_del(
1550 	__in		efx_nic_t *enp,
1551 	__in		efx_vswitch_id_t vswitch_id,
1552 	__in		efx_vport_id_t vport_id,
1553 	__in_ecount(6)	uint8_t *addrp);
1554 
1555 LIBEFX_INTERNAL
1556 extern	__checkReturn	efx_rc_t
1557 ef10_evb_vadaptor_alloc(
1558 	__in		efx_nic_t *enp,
1559 	__in		efx_vswitch_id_t vswitch_id,
1560 	__in		efx_vport_id_t vport_id);
1561 
1562 
1563 LIBEFX_INTERNAL
1564 extern __checkReturn	efx_rc_t
1565 ef10_evb_vadaptor_free(
1566 	__in		efx_nic_t *enp,
1567 	__in		efx_vswitch_id_t vswitch_id,
1568 	__in		efx_vport_id_t vport_id);
1569 
1570 LIBEFX_INTERNAL
1571 extern	__checkReturn	efx_rc_t
1572 ef10_evb_vport_assign(
1573 	__in		efx_nic_t *enp,
1574 	__in		efx_vswitch_id_t vswitch_id,
1575 	__in		efx_vport_id_t vport_id,
1576 	__in		uint32_t vf_index);
1577 
1578 LIBEFX_INTERNAL
1579 extern	__checkReturn				efx_rc_t
1580 ef10_evb_vport_reconfigure(
1581 	__in					efx_nic_t *enp,
1582 	__in					efx_vswitch_id_t vswitch_id,
1583 	__in					efx_vport_id_t vport_id,
1584 	__in_opt				uint16_t *vidp,
1585 	__in_bcount_opt(EFX_MAC_ADDR_LEN)	uint8_t *addrp,
1586 	__out_opt				boolean_t *fn_resetp);
1587 
1588 LIBEFX_INTERNAL
1589 extern	__checkReturn	efx_rc_t
1590 ef10_evb_vport_stats(
1591 	__in		efx_nic_t *enp,
1592 	__in		efx_vswitch_id_t vswitch_id,
1593 	__in		efx_vport_id_t vport_id,
1594 	__out		efsys_mem_t *esmp);
1595 
1596 #endif  /* EFSYS_OPT_EVB */
1597 
1598 #if EFSYS_OPT_MCDI_PROXY_AUTH_SERVER
1599 LIBEFX_INTERNAL
1600 extern	__checkReturn	efx_rc_t
1601 ef10_proxy_auth_init(
1602 	__in		efx_nic_t *enp);
1603 
1604 LIBEFX_INTERNAL
1605 extern			void
1606 ef10_proxy_auth_fini(
1607 	__in		efx_nic_t *enp);
1608 
1609 LIBEFX_INTERNAL
1610 extern	__checkReturn		efx_rc_t
1611 ef10_proxy_auth_mc_config(
1612 	__in			efx_nic_t *enp,
1613 	__in			efsys_mem_t *request_bufferp,
1614 	__in			efsys_mem_t *response_bufferp,
1615 	__in			efsys_mem_t *status_bufferp,
1616 	__in			uint32_t block_cnt,
1617 	__in_ecount(op_count)	uint32_t *op_listp,
1618 	__in			size_t op_count);
1619 
1620 LIBEFX_INTERNAL
1621 extern	__checkReturn	efx_rc_t
1622 ef10_proxy_auth_disable(
1623 	__in		efx_nic_t *enp);
1624 
1625 LIBEFX_INTERNAL
1626 extern	__checkReturn	efx_rc_t
1627 ef10_proxy_auth_privilege_modify(
1628 	__in		efx_nic_t *enp,
1629 	__in		uint32_t fn_group,
1630 	__in		uint32_t pf_index,
1631 	__in		uint32_t vf_index,
1632 	__in		uint32_t add_privileges_mask,
1633 	__in		uint32_t remove_privileges_mask);
1634 
1635 LIBEFX_INTERNAL
1636 extern	__checkReturn	efx_rc_t
1637 ef10_proxy_auth_set_privilege_mask(
1638 	__in		efx_nic_t *enp,
1639 	__in		uint32_t vf_index,
1640 	__in		uint32_t mask,
1641 	__in		uint32_t value);
1642 
1643 LIBEFX_INTERNAL
1644 extern	__checkReturn	efx_rc_t
1645 ef10_proxy_auth_complete_request(
1646 	__in		efx_nic_t *enp,
1647 	__in		uint32_t fn_index,
1648 	__in		uint32_t proxy_result,
1649 	__in		uint32_t handle);
1650 
1651 LIBEFX_INTERNAL
1652 extern	__checkReturn	efx_rc_t
1653 ef10_proxy_auth_exec_cmd(
1654 	__in		efx_nic_t *enp,
1655 	__inout		efx_proxy_cmd_params_t *paramsp);
1656 
1657 LIBEFX_INTERNAL
1658 extern	__checkReturn	efx_rc_t
1659 ef10_proxy_auth_get_privilege_mask(
1660 	__in		efx_nic_t *enp,
1661 	__in		uint32_t pf_index,
1662 	__in		uint32_t vf_index,
1663 	__out		uint32_t *maskp);
1664 
1665 #endif  /* EFSYS_OPT_MCDI_PROXY_AUTH_SERVER */
1666 
1667 #if EFSYS_OPT_RX_PACKED_STREAM
1668 
1669 /* Data space per credit in packed stream mode */
1670 #define	EFX_RX_PACKED_STREAM_MEM_PER_CREDIT (1 << 16)
1671 
1672 /*
1673  * Received packets are always aligned at this boundary. Also there always
1674  * exists a gap of this size between packets.
1675  * (see SF-112241-TC, 4.5)
1676  */
1677 #define	EFX_RX_PACKED_STREAM_ALIGNMENT 64
1678 
1679 /*
1680  * Size of a pseudo-header prepended to received packets
1681  * in packed stream mode
1682  */
1683 #define	EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE 8
1684 
1685 /* Minimum space for packet in packed stream mode */
1686 #define	EFX_RX_PACKED_STREAM_MIN_PACKET_SPACE		\
1687 	EFX_P2ROUNDUP(size_t,				\
1688 	    EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE +	\
1689 	    EFX_MAC_PDU_MIN +				\
1690 	    EFX_RX_PACKED_STREAM_ALIGNMENT,		\
1691 	    EFX_RX_PACKED_STREAM_ALIGNMENT)
1692 
1693 /* Maximum number of credits */
1694 #define	EFX_RX_PACKED_STREAM_MAX_CREDITS 127
1695 
1696 #endif /* EFSYS_OPT_RX_PACKED_STREAM */
1697 
1698 #if EFSYS_OPT_RX_ES_SUPER_BUFFER
1699 
1700 /*
1701  * Maximum DMA length and buffer stride alignment.
1702  * (see SF-119419-TC, 3.2)
1703  */
1704 #define	EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT	64
1705 
1706 #endif
1707 
1708 #ifdef	__cplusplus
1709 }
1710 #endif
1711 
1712 #endif	/* _SYS_EF10_IMPL_H */
1713