xref: /dpdk/drivers/common/sfc_efx/base/siena_impl.h (revision 672386c1e9e1f64f7aa3b1360ad22dc737ea8d72)
15e111ed8SAndrew Rybchenko /* SPDX-License-Identifier: BSD-3-Clause
25e111ed8SAndrew Rybchenko  *
3*672386c1SAndrew Rybchenko  * Copyright(c) 2019-2021 Xilinx, Inc.
45e111ed8SAndrew Rybchenko  * Copyright(c) 2009-2019 Solarflare Communications Inc.
55e111ed8SAndrew Rybchenko  */
65e111ed8SAndrew Rybchenko 
75e111ed8SAndrew Rybchenko #ifndef _SYS_SIENA_IMPL_H
85e111ed8SAndrew Rybchenko #define	_SYS_SIENA_IMPL_H
95e111ed8SAndrew Rybchenko 
105e111ed8SAndrew Rybchenko #include "efx.h"
115e111ed8SAndrew Rybchenko #include "efx_regs.h"
125e111ed8SAndrew Rybchenko #include "siena_flash.h"
135e111ed8SAndrew Rybchenko 
145e111ed8SAndrew Rybchenko #ifdef	__cplusplus
155e111ed8SAndrew Rybchenko extern "C" {
165e111ed8SAndrew Rybchenko #endif
175e111ed8SAndrew Rybchenko 
185e111ed8SAndrew Rybchenko #ifndef EFX_TXQ_DC_SIZE
195e111ed8SAndrew Rybchenko #define	EFX_TXQ_DC_SIZE 1 /* 16 descriptors */
205e111ed8SAndrew Rybchenko #endif
215e111ed8SAndrew Rybchenko #ifndef EFX_RXQ_DC_SIZE
225e111ed8SAndrew Rybchenko #define	EFX_RXQ_DC_SIZE 3 /* 64 descriptors */
235e111ed8SAndrew Rybchenko #endif
245e111ed8SAndrew Rybchenko #define	EFX_TXQ_DC_NDESCS(_dcsize)	(8 << (_dcsize))
255e111ed8SAndrew Rybchenko #define	EFX_RXQ_DC_NDESCS(_dcsize)	(8 << (_dcsize))
265e111ed8SAndrew Rybchenko 
275e111ed8SAndrew Rybchenko #define	SIENA_EVQ_MAXNEVS	32768
285e111ed8SAndrew Rybchenko #define	SIENA_EVQ_MINNEVS	512
295e111ed8SAndrew Rybchenko 
305e111ed8SAndrew Rybchenko #define	SIENA_TXQ_MAXNDESCS	4096
315e111ed8SAndrew Rybchenko #define	SIENA_TXQ_MINNDESCS	512
325e111ed8SAndrew Rybchenko 
335e111ed8SAndrew Rybchenko #define	SIENA_RXQ_MAXNDESCS	4096
345e111ed8SAndrew Rybchenko #define	SIENA_RXQ_MINNDESCS	512
355e111ed8SAndrew Rybchenko 
365e111ed8SAndrew Rybchenko #define	SIENA_EVQ_DESC_SIZE	(sizeof (efx_qword_t))
375e111ed8SAndrew Rybchenko #define	SIENA_RXQ_DESC_SIZE	(sizeof (efx_qword_t))
385e111ed8SAndrew Rybchenko #define	SIENA_TXQ_DESC_SIZE	(sizeof (efx_qword_t))
395e111ed8SAndrew Rybchenko 
405e111ed8SAndrew Rybchenko #define	SIENA_NVRAM_CHUNK 0x80
415e111ed8SAndrew Rybchenko 
425e111ed8SAndrew Rybchenko 
435e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
445e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
455e111ed8SAndrew Rybchenko siena_nic_probe(
465e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
475e111ed8SAndrew Rybchenko 
485e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
495e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
505e111ed8SAndrew Rybchenko siena_nic_reset(
515e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
525e111ed8SAndrew Rybchenko 
535e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
545e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
555e111ed8SAndrew Rybchenko siena_nic_init(
565e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
575e111ed8SAndrew Rybchenko 
585e111ed8SAndrew Rybchenko #if EFSYS_OPT_DIAG
595e111ed8SAndrew Rybchenko 
605e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
615e111ed8SAndrew Rybchenko extern	efx_sram_pattern_fn_t	__efx_sram_pattern_fns[];
625e111ed8SAndrew Rybchenko 
635e111ed8SAndrew Rybchenko typedef struct siena_register_set_s {
645e111ed8SAndrew Rybchenko 	unsigned int		address;
655e111ed8SAndrew Rybchenko 	unsigned int		step;
665e111ed8SAndrew Rybchenko 	unsigned int		rows;
675e111ed8SAndrew Rybchenko 	efx_oword_t		mask;
685e111ed8SAndrew Rybchenko } siena_register_set_t;
695e111ed8SAndrew Rybchenko 
705e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
715e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
725e111ed8SAndrew Rybchenko siena_nic_register_test(
735e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
745e111ed8SAndrew Rybchenko 
755e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_DIAG */
765e111ed8SAndrew Rybchenko 
775e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
785e111ed8SAndrew Rybchenko extern			void
795e111ed8SAndrew Rybchenko siena_nic_fini(
805e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
815e111ed8SAndrew Rybchenko 
825e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
835e111ed8SAndrew Rybchenko extern			void
845e111ed8SAndrew Rybchenko siena_nic_unprobe(
855e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
865e111ed8SAndrew Rybchenko 
875e111ed8SAndrew Rybchenko #define	SIENA_SRAM_ROWS	0x12000
885e111ed8SAndrew Rybchenko 
895e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
905e111ed8SAndrew Rybchenko extern			void
915e111ed8SAndrew Rybchenko siena_sram_init(
925e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
935e111ed8SAndrew Rybchenko 
945e111ed8SAndrew Rybchenko #if EFSYS_OPT_DIAG
955e111ed8SAndrew Rybchenko 
965e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
975e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
985e111ed8SAndrew Rybchenko siena_sram_test(
995e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
1005e111ed8SAndrew Rybchenko 	__in		efx_sram_pattern_fn_t func);
1015e111ed8SAndrew Rybchenko 
1025e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_DIAG */
1035e111ed8SAndrew Rybchenko 
1045e111ed8SAndrew Rybchenko #if EFSYS_OPT_MCDI
1055e111ed8SAndrew Rybchenko 
1065e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1075e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
1085e111ed8SAndrew Rybchenko siena_mcdi_init(
1095e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
1105e111ed8SAndrew Rybchenko 	__in		const efx_mcdi_transport_t *mtp);
1115e111ed8SAndrew Rybchenko 
1125e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1135e111ed8SAndrew Rybchenko extern			void
1145e111ed8SAndrew Rybchenko siena_mcdi_send_request(
1155e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
1165e111ed8SAndrew Rybchenko 	__in_bcount(hdr_len)	void *hdrp,
1175e111ed8SAndrew Rybchenko 	__in			size_t hdr_len,
1185e111ed8SAndrew Rybchenko 	__in_bcount(sdu_len)	void *sdup,
1195e111ed8SAndrew Rybchenko 	__in			size_t sdu_len);
1205e111ed8SAndrew Rybchenko 
1215e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1225e111ed8SAndrew Rybchenko extern	__checkReturn	boolean_t
1235e111ed8SAndrew Rybchenko siena_mcdi_poll_response(
1245e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
1255e111ed8SAndrew Rybchenko 
1265e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1275e111ed8SAndrew Rybchenko extern			void
1285e111ed8SAndrew Rybchenko siena_mcdi_read_response(
1295e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
1305e111ed8SAndrew Rybchenko 	__out_bcount(length)	void *bufferp,
1315e111ed8SAndrew Rybchenko 	__in			size_t offset,
1325e111ed8SAndrew Rybchenko 	__in			size_t length);
1335e111ed8SAndrew Rybchenko 
1345e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1355e111ed8SAndrew Rybchenko extern			efx_rc_t
1365e111ed8SAndrew Rybchenko siena_mcdi_poll_reboot(
1375e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
1385e111ed8SAndrew Rybchenko 
1395e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1405e111ed8SAndrew Rybchenko extern			void
1415e111ed8SAndrew Rybchenko siena_mcdi_fini(
1425e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
1435e111ed8SAndrew Rybchenko 
1445e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1455e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
1465e111ed8SAndrew Rybchenko siena_mcdi_feature_supported(
1475e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
1485e111ed8SAndrew Rybchenko 	__in		efx_mcdi_feature_id_t id,
1495e111ed8SAndrew Rybchenko 	__out		boolean_t *supportedp);
1505e111ed8SAndrew Rybchenko 
1515e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1525e111ed8SAndrew Rybchenko extern			void
1535e111ed8SAndrew Rybchenko siena_mcdi_get_timeout(
1545e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
1555e111ed8SAndrew Rybchenko 	__in		efx_mcdi_req_t *emrp,
1565e111ed8SAndrew Rybchenko 	__out		uint32_t *timeoutp);
1575e111ed8SAndrew Rybchenko 
1585e111ed8SAndrew Rybchenko #endif /* EFSYS_OPT_MCDI */
1595e111ed8SAndrew Rybchenko 
1605e111ed8SAndrew Rybchenko #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
1615e111ed8SAndrew Rybchenko 
1625e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1635e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
1645e111ed8SAndrew Rybchenko siena_nvram_partn_lock(
1655e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
1665e111ed8SAndrew Rybchenko 	__in			uint32_t partn);
1675e111ed8SAndrew Rybchenko 
1685e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1695e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
1705e111ed8SAndrew Rybchenko siena_nvram_partn_unlock(
1715e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
1725e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
1735e111ed8SAndrew Rybchenko 	__out_opt		uint32_t *verify_resultp);
1745e111ed8SAndrew Rybchenko 
1755e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1765e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
1775e111ed8SAndrew Rybchenko siena_nvram_get_dynamic_cfg(
1785e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
1795e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
1805e111ed8SAndrew Rybchenko 	__in			boolean_t vpd,
1815e111ed8SAndrew Rybchenko 	__out			siena_mc_dynamic_config_hdr_t **dcfgp,
1825e111ed8SAndrew Rybchenko 	__out			size_t *sizep);
1835e111ed8SAndrew Rybchenko 
1845e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_VPD || EFSYS_OPT_NVRAM */
1855e111ed8SAndrew Rybchenko 
1865e111ed8SAndrew Rybchenko #if EFSYS_OPT_NVRAM
1875e111ed8SAndrew Rybchenko 
1885e111ed8SAndrew Rybchenko #if EFSYS_OPT_DIAG
1895e111ed8SAndrew Rybchenko 
1905e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1915e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
1925e111ed8SAndrew Rybchenko siena_nvram_test(
1935e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp);
1945e111ed8SAndrew Rybchenko 
1955e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_DIAG */
1965e111ed8SAndrew Rybchenko 
1975e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
1985e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
1995e111ed8SAndrew Rybchenko siena_nvram_get_subtype(
2005e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2015e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2025e111ed8SAndrew Rybchenko 	__out			uint32_t *subtypep);
2035e111ed8SAndrew Rybchenko 
2045e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2055e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2065e111ed8SAndrew Rybchenko siena_nvram_type_to_partn(
2075e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2085e111ed8SAndrew Rybchenko 	__in			efx_nvram_type_t type,
2095e111ed8SAndrew Rybchenko 	__out			uint32_t *partnp);
2105e111ed8SAndrew Rybchenko 
2115e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2125e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2135e111ed8SAndrew Rybchenko siena_nvram_partn_size(
2145e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2155e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2165e111ed8SAndrew Rybchenko 	__out			size_t *sizep);
2175e111ed8SAndrew Rybchenko 
2185e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2195e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2205e111ed8SAndrew Rybchenko siena_nvram_partn_info(
2215e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2225e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2235e111ed8SAndrew Rybchenko 	__out			efx_nvram_info_t * enip);
2245e111ed8SAndrew Rybchenko 
2255e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2265e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2275e111ed8SAndrew Rybchenko siena_nvram_partn_rw_start(
2285e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2295e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2305e111ed8SAndrew Rybchenko 	__out			size_t *chunk_sizep);
2315e111ed8SAndrew Rybchenko 
2325e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2335e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2345e111ed8SAndrew Rybchenko siena_nvram_partn_read(
2355e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2365e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2375e111ed8SAndrew Rybchenko 	__in			unsigned int offset,
2385e111ed8SAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
2395e111ed8SAndrew Rybchenko 	__in			size_t size);
2405e111ed8SAndrew Rybchenko 
2415e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2425e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2435e111ed8SAndrew Rybchenko siena_nvram_partn_erase(
2445e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2455e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2465e111ed8SAndrew Rybchenko 	__in			unsigned int offset,
2475e111ed8SAndrew Rybchenko 	__in			size_t size);
2485e111ed8SAndrew Rybchenko 
2495e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2505e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2515e111ed8SAndrew Rybchenko siena_nvram_partn_write(
2525e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2535e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2545e111ed8SAndrew Rybchenko 	__in			unsigned int offset,
2555e111ed8SAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
2565e111ed8SAndrew Rybchenko 	__in			size_t size);
2575e111ed8SAndrew Rybchenko 
2585e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2595e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2605e111ed8SAndrew Rybchenko siena_nvram_partn_rw_finish(
2615e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2625e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2635e111ed8SAndrew Rybchenko 	__out_opt		uint32_t *verify_resultp);
2645e111ed8SAndrew Rybchenko 
2655e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2665e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2675e111ed8SAndrew Rybchenko siena_nvram_partn_get_version(
2685e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2695e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2705e111ed8SAndrew Rybchenko 	__out			uint32_t *subtypep,
2715e111ed8SAndrew Rybchenko 	__out_ecount(4)		uint16_t version[4]);
2725e111ed8SAndrew Rybchenko 
2735e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2745e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2755e111ed8SAndrew Rybchenko siena_nvram_partn_set_version(
2765e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2775e111ed8SAndrew Rybchenko 	__in			uint32_t partn,
2785e111ed8SAndrew Rybchenko 	__in_ecount(4)		uint16_t version[4]);
2795e111ed8SAndrew Rybchenko 
2805e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_NVRAM */
2815e111ed8SAndrew Rybchenko 
2825e111ed8SAndrew Rybchenko #if EFSYS_OPT_VPD
2835e111ed8SAndrew Rybchenko 
2845e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2855e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2865e111ed8SAndrew Rybchenko siena_vpd_init(
2875e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp);
2885e111ed8SAndrew Rybchenko 
2895e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2905e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2915e111ed8SAndrew Rybchenko siena_vpd_size(
2925e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2935e111ed8SAndrew Rybchenko 	__out			size_t *sizep);
2945e111ed8SAndrew Rybchenko 
2955e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
2965e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
2975e111ed8SAndrew Rybchenko siena_vpd_read(
2985e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
2995e111ed8SAndrew Rybchenko 	__out_bcount(size)	caddr_t data,
3005e111ed8SAndrew Rybchenko 	__in			size_t size);
3015e111ed8SAndrew Rybchenko 
3025e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3035e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
3045e111ed8SAndrew Rybchenko siena_vpd_verify(
3055e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
3065e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
3075e111ed8SAndrew Rybchenko 	__in			size_t size);
3085e111ed8SAndrew Rybchenko 
3095e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3105e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
3115e111ed8SAndrew Rybchenko siena_vpd_reinit(
3125e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
3135e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
3145e111ed8SAndrew Rybchenko 	__in			size_t size);
3155e111ed8SAndrew Rybchenko 
3165e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3175e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
3185e111ed8SAndrew Rybchenko siena_vpd_get(
3195e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
3205e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
3215e111ed8SAndrew Rybchenko 	__in			size_t size,
3225e111ed8SAndrew Rybchenko 	__inout			efx_vpd_value_t *evvp);
3235e111ed8SAndrew Rybchenko 
3245e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3255e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
3265e111ed8SAndrew Rybchenko siena_vpd_set(
3275e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
3285e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
3295e111ed8SAndrew Rybchenko 	__in			size_t size,
3305e111ed8SAndrew Rybchenko 	__in			efx_vpd_value_t *evvp);
3315e111ed8SAndrew Rybchenko 
3325e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3335e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
3345e111ed8SAndrew Rybchenko siena_vpd_next(
3355e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
3365e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
3375e111ed8SAndrew Rybchenko 	__in			size_t size,
3385e111ed8SAndrew Rybchenko 	__out			efx_vpd_value_t *evvp,
3395e111ed8SAndrew Rybchenko 	__inout			unsigned int *contp);
3405e111ed8SAndrew Rybchenko 
3415e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3425e111ed8SAndrew Rybchenko extern __checkReturn		efx_rc_t
3435e111ed8SAndrew Rybchenko siena_vpd_write(
3445e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
3455e111ed8SAndrew Rybchenko 	__in_bcount(size)	caddr_t data,
3465e111ed8SAndrew Rybchenko 	__in			size_t size);
3475e111ed8SAndrew Rybchenko 
3485e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3495e111ed8SAndrew Rybchenko extern				void
3505e111ed8SAndrew Rybchenko siena_vpd_fini(
3515e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp);
3525e111ed8SAndrew Rybchenko 
3535e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_VPD */
3545e111ed8SAndrew Rybchenko 
3555e111ed8SAndrew Rybchenko typedef struct siena_link_state_s {
3565e111ed8SAndrew Rybchenko 	uint32_t		sls_adv_cap_mask;
3575e111ed8SAndrew Rybchenko 	uint32_t		sls_lp_cap_mask;
3585e111ed8SAndrew Rybchenko 	unsigned int		sls_fcntl;
3595e111ed8SAndrew Rybchenko 	efx_link_mode_t		sls_link_mode;
3605e111ed8SAndrew Rybchenko #if EFSYS_OPT_LOOPBACK
3615e111ed8SAndrew Rybchenko 	efx_loopback_type_t	sls_loopback;
3625e111ed8SAndrew Rybchenko #endif
3635e111ed8SAndrew Rybchenko 	boolean_t		sls_mac_up;
3645e111ed8SAndrew Rybchenko } siena_link_state_t;
3655e111ed8SAndrew Rybchenko 
3665e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3675e111ed8SAndrew Rybchenko extern			void
3685e111ed8SAndrew Rybchenko siena_phy_link_ev(
3695e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
3705e111ed8SAndrew Rybchenko 	__in		efx_qword_t *eqp,
3715e111ed8SAndrew Rybchenko 	__out		efx_link_mode_t *link_modep);
3725e111ed8SAndrew Rybchenko 
3735e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3745e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3755e111ed8SAndrew Rybchenko siena_phy_get_link(
3765e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
3775e111ed8SAndrew Rybchenko 	__out		siena_link_state_t *slsp);
3785e111ed8SAndrew Rybchenko 
3795e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3805e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3815e111ed8SAndrew Rybchenko siena_phy_power(
3825e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
3835e111ed8SAndrew Rybchenko 	__in		boolean_t on);
3845e111ed8SAndrew Rybchenko 
3855e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3865e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3875e111ed8SAndrew Rybchenko siena_phy_reconfigure(
3885e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
3895e111ed8SAndrew Rybchenko 
3905e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3915e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3925e111ed8SAndrew Rybchenko siena_phy_verify(
3935e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp);
3945e111ed8SAndrew Rybchenko 
3955e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
3965e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
3975e111ed8SAndrew Rybchenko siena_phy_oui_get(
3985e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
3995e111ed8SAndrew Rybchenko 	__out		uint32_t *ouip);
4005e111ed8SAndrew Rybchenko 
4015e111ed8SAndrew Rybchenko #if EFSYS_OPT_PHY_STATS
4025e111ed8SAndrew Rybchenko 
4035e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4045e111ed8SAndrew Rybchenko extern						void
4055e111ed8SAndrew Rybchenko siena_phy_decode_stats(
4065e111ed8SAndrew Rybchenko 	__in					efx_nic_t *enp,
4075e111ed8SAndrew Rybchenko 	__in					uint32_t vmask,
4085e111ed8SAndrew Rybchenko 	__in_opt				efsys_mem_t *esmp,
4095e111ed8SAndrew Rybchenko 	__out_opt				uint64_t *smaskp,
4105e111ed8SAndrew Rybchenko 	__inout_ecount_opt(EFX_PHY_NSTATS)	uint32_t *stat);
4115e111ed8SAndrew Rybchenko 
4125e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4135e111ed8SAndrew Rybchenko extern	__checkReturn			efx_rc_t
4145e111ed8SAndrew Rybchenko siena_phy_stats_update(
4155e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
4165e111ed8SAndrew Rybchenko 	__in				efsys_mem_t *esmp,
4175e111ed8SAndrew Rybchenko 	__inout_ecount(EFX_PHY_NSTATS)	uint32_t *stat);
4185e111ed8SAndrew Rybchenko 
4195e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_PHY_STATS */
4205e111ed8SAndrew Rybchenko 
4215e111ed8SAndrew Rybchenko #if EFSYS_OPT_BIST
4225e111ed8SAndrew Rybchenko 
4235e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4245e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
4255e111ed8SAndrew Rybchenko siena_phy_bist_start(
4265e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
4275e111ed8SAndrew Rybchenko 	__in			efx_bist_type_t type);
4285e111ed8SAndrew Rybchenko 
4295e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4305e111ed8SAndrew Rybchenko extern	__checkReturn		efx_rc_t
4315e111ed8SAndrew Rybchenko siena_phy_bist_poll(
4325e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
4335e111ed8SAndrew Rybchenko 	__in			efx_bist_type_t type,
4345e111ed8SAndrew Rybchenko 	__out			efx_bist_result_t *resultp,
4355e111ed8SAndrew Rybchenko 	__out_opt __drv_when(count > 0, __notnull)
4365e111ed8SAndrew Rybchenko 	uint32_t	*value_maskp,
4375e111ed8SAndrew Rybchenko 	__out_ecount_opt(count)	__drv_when(count > 0, __notnull)
4385e111ed8SAndrew Rybchenko 	unsigned long	*valuesp,
4395e111ed8SAndrew Rybchenko 	__in			size_t count);
4405e111ed8SAndrew Rybchenko 
4415e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4425e111ed8SAndrew Rybchenko extern				void
4435e111ed8SAndrew Rybchenko siena_phy_bist_stop(
4445e111ed8SAndrew Rybchenko 	__in			efx_nic_t *enp,
4455e111ed8SAndrew Rybchenko 	__in			efx_bist_type_t type);
4465e111ed8SAndrew Rybchenko 
4475e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_BIST */
4485e111ed8SAndrew Rybchenko 
4495e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4505e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
4515e111ed8SAndrew Rybchenko siena_mac_poll(
4525e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
4535e111ed8SAndrew Rybchenko 	__out		efx_link_mode_t *link_modep);
4545e111ed8SAndrew Rybchenko 
4555e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4565e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
4575e111ed8SAndrew Rybchenko siena_mac_up(
4585e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
4595e111ed8SAndrew Rybchenko 	__out		boolean_t *mac_upp);
4605e111ed8SAndrew Rybchenko 
4615e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4625e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
4635e111ed8SAndrew Rybchenko siena_mac_reconfigure(
4645e111ed8SAndrew Rybchenko 	__in	efx_nic_t *enp);
4655e111ed8SAndrew Rybchenko 
4665e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4675e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
4685e111ed8SAndrew Rybchenko siena_mac_pdu_get(
4695e111ed8SAndrew Rybchenko 	__in	efx_nic_t *enp,
4705e111ed8SAndrew Rybchenko 	__out	size_t *pdu);
4715e111ed8SAndrew Rybchenko 
4725e111ed8SAndrew Rybchenko #if EFSYS_OPT_LOOPBACK
4735e111ed8SAndrew Rybchenko 
4745e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4755e111ed8SAndrew Rybchenko extern	__checkReturn	efx_rc_t
4765e111ed8SAndrew Rybchenko siena_mac_loopback_set(
4775e111ed8SAndrew Rybchenko 	__in		efx_nic_t *enp,
4785e111ed8SAndrew Rybchenko 	__in		efx_link_mode_t link_mode,
4795e111ed8SAndrew Rybchenko 	__in		efx_loopback_type_t loopback_type);
4805e111ed8SAndrew Rybchenko 
4815e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_LOOPBACK */
4825e111ed8SAndrew Rybchenko 
4835e111ed8SAndrew Rybchenko #if EFSYS_OPT_MAC_STATS
4845e111ed8SAndrew Rybchenko 
4855e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4865e111ed8SAndrew Rybchenko extern	__checkReturn			efx_rc_t
4875e111ed8SAndrew Rybchenko siena_mac_stats_get_mask(
4885e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
4895e111ed8SAndrew Rybchenko 	__inout_bcount(mask_size)	uint32_t *maskp,
4905e111ed8SAndrew Rybchenko 	__in				size_t mask_size);
4915e111ed8SAndrew Rybchenko 
4925e111ed8SAndrew Rybchenko LIBEFX_INTERNAL
4935e111ed8SAndrew Rybchenko extern	__checkReturn			efx_rc_t
4945e111ed8SAndrew Rybchenko siena_mac_stats_update(
4955e111ed8SAndrew Rybchenko 	__in				efx_nic_t *enp,
4965e111ed8SAndrew Rybchenko 	__in				efsys_mem_t *esmp,
4975e111ed8SAndrew Rybchenko 	__inout_ecount(EFX_MAC_NSTATS)	efsys_stat_t *stat,
4985e111ed8SAndrew Rybchenko 	__inout_opt			uint32_t *generationp);
4995e111ed8SAndrew Rybchenko 
5005e111ed8SAndrew Rybchenko #endif	/* EFSYS_OPT_MAC_STATS */
5015e111ed8SAndrew Rybchenko 
5025e111ed8SAndrew Rybchenko #ifdef	__cplusplus
5035e111ed8SAndrew Rybchenko }
5045e111ed8SAndrew Rybchenko #endif
5055e111ed8SAndrew Rybchenko 
5065e111ed8SAndrew Rybchenko #endif	/* _SYS_SIENA_IMPL_H */
507