xref: /dpdk/drivers/common/sfc_efx/base/ef10_impl.h (revision 35876819bd716ee9b94d2660f12aa847f2594a83)
15e111ed8SAndrew Rybchenko /* SPDX-License-Identifier: BSD-3-Clause
25e111ed8SAndrew Rybchenko  *
3672386c1SAndrew Rybchenko  * Copyright(c) 2019-2021 Xilinx, Inc.
45e111ed8SAndrew Rybchenko  * Copyright(c) 2015-2019 Solarflare Communications Inc.
55e111ed8SAndrew Rybchenko  */
65e111ed8SAndrew Rybchenko 
75e111ed8SAndrew Rybchenko #ifndef	_SYS_EF10_IMPL_H
85e111ed8SAndrew Rybchenko #define	_SYS_EF10_IMPL_H
95e111ed8SAndrew Rybchenko 
105e111ed8SAndrew Rybchenko #ifdef	__cplusplus
115e111ed8SAndrew Rybchenko extern "C" {
125e111ed8SAndrew Rybchenko #endif
135e111ed8SAndrew Rybchenko 
145e111ed8SAndrew Rybchenko #define	EF10_EVQ_MAXNEVS	32768
155e111ed8SAndrew Rybchenko #define	EF10_EVQ_MINNEVS	512
165e111ed8SAndrew Rybchenko 
175e111ed8SAndrew Rybchenko #define	EF10_RXQ_MAXNDESCS	4096
185e111ed8SAndrew Rybchenko #define	EF10_RXQ_MINNDESCS	512
195e111ed8SAndrew Rybchenko 
205e111ed8SAndrew Rybchenko #define	EF10_TXQ_MINNDESCS	512
215e111ed8SAndrew Rybchenko 
225e111ed8SAndrew Rybchenko #define	EF10_EVQ_DESC_SIZE	(sizeof (efx_qword_t))
235e111ed8SAndrew Rybchenko #define	EF10_RXQ_DESC_SIZE	(sizeof (efx_qword_t))
245e111ed8SAndrew Rybchenko #define	EF10_TXQ_DESC_SIZE	(sizeof (efx_qword_t))
255e111ed8SAndrew Rybchenko 
265e111ed8SAndrew Rybchenko /* Number of hardware EVQ buffers (for compile-time resource dimensions) */
275e111ed8SAndrew Rybchenko #define	EF10_EVQ_MAXNBUFS	(64)
285e111ed8SAndrew Rybchenko 
295e111ed8SAndrew Rybchenko /* Maximum independent of EFX_BUG35388_WORKAROUND. */
305e111ed8SAndrew Rybchenko #define	EF10_TXQ_MAXNBUFS	8
315e111ed8SAndrew Rybchenko 
325e111ed8SAndrew Rybchenko #if EFSYS_OPT_HUNTINGTON
335e111ed8SAndrew Rybchenko # if (EF10_EVQ_MAXNBUFS < HUNT_EVQ_MAXNBUFS)
345e111ed8SAndrew Rybchenko #  error "EF10_EVQ_MAXNBUFS too small"
355e111ed8SAndrew Rybchenko # endif
365e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_HUNTINGTON */
375e111ed8SAndrew Rybchenko #if EFSYS_OPT_MEDFORD
385e111ed8SAndrew Rybchenko # if (EF10_EVQ_MAXNBUFS < MEDFORD_EVQ_MAXNBUFS)
395e111ed8SAndrew Rybchenko #  error "EF10_EVQ_MAXNBUFS too small"
405e111ed8SAndrew Rybchenko # endif
415e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_MEDFORD */
425e111ed8SAndrew Rybchenko #if EFSYS_OPT_MEDFORD2
435e111ed8SAndrew Rybchenko # if (EF10_EVQ_MAXNBUFS < MEDFORD2_EVQ_MAXNBUFS)
445e111ed8SAndrew Rybchenko #  error "EF10_EVQ_MAXNBUFS too small"
455e111ed8SAndrew Rybchenko # endif
465e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_MEDFORD2 */
475e111ed8SAndrew Rybchenko 
485e111ed8SAndrew Rybchenko /* Number of hardware PIO buffers (for compile-time resource dimensions) */
495e111ed8SAndrew Rybchenko #define	EF10_MAX_PIOBUF_NBUFS	(16)
505e111ed8SAndrew Rybchenko 
515e111ed8SAndrew Rybchenko #if EFSYS_OPT_HUNTINGTON
525e111ed8SAndrew Rybchenko # if (EF10_MAX_PIOBUF_NBUFS < HUNT_PIOBUF_NBUFS)
535e111ed8SAndrew Rybchenko #  error "EF10_MAX_PIOBUF_NBUFS too small"
545e111ed8SAndrew Rybchenko # endif
555e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_HUNTINGTON */
565e111ed8SAndrew Rybchenko #if EFSYS_OPT_MEDFORD
575e111ed8SAndrew Rybchenko # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD_PIOBUF_NBUFS)
585e111ed8SAndrew Rybchenko #  error "EF10_MAX_PIOBUF_NBUFS too small"
595e111ed8SAndrew Rybchenko # endif
605e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_MEDFORD */
615e111ed8SAndrew Rybchenko #if EFSYS_OPT_MEDFORD2
625e111ed8SAndrew Rybchenko # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD2_PIOBUF_NBUFS)
635e111ed8SAndrew Rybchenko #  error "EF10_MAX_PIOBUF_NBUFS too small"
645e111ed8SAndrew Rybchenko # endif
655e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_MEDFORD2 */
665e111ed8SAndrew Rybchenko 
675e111ed8SAndrew Rybchenko 
685e111ed8SAndrew Rybchenko 
695e111ed8SAndrew Rybchenko /*
705e111ed8SAndrew Rybchenko  * FIXME: This is just a power of 2 which fits in an MCDI v1 message, and could
715e111ed8SAndrew Rybchenko  * possibly be increased, or the write size reported by newer firmware used
725e111ed8SAndrew Rybchenko  * instead.
735e111ed8SAndrew Rybchenko  */
745e111ed8SAndrew Rybchenko #define	EF10_NVRAM_CHUNK 0x80
755e111ed8SAndrew Rybchenko 
765e111ed8SAndrew Rybchenko /*
775e111ed8SAndrew Rybchenko  * Alignment requirement for value written to RX WPTR: the WPTR must be aligned
785e111ed8SAndrew Rybchenko  * to an 8 descriptor boundary.
795e111ed8SAndrew Rybchenko  */
805e111ed8SAndrew Rybchenko #define	EF10_RX_WPTR_ALIGN 8
815e111ed8SAndrew Rybchenko 
825e111ed8SAndrew Rybchenko /*
835e111ed8SAndrew Rybchenko  * Max byte offset into the packet the TCP header must start for the hardware
845e111ed8SAndrew Rybchenko  * to be able to parse the packet correctly.
855e111ed8SAndrew Rybchenko  */
865e111ed8SAndrew Rybchenko #define	EF10_TCP_HEADER_OFFSET_LIMIT	208
875e111ed8SAndrew Rybchenko 
885e111ed8SAndrew Rybchenko /* Invalid RSS context handle */
895e111ed8SAndrew Rybchenko #define	EF10_RSS_CONTEXT_INVALID	(0xffffffff)
905e111ed8SAndrew Rybchenko 
915e111ed8SAndrew Rybchenko 
925e111ed8SAndrew Rybchenko /* EV */
935e111ed8SAndrew Rybchenko 
945e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
955e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
965e111ed8SAndrew Rybchenko ef10_ev_init(
975e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
985e111ed8SAndrew Rybchenko 
995e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1005e111ed8SAndrew Rybchenko extern			void
1015e111ed8SAndrew Rybchenko ef10_ev_fini(
1025e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
1035e111ed8SAndrew Rybchenko 
1045e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1055e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
1065e111ed8SAndrew Rybchenko ef10_ev_qcreate(
1075e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
1085e111ed8SAndrew Rybchenko 	__in		unsigned int index,
1095e111ed8SAndrew Rybchenko 	__in		efsys_mem_t *esmp,
1105e111ed8SAndrew Rybchenko 	__in		size_t ndescs,
1115e111ed8SAndrew Rybchenko 	__in		uint32_t id,
1125e111ed8SAndrew Rybchenko 	__in		uint32_t us,
1135e111ed8SAndrew Rybchenko 	__in		uint32_t flags,
114aa6dc101SAndrew Rybchenko 	__in		uint32_t irq,
1155e111ed8SAndrew Rybchenko 	__in		efx_evq_t *eep);
1165e111ed8SAndrew Rybchenko 
1175e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1185e111ed8SAndrew Rybchenko extern			void
1195e111ed8SAndrew Rybchenko ef10_ev_qdestroy(
1205e111ed8SAndrew Rybchenko 	__in		efx_evq_t *eep);
1215e111ed8SAndrew Rybchenko 
1225e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1235e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
1245e111ed8SAndrew Rybchenko ef10_ev_qprime(
1255e111ed8SAndrew Rybchenko 	__in		efx_evq_t *eep,
1265e111ed8SAndrew Rybchenko 	__in		unsigned int count);
1275e111ed8SAndrew Rybchenko 
1285e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1295e111ed8SAndrew Rybchenko extern			void
1305e111ed8SAndrew Rybchenko ef10_ev_qpost(
1315e111ed8SAndrew Rybchenko 	__in	efx_evq_t *eep,
1325e111ed8SAndrew Rybchenko 	__in	uint16_t data);
1335e111ed8SAndrew Rybchenko 
1345e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1355e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
1365e111ed8SAndrew Rybchenko ef10_ev_qmoderate(
1375e111ed8SAndrew Rybchenko 	__in		efx_evq_t *eep,
1385e111ed8SAndrew Rybchenko 	__in		unsigned int us);
1395e111ed8SAndrew Rybchenko 
1405e111ed8SAndrew Rybchenko #if EFSYS_OPT_QSTATS
1415e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1425e111ed8SAndrew Rybchenko extern			void
1435e111ed8SAndrew Rybchenko ef10_ev_qstats_update(
1445e111ed8SAndrew Rybchenko 	__in				efx_evq_t *eep,
1455e111ed8SAndrew Rybchenko 	__inout_ecount(EV_NQSTATS)	efsys_stat_t *stat);
1465e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */
1475e111ed8SAndrew Rybchenko 
1485e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1495e111ed8SAndrew Rybchenko extern			void
1505e111ed8SAndrew Rybchenko ef10_ev_rxlabel_init(
1515e111ed8SAndrew Rybchenko 	__in		efx_evq_t *eep,
1525e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp,
1535e111ed8SAndrew Rybchenko 	__in		unsigned int label,
1545e111ed8SAndrew Rybchenko 	__in		efx_rxq_type_t type);
1555e111ed8SAndrew Rybchenko 
1565e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1575e111ed8SAndrew Rybchenko extern			void
1585e111ed8SAndrew Rybchenko ef10_ev_rxlabel_fini(
1595e111ed8SAndrew Rybchenko 	__in		efx_evq_t *eep,
1605e111ed8SAndrew Rybchenko 	__in		unsigned int label);
1615e111ed8SAndrew Rybchenko 
1629edb8ee3SAndrew Rybchenko LIBEFX_INTERNAL
1639edb8ee3SAndrew Rybchenko extern	__checkReturn	boolean_t
1649edb8ee3SAndrew Rybchenko ef10_ev_mcdi(
1659edb8ee3SAndrew Rybchenko 	__in		efx_evq_t *eep,
1669edb8ee3SAndrew Rybchenko 	__in		efx_qword_t *eqp,
1679edb8ee3SAndrew Rybchenko 	__in		const efx_ev_callbacks_t *eecp,
1689edb8ee3SAndrew Rybchenko 	__in_opt	void *arg);
1699edb8ee3SAndrew Rybchenko 
1705e111ed8SAndrew Rybchenko /* INTR */
1715e111ed8SAndrew Rybchenko 
1725e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1735e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
1745e111ed8SAndrew Rybchenko ef10_intr_init(
1755e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
1765e111ed8SAndrew Rybchenko 	__in		efx_intr_type_t type,
1775e111ed8SAndrew Rybchenko 	__in		efsys_mem_t *esmp);
1785e111ed8SAndrew Rybchenko 
1795e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1805e111ed8SAndrew Rybchenko extern			void
1815e111ed8SAndrew Rybchenko ef10_intr_enable(
1825e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
1835e111ed8SAndrew Rybchenko 
1845e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1855e111ed8SAndrew Rybchenko extern			void
1865e111ed8SAndrew Rybchenko ef10_intr_disable(
1875e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
1885e111ed8SAndrew Rybchenko 
1895e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1905e111ed8SAndrew Rybchenko extern			void
1915e111ed8SAndrew Rybchenko ef10_intr_disable_unlocked(
1925e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
1935e111ed8SAndrew Rybchenko 
1945e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1955e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
1965e111ed8SAndrew Rybchenko ef10_intr_trigger(
1975e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
1985e111ed8SAndrew Rybchenko 	__in		unsigned int level);
1995e111ed8SAndrew Rybchenko 
2005e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2015e111ed8SAndrew Rybchenko extern			void
2025e111ed8SAndrew Rybchenko ef10_intr_status_line(
2035e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
2045e111ed8SAndrew Rybchenko 	__out		boolean_t *fatalp,
2055e111ed8SAndrew Rybchenko 	__out		uint32_t *qmaskp);
2065e111ed8SAndrew Rybchenko 
2075e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2085e111ed8SAndrew Rybchenko extern			void
2095e111ed8SAndrew Rybchenko ef10_intr_status_message(
2105e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
2115e111ed8SAndrew Rybchenko 	__in		unsigned int message,
2125e111ed8SAndrew Rybchenko 	__out		boolean_t *fatalp);
2135e111ed8SAndrew Rybchenko 
2145e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2155e111ed8SAndrew Rybchenko extern			void
2165e111ed8SAndrew Rybchenko ef10_intr_fatal(
2175e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
2185e111ed8SAndrew Rybchenko 
2195e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2205e111ed8SAndrew Rybchenko extern			void
2215e111ed8SAndrew Rybchenko ef10_intr_fini(
2225e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
2235e111ed8SAndrew Rybchenko 
2245e111ed8SAndrew Rybchenko /* NIC */
2255e111ed8SAndrew Rybchenko 
2265e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2275e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
2285e111ed8SAndrew Rybchenko efx_mcdi_vadaptor_alloc(
2295e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
2305e111ed8SAndrew Rybchenko 	__in		uint32_t port_id);
2315e111ed8SAndrew Rybchenko 
2325e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2335e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
2345e111ed8SAndrew Rybchenko efx_mcdi_vadaptor_free(
2355e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
2365e111ed8SAndrew Rybchenko 	__in		uint32_t port_id);
2375e111ed8SAndrew Rybchenko 
2385e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2395e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
24079867285SAndrew Rybchenko ef10_upstream_port_vadaptor_alloc(
24179867285SAndrew Rybchenko 	__in		efx_nic_t *enp);
24279867285SAndrew Rybchenko 
24379867285SAndrew Rybchenko LIBEFX_INTERNAL
24479867285SAndrew Rybchenko extern	__checkReturn	efx_rc_t
2455e111ed8SAndrew Rybchenko ef10_nic_probe(
2465e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
2475e111ed8SAndrew Rybchenko 
2485e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2495e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
2505e111ed8SAndrew Rybchenko ef10_nic_set_drv_limits(
2515e111ed8SAndrew Rybchenko 	__inout		efx_nic_t *enp,
2525e111ed8SAndrew Rybchenko 	__in		efx_drv_limits_t *edlp);
2535e111ed8SAndrew Rybchenko 
2545e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2555e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
2565e111ed8SAndrew Rybchenko ef10_nic_get_vi_pool(
2575e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
2585e111ed8SAndrew Rybchenko 	__out		uint32_t *vi_countp);
2595e111ed8SAndrew Rybchenko 
2605e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2615e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
2625e111ed8SAndrew Rybchenko ef10_nic_get_bar_region(
2635e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
2645e111ed8SAndrew Rybchenko 	__in		efx_nic_region_t region,
2655e111ed8SAndrew Rybchenko 	__out		uint32_t *offsetp,
2665e111ed8SAndrew Rybchenko 	__out		size_t *sizep);
2675e111ed8SAndrew Rybchenko 
2685e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2695e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
2705e111ed8SAndrew Rybchenko ef10_nic_reset(
2715e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
2725e111ed8SAndrew Rybchenko 
2735e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2745e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
2755e111ed8SAndrew Rybchenko ef10_nic_init(
2765e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
2775e111ed8SAndrew Rybchenko 
2785e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2795e111ed8SAndrew Rybchenko extern	__checkReturn	boolean_t
2805e111ed8SAndrew Rybchenko ef10_nic_hw_unavailable(
2815e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
2825e111ed8SAndrew Rybchenko 
2835e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2845e111ed8SAndrew Rybchenko extern			void
2855e111ed8SAndrew Rybchenko ef10_nic_set_hw_unavailable(
2865e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
2875e111ed8SAndrew Rybchenko 
2885e111ed8SAndrew Rybchenko #if EFSYS_OPT_DIAG
2895e111ed8SAndrew Rybchenko 
2905e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2915e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
2925e111ed8SAndrew Rybchenko ef10_nic_register_test(
2935e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
2945e111ed8SAndrew Rybchenko 
2955e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_DIAG */
2965e111ed8SAndrew Rybchenko 
2975e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2985e111ed8SAndrew Rybchenko extern			void
2995e111ed8SAndrew Rybchenko ef10_nic_fini(
3005e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
3015e111ed8SAndrew Rybchenko 
3025e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3035e111ed8SAndrew Rybchenko extern			void
3045e111ed8SAndrew Rybchenko ef10_nic_unprobe(
3055e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
3065e111ed8SAndrew Rybchenko 
3075e111ed8SAndrew Rybchenko 
3085e111ed8SAndrew Rybchenko /* MAC */
3095e111ed8SAndrew Rybchenko 
3105e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3115e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3125e111ed8SAndrew Rybchenko ef10_mac_poll(
3135e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
3145e111ed8SAndrew Rybchenko 	__out		efx_link_mode_t *link_modep);
3155e111ed8SAndrew Rybchenko 
3165e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3175e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3185e111ed8SAndrew Rybchenko ef10_mac_up(
3195e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
3205e111ed8SAndrew Rybchenko 	__out		boolean_t *mac_upp);
3215e111ed8SAndrew Rybchenko 
3225e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3235e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3245e111ed8SAndrew Rybchenko ef10_mac_addr_set(
3255e111ed8SAndrew Rybchenko 	__in	efx_nic_t *enp);
3265e111ed8SAndrew Rybchenko 
3275e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3285e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3295e111ed8SAndrew Rybchenko ef10_mac_pdu_set(
3305e111ed8SAndrew Rybchenko 	__in	efx_nic_t *enp);
3315e111ed8SAndrew Rybchenko 
3325e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3335e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3345e111ed8SAndrew Rybchenko ef10_mac_pdu_get(
3355e111ed8SAndrew Rybchenko 	__in	efx_nic_t *enp,
3365e111ed8SAndrew Rybchenko 	__out	size_t *pdu);
3375e111ed8SAndrew Rybchenko 
3385e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3395e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3405e111ed8SAndrew Rybchenko ef10_mac_reconfigure(
3415e111ed8SAndrew Rybchenko 	__in	efx_nic_t *enp);
3425e111ed8SAndrew Rybchenko 
3435e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3445e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3455e111ed8SAndrew Rybchenko ef10_mac_multicast_list_set(
3465e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp);
3475e111ed8SAndrew Rybchenko 
3485e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3495e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3505e111ed8SAndrew Rybchenko ef10_mac_filter_default_rxq_set(
3515e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
3525e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp,
3535e111ed8SAndrew Rybchenko 	__in		boolean_t using_rss);
3545e111ed8SAndrew Rybchenko 
3555e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3565e111ed8SAndrew Rybchenko extern			void
3575e111ed8SAndrew Rybchenko ef10_mac_filter_default_rxq_clear(
3585e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
3595e111ed8SAndrew Rybchenko 
3605e111ed8SAndrew Rybchenko #if EFSYS_OPT_LOOPBACK
3615e111ed8SAndrew Rybchenko 
3625e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3635e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3645e111ed8SAndrew Rybchenko ef10_mac_loopback_set(
3655e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
3665e111ed8SAndrew Rybchenko 	__in		efx_link_mode_t link_mode,
3675e111ed8SAndrew Rybchenko 	__in		efx_loopback_type_t loopback_type);
3685e111ed8SAndrew Rybchenko 
3695e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_LOOPBACK */
3705e111ed8SAndrew Rybchenko 
3715e111ed8SAndrew Rybchenko #if EFSYS_OPT_MAC_STATS
3725e111ed8SAndrew Rybchenko 
3735e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3745e111ed8SAndrew Rybchenko extern	__checkReturn			efx_rc_t
3755e111ed8SAndrew Rybchenko ef10_mac_stats_get_mask(
3765e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
3775e111ed8SAndrew Rybchenko 	__inout_bcount(mask_size)	uint32_t *maskp,
3785e111ed8SAndrew Rybchenko 	__in				size_t mask_size);
3795e111ed8SAndrew Rybchenko 
3805e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3815e111ed8SAndrew Rybchenko extern	__checkReturn			efx_rc_t
3825e111ed8SAndrew Rybchenko ef10_mac_stats_update(
3835e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
3845e111ed8SAndrew Rybchenko 	__in				efsys_mem_t *esmp,
3855e111ed8SAndrew Rybchenko 	__inout_ecount(EFX_MAC_NSTATS)	efsys_stat_t *stat,
3865e111ed8SAndrew Rybchenko 	__inout_opt			uint32_t *generationp);
3875e111ed8SAndrew Rybchenko 
3885e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_MAC_STATS */
3895e111ed8SAndrew Rybchenko 
3905e111ed8SAndrew Rybchenko 
3915e111ed8SAndrew Rybchenko /* MCDI */
3925e111ed8SAndrew Rybchenko 
3935e111ed8SAndrew Rybchenko #if EFSYS_OPT_MCDI
3945e111ed8SAndrew Rybchenko 
3955e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3965e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3975e111ed8SAndrew Rybchenko ef10_mcdi_init(
3985e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
3995e111ed8SAndrew Rybchenko 	__in		const efx_mcdi_transport_t *mtp);
4005e111ed8SAndrew Rybchenko 
4015e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4025e111ed8SAndrew Rybchenko extern			void
4035e111ed8SAndrew Rybchenko ef10_mcdi_fini(
4045e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
4055e111ed8SAndrew Rybchenko 
4065e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4075e111ed8SAndrew Rybchenko extern			void
4085e111ed8SAndrew Rybchenko ef10_mcdi_send_request(
4095e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
4105e111ed8SAndrew Rybchenko 	__in_bcount(hdr_len)	void *hdrp,
4115e111ed8SAndrew Rybchenko 	__in			size_t hdr_len,
4125e111ed8SAndrew Rybchenko 	__in_bcount(sdu_len)	void *sdup,
4135e111ed8SAndrew Rybchenko 	__in			size_t sdu_len);
4145e111ed8SAndrew Rybchenko 
4155e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4165e111ed8SAndrew Rybchenko extern	__checkReturn	boolean_t
4175e111ed8SAndrew Rybchenko ef10_mcdi_poll_response(
4185e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
4195e111ed8SAndrew Rybchenko 
4205e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4215e111ed8SAndrew Rybchenko extern			void
4225e111ed8SAndrew Rybchenko ef10_mcdi_read_response(
4235e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
4245e111ed8SAndrew Rybchenko 	__out_bcount(length)	void *bufferp,
4255e111ed8SAndrew Rybchenko 	__in			size_t offset,
4265e111ed8SAndrew Rybchenko 	__in			size_t length);
4275e111ed8SAndrew Rybchenko 
4285e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4295e111ed8SAndrew Rybchenko extern			efx_rc_t
4305e111ed8SAndrew Rybchenko ef10_mcdi_poll_reboot(
4315e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
4325e111ed8SAndrew Rybchenko 
4335e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4345e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
4355e111ed8SAndrew Rybchenko ef10_mcdi_feature_supported(
4365e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
4375e111ed8SAndrew Rybchenko 	__in		efx_mcdi_feature_id_t id,
4385e111ed8SAndrew Rybchenko 	__out		boolean_t *supportedp);
4395e111ed8SAndrew Rybchenko 
4405e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4415e111ed8SAndrew Rybchenko extern			void
4425e111ed8SAndrew Rybchenko ef10_mcdi_get_timeout(
4435e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
4445e111ed8SAndrew Rybchenko 	__in		efx_mcdi_req_t *emrp,
4455e111ed8SAndrew Rybchenko 	__out		uint32_t *timeoutp);
4465e111ed8SAndrew Rybchenko 
4475e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_MCDI */
4485e111ed8SAndrew Rybchenko 
4495e111ed8SAndrew Rybchenko /* NVRAM */
4505e111ed8SAndrew Rybchenko 
4515e111ed8SAndrew Rybchenko #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
4525e111ed8SAndrew Rybchenko 
4535e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4545e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
4555e111ed8SAndrew Rybchenko ef10_nvram_buf_read_tlv(
4565e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
4575e111ed8SAndrew Rybchenko 	__in_bcount(max_seg_size)	caddr_t seg_data,
4585e111ed8SAndrew Rybchenko 	__in				size_t max_seg_size,
4595e111ed8SAndrew Rybchenko 	__in				uint32_t tag,
4605e111ed8SAndrew Rybchenko 	__deref_out_bcount_opt(*sizep)	caddr_t *datap,
4615e111ed8SAndrew Rybchenko 	__out				size_t *sizep);
4625e111ed8SAndrew Rybchenko 
4635e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4645e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
4655e111ed8SAndrew Rybchenko ef10_nvram_buf_write_tlv(
4665e111ed8SAndrew Rybchenko 	__inout_bcount(partn_size)	caddr_t partn_data,
4675e111ed8SAndrew Rybchenko 	__in				size_t partn_size,
4685e111ed8SAndrew Rybchenko 	__in				uint32_t tag,
4695e111ed8SAndrew Rybchenko 	__in_bcount(tag_size)		caddr_t tag_data,
4705e111ed8SAndrew Rybchenko 	__in				size_t tag_size,
4715e111ed8SAndrew Rybchenko 	__out				size_t *total_lengthp);
4725e111ed8SAndrew Rybchenko 
4735e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4745e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
4755e111ed8SAndrew Rybchenko ef10_nvram_partn_read_tlv(
4765e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
4775e111ed8SAndrew Rybchenko 	__in				uint32_t partn,
4785e111ed8SAndrew Rybchenko 	__in				uint32_t tag,
4795e111ed8SAndrew Rybchenko 	__deref_out_bcount_opt(*sizep)	caddr_t *datap,
4805e111ed8SAndrew Rybchenko 	__out				size_t *sizep);
4815e111ed8SAndrew Rybchenko 
4825e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4835e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
4845e111ed8SAndrew Rybchenko ef10_nvram_partn_write_tlv(
4855e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
4865e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
4875e111ed8SAndrew Rybchenko 	__in			uint32_t tag,
4885e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
4895e111ed8SAndrew Rybchenko 	__in			size_t size);
4905e111ed8SAndrew Rybchenko 
4915e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4925e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
4935e111ed8SAndrew Rybchenko ef10_nvram_partn_write_segment_tlv(
4945e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
4955e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
4965e111ed8SAndrew Rybchenko 	__in			uint32_t tag,
4975e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
4985e111ed8SAndrew Rybchenko 	__in			size_t size,
4995e111ed8SAndrew Rybchenko 	__in			boolean_t all_segments);
5005e111ed8SAndrew Rybchenko 
5015e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5025e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5035e111ed8SAndrew Rybchenko ef10_nvram_partn_lock(
5045e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5055e111ed8SAndrew Rybchenko 	__in			uint32_t partn);
5065e111ed8SAndrew Rybchenko 
5075e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5085e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5095e111ed8SAndrew Rybchenko ef10_nvram_partn_unlock(
5105e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5115e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
5125e111ed8SAndrew Rybchenko 	__out_opt		uint32_t *resultp);
5135e111ed8SAndrew Rybchenko 
5145e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_NVRAM || EFSYS_OPT_VPD */
5155e111ed8SAndrew Rybchenko 
5165e111ed8SAndrew Rybchenko #if EFSYS_OPT_NVRAM
5175e111ed8SAndrew Rybchenko 
5185e111ed8SAndrew Rybchenko #if EFSYS_OPT_DIAG
5195e111ed8SAndrew Rybchenko 
5205e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5215e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5225e111ed8SAndrew Rybchenko ef10_nvram_test(
5235e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp);
5245e111ed8SAndrew Rybchenko 
5255e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_DIAG */
5265e111ed8SAndrew Rybchenko 
5275e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5285e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5295e111ed8SAndrew Rybchenko ef10_nvram_type_to_partn(
5305e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5315e111ed8SAndrew Rybchenko 	__in			efx_nvram_type_t type,
5325e111ed8SAndrew Rybchenko 	__out			uint32_t *partnp);
5335e111ed8SAndrew Rybchenko 
5345e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5355e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5365e111ed8SAndrew Rybchenko ef10_nvram_partn_size(
5375e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5385e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
5395e111ed8SAndrew Rybchenko 	__out			size_t *sizep);
5405e111ed8SAndrew Rybchenko 
5415e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5425e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5435e111ed8SAndrew Rybchenko ef10_nvram_partn_info(
5445e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5455e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
5465e111ed8SAndrew Rybchenko 	__out			efx_nvram_info_t * enip);
5475e111ed8SAndrew Rybchenko 
5485e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5495e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5505e111ed8SAndrew Rybchenko ef10_nvram_partn_rw_start(
5515e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5525e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
5535e111ed8SAndrew Rybchenko 	__out			size_t *chunk_sizep);
5545e111ed8SAndrew Rybchenko 
5555e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5565e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5575e111ed8SAndrew Rybchenko ef10_nvram_partn_read_mode(
5585e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5595e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
5605e111ed8SAndrew Rybchenko 	__in			unsigned int offset,
5615e111ed8SAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
5625e111ed8SAndrew Rybchenko 	__in			size_t size,
5635e111ed8SAndrew Rybchenko 	__in			uint32_t mode);
5645e111ed8SAndrew Rybchenko 
5655e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5665e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5675e111ed8SAndrew Rybchenko ef10_nvram_partn_read(
5685e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5695e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
5705e111ed8SAndrew Rybchenko 	__in			unsigned int offset,
5715e111ed8SAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
5725e111ed8SAndrew Rybchenko 	__in			size_t size);
5735e111ed8SAndrew Rybchenko 
5745e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5755e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5765e111ed8SAndrew Rybchenko ef10_nvram_partn_read_backup(
5775e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5785e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
5795e111ed8SAndrew Rybchenko 	__in			unsigned int offset,
5805e111ed8SAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
5815e111ed8SAndrew Rybchenko 	__in			size_t size);
5825e111ed8SAndrew Rybchenko 
5835e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5845e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5855e111ed8SAndrew Rybchenko ef10_nvram_partn_erase(
5865e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5875e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
5885e111ed8SAndrew Rybchenko 	__in			unsigned int offset,
5895e111ed8SAndrew Rybchenko 	__in			size_t size);
5905e111ed8SAndrew Rybchenko 
5915e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
5925e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
5935e111ed8SAndrew Rybchenko ef10_nvram_partn_write(
5945e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
5955e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
5965e111ed8SAndrew Rybchenko 	__in			unsigned int offset,
5975e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
5985e111ed8SAndrew Rybchenko 	__in			size_t size);
5995e111ed8SAndrew Rybchenko 
6005e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6015e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6025e111ed8SAndrew Rybchenko ef10_nvram_partn_rw_finish(
6035e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
6045e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
6055e111ed8SAndrew Rybchenko 	__out_opt		uint32_t *verify_resultp);
6065e111ed8SAndrew Rybchenko 
6075e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6085e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6095e111ed8SAndrew Rybchenko ef10_nvram_partn_get_version(
6105e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
6115e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
6125e111ed8SAndrew Rybchenko 	__out			uint32_t *subtypep,
6135e111ed8SAndrew Rybchenko 	__out_ecount(4)		uint16_t version[4]);
6145e111ed8SAndrew Rybchenko 
6155e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6165e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6175e111ed8SAndrew Rybchenko ef10_nvram_partn_set_version(
6185e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
6195e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
6205e111ed8SAndrew Rybchenko 	__in_ecount(4)		uint16_t version[4]);
6215e111ed8SAndrew Rybchenko 
6225e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6235e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6245e111ed8SAndrew Rybchenko ef10_nvram_buffer_validate(
6255e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
6265e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
6275e111ed8SAndrew Rybchenko 				caddr_t bufferp,
6285e111ed8SAndrew Rybchenko 	__in			size_t buffer_size);
6295e111ed8SAndrew Rybchenko 
6305e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6315e111ed8SAndrew Rybchenko extern			void
6325e111ed8SAndrew Rybchenko ef10_nvram_buffer_init(
6335e111ed8SAndrew Rybchenko 	__out_bcount(buffer_size)
6345e111ed8SAndrew Rybchenko 				caddr_t bufferp,
6355e111ed8SAndrew Rybchenko 	__in			size_t buffer_size);
6365e111ed8SAndrew Rybchenko 
6375e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6385e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6395e111ed8SAndrew Rybchenko ef10_nvram_buffer_create(
6405e111ed8SAndrew Rybchenko 	__in			uint32_t partn_type,
6415e111ed8SAndrew Rybchenko 	__out_bcount(buffer_size)
6425e111ed8SAndrew Rybchenko 				caddr_t bufferp,
6435e111ed8SAndrew Rybchenko 	__in			size_t buffer_size);
6445e111ed8SAndrew Rybchenko 
6455e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6465e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6475e111ed8SAndrew Rybchenko ef10_nvram_buffer_find_item_start(
6485e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
6495e111ed8SAndrew Rybchenko 				caddr_t bufferp,
6505e111ed8SAndrew Rybchenko 	__in			size_t buffer_size,
6515e111ed8SAndrew Rybchenko 	__out			uint32_t *startp);
6525e111ed8SAndrew Rybchenko 
6535e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6545e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6555e111ed8SAndrew Rybchenko ef10_nvram_buffer_find_end(
6565e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
6575e111ed8SAndrew Rybchenko 				caddr_t bufferp,
6585e111ed8SAndrew Rybchenko 	__in			size_t buffer_size,
6595e111ed8SAndrew Rybchenko 	__in			uint32_t offset,
6605e111ed8SAndrew Rybchenko 	__out			uint32_t *endp);
6615e111ed8SAndrew Rybchenko 
6625e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6635e111ed8SAndrew Rybchenko extern	__checkReturn	__success(return != B_FALSE)	boolean_t
6645e111ed8SAndrew Rybchenko ef10_nvram_buffer_find_item(
6655e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
6665e111ed8SAndrew Rybchenko 				caddr_t bufferp,
6675e111ed8SAndrew Rybchenko 	__in			size_t buffer_size,
6685e111ed8SAndrew Rybchenko 	__in			uint32_t offset,
6695e111ed8SAndrew Rybchenko 	__out			uint32_t *startp,
6705e111ed8SAndrew Rybchenko 	__out			uint32_t *lengthp);
6715e111ed8SAndrew Rybchenko 
6725e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6735e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6745e111ed8SAndrew Rybchenko ef10_nvram_buffer_peek_item(
6755e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
6765e111ed8SAndrew Rybchenko 				caddr_t bufferp,
6775e111ed8SAndrew Rybchenko 	__in			size_t buffer_size,
6785e111ed8SAndrew Rybchenko 	__in			uint32_t offset,
6795e111ed8SAndrew Rybchenko 	__out			uint32_t *tagp,
6805e111ed8SAndrew Rybchenko 	__out			uint32_t *lengthp,
6815e111ed8SAndrew Rybchenko 	__out			uint32_t *value_offsetp);
6825e111ed8SAndrew Rybchenko 
6835e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6845e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6855e111ed8SAndrew Rybchenko ef10_nvram_buffer_get_item(
6865e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
6875e111ed8SAndrew Rybchenko 				caddr_t bufferp,
6885e111ed8SAndrew Rybchenko 	__in			size_t buffer_size,
6895e111ed8SAndrew Rybchenko 	__in			uint32_t offset,
6905e111ed8SAndrew Rybchenko 	__in			uint32_t length,
6915e111ed8SAndrew Rybchenko 	__out			uint32_t *tagp,
6925e111ed8SAndrew Rybchenko 	__out_bcount_part(value_max_size, *lengthp)
6935e111ed8SAndrew Rybchenko 				caddr_t valuep,
6945e111ed8SAndrew Rybchenko 	__in			size_t value_max_size,
6955e111ed8SAndrew Rybchenko 	__out			uint32_t *lengthp);
6965e111ed8SAndrew Rybchenko 
6975e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
6985e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
6995e111ed8SAndrew Rybchenko ef10_nvram_buffer_insert_item(
7005e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
7015e111ed8SAndrew Rybchenko 				caddr_t bufferp,
7025e111ed8SAndrew Rybchenko 	__in			size_t buffer_size,
7035e111ed8SAndrew Rybchenko 	__in			uint32_t offset,
7045e111ed8SAndrew Rybchenko 	__in			uint32_t tag,
7055e111ed8SAndrew Rybchenko 	__in_bcount(length)	caddr_t valuep,
7065e111ed8SAndrew Rybchenko 	__in			uint32_t length,
7075e111ed8SAndrew Rybchenko 	__out			uint32_t *lengthp);
7085e111ed8SAndrew Rybchenko 
7095e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7105e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
7115e111ed8SAndrew Rybchenko ef10_nvram_buffer_modify_item(
7125e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
7135e111ed8SAndrew Rybchenko 				caddr_t bufferp,
7145e111ed8SAndrew Rybchenko 	__in			size_t buffer_size,
7155e111ed8SAndrew Rybchenko 	__in			uint32_t offset,
7165e111ed8SAndrew Rybchenko 	__in			uint32_t tag,
7175e111ed8SAndrew Rybchenko 	__in_bcount(length)	caddr_t valuep,
7185e111ed8SAndrew Rybchenko 	__in			uint32_t length,
7195e111ed8SAndrew Rybchenko 	__out			uint32_t *lengthp);
7205e111ed8SAndrew Rybchenko 
7215e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7225e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
7235e111ed8SAndrew Rybchenko ef10_nvram_buffer_delete_item(
7245e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
7255e111ed8SAndrew Rybchenko 				caddr_t bufferp,
7265e111ed8SAndrew Rybchenko 	__in			size_t buffer_size,
7275e111ed8SAndrew Rybchenko 	__in			uint32_t offset,
7285e111ed8SAndrew Rybchenko 	__in			uint32_t length,
7295e111ed8SAndrew Rybchenko 	__in			uint32_t end);
7305e111ed8SAndrew Rybchenko 
7315e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7325e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
7335e111ed8SAndrew Rybchenko ef10_nvram_buffer_finish(
7345e111ed8SAndrew Rybchenko 	__in_bcount(buffer_size)
7355e111ed8SAndrew Rybchenko 				caddr_t bufferp,
7365e111ed8SAndrew Rybchenko 	__in			size_t buffer_size);
7375e111ed8SAndrew Rybchenko 
7385e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_NVRAM */
7395e111ed8SAndrew Rybchenko 
7405e111ed8SAndrew Rybchenko 
7415e111ed8SAndrew Rybchenko /* PHY */
7425e111ed8SAndrew Rybchenko 
7435e111ed8SAndrew Rybchenko typedef struct ef10_link_state_s {
7445e111ed8SAndrew Rybchenko 	efx_phy_link_state_t	epls;
7455e111ed8SAndrew Rybchenko #if EFSYS_OPT_LOOPBACK
7465e111ed8SAndrew Rybchenko 	efx_loopback_type_t	els_loopback;
7475e111ed8SAndrew Rybchenko #endif
7485e111ed8SAndrew Rybchenko 	boolean_t		els_mac_up;
7495e111ed8SAndrew Rybchenko } ef10_link_state_t;
7505e111ed8SAndrew Rybchenko 
7515e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7525e111ed8SAndrew Rybchenko extern			void
7535e111ed8SAndrew Rybchenko ef10_phy_link_ev(
7545e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
7555e111ed8SAndrew Rybchenko 	__in		efx_qword_t *eqp,
75680e33a28SIvan Malov 	__in		boolean_t ev_is_v2,
7575e111ed8SAndrew Rybchenko 	__out		efx_link_mode_t *link_modep);
7585e111ed8SAndrew Rybchenko 
7595e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7605e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
7615e111ed8SAndrew Rybchenko ef10_phy_get_link(
7625e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
7635e111ed8SAndrew Rybchenko 	__out		ef10_link_state_t *elsp);
7645e111ed8SAndrew Rybchenko 
7655e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7665e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
7675e111ed8SAndrew Rybchenko ef10_phy_power(
7685e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
7695e111ed8SAndrew Rybchenko 	__in		boolean_t on);
7705e111ed8SAndrew Rybchenko 
7715e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7725e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
7735e111ed8SAndrew Rybchenko ef10_phy_reconfigure(
7745e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
7755e111ed8SAndrew Rybchenko 
7765e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7775e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
7785e111ed8SAndrew Rybchenko ef10_phy_verify(
7795e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
7805e111ed8SAndrew Rybchenko 
7815e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7825e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
7835e111ed8SAndrew Rybchenko ef10_phy_oui_get(
7845e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
7855e111ed8SAndrew Rybchenko 	__out		uint32_t *ouip);
7865e111ed8SAndrew Rybchenko 
7875e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7885e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
7895e111ed8SAndrew Rybchenko ef10_phy_link_state_get(
7905e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
7915e111ed8SAndrew Rybchenko 	__out		efx_phy_link_state_t *eplsp);
7925e111ed8SAndrew Rybchenko 
7935e111ed8SAndrew Rybchenko #if EFSYS_OPT_PHY_STATS
7945e111ed8SAndrew Rybchenko 
7955e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
7965e111ed8SAndrew Rybchenko extern	__checkReturn			efx_rc_t
7975e111ed8SAndrew Rybchenko ef10_phy_stats_update(
7985e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
7995e111ed8SAndrew Rybchenko 	__in				efsys_mem_t *esmp,
8005e111ed8SAndrew Rybchenko 	__inout_ecount(EFX_PHY_NSTATS)	uint32_t *stat);
8015e111ed8SAndrew Rybchenko 
8025e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_PHY_STATS */
8035e111ed8SAndrew Rybchenko 
8045e111ed8SAndrew Rybchenko #if EFSYS_OPT_BIST
8055e111ed8SAndrew Rybchenko 
8065e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8075e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
8085e111ed8SAndrew Rybchenko ef10_bist_enable_offline(
8095e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp);
8105e111ed8SAndrew Rybchenko 
8115e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8125e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
8135e111ed8SAndrew Rybchenko ef10_bist_start(
8145e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
8155e111ed8SAndrew Rybchenko 	__in			efx_bist_type_t type);
8165e111ed8SAndrew Rybchenko 
8175e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8185e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
8195e111ed8SAndrew Rybchenko ef10_bist_poll(
8205e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
8215e111ed8SAndrew Rybchenko 	__in			efx_bist_type_t type,
8225e111ed8SAndrew Rybchenko 	__out			efx_bist_result_t *resultp,
8235e111ed8SAndrew Rybchenko 	__out_opt __drv_when(count > 0, __notnull)
8245e111ed8SAndrew Rybchenko 	uint32_t	*value_maskp,
8255e111ed8SAndrew Rybchenko 	__out_ecount_opt(count)	__drv_when(count > 0, __notnull)
8265e111ed8SAndrew Rybchenko 	unsigned long	*valuesp,
8275e111ed8SAndrew Rybchenko 	__in			size_t count);
8285e111ed8SAndrew Rybchenko 
8295e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8305e111ed8SAndrew Rybchenko extern				void
8315e111ed8SAndrew Rybchenko ef10_bist_stop(
8325e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
8335e111ed8SAndrew Rybchenko 	__in			efx_bist_type_t type);
8345e111ed8SAndrew Rybchenko 
8355e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_BIST */
8365e111ed8SAndrew Rybchenko 
8375e111ed8SAndrew Rybchenko /* TX */
8385e111ed8SAndrew Rybchenko 
8395e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8405e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
8415e111ed8SAndrew Rybchenko ef10_tx_init(
8425e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
8435e111ed8SAndrew Rybchenko 
8445e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8455e111ed8SAndrew Rybchenko extern			void
8465e111ed8SAndrew Rybchenko ef10_tx_fini(
8475e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
8485e111ed8SAndrew Rybchenko 
8495e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8505e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
8515e111ed8SAndrew Rybchenko ef10_tx_qcreate(
8525e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
8535e111ed8SAndrew Rybchenko 	__in		unsigned int index,
8545e111ed8SAndrew Rybchenko 	__in		unsigned int label,
8555e111ed8SAndrew Rybchenko 	__in		efsys_mem_t *esmp,
8565e111ed8SAndrew Rybchenko 	__in		size_t ndescs,
8575e111ed8SAndrew Rybchenko 	__in		uint32_t id,
8585e111ed8SAndrew Rybchenko 	__in		uint16_t flags,
8595e111ed8SAndrew Rybchenko 	__in		efx_evq_t *eep,
8605e111ed8SAndrew Rybchenko 	__in		efx_txq_t *etp,
8615e111ed8SAndrew Rybchenko 	__out		unsigned int *addedp);
8625e111ed8SAndrew Rybchenko 
8635e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8645e111ed8SAndrew Rybchenko extern		void
8655e111ed8SAndrew Rybchenko ef10_tx_qdestroy(
8665e111ed8SAndrew Rybchenko 	__in		efx_txq_t *etp);
8675e111ed8SAndrew Rybchenko 
8685e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8695e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
8705e111ed8SAndrew Rybchenko ef10_tx_qpost(
8715e111ed8SAndrew Rybchenko 	__in			efx_txq_t *etp,
8725e111ed8SAndrew Rybchenko 	__in_ecount(ndescs)	efx_buffer_t *ebp,
8735e111ed8SAndrew Rybchenko 	__in			unsigned int ndescs,
8745e111ed8SAndrew Rybchenko 	__in			unsigned int completed,
8755e111ed8SAndrew Rybchenko 	__inout			unsigned int *addedp);
8765e111ed8SAndrew Rybchenko 
8775e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8785e111ed8SAndrew Rybchenko extern			void
8795e111ed8SAndrew Rybchenko ef10_tx_qpush(
8805e111ed8SAndrew Rybchenko 	__in		efx_txq_t *etp,
8815e111ed8SAndrew Rybchenko 	__in		unsigned int added,
8825e111ed8SAndrew Rybchenko 	__in		unsigned int pushed);
8835e111ed8SAndrew Rybchenko 
8845e111ed8SAndrew Rybchenko #if EFSYS_OPT_RX_PACKED_STREAM
8855e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8865e111ed8SAndrew Rybchenko extern			void
8875e111ed8SAndrew Rybchenko ef10_rx_qpush_ps_credits(
8885e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp);
8895e111ed8SAndrew Rybchenko 
8905e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
8915e111ed8SAndrew Rybchenko extern	__checkReturn	uint8_t *
8925e111ed8SAndrew Rybchenko ef10_rx_qps_packet_info(
8935e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp,
8945e111ed8SAndrew Rybchenko 	__in		uint8_t *buffer,
8955e111ed8SAndrew Rybchenko 	__in		uint32_t buffer_length,
8965e111ed8SAndrew Rybchenko 	__in		uint32_t current_offset,
8975e111ed8SAndrew Rybchenko 	__out		uint16_t *lengthp,
8985e111ed8SAndrew Rybchenko 	__out		uint32_t *next_offsetp,
8995e111ed8SAndrew Rybchenko 	__out		uint32_t *timestamp);
9005e111ed8SAndrew Rybchenko #endif
9015e111ed8SAndrew Rybchenko 
9025e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9035e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
9045e111ed8SAndrew Rybchenko ef10_tx_qpace(
9055e111ed8SAndrew Rybchenko 	__in		efx_txq_t *etp,
9065e111ed8SAndrew Rybchenko 	__in		unsigned int ns);
9075e111ed8SAndrew Rybchenko 
9085e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9095e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
9105e111ed8SAndrew Rybchenko ef10_tx_qflush(
9115e111ed8SAndrew Rybchenko 	__in		efx_txq_t *etp);
9125e111ed8SAndrew Rybchenko 
9135e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9145e111ed8SAndrew Rybchenko extern			void
9155e111ed8SAndrew Rybchenko ef10_tx_qenable(
9165e111ed8SAndrew Rybchenko 	__in		efx_txq_t *etp);
9175e111ed8SAndrew Rybchenko 
9185e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9195e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
9205e111ed8SAndrew Rybchenko ef10_tx_qpio_enable(
9215e111ed8SAndrew Rybchenko 	__in		efx_txq_t *etp);
9225e111ed8SAndrew Rybchenko 
9235e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9245e111ed8SAndrew Rybchenko extern			void
9255e111ed8SAndrew Rybchenko ef10_tx_qpio_disable(
9265e111ed8SAndrew Rybchenko 	__in		efx_txq_t *etp);
9275e111ed8SAndrew Rybchenko 
9285e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9295e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
9305e111ed8SAndrew Rybchenko ef10_tx_qpio_write(
9315e111ed8SAndrew Rybchenko 	__in			efx_txq_t *etp,
9325e111ed8SAndrew Rybchenko 	__in_ecount(buf_length)	uint8_t *buffer,
9335e111ed8SAndrew Rybchenko 	__in			size_t buf_length,
9345e111ed8SAndrew Rybchenko 	__in			size_t pio_buf_offset);
9355e111ed8SAndrew Rybchenko 
9365e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9375e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
9385e111ed8SAndrew Rybchenko ef10_tx_qpio_post(
9395e111ed8SAndrew Rybchenko 	__in			efx_txq_t *etp,
9405e111ed8SAndrew Rybchenko 	__in			size_t pkt_length,
9415e111ed8SAndrew Rybchenko 	__in			unsigned int completed,
9425e111ed8SAndrew Rybchenko 	__inout			unsigned int *addedp);
9435e111ed8SAndrew Rybchenko 
9445e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9455e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
9465e111ed8SAndrew Rybchenko ef10_tx_qdesc_post(
9475e111ed8SAndrew Rybchenko 	__in		efx_txq_t *etp,
9485e111ed8SAndrew Rybchenko 	__in_ecount(n)	efx_desc_t *ed,
9495e111ed8SAndrew Rybchenko 	__in		unsigned int n,
9505e111ed8SAndrew Rybchenko 	__in		unsigned int completed,
9515e111ed8SAndrew Rybchenko 	__inout		unsigned int *addedp);
9525e111ed8SAndrew Rybchenko 
9535e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9545e111ed8SAndrew Rybchenko extern	void
9555e111ed8SAndrew Rybchenko ef10_tx_qdesc_dma_create(
9565e111ed8SAndrew Rybchenko 	__in	efx_txq_t *etp,
9575e111ed8SAndrew Rybchenko 	__in	efsys_dma_addr_t addr,
9585e111ed8SAndrew Rybchenko 	__in	size_t size,
9595e111ed8SAndrew Rybchenko 	__in	boolean_t eop,
9605e111ed8SAndrew Rybchenko 	__out	efx_desc_t *edp);
9615e111ed8SAndrew Rybchenko 
9625e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9635e111ed8SAndrew Rybchenko extern	void
9645e111ed8SAndrew Rybchenko ef10_tx_qdesc_tso_create(
9655e111ed8SAndrew Rybchenko 	__in	efx_txq_t *etp,
9665e111ed8SAndrew Rybchenko 	__in	uint16_t ipv4_id,
9675e111ed8SAndrew Rybchenko 	__in	uint32_t tcp_seq,
9685e111ed8SAndrew Rybchenko 	__in	uint8_t	 tcp_flags,
9695e111ed8SAndrew Rybchenko 	__out	efx_desc_t *edp);
9705e111ed8SAndrew Rybchenko 
9715e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9725e111ed8SAndrew Rybchenko extern	void
9735e111ed8SAndrew Rybchenko ef10_tx_qdesc_tso2_create(
9745e111ed8SAndrew Rybchenko 	__in			efx_txq_t *etp,
9755e111ed8SAndrew Rybchenko 	__in			uint16_t ipv4_id,
9765e111ed8SAndrew Rybchenko 	__in			uint16_t outer_ipv4_id,
9775e111ed8SAndrew Rybchenko 	__in			uint32_t tcp_seq,
9785e111ed8SAndrew Rybchenko 	__in			uint16_t tcp_mss,
9795e111ed8SAndrew Rybchenko 	__out_ecount(count)	efx_desc_t *edp,
9805e111ed8SAndrew Rybchenko 	__in			int count);
9815e111ed8SAndrew Rybchenko 
9825e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9835e111ed8SAndrew Rybchenko extern	void
9845e111ed8SAndrew Rybchenko ef10_tx_qdesc_vlantci_create(
9855e111ed8SAndrew Rybchenko 	__in	efx_txq_t *etp,
9865e111ed8SAndrew Rybchenko 	__in	uint16_t vlan_tci,
9875e111ed8SAndrew Rybchenko 	__out	efx_desc_t *edp);
9885e111ed8SAndrew Rybchenko 
9895e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9905e111ed8SAndrew Rybchenko extern	void
9915e111ed8SAndrew Rybchenko ef10_tx_qdesc_checksum_create(
9925e111ed8SAndrew Rybchenko 	__in	efx_txq_t *etp,
9935e111ed8SAndrew Rybchenko 	__in	uint16_t flags,
9945e111ed8SAndrew Rybchenko 	__out	efx_desc_t *edp);
9955e111ed8SAndrew Rybchenko 
9965e111ed8SAndrew Rybchenko #if EFSYS_OPT_QSTATS
9975e111ed8SAndrew Rybchenko 
9985e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
9995e111ed8SAndrew Rybchenko extern			void
10005e111ed8SAndrew Rybchenko ef10_tx_qstats_update(
10015e111ed8SAndrew Rybchenko 	__in				efx_txq_t *etp,
10025e111ed8SAndrew Rybchenko 	__inout_ecount(TX_NQSTATS)	efsys_stat_t *stat);
10035e111ed8SAndrew Rybchenko 
10045e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */
10055e111ed8SAndrew Rybchenko 
10065e111ed8SAndrew Rybchenko typedef uint32_t	efx_piobuf_handle_t;
10075e111ed8SAndrew Rybchenko 
10085e111ed8SAndrew Rybchenko #define	EFX_PIOBUF_HANDLE_INVALID	((efx_piobuf_handle_t)-1)
10095e111ed8SAndrew Rybchenko 
10105e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10115e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
10125e111ed8SAndrew Rybchenko ef10_nic_pio_alloc(
10135e111ed8SAndrew Rybchenko 	__inout		efx_nic_t *enp,
10145e111ed8SAndrew Rybchenko 	__out		uint32_t *bufnump,
10155e111ed8SAndrew Rybchenko 	__out		efx_piobuf_handle_t *handlep,
10165e111ed8SAndrew Rybchenko 	__out		uint32_t *blknump,
10175e111ed8SAndrew Rybchenko 	__out		uint32_t *offsetp,
10185e111ed8SAndrew Rybchenko 	__out		size_t *sizep);
10195e111ed8SAndrew Rybchenko 
10205e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10215e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
10225e111ed8SAndrew Rybchenko ef10_nic_pio_free(
10235e111ed8SAndrew Rybchenko 	__inout		efx_nic_t *enp,
10245e111ed8SAndrew Rybchenko 	__in		uint32_t bufnum,
10255e111ed8SAndrew Rybchenko 	__in		uint32_t blknum);
10265e111ed8SAndrew Rybchenko 
10275e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10285e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
10295e111ed8SAndrew Rybchenko ef10_nic_pio_link(
10305e111ed8SAndrew Rybchenko 	__inout		efx_nic_t *enp,
10315e111ed8SAndrew Rybchenko 	__in		uint32_t vi_index,
10325e111ed8SAndrew Rybchenko 	__in		efx_piobuf_handle_t handle);
10335e111ed8SAndrew Rybchenko 
10345e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10355e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
10365e111ed8SAndrew Rybchenko ef10_nic_pio_unlink(
10375e111ed8SAndrew Rybchenko 	__inout		efx_nic_t *enp,
10385e111ed8SAndrew Rybchenko 	__in		uint32_t vi_index);
10395e111ed8SAndrew Rybchenko 
10405e111ed8SAndrew Rybchenko 
10415e111ed8SAndrew Rybchenko /* VPD */
10425e111ed8SAndrew Rybchenko 
10435e111ed8SAndrew Rybchenko #if EFSYS_OPT_VPD
10445e111ed8SAndrew Rybchenko 
10455e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10465e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
10475e111ed8SAndrew Rybchenko ef10_vpd_init(
10485e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp);
10495e111ed8SAndrew Rybchenko 
10505e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10515e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
10525e111ed8SAndrew Rybchenko ef10_vpd_size(
10535e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
10545e111ed8SAndrew Rybchenko 	__out			size_t *sizep);
10555e111ed8SAndrew Rybchenko 
10565e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10575e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
10585e111ed8SAndrew Rybchenko ef10_vpd_read(
10595e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
10605e111ed8SAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
10615e111ed8SAndrew Rybchenko 	__in			size_t size);
10625e111ed8SAndrew Rybchenko 
10635e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10645e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
10655e111ed8SAndrew Rybchenko ef10_vpd_verify(
10665e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
10675e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
10685e111ed8SAndrew Rybchenko 	__in			size_t size);
10695e111ed8SAndrew Rybchenko 
10705e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10715e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
10725e111ed8SAndrew Rybchenko ef10_vpd_reinit(
10735e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
10745e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
10755e111ed8SAndrew Rybchenko 	__in			size_t size);
10765e111ed8SAndrew Rybchenko 
10775e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10785e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
10795e111ed8SAndrew Rybchenko ef10_vpd_get(
10805e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
10815e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
10825e111ed8SAndrew Rybchenko 	__in			size_t size,
10835e111ed8SAndrew Rybchenko 	__inout			efx_vpd_value_t *evvp);
10845e111ed8SAndrew Rybchenko 
10855e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10865e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
10875e111ed8SAndrew Rybchenko ef10_vpd_set(
10885e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
10895e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
10905e111ed8SAndrew Rybchenko 	__in			size_t size,
10915e111ed8SAndrew Rybchenko 	__in			efx_vpd_value_t *evvp);
10925e111ed8SAndrew Rybchenko 
10935e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
10945e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
10955e111ed8SAndrew Rybchenko ef10_vpd_next(
10965e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
10975e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
10985e111ed8SAndrew Rybchenko 	__in			size_t size,
10995e111ed8SAndrew Rybchenko 	__out			efx_vpd_value_t *evvp,
11005e111ed8SAndrew Rybchenko 	__inout			unsigned int *contp);
11015e111ed8SAndrew Rybchenko 
11025e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11035e111ed8SAndrew Rybchenko extern __checkReturn		efx_rc_t
11045e111ed8SAndrew Rybchenko ef10_vpd_write(
11055e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
11065e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
11075e111ed8SAndrew Rybchenko 	__in			size_t size);
11085e111ed8SAndrew Rybchenko 
11095e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11105e111ed8SAndrew Rybchenko extern				void
11115e111ed8SAndrew Rybchenko ef10_vpd_fini(
11125e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp);
11135e111ed8SAndrew Rybchenko 
11145e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_VPD */
11155e111ed8SAndrew Rybchenko 
11165e111ed8SAndrew Rybchenko 
11175e111ed8SAndrew Rybchenko /* RX */
11185e111ed8SAndrew Rybchenko 
11195e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11205e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
11215e111ed8SAndrew Rybchenko ef10_rx_init(
11225e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
11235e111ed8SAndrew Rybchenko 
11245e111ed8SAndrew Rybchenko #if EFSYS_OPT_RX_SCATTER
11255e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11265e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
11275e111ed8SAndrew Rybchenko ef10_rx_scatter_enable(
11285e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
11295e111ed8SAndrew Rybchenko 	__in		unsigned int buf_size);
11305e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_RX_SCATTER */
11315e111ed8SAndrew Rybchenko 
11325e111ed8SAndrew Rybchenko 
11335e111ed8SAndrew Rybchenko #if EFSYS_OPT_RX_SCALE
11345e111ed8SAndrew Rybchenko 
11355e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11365e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
11375e111ed8SAndrew Rybchenko ef10_rx_scale_context_alloc(
11385e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
11395e111ed8SAndrew Rybchenko 	__in		efx_rx_scale_context_type_t type,
11405e111ed8SAndrew Rybchenko 	__in		uint32_t num_queues,
1141e7ea5f30SIvan Malov 	__in		uint32_t table_nentries,
11425e111ed8SAndrew Rybchenko 	__out		uint32_t *rss_contextp);
11435e111ed8SAndrew Rybchenko 
11445e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11455e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
11465e111ed8SAndrew Rybchenko ef10_rx_scale_context_free(
11475e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
11485e111ed8SAndrew Rybchenko 	__in		uint32_t rss_context);
11495e111ed8SAndrew Rybchenko 
11505e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11515e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
11525e111ed8SAndrew Rybchenko ef10_rx_scale_mode_set(
11535e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
11545e111ed8SAndrew Rybchenko 	__in		uint32_t rss_context,
11555e111ed8SAndrew Rybchenko 	__in		efx_rx_hash_alg_t alg,
11565e111ed8SAndrew Rybchenko 	__in		efx_rx_hash_type_t type,
11575e111ed8SAndrew Rybchenko 	__in		boolean_t insert);
11585e111ed8SAndrew Rybchenko 
11595e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11605e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
11615e111ed8SAndrew Rybchenko ef10_rx_scale_key_set(
11625e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
11635e111ed8SAndrew Rybchenko 	__in		uint32_t rss_context,
11645e111ed8SAndrew Rybchenko 	__in_ecount(n)	uint8_t *key,
11655e111ed8SAndrew Rybchenko 	__in		size_t n);
11665e111ed8SAndrew Rybchenko 
11675e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11685e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
11695e111ed8SAndrew Rybchenko ef10_rx_scale_tbl_set(
11705e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
11715e111ed8SAndrew Rybchenko 	__in			uint32_t rss_context,
11727a71c15dSIvan Malov 	__in_ecount(nentries)	unsigned int *table,
11737a71c15dSIvan Malov 	__in			size_t nentries);
11745e111ed8SAndrew Rybchenko 
11755e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11765e111ed8SAndrew Rybchenko extern	__checkReturn	uint32_t
11775e111ed8SAndrew Rybchenko ef10_rx_prefix_hash(
11785e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
11795e111ed8SAndrew Rybchenko 	__in		efx_rx_hash_alg_t func,
11805e111ed8SAndrew Rybchenko 	__in		uint8_t *buffer);
11815e111ed8SAndrew Rybchenko 
11825e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_RX_SCALE */
11835e111ed8SAndrew Rybchenko 
11845e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11855e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
11865e111ed8SAndrew Rybchenko ef10_rx_prefix_pktlen(
11875e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
11885e111ed8SAndrew Rybchenko 	__in		uint8_t *buffer,
11895e111ed8SAndrew Rybchenko 	__out		uint16_t *lengthp);
11905e111ed8SAndrew Rybchenko 
11915e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
11925e111ed8SAndrew Rybchenko extern				void
11935e111ed8SAndrew Rybchenko ef10_rx_qpost(
11945e111ed8SAndrew Rybchenko 	__in			efx_rxq_t *erp,
11955e111ed8SAndrew Rybchenko 	__in_ecount(ndescs)	efsys_dma_addr_t *addrp,
11965e111ed8SAndrew Rybchenko 	__in			size_t size,
11975e111ed8SAndrew Rybchenko 	__in			unsigned int ndescs,
11985e111ed8SAndrew Rybchenko 	__in			unsigned int completed,
11995e111ed8SAndrew Rybchenko 	__in			unsigned int added);
12005e111ed8SAndrew Rybchenko 
12015e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
12025e111ed8SAndrew Rybchenko extern			void
12035e111ed8SAndrew Rybchenko ef10_rx_qpush(
12045e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp,
12055e111ed8SAndrew Rybchenko 	__in		unsigned int added,
12065e111ed8SAndrew Rybchenko 	__inout		unsigned int *pushedp);
12075e111ed8SAndrew Rybchenko 
12085e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
12095e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
12105e111ed8SAndrew Rybchenko ef10_rx_qflush(
12115e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp);
12125e111ed8SAndrew Rybchenko 
12135e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
12145e111ed8SAndrew Rybchenko extern		void
12155e111ed8SAndrew Rybchenko ef10_rx_qenable(
12165e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp);
12175e111ed8SAndrew Rybchenko 
12185e111ed8SAndrew Rybchenko union efx_rxq_type_data_u;
12195e111ed8SAndrew Rybchenko 
12205e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
12215e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
12225e111ed8SAndrew Rybchenko ef10_rx_qcreate(
12235e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
12245e111ed8SAndrew Rybchenko 	__in		unsigned int index,
12255e111ed8SAndrew Rybchenko 	__in		unsigned int label,
12265e111ed8SAndrew Rybchenko 	__in		efx_rxq_type_t type,
12275e111ed8SAndrew Rybchenko 	__in_opt	const union efx_rxq_type_data_u *type_data,
12285e111ed8SAndrew Rybchenko 	__in		efsys_mem_t *esmp,
12295e111ed8SAndrew Rybchenko 	__in		size_t ndescs,
12305e111ed8SAndrew Rybchenko 	__in		uint32_t id,
12315e111ed8SAndrew Rybchenko 	__in		unsigned int flags,
12325e111ed8SAndrew Rybchenko 	__in		efx_evq_t *eep,
12335e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp);
12345e111ed8SAndrew Rybchenko 
12355e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
12365e111ed8SAndrew Rybchenko extern			void
12375e111ed8SAndrew Rybchenko ef10_rx_qdestroy(
12385e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp);
12395e111ed8SAndrew Rybchenko 
12405e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
12415e111ed8SAndrew Rybchenko extern			void
12425e111ed8SAndrew Rybchenko ef10_rx_fini(
12435e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
12445e111ed8SAndrew Rybchenko 
12455e111ed8SAndrew Rybchenko #if EFSYS_OPT_FILTER
12465e111ed8SAndrew Rybchenko 
12475e111ed8SAndrew Rybchenko enum efx_filter_replacement_policy_e;
12485e111ed8SAndrew Rybchenko 
12495e111ed8SAndrew Rybchenko typedef struct ef10_filter_handle_s {
12505e111ed8SAndrew Rybchenko 	uint32_t	efh_lo;
12515e111ed8SAndrew Rybchenko 	uint32_t	efh_hi;
12525e111ed8SAndrew Rybchenko } ef10_filter_handle_t;
12535e111ed8SAndrew Rybchenko 
12545e111ed8SAndrew Rybchenko typedef struct ef10_filter_entry_s {
12555e111ed8SAndrew Rybchenko 	uintptr_t efe_spec; /* pointer to filter spec plus busy bit */
12565e111ed8SAndrew Rybchenko 	ef10_filter_handle_t efe_handle;
12575e111ed8SAndrew Rybchenko } ef10_filter_entry_t;
12585e111ed8SAndrew Rybchenko 
12595e111ed8SAndrew Rybchenko /*
12605e111ed8SAndrew Rybchenko  * BUSY flag indicates that an update is in progress.
12615e111ed8SAndrew Rybchenko  * AUTO_OLD flag is used to mark and sweep MAC packet filters.
12625e111ed8SAndrew Rybchenko  */
12635e111ed8SAndrew Rybchenko #define	EFX_EF10_FILTER_FLAG_BUSY	1U
12645e111ed8SAndrew Rybchenko #define	EFX_EF10_FILTER_FLAG_AUTO_OLD	2U
12655e111ed8SAndrew Rybchenko #define	EFX_EF10_FILTER_FLAGS		3U
12665e111ed8SAndrew Rybchenko 
12675e111ed8SAndrew Rybchenko /*
12685e111ed8SAndrew Rybchenko  * Size of the hash table used by the driver. Doesn't need to be the
12695e111ed8SAndrew Rybchenko  * same size as the hardware's table.
12705e111ed8SAndrew Rybchenko  */
12715e111ed8SAndrew Rybchenko #define	EFX_EF10_FILTER_TBL_ROWS 8192
12725e111ed8SAndrew Rybchenko 
12735e111ed8SAndrew Rybchenko /* Only need to allow for one directed and one unknown unicast filter */
12745e111ed8SAndrew Rybchenko #define	EFX_EF10_FILTER_UNICAST_FILTERS_MAX	2
12755e111ed8SAndrew Rybchenko 
12765e111ed8SAndrew Rybchenko /* Allow for the broadcast address to be added to the multicast list */
12775e111ed8SAndrew Rybchenko #define	EFX_EF10_FILTER_MULTICAST_FILTERS_MAX	(EFX_MAC_MULTICAST_LIST_MAX + 1)
12785e111ed8SAndrew Rybchenko 
12795e111ed8SAndrew Rybchenko /*
12805e111ed8SAndrew Rybchenko  * For encapsulated packets, there is one filter each for each combination of
12815e111ed8SAndrew Rybchenko  * IPv4 or IPv6 outer frame, VXLAN, GENEVE or NVGRE packet type, and unicast or
12825e111ed8SAndrew Rybchenko  * multicast inner frames.
12835e111ed8SAndrew Rybchenko  */
12845e111ed8SAndrew Rybchenko #define	EFX_EF10_FILTER_ENCAP_FILTERS_MAX	12
12855e111ed8SAndrew Rybchenko 
12865e111ed8SAndrew Rybchenko typedef struct ef10_filter_table_s {
12875e111ed8SAndrew Rybchenko 	ef10_filter_entry_t	eft_entry[EFX_EF10_FILTER_TBL_ROWS];
12885e111ed8SAndrew Rybchenko 	efx_rxq_t		*eft_default_rxq;
12895e111ed8SAndrew Rybchenko 	boolean_t		eft_using_rss;
12905e111ed8SAndrew Rybchenko 	uint32_t		eft_unicst_filter_indexes[
12915e111ed8SAndrew Rybchenko 	    EFX_EF10_FILTER_UNICAST_FILTERS_MAX];
12925e111ed8SAndrew Rybchenko 	uint32_t		eft_unicst_filter_count;
12935e111ed8SAndrew Rybchenko 	uint32_t		eft_mulcst_filter_indexes[
12945e111ed8SAndrew Rybchenko 	    EFX_EF10_FILTER_MULTICAST_FILTERS_MAX];
12955e111ed8SAndrew Rybchenko 	uint32_t		eft_mulcst_filter_count;
12965e111ed8SAndrew Rybchenko 	boolean_t		eft_using_all_mulcst;
12975e111ed8SAndrew Rybchenko 	uint32_t		eft_encap_filter_indexes[
12985e111ed8SAndrew Rybchenko 	    EFX_EF10_FILTER_ENCAP_FILTERS_MAX];
12995e111ed8SAndrew Rybchenko 	uint32_t		eft_encap_filter_count;
13005e111ed8SAndrew Rybchenko } ef10_filter_table_t;
13015e111ed8SAndrew Rybchenko 
13025e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13035e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
13045e111ed8SAndrew Rybchenko ef10_filter_init(
13055e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
13065e111ed8SAndrew Rybchenko 
13075e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13085e111ed8SAndrew Rybchenko extern			void
13095e111ed8SAndrew Rybchenko ef10_filter_fini(
13105e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
13115e111ed8SAndrew Rybchenko 
13125e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13135e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
13145e111ed8SAndrew Rybchenko ef10_filter_restore(
13155e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
13165e111ed8SAndrew Rybchenko 
13175e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13185e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
13195e111ed8SAndrew Rybchenko ef10_filter_add(
13205e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
13215e111ed8SAndrew Rybchenko 	__inout		efx_filter_spec_t *spec,
13225e111ed8SAndrew Rybchenko 	__in		enum efx_filter_replacement_policy_e policy);
13235e111ed8SAndrew Rybchenko 
13245e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13255e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
13265e111ed8SAndrew Rybchenko ef10_filter_delete(
13275e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
13285e111ed8SAndrew Rybchenko 	__inout		efx_filter_spec_t *spec);
13295e111ed8SAndrew Rybchenko 
13305e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13315e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
13325e111ed8SAndrew Rybchenko ef10_filter_supported_filters(
13335e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
13345e111ed8SAndrew Rybchenko 	__out_ecount(buffer_length)	uint32_t *buffer,
13355e111ed8SAndrew Rybchenko 	__in				size_t buffer_length,
13365e111ed8SAndrew Rybchenko 	__out				size_t *list_lengthp);
13375e111ed8SAndrew Rybchenko 
13385e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13395e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
13405e111ed8SAndrew Rybchenko ef10_filter_reconfigure(
13415e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
13425e111ed8SAndrew Rybchenko 	__in_ecount(6)			uint8_t const *mac_addr,
13435e111ed8SAndrew Rybchenko 	__in				boolean_t all_unicst,
13445e111ed8SAndrew Rybchenko 	__in				boolean_t mulcst,
13455e111ed8SAndrew Rybchenko 	__in				boolean_t all_mulcst,
13465e111ed8SAndrew Rybchenko 	__in				boolean_t brdcst,
13475e111ed8SAndrew Rybchenko 	__in_ecount(6*count)		uint8_t const *addrs,
13485e111ed8SAndrew Rybchenko 	__in				uint32_t count);
13495e111ed8SAndrew Rybchenko 
13505e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1351*35876819SArtemii Morozov extern	__checkReturn	efx_rc_t
1352*35876819SArtemii Morozov ef10_filter_get_count(
1353*35876819SArtemii Morozov 	__in	efx_nic_t *enp,
1354*35876819SArtemii Morozov 	__out	uint32_t *countp);
1355*35876819SArtemii Morozov 
1356*35876819SArtemii Morozov LIBEFX_INTERNAL
13575e111ed8SAndrew Rybchenko extern		void
13585e111ed8SAndrew Rybchenko ef10_filter_get_default_rxq(
13595e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
13605e111ed8SAndrew Rybchenko 	__out		efx_rxq_t **erpp,
13615e111ed8SAndrew Rybchenko 	__out		boolean_t *using_rss);
13625e111ed8SAndrew Rybchenko 
13635e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13645e111ed8SAndrew Rybchenko extern		void
13655e111ed8SAndrew Rybchenko ef10_filter_default_rxq_set(
13665e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
13675e111ed8SAndrew Rybchenko 	__in		efx_rxq_t *erp,
13685e111ed8SAndrew Rybchenko 	__in		boolean_t using_rss);
13695e111ed8SAndrew Rybchenko 
13705e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13715e111ed8SAndrew Rybchenko extern		void
13725e111ed8SAndrew Rybchenko ef10_filter_default_rxq_clear(
13735e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
13745e111ed8SAndrew Rybchenko 
13755e111ed8SAndrew Rybchenko 
13765e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_FILTER */
13775e111ed8SAndrew Rybchenko 
13785e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13795e111ed8SAndrew Rybchenko extern	__checkReturn			efx_rc_t
13805e111ed8SAndrew Rybchenko efx_mcdi_get_function_info(
13815e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
13825e111ed8SAndrew Rybchenko 	__out				uint32_t *pfp,
13837d104a8dSViacheslav Galaktionov 	__out_opt			uint32_t *vfp,
13847d104a8dSViacheslav Galaktionov 	__out_opt			efx_pcie_interface_t *intfp);
13855e111ed8SAndrew Rybchenko 
13865e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13875e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
13885e111ed8SAndrew Rybchenko efx_mcdi_privilege_mask(
13895e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
13905e111ed8SAndrew Rybchenko 	__in			uint32_t pf,
13915e111ed8SAndrew Rybchenko 	__in			uint32_t vf,
13925e111ed8SAndrew Rybchenko 	__out			uint32_t *maskp);
13935e111ed8SAndrew Rybchenko 
13945e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
13955e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
13965e111ed8SAndrew Rybchenko efx_mcdi_get_port_assignment(
13975e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
13985e111ed8SAndrew Rybchenko 	__out		uint32_t *portp);
13995e111ed8SAndrew Rybchenko 
14005e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14015e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14025e111ed8SAndrew Rybchenko efx_mcdi_get_port_modes(
14035e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
14045e111ed8SAndrew Rybchenko 	__out		uint32_t *modesp,
14055e111ed8SAndrew Rybchenko 	__out_opt	uint32_t *current_modep,
14065e111ed8SAndrew Rybchenko 	__out_opt	uint32_t *default_modep);
14075e111ed8SAndrew Rybchenko 
14085e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14095e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14105e111ed8SAndrew Rybchenko ef10_nic_get_port_mode_bandwidth(
14115e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
14125e111ed8SAndrew Rybchenko 	__out		uint32_t *bandwidth_mbpsp);
14135e111ed8SAndrew Rybchenko 
14145e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14155e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14165e111ed8SAndrew Rybchenko efx_mcdi_get_mac_address_pf(
14175e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
14185e111ed8SAndrew Rybchenko 	__out_ecount_opt(6)	uint8_t mac_addrp[6]);
14195e111ed8SAndrew Rybchenko 
14205e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14215e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14225e111ed8SAndrew Rybchenko efx_mcdi_get_mac_address_vf(
14235e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
14245e111ed8SAndrew Rybchenko 	__out_ecount_opt(6)	uint8_t mac_addrp[6]);
14255e111ed8SAndrew Rybchenko 
14265e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14275e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14285e111ed8SAndrew Rybchenko efx_mcdi_get_clock(
14295e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
14305e111ed8SAndrew Rybchenko 	__out		uint32_t *sys_freqp,
14315e111ed8SAndrew Rybchenko 	__out		uint32_t *dpcpu_freqp);
14325e111ed8SAndrew Rybchenko 
14335e111ed8SAndrew Rybchenko 
14345e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14355e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14365e111ed8SAndrew Rybchenko efx_mcdi_get_rxdp_config(
14375e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
14385e111ed8SAndrew Rybchenko 	__out		uint32_t *end_paddingp);
14395e111ed8SAndrew Rybchenko 
14405e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14415e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14425e111ed8SAndrew Rybchenko efx_mcdi_get_vector_cfg(
14435e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
14445e111ed8SAndrew Rybchenko 	__out_opt	uint32_t *vec_basep,
14455e111ed8SAndrew Rybchenko 	__out_opt	uint32_t *pf_nvecp,
14465e111ed8SAndrew Rybchenko 	__out_opt	uint32_t *vf_nvecp);
14475e111ed8SAndrew Rybchenko 
14485e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14495e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14503c1c5cc4SAndrew Rybchenko efx_mcdi_alloc_vis(
14513c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp,
14523c1c5cc4SAndrew Rybchenko 	__in		uint32_t min_vi_count,
14533c1c5cc4SAndrew Rybchenko 	__in		uint32_t max_vi_count,
14543c1c5cc4SAndrew Rybchenko 	__out		uint32_t *vi_basep,
14553c1c5cc4SAndrew Rybchenko 	__out		uint32_t *vi_countp,
14563c1c5cc4SAndrew Rybchenko 	__out		uint32_t *vi_shiftp);
14573c1c5cc4SAndrew Rybchenko 
14583c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
14593c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14603c1c5cc4SAndrew Rybchenko efx_mcdi_free_vis(
14613c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
14623c1c5cc4SAndrew Rybchenko 
14633c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
14643c1c5cc4SAndrew Rybchenko extern	__checkReturn		efx_rc_t
14655e111ed8SAndrew Rybchenko ef10_get_privilege_mask(
14665e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
14675e111ed8SAndrew Rybchenko 	__out			uint32_t *maskp);
14685e111ed8SAndrew Rybchenko 
14693c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
14703c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14713c1c5cc4SAndrew Rybchenko efx_mcdi_nic_board_cfg(
14723c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
14733c1c5cc4SAndrew Rybchenko 
14743c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL
14753c1c5cc4SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14763c1c5cc4SAndrew Rybchenko efx_mcdi_entity_reset(
14773c1c5cc4SAndrew Rybchenko 	__in		efx_nic_t *enp);
14783c1c5cc4SAndrew Rybchenko 
14795e111ed8SAndrew Rybchenko #if EFSYS_OPT_FW_SUBVARIANT_AWARE
14805e111ed8SAndrew Rybchenko 
14815e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14825e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14835e111ed8SAndrew Rybchenko efx_mcdi_get_nic_global(
14845e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
14855e111ed8SAndrew Rybchenko 	__in		uint32_t key,
14865e111ed8SAndrew Rybchenko 	__out		uint32_t *valuep);
14875e111ed8SAndrew Rybchenko 
14885e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14895e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
14905e111ed8SAndrew Rybchenko efx_mcdi_set_nic_global(
14915e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
14925e111ed8SAndrew Rybchenko 	__in		uint32_t key,
14935e111ed8SAndrew Rybchenko 	__in		uint32_t value);
14945e111ed8SAndrew Rybchenko 
14955e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_FW_SUBVARIANT_AWARE */
14965e111ed8SAndrew Rybchenko 
14975e111ed8SAndrew Rybchenko #if EFSYS_OPT_EVB
14985e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
14995e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15005e111ed8SAndrew Rybchenko ef10_evb_init(
15015e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
15025e111ed8SAndrew Rybchenko 
15035e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15045e111ed8SAndrew Rybchenko extern			void
15055e111ed8SAndrew Rybchenko ef10_evb_fini(
15065e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
15075e111ed8SAndrew Rybchenko 
15085e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15095e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15105e111ed8SAndrew Rybchenko ef10_evb_vswitch_alloc(
15115e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15125e111ed8SAndrew Rybchenko 	__out		efx_vswitch_id_t *vswitch_idp);
15135e111ed8SAndrew Rybchenko 
15145e111ed8SAndrew Rybchenko 
15155e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15165e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15175e111ed8SAndrew Rybchenko ef10_evb_vswitch_free(
15185e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15195e111ed8SAndrew Rybchenko 	__in		efx_vswitch_id_t vswitch_id);
15205e111ed8SAndrew Rybchenko 
15215e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15225e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15235e111ed8SAndrew Rybchenko ef10_evb_vport_alloc(
15245e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15255e111ed8SAndrew Rybchenko 	__in		efx_vswitch_id_t vswitch_id,
15265e111ed8SAndrew Rybchenko 	__in		efx_vport_type_t vport_type,
15275e111ed8SAndrew Rybchenko 	__in		uint16_t vid,
15285e111ed8SAndrew Rybchenko 	__in		boolean_t vlan_restrict,
15295e111ed8SAndrew Rybchenko 	__out		efx_vport_id_t *vport_idp);
15305e111ed8SAndrew Rybchenko 
15315e111ed8SAndrew Rybchenko 
15325e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15335e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15345e111ed8SAndrew Rybchenko ef10_evb_vport_free(
15355e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15365e111ed8SAndrew Rybchenko 	__in		efx_vswitch_id_t vswitch_id,
15375e111ed8SAndrew Rybchenko 	__in		efx_vport_id_t vport_id);
15385e111ed8SAndrew Rybchenko 
15395e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15405e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15415e111ed8SAndrew Rybchenko ef10_evb_vport_mac_addr_add(
15425e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15435e111ed8SAndrew Rybchenko 	__in		efx_vswitch_id_t vswitch_id,
15445e111ed8SAndrew Rybchenko 	__in		efx_vport_id_t vport_id,
15455e111ed8SAndrew Rybchenko 	__in_ecount(6)	uint8_t *addrp);
15465e111ed8SAndrew Rybchenko 
15475e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15485e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15495e111ed8SAndrew Rybchenko ef10_evb_vport_mac_addr_del(
15505e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15515e111ed8SAndrew Rybchenko 	__in		efx_vswitch_id_t vswitch_id,
15525e111ed8SAndrew Rybchenko 	__in		efx_vport_id_t vport_id,
15535e111ed8SAndrew Rybchenko 	__in_ecount(6)	uint8_t *addrp);
15545e111ed8SAndrew Rybchenko 
15555e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15565e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15575e111ed8SAndrew Rybchenko ef10_evb_vadaptor_alloc(
15585e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15595e111ed8SAndrew Rybchenko 	__in		efx_vswitch_id_t vswitch_id,
15605e111ed8SAndrew Rybchenko 	__in		efx_vport_id_t vport_id);
15615e111ed8SAndrew Rybchenko 
15625e111ed8SAndrew Rybchenko 
15635e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15645e111ed8SAndrew Rybchenko extern __checkReturn	efx_rc_t
15655e111ed8SAndrew Rybchenko ef10_evb_vadaptor_free(
15665e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15675e111ed8SAndrew Rybchenko 	__in		efx_vswitch_id_t vswitch_id,
15685e111ed8SAndrew Rybchenko 	__in		efx_vport_id_t vport_id);
15695e111ed8SAndrew Rybchenko 
15705e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15715e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15725e111ed8SAndrew Rybchenko ef10_evb_vport_assign(
15735e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15745e111ed8SAndrew Rybchenko 	__in		efx_vswitch_id_t vswitch_id,
15755e111ed8SAndrew Rybchenko 	__in		efx_vport_id_t vport_id,
15765e111ed8SAndrew Rybchenko 	__in		uint32_t vf_index);
15775e111ed8SAndrew Rybchenko 
15785e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15795e111ed8SAndrew Rybchenko extern	__checkReturn				efx_rc_t
15805e111ed8SAndrew Rybchenko ef10_evb_vport_reconfigure(
15815e111ed8SAndrew Rybchenko 	__in					efx_nic_t *enp,
15825e111ed8SAndrew Rybchenko 	__in					efx_vswitch_id_t vswitch_id,
15835e111ed8SAndrew Rybchenko 	__in					efx_vport_id_t vport_id,
15845e111ed8SAndrew Rybchenko 	__in_opt				uint16_t *vidp,
15855e111ed8SAndrew Rybchenko 	__in_bcount_opt(EFX_MAC_ADDR_LEN)	uint8_t *addrp,
15865e111ed8SAndrew Rybchenko 	__out_opt				boolean_t *fn_resetp);
15875e111ed8SAndrew Rybchenko 
15885e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
15895e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
15905e111ed8SAndrew Rybchenko ef10_evb_vport_stats(
15915e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
15925e111ed8SAndrew Rybchenko 	__in		efx_vswitch_id_t vswitch_id,
15935e111ed8SAndrew Rybchenko 	__in		efx_vport_id_t vport_id,
15945e111ed8SAndrew Rybchenko 	__out		efsys_mem_t *esmp);
15955e111ed8SAndrew Rybchenko 
15965e111ed8SAndrew Rybchenko #endif  /* EFSYS_OPT_EVB */
15975e111ed8SAndrew Rybchenko 
15985e111ed8SAndrew Rybchenko #if EFSYS_OPT_MCDI_PROXY_AUTH_SERVER
15995e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
16005e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
16015e111ed8SAndrew Rybchenko ef10_proxy_auth_init(
16025e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
16035e111ed8SAndrew Rybchenko 
16045e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
16055e111ed8SAndrew Rybchenko extern			void
16065e111ed8SAndrew Rybchenko ef10_proxy_auth_fini(
16075e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
16085e111ed8SAndrew Rybchenko 
16095e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
16105e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
16115e111ed8SAndrew Rybchenko ef10_proxy_auth_mc_config(
16125e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
16135e111ed8SAndrew Rybchenko 	__in			efsys_mem_t *request_bufferp,
16145e111ed8SAndrew Rybchenko 	__in			efsys_mem_t *response_bufferp,
16155e111ed8SAndrew Rybchenko 	__in			efsys_mem_t *status_bufferp,
16165e111ed8SAndrew Rybchenko 	__in			uint32_t block_cnt,
16175e111ed8SAndrew Rybchenko 	__in_ecount(op_count)	uint32_t *op_listp,
16185e111ed8SAndrew Rybchenko 	__in			size_t op_count);
16195e111ed8SAndrew Rybchenko 
16205e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
16215e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
16225e111ed8SAndrew Rybchenko ef10_proxy_auth_disable(
16235e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
16245e111ed8SAndrew Rybchenko 
16255e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
16265e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
16275e111ed8SAndrew Rybchenko ef10_proxy_auth_privilege_modify(
16285e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
16295e111ed8SAndrew Rybchenko 	__in		uint32_t fn_group,
16305e111ed8SAndrew Rybchenko 	__in		uint32_t pf_index,
16315e111ed8SAndrew Rybchenko 	__in		uint32_t vf_index,
16325e111ed8SAndrew Rybchenko 	__in		uint32_t add_privileges_mask,
16335e111ed8SAndrew Rybchenko 	__in		uint32_t remove_privileges_mask);
16345e111ed8SAndrew Rybchenko 
16355e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
16365e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
16375e111ed8SAndrew Rybchenko ef10_proxy_auth_set_privilege_mask(
16385e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
16395e111ed8SAndrew Rybchenko 	__in		uint32_t vf_index,
16405e111ed8SAndrew Rybchenko 	__in		uint32_t mask,
16415e111ed8SAndrew Rybchenko 	__in		uint32_t value);
16425e111ed8SAndrew Rybchenko 
16435e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
16445e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
16455e111ed8SAndrew Rybchenko ef10_proxy_auth_complete_request(
16465e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
16475e111ed8SAndrew Rybchenko 	__in		uint32_t fn_index,
16485e111ed8SAndrew Rybchenko 	__in		uint32_t proxy_result,
16495e111ed8SAndrew Rybchenko 	__in		uint32_t handle);
16505e111ed8SAndrew Rybchenko 
16515e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
16525e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
16535e111ed8SAndrew Rybchenko ef10_proxy_auth_exec_cmd(
16545e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
16555e111ed8SAndrew Rybchenko 	__inout		efx_proxy_cmd_params_t *paramsp);
16565e111ed8SAndrew Rybchenko 
16575e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
16585e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
16595e111ed8SAndrew Rybchenko ef10_proxy_auth_get_privilege_mask(
16605e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
16615e111ed8SAndrew Rybchenko 	__in		uint32_t pf_index,
16625e111ed8SAndrew Rybchenko 	__in		uint32_t vf_index,
16635e111ed8SAndrew Rybchenko 	__out		uint32_t *maskp);
16645e111ed8SAndrew Rybchenko 
16655e111ed8SAndrew Rybchenko #endif  /* EFSYS_OPT_MCDI_PROXY_AUTH_SERVER */
16665e111ed8SAndrew Rybchenko 
16675e111ed8SAndrew Rybchenko #if EFSYS_OPT_RX_PACKED_STREAM
16685e111ed8SAndrew Rybchenko 
16695e111ed8SAndrew Rybchenko /* Data space per credit in packed stream mode */
16705e111ed8SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_MEM_PER_CREDIT (1 << 16)
16715e111ed8SAndrew Rybchenko 
16725e111ed8SAndrew Rybchenko /*
16735e111ed8SAndrew Rybchenko  * Received packets are always aligned at this boundary. Also there always
16745e111ed8SAndrew Rybchenko  * exists a gap of this size between packets.
16755e111ed8SAndrew Rybchenko  * (see SF-112241-TC, 4.5)
16765e111ed8SAndrew Rybchenko  */
16775e111ed8SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_ALIGNMENT 64
16785e111ed8SAndrew Rybchenko 
16795e111ed8SAndrew Rybchenko /*
16805e111ed8SAndrew Rybchenko  * Size of a pseudo-header prepended to received packets
16815e111ed8SAndrew Rybchenko  * in packed stream mode
16825e111ed8SAndrew Rybchenko  */
16835e111ed8SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE 8
16845e111ed8SAndrew Rybchenko 
16855e111ed8SAndrew Rybchenko /* Minimum space for packet in packed stream mode */
16865e111ed8SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_MIN_PACKET_SPACE		\
16875e111ed8SAndrew Rybchenko 	EFX_P2ROUNDUP(size_t,				\
16885e111ed8SAndrew Rybchenko 	    EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE +	\
16895e111ed8SAndrew Rybchenko 	    EFX_MAC_PDU_MIN +				\
16905e111ed8SAndrew Rybchenko 	    EFX_RX_PACKED_STREAM_ALIGNMENT,		\
16915e111ed8SAndrew Rybchenko 	    EFX_RX_PACKED_STREAM_ALIGNMENT)
16925e111ed8SAndrew Rybchenko 
16935e111ed8SAndrew Rybchenko /* Maximum number of credits */
16945e111ed8SAndrew Rybchenko #define	EFX_RX_PACKED_STREAM_MAX_CREDITS 127
16955e111ed8SAndrew Rybchenko 
16965e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_RX_PACKED_STREAM */
16975e111ed8SAndrew Rybchenko 
16985e111ed8SAndrew Rybchenko #if EFSYS_OPT_RX_ES_SUPER_BUFFER
16995e111ed8SAndrew Rybchenko 
17005e111ed8SAndrew Rybchenko /*
17015e111ed8SAndrew Rybchenko  * Maximum DMA length and buffer stride alignment.
17025e111ed8SAndrew Rybchenko  * (see SF-119419-TC, 3.2)
17035e111ed8SAndrew Rybchenko  */
17045e111ed8SAndrew Rybchenko #define	EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT	64
17055e111ed8SAndrew Rybchenko 
17065e111ed8SAndrew Rybchenko #endif
17075e111ed8SAndrew Rybchenko 
17085e111ed8SAndrew Rybchenko #ifdef	__cplusplus
17095e111ed8SAndrew Rybchenko }
17105e111ed8SAndrew Rybchenko #endif
17115e111ed8SAndrew Rybchenko 
17125e111ed8SAndrew Rybchenko #endif	/* _SYS_EF10_IMPL_H */
1713