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