xref: /freebsd/sys/dev/sfxge/common/ef10_impl.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
15f5c71ccSAndrew Rybchenko /*-
2929c7febSAndrew Rybchenko  * Copyright (c) 2015-2016 Solarflare Communications Inc.
35f5c71ccSAndrew Rybchenko  * All rights reserved.
45f5c71ccSAndrew Rybchenko  *
55f5c71ccSAndrew Rybchenko  * Redistribution and use in source and binary forms, with or without
65f5c71ccSAndrew Rybchenko  * modification, are permitted provided that the following conditions are met:
75f5c71ccSAndrew Rybchenko  *
85f5c71ccSAndrew Rybchenko  * 1. Redistributions of source code must retain the above copyright notice,
95f5c71ccSAndrew Rybchenko  *    this list of conditions and the following disclaimer.
105f5c71ccSAndrew Rybchenko  * 2. Redistributions in binary form must reproduce the above copyright notice,
115f5c71ccSAndrew Rybchenko  *    this list of conditions and the following disclaimer in the documentation
125f5c71ccSAndrew Rybchenko  *    and/or other materials provided with the distribution.
135f5c71ccSAndrew Rybchenko  *
145f5c71ccSAndrew Rybchenko  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
155f5c71ccSAndrew Rybchenko  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
165f5c71ccSAndrew Rybchenko  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
175f5c71ccSAndrew Rybchenko  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
185f5c71ccSAndrew Rybchenko  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
195f5c71ccSAndrew Rybchenko  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
205f5c71ccSAndrew Rybchenko  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
215f5c71ccSAndrew Rybchenko  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
225f5c71ccSAndrew Rybchenko  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
235f5c71ccSAndrew Rybchenko  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
245f5c71ccSAndrew Rybchenko  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
255f5c71ccSAndrew Rybchenko  *
265f5c71ccSAndrew Rybchenko  * The views and conclusions contained in the software and documentation are
275f5c71ccSAndrew Rybchenko  * those of the authors and should not be interpreted as representing official
285f5c71ccSAndrew Rybchenko  * policies, either expressed or implied, of the FreeBSD Project.
295f5c71ccSAndrew Rybchenko  */
305f5c71ccSAndrew Rybchenko 
315f5c71ccSAndrew Rybchenko #ifndef	_SYS_EF10_IMPL_H
325f5c71ccSAndrew Rybchenko #define	_SYS_EF10_IMPL_H
335f5c71ccSAndrew Rybchenko 
345f5c71ccSAndrew Rybchenko #ifdef	__cplusplus
355f5c71ccSAndrew Rybchenko extern "C" {
365f5c71ccSAndrew Rybchenko #endif
375f5c71ccSAndrew Rybchenko 
384f58306cSAndrew Rybchenko /* Number of hardware PIO buffers (for compile-time resource dimensions) */
394f58306cSAndrew Rybchenko #define	EF10_MAX_PIOBUF_NBUFS	(16)
404f58306cSAndrew Rybchenko 
414f58306cSAndrew Rybchenko #if EFSYS_OPT_HUNTINGTON
424f58306cSAndrew Rybchenko # if (EF10_MAX_PIOBUF_NBUFS < HUNT_PIOBUF_NBUFS)
434f58306cSAndrew Rybchenko #  error "EF10_MAX_PIOBUF_NBUFS too small"
44e7119ad9SAndrew Rybchenko # endif
454f58306cSAndrew Rybchenko #endif /* EFSYS_OPT_HUNTINGTON */
464f58306cSAndrew Rybchenko #if EFSYS_OPT_MEDFORD
474f58306cSAndrew Rybchenko # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD_PIOBUF_NBUFS)
484f58306cSAndrew Rybchenko #  error "EF10_MAX_PIOBUF_NBUFS too small"
494f58306cSAndrew Rybchenko # endif
504f58306cSAndrew Rybchenko #endif /* EFSYS_OPT_MEDFORD */
514f58306cSAndrew Rybchenko #if EFSYS_OPT_MEDFORD2
524f58306cSAndrew Rybchenko # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD2_PIOBUF_NBUFS)
534f58306cSAndrew Rybchenko #  error "EF10_MAX_PIOBUF_NBUFS too small"
544f58306cSAndrew Rybchenko # endif
554f58306cSAndrew Rybchenko #endif /* EFSYS_OPT_MEDFORD2 */
564f58306cSAndrew Rybchenko 
5716e5d7bfSAndrew Rybchenko /*
5816e5d7bfSAndrew Rybchenko  * FIXME: This is just a power of 2 which fits in an MCDI v1 message, and could
5916e5d7bfSAndrew Rybchenko  * possibly be increased, or the write size reported by newer firmware used
6016e5d7bfSAndrew Rybchenko  * instead.
6116e5d7bfSAndrew Rybchenko  */
6216e5d7bfSAndrew Rybchenko #define	EF10_NVRAM_CHUNK 0x80
6316e5d7bfSAndrew Rybchenko 
6495c45bd0SAndrew Rybchenko /*
6595c45bd0SAndrew Rybchenko  * Alignment requirement for value written to RX WPTR: the WPTR must be aligned
6695c45bd0SAndrew Rybchenko  * to an 8 descriptor boundary.
6716e5d7bfSAndrew Rybchenko  */
6816e5d7bfSAndrew Rybchenko #define	EF10_RX_WPTR_ALIGN 8
6916e5d7bfSAndrew Rybchenko 
7016e5d7bfSAndrew Rybchenko /*
7116e5d7bfSAndrew Rybchenko  * Max byte offset into the packet the TCP header must start for the hardware
7216e5d7bfSAndrew Rybchenko  * to be able to parse the packet correctly.
7316e5d7bfSAndrew Rybchenko  */
7416e5d7bfSAndrew Rybchenko #define	EF10_TCP_HEADER_OFFSET_LIMIT	208
7516e5d7bfSAndrew Rybchenko 
7616e5d7bfSAndrew Rybchenko /* Invalid RSS context handle */
7716e5d7bfSAndrew Rybchenko #define	EF10_RSS_CONTEXT_INVALID	(0xffffffff)
7816e5d7bfSAndrew Rybchenko 
7916e5d7bfSAndrew Rybchenko /* EV */
8016e5d7bfSAndrew Rybchenko 
8116e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
8216e5d7bfSAndrew Rybchenko ef10_ev_init(
8316e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
8416e5d7bfSAndrew Rybchenko 
8516e5d7bfSAndrew Rybchenko 			void
8616e5d7bfSAndrew Rybchenko ef10_ev_fini(
8716e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
8816e5d7bfSAndrew Rybchenko 
8916e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
9016e5d7bfSAndrew Rybchenko ef10_ev_qcreate(
9116e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
9216e5d7bfSAndrew Rybchenko 	__in		unsigned int index,
9316e5d7bfSAndrew Rybchenko 	__in		efsys_mem_t *esmp,
9469953083SAndrew Rybchenko 	__in		size_t ndescs,
9516e5d7bfSAndrew Rybchenko 	__in		uint32_t id,
965c4c3d92SAndrew Rybchenko 	__in		uint32_t us,
97a3fe009aSAndrew Rybchenko 	__in		uint32_t flags,
9816e5d7bfSAndrew Rybchenko 	__in		efx_evq_t *eep);
9916e5d7bfSAndrew Rybchenko 
10016e5d7bfSAndrew Rybchenko 			void
10116e5d7bfSAndrew Rybchenko ef10_ev_qdestroy(
10216e5d7bfSAndrew Rybchenko 	__in		efx_evq_t *eep);
10316e5d7bfSAndrew Rybchenko 
10416e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
10516e5d7bfSAndrew Rybchenko ef10_ev_qprime(
10616e5d7bfSAndrew Rybchenko 	__in		efx_evq_t *eep,
10716e5d7bfSAndrew Rybchenko 	__in		unsigned int count);
10816e5d7bfSAndrew Rybchenko 
10916e5d7bfSAndrew Rybchenko 			void
11016e5d7bfSAndrew Rybchenko ef10_ev_qpost(
11116e5d7bfSAndrew Rybchenko 	__in	efx_evq_t *eep,
11216e5d7bfSAndrew Rybchenko 	__in	uint16_t data);
11316e5d7bfSAndrew Rybchenko 
11416e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
11516e5d7bfSAndrew Rybchenko ef10_ev_qmoderate(
11616e5d7bfSAndrew Rybchenko 	__in		efx_evq_t *eep,
11716e5d7bfSAndrew Rybchenko 	__in		unsigned int us);
11816e5d7bfSAndrew Rybchenko 
11916e5d7bfSAndrew Rybchenko #if EFSYS_OPT_QSTATS
12016e5d7bfSAndrew Rybchenko 			void
12116e5d7bfSAndrew Rybchenko ef10_ev_qstats_update(
12216e5d7bfSAndrew Rybchenko 	__in				efx_evq_t *eep,
12316e5d7bfSAndrew Rybchenko 	__inout_ecount(EV_NQSTATS)	efsys_stat_t *stat);
12416e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */
12516e5d7bfSAndrew Rybchenko 
12616e5d7bfSAndrew Rybchenko 		void
12716e5d7bfSAndrew Rybchenko ef10_ev_rxlabel_init(
12816e5d7bfSAndrew Rybchenko 	__in		efx_evq_t *eep,
12916e5d7bfSAndrew Rybchenko 	__in		efx_rxq_t *erp,
1308e0c4827SAndrew Rybchenko 	__in		unsigned int label,
1311aa1b495SAndrew Rybchenko 	__in		efx_rxq_type_t type);
13216e5d7bfSAndrew Rybchenko 
13316e5d7bfSAndrew Rybchenko 		void
13416e5d7bfSAndrew Rybchenko ef10_ev_rxlabel_fini(
13516e5d7bfSAndrew Rybchenko 	__in		efx_evq_t *eep,
13616e5d7bfSAndrew Rybchenko 	__in		unsigned int label);
13716e5d7bfSAndrew Rybchenko 
13816e5d7bfSAndrew Rybchenko /* INTR */
13916e5d7bfSAndrew Rybchenko 
14016e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
14116e5d7bfSAndrew Rybchenko ef10_intr_init(
14216e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
14316e5d7bfSAndrew Rybchenko 	__in		efx_intr_type_t type,
14416e5d7bfSAndrew Rybchenko 	__in		efsys_mem_t *esmp);
14516e5d7bfSAndrew Rybchenko 
14616e5d7bfSAndrew Rybchenko 			void
14716e5d7bfSAndrew Rybchenko ef10_intr_enable(
14816e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
14916e5d7bfSAndrew Rybchenko 
15016e5d7bfSAndrew Rybchenko 			void
15116e5d7bfSAndrew Rybchenko ef10_intr_disable(
15216e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
15316e5d7bfSAndrew Rybchenko 
15416e5d7bfSAndrew Rybchenko 			void
15516e5d7bfSAndrew Rybchenko ef10_intr_disable_unlocked(
15616e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
15716e5d7bfSAndrew Rybchenko 
15816e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
15916e5d7bfSAndrew Rybchenko ef10_intr_trigger(
16016e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
16116e5d7bfSAndrew Rybchenko 	__in		unsigned int level);
16216e5d7bfSAndrew Rybchenko 
16316e5d7bfSAndrew Rybchenko 			void
16416e5d7bfSAndrew Rybchenko ef10_intr_status_line(
16516e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
16616e5d7bfSAndrew Rybchenko 	__out		boolean_t *fatalp,
16716e5d7bfSAndrew Rybchenko 	__out		uint32_t *qmaskp);
16816e5d7bfSAndrew Rybchenko 
16916e5d7bfSAndrew Rybchenko 			void
17016e5d7bfSAndrew Rybchenko ef10_intr_status_message(
17116e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
17216e5d7bfSAndrew Rybchenko 	__in		unsigned int message,
17316e5d7bfSAndrew Rybchenko 	__out		boolean_t *fatalp);
17416e5d7bfSAndrew Rybchenko 
17516e5d7bfSAndrew Rybchenko 			void
17616e5d7bfSAndrew Rybchenko ef10_intr_fatal(
17716e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
17816e5d7bfSAndrew Rybchenko 			void
17916e5d7bfSAndrew Rybchenko ef10_intr_fini(
18016e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
18116e5d7bfSAndrew Rybchenko 
18216e5d7bfSAndrew Rybchenko /* NIC */
18316e5d7bfSAndrew Rybchenko 
18416e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
18516e5d7bfSAndrew Rybchenko ef10_nic_probe(
18616e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
18716e5d7bfSAndrew Rybchenko 
18816e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
18916e5d7bfSAndrew Rybchenko ef10_nic_set_drv_limits(
19016e5d7bfSAndrew Rybchenko 	__inout		efx_nic_t *enp,
19116e5d7bfSAndrew Rybchenko 	__in		efx_drv_limits_t *edlp);
19216e5d7bfSAndrew Rybchenko 
19316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
19416e5d7bfSAndrew Rybchenko ef10_nic_get_vi_pool(
19516e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
19616e5d7bfSAndrew Rybchenko 	__out		uint32_t *vi_countp);
19716e5d7bfSAndrew Rybchenko 
19816e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
19916e5d7bfSAndrew Rybchenko ef10_nic_get_bar_region(
20016e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
20116e5d7bfSAndrew Rybchenko 	__in		efx_nic_region_t region,
20216e5d7bfSAndrew Rybchenko 	__out		uint32_t *offsetp,
20316e5d7bfSAndrew Rybchenko 	__out		size_t *sizep);
20416e5d7bfSAndrew Rybchenko 
20516e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
20616e5d7bfSAndrew Rybchenko ef10_nic_reset(
20716e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
20816e5d7bfSAndrew Rybchenko 
20916e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
21016e5d7bfSAndrew Rybchenko ef10_nic_init(
21116e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
21216e5d7bfSAndrew Rybchenko 
213c6d5e85dSAndrew Rybchenko extern	__checkReturn	boolean_t
214c6d5e85dSAndrew Rybchenko ef10_nic_hw_unavailable(
215c6d5e85dSAndrew Rybchenko 	__in		efx_nic_t *enp);
216c6d5e85dSAndrew Rybchenko 
217b2053d80SAndrew Rybchenko extern			void
218b2053d80SAndrew Rybchenko ef10_nic_set_hw_unavailable(
219b2053d80SAndrew Rybchenko 	__in		efx_nic_t *enp);
220b2053d80SAndrew Rybchenko 
22116e5d7bfSAndrew Rybchenko #if EFSYS_OPT_DIAG
22216e5d7bfSAndrew Rybchenko 
22316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
22416e5d7bfSAndrew Rybchenko ef10_nic_register_test(
22516e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
22616e5d7bfSAndrew Rybchenko 
22716e5d7bfSAndrew Rybchenko #endif	/* EFSYS_OPT_DIAG */
22816e5d7bfSAndrew Rybchenko 
22916e5d7bfSAndrew Rybchenko extern			void
23016e5d7bfSAndrew Rybchenko ef10_nic_fini(
23116e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
23216e5d7bfSAndrew Rybchenko 
23316e5d7bfSAndrew Rybchenko extern			void
23416e5d7bfSAndrew Rybchenko ef10_nic_unprobe(
23516e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
23616e5d7bfSAndrew Rybchenko 
23716e5d7bfSAndrew Rybchenko /* MAC */
23816e5d7bfSAndrew Rybchenko 
23916e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
24016e5d7bfSAndrew Rybchenko ef10_mac_poll(
24116e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
24216e5d7bfSAndrew Rybchenko 	__out		efx_link_mode_t *link_modep);
24316e5d7bfSAndrew Rybchenko 
24416e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
24516e5d7bfSAndrew Rybchenko ef10_mac_up(
24616e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
24716e5d7bfSAndrew Rybchenko 	__out		boolean_t *mac_upp);
24816e5d7bfSAndrew Rybchenko 
24916e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
25016e5d7bfSAndrew Rybchenko ef10_mac_addr_set(
25116e5d7bfSAndrew Rybchenko 	__in	efx_nic_t *enp);
25216e5d7bfSAndrew Rybchenko 
25316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
25416e5d7bfSAndrew Rybchenko ef10_mac_pdu_set(
25516e5d7bfSAndrew Rybchenko 	__in	efx_nic_t *enp);
25616e5d7bfSAndrew Rybchenko 
25716e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
258d8484af2SAndrew Rybchenko ef10_mac_pdu_get(
259d8484af2SAndrew Rybchenko 	__in	efx_nic_t *enp,
260d8484af2SAndrew Rybchenko 	__out	size_t *pdu);
261d8484af2SAndrew Rybchenko 
262d8484af2SAndrew Rybchenko extern	__checkReturn	efx_rc_t
26316e5d7bfSAndrew Rybchenko ef10_mac_reconfigure(
26416e5d7bfSAndrew Rybchenko 	__in	efx_nic_t *enp);
26516e5d7bfSAndrew Rybchenko 
26616e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
26716e5d7bfSAndrew Rybchenko ef10_mac_multicast_list_set(
26816e5d7bfSAndrew Rybchenko 	__in				efx_nic_t *enp);
26916e5d7bfSAndrew Rybchenko 
27016e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
27116e5d7bfSAndrew Rybchenko ef10_mac_filter_default_rxq_set(
27216e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
27316e5d7bfSAndrew Rybchenko 	__in		efx_rxq_t *erp,
27416e5d7bfSAndrew Rybchenko 	__in		boolean_t using_rss);
27516e5d7bfSAndrew Rybchenko 
27616e5d7bfSAndrew Rybchenko extern			void
27716e5d7bfSAndrew Rybchenko ef10_mac_filter_default_rxq_clear(
27816e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
27916e5d7bfSAndrew Rybchenko 
28016e5d7bfSAndrew Rybchenko #if EFSYS_OPT_LOOPBACK
28116e5d7bfSAndrew Rybchenko 
28216e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
28316e5d7bfSAndrew Rybchenko ef10_mac_loopback_set(
28416e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
28516e5d7bfSAndrew Rybchenko 	__in		efx_link_mode_t link_mode,
28616e5d7bfSAndrew Rybchenko 	__in		efx_loopback_type_t loopback_type);
28716e5d7bfSAndrew Rybchenko 
28816e5d7bfSAndrew Rybchenko #endif	/* EFSYS_OPT_LOOPBACK */
28916e5d7bfSAndrew Rybchenko 
29016e5d7bfSAndrew Rybchenko #if EFSYS_OPT_MAC_STATS
29116e5d7bfSAndrew Rybchenko 
29216e5d7bfSAndrew Rybchenko extern	__checkReturn			efx_rc_t
29358a72cb2SAndrew Rybchenko ef10_mac_stats_get_mask(
29458a72cb2SAndrew Rybchenko 	__in				efx_nic_t *enp,
29558a72cb2SAndrew Rybchenko 	__inout_bcount(mask_size)	uint32_t *maskp,
29658a72cb2SAndrew Rybchenko 	__in				size_t mask_size);
29758a72cb2SAndrew Rybchenko 
29858a72cb2SAndrew Rybchenko extern	__checkReturn			efx_rc_t
29916e5d7bfSAndrew Rybchenko ef10_mac_stats_update(
30016e5d7bfSAndrew Rybchenko 	__in				efx_nic_t *enp,
30116e5d7bfSAndrew Rybchenko 	__in				efsys_mem_t *esmp,
30216e5d7bfSAndrew Rybchenko 	__inout_ecount(EFX_MAC_NSTATS)	efsys_stat_t *stat,
30316e5d7bfSAndrew Rybchenko 	__inout_opt			uint32_t *generationp);
30416e5d7bfSAndrew Rybchenko 
30516e5d7bfSAndrew Rybchenko #endif	/* EFSYS_OPT_MAC_STATS */
30616e5d7bfSAndrew Rybchenko 
30716e5d7bfSAndrew Rybchenko /* MCDI */
30816e5d7bfSAndrew Rybchenko 
30916e5d7bfSAndrew Rybchenko #if EFSYS_OPT_MCDI
31016e5d7bfSAndrew Rybchenko 
31116e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
31216e5d7bfSAndrew Rybchenko ef10_mcdi_init(
31316e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
31416e5d7bfSAndrew Rybchenko 	__in		const efx_mcdi_transport_t *mtp);
31516e5d7bfSAndrew Rybchenko 
31616e5d7bfSAndrew Rybchenko extern			void
31716e5d7bfSAndrew Rybchenko ef10_mcdi_fini(
31816e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
31916e5d7bfSAndrew Rybchenko 
32016e5d7bfSAndrew Rybchenko extern			void
32116e5d7bfSAndrew Rybchenko ef10_mcdi_send_request(
32216e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
3233222b9deSAndrew Rybchenko 	__in_bcount(hdr_len)	void *hdrp,
32416e5d7bfSAndrew Rybchenko 	__in			size_t hdr_len,
3253222b9deSAndrew Rybchenko 	__in_bcount(sdu_len)	void *sdup,
32616e5d7bfSAndrew Rybchenko 	__in			size_t sdu_len);
32716e5d7bfSAndrew Rybchenko 
32816e5d7bfSAndrew Rybchenko extern	__checkReturn	boolean_t
32916e5d7bfSAndrew Rybchenko ef10_mcdi_poll_response(
33016e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
33116e5d7bfSAndrew Rybchenko 
33216e5d7bfSAndrew Rybchenko extern			void
33316e5d7bfSAndrew Rybchenko ef10_mcdi_read_response(
33416e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
33516e5d7bfSAndrew Rybchenko 	__out_bcount(length)	void *bufferp,
33616e5d7bfSAndrew Rybchenko 	__in			size_t offset,
33716e5d7bfSAndrew Rybchenko 	__in			size_t length);
33816e5d7bfSAndrew Rybchenko 
33916e5d7bfSAndrew Rybchenko extern			efx_rc_t
34016e5d7bfSAndrew Rybchenko ef10_mcdi_poll_reboot(
34116e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
34216e5d7bfSAndrew Rybchenko 
34316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
34416e5d7bfSAndrew Rybchenko ef10_mcdi_feature_supported(
34516e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
34616e5d7bfSAndrew Rybchenko 	__in		efx_mcdi_feature_id_t id,
34716e5d7bfSAndrew Rybchenko 	__out		boolean_t *supportedp);
34816e5d7bfSAndrew Rybchenko 
3498a4fcbd4SAndrew Rybchenko extern			void
3508a4fcbd4SAndrew Rybchenko ef10_mcdi_get_timeout(
3518a4fcbd4SAndrew Rybchenko 	__in		efx_nic_t *enp,
3528a4fcbd4SAndrew Rybchenko 	__in		efx_mcdi_req_t *emrp,
3538a4fcbd4SAndrew Rybchenko 	__out		uint32_t *timeoutp);
3548a4fcbd4SAndrew Rybchenko 
35516e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_MCDI */
35616e5d7bfSAndrew Rybchenko 
35716e5d7bfSAndrew Rybchenko /* NVRAM */
35816e5d7bfSAndrew Rybchenko 
35916e5d7bfSAndrew Rybchenko #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
36016e5d7bfSAndrew Rybchenko 
36116e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
36216e5d7bfSAndrew Rybchenko ef10_nvram_buf_read_tlv(
36316e5d7bfSAndrew Rybchenko 	__in				efx_nic_t *enp,
36416e5d7bfSAndrew Rybchenko 	__in_bcount(max_seg_size)	caddr_t seg_data,
36516e5d7bfSAndrew Rybchenko 	__in				size_t max_seg_size,
36616e5d7bfSAndrew Rybchenko 	__in				uint32_t tag,
36716e5d7bfSAndrew Rybchenko 	__deref_out_bcount_opt(*sizep)	caddr_t *datap,
36816e5d7bfSAndrew Rybchenko 	__out				size_t *sizep);
36916e5d7bfSAndrew Rybchenko 
37016e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
37116e5d7bfSAndrew Rybchenko ef10_nvram_buf_write_tlv(
37216e5d7bfSAndrew Rybchenko 	__inout_bcount(partn_size)	caddr_t partn_data,
37316e5d7bfSAndrew Rybchenko 	__in				size_t partn_size,
37416e5d7bfSAndrew Rybchenko 	__in				uint32_t tag,
37516e5d7bfSAndrew Rybchenko 	__in_bcount(tag_size)		caddr_t tag_data,
37616e5d7bfSAndrew Rybchenko 	__in				size_t tag_size,
37716e5d7bfSAndrew Rybchenko 	__out				size_t *total_lengthp);
37816e5d7bfSAndrew Rybchenko 
37916e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
38016e5d7bfSAndrew Rybchenko ef10_nvram_partn_read_tlv(
38116e5d7bfSAndrew Rybchenko 	__in				efx_nic_t *enp,
38216e5d7bfSAndrew Rybchenko 	__in				uint32_t partn,
38316e5d7bfSAndrew Rybchenko 	__in				uint32_t tag,
38416e5d7bfSAndrew Rybchenko 	__deref_out_bcount_opt(*sizep)	caddr_t *datap,
38516e5d7bfSAndrew Rybchenko 	__out				size_t *sizep);
38616e5d7bfSAndrew Rybchenko 
38716e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
38816e5d7bfSAndrew Rybchenko ef10_nvram_partn_write_tlv(
38916e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
39016e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
39116e5d7bfSAndrew Rybchenko 	__in			uint32_t tag,
39216e5d7bfSAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
39316e5d7bfSAndrew Rybchenko 	__in			size_t size);
39416e5d7bfSAndrew Rybchenko 
39516e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
39616e5d7bfSAndrew Rybchenko ef10_nvram_partn_write_segment_tlv(
39716e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
39816e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
39916e5d7bfSAndrew Rybchenko 	__in			uint32_t tag,
40016e5d7bfSAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
40116e5d7bfSAndrew Rybchenko 	__in			size_t size,
40216e5d7bfSAndrew Rybchenko 	__in			boolean_t all_segments);
40316e5d7bfSAndrew Rybchenko 
40416e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
40516e5d7bfSAndrew Rybchenko ef10_nvram_partn_lock(
40616e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
40716e5d7bfSAndrew Rybchenko 	__in			uint32_t partn);
40816e5d7bfSAndrew Rybchenko 
409e9c123a5SAndrew Rybchenko extern	__checkReturn		efx_rc_t
41016e5d7bfSAndrew Rybchenko ef10_nvram_partn_unlock(
41116e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
412f92697a4SAndrew Rybchenko 	__in			uint32_t partn,
413f92697a4SAndrew Rybchenko 	__out_opt		uint32_t *resultp);
41416e5d7bfSAndrew Rybchenko 
41516e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_NVRAM || EFSYS_OPT_VPD */
41616e5d7bfSAndrew Rybchenko 
41716e5d7bfSAndrew Rybchenko #if EFSYS_OPT_NVRAM
41816e5d7bfSAndrew Rybchenko 
41916e5d7bfSAndrew Rybchenko #if EFSYS_OPT_DIAG
42016e5d7bfSAndrew Rybchenko 
42116e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
42216e5d7bfSAndrew Rybchenko ef10_nvram_test(
42316e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp);
42416e5d7bfSAndrew Rybchenko 
42516e5d7bfSAndrew Rybchenko #endif	/* EFSYS_OPT_DIAG */
42616e5d7bfSAndrew Rybchenko 
42716e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
42816e5d7bfSAndrew Rybchenko ef10_nvram_type_to_partn(
42916e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
43016e5d7bfSAndrew Rybchenko 	__in			efx_nvram_type_t type,
43116e5d7bfSAndrew Rybchenko 	__out			uint32_t *partnp);
43216e5d7bfSAndrew Rybchenko 
43316e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
43416e5d7bfSAndrew Rybchenko ef10_nvram_partn_size(
43516e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
43616e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
43716e5d7bfSAndrew Rybchenko 	__out			size_t *sizep);
43816e5d7bfSAndrew Rybchenko 
43916e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
44016e5d7bfSAndrew Rybchenko ef10_nvram_partn_rw_start(
44116e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
44216e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
44316e5d7bfSAndrew Rybchenko 	__out			size_t *chunk_sizep);
44416e5d7bfSAndrew Rybchenko 
44516e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
44616e5d7bfSAndrew Rybchenko ef10_nvram_partn_read_mode(
44716e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
44816e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
44916e5d7bfSAndrew Rybchenko 	__in			unsigned int offset,
45016e5d7bfSAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
45116e5d7bfSAndrew Rybchenko 	__in			size_t size,
45216e5d7bfSAndrew Rybchenko 	__in			uint32_t mode);
45316e5d7bfSAndrew Rybchenko 
45416e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
45516e5d7bfSAndrew Rybchenko ef10_nvram_partn_read(
45616e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
45716e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
45816e5d7bfSAndrew Rybchenko 	__in			unsigned int offset,
459dbcc3c8fSAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
46016e5d7bfSAndrew Rybchenko 	__in			size_t size);
46116e5d7bfSAndrew Rybchenko 
46216e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
463ede1a3edSAndrew Rybchenko ef10_nvram_partn_read_backup(
464ede1a3edSAndrew Rybchenko 	__in			efx_nic_t *enp,
465ede1a3edSAndrew Rybchenko 	__in			uint32_t partn,
466ede1a3edSAndrew Rybchenko 	__in			unsigned int offset,
467ede1a3edSAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
468ede1a3edSAndrew Rybchenko 	__in			size_t size);
469ede1a3edSAndrew Rybchenko 
470ede1a3edSAndrew Rybchenko extern	__checkReturn		efx_rc_t
47116e5d7bfSAndrew Rybchenko ef10_nvram_partn_erase(
47216e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
47316e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
47416e5d7bfSAndrew Rybchenko 	__in			unsigned int offset,
47516e5d7bfSAndrew Rybchenko 	__in			size_t size);
47616e5d7bfSAndrew Rybchenko 
47716e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
47816e5d7bfSAndrew Rybchenko ef10_nvram_partn_write(
47916e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
48016e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
48116e5d7bfSAndrew Rybchenko 	__in			unsigned int offset,
48216e5d7bfSAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
48316e5d7bfSAndrew Rybchenko 	__in			size_t size);
48416e5d7bfSAndrew Rybchenko 
485e9c123a5SAndrew Rybchenko extern	__checkReturn		efx_rc_t
48616e5d7bfSAndrew Rybchenko ef10_nvram_partn_rw_finish(
48716e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
488a21b2f20SAndrew Rybchenko 	__in			uint32_t partn,
489a21b2f20SAndrew Rybchenko 	__out_opt		uint32_t *verify_resultp);
49016e5d7bfSAndrew Rybchenko 
49116e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
49216e5d7bfSAndrew Rybchenko ef10_nvram_partn_get_version(
49316e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
49416e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
49516e5d7bfSAndrew Rybchenko 	__out			uint32_t *subtypep,
49616e5d7bfSAndrew Rybchenko 	__out_ecount(4)		uint16_t version[4]);
49716e5d7bfSAndrew Rybchenko 
49816e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
49916e5d7bfSAndrew Rybchenko ef10_nvram_partn_set_version(
50016e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
50116e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
50216e5d7bfSAndrew Rybchenko 	__in_ecount(4)		uint16_t version[4]);
50316e5d7bfSAndrew Rybchenko 
50416e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
50516e5d7bfSAndrew Rybchenko ef10_nvram_buffer_validate(
50616e5d7bfSAndrew Rybchenko 	__in			uint32_t partn,
50716e5d7bfSAndrew Rybchenko 	__in_bcount(buffer_size)
50816e5d7bfSAndrew Rybchenko 				caddr_t bufferp,
50916e5d7bfSAndrew Rybchenko 	__in			size_t buffer_size);
51016e5d7bfSAndrew Rybchenko 
511e919b7ecSAndrew Rybchenko extern			void
512e919b7ecSAndrew Rybchenko ef10_nvram_buffer_init(
513e919b7ecSAndrew Rybchenko 	__out_bcount(buffer_size)
514e919b7ecSAndrew Rybchenko 				caddr_t bufferp,
515e919b7ecSAndrew Rybchenko 	__in			size_t buffer_size);
516e919b7ecSAndrew Rybchenko 
51716e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
51816e5d7bfSAndrew Rybchenko ef10_nvram_buffer_create(
519e919b7ecSAndrew Rybchenko 	__in			uint32_t partn_type,
520e919b7ecSAndrew Rybchenko 	__out_bcount(buffer_size)
52116e5d7bfSAndrew Rybchenko 				caddr_t bufferp,
52216e5d7bfSAndrew Rybchenko 	__in			size_t buffer_size);
52316e5d7bfSAndrew Rybchenko 
52416e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
52516e5d7bfSAndrew Rybchenko ef10_nvram_buffer_find_item_start(
52616e5d7bfSAndrew Rybchenko 	__in_bcount(buffer_size)
52716e5d7bfSAndrew Rybchenko 				caddr_t bufferp,
52816e5d7bfSAndrew Rybchenko 	__in			size_t buffer_size,
52995c45bd0SAndrew Rybchenko 	__out			uint32_t *startp);
53016e5d7bfSAndrew Rybchenko 
53116e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
53216e5d7bfSAndrew Rybchenko ef10_nvram_buffer_find_end(
53316e5d7bfSAndrew Rybchenko 	__in_bcount(buffer_size)
53416e5d7bfSAndrew Rybchenko 				caddr_t bufferp,
53516e5d7bfSAndrew Rybchenko 	__in			size_t buffer_size,
53616e5d7bfSAndrew Rybchenko 	__in			uint32_t offset,
53795c45bd0SAndrew Rybchenko 	__out			uint32_t *endp);
53816e5d7bfSAndrew Rybchenko 
53916e5d7bfSAndrew Rybchenko extern	__checkReturn	__success(return != B_FALSE)	boolean_t
54016e5d7bfSAndrew Rybchenko ef10_nvram_buffer_find_item(
54116e5d7bfSAndrew Rybchenko 	__in_bcount(buffer_size)
54216e5d7bfSAndrew Rybchenko 				caddr_t bufferp,
54316e5d7bfSAndrew Rybchenko 	__in			size_t buffer_size,
54416e5d7bfSAndrew Rybchenko 	__in			uint32_t offset,
54516e5d7bfSAndrew Rybchenko 	__out			uint32_t *startp,
54695c45bd0SAndrew Rybchenko 	__out			uint32_t *lengthp);
54716e5d7bfSAndrew Rybchenko 
54816e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
549e919b7ecSAndrew Rybchenko ef10_nvram_buffer_peek_item(
550e919b7ecSAndrew Rybchenko 	__in_bcount(buffer_size)
551e919b7ecSAndrew Rybchenko 				caddr_t bufferp,
552e919b7ecSAndrew Rybchenko 	__in			size_t buffer_size,
553e919b7ecSAndrew Rybchenko 	__in			uint32_t offset,
554e919b7ecSAndrew Rybchenko 	__out			uint32_t *tagp,
555e919b7ecSAndrew Rybchenko 	__out			uint32_t *lengthp,
556e919b7ecSAndrew Rybchenko 	__out			uint32_t *value_offsetp);
557e919b7ecSAndrew Rybchenko 
558e919b7ecSAndrew Rybchenko extern	__checkReturn		efx_rc_t
55916e5d7bfSAndrew Rybchenko ef10_nvram_buffer_get_item(
56016e5d7bfSAndrew Rybchenko 	__in_bcount(buffer_size)
56116e5d7bfSAndrew Rybchenko 				caddr_t bufferp,
56216e5d7bfSAndrew Rybchenko 	__in			size_t buffer_size,
56316e5d7bfSAndrew Rybchenko 	__in			uint32_t offset,
56416e5d7bfSAndrew Rybchenko 	__in			uint32_t length,
565e919b7ecSAndrew Rybchenko 	__out			uint32_t *tagp,
566e919b7ecSAndrew Rybchenko 	__out_bcount_part(value_max_size, *lengthp)
567e919b7ecSAndrew Rybchenko 				caddr_t valuep,
568e919b7ecSAndrew Rybchenko 	__in			size_t value_max_size,
56995c45bd0SAndrew Rybchenko 	__out			uint32_t *lengthp);
57016e5d7bfSAndrew Rybchenko 
57116e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
57216e5d7bfSAndrew Rybchenko ef10_nvram_buffer_insert_item(
57316e5d7bfSAndrew Rybchenko 	__in_bcount(buffer_size)
57416e5d7bfSAndrew Rybchenko 				caddr_t bufferp,
57516e5d7bfSAndrew Rybchenko 	__in			size_t buffer_size,
57616e5d7bfSAndrew Rybchenko 	__in			uint32_t offset,
577e919b7ecSAndrew Rybchenko 	__in			uint32_t tag,
578e919b7ecSAndrew Rybchenko 	__in_bcount(length)	caddr_t valuep,
579e919b7ecSAndrew Rybchenko 	__in			uint32_t length,
580e919b7ecSAndrew Rybchenko 	__out			uint32_t *lengthp);
581e919b7ecSAndrew Rybchenko 
582e919b7ecSAndrew Rybchenko extern	__checkReturn		efx_rc_t
583e919b7ecSAndrew Rybchenko ef10_nvram_buffer_modify_item(
584e919b7ecSAndrew Rybchenko 	__in_bcount(buffer_size)
585e919b7ecSAndrew Rybchenko 				caddr_t bufferp,
586e919b7ecSAndrew Rybchenko 	__in			size_t buffer_size,
587e919b7ecSAndrew Rybchenko 	__in			uint32_t offset,
588e919b7ecSAndrew Rybchenko 	__in			uint32_t tag,
589e919b7ecSAndrew Rybchenko 	__in_bcount(length)	caddr_t valuep,
59016e5d7bfSAndrew Rybchenko 	__in			uint32_t length,
59195c45bd0SAndrew Rybchenko 	__out			uint32_t *lengthp);
59216e5d7bfSAndrew Rybchenko 
59316e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
59416e5d7bfSAndrew Rybchenko ef10_nvram_buffer_delete_item(
59516e5d7bfSAndrew Rybchenko 	__in_bcount(buffer_size)
59616e5d7bfSAndrew Rybchenko 				caddr_t bufferp,
59716e5d7bfSAndrew Rybchenko 	__in			size_t buffer_size,
59816e5d7bfSAndrew Rybchenko 	__in			uint32_t offset,
59916e5d7bfSAndrew Rybchenko 	__in			uint32_t length,
60095c45bd0SAndrew Rybchenko 	__in			uint32_t end);
60116e5d7bfSAndrew Rybchenko 
60216e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
60316e5d7bfSAndrew Rybchenko ef10_nvram_buffer_finish(
60416e5d7bfSAndrew Rybchenko 	__in_bcount(buffer_size)
60516e5d7bfSAndrew Rybchenko 				caddr_t bufferp,
60695c45bd0SAndrew Rybchenko 	__in			size_t buffer_size);
60716e5d7bfSAndrew Rybchenko 
60816e5d7bfSAndrew Rybchenko #endif	/* EFSYS_OPT_NVRAM */
60916e5d7bfSAndrew Rybchenko 
61016e5d7bfSAndrew Rybchenko /* PHY */
61116e5d7bfSAndrew Rybchenko 
61216e5d7bfSAndrew Rybchenko typedef struct ef10_link_state_s {
613cf94ca37SAndrew Rybchenko 	efx_phy_link_state_t	epls;
61416e5d7bfSAndrew Rybchenko #if EFSYS_OPT_LOOPBACK
61516e5d7bfSAndrew Rybchenko 	efx_loopback_type_t	els_loopback;
61616e5d7bfSAndrew Rybchenko #endif
61716e5d7bfSAndrew Rybchenko 	boolean_t		els_mac_up;
61816e5d7bfSAndrew Rybchenko } ef10_link_state_t;
61916e5d7bfSAndrew Rybchenko 
62016e5d7bfSAndrew Rybchenko extern			void
62116e5d7bfSAndrew Rybchenko ef10_phy_link_ev(
62216e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
62316e5d7bfSAndrew Rybchenko 	__in		efx_qword_t *eqp,
62416e5d7bfSAndrew Rybchenko 	__out		efx_link_mode_t *link_modep);
62516e5d7bfSAndrew Rybchenko 
62616e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
62716e5d7bfSAndrew Rybchenko ef10_phy_get_link(
62816e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
62916e5d7bfSAndrew Rybchenko 	__out		ef10_link_state_t *elsp);
63016e5d7bfSAndrew Rybchenko 
63116e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
63216e5d7bfSAndrew Rybchenko ef10_phy_power(
63316e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
63416e5d7bfSAndrew Rybchenko 	__in		boolean_t on);
63516e5d7bfSAndrew Rybchenko 
63616e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
63716e5d7bfSAndrew Rybchenko ef10_phy_reconfigure(
63816e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
63916e5d7bfSAndrew Rybchenko 
64016e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
64116e5d7bfSAndrew Rybchenko ef10_phy_verify(
64216e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
64316e5d7bfSAndrew Rybchenko 
64416e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
64516e5d7bfSAndrew Rybchenko ef10_phy_oui_get(
64616e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
64716e5d7bfSAndrew Rybchenko 	__out		uint32_t *ouip);
64816e5d7bfSAndrew Rybchenko 
649a8c1489fSAndrew Rybchenko extern	__checkReturn	efx_rc_t
650cf94ca37SAndrew Rybchenko ef10_phy_link_state_get(
651a8c1489fSAndrew Rybchenko 	__in		efx_nic_t *enp,
652cf94ca37SAndrew Rybchenko 	__out		efx_phy_link_state_t *eplsp);
653a8c1489fSAndrew Rybchenko 
65416e5d7bfSAndrew Rybchenko #if EFSYS_OPT_PHY_STATS
65516e5d7bfSAndrew Rybchenko 
65616e5d7bfSAndrew Rybchenko extern	__checkReturn			efx_rc_t
65716e5d7bfSAndrew Rybchenko ef10_phy_stats_update(
65816e5d7bfSAndrew Rybchenko 	__in				efx_nic_t *enp,
65916e5d7bfSAndrew Rybchenko 	__in				efsys_mem_t *esmp,
66016e5d7bfSAndrew Rybchenko 	__inout_ecount(EFX_PHY_NSTATS)	uint32_t *stat);
66116e5d7bfSAndrew Rybchenko 
66216e5d7bfSAndrew Rybchenko #endif	/* EFSYS_OPT_PHY_STATS */
66316e5d7bfSAndrew Rybchenko 
664cc7a82f5SAndrew Rybchenko #if EFSYS_OPT_BIST
665cc7a82f5SAndrew Rybchenko 
666cc7a82f5SAndrew Rybchenko extern	__checkReturn		efx_rc_t
667cc7a82f5SAndrew Rybchenko ef10_bist_enable_offline(
668cc7a82f5SAndrew Rybchenko 	__in			efx_nic_t *enp);
669cc7a82f5SAndrew Rybchenko 
670cc7a82f5SAndrew Rybchenko extern	__checkReturn		efx_rc_t
671cc7a82f5SAndrew Rybchenko ef10_bist_start(
672cc7a82f5SAndrew Rybchenko 	__in			efx_nic_t *enp,
673cc7a82f5SAndrew Rybchenko 	__in			efx_bist_type_t type);
674cc7a82f5SAndrew Rybchenko 
675cc7a82f5SAndrew Rybchenko extern	__checkReturn		efx_rc_t
676cc7a82f5SAndrew Rybchenko ef10_bist_poll(
677cc7a82f5SAndrew Rybchenko 	__in			efx_nic_t *enp,
678cc7a82f5SAndrew Rybchenko 	__in			efx_bist_type_t type,
679cc7a82f5SAndrew Rybchenko 	__out			efx_bist_result_t *resultp,
680cc7a82f5SAndrew Rybchenko 	__out_opt __drv_when(count > 0, __notnull)
681cc7a82f5SAndrew Rybchenko 	uint32_t	*value_maskp,
682cc7a82f5SAndrew Rybchenko 	__out_ecount_opt(count)	__drv_when(count > 0, __notnull)
683cc7a82f5SAndrew Rybchenko 	unsigned long	*valuesp,
684cc7a82f5SAndrew Rybchenko 	__in			size_t count);
685cc7a82f5SAndrew Rybchenko 
686cc7a82f5SAndrew Rybchenko extern				void
687cc7a82f5SAndrew Rybchenko ef10_bist_stop(
688cc7a82f5SAndrew Rybchenko 	__in			efx_nic_t *enp,
689cc7a82f5SAndrew Rybchenko 	__in			efx_bist_type_t type);
690cc7a82f5SAndrew Rybchenko 
691cc7a82f5SAndrew Rybchenko #endif	/* EFSYS_OPT_BIST */
69216e5d7bfSAndrew Rybchenko 
69316e5d7bfSAndrew Rybchenko /* TX */
69416e5d7bfSAndrew Rybchenko 
69516e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
69616e5d7bfSAndrew Rybchenko ef10_tx_init(
69716e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
69816e5d7bfSAndrew Rybchenko 
69916e5d7bfSAndrew Rybchenko extern			void
70016e5d7bfSAndrew Rybchenko ef10_tx_fini(
70116e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
70216e5d7bfSAndrew Rybchenko 
70316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
70416e5d7bfSAndrew Rybchenko ef10_tx_qcreate(
70516e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
70616e5d7bfSAndrew Rybchenko 	__in		unsigned int index,
70716e5d7bfSAndrew Rybchenko 	__in		unsigned int label,
70816e5d7bfSAndrew Rybchenko 	__in		efsys_mem_t *esmp,
7090c9ef1f5SAndrew Rybchenko 	__in		size_t ndescs,
71016e5d7bfSAndrew Rybchenko 	__in		uint32_t id,
71116e5d7bfSAndrew Rybchenko 	__in		uint16_t flags,
71216e5d7bfSAndrew Rybchenko 	__in		efx_evq_t *eep,
71316e5d7bfSAndrew Rybchenko 	__in		efx_txq_t *etp,
71416e5d7bfSAndrew Rybchenko 	__out		unsigned int *addedp);
71516e5d7bfSAndrew Rybchenko 
71616e5d7bfSAndrew Rybchenko extern		void
71716e5d7bfSAndrew Rybchenko ef10_tx_qdestroy(
71816e5d7bfSAndrew Rybchenko 	__in		efx_txq_t *etp);
71916e5d7bfSAndrew Rybchenko 
72016e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
72116e5d7bfSAndrew Rybchenko ef10_tx_qpost(
72216e5d7bfSAndrew Rybchenko 	__in			efx_txq_t *etp,
7230c9ef1f5SAndrew Rybchenko 	__in_ecount(ndescs)	efx_buffer_t *ebp,
7240c9ef1f5SAndrew Rybchenko 	__in			unsigned int ndescs,
72516e5d7bfSAndrew Rybchenko 	__in			unsigned int completed,
72616e5d7bfSAndrew Rybchenko 	__inout			unsigned int *addedp);
72716e5d7bfSAndrew Rybchenko 
72816e5d7bfSAndrew Rybchenko extern			void
72916e5d7bfSAndrew Rybchenko ef10_tx_qpush(
73016e5d7bfSAndrew Rybchenko 	__in		efx_txq_t *etp,
73116e5d7bfSAndrew Rybchenko 	__in		unsigned int added,
73216e5d7bfSAndrew Rybchenko 	__in		unsigned int pushed);
73316e5d7bfSAndrew Rybchenko 
7348e0c4827SAndrew Rybchenko #if EFSYS_OPT_RX_PACKED_STREAM
7358e0c4827SAndrew Rybchenko extern			void
7368e0c4827SAndrew Rybchenko ef10_rx_qpush_ps_credits(
7378e0c4827SAndrew Rybchenko 	__in		efx_rxq_t *erp);
7388e0c4827SAndrew Rybchenko 
7398e0c4827SAndrew Rybchenko extern	__checkReturn	uint8_t *
7408e0c4827SAndrew Rybchenko ef10_rx_qps_packet_info(
7418e0c4827SAndrew Rybchenko 	__in		efx_rxq_t *erp,
7428e0c4827SAndrew Rybchenko 	__in		uint8_t *buffer,
7438e0c4827SAndrew Rybchenko 	__in		uint32_t buffer_length,
7448e0c4827SAndrew Rybchenko 	__in		uint32_t current_offset,
7458e0c4827SAndrew Rybchenko 	__out		uint16_t *lengthp,
7468e0c4827SAndrew Rybchenko 	__out		uint32_t *next_offsetp,
7478e0c4827SAndrew Rybchenko 	__out		uint32_t *timestamp);
7488e0c4827SAndrew Rybchenko #endif
7498e0c4827SAndrew Rybchenko 
75016e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
75116e5d7bfSAndrew Rybchenko ef10_tx_qpace(
75216e5d7bfSAndrew Rybchenko 	__in		efx_txq_t *etp,
75316e5d7bfSAndrew Rybchenko 	__in		unsigned int ns);
75416e5d7bfSAndrew Rybchenko 
75516e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
75616e5d7bfSAndrew Rybchenko ef10_tx_qflush(
75716e5d7bfSAndrew Rybchenko 	__in		efx_txq_t *etp);
75816e5d7bfSAndrew Rybchenko 
75916e5d7bfSAndrew Rybchenko extern			void
76016e5d7bfSAndrew Rybchenko ef10_tx_qenable(
76116e5d7bfSAndrew Rybchenko 	__in		efx_txq_t *etp);
76216e5d7bfSAndrew Rybchenko 
76316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
76416e5d7bfSAndrew Rybchenko ef10_tx_qpio_enable(
76516e5d7bfSAndrew Rybchenko 	__in		efx_txq_t *etp);
76616e5d7bfSAndrew Rybchenko 
76716e5d7bfSAndrew Rybchenko extern			void
76816e5d7bfSAndrew Rybchenko ef10_tx_qpio_disable(
76916e5d7bfSAndrew Rybchenko 	__in		efx_txq_t *etp);
77016e5d7bfSAndrew Rybchenko 
77116e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
77216e5d7bfSAndrew Rybchenko ef10_tx_qpio_write(
77316e5d7bfSAndrew Rybchenko 	__in			efx_txq_t *etp,
77416e5d7bfSAndrew Rybchenko 	__in_ecount(buf_length)	uint8_t *buffer,
77516e5d7bfSAndrew Rybchenko 	__in			size_t buf_length,
77616e5d7bfSAndrew Rybchenko 	__in			size_t pio_buf_offset);
77716e5d7bfSAndrew Rybchenko 
77816e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
77916e5d7bfSAndrew Rybchenko ef10_tx_qpio_post(
78016e5d7bfSAndrew Rybchenko 	__in			efx_txq_t *etp,
78116e5d7bfSAndrew Rybchenko 	__in			size_t pkt_length,
78216e5d7bfSAndrew Rybchenko 	__in			unsigned int completed,
78316e5d7bfSAndrew Rybchenko 	__inout			unsigned int *addedp);
78416e5d7bfSAndrew Rybchenko 
78516e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
78616e5d7bfSAndrew Rybchenko ef10_tx_qdesc_post(
78716e5d7bfSAndrew Rybchenko 	__in		efx_txq_t *etp,
78816e5d7bfSAndrew Rybchenko 	__in_ecount(n)	efx_desc_t *ed,
78916e5d7bfSAndrew Rybchenko 	__in		unsigned int n,
79016e5d7bfSAndrew Rybchenko 	__in		unsigned int completed,
79116e5d7bfSAndrew Rybchenko 	__inout		unsigned int *addedp);
79216e5d7bfSAndrew Rybchenko 
79316e5d7bfSAndrew Rybchenko extern	void
79416e5d7bfSAndrew Rybchenko ef10_tx_qdesc_dma_create(
79516e5d7bfSAndrew Rybchenko 	__in	efx_txq_t *etp,
79616e5d7bfSAndrew Rybchenko 	__in	efsys_dma_addr_t addr,
79716e5d7bfSAndrew Rybchenko 	__in	size_t size,
79816e5d7bfSAndrew Rybchenko 	__in	boolean_t eop,
79916e5d7bfSAndrew Rybchenko 	__out	efx_desc_t *edp);
80016e5d7bfSAndrew Rybchenko 
80116e5d7bfSAndrew Rybchenko extern	void
80216e5d7bfSAndrew Rybchenko ef10_tx_qdesc_tso_create(
80316e5d7bfSAndrew Rybchenko 	__in	efx_txq_t *etp,
80416e5d7bfSAndrew Rybchenko 	__in	uint16_t ipv4_id,
80516e5d7bfSAndrew Rybchenko 	__in	uint32_t tcp_seq,
80616e5d7bfSAndrew Rybchenko 	__in	uint8_t	 tcp_flags,
80716e5d7bfSAndrew Rybchenko 	__out	efx_desc_t *edp);
80816e5d7bfSAndrew Rybchenko 
80916e5d7bfSAndrew Rybchenko extern	void
81016e5d7bfSAndrew Rybchenko ef10_tx_qdesc_tso2_create(
81116e5d7bfSAndrew Rybchenko 	__in			efx_txq_t *etp,
81216e5d7bfSAndrew Rybchenko 	__in			uint16_t ipv4_id,
8134142e8cfSAndrew Rybchenko 	__in			uint16_t outer_ipv4_id,
81416e5d7bfSAndrew Rybchenko 	__in			uint32_t tcp_seq,
81516e5d7bfSAndrew Rybchenko 	__in			uint16_t tcp_mss,
81616e5d7bfSAndrew Rybchenko 	__out_ecount(count)	efx_desc_t *edp,
81716e5d7bfSAndrew Rybchenko 	__in			int count);
81816e5d7bfSAndrew Rybchenko 
81916e5d7bfSAndrew Rybchenko extern	void
82016e5d7bfSAndrew Rybchenko ef10_tx_qdesc_vlantci_create(
82116e5d7bfSAndrew Rybchenko 	__in	efx_txq_t *etp,
82216e5d7bfSAndrew Rybchenko 	__in	uint16_t vlan_tci,
82316e5d7bfSAndrew Rybchenko 	__out	efx_desc_t *edp);
82416e5d7bfSAndrew Rybchenko 
8254effeb9eSAndrew Rybchenko extern	void
8264effeb9eSAndrew Rybchenko ef10_tx_qdesc_checksum_create(
8274effeb9eSAndrew Rybchenko 	__in	efx_txq_t *etp,
8284effeb9eSAndrew Rybchenko 	__in	uint16_t flags,
8294effeb9eSAndrew Rybchenko 	__out	efx_desc_t *edp);
83016e5d7bfSAndrew Rybchenko 
83116e5d7bfSAndrew Rybchenko #if EFSYS_OPT_QSTATS
83216e5d7bfSAndrew Rybchenko 
83316e5d7bfSAndrew Rybchenko extern			void
83416e5d7bfSAndrew Rybchenko ef10_tx_qstats_update(
83516e5d7bfSAndrew Rybchenko 	__in				efx_txq_t *etp,
83616e5d7bfSAndrew Rybchenko 	__inout_ecount(TX_NQSTATS)	efsys_stat_t *stat);
83716e5d7bfSAndrew Rybchenko 
83816e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */
83916e5d7bfSAndrew Rybchenko 
84016e5d7bfSAndrew Rybchenko typedef uint32_t	efx_piobuf_handle_t;
84116e5d7bfSAndrew Rybchenko 
84216e5d7bfSAndrew Rybchenko #define	EFX_PIOBUF_HANDLE_INVALID	((efx_piobuf_handle_t)-1)
84316e5d7bfSAndrew Rybchenko 
84416e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
84516e5d7bfSAndrew Rybchenko ef10_nic_pio_alloc(
84616e5d7bfSAndrew Rybchenko 	__inout		efx_nic_t *enp,
84716e5d7bfSAndrew Rybchenko 	__out		uint32_t *bufnump,
84816e5d7bfSAndrew Rybchenko 	__out		efx_piobuf_handle_t *handlep,
84916e5d7bfSAndrew Rybchenko 	__out		uint32_t *blknump,
85016e5d7bfSAndrew Rybchenko 	__out		uint32_t *offsetp,
85116e5d7bfSAndrew Rybchenko 	__out		size_t *sizep);
85216e5d7bfSAndrew Rybchenko 
85316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
85416e5d7bfSAndrew Rybchenko ef10_nic_pio_free(
85516e5d7bfSAndrew Rybchenko 	__inout		efx_nic_t *enp,
85616e5d7bfSAndrew Rybchenko 	__in		uint32_t bufnum,
85716e5d7bfSAndrew Rybchenko 	__in		uint32_t blknum);
85816e5d7bfSAndrew Rybchenko 
85916e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
86016e5d7bfSAndrew Rybchenko ef10_nic_pio_link(
86116e5d7bfSAndrew Rybchenko 	__inout		efx_nic_t *enp,
86216e5d7bfSAndrew Rybchenko 	__in		uint32_t vi_index,
86316e5d7bfSAndrew Rybchenko 	__in		efx_piobuf_handle_t handle);
86416e5d7bfSAndrew Rybchenko 
86516e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
86616e5d7bfSAndrew Rybchenko ef10_nic_pio_unlink(
86716e5d7bfSAndrew Rybchenko 	__inout		efx_nic_t *enp,
86816e5d7bfSAndrew Rybchenko 	__in		uint32_t vi_index);
86916e5d7bfSAndrew Rybchenko 
87016e5d7bfSAndrew Rybchenko /* VPD */
87116e5d7bfSAndrew Rybchenko 
87216e5d7bfSAndrew Rybchenko #if EFSYS_OPT_VPD
87316e5d7bfSAndrew Rybchenko 
87416e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
87516e5d7bfSAndrew Rybchenko ef10_vpd_init(
87616e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp);
87716e5d7bfSAndrew Rybchenko 
87816e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
87916e5d7bfSAndrew Rybchenko ef10_vpd_size(
88016e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
88116e5d7bfSAndrew Rybchenko 	__out			size_t *sizep);
88216e5d7bfSAndrew Rybchenko 
88316e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
88416e5d7bfSAndrew Rybchenko ef10_vpd_read(
88516e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
88616e5d7bfSAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
88716e5d7bfSAndrew Rybchenko 	__in			size_t size);
88816e5d7bfSAndrew Rybchenko 
88916e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
89016e5d7bfSAndrew Rybchenko ef10_vpd_verify(
89116e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
89216e5d7bfSAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
89316e5d7bfSAndrew Rybchenko 	__in			size_t size);
89416e5d7bfSAndrew Rybchenko 
89516e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
89616e5d7bfSAndrew Rybchenko ef10_vpd_reinit(
89716e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
89816e5d7bfSAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
89916e5d7bfSAndrew Rybchenko 	__in			size_t size);
90016e5d7bfSAndrew Rybchenko 
90116e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
90216e5d7bfSAndrew Rybchenko ef10_vpd_get(
90316e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
90416e5d7bfSAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
90516e5d7bfSAndrew Rybchenko 	__in			size_t size,
90616e5d7bfSAndrew Rybchenko 	__inout			efx_vpd_value_t *evvp);
90716e5d7bfSAndrew Rybchenko 
90816e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
90916e5d7bfSAndrew Rybchenko ef10_vpd_set(
91016e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
91116e5d7bfSAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
91216e5d7bfSAndrew Rybchenko 	__in			size_t size,
91316e5d7bfSAndrew Rybchenko 	__in			efx_vpd_value_t *evvp);
91416e5d7bfSAndrew Rybchenko 
91516e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
91616e5d7bfSAndrew Rybchenko ef10_vpd_next(
91716e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
91816e5d7bfSAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
91916e5d7bfSAndrew Rybchenko 	__in			size_t size,
92016e5d7bfSAndrew Rybchenko 	__out			efx_vpd_value_t *evvp,
92116e5d7bfSAndrew Rybchenko 	__inout			unsigned int *contp);
92216e5d7bfSAndrew Rybchenko 
92316e5d7bfSAndrew Rybchenko extern __checkReturn		efx_rc_t
92416e5d7bfSAndrew Rybchenko ef10_vpd_write(
92516e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
92616e5d7bfSAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
92716e5d7bfSAndrew Rybchenko 	__in			size_t size);
92816e5d7bfSAndrew Rybchenko 
92916e5d7bfSAndrew Rybchenko extern				void
93016e5d7bfSAndrew Rybchenko ef10_vpd_fini(
93116e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp);
93216e5d7bfSAndrew Rybchenko 
93316e5d7bfSAndrew Rybchenko #endif	/* EFSYS_OPT_VPD */
93416e5d7bfSAndrew Rybchenko 
93516e5d7bfSAndrew Rybchenko /* RX */
93616e5d7bfSAndrew Rybchenko 
93716e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
93816e5d7bfSAndrew Rybchenko ef10_rx_init(
93916e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
94016e5d7bfSAndrew Rybchenko 
94116e5d7bfSAndrew Rybchenko #if EFSYS_OPT_RX_SCATTER
94216e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
94316e5d7bfSAndrew Rybchenko ef10_rx_scatter_enable(
94416e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
94516e5d7bfSAndrew Rybchenko 	__in		unsigned int buf_size);
94616e5d7bfSAndrew Rybchenko #endif	/* EFSYS_OPT_RX_SCATTER */
94716e5d7bfSAndrew Rybchenko 
94816e5d7bfSAndrew Rybchenko #if EFSYS_OPT_RX_SCALE
94916e5d7bfSAndrew Rybchenko 
95016e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
951e6d55a0bSAndrew Rybchenko ef10_rx_scale_context_alloc(
952e6d55a0bSAndrew Rybchenko 	__in		efx_nic_t *enp,
953e6d55a0bSAndrew Rybchenko 	__in		efx_rx_scale_context_type_t type,
954e6d55a0bSAndrew Rybchenko 	__in		uint32_t num_queues,
955e6d55a0bSAndrew Rybchenko 	__out		uint32_t *rss_contextp);
956e6d55a0bSAndrew Rybchenko 
957e6d55a0bSAndrew Rybchenko extern	__checkReturn	efx_rc_t
958e6d55a0bSAndrew Rybchenko ef10_rx_scale_context_free(
959e6d55a0bSAndrew Rybchenko 	__in		efx_nic_t *enp,
960e6d55a0bSAndrew Rybchenko 	__in		uint32_t rss_context);
961e6d55a0bSAndrew Rybchenko 
962e6d55a0bSAndrew Rybchenko extern	__checkReturn	efx_rc_t
96316e5d7bfSAndrew Rybchenko ef10_rx_scale_mode_set(
96416e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
96582af879cSAndrew Rybchenko 	__in		uint32_t rss_context,
96616e5d7bfSAndrew Rybchenko 	__in		efx_rx_hash_alg_t alg,
96716e5d7bfSAndrew Rybchenko 	__in		efx_rx_hash_type_t type,
96816e5d7bfSAndrew Rybchenko 	__in		boolean_t insert);
96916e5d7bfSAndrew Rybchenko 
97016e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
97116e5d7bfSAndrew Rybchenko ef10_rx_scale_key_set(
97216e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
97382af879cSAndrew Rybchenko 	__in		uint32_t rss_context,
97416e5d7bfSAndrew Rybchenko 	__in_ecount(n)	uint8_t *key,
97516e5d7bfSAndrew Rybchenko 	__in		size_t n);
97616e5d7bfSAndrew Rybchenko 
97716e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
97816e5d7bfSAndrew Rybchenko ef10_rx_scale_tbl_set(
97916e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
98082af879cSAndrew Rybchenko 	__in		uint32_t rss_context,
98116e5d7bfSAndrew Rybchenko 	__in_ecount(n)	unsigned int *table,
98216e5d7bfSAndrew Rybchenko 	__in		size_t n);
98316e5d7bfSAndrew Rybchenko 
98416e5d7bfSAndrew Rybchenko extern	__checkReturn	uint32_t
98516e5d7bfSAndrew Rybchenko ef10_rx_prefix_hash(
98616e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
98716e5d7bfSAndrew Rybchenko 	__in		efx_rx_hash_alg_t func,
98816e5d7bfSAndrew Rybchenko 	__in		uint8_t *buffer);
98916e5d7bfSAndrew Rybchenko 
99016e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_RX_SCALE */
99116e5d7bfSAndrew Rybchenko 
99216e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
99316e5d7bfSAndrew Rybchenko ef10_rx_prefix_pktlen(
99416e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
99516e5d7bfSAndrew Rybchenko 	__in		uint8_t *buffer,
99616e5d7bfSAndrew Rybchenko 	__out		uint16_t *lengthp);
99716e5d7bfSAndrew Rybchenko 
99816e5d7bfSAndrew Rybchenko extern				void
99916e5d7bfSAndrew Rybchenko ef10_rx_qpost(
100016e5d7bfSAndrew Rybchenko 	__in			efx_rxq_t *erp,
100159ee8172SAndrew Rybchenko 	__in_ecount(ndescs)	efsys_dma_addr_t *addrp,
100216e5d7bfSAndrew Rybchenko 	__in			size_t size,
100359ee8172SAndrew Rybchenko 	__in			unsigned int ndescs,
100416e5d7bfSAndrew Rybchenko 	__in			unsigned int completed,
100516e5d7bfSAndrew Rybchenko 	__in			unsigned int added);
100616e5d7bfSAndrew Rybchenko 
100716e5d7bfSAndrew Rybchenko extern			void
100816e5d7bfSAndrew Rybchenko ef10_rx_qpush(
100916e5d7bfSAndrew Rybchenko 	__in		efx_rxq_t *erp,
101016e5d7bfSAndrew Rybchenko 	__in		unsigned int added,
101116e5d7bfSAndrew Rybchenko 	__inout		unsigned int *pushedp);
101216e5d7bfSAndrew Rybchenko 
101316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
101416e5d7bfSAndrew Rybchenko ef10_rx_qflush(
101516e5d7bfSAndrew Rybchenko 	__in		efx_rxq_t *erp);
101616e5d7bfSAndrew Rybchenko 
101716e5d7bfSAndrew Rybchenko extern		void
101816e5d7bfSAndrew Rybchenko ef10_rx_qenable(
101916e5d7bfSAndrew Rybchenko 	__in		efx_rxq_t *erp);
102016e5d7bfSAndrew Rybchenko 
10212a726a7fSAndrew Rybchenko union efx_rxq_type_data_u;
10222a726a7fSAndrew Rybchenko 
102316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
102416e5d7bfSAndrew Rybchenko ef10_rx_qcreate(
102516e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
102616e5d7bfSAndrew Rybchenko 	__in		unsigned int index,
102716e5d7bfSAndrew Rybchenko 	__in		unsigned int label,
102816e5d7bfSAndrew Rybchenko 	__in		efx_rxq_type_t type,
1029d707fb20SAndrew Rybchenko 	__in_opt	const union efx_rxq_type_data_u *type_data,
103016e5d7bfSAndrew Rybchenko 	__in		efsys_mem_t *esmp,
103159ee8172SAndrew Rybchenko 	__in		size_t ndescs,
103216e5d7bfSAndrew Rybchenko 	__in		uint32_t id,
10339445d1c5SAndrew Rybchenko 	__in		unsigned int flags,
103416e5d7bfSAndrew Rybchenko 	__in		efx_evq_t *eep,
103516e5d7bfSAndrew Rybchenko 	__in		efx_rxq_t *erp);
103616e5d7bfSAndrew Rybchenko 
103716e5d7bfSAndrew Rybchenko extern			void
103816e5d7bfSAndrew Rybchenko ef10_rx_qdestroy(
103916e5d7bfSAndrew Rybchenko 	__in		efx_rxq_t *erp);
104016e5d7bfSAndrew Rybchenko 
104116e5d7bfSAndrew Rybchenko extern			void
104216e5d7bfSAndrew Rybchenko ef10_rx_fini(
104316e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
104416e5d7bfSAndrew Rybchenko 
104516e5d7bfSAndrew Rybchenko #if EFSYS_OPT_FILTER
104616e5d7bfSAndrew Rybchenko 
104716e5d7bfSAndrew Rybchenko typedef struct ef10_filter_handle_s {
104816e5d7bfSAndrew Rybchenko 	uint32_t	efh_lo;
104916e5d7bfSAndrew Rybchenko 	uint32_t	efh_hi;
105016e5d7bfSAndrew Rybchenko } ef10_filter_handle_t;
105116e5d7bfSAndrew Rybchenko 
105216e5d7bfSAndrew Rybchenko typedef struct ef10_filter_entry_s {
105316e5d7bfSAndrew Rybchenko 	uintptr_t efe_spec; /* pointer to filter spec plus busy bit */
105416e5d7bfSAndrew Rybchenko 	ef10_filter_handle_t efe_handle;
105516e5d7bfSAndrew Rybchenko } ef10_filter_entry_t;
105616e5d7bfSAndrew Rybchenko 
105716e5d7bfSAndrew Rybchenko /*
105816e5d7bfSAndrew Rybchenko  * BUSY flag indicates that an update is in progress.
105916e5d7bfSAndrew Rybchenko  * AUTO_OLD flag is used to mark and sweep MAC packet filters.
106016e5d7bfSAndrew Rybchenko  */
106116e5d7bfSAndrew Rybchenko #define	EFX_EF10_FILTER_FLAG_BUSY	1U
106216e5d7bfSAndrew Rybchenko #define	EFX_EF10_FILTER_FLAG_AUTO_OLD	2U
106316e5d7bfSAndrew Rybchenko #define	EFX_EF10_FILTER_FLAGS		3U
106416e5d7bfSAndrew Rybchenko 
106516e5d7bfSAndrew Rybchenko /*
106616e5d7bfSAndrew Rybchenko  * Size of the hash table used by the driver. Doesn't need to be the
106716e5d7bfSAndrew Rybchenko  * same size as the hardware's table.
106816e5d7bfSAndrew Rybchenko  */
106916e5d7bfSAndrew Rybchenko #define	EFX_EF10_FILTER_TBL_ROWS 8192
107016e5d7bfSAndrew Rybchenko 
107116e5d7bfSAndrew Rybchenko /* Only need to allow for one directed and one unknown unicast filter */
107216e5d7bfSAndrew Rybchenko #define	EFX_EF10_FILTER_UNICAST_FILTERS_MAX	2
107316e5d7bfSAndrew Rybchenko 
107416e5d7bfSAndrew Rybchenko /* Allow for the broadcast address to be added to the multicast list */
107516e5d7bfSAndrew Rybchenko #define	EFX_EF10_FILTER_MULTICAST_FILTERS_MAX	(EFX_MAC_MULTICAST_LIST_MAX + 1)
107616e5d7bfSAndrew Rybchenko 
1077f4e2f6a5SAndrew Rybchenko /*
1078f4e2f6a5SAndrew Rybchenko  * For encapsulated packets, there is one filter each for each combination of
1079f4e2f6a5SAndrew Rybchenko  * IPv4 or IPv6 outer frame, VXLAN, GENEVE or NVGRE packet type, and unicast or
1080f4e2f6a5SAndrew Rybchenko  * multicast inner frames.
1081f4e2f6a5SAndrew Rybchenko  */
1082f4e2f6a5SAndrew Rybchenko #define	EFX_EF10_FILTER_ENCAP_FILTERS_MAX	12
1083f4e2f6a5SAndrew Rybchenko 
108416e5d7bfSAndrew Rybchenko typedef struct ef10_filter_table_s {
108516e5d7bfSAndrew Rybchenko 	ef10_filter_entry_t	eft_entry[EFX_EF10_FILTER_TBL_ROWS];
108616e5d7bfSAndrew Rybchenko 	efx_rxq_t		*eft_default_rxq;
108716e5d7bfSAndrew Rybchenko 	boolean_t		eft_using_rss;
108816e5d7bfSAndrew Rybchenko 	uint32_t		eft_unicst_filter_indexes[
108916e5d7bfSAndrew Rybchenko 	    EFX_EF10_FILTER_UNICAST_FILTERS_MAX];
109075fed2ceSAndrew Rybchenko 	uint32_t		eft_unicst_filter_count;
109116e5d7bfSAndrew Rybchenko 	uint32_t		eft_mulcst_filter_indexes[
109216e5d7bfSAndrew Rybchenko 	    EFX_EF10_FILTER_MULTICAST_FILTERS_MAX];
109316e5d7bfSAndrew Rybchenko 	uint32_t		eft_mulcst_filter_count;
109416e5d7bfSAndrew Rybchenko 	boolean_t		eft_using_all_mulcst;
1095f4e2f6a5SAndrew Rybchenko 	uint32_t		eft_encap_filter_indexes[
1096f4e2f6a5SAndrew Rybchenko 	    EFX_EF10_FILTER_ENCAP_FILTERS_MAX];
1097f4e2f6a5SAndrew Rybchenko 	uint32_t		eft_encap_filter_count;
109816e5d7bfSAndrew Rybchenko } ef10_filter_table_t;
109916e5d7bfSAndrew Rybchenko 
110016e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
110116e5d7bfSAndrew Rybchenko ef10_filter_init(
110216e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
110316e5d7bfSAndrew Rybchenko 
110416e5d7bfSAndrew Rybchenko 			void
110516e5d7bfSAndrew Rybchenko ef10_filter_fini(
110616e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
110716e5d7bfSAndrew Rybchenko 
110816e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
110916e5d7bfSAndrew Rybchenko ef10_filter_restore(
111016e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
111116e5d7bfSAndrew Rybchenko 
111216e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
111316e5d7bfSAndrew Rybchenko ef10_filter_add(
111416e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
111516e5d7bfSAndrew Rybchenko 	__inout		efx_filter_spec_t *spec,
111616e5d7bfSAndrew Rybchenko 	__in		boolean_t may_replace);
111716e5d7bfSAndrew Rybchenko 
111816e5d7bfSAndrew Rybchenko 	__checkReturn	efx_rc_t
111916e5d7bfSAndrew Rybchenko ef10_filter_delete(
112016e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
112116e5d7bfSAndrew Rybchenko 	__inout		efx_filter_spec_t *spec);
112216e5d7bfSAndrew Rybchenko 
112316e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
112416e5d7bfSAndrew Rybchenko ef10_filter_supported_filters(
112516e5d7bfSAndrew Rybchenko 	__in				efx_nic_t *enp,
112663492ab8SAndrew Rybchenko 	__out_ecount(buffer_length)	uint32_t *buffer,
112763492ab8SAndrew Rybchenko 	__in				size_t buffer_length,
112863492ab8SAndrew Rybchenko 	__out				size_t *list_lengthp);
112916e5d7bfSAndrew Rybchenko 
113016e5d7bfSAndrew Rybchenko extern	__checkReturn	efx_rc_t
113116e5d7bfSAndrew Rybchenko ef10_filter_reconfigure(
113216e5d7bfSAndrew Rybchenko 	__in				efx_nic_t *enp,
113316e5d7bfSAndrew Rybchenko 	__in_ecount(6)			uint8_t const *mac_addr,
113416e5d7bfSAndrew Rybchenko 	__in				boolean_t all_unicst,
113516e5d7bfSAndrew Rybchenko 	__in				boolean_t mulcst,
113616e5d7bfSAndrew Rybchenko 	__in				boolean_t all_mulcst,
113716e5d7bfSAndrew Rybchenko 	__in				boolean_t brdcst,
113816e5d7bfSAndrew Rybchenko 	__in_ecount(6*count)		uint8_t const *addrs,
113916e5d7bfSAndrew Rybchenko 	__in				uint32_t count);
114016e5d7bfSAndrew Rybchenko 
114116e5d7bfSAndrew Rybchenko extern		void
114216e5d7bfSAndrew Rybchenko ef10_filter_get_default_rxq(
114316e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
114416e5d7bfSAndrew Rybchenko 	__out		efx_rxq_t **erpp,
114516e5d7bfSAndrew Rybchenko 	__out		boolean_t *using_rss);
114616e5d7bfSAndrew Rybchenko 
114716e5d7bfSAndrew Rybchenko extern		void
114816e5d7bfSAndrew Rybchenko ef10_filter_default_rxq_set(
114916e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp,
115016e5d7bfSAndrew Rybchenko 	__in		efx_rxq_t *erp,
115116e5d7bfSAndrew Rybchenko 	__in		boolean_t using_rss);
115216e5d7bfSAndrew Rybchenko 
115316e5d7bfSAndrew Rybchenko extern		void
115416e5d7bfSAndrew Rybchenko ef10_filter_default_rxq_clear(
115516e5d7bfSAndrew Rybchenko 	__in		efx_nic_t *enp);
115616e5d7bfSAndrew Rybchenko 
115716e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_FILTER */
115816e5d7bfSAndrew Rybchenko 
115916e5d7bfSAndrew Rybchenko extern	__checkReturn			efx_rc_t
116016e5d7bfSAndrew Rybchenko efx_mcdi_get_function_info(
116116e5d7bfSAndrew Rybchenko 	__in				efx_nic_t *enp,
116216e5d7bfSAndrew Rybchenko 	__out				uint32_t *pfp,
116316e5d7bfSAndrew Rybchenko 	__out_opt			uint32_t *vfp);
116416e5d7bfSAndrew Rybchenko 
116516e5d7bfSAndrew Rybchenko extern	__checkReturn		efx_rc_t
116616e5d7bfSAndrew Rybchenko efx_mcdi_privilege_mask(
116716e5d7bfSAndrew Rybchenko 	__in			efx_nic_t *enp,
116816e5d7bfSAndrew Rybchenko 	__in			uint32_t pf,
116916e5d7bfSAndrew Rybchenko 	__in			uint32_t vf,
117016e5d7bfSAndrew Rybchenko 	__out			uint32_t *maskp);
117116e5d7bfSAndrew Rybchenko 
1172cfa023ebSAndrew Rybchenko extern	__checkReturn	efx_rc_t
1173cfa023ebSAndrew Rybchenko efx_mcdi_get_port_assignment(
1174cfa023ebSAndrew Rybchenko 	__in		efx_nic_t *enp,
1175cfa023ebSAndrew Rybchenko 	__out		uint32_t *portp);
1176cfa023ebSAndrew Rybchenko 
1177cfa023ebSAndrew Rybchenko extern	__checkReturn	efx_rc_t
1178cfa023ebSAndrew Rybchenko efx_mcdi_get_port_modes(
1179cfa023ebSAndrew Rybchenko 	__in		efx_nic_t *enp,
1180f6d61784SAndrew Rybchenko 	__out		uint32_t *modesp,
1181cd5e3371SAndrew Rybchenko 	__out_opt	uint32_t *current_modep,
1182cd5e3371SAndrew Rybchenko 	__out_opt	uint32_t *default_modep);
1183f6d61784SAndrew Rybchenko 
1184f6d61784SAndrew Rybchenko extern	__checkReturn	efx_rc_t
1185f6d61784SAndrew Rybchenko ef10_nic_get_port_mode_bandwidth(
1186c42b6a35SAndrew Rybchenko 	__in		efx_nic_t *enp,
1187f6d61784SAndrew Rybchenko 	__out		uint32_t *bandwidth_mbpsp);
1188cfa023ebSAndrew Rybchenko 
1189cfa023ebSAndrew Rybchenko extern	__checkReturn	efx_rc_t
1190cfa023ebSAndrew Rybchenko efx_mcdi_get_mac_address_pf(
1191cfa023ebSAndrew Rybchenko 	__in			efx_nic_t *enp,
1192cfa023ebSAndrew Rybchenko 	__out_ecount_opt(6)	uint8_t mac_addrp[6]);
1193cfa023ebSAndrew Rybchenko 
1194cfa023ebSAndrew Rybchenko extern	__checkReturn	efx_rc_t
1195cfa023ebSAndrew Rybchenko efx_mcdi_get_mac_address_vf(
1196cfa023ebSAndrew Rybchenko 	__in			efx_nic_t *enp,
1197cfa023ebSAndrew Rybchenko 	__out_ecount_opt(6)	uint8_t mac_addrp[6]);
1198cfa023ebSAndrew Rybchenko 
1199cfa023ebSAndrew Rybchenko extern	__checkReturn	efx_rc_t
1200cfa023ebSAndrew Rybchenko efx_mcdi_get_clock(
1201cfa023ebSAndrew Rybchenko 	__in		efx_nic_t *enp,
120278e5c87cSAndrew Rybchenko 	__out		uint32_t *sys_freqp,
120378e5c87cSAndrew Rybchenko 	__out		uint32_t *dpcpu_freqp);
120478e5c87cSAndrew Rybchenko 
1205cfa023ebSAndrew Rybchenko extern	__checkReturn	efx_rc_t
120645becd76SAndrew Rybchenko efx_mcdi_get_rxdp_config(
120745becd76SAndrew Rybchenko 	__in		efx_nic_t *enp,
120845becd76SAndrew Rybchenko 	__out		uint32_t *end_paddingp);
120945becd76SAndrew Rybchenko 
121045becd76SAndrew Rybchenko extern	__checkReturn	efx_rc_t
1211cfa023ebSAndrew Rybchenko efx_mcdi_get_vector_cfg(
1212cfa023ebSAndrew Rybchenko 	__in		efx_nic_t *enp,
1213cfa023ebSAndrew Rybchenko 	__out_opt	uint32_t *vec_basep,
1214cfa023ebSAndrew Rybchenko 	__out_opt	uint32_t *pf_nvecp,
1215cfa023ebSAndrew Rybchenko 	__out_opt	uint32_t *vf_nvecp);
1216cfa023ebSAndrew Rybchenko 
1217cfa023ebSAndrew Rybchenko extern	__checkReturn		efx_rc_t
121880af6f26SAndrew Rybchenko ef10_get_privilege_mask(
121980af6f26SAndrew Rybchenko 	__in			efx_nic_t *enp,
122080af6f26SAndrew Rybchenko 	__out			uint32_t *maskp);
122180af6f26SAndrew Rybchenko 
122217bcc056SAndrew Rybchenko #if EFSYS_OPT_FW_SUBVARIANT_AWARE
122317bcc056SAndrew Rybchenko 
122417bcc056SAndrew Rybchenko extern	__checkReturn	efx_rc_t
122517bcc056SAndrew Rybchenko efx_mcdi_get_nic_global(
122617bcc056SAndrew Rybchenko 	__in		efx_nic_t *enp,
122717bcc056SAndrew Rybchenko 	__in		uint32_t key,
122817bcc056SAndrew Rybchenko 	__out		uint32_t *valuep);
122917bcc056SAndrew Rybchenko 
123017bcc056SAndrew Rybchenko extern	__checkReturn	efx_rc_t
123117bcc056SAndrew Rybchenko efx_mcdi_set_nic_global(
123217bcc056SAndrew Rybchenko 	__in		efx_nic_t *enp,
123317bcc056SAndrew Rybchenko 	__in		uint32_t key,
123417bcc056SAndrew Rybchenko 	__in		uint32_t value);
123517bcc056SAndrew Rybchenko 
123617bcc056SAndrew Rybchenko #endif	/* EFSYS_OPT_FW_SUBVARIANT_AWARE */
123717bcc056SAndrew Rybchenko 
12388e0c4827SAndrew Rybchenko #if EFSYS_OPT_RX_PACKED_STREAM
12398e0c4827SAndrew Rybchenko 
12408e0c4827SAndrew Rybchenko /* Data space per credit in packed stream mode */
12418e0c4827SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_MEM_PER_CREDIT (1 << 16)
12428e0c4827SAndrew Rybchenko 
12438e0c4827SAndrew Rybchenko /*
12448e0c4827SAndrew Rybchenko  * Received packets are always aligned at this boundary. Also there always
12458e0c4827SAndrew Rybchenko  * exists a gap of this size between packets.
12468e0c4827SAndrew Rybchenko  * (see SF-112241-TC, 4.5)
12478e0c4827SAndrew Rybchenko  */
12488e0c4827SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_ALIGNMENT 64
12498e0c4827SAndrew Rybchenko 
12508e0c4827SAndrew Rybchenko /*
12518e0c4827SAndrew Rybchenko  * Size of a pseudo-header prepended to received packets
12528e0c4827SAndrew Rybchenko  * in packed stream mode
12538e0c4827SAndrew Rybchenko  */
12548e0c4827SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE 8
12558e0c4827SAndrew Rybchenko 
12568e0c4827SAndrew Rybchenko /* Minimum space for packet in packed stream mode */
12578e0c4827SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_MIN_PACKET_SPACE		\
1258*ec30f0beSAndrew Rybchenko 	EFX_P2ROUNDUP(size_t,				\
1259*ec30f0beSAndrew Rybchenko 	    EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE +	\
12608e0c4827SAndrew Rybchenko 	    EFX_MAC_PDU_MIN +				\
12618e0c4827SAndrew Rybchenko 	    EFX_RX_PACKED_STREAM_ALIGNMENT,		\
12628e0c4827SAndrew Rybchenko 	    EFX_RX_PACKED_STREAM_ALIGNMENT)
12638e0c4827SAndrew Rybchenko 
12648e0c4827SAndrew Rybchenko /* Maximum number of credits */
12658e0c4827SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_MAX_CREDITS 127
12668e0c4827SAndrew Rybchenko 
12678e0c4827SAndrew Rybchenko #endif /* EFSYS_OPT_RX_PACKED_STREAM */
12685f5c71ccSAndrew Rybchenko 
126904381b5eSAndrew Rybchenko #if EFSYS_OPT_RX_ES_SUPER_BUFFER
127004381b5eSAndrew Rybchenko 
127104381b5eSAndrew Rybchenko /*
127204381b5eSAndrew Rybchenko  * Maximum DMA length and buffer stride alignment.
127304381b5eSAndrew Rybchenko  * (see SF-119419-TC, 3.2)
127404381b5eSAndrew Rybchenko  */
127504381b5eSAndrew Rybchenko #define	EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT	64
127604381b5eSAndrew Rybchenko 
127704381b5eSAndrew Rybchenko #endif
127804381b5eSAndrew Rybchenko 
12795f5c71ccSAndrew Rybchenko #ifdef	__cplusplus
12805f5c71ccSAndrew Rybchenko }
12815f5c71ccSAndrew Rybchenko #endif
12825f5c71ccSAndrew Rybchenko 
12835f5c71ccSAndrew Rybchenko #endif	/* _SYS_EF10_IMPL_H */
1284