xref: /dpdk/drivers/common/sfc_efx/base/rhead_impl.h (revision e7ea5f304f0f7f433b4d60b21db7beec225c2123)
13c1c5cc4SAndrew Rybchenko /* SPDX-License-Identifier: BSD-3-Clause
23c1c5cc4SAndrew Rybchenko  *
3672386c1SAndrew Rybchenko  * Copyright(c) 2019-2021 Xilinx, Inc.
43c1c5cc4SAndrew Rybchenko  * Copyright(c) 2018-2019 Solarflare Communications Inc.
53c1c5cc4SAndrew Rybchenko  */
63c1c5cc4SAndrew Rybchenko 
73c1c5cc4SAndrew Rybchenko #ifndef	_SYS_RHEAD_IMPL_H
83c1c5cc4SAndrew Rybchenko #define	_SYS_RHEAD_IMPL_H
93c1c5cc4SAndrew Rybchenko 
103c1c5cc4SAndrew Rybchenko #ifdef	__cplusplus
113c1c5cc4SAndrew Rybchenko extern "C" {
123c1c5cc4SAndrew Rybchenko #endif
133c1c5cc4SAndrew Rybchenko 
143c1c5cc4SAndrew Rybchenko 
15b97bf1caSAndrew Rybchenko /*
16b97bf1caSAndrew Rybchenko  * Riverhead requires physically contiguous event rings (so, just one
17b97bf1caSAndrew Rybchenko  * DMA address is sufficient to represent it), but MCDI interface is still
18b97bf1caSAndrew Rybchenko  * in terms of 4k size 4k-aligned DMA buffers.
19b97bf1caSAndrew Rybchenko  */
20b97bf1caSAndrew Rybchenko #define	RHEAD_EVQ_MAXNBUFS	32
21b97bf1caSAndrew Rybchenko 
223c1c5cc4SAndrew Rybchenko #define	RHEAD_EVQ_MAXNEVS	16384
233c1c5cc4SAndrew Rybchenko #define	RHEAD_EVQ_MINNEVS	256
243c1c5cc4SAndrew Rybchenko 
253c1c5cc4SAndrew Rybchenko #define	RHEAD_RXQ_MAXNDESCS	16384
263c1c5cc4SAndrew Rybchenko #define	RHEAD_RXQ_MINNDESCS	256
273c1c5cc4SAndrew Rybchenko 
283c1c5cc4SAndrew Rybchenko #define	RHEAD_TXQ_MAXNDESCS	16384
293c1c5cc4SAndrew Rybchenko #define	RHEAD_TXQ_MINNDESCS	256
303c1c5cc4SAndrew Rybchenko 
313c1c5cc4SAndrew Rybchenko #define	RHEAD_EVQ_DESC_SIZE	(sizeof (efx_qword_t))
323c1c5cc4SAndrew Rybchenko #define	RHEAD_RXQ_DESC_SIZE	(sizeof (efx_qword_t))
333c1c5cc4SAndrew Rybchenko #define	RHEAD_TXQ_DESC_SIZE	(sizeof (efx_oword_t))
343c1c5cc4SAndrew Rybchenko 
35f8a60f76SAndy Moreton #if EFSYS_OPT_EV_EXTENDED_WIDTH
36f8a60f76SAndy Moreton #define	RHEAD_EVQ_EW_DESC_SIZE	(sizeof (efx_xword_t))
37f8a60f76SAndy Moreton #endif
38f8a60f76SAndy Moreton 
393c1c5cc4SAndrew Rybchenko 
403c1c5cc4SAndrew Rybchenko /* NIC */
413c1c5cc4SAndrew Rybchenko 
423c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
433c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
443c1c5cc4SAndrew Rybchenko rhead_board_cfg(
453c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
463c1c5cc4SAndrew Rybchenko 
473c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
483c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
493c1c5cc4SAndrew Rybchenko rhead_nic_probe(
503c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
513c1c5cc4SAndrew Rybchenko 
523c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
533c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
543c1c5cc4SAndrew Rybchenko rhead_nic_set_drv_limits(
553c1c5cc4SAndrew Rybchenko 	__inout		efx_nic_t *enp,
563c1c5cc4SAndrew Rybchenko 	__in		efx_drv_limits_t *edlp);
573c1c5cc4SAndrew Rybchenko 
583c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
593c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
603c1c5cc4SAndrew Rybchenko rhead_nic_get_vi_pool(
613c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp,
623c1c5cc4SAndrew Rybchenko 	__out		uint32_t *vi_countp);
633c1c5cc4SAndrew Rybchenko 
643c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
653c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
663c1c5cc4SAndrew Rybchenko rhead_nic_get_bar_region(
673c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp,
683c1c5cc4SAndrew Rybchenko 	__in		efx_nic_region_t region,
693c1c5cc4SAndrew Rybchenko 	__out		uint32_t *offsetp,
703c1c5cc4SAndrew Rybchenko 	__out		size_t *sizep);
713c1c5cc4SAndrew Rybchenko 
723c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
733c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
743c1c5cc4SAndrew Rybchenko rhead_nic_reset(
753c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
763c1c5cc4SAndrew Rybchenko 
773c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
783c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
793c1c5cc4SAndrew Rybchenko rhead_nic_init(
803c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
813c1c5cc4SAndrew Rybchenko 
823c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
833c1c5cc4SAndrew Rybchenko extern	__checkReturn	boolean_t
843c1c5cc4SAndrew Rybchenko rhead_nic_hw_unavailable(
853c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
863c1c5cc4SAndrew Rybchenko 
873c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
883c1c5cc4SAndrew Rybchenko extern			void
893c1c5cc4SAndrew Rybchenko rhead_nic_set_hw_unavailable(
903c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
913c1c5cc4SAndrew Rybchenko 
923c1c5cc4SAndrew Rybchenko #if EFSYS_OPT_DIAG
933c1c5cc4SAndrew Rybchenko 
943c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
953c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
963c1c5cc4SAndrew Rybchenko rhead_nic_register_test(
973c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
983c1c5cc4SAndrew Rybchenko 
993c1c5cc4SAndrew Rybchenko #endif	/* EFSYS_OPT_DIAG */
1003c1c5cc4SAndrew Rybchenko 
1013c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
1023c1c5cc4SAndrew Rybchenko extern			void
1033c1c5cc4SAndrew Rybchenko rhead_nic_fini(
1043c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
1053c1c5cc4SAndrew Rybchenko 
1063c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
1073c1c5cc4SAndrew Rybchenko extern			void
1083c1c5cc4SAndrew Rybchenko rhead_nic_unprobe(
1093c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
1103c1c5cc4SAndrew Rybchenko 
1113c1c5cc4SAndrew Rybchenko 
112b97bf1caSAndrew Rybchenko /* EV */
113b97bf1caSAndrew Rybchenko 
114b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL
115b97bf1caSAndrew Rybchenko extern	__checkReturn	efx_rc_t
116b97bf1caSAndrew Rybchenko rhead_ev_init(
117b97bf1caSAndrew Rybchenko 	__in		efx_nic_t *enp);
118b97bf1caSAndrew Rybchenko 
119b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL
120b97bf1caSAndrew Rybchenko extern			void
121b97bf1caSAndrew Rybchenko rhead_ev_fini(
122b97bf1caSAndrew Rybchenko 	__in		efx_nic_t *enp);
123b97bf1caSAndrew Rybchenko 
124b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL
125b97bf1caSAndrew Rybchenko extern	__checkReturn	efx_rc_t
126b97bf1caSAndrew Rybchenko rhead_ev_qcreate(
127b97bf1caSAndrew Rybchenko 	__in		efx_nic_t *enp,
128b97bf1caSAndrew Rybchenko 	__in		unsigned int index,
129b97bf1caSAndrew Rybchenko 	__in		efsys_mem_t *esmp,
130b97bf1caSAndrew Rybchenko 	__in		size_t ndescs,
131b97bf1caSAndrew Rybchenko 	__in		uint32_t id,
132b97bf1caSAndrew Rybchenko 	__in		uint32_t us,
133b97bf1caSAndrew Rybchenko 	__in		uint32_t flags,
134aa6dc101SAndrew Rybchenko 	__in		uint32_t irq,
135b97bf1caSAndrew Rybchenko 	__in		efx_evq_t *eep);
136b97bf1caSAndrew Rybchenko 
137b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL
138b97bf1caSAndrew Rybchenko extern			void
139b97bf1caSAndrew Rybchenko rhead_ev_qdestroy(
140b97bf1caSAndrew Rybchenko 	__in		efx_evq_t *eep);
141b97bf1caSAndrew Rybchenko 
142b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL
143b97bf1caSAndrew Rybchenko extern	__checkReturn	efx_rc_t
144b97bf1caSAndrew Rybchenko rhead_ev_qprime(
145b97bf1caSAndrew Rybchenko 	__in		efx_evq_t *eep,
146b97bf1caSAndrew Rybchenko 	__in		unsigned int count);
147b97bf1caSAndrew Rybchenko 
148b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL
149b97bf1caSAndrew Rybchenko extern			void
150b97bf1caSAndrew Rybchenko rhead_ev_qpost(
151b97bf1caSAndrew Rybchenko 	__in	efx_evq_t *eep,
152b97bf1caSAndrew Rybchenko 	__in	uint16_t data);
153b97bf1caSAndrew Rybchenko 
154b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL
155b97bf1caSAndrew Rybchenko extern			void
156b97bf1caSAndrew Rybchenko rhead_ev_qpoll(
157b97bf1caSAndrew Rybchenko 	__in		efx_evq_t *eep,
158b97bf1caSAndrew Rybchenko 	__inout		unsigned int *countp,
159b97bf1caSAndrew Rybchenko 	__in		const efx_ev_callbacks_t *eecp,
160b97bf1caSAndrew Rybchenko 	__in_opt	void *arg);
161b97bf1caSAndrew Rybchenko 
162b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL
163b97bf1caSAndrew Rybchenko extern	__checkReturn	efx_rc_t
164b97bf1caSAndrew Rybchenko rhead_ev_qmoderate(
165b97bf1caSAndrew Rybchenko 	__in		efx_evq_t *eep,
166b97bf1caSAndrew Rybchenko 	__in		unsigned int us);
167b97bf1caSAndrew Rybchenko 
168b97bf1caSAndrew Rybchenko #if EFSYS_OPT_QSTATS
169b97bf1caSAndrew Rybchenko 
170b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL
171b97bf1caSAndrew Rybchenko extern			void
172b97bf1caSAndrew Rybchenko rhead_ev_qstats_update(
173b97bf1caSAndrew Rybchenko 	__in				efx_evq_t *eep,
174b97bf1caSAndrew Rybchenko 	__inout_ecount(EV_NQSTATS)	efsys_stat_t *stat);
175b97bf1caSAndrew Rybchenko 
176b97bf1caSAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */
177b97bf1caSAndrew Rybchenko 
178b97bf1caSAndrew Rybchenko 
17990ff7b9bSAndrew Rybchenko /* INTR */
18090ff7b9bSAndrew Rybchenko 
18190ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL
18290ff7b9bSAndrew Rybchenko extern	__checkReturn	efx_rc_t
18390ff7b9bSAndrew Rybchenko rhead_intr_init(
18490ff7b9bSAndrew Rybchenko 	__in		efx_nic_t *enp,
18590ff7b9bSAndrew Rybchenko 	__in		efx_intr_type_t type,
18690ff7b9bSAndrew Rybchenko 	__in		efsys_mem_t *esmp);
18790ff7b9bSAndrew Rybchenko 
18890ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL
18990ff7b9bSAndrew Rybchenko extern			void
19090ff7b9bSAndrew Rybchenko rhead_intr_enable(
19190ff7b9bSAndrew Rybchenko 	__in		efx_nic_t *enp);
19290ff7b9bSAndrew Rybchenko 
19390ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL
19490ff7b9bSAndrew Rybchenko extern			void
19590ff7b9bSAndrew Rybchenko rhead_intr_disable(
19690ff7b9bSAndrew Rybchenko 	__in		efx_nic_t *enp);
19790ff7b9bSAndrew Rybchenko 
19890ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL
19990ff7b9bSAndrew Rybchenko extern			void
20090ff7b9bSAndrew Rybchenko rhead_intr_disable_unlocked(
20190ff7b9bSAndrew Rybchenko 	__in		efx_nic_t *enp);
20290ff7b9bSAndrew Rybchenko 
20390ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL
20490ff7b9bSAndrew Rybchenko extern	__checkReturn	efx_rc_t
20590ff7b9bSAndrew Rybchenko rhead_intr_trigger(
20690ff7b9bSAndrew Rybchenko 	__in		efx_nic_t *enp,
20790ff7b9bSAndrew Rybchenko 	__in		unsigned int level);
20890ff7b9bSAndrew Rybchenko 
20990ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL
21090ff7b9bSAndrew Rybchenko extern			void
21190ff7b9bSAndrew Rybchenko rhead_intr_status_line(
21290ff7b9bSAndrew Rybchenko 	__in		efx_nic_t *enp,
21390ff7b9bSAndrew Rybchenko 	__out		boolean_t *fatalp,
21490ff7b9bSAndrew Rybchenko 	__out		uint32_t *qmaskp);
21590ff7b9bSAndrew Rybchenko 
21690ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL
21790ff7b9bSAndrew Rybchenko extern			void
21890ff7b9bSAndrew Rybchenko rhead_intr_status_message(
21990ff7b9bSAndrew Rybchenko 	__in		efx_nic_t *enp,
22090ff7b9bSAndrew Rybchenko 	__in		unsigned int message,
22190ff7b9bSAndrew Rybchenko 	__out		boolean_t *fatalp);
22290ff7b9bSAndrew Rybchenko 
22390ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL
22490ff7b9bSAndrew Rybchenko extern			void
22590ff7b9bSAndrew Rybchenko rhead_intr_fatal(
22690ff7b9bSAndrew Rybchenko 	__in		efx_nic_t *enp);
22790ff7b9bSAndrew Rybchenko 
22890ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL
22990ff7b9bSAndrew Rybchenko extern			void
23090ff7b9bSAndrew Rybchenko rhead_intr_fini(
23190ff7b9bSAndrew Rybchenko 	__in		efx_nic_t *enp);
23290ff7b9bSAndrew Rybchenko 
23390ff7b9bSAndrew Rybchenko 
234b6b29352SAndrew Rybchenko /* RX */
235b6b29352SAndrew Rybchenko 
236b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
237b6b29352SAndrew Rybchenko extern	__checkReturn	efx_rc_t
238b6b29352SAndrew Rybchenko rhead_rx_init(
239b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp);
240b6b29352SAndrew Rybchenko 
241b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
242b6b29352SAndrew Rybchenko extern			void
243b6b29352SAndrew Rybchenko rhead_rx_fini(
244b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp);
245b6b29352SAndrew Rybchenko 
246b6b29352SAndrew Rybchenko #if EFSYS_OPT_RX_SCATTER
247b6b29352SAndrew Rybchenko 
248b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
249b6b29352SAndrew Rybchenko extern	__checkReturn	efx_rc_t
250b6b29352SAndrew Rybchenko rhead_rx_scatter_enable(
251b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp,
252b6b29352SAndrew Rybchenko 	__in		unsigned int buf_size);
253b6b29352SAndrew Rybchenko 
254b6b29352SAndrew Rybchenko #endif	/* EFSYS_OPT_RX_SCATTER */
255b6b29352SAndrew Rybchenko 
256b6b29352SAndrew Rybchenko #if EFSYS_OPT_RX_SCALE
257b6b29352SAndrew Rybchenko 
258b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
259b6b29352SAndrew Rybchenko extern	__checkReturn	efx_rc_t
260b6b29352SAndrew Rybchenko rhead_rx_scale_context_alloc(
261b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp,
262b6b29352SAndrew Rybchenko 	__in		efx_rx_scale_context_type_t type,
263b6b29352SAndrew Rybchenko 	__in		uint32_t num_queues,
264*e7ea5f30SIvan Malov 	__in		uint32_t table_nentries,
265b6b29352SAndrew Rybchenko 	__out		uint32_t *rss_contextp);
266b6b29352SAndrew Rybchenko 
267b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
268b6b29352SAndrew Rybchenko extern	__checkReturn	efx_rc_t
269b6b29352SAndrew Rybchenko rhead_rx_scale_context_free(
270b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp,
271b6b29352SAndrew Rybchenko 	__in		uint32_t rss_context);
272b6b29352SAndrew Rybchenko 
273b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
274b6b29352SAndrew Rybchenko extern	__checkReturn	efx_rc_t
275b6b29352SAndrew Rybchenko rhead_rx_scale_mode_set(
276b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp,
277b6b29352SAndrew Rybchenko 	__in		uint32_t rss_context,
278b6b29352SAndrew Rybchenko 	__in		efx_rx_hash_alg_t alg,
279b6b29352SAndrew Rybchenko 	__in		efx_rx_hash_type_t type,
280b6b29352SAndrew Rybchenko 	__in		boolean_t insert);
281b6b29352SAndrew Rybchenko 
282b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
283b6b29352SAndrew Rybchenko extern	__checkReturn	efx_rc_t
284b6b29352SAndrew Rybchenko rhead_rx_scale_key_set(
285b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp,
286b6b29352SAndrew Rybchenko 	__in		uint32_t rss_context,
287b6b29352SAndrew Rybchenko 	__in_ecount(n)	uint8_t *key,
288b6b29352SAndrew Rybchenko 	__in		size_t n);
289b6b29352SAndrew Rybchenko 
290b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
291b6b29352SAndrew Rybchenko extern	__checkReturn		efx_rc_t
292b6b29352SAndrew Rybchenko rhead_rx_scale_tbl_set(
293b6b29352SAndrew Rybchenko 	__in			efx_nic_t *enp,
294b6b29352SAndrew Rybchenko 	__in			uint32_t rss_context,
2957a71c15dSIvan Malov 	__in_ecount(nentries)	unsigned int *table,
2967a71c15dSIvan Malov 	__in			size_t nentries);
297b6b29352SAndrew Rybchenko 
298b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
299b6b29352SAndrew Rybchenko extern	__checkReturn	uint32_t
300b6b29352SAndrew Rybchenko rhead_rx_prefix_hash(
301b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp,
302b6b29352SAndrew Rybchenko 	__in		efx_rx_hash_alg_t func,
303b6b29352SAndrew Rybchenko 	__in		uint8_t *buffer);
304b6b29352SAndrew Rybchenko 
305b6b29352SAndrew Rybchenko #endif /* EFSYS_OPT_RX_SCALE */
306b6b29352SAndrew Rybchenko 
307b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
308b6b29352SAndrew Rybchenko extern	__checkReturn	efx_rc_t
309b6b29352SAndrew Rybchenko rhead_rx_prefix_pktlen(
310b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp,
311b6b29352SAndrew Rybchenko 	__in		uint8_t *buffer,
312b6b29352SAndrew Rybchenko 	__out		uint16_t *lengthp);
313b6b29352SAndrew Rybchenko 
314b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
315b6b29352SAndrew Rybchenko extern				void
316b6b29352SAndrew Rybchenko rhead_rx_qpost(
317b6b29352SAndrew Rybchenko 	__in			efx_rxq_t *erp,
318b6b29352SAndrew Rybchenko 	__in_ecount(ndescs)	efsys_dma_addr_t *addrp,
319b6b29352SAndrew Rybchenko 	__in			size_t size,
320b6b29352SAndrew Rybchenko 	__in			unsigned int ndescs,
321b6b29352SAndrew Rybchenko 	__in			unsigned int completed,
322b6b29352SAndrew Rybchenko 	__in			unsigned int added);
323b6b29352SAndrew Rybchenko 
324b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
325b6b29352SAndrew Rybchenko extern			void
326b6b29352SAndrew Rybchenko rhead_rx_qpush(
327b6b29352SAndrew Rybchenko 	__in		efx_rxq_t *erp,
328b6b29352SAndrew Rybchenko 	__in		unsigned int added,
329b6b29352SAndrew Rybchenko 	__inout		unsigned int *pushedp);
330b6b29352SAndrew Rybchenko 
331b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
332b6b29352SAndrew Rybchenko extern	__checkReturn	efx_rc_t
333b6b29352SAndrew Rybchenko rhead_rx_qflush(
334b6b29352SAndrew Rybchenko 	__in		efx_rxq_t *erp);
335b6b29352SAndrew Rybchenko 
336b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
337b6b29352SAndrew Rybchenko extern		void
338b6b29352SAndrew Rybchenko rhead_rx_qenable(
339b6b29352SAndrew Rybchenko 	__in		efx_rxq_t *erp);
340b6b29352SAndrew Rybchenko 
341b6b29352SAndrew Rybchenko union efx_rxq_type_data_u;
342b6b29352SAndrew Rybchenko 
343b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
344b6b29352SAndrew Rybchenko extern	__checkReturn	efx_rc_t
345b6b29352SAndrew Rybchenko rhead_rx_qcreate(
346b6b29352SAndrew Rybchenko 	__in		efx_nic_t *enp,
347b6b29352SAndrew Rybchenko 	__in		unsigned int index,
348b6b29352SAndrew Rybchenko 	__in		unsigned int label,
349b6b29352SAndrew Rybchenko 	__in		efx_rxq_type_t type,
350b6b29352SAndrew Rybchenko 	__in		const union efx_rxq_type_data_u *type_data,
351b6b29352SAndrew Rybchenko 	__in		efsys_mem_t *esmp,
352b6b29352SAndrew Rybchenko 	__in		size_t ndescs,
353b6b29352SAndrew Rybchenko 	__in		uint32_t id,
354b6b29352SAndrew Rybchenko 	__in		unsigned int flags,
355b6b29352SAndrew Rybchenko 	__in		efx_evq_t *eep,
356b6b29352SAndrew Rybchenko 	__in		efx_rxq_t *erp);
357b6b29352SAndrew Rybchenko 
358b6b29352SAndrew Rybchenko LIBEFX_INTERNAL
359b6b29352SAndrew Rybchenko extern			void
360b6b29352SAndrew Rybchenko rhead_rx_qdestroy(
361b6b29352SAndrew Rybchenko 	__in		efx_rxq_t *erp);
362b6b29352SAndrew Rybchenko 
363b6b29352SAndrew Rybchenko 
3644fd0181fSAndrew Rybchenko /* TX */
3654fd0181fSAndrew Rybchenko 
3664fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
3674fd0181fSAndrew Rybchenko extern	__checkReturn	efx_rc_t
3684fd0181fSAndrew Rybchenko rhead_tx_init(
3694fd0181fSAndrew Rybchenko 	__in		efx_nic_t *enp);
3704fd0181fSAndrew Rybchenko 
3714fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
3724fd0181fSAndrew Rybchenko extern			void
3734fd0181fSAndrew Rybchenko rhead_tx_fini(
3744fd0181fSAndrew Rybchenko 	__in		efx_nic_t *enp);
3754fd0181fSAndrew Rybchenko 
3764fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
3774fd0181fSAndrew Rybchenko extern	__checkReturn	efx_rc_t
3784fd0181fSAndrew Rybchenko rhead_tx_qcreate(
3794fd0181fSAndrew Rybchenko 	__in		efx_nic_t *enp,
3804fd0181fSAndrew Rybchenko 	__in		unsigned int index,
3814fd0181fSAndrew Rybchenko 	__in		unsigned int label,
3824fd0181fSAndrew Rybchenko 	__in		efsys_mem_t *esmp,
3834fd0181fSAndrew Rybchenko 	__in		size_t ndescs,
3844fd0181fSAndrew Rybchenko 	__in		uint32_t id,
3854fd0181fSAndrew Rybchenko 	__in		uint16_t flags,
3864fd0181fSAndrew Rybchenko 	__in		efx_evq_t *eep,
3874fd0181fSAndrew Rybchenko 	__in		efx_txq_t *etp,
3884fd0181fSAndrew Rybchenko 	__out		unsigned int *addedp);
3894fd0181fSAndrew Rybchenko 
3904fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
3914fd0181fSAndrew Rybchenko extern		void
3924fd0181fSAndrew Rybchenko rhead_tx_qdestroy(
3934fd0181fSAndrew Rybchenko 	__in		efx_txq_t *etp);
3944fd0181fSAndrew Rybchenko 
3954fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
3964fd0181fSAndrew Rybchenko extern	__checkReturn		efx_rc_t
3974fd0181fSAndrew Rybchenko rhead_tx_qpost(
3984fd0181fSAndrew Rybchenko 	__in			efx_txq_t *etp,
3994fd0181fSAndrew Rybchenko 	__in_ecount(ndescs)	efx_buffer_t *ebp,
4004fd0181fSAndrew Rybchenko 	__in			unsigned int ndescs,
4014fd0181fSAndrew Rybchenko 	__in			unsigned int completed,
4024fd0181fSAndrew Rybchenko 	__inout			unsigned int *addedp);
4034fd0181fSAndrew Rybchenko 
4044fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
4054fd0181fSAndrew Rybchenko extern			void
4064fd0181fSAndrew Rybchenko rhead_tx_qpush(
4074fd0181fSAndrew Rybchenko 	__in		efx_txq_t *etp,
4084fd0181fSAndrew Rybchenko 	__in		unsigned int added,
4094fd0181fSAndrew Rybchenko 	__in		unsigned int pushed);
4104fd0181fSAndrew Rybchenko 
4114fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
4124fd0181fSAndrew Rybchenko extern	__checkReturn	efx_rc_t
4134fd0181fSAndrew Rybchenko rhead_tx_qpace(
4144fd0181fSAndrew Rybchenko 	__in		efx_txq_t *etp,
4154fd0181fSAndrew Rybchenko 	__in		unsigned int ns);
4164fd0181fSAndrew Rybchenko 
4174fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
4184fd0181fSAndrew Rybchenko extern	__checkReturn	efx_rc_t
4194fd0181fSAndrew Rybchenko rhead_tx_qflush(
4204fd0181fSAndrew Rybchenko 	__in		efx_txq_t *etp);
4214fd0181fSAndrew Rybchenko 
4224fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
4234fd0181fSAndrew Rybchenko extern			void
4244fd0181fSAndrew Rybchenko rhead_tx_qenable(
4254fd0181fSAndrew Rybchenko 	__in		efx_txq_t *etp);
4264fd0181fSAndrew Rybchenko 
4274fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
4284fd0181fSAndrew Rybchenko extern	__checkReturn	efx_rc_t
4294fd0181fSAndrew Rybchenko rhead_tx_qdesc_post(
4304fd0181fSAndrew Rybchenko 	__in		efx_txq_t *etp,
4314fd0181fSAndrew Rybchenko 	__in_ecount(n)	efx_desc_t *ed,
4324fd0181fSAndrew Rybchenko 	__in		unsigned int n,
4334fd0181fSAndrew Rybchenko 	__in		unsigned int completed,
4344fd0181fSAndrew Rybchenko 	__inout		unsigned int *addedp);
4354fd0181fSAndrew Rybchenko 
4364fd0181fSAndrew Rybchenko #if EFSYS_OPT_QSTATS
4374fd0181fSAndrew Rybchenko 
4384fd0181fSAndrew Rybchenko LIBEFX_INTERNAL
4394fd0181fSAndrew Rybchenko extern			void
4404fd0181fSAndrew Rybchenko rhead_tx_qstats_update(
4414fd0181fSAndrew Rybchenko 	__in				efx_txq_t *etp,
4424fd0181fSAndrew Rybchenko 	__inout_ecount(TX_NQSTATS)	efsys_stat_t *stat);
4434fd0181fSAndrew Rybchenko 
4444fd0181fSAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */
4454fd0181fSAndrew Rybchenko 
446d874d2a1SIgor Romanov #if EFSYS_OPT_TUNNEL
447d874d2a1SIgor Romanov 
448d874d2a1SIgor Romanov LIBEFX_INTERNAL
449d874d2a1SIgor Romanov extern	__checkReturn	efx_rc_t
450d874d2a1SIgor Romanov rhead_tunnel_reconfigure(
451d874d2a1SIgor Romanov 	__in		efx_nic_t *enp);
452d874d2a1SIgor Romanov 
453d874d2a1SIgor Romanov LIBEFX_INTERNAL
454d874d2a1SIgor Romanov extern			void
455d874d2a1SIgor Romanov rhead_tunnel_fini(
456d874d2a1SIgor Romanov 	__in		efx_nic_t *enp);
457d874d2a1SIgor Romanov 
458d874d2a1SIgor Romanov #endif /* EFSYS_OPT_TUNNEL */
459d874d2a1SIgor Romanov 
460a45edfceSIgor Romanov #if EFSYS_OPT_PCI
461a45edfceSIgor Romanov 
462a45edfceSIgor Romanov /*
463a45edfceSIgor Romanov  * Perform discovery of function control window by looking for a
464a45edfceSIgor Romanov  * EF100 locator in Xilinx capabilities tables.
465a45edfceSIgor Romanov  */
466a45edfceSIgor Romanov LIBEFX_INTERNAL
467a45edfceSIgor Romanov extern	__checkReturn			efx_rc_t
468a45edfceSIgor Romanov rhead_pci_nic_membar_lookup(
469a45edfceSIgor Romanov 	__in				efsys_pci_config_t *espcp,
47007999984SIgor Romanov 	__in				const efx_pci_ops_t *epop,
471a45edfceSIgor Romanov 	__out				efx_bar_region_t *ebrp);
472a45edfceSIgor Romanov 
473a45edfceSIgor Romanov #endif /* EFSYS_OPT_PCI */
4744fd0181fSAndrew Rybchenko 
475ba9568b8SIgor Romanov LIBEFX_INTERNAL
476ba9568b8SIgor Romanov extern	__checkReturn			efx_rc_t
477ba9568b8SIgor Romanov rhead_nic_xilinx_cap_tbl_read_ef100_locator(
478ba9568b8SIgor Romanov 	__in				efsys_bar_t *esbp,
479ba9568b8SIgor Romanov 	__in				efsys_dma_addr_t offset,
480ba9568b8SIgor Romanov 	__out				efx_bar_region_t *ebrp);
481ba9568b8SIgor Romanov 
4824dda72dbSVijay Srivastava #if EFSYS_OPT_VIRTIO
4834dda72dbSVijay Srivastava 
4844dda72dbSVijay Srivastava LIBEFX_INTERNAL
4854dda72dbSVijay Srivastava extern	__checkReturn			efx_rc_t
4864dda72dbSVijay Srivastava rhead_virtio_qstart(
4874dda72dbSVijay Srivastava 	__in				efx_virtio_vq_t *evvp,
4884dda72dbSVijay Srivastava 	__in				efx_virtio_vq_cfg_t *evvcp,
4894dda72dbSVijay Srivastava 	__in_opt			efx_virtio_vq_dyncfg_t *evvdp);
4904dda72dbSVijay Srivastava 
4914dda72dbSVijay Srivastava LIBEFX_INTERNAL
4924dda72dbSVijay Srivastava extern	__checkReturn			efx_rc_t
4934dda72dbSVijay Srivastava rhead_virtio_qstop(
4944dda72dbSVijay Srivastava 	__in				efx_virtio_vq_t *evvp,
4954dda72dbSVijay Srivastava 	__out_opt			efx_virtio_vq_dyncfg_t *evvdp);
4964dda72dbSVijay Srivastava 
497ec03ce69SVijay Srivastava LIBEFX_INTERNAL
498ec03ce69SVijay Srivastava extern	__checkReturn			efx_rc_t
499ec03ce69SVijay Srivastava rhead_virtio_get_doorbell_offset(
500ec03ce69SVijay Srivastava 	__in				efx_virtio_vq_t *evvp,
501ec03ce69SVijay Srivastava 	__out				uint32_t *offsetp);
502ec03ce69SVijay Srivastava 
50346d2b38bSVijay Kumar Srivastava LIBEFX_INTERNAL
50446d2b38bSVijay Kumar Srivastava extern	__checkReturn			efx_rc_t
50546d2b38bSVijay Kumar Srivastava rhead_virtio_get_features(
50646d2b38bSVijay Kumar Srivastava 	__in				efx_nic_t *enp,
50746d2b38bSVijay Kumar Srivastava 	__in				efx_virtio_device_type_t type,
50846d2b38bSVijay Kumar Srivastava 	__out				uint64_t *featuresp);
50946d2b38bSVijay Kumar Srivastava 
510b8a896abSVijay Kumar Srivastava LIBEFX_INTERNAL
511b8a896abSVijay Kumar Srivastava extern	__checkReturn			efx_rc_t
512b8a896abSVijay Kumar Srivastava rhead_virtio_verify_features(
513b8a896abSVijay Kumar Srivastava 	__in				efx_nic_t *enp,
514b8a896abSVijay Kumar Srivastava 	__in				efx_virtio_device_type_t type,
515b8a896abSVijay Kumar Srivastava 	__in				uint64_t features);
516b8a896abSVijay Kumar Srivastava 
5174dda72dbSVijay Srivastava #endif /* EFSYS_OPT_VIRTIO */
5184dda72dbSVijay Srivastava 
5193c1c5cc4SAndrew Rybchenko #ifdef	__cplusplus
5203c1c5cc4SAndrew Rybchenko }
5213c1c5cc4SAndrew Rybchenko #endif
5223c1c5cc4SAndrew Rybchenko 
5233c1c5cc4SAndrew Rybchenko #endif	/* _SYS_RHEAD_IMPL_H */
524