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