15f5c71ccSAndrew Rybchenko /*- 2929c7febSAndrew Rybchenko * Copyright (c) 2015-2016 Solarflare Communications Inc. 35f5c71ccSAndrew Rybchenko * All rights reserved. 45f5c71ccSAndrew Rybchenko * 55f5c71ccSAndrew Rybchenko * Redistribution and use in source and binary forms, with or without 65f5c71ccSAndrew Rybchenko * modification, are permitted provided that the following conditions are met: 75f5c71ccSAndrew Rybchenko * 85f5c71ccSAndrew Rybchenko * 1. Redistributions of source code must retain the above copyright notice, 95f5c71ccSAndrew Rybchenko * this list of conditions and the following disclaimer. 105f5c71ccSAndrew Rybchenko * 2. Redistributions in binary form must reproduce the above copyright notice, 115f5c71ccSAndrew Rybchenko * this list of conditions and the following disclaimer in the documentation 125f5c71ccSAndrew Rybchenko * and/or other materials provided with the distribution. 135f5c71ccSAndrew Rybchenko * 145f5c71ccSAndrew Rybchenko * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 155f5c71ccSAndrew Rybchenko * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 165f5c71ccSAndrew Rybchenko * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 175f5c71ccSAndrew Rybchenko * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 185f5c71ccSAndrew Rybchenko * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 195f5c71ccSAndrew Rybchenko * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 205f5c71ccSAndrew Rybchenko * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 215f5c71ccSAndrew Rybchenko * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 225f5c71ccSAndrew Rybchenko * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 235f5c71ccSAndrew Rybchenko * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 245f5c71ccSAndrew Rybchenko * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 255f5c71ccSAndrew Rybchenko * 265f5c71ccSAndrew Rybchenko * The views and conclusions contained in the software and documentation are 275f5c71ccSAndrew Rybchenko * those of the authors and should not be interpreted as representing official 285f5c71ccSAndrew Rybchenko * policies, either expressed or implied, of the FreeBSD Project. 295f5c71ccSAndrew Rybchenko */ 305f5c71ccSAndrew Rybchenko 315f5c71ccSAndrew Rybchenko #ifndef _SYS_EF10_IMPL_H 325f5c71ccSAndrew Rybchenko #define _SYS_EF10_IMPL_H 335f5c71ccSAndrew Rybchenko 345f5c71ccSAndrew Rybchenko #ifdef __cplusplus 355f5c71ccSAndrew Rybchenko extern "C" { 365f5c71ccSAndrew Rybchenko #endif 375f5c71ccSAndrew Rybchenko 384f58306cSAndrew Rybchenko /* Number of hardware PIO buffers (for compile-time resource dimensions) */ 394f58306cSAndrew Rybchenko #define EF10_MAX_PIOBUF_NBUFS (16) 404f58306cSAndrew Rybchenko 414f58306cSAndrew Rybchenko #if EFSYS_OPT_HUNTINGTON 424f58306cSAndrew Rybchenko # if (EF10_MAX_PIOBUF_NBUFS < HUNT_PIOBUF_NBUFS) 434f58306cSAndrew Rybchenko # error "EF10_MAX_PIOBUF_NBUFS too small" 44e7119ad9SAndrew Rybchenko # endif 454f58306cSAndrew Rybchenko #endif /* EFSYS_OPT_HUNTINGTON */ 464f58306cSAndrew Rybchenko #if EFSYS_OPT_MEDFORD 474f58306cSAndrew Rybchenko # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD_PIOBUF_NBUFS) 484f58306cSAndrew Rybchenko # error "EF10_MAX_PIOBUF_NBUFS too small" 494f58306cSAndrew Rybchenko # endif 504f58306cSAndrew Rybchenko #endif /* EFSYS_OPT_MEDFORD */ 514f58306cSAndrew Rybchenko #if EFSYS_OPT_MEDFORD2 524f58306cSAndrew Rybchenko # if (EF10_MAX_PIOBUF_NBUFS < MEDFORD2_PIOBUF_NBUFS) 534f58306cSAndrew Rybchenko # error "EF10_MAX_PIOBUF_NBUFS too small" 544f58306cSAndrew Rybchenko # endif 554f58306cSAndrew Rybchenko #endif /* EFSYS_OPT_MEDFORD2 */ 564f58306cSAndrew Rybchenko 5716e5d7bfSAndrew Rybchenko /* 5816e5d7bfSAndrew Rybchenko * FIXME: This is just a power of 2 which fits in an MCDI v1 message, and could 5916e5d7bfSAndrew Rybchenko * possibly be increased, or the write size reported by newer firmware used 6016e5d7bfSAndrew Rybchenko * instead. 6116e5d7bfSAndrew Rybchenko */ 6216e5d7bfSAndrew Rybchenko #define EF10_NVRAM_CHUNK 0x80 6316e5d7bfSAndrew Rybchenko 6495c45bd0SAndrew Rybchenko /* 6595c45bd0SAndrew Rybchenko * Alignment requirement for value written to RX WPTR: the WPTR must be aligned 6695c45bd0SAndrew Rybchenko * to an 8 descriptor boundary. 6716e5d7bfSAndrew Rybchenko */ 6816e5d7bfSAndrew Rybchenko #define EF10_RX_WPTR_ALIGN 8 6916e5d7bfSAndrew Rybchenko 7016e5d7bfSAndrew Rybchenko /* 7116e5d7bfSAndrew Rybchenko * Max byte offset into the packet the TCP header must start for the hardware 7216e5d7bfSAndrew Rybchenko * to be able to parse the packet correctly. 7316e5d7bfSAndrew Rybchenko */ 7416e5d7bfSAndrew Rybchenko #define EF10_TCP_HEADER_OFFSET_LIMIT 208 7516e5d7bfSAndrew Rybchenko 7616e5d7bfSAndrew Rybchenko /* Invalid RSS context handle */ 7716e5d7bfSAndrew Rybchenko #define EF10_RSS_CONTEXT_INVALID (0xffffffff) 7816e5d7bfSAndrew Rybchenko 7916e5d7bfSAndrew Rybchenko /* EV */ 8016e5d7bfSAndrew Rybchenko 8116e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 8216e5d7bfSAndrew Rybchenko ef10_ev_init( 8316e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 8416e5d7bfSAndrew Rybchenko 8516e5d7bfSAndrew Rybchenko void 8616e5d7bfSAndrew Rybchenko ef10_ev_fini( 8716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 8816e5d7bfSAndrew Rybchenko 8916e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 9016e5d7bfSAndrew Rybchenko ef10_ev_qcreate( 9116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 9216e5d7bfSAndrew Rybchenko __in unsigned int index, 9316e5d7bfSAndrew Rybchenko __in efsys_mem_t *esmp, 9469953083SAndrew Rybchenko __in size_t ndescs, 9516e5d7bfSAndrew Rybchenko __in uint32_t id, 965c4c3d92SAndrew Rybchenko __in uint32_t us, 97a3fe009aSAndrew Rybchenko __in uint32_t flags, 9816e5d7bfSAndrew Rybchenko __in efx_evq_t *eep); 9916e5d7bfSAndrew Rybchenko 10016e5d7bfSAndrew Rybchenko void 10116e5d7bfSAndrew Rybchenko ef10_ev_qdestroy( 10216e5d7bfSAndrew Rybchenko __in efx_evq_t *eep); 10316e5d7bfSAndrew Rybchenko 10416e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 10516e5d7bfSAndrew Rybchenko ef10_ev_qprime( 10616e5d7bfSAndrew Rybchenko __in efx_evq_t *eep, 10716e5d7bfSAndrew Rybchenko __in unsigned int count); 10816e5d7bfSAndrew Rybchenko 10916e5d7bfSAndrew Rybchenko void 11016e5d7bfSAndrew Rybchenko ef10_ev_qpost( 11116e5d7bfSAndrew Rybchenko __in efx_evq_t *eep, 11216e5d7bfSAndrew Rybchenko __in uint16_t data); 11316e5d7bfSAndrew Rybchenko 11416e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 11516e5d7bfSAndrew Rybchenko ef10_ev_qmoderate( 11616e5d7bfSAndrew Rybchenko __in efx_evq_t *eep, 11716e5d7bfSAndrew Rybchenko __in unsigned int us); 11816e5d7bfSAndrew Rybchenko 11916e5d7bfSAndrew Rybchenko #if EFSYS_OPT_QSTATS 12016e5d7bfSAndrew Rybchenko void 12116e5d7bfSAndrew Rybchenko ef10_ev_qstats_update( 12216e5d7bfSAndrew Rybchenko __in efx_evq_t *eep, 12316e5d7bfSAndrew Rybchenko __inout_ecount(EV_NQSTATS) efsys_stat_t *stat); 12416e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */ 12516e5d7bfSAndrew Rybchenko 12616e5d7bfSAndrew Rybchenko void 12716e5d7bfSAndrew Rybchenko ef10_ev_rxlabel_init( 12816e5d7bfSAndrew Rybchenko __in efx_evq_t *eep, 12916e5d7bfSAndrew Rybchenko __in efx_rxq_t *erp, 1308e0c4827SAndrew Rybchenko __in unsigned int label, 1311aa1b495SAndrew Rybchenko __in efx_rxq_type_t type); 13216e5d7bfSAndrew Rybchenko 13316e5d7bfSAndrew Rybchenko void 13416e5d7bfSAndrew Rybchenko ef10_ev_rxlabel_fini( 13516e5d7bfSAndrew Rybchenko __in efx_evq_t *eep, 13616e5d7bfSAndrew Rybchenko __in unsigned int label); 13716e5d7bfSAndrew Rybchenko 13816e5d7bfSAndrew Rybchenko /* INTR */ 13916e5d7bfSAndrew Rybchenko 14016e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 14116e5d7bfSAndrew Rybchenko ef10_intr_init( 14216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 14316e5d7bfSAndrew Rybchenko __in efx_intr_type_t type, 14416e5d7bfSAndrew Rybchenko __in efsys_mem_t *esmp); 14516e5d7bfSAndrew Rybchenko 14616e5d7bfSAndrew Rybchenko void 14716e5d7bfSAndrew Rybchenko ef10_intr_enable( 14816e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 14916e5d7bfSAndrew Rybchenko 15016e5d7bfSAndrew Rybchenko void 15116e5d7bfSAndrew Rybchenko ef10_intr_disable( 15216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 15316e5d7bfSAndrew Rybchenko 15416e5d7bfSAndrew Rybchenko void 15516e5d7bfSAndrew Rybchenko ef10_intr_disable_unlocked( 15616e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 15716e5d7bfSAndrew Rybchenko 15816e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 15916e5d7bfSAndrew Rybchenko ef10_intr_trigger( 16016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 16116e5d7bfSAndrew Rybchenko __in unsigned int level); 16216e5d7bfSAndrew Rybchenko 16316e5d7bfSAndrew Rybchenko void 16416e5d7bfSAndrew Rybchenko ef10_intr_status_line( 16516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 16616e5d7bfSAndrew Rybchenko __out boolean_t *fatalp, 16716e5d7bfSAndrew Rybchenko __out uint32_t *qmaskp); 16816e5d7bfSAndrew Rybchenko 16916e5d7bfSAndrew Rybchenko void 17016e5d7bfSAndrew Rybchenko ef10_intr_status_message( 17116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 17216e5d7bfSAndrew Rybchenko __in unsigned int message, 17316e5d7bfSAndrew Rybchenko __out boolean_t *fatalp); 17416e5d7bfSAndrew Rybchenko 17516e5d7bfSAndrew Rybchenko void 17616e5d7bfSAndrew Rybchenko ef10_intr_fatal( 17716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 17816e5d7bfSAndrew Rybchenko void 17916e5d7bfSAndrew Rybchenko ef10_intr_fini( 18016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 18116e5d7bfSAndrew Rybchenko 18216e5d7bfSAndrew Rybchenko /* NIC */ 18316e5d7bfSAndrew Rybchenko 18416e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 18516e5d7bfSAndrew Rybchenko ef10_nic_probe( 18616e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 18716e5d7bfSAndrew Rybchenko 18816e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 18916e5d7bfSAndrew Rybchenko ef10_nic_set_drv_limits( 19016e5d7bfSAndrew Rybchenko __inout efx_nic_t *enp, 19116e5d7bfSAndrew Rybchenko __in efx_drv_limits_t *edlp); 19216e5d7bfSAndrew Rybchenko 19316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 19416e5d7bfSAndrew Rybchenko ef10_nic_get_vi_pool( 19516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 19616e5d7bfSAndrew Rybchenko __out uint32_t *vi_countp); 19716e5d7bfSAndrew Rybchenko 19816e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 19916e5d7bfSAndrew Rybchenko ef10_nic_get_bar_region( 20016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 20116e5d7bfSAndrew Rybchenko __in efx_nic_region_t region, 20216e5d7bfSAndrew Rybchenko __out uint32_t *offsetp, 20316e5d7bfSAndrew Rybchenko __out size_t *sizep); 20416e5d7bfSAndrew Rybchenko 20516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 20616e5d7bfSAndrew Rybchenko ef10_nic_reset( 20716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 20816e5d7bfSAndrew Rybchenko 20916e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 21016e5d7bfSAndrew Rybchenko ef10_nic_init( 21116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 21216e5d7bfSAndrew Rybchenko 213c6d5e85dSAndrew Rybchenko extern __checkReturn boolean_t 214c6d5e85dSAndrew Rybchenko ef10_nic_hw_unavailable( 215c6d5e85dSAndrew Rybchenko __in efx_nic_t *enp); 216c6d5e85dSAndrew Rybchenko 217b2053d80SAndrew Rybchenko extern void 218b2053d80SAndrew Rybchenko ef10_nic_set_hw_unavailable( 219b2053d80SAndrew Rybchenko __in efx_nic_t *enp); 220b2053d80SAndrew Rybchenko 22116e5d7bfSAndrew Rybchenko #if EFSYS_OPT_DIAG 22216e5d7bfSAndrew Rybchenko 22316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 22416e5d7bfSAndrew Rybchenko ef10_nic_register_test( 22516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 22616e5d7bfSAndrew Rybchenko 22716e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_DIAG */ 22816e5d7bfSAndrew Rybchenko 22916e5d7bfSAndrew Rybchenko extern void 23016e5d7bfSAndrew Rybchenko ef10_nic_fini( 23116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 23216e5d7bfSAndrew Rybchenko 23316e5d7bfSAndrew Rybchenko extern void 23416e5d7bfSAndrew Rybchenko ef10_nic_unprobe( 23516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 23616e5d7bfSAndrew Rybchenko 23716e5d7bfSAndrew Rybchenko /* MAC */ 23816e5d7bfSAndrew Rybchenko 23916e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 24016e5d7bfSAndrew Rybchenko ef10_mac_poll( 24116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 24216e5d7bfSAndrew Rybchenko __out efx_link_mode_t *link_modep); 24316e5d7bfSAndrew Rybchenko 24416e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 24516e5d7bfSAndrew Rybchenko ef10_mac_up( 24616e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 24716e5d7bfSAndrew Rybchenko __out boolean_t *mac_upp); 24816e5d7bfSAndrew Rybchenko 24916e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 25016e5d7bfSAndrew Rybchenko ef10_mac_addr_set( 25116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 25216e5d7bfSAndrew Rybchenko 25316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 25416e5d7bfSAndrew Rybchenko ef10_mac_pdu_set( 25516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 25616e5d7bfSAndrew Rybchenko 25716e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 258d8484af2SAndrew Rybchenko ef10_mac_pdu_get( 259d8484af2SAndrew Rybchenko __in efx_nic_t *enp, 260d8484af2SAndrew Rybchenko __out size_t *pdu); 261d8484af2SAndrew Rybchenko 262d8484af2SAndrew Rybchenko extern __checkReturn efx_rc_t 26316e5d7bfSAndrew Rybchenko ef10_mac_reconfigure( 26416e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 26516e5d7bfSAndrew Rybchenko 26616e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 26716e5d7bfSAndrew Rybchenko ef10_mac_multicast_list_set( 26816e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 26916e5d7bfSAndrew Rybchenko 27016e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 27116e5d7bfSAndrew Rybchenko ef10_mac_filter_default_rxq_set( 27216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 27316e5d7bfSAndrew Rybchenko __in efx_rxq_t *erp, 27416e5d7bfSAndrew Rybchenko __in boolean_t using_rss); 27516e5d7bfSAndrew Rybchenko 27616e5d7bfSAndrew Rybchenko extern void 27716e5d7bfSAndrew Rybchenko ef10_mac_filter_default_rxq_clear( 27816e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 27916e5d7bfSAndrew Rybchenko 28016e5d7bfSAndrew Rybchenko #if EFSYS_OPT_LOOPBACK 28116e5d7bfSAndrew Rybchenko 28216e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 28316e5d7bfSAndrew Rybchenko ef10_mac_loopback_set( 28416e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 28516e5d7bfSAndrew Rybchenko __in efx_link_mode_t link_mode, 28616e5d7bfSAndrew Rybchenko __in efx_loopback_type_t loopback_type); 28716e5d7bfSAndrew Rybchenko 28816e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_LOOPBACK */ 28916e5d7bfSAndrew Rybchenko 29016e5d7bfSAndrew Rybchenko #if EFSYS_OPT_MAC_STATS 29116e5d7bfSAndrew Rybchenko 29216e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 29358a72cb2SAndrew Rybchenko ef10_mac_stats_get_mask( 29458a72cb2SAndrew Rybchenko __in efx_nic_t *enp, 29558a72cb2SAndrew Rybchenko __inout_bcount(mask_size) uint32_t *maskp, 29658a72cb2SAndrew Rybchenko __in size_t mask_size); 29758a72cb2SAndrew Rybchenko 29858a72cb2SAndrew Rybchenko extern __checkReturn efx_rc_t 29916e5d7bfSAndrew Rybchenko ef10_mac_stats_update( 30016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 30116e5d7bfSAndrew Rybchenko __in efsys_mem_t *esmp, 30216e5d7bfSAndrew Rybchenko __inout_ecount(EFX_MAC_NSTATS) efsys_stat_t *stat, 30316e5d7bfSAndrew Rybchenko __inout_opt uint32_t *generationp); 30416e5d7bfSAndrew Rybchenko 30516e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_MAC_STATS */ 30616e5d7bfSAndrew Rybchenko 30716e5d7bfSAndrew Rybchenko /* MCDI */ 30816e5d7bfSAndrew Rybchenko 30916e5d7bfSAndrew Rybchenko #if EFSYS_OPT_MCDI 31016e5d7bfSAndrew Rybchenko 31116e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 31216e5d7bfSAndrew Rybchenko ef10_mcdi_init( 31316e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 31416e5d7bfSAndrew Rybchenko __in const efx_mcdi_transport_t *mtp); 31516e5d7bfSAndrew Rybchenko 31616e5d7bfSAndrew Rybchenko extern void 31716e5d7bfSAndrew Rybchenko ef10_mcdi_fini( 31816e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 31916e5d7bfSAndrew Rybchenko 32016e5d7bfSAndrew Rybchenko extern void 32116e5d7bfSAndrew Rybchenko ef10_mcdi_send_request( 32216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 3233222b9deSAndrew Rybchenko __in_bcount(hdr_len) void *hdrp, 32416e5d7bfSAndrew Rybchenko __in size_t hdr_len, 3253222b9deSAndrew Rybchenko __in_bcount(sdu_len) void *sdup, 32616e5d7bfSAndrew Rybchenko __in size_t sdu_len); 32716e5d7bfSAndrew Rybchenko 32816e5d7bfSAndrew Rybchenko extern __checkReturn boolean_t 32916e5d7bfSAndrew Rybchenko ef10_mcdi_poll_response( 33016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 33116e5d7bfSAndrew Rybchenko 33216e5d7bfSAndrew Rybchenko extern void 33316e5d7bfSAndrew Rybchenko ef10_mcdi_read_response( 33416e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 33516e5d7bfSAndrew Rybchenko __out_bcount(length) void *bufferp, 33616e5d7bfSAndrew Rybchenko __in size_t offset, 33716e5d7bfSAndrew Rybchenko __in size_t length); 33816e5d7bfSAndrew Rybchenko 33916e5d7bfSAndrew Rybchenko extern efx_rc_t 34016e5d7bfSAndrew Rybchenko ef10_mcdi_poll_reboot( 34116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 34216e5d7bfSAndrew Rybchenko 34316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 34416e5d7bfSAndrew Rybchenko ef10_mcdi_feature_supported( 34516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 34616e5d7bfSAndrew Rybchenko __in efx_mcdi_feature_id_t id, 34716e5d7bfSAndrew Rybchenko __out boolean_t *supportedp); 34816e5d7bfSAndrew Rybchenko 3498a4fcbd4SAndrew Rybchenko extern void 3508a4fcbd4SAndrew Rybchenko ef10_mcdi_get_timeout( 3518a4fcbd4SAndrew Rybchenko __in efx_nic_t *enp, 3528a4fcbd4SAndrew Rybchenko __in efx_mcdi_req_t *emrp, 3538a4fcbd4SAndrew Rybchenko __out uint32_t *timeoutp); 3548a4fcbd4SAndrew Rybchenko 35516e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_MCDI */ 35616e5d7bfSAndrew Rybchenko 35716e5d7bfSAndrew Rybchenko /* NVRAM */ 35816e5d7bfSAndrew Rybchenko 35916e5d7bfSAndrew Rybchenko #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD 36016e5d7bfSAndrew Rybchenko 36116e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 36216e5d7bfSAndrew Rybchenko ef10_nvram_buf_read_tlv( 36316e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 36416e5d7bfSAndrew Rybchenko __in_bcount(max_seg_size) caddr_t seg_data, 36516e5d7bfSAndrew Rybchenko __in size_t max_seg_size, 36616e5d7bfSAndrew Rybchenko __in uint32_t tag, 36716e5d7bfSAndrew Rybchenko __deref_out_bcount_opt(*sizep) caddr_t *datap, 36816e5d7bfSAndrew Rybchenko __out size_t *sizep); 36916e5d7bfSAndrew Rybchenko 37016e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 37116e5d7bfSAndrew Rybchenko ef10_nvram_buf_write_tlv( 37216e5d7bfSAndrew Rybchenko __inout_bcount(partn_size) caddr_t partn_data, 37316e5d7bfSAndrew Rybchenko __in size_t partn_size, 37416e5d7bfSAndrew Rybchenko __in uint32_t tag, 37516e5d7bfSAndrew Rybchenko __in_bcount(tag_size) caddr_t tag_data, 37616e5d7bfSAndrew Rybchenko __in size_t tag_size, 37716e5d7bfSAndrew Rybchenko __out size_t *total_lengthp); 37816e5d7bfSAndrew Rybchenko 37916e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 38016e5d7bfSAndrew Rybchenko ef10_nvram_partn_read_tlv( 38116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 38216e5d7bfSAndrew Rybchenko __in uint32_t partn, 38316e5d7bfSAndrew Rybchenko __in uint32_t tag, 38416e5d7bfSAndrew Rybchenko __deref_out_bcount_opt(*sizep) caddr_t *datap, 38516e5d7bfSAndrew Rybchenko __out size_t *sizep); 38616e5d7bfSAndrew Rybchenko 38716e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 38816e5d7bfSAndrew Rybchenko ef10_nvram_partn_write_tlv( 38916e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 39016e5d7bfSAndrew Rybchenko __in uint32_t partn, 39116e5d7bfSAndrew Rybchenko __in uint32_t tag, 39216e5d7bfSAndrew Rybchenko __in_bcount(size) caddr_t data, 39316e5d7bfSAndrew Rybchenko __in size_t size); 39416e5d7bfSAndrew Rybchenko 39516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 39616e5d7bfSAndrew Rybchenko ef10_nvram_partn_write_segment_tlv( 39716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 39816e5d7bfSAndrew Rybchenko __in uint32_t partn, 39916e5d7bfSAndrew Rybchenko __in uint32_t tag, 40016e5d7bfSAndrew Rybchenko __in_bcount(size) caddr_t data, 40116e5d7bfSAndrew Rybchenko __in size_t size, 40216e5d7bfSAndrew Rybchenko __in boolean_t all_segments); 40316e5d7bfSAndrew Rybchenko 40416e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 40516e5d7bfSAndrew Rybchenko ef10_nvram_partn_lock( 40616e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 40716e5d7bfSAndrew Rybchenko __in uint32_t partn); 40816e5d7bfSAndrew Rybchenko 409e9c123a5SAndrew Rybchenko extern __checkReturn efx_rc_t 41016e5d7bfSAndrew Rybchenko ef10_nvram_partn_unlock( 41116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 412f92697a4SAndrew Rybchenko __in uint32_t partn, 413f92697a4SAndrew Rybchenko __out_opt uint32_t *resultp); 41416e5d7bfSAndrew Rybchenko 41516e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_NVRAM || EFSYS_OPT_VPD */ 41616e5d7bfSAndrew Rybchenko 41716e5d7bfSAndrew Rybchenko #if EFSYS_OPT_NVRAM 41816e5d7bfSAndrew Rybchenko 41916e5d7bfSAndrew Rybchenko #if EFSYS_OPT_DIAG 42016e5d7bfSAndrew Rybchenko 42116e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 42216e5d7bfSAndrew Rybchenko ef10_nvram_test( 42316e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 42416e5d7bfSAndrew Rybchenko 42516e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_DIAG */ 42616e5d7bfSAndrew Rybchenko 42716e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 42816e5d7bfSAndrew Rybchenko ef10_nvram_type_to_partn( 42916e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 43016e5d7bfSAndrew Rybchenko __in efx_nvram_type_t type, 43116e5d7bfSAndrew Rybchenko __out uint32_t *partnp); 43216e5d7bfSAndrew Rybchenko 43316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 43416e5d7bfSAndrew Rybchenko ef10_nvram_partn_size( 43516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 43616e5d7bfSAndrew Rybchenko __in uint32_t partn, 43716e5d7bfSAndrew Rybchenko __out size_t *sizep); 43816e5d7bfSAndrew Rybchenko 43916e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 44016e5d7bfSAndrew Rybchenko ef10_nvram_partn_rw_start( 44116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 44216e5d7bfSAndrew Rybchenko __in uint32_t partn, 44316e5d7bfSAndrew Rybchenko __out size_t *chunk_sizep); 44416e5d7bfSAndrew Rybchenko 44516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 44616e5d7bfSAndrew Rybchenko ef10_nvram_partn_read_mode( 44716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 44816e5d7bfSAndrew Rybchenko __in uint32_t partn, 44916e5d7bfSAndrew Rybchenko __in unsigned int offset, 45016e5d7bfSAndrew Rybchenko __out_bcount(size) caddr_t data, 45116e5d7bfSAndrew Rybchenko __in size_t size, 45216e5d7bfSAndrew Rybchenko __in uint32_t mode); 45316e5d7bfSAndrew Rybchenko 45416e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 45516e5d7bfSAndrew Rybchenko ef10_nvram_partn_read( 45616e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 45716e5d7bfSAndrew Rybchenko __in uint32_t partn, 45816e5d7bfSAndrew Rybchenko __in unsigned int offset, 459dbcc3c8fSAndrew Rybchenko __in_bcount(size) caddr_t data, 46016e5d7bfSAndrew Rybchenko __in size_t size); 46116e5d7bfSAndrew Rybchenko 46216e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 463ede1a3edSAndrew Rybchenko ef10_nvram_partn_read_backup( 464ede1a3edSAndrew Rybchenko __in efx_nic_t *enp, 465ede1a3edSAndrew Rybchenko __in uint32_t partn, 466ede1a3edSAndrew Rybchenko __in unsigned int offset, 467ede1a3edSAndrew Rybchenko __out_bcount(size) caddr_t data, 468ede1a3edSAndrew Rybchenko __in size_t size); 469ede1a3edSAndrew Rybchenko 470ede1a3edSAndrew Rybchenko extern __checkReturn efx_rc_t 47116e5d7bfSAndrew Rybchenko ef10_nvram_partn_erase( 47216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 47316e5d7bfSAndrew Rybchenko __in uint32_t partn, 47416e5d7bfSAndrew Rybchenko __in unsigned int offset, 47516e5d7bfSAndrew Rybchenko __in size_t size); 47616e5d7bfSAndrew Rybchenko 47716e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 47816e5d7bfSAndrew Rybchenko ef10_nvram_partn_write( 47916e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 48016e5d7bfSAndrew Rybchenko __in uint32_t partn, 48116e5d7bfSAndrew Rybchenko __in unsigned int offset, 48216e5d7bfSAndrew Rybchenko __out_bcount(size) caddr_t data, 48316e5d7bfSAndrew Rybchenko __in size_t size); 48416e5d7bfSAndrew Rybchenko 485e9c123a5SAndrew Rybchenko extern __checkReturn efx_rc_t 48616e5d7bfSAndrew Rybchenko ef10_nvram_partn_rw_finish( 48716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 488a21b2f20SAndrew Rybchenko __in uint32_t partn, 489a21b2f20SAndrew Rybchenko __out_opt uint32_t *verify_resultp); 49016e5d7bfSAndrew Rybchenko 49116e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 49216e5d7bfSAndrew Rybchenko ef10_nvram_partn_get_version( 49316e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 49416e5d7bfSAndrew Rybchenko __in uint32_t partn, 49516e5d7bfSAndrew Rybchenko __out uint32_t *subtypep, 49616e5d7bfSAndrew Rybchenko __out_ecount(4) uint16_t version[4]); 49716e5d7bfSAndrew Rybchenko 49816e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 49916e5d7bfSAndrew Rybchenko ef10_nvram_partn_set_version( 50016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 50116e5d7bfSAndrew Rybchenko __in uint32_t partn, 50216e5d7bfSAndrew Rybchenko __in_ecount(4) uint16_t version[4]); 50316e5d7bfSAndrew Rybchenko 50416e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 50516e5d7bfSAndrew Rybchenko ef10_nvram_buffer_validate( 50616e5d7bfSAndrew Rybchenko __in uint32_t partn, 50716e5d7bfSAndrew Rybchenko __in_bcount(buffer_size) 50816e5d7bfSAndrew Rybchenko caddr_t bufferp, 50916e5d7bfSAndrew Rybchenko __in size_t buffer_size); 51016e5d7bfSAndrew Rybchenko 511e919b7ecSAndrew Rybchenko extern void 512e919b7ecSAndrew Rybchenko ef10_nvram_buffer_init( 513e919b7ecSAndrew Rybchenko __out_bcount(buffer_size) 514e919b7ecSAndrew Rybchenko caddr_t bufferp, 515e919b7ecSAndrew Rybchenko __in size_t buffer_size); 516e919b7ecSAndrew Rybchenko 51716e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 51816e5d7bfSAndrew Rybchenko ef10_nvram_buffer_create( 519e919b7ecSAndrew Rybchenko __in uint32_t partn_type, 520e919b7ecSAndrew Rybchenko __out_bcount(buffer_size) 52116e5d7bfSAndrew Rybchenko caddr_t bufferp, 52216e5d7bfSAndrew Rybchenko __in size_t buffer_size); 52316e5d7bfSAndrew Rybchenko 52416e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 52516e5d7bfSAndrew Rybchenko ef10_nvram_buffer_find_item_start( 52616e5d7bfSAndrew Rybchenko __in_bcount(buffer_size) 52716e5d7bfSAndrew Rybchenko caddr_t bufferp, 52816e5d7bfSAndrew Rybchenko __in size_t buffer_size, 52995c45bd0SAndrew Rybchenko __out uint32_t *startp); 53016e5d7bfSAndrew Rybchenko 53116e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 53216e5d7bfSAndrew Rybchenko ef10_nvram_buffer_find_end( 53316e5d7bfSAndrew Rybchenko __in_bcount(buffer_size) 53416e5d7bfSAndrew Rybchenko caddr_t bufferp, 53516e5d7bfSAndrew Rybchenko __in size_t buffer_size, 53616e5d7bfSAndrew Rybchenko __in uint32_t offset, 53795c45bd0SAndrew Rybchenko __out uint32_t *endp); 53816e5d7bfSAndrew Rybchenko 53916e5d7bfSAndrew Rybchenko extern __checkReturn __success(return != B_FALSE) boolean_t 54016e5d7bfSAndrew Rybchenko ef10_nvram_buffer_find_item( 54116e5d7bfSAndrew Rybchenko __in_bcount(buffer_size) 54216e5d7bfSAndrew Rybchenko caddr_t bufferp, 54316e5d7bfSAndrew Rybchenko __in size_t buffer_size, 54416e5d7bfSAndrew Rybchenko __in uint32_t offset, 54516e5d7bfSAndrew Rybchenko __out uint32_t *startp, 54695c45bd0SAndrew Rybchenko __out uint32_t *lengthp); 54716e5d7bfSAndrew Rybchenko 54816e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 549e919b7ecSAndrew Rybchenko ef10_nvram_buffer_peek_item( 550e919b7ecSAndrew Rybchenko __in_bcount(buffer_size) 551e919b7ecSAndrew Rybchenko caddr_t bufferp, 552e919b7ecSAndrew Rybchenko __in size_t buffer_size, 553e919b7ecSAndrew Rybchenko __in uint32_t offset, 554e919b7ecSAndrew Rybchenko __out uint32_t *tagp, 555e919b7ecSAndrew Rybchenko __out uint32_t *lengthp, 556e919b7ecSAndrew Rybchenko __out uint32_t *value_offsetp); 557e919b7ecSAndrew Rybchenko 558e919b7ecSAndrew Rybchenko extern __checkReturn efx_rc_t 55916e5d7bfSAndrew Rybchenko ef10_nvram_buffer_get_item( 56016e5d7bfSAndrew Rybchenko __in_bcount(buffer_size) 56116e5d7bfSAndrew Rybchenko caddr_t bufferp, 56216e5d7bfSAndrew Rybchenko __in size_t buffer_size, 56316e5d7bfSAndrew Rybchenko __in uint32_t offset, 56416e5d7bfSAndrew Rybchenko __in uint32_t length, 565e919b7ecSAndrew Rybchenko __out uint32_t *tagp, 566e919b7ecSAndrew Rybchenko __out_bcount_part(value_max_size, *lengthp) 567e919b7ecSAndrew Rybchenko caddr_t valuep, 568e919b7ecSAndrew Rybchenko __in size_t value_max_size, 56995c45bd0SAndrew Rybchenko __out uint32_t *lengthp); 57016e5d7bfSAndrew Rybchenko 57116e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 57216e5d7bfSAndrew Rybchenko ef10_nvram_buffer_insert_item( 57316e5d7bfSAndrew Rybchenko __in_bcount(buffer_size) 57416e5d7bfSAndrew Rybchenko caddr_t bufferp, 57516e5d7bfSAndrew Rybchenko __in size_t buffer_size, 57616e5d7bfSAndrew Rybchenko __in uint32_t offset, 577e919b7ecSAndrew Rybchenko __in uint32_t tag, 578e919b7ecSAndrew Rybchenko __in_bcount(length) caddr_t valuep, 579e919b7ecSAndrew Rybchenko __in uint32_t length, 580e919b7ecSAndrew Rybchenko __out uint32_t *lengthp); 581e919b7ecSAndrew Rybchenko 582e919b7ecSAndrew Rybchenko extern __checkReturn efx_rc_t 583e919b7ecSAndrew Rybchenko ef10_nvram_buffer_modify_item( 584e919b7ecSAndrew Rybchenko __in_bcount(buffer_size) 585e919b7ecSAndrew Rybchenko caddr_t bufferp, 586e919b7ecSAndrew Rybchenko __in size_t buffer_size, 587e919b7ecSAndrew Rybchenko __in uint32_t offset, 588e919b7ecSAndrew Rybchenko __in uint32_t tag, 589e919b7ecSAndrew Rybchenko __in_bcount(length) caddr_t valuep, 59016e5d7bfSAndrew Rybchenko __in uint32_t length, 59195c45bd0SAndrew Rybchenko __out uint32_t *lengthp); 59216e5d7bfSAndrew Rybchenko 59316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 59416e5d7bfSAndrew Rybchenko ef10_nvram_buffer_delete_item( 59516e5d7bfSAndrew Rybchenko __in_bcount(buffer_size) 59616e5d7bfSAndrew Rybchenko caddr_t bufferp, 59716e5d7bfSAndrew Rybchenko __in size_t buffer_size, 59816e5d7bfSAndrew Rybchenko __in uint32_t offset, 59916e5d7bfSAndrew Rybchenko __in uint32_t length, 60095c45bd0SAndrew Rybchenko __in uint32_t end); 60116e5d7bfSAndrew Rybchenko 60216e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 60316e5d7bfSAndrew Rybchenko ef10_nvram_buffer_finish( 60416e5d7bfSAndrew Rybchenko __in_bcount(buffer_size) 60516e5d7bfSAndrew Rybchenko caddr_t bufferp, 60695c45bd0SAndrew Rybchenko __in size_t buffer_size); 60716e5d7bfSAndrew Rybchenko 60816e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_NVRAM */ 60916e5d7bfSAndrew Rybchenko 61016e5d7bfSAndrew Rybchenko /* PHY */ 61116e5d7bfSAndrew Rybchenko 61216e5d7bfSAndrew Rybchenko typedef struct ef10_link_state_s { 613cf94ca37SAndrew Rybchenko efx_phy_link_state_t epls; 61416e5d7bfSAndrew Rybchenko #if EFSYS_OPT_LOOPBACK 61516e5d7bfSAndrew Rybchenko efx_loopback_type_t els_loopback; 61616e5d7bfSAndrew Rybchenko #endif 61716e5d7bfSAndrew Rybchenko boolean_t els_mac_up; 61816e5d7bfSAndrew Rybchenko } ef10_link_state_t; 61916e5d7bfSAndrew Rybchenko 62016e5d7bfSAndrew Rybchenko extern void 62116e5d7bfSAndrew Rybchenko ef10_phy_link_ev( 62216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 62316e5d7bfSAndrew Rybchenko __in efx_qword_t *eqp, 62416e5d7bfSAndrew Rybchenko __out efx_link_mode_t *link_modep); 62516e5d7bfSAndrew Rybchenko 62616e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 62716e5d7bfSAndrew Rybchenko ef10_phy_get_link( 62816e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 62916e5d7bfSAndrew Rybchenko __out ef10_link_state_t *elsp); 63016e5d7bfSAndrew Rybchenko 63116e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 63216e5d7bfSAndrew Rybchenko ef10_phy_power( 63316e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 63416e5d7bfSAndrew Rybchenko __in boolean_t on); 63516e5d7bfSAndrew Rybchenko 63616e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 63716e5d7bfSAndrew Rybchenko ef10_phy_reconfigure( 63816e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 63916e5d7bfSAndrew Rybchenko 64016e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 64116e5d7bfSAndrew Rybchenko ef10_phy_verify( 64216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 64316e5d7bfSAndrew Rybchenko 64416e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 64516e5d7bfSAndrew Rybchenko ef10_phy_oui_get( 64616e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 64716e5d7bfSAndrew Rybchenko __out uint32_t *ouip); 64816e5d7bfSAndrew Rybchenko 649a8c1489fSAndrew Rybchenko extern __checkReturn efx_rc_t 650cf94ca37SAndrew Rybchenko ef10_phy_link_state_get( 651a8c1489fSAndrew Rybchenko __in efx_nic_t *enp, 652cf94ca37SAndrew Rybchenko __out efx_phy_link_state_t *eplsp); 653a8c1489fSAndrew Rybchenko 65416e5d7bfSAndrew Rybchenko #if EFSYS_OPT_PHY_STATS 65516e5d7bfSAndrew Rybchenko 65616e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 65716e5d7bfSAndrew Rybchenko ef10_phy_stats_update( 65816e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 65916e5d7bfSAndrew Rybchenko __in efsys_mem_t *esmp, 66016e5d7bfSAndrew Rybchenko __inout_ecount(EFX_PHY_NSTATS) uint32_t *stat); 66116e5d7bfSAndrew Rybchenko 66216e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_PHY_STATS */ 66316e5d7bfSAndrew Rybchenko 664cc7a82f5SAndrew Rybchenko #if EFSYS_OPT_BIST 665cc7a82f5SAndrew Rybchenko 666cc7a82f5SAndrew Rybchenko extern __checkReturn efx_rc_t 667cc7a82f5SAndrew Rybchenko ef10_bist_enable_offline( 668cc7a82f5SAndrew Rybchenko __in efx_nic_t *enp); 669cc7a82f5SAndrew Rybchenko 670cc7a82f5SAndrew Rybchenko extern __checkReturn efx_rc_t 671cc7a82f5SAndrew Rybchenko ef10_bist_start( 672cc7a82f5SAndrew Rybchenko __in efx_nic_t *enp, 673cc7a82f5SAndrew Rybchenko __in efx_bist_type_t type); 674cc7a82f5SAndrew Rybchenko 675cc7a82f5SAndrew Rybchenko extern __checkReturn efx_rc_t 676cc7a82f5SAndrew Rybchenko ef10_bist_poll( 677cc7a82f5SAndrew Rybchenko __in efx_nic_t *enp, 678cc7a82f5SAndrew Rybchenko __in efx_bist_type_t type, 679cc7a82f5SAndrew Rybchenko __out efx_bist_result_t *resultp, 680cc7a82f5SAndrew Rybchenko __out_opt __drv_when(count > 0, __notnull) 681cc7a82f5SAndrew Rybchenko uint32_t *value_maskp, 682cc7a82f5SAndrew Rybchenko __out_ecount_opt(count) __drv_when(count > 0, __notnull) 683cc7a82f5SAndrew Rybchenko unsigned long *valuesp, 684cc7a82f5SAndrew Rybchenko __in size_t count); 685cc7a82f5SAndrew Rybchenko 686cc7a82f5SAndrew Rybchenko extern void 687cc7a82f5SAndrew Rybchenko ef10_bist_stop( 688cc7a82f5SAndrew Rybchenko __in efx_nic_t *enp, 689cc7a82f5SAndrew Rybchenko __in efx_bist_type_t type); 690cc7a82f5SAndrew Rybchenko 691cc7a82f5SAndrew Rybchenko #endif /* EFSYS_OPT_BIST */ 69216e5d7bfSAndrew Rybchenko 69316e5d7bfSAndrew Rybchenko /* TX */ 69416e5d7bfSAndrew Rybchenko 69516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 69616e5d7bfSAndrew Rybchenko ef10_tx_init( 69716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 69816e5d7bfSAndrew Rybchenko 69916e5d7bfSAndrew Rybchenko extern void 70016e5d7bfSAndrew Rybchenko ef10_tx_fini( 70116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 70216e5d7bfSAndrew Rybchenko 70316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 70416e5d7bfSAndrew Rybchenko ef10_tx_qcreate( 70516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 70616e5d7bfSAndrew Rybchenko __in unsigned int index, 70716e5d7bfSAndrew Rybchenko __in unsigned int label, 70816e5d7bfSAndrew Rybchenko __in efsys_mem_t *esmp, 7090c9ef1f5SAndrew Rybchenko __in size_t ndescs, 71016e5d7bfSAndrew Rybchenko __in uint32_t id, 71116e5d7bfSAndrew Rybchenko __in uint16_t flags, 71216e5d7bfSAndrew Rybchenko __in efx_evq_t *eep, 71316e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 71416e5d7bfSAndrew Rybchenko __out unsigned int *addedp); 71516e5d7bfSAndrew Rybchenko 71616e5d7bfSAndrew Rybchenko extern void 71716e5d7bfSAndrew Rybchenko ef10_tx_qdestroy( 71816e5d7bfSAndrew Rybchenko __in efx_txq_t *etp); 71916e5d7bfSAndrew Rybchenko 72016e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 72116e5d7bfSAndrew Rybchenko ef10_tx_qpost( 72216e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 7230c9ef1f5SAndrew Rybchenko __in_ecount(ndescs) efx_buffer_t *ebp, 7240c9ef1f5SAndrew Rybchenko __in unsigned int ndescs, 72516e5d7bfSAndrew Rybchenko __in unsigned int completed, 72616e5d7bfSAndrew Rybchenko __inout unsigned int *addedp); 72716e5d7bfSAndrew Rybchenko 72816e5d7bfSAndrew Rybchenko extern void 72916e5d7bfSAndrew Rybchenko ef10_tx_qpush( 73016e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 73116e5d7bfSAndrew Rybchenko __in unsigned int added, 73216e5d7bfSAndrew Rybchenko __in unsigned int pushed); 73316e5d7bfSAndrew Rybchenko 7348e0c4827SAndrew Rybchenko #if EFSYS_OPT_RX_PACKED_STREAM 7358e0c4827SAndrew Rybchenko extern void 7368e0c4827SAndrew Rybchenko ef10_rx_qpush_ps_credits( 7378e0c4827SAndrew Rybchenko __in efx_rxq_t *erp); 7388e0c4827SAndrew Rybchenko 7398e0c4827SAndrew Rybchenko extern __checkReturn uint8_t * 7408e0c4827SAndrew Rybchenko ef10_rx_qps_packet_info( 7418e0c4827SAndrew Rybchenko __in efx_rxq_t *erp, 7428e0c4827SAndrew Rybchenko __in uint8_t *buffer, 7438e0c4827SAndrew Rybchenko __in uint32_t buffer_length, 7448e0c4827SAndrew Rybchenko __in uint32_t current_offset, 7458e0c4827SAndrew Rybchenko __out uint16_t *lengthp, 7468e0c4827SAndrew Rybchenko __out uint32_t *next_offsetp, 7478e0c4827SAndrew Rybchenko __out uint32_t *timestamp); 7488e0c4827SAndrew Rybchenko #endif 7498e0c4827SAndrew Rybchenko 75016e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 75116e5d7bfSAndrew Rybchenko ef10_tx_qpace( 75216e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 75316e5d7bfSAndrew Rybchenko __in unsigned int ns); 75416e5d7bfSAndrew Rybchenko 75516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 75616e5d7bfSAndrew Rybchenko ef10_tx_qflush( 75716e5d7bfSAndrew Rybchenko __in efx_txq_t *etp); 75816e5d7bfSAndrew Rybchenko 75916e5d7bfSAndrew Rybchenko extern void 76016e5d7bfSAndrew Rybchenko ef10_tx_qenable( 76116e5d7bfSAndrew Rybchenko __in efx_txq_t *etp); 76216e5d7bfSAndrew Rybchenko 76316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 76416e5d7bfSAndrew Rybchenko ef10_tx_qpio_enable( 76516e5d7bfSAndrew Rybchenko __in efx_txq_t *etp); 76616e5d7bfSAndrew Rybchenko 76716e5d7bfSAndrew Rybchenko extern void 76816e5d7bfSAndrew Rybchenko ef10_tx_qpio_disable( 76916e5d7bfSAndrew Rybchenko __in efx_txq_t *etp); 77016e5d7bfSAndrew Rybchenko 77116e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 77216e5d7bfSAndrew Rybchenko ef10_tx_qpio_write( 77316e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 77416e5d7bfSAndrew Rybchenko __in_ecount(buf_length) uint8_t *buffer, 77516e5d7bfSAndrew Rybchenko __in size_t buf_length, 77616e5d7bfSAndrew Rybchenko __in size_t pio_buf_offset); 77716e5d7bfSAndrew Rybchenko 77816e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 77916e5d7bfSAndrew Rybchenko ef10_tx_qpio_post( 78016e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 78116e5d7bfSAndrew Rybchenko __in size_t pkt_length, 78216e5d7bfSAndrew Rybchenko __in unsigned int completed, 78316e5d7bfSAndrew Rybchenko __inout unsigned int *addedp); 78416e5d7bfSAndrew Rybchenko 78516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 78616e5d7bfSAndrew Rybchenko ef10_tx_qdesc_post( 78716e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 78816e5d7bfSAndrew Rybchenko __in_ecount(n) efx_desc_t *ed, 78916e5d7bfSAndrew Rybchenko __in unsigned int n, 79016e5d7bfSAndrew Rybchenko __in unsigned int completed, 79116e5d7bfSAndrew Rybchenko __inout unsigned int *addedp); 79216e5d7bfSAndrew Rybchenko 79316e5d7bfSAndrew Rybchenko extern void 79416e5d7bfSAndrew Rybchenko ef10_tx_qdesc_dma_create( 79516e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 79616e5d7bfSAndrew Rybchenko __in efsys_dma_addr_t addr, 79716e5d7bfSAndrew Rybchenko __in size_t size, 79816e5d7bfSAndrew Rybchenko __in boolean_t eop, 79916e5d7bfSAndrew Rybchenko __out efx_desc_t *edp); 80016e5d7bfSAndrew Rybchenko 80116e5d7bfSAndrew Rybchenko extern void 80216e5d7bfSAndrew Rybchenko ef10_tx_qdesc_tso_create( 80316e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 80416e5d7bfSAndrew Rybchenko __in uint16_t ipv4_id, 80516e5d7bfSAndrew Rybchenko __in uint32_t tcp_seq, 80616e5d7bfSAndrew Rybchenko __in uint8_t tcp_flags, 80716e5d7bfSAndrew Rybchenko __out efx_desc_t *edp); 80816e5d7bfSAndrew Rybchenko 80916e5d7bfSAndrew Rybchenko extern void 81016e5d7bfSAndrew Rybchenko ef10_tx_qdesc_tso2_create( 81116e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 81216e5d7bfSAndrew Rybchenko __in uint16_t ipv4_id, 8134142e8cfSAndrew Rybchenko __in uint16_t outer_ipv4_id, 81416e5d7bfSAndrew Rybchenko __in uint32_t tcp_seq, 81516e5d7bfSAndrew Rybchenko __in uint16_t tcp_mss, 81616e5d7bfSAndrew Rybchenko __out_ecount(count) efx_desc_t *edp, 81716e5d7bfSAndrew Rybchenko __in int count); 81816e5d7bfSAndrew Rybchenko 81916e5d7bfSAndrew Rybchenko extern void 82016e5d7bfSAndrew Rybchenko ef10_tx_qdesc_vlantci_create( 82116e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 82216e5d7bfSAndrew Rybchenko __in uint16_t vlan_tci, 82316e5d7bfSAndrew Rybchenko __out efx_desc_t *edp); 82416e5d7bfSAndrew Rybchenko 8254effeb9eSAndrew Rybchenko extern void 8264effeb9eSAndrew Rybchenko ef10_tx_qdesc_checksum_create( 8274effeb9eSAndrew Rybchenko __in efx_txq_t *etp, 8284effeb9eSAndrew Rybchenko __in uint16_t flags, 8294effeb9eSAndrew Rybchenko __out efx_desc_t *edp); 83016e5d7bfSAndrew Rybchenko 83116e5d7bfSAndrew Rybchenko #if EFSYS_OPT_QSTATS 83216e5d7bfSAndrew Rybchenko 83316e5d7bfSAndrew Rybchenko extern void 83416e5d7bfSAndrew Rybchenko ef10_tx_qstats_update( 83516e5d7bfSAndrew Rybchenko __in efx_txq_t *etp, 83616e5d7bfSAndrew Rybchenko __inout_ecount(TX_NQSTATS) efsys_stat_t *stat); 83716e5d7bfSAndrew Rybchenko 83816e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */ 83916e5d7bfSAndrew Rybchenko 84016e5d7bfSAndrew Rybchenko typedef uint32_t efx_piobuf_handle_t; 84116e5d7bfSAndrew Rybchenko 84216e5d7bfSAndrew Rybchenko #define EFX_PIOBUF_HANDLE_INVALID ((efx_piobuf_handle_t)-1) 84316e5d7bfSAndrew Rybchenko 84416e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 84516e5d7bfSAndrew Rybchenko ef10_nic_pio_alloc( 84616e5d7bfSAndrew Rybchenko __inout efx_nic_t *enp, 84716e5d7bfSAndrew Rybchenko __out uint32_t *bufnump, 84816e5d7bfSAndrew Rybchenko __out efx_piobuf_handle_t *handlep, 84916e5d7bfSAndrew Rybchenko __out uint32_t *blknump, 85016e5d7bfSAndrew Rybchenko __out uint32_t *offsetp, 85116e5d7bfSAndrew Rybchenko __out size_t *sizep); 85216e5d7bfSAndrew Rybchenko 85316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 85416e5d7bfSAndrew Rybchenko ef10_nic_pio_free( 85516e5d7bfSAndrew Rybchenko __inout efx_nic_t *enp, 85616e5d7bfSAndrew Rybchenko __in uint32_t bufnum, 85716e5d7bfSAndrew Rybchenko __in uint32_t blknum); 85816e5d7bfSAndrew Rybchenko 85916e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 86016e5d7bfSAndrew Rybchenko ef10_nic_pio_link( 86116e5d7bfSAndrew Rybchenko __inout efx_nic_t *enp, 86216e5d7bfSAndrew Rybchenko __in uint32_t vi_index, 86316e5d7bfSAndrew Rybchenko __in efx_piobuf_handle_t handle); 86416e5d7bfSAndrew Rybchenko 86516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 86616e5d7bfSAndrew Rybchenko ef10_nic_pio_unlink( 86716e5d7bfSAndrew Rybchenko __inout efx_nic_t *enp, 86816e5d7bfSAndrew Rybchenko __in uint32_t vi_index); 86916e5d7bfSAndrew Rybchenko 87016e5d7bfSAndrew Rybchenko /* VPD */ 87116e5d7bfSAndrew Rybchenko 87216e5d7bfSAndrew Rybchenko #if EFSYS_OPT_VPD 87316e5d7bfSAndrew Rybchenko 87416e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 87516e5d7bfSAndrew Rybchenko ef10_vpd_init( 87616e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 87716e5d7bfSAndrew Rybchenko 87816e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 87916e5d7bfSAndrew Rybchenko ef10_vpd_size( 88016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 88116e5d7bfSAndrew Rybchenko __out size_t *sizep); 88216e5d7bfSAndrew Rybchenko 88316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 88416e5d7bfSAndrew Rybchenko ef10_vpd_read( 88516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 88616e5d7bfSAndrew Rybchenko __out_bcount(size) caddr_t data, 88716e5d7bfSAndrew Rybchenko __in size_t size); 88816e5d7bfSAndrew Rybchenko 88916e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 89016e5d7bfSAndrew Rybchenko ef10_vpd_verify( 89116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 89216e5d7bfSAndrew Rybchenko __in_bcount(size) caddr_t data, 89316e5d7bfSAndrew Rybchenko __in size_t size); 89416e5d7bfSAndrew Rybchenko 89516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 89616e5d7bfSAndrew Rybchenko ef10_vpd_reinit( 89716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 89816e5d7bfSAndrew Rybchenko __in_bcount(size) caddr_t data, 89916e5d7bfSAndrew Rybchenko __in size_t size); 90016e5d7bfSAndrew Rybchenko 90116e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 90216e5d7bfSAndrew Rybchenko ef10_vpd_get( 90316e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 90416e5d7bfSAndrew Rybchenko __in_bcount(size) caddr_t data, 90516e5d7bfSAndrew Rybchenko __in size_t size, 90616e5d7bfSAndrew Rybchenko __inout efx_vpd_value_t *evvp); 90716e5d7bfSAndrew Rybchenko 90816e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 90916e5d7bfSAndrew Rybchenko ef10_vpd_set( 91016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 91116e5d7bfSAndrew Rybchenko __in_bcount(size) caddr_t data, 91216e5d7bfSAndrew Rybchenko __in size_t size, 91316e5d7bfSAndrew Rybchenko __in efx_vpd_value_t *evvp); 91416e5d7bfSAndrew Rybchenko 91516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 91616e5d7bfSAndrew Rybchenko ef10_vpd_next( 91716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 91816e5d7bfSAndrew Rybchenko __in_bcount(size) caddr_t data, 91916e5d7bfSAndrew Rybchenko __in size_t size, 92016e5d7bfSAndrew Rybchenko __out efx_vpd_value_t *evvp, 92116e5d7bfSAndrew Rybchenko __inout unsigned int *contp); 92216e5d7bfSAndrew Rybchenko 92316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 92416e5d7bfSAndrew Rybchenko ef10_vpd_write( 92516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 92616e5d7bfSAndrew Rybchenko __in_bcount(size) caddr_t data, 92716e5d7bfSAndrew Rybchenko __in size_t size); 92816e5d7bfSAndrew Rybchenko 92916e5d7bfSAndrew Rybchenko extern void 93016e5d7bfSAndrew Rybchenko ef10_vpd_fini( 93116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 93216e5d7bfSAndrew Rybchenko 93316e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_VPD */ 93416e5d7bfSAndrew Rybchenko 93516e5d7bfSAndrew Rybchenko /* RX */ 93616e5d7bfSAndrew Rybchenko 93716e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 93816e5d7bfSAndrew Rybchenko ef10_rx_init( 93916e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 94016e5d7bfSAndrew Rybchenko 94116e5d7bfSAndrew Rybchenko #if EFSYS_OPT_RX_SCATTER 94216e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 94316e5d7bfSAndrew Rybchenko ef10_rx_scatter_enable( 94416e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 94516e5d7bfSAndrew Rybchenko __in unsigned int buf_size); 94616e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_RX_SCATTER */ 94716e5d7bfSAndrew Rybchenko 94816e5d7bfSAndrew Rybchenko #if EFSYS_OPT_RX_SCALE 94916e5d7bfSAndrew Rybchenko 95016e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 951e6d55a0bSAndrew Rybchenko ef10_rx_scale_context_alloc( 952e6d55a0bSAndrew Rybchenko __in efx_nic_t *enp, 953e6d55a0bSAndrew Rybchenko __in efx_rx_scale_context_type_t type, 954e6d55a0bSAndrew Rybchenko __in uint32_t num_queues, 955e6d55a0bSAndrew Rybchenko __out uint32_t *rss_contextp); 956e6d55a0bSAndrew Rybchenko 957e6d55a0bSAndrew Rybchenko extern __checkReturn efx_rc_t 958e6d55a0bSAndrew Rybchenko ef10_rx_scale_context_free( 959e6d55a0bSAndrew Rybchenko __in efx_nic_t *enp, 960e6d55a0bSAndrew Rybchenko __in uint32_t rss_context); 961e6d55a0bSAndrew Rybchenko 962e6d55a0bSAndrew Rybchenko extern __checkReturn efx_rc_t 96316e5d7bfSAndrew Rybchenko ef10_rx_scale_mode_set( 96416e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 96582af879cSAndrew Rybchenko __in uint32_t rss_context, 96616e5d7bfSAndrew Rybchenko __in efx_rx_hash_alg_t alg, 96716e5d7bfSAndrew Rybchenko __in efx_rx_hash_type_t type, 96816e5d7bfSAndrew Rybchenko __in boolean_t insert); 96916e5d7bfSAndrew Rybchenko 97016e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 97116e5d7bfSAndrew Rybchenko ef10_rx_scale_key_set( 97216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 97382af879cSAndrew Rybchenko __in uint32_t rss_context, 97416e5d7bfSAndrew Rybchenko __in_ecount(n) uint8_t *key, 97516e5d7bfSAndrew Rybchenko __in size_t n); 97616e5d7bfSAndrew Rybchenko 97716e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 97816e5d7bfSAndrew Rybchenko ef10_rx_scale_tbl_set( 97916e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 98082af879cSAndrew Rybchenko __in uint32_t rss_context, 98116e5d7bfSAndrew Rybchenko __in_ecount(n) unsigned int *table, 98216e5d7bfSAndrew Rybchenko __in size_t n); 98316e5d7bfSAndrew Rybchenko 98416e5d7bfSAndrew Rybchenko extern __checkReturn uint32_t 98516e5d7bfSAndrew Rybchenko ef10_rx_prefix_hash( 98616e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 98716e5d7bfSAndrew Rybchenko __in efx_rx_hash_alg_t func, 98816e5d7bfSAndrew Rybchenko __in uint8_t *buffer); 98916e5d7bfSAndrew Rybchenko 99016e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_RX_SCALE */ 99116e5d7bfSAndrew Rybchenko 99216e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 99316e5d7bfSAndrew Rybchenko ef10_rx_prefix_pktlen( 99416e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 99516e5d7bfSAndrew Rybchenko __in uint8_t *buffer, 99616e5d7bfSAndrew Rybchenko __out uint16_t *lengthp); 99716e5d7bfSAndrew Rybchenko 99816e5d7bfSAndrew Rybchenko extern void 99916e5d7bfSAndrew Rybchenko ef10_rx_qpost( 100016e5d7bfSAndrew Rybchenko __in efx_rxq_t *erp, 100159ee8172SAndrew Rybchenko __in_ecount(ndescs) efsys_dma_addr_t *addrp, 100216e5d7bfSAndrew Rybchenko __in size_t size, 100359ee8172SAndrew Rybchenko __in unsigned int ndescs, 100416e5d7bfSAndrew Rybchenko __in unsigned int completed, 100516e5d7bfSAndrew Rybchenko __in unsigned int added); 100616e5d7bfSAndrew Rybchenko 100716e5d7bfSAndrew Rybchenko extern void 100816e5d7bfSAndrew Rybchenko ef10_rx_qpush( 100916e5d7bfSAndrew Rybchenko __in efx_rxq_t *erp, 101016e5d7bfSAndrew Rybchenko __in unsigned int added, 101116e5d7bfSAndrew Rybchenko __inout unsigned int *pushedp); 101216e5d7bfSAndrew Rybchenko 101316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 101416e5d7bfSAndrew Rybchenko ef10_rx_qflush( 101516e5d7bfSAndrew Rybchenko __in efx_rxq_t *erp); 101616e5d7bfSAndrew Rybchenko 101716e5d7bfSAndrew Rybchenko extern void 101816e5d7bfSAndrew Rybchenko ef10_rx_qenable( 101916e5d7bfSAndrew Rybchenko __in efx_rxq_t *erp); 102016e5d7bfSAndrew Rybchenko 10212a726a7fSAndrew Rybchenko union efx_rxq_type_data_u; 10222a726a7fSAndrew Rybchenko 102316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 102416e5d7bfSAndrew Rybchenko ef10_rx_qcreate( 102516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 102616e5d7bfSAndrew Rybchenko __in unsigned int index, 102716e5d7bfSAndrew Rybchenko __in unsigned int label, 102816e5d7bfSAndrew Rybchenko __in efx_rxq_type_t type, 1029d707fb20SAndrew Rybchenko __in_opt const union efx_rxq_type_data_u *type_data, 103016e5d7bfSAndrew Rybchenko __in efsys_mem_t *esmp, 103159ee8172SAndrew Rybchenko __in size_t ndescs, 103216e5d7bfSAndrew Rybchenko __in uint32_t id, 10339445d1c5SAndrew Rybchenko __in unsigned int flags, 103416e5d7bfSAndrew Rybchenko __in efx_evq_t *eep, 103516e5d7bfSAndrew Rybchenko __in efx_rxq_t *erp); 103616e5d7bfSAndrew Rybchenko 103716e5d7bfSAndrew Rybchenko extern void 103816e5d7bfSAndrew Rybchenko ef10_rx_qdestroy( 103916e5d7bfSAndrew Rybchenko __in efx_rxq_t *erp); 104016e5d7bfSAndrew Rybchenko 104116e5d7bfSAndrew Rybchenko extern void 104216e5d7bfSAndrew Rybchenko ef10_rx_fini( 104316e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 104416e5d7bfSAndrew Rybchenko 104516e5d7bfSAndrew Rybchenko #if EFSYS_OPT_FILTER 104616e5d7bfSAndrew Rybchenko 104716e5d7bfSAndrew Rybchenko typedef struct ef10_filter_handle_s { 104816e5d7bfSAndrew Rybchenko uint32_t efh_lo; 104916e5d7bfSAndrew Rybchenko uint32_t efh_hi; 105016e5d7bfSAndrew Rybchenko } ef10_filter_handle_t; 105116e5d7bfSAndrew Rybchenko 105216e5d7bfSAndrew Rybchenko typedef struct ef10_filter_entry_s { 105316e5d7bfSAndrew Rybchenko uintptr_t efe_spec; /* pointer to filter spec plus busy bit */ 105416e5d7bfSAndrew Rybchenko ef10_filter_handle_t efe_handle; 105516e5d7bfSAndrew Rybchenko } ef10_filter_entry_t; 105616e5d7bfSAndrew Rybchenko 105716e5d7bfSAndrew Rybchenko /* 105816e5d7bfSAndrew Rybchenko * BUSY flag indicates that an update is in progress. 105916e5d7bfSAndrew Rybchenko * AUTO_OLD flag is used to mark and sweep MAC packet filters. 106016e5d7bfSAndrew Rybchenko */ 106116e5d7bfSAndrew Rybchenko #define EFX_EF10_FILTER_FLAG_BUSY 1U 106216e5d7bfSAndrew Rybchenko #define EFX_EF10_FILTER_FLAG_AUTO_OLD 2U 106316e5d7bfSAndrew Rybchenko #define EFX_EF10_FILTER_FLAGS 3U 106416e5d7bfSAndrew Rybchenko 106516e5d7bfSAndrew Rybchenko /* 106616e5d7bfSAndrew Rybchenko * Size of the hash table used by the driver. Doesn't need to be the 106716e5d7bfSAndrew Rybchenko * same size as the hardware's table. 106816e5d7bfSAndrew Rybchenko */ 106916e5d7bfSAndrew Rybchenko #define EFX_EF10_FILTER_TBL_ROWS 8192 107016e5d7bfSAndrew Rybchenko 107116e5d7bfSAndrew Rybchenko /* Only need to allow for one directed and one unknown unicast filter */ 107216e5d7bfSAndrew Rybchenko #define EFX_EF10_FILTER_UNICAST_FILTERS_MAX 2 107316e5d7bfSAndrew Rybchenko 107416e5d7bfSAndrew Rybchenko /* Allow for the broadcast address to be added to the multicast list */ 107516e5d7bfSAndrew Rybchenko #define EFX_EF10_FILTER_MULTICAST_FILTERS_MAX (EFX_MAC_MULTICAST_LIST_MAX + 1) 107616e5d7bfSAndrew Rybchenko 1077f4e2f6a5SAndrew Rybchenko /* 1078f4e2f6a5SAndrew Rybchenko * For encapsulated packets, there is one filter each for each combination of 1079f4e2f6a5SAndrew Rybchenko * IPv4 or IPv6 outer frame, VXLAN, GENEVE or NVGRE packet type, and unicast or 1080f4e2f6a5SAndrew Rybchenko * multicast inner frames. 1081f4e2f6a5SAndrew Rybchenko */ 1082f4e2f6a5SAndrew Rybchenko #define EFX_EF10_FILTER_ENCAP_FILTERS_MAX 12 1083f4e2f6a5SAndrew Rybchenko 108416e5d7bfSAndrew Rybchenko typedef struct ef10_filter_table_s { 108516e5d7bfSAndrew Rybchenko ef10_filter_entry_t eft_entry[EFX_EF10_FILTER_TBL_ROWS]; 108616e5d7bfSAndrew Rybchenko efx_rxq_t *eft_default_rxq; 108716e5d7bfSAndrew Rybchenko boolean_t eft_using_rss; 108816e5d7bfSAndrew Rybchenko uint32_t eft_unicst_filter_indexes[ 108916e5d7bfSAndrew Rybchenko EFX_EF10_FILTER_UNICAST_FILTERS_MAX]; 109075fed2ceSAndrew Rybchenko uint32_t eft_unicst_filter_count; 109116e5d7bfSAndrew Rybchenko uint32_t eft_mulcst_filter_indexes[ 109216e5d7bfSAndrew Rybchenko EFX_EF10_FILTER_MULTICAST_FILTERS_MAX]; 109316e5d7bfSAndrew Rybchenko uint32_t eft_mulcst_filter_count; 109416e5d7bfSAndrew Rybchenko boolean_t eft_using_all_mulcst; 1095f4e2f6a5SAndrew Rybchenko uint32_t eft_encap_filter_indexes[ 1096f4e2f6a5SAndrew Rybchenko EFX_EF10_FILTER_ENCAP_FILTERS_MAX]; 1097f4e2f6a5SAndrew Rybchenko uint32_t eft_encap_filter_count; 109816e5d7bfSAndrew Rybchenko } ef10_filter_table_t; 109916e5d7bfSAndrew Rybchenko 110016e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 110116e5d7bfSAndrew Rybchenko ef10_filter_init( 110216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 110316e5d7bfSAndrew Rybchenko 110416e5d7bfSAndrew Rybchenko void 110516e5d7bfSAndrew Rybchenko ef10_filter_fini( 110616e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 110716e5d7bfSAndrew Rybchenko 110816e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 110916e5d7bfSAndrew Rybchenko ef10_filter_restore( 111016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 111116e5d7bfSAndrew Rybchenko 111216e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 111316e5d7bfSAndrew Rybchenko ef10_filter_add( 111416e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 111516e5d7bfSAndrew Rybchenko __inout efx_filter_spec_t *spec, 111616e5d7bfSAndrew Rybchenko __in boolean_t may_replace); 111716e5d7bfSAndrew Rybchenko 111816e5d7bfSAndrew Rybchenko __checkReturn efx_rc_t 111916e5d7bfSAndrew Rybchenko ef10_filter_delete( 112016e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 112116e5d7bfSAndrew Rybchenko __inout efx_filter_spec_t *spec); 112216e5d7bfSAndrew Rybchenko 112316e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 112416e5d7bfSAndrew Rybchenko ef10_filter_supported_filters( 112516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 112663492ab8SAndrew Rybchenko __out_ecount(buffer_length) uint32_t *buffer, 112763492ab8SAndrew Rybchenko __in size_t buffer_length, 112863492ab8SAndrew Rybchenko __out size_t *list_lengthp); 112916e5d7bfSAndrew Rybchenko 113016e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 113116e5d7bfSAndrew Rybchenko ef10_filter_reconfigure( 113216e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 113316e5d7bfSAndrew Rybchenko __in_ecount(6) uint8_t const *mac_addr, 113416e5d7bfSAndrew Rybchenko __in boolean_t all_unicst, 113516e5d7bfSAndrew Rybchenko __in boolean_t mulcst, 113616e5d7bfSAndrew Rybchenko __in boolean_t all_mulcst, 113716e5d7bfSAndrew Rybchenko __in boolean_t brdcst, 113816e5d7bfSAndrew Rybchenko __in_ecount(6*count) uint8_t const *addrs, 113916e5d7bfSAndrew Rybchenko __in uint32_t count); 114016e5d7bfSAndrew Rybchenko 114116e5d7bfSAndrew Rybchenko extern void 114216e5d7bfSAndrew Rybchenko ef10_filter_get_default_rxq( 114316e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 114416e5d7bfSAndrew Rybchenko __out efx_rxq_t **erpp, 114516e5d7bfSAndrew Rybchenko __out boolean_t *using_rss); 114616e5d7bfSAndrew Rybchenko 114716e5d7bfSAndrew Rybchenko extern void 114816e5d7bfSAndrew Rybchenko ef10_filter_default_rxq_set( 114916e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 115016e5d7bfSAndrew Rybchenko __in efx_rxq_t *erp, 115116e5d7bfSAndrew Rybchenko __in boolean_t using_rss); 115216e5d7bfSAndrew Rybchenko 115316e5d7bfSAndrew Rybchenko extern void 115416e5d7bfSAndrew Rybchenko ef10_filter_default_rxq_clear( 115516e5d7bfSAndrew Rybchenko __in efx_nic_t *enp); 115616e5d7bfSAndrew Rybchenko 115716e5d7bfSAndrew Rybchenko #endif /* EFSYS_OPT_FILTER */ 115816e5d7bfSAndrew Rybchenko 115916e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 116016e5d7bfSAndrew Rybchenko efx_mcdi_get_function_info( 116116e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 116216e5d7bfSAndrew Rybchenko __out uint32_t *pfp, 116316e5d7bfSAndrew Rybchenko __out_opt uint32_t *vfp); 116416e5d7bfSAndrew Rybchenko 116516e5d7bfSAndrew Rybchenko extern __checkReturn efx_rc_t 116616e5d7bfSAndrew Rybchenko efx_mcdi_privilege_mask( 116716e5d7bfSAndrew Rybchenko __in efx_nic_t *enp, 116816e5d7bfSAndrew Rybchenko __in uint32_t pf, 116916e5d7bfSAndrew Rybchenko __in uint32_t vf, 117016e5d7bfSAndrew Rybchenko __out uint32_t *maskp); 117116e5d7bfSAndrew Rybchenko 1172cfa023ebSAndrew Rybchenko extern __checkReturn efx_rc_t 1173cfa023ebSAndrew Rybchenko efx_mcdi_get_port_assignment( 1174cfa023ebSAndrew Rybchenko __in efx_nic_t *enp, 1175cfa023ebSAndrew Rybchenko __out uint32_t *portp); 1176cfa023ebSAndrew Rybchenko 1177cfa023ebSAndrew Rybchenko extern __checkReturn efx_rc_t 1178cfa023ebSAndrew Rybchenko efx_mcdi_get_port_modes( 1179cfa023ebSAndrew Rybchenko __in efx_nic_t *enp, 1180f6d61784SAndrew Rybchenko __out uint32_t *modesp, 1181cd5e3371SAndrew Rybchenko __out_opt uint32_t *current_modep, 1182cd5e3371SAndrew Rybchenko __out_opt uint32_t *default_modep); 1183f6d61784SAndrew Rybchenko 1184f6d61784SAndrew Rybchenko extern __checkReturn efx_rc_t 1185f6d61784SAndrew Rybchenko ef10_nic_get_port_mode_bandwidth( 1186c42b6a35SAndrew Rybchenko __in efx_nic_t *enp, 1187f6d61784SAndrew Rybchenko __out uint32_t *bandwidth_mbpsp); 1188cfa023ebSAndrew Rybchenko 1189cfa023ebSAndrew Rybchenko extern __checkReturn efx_rc_t 1190cfa023ebSAndrew Rybchenko efx_mcdi_get_mac_address_pf( 1191cfa023ebSAndrew Rybchenko __in efx_nic_t *enp, 1192cfa023ebSAndrew Rybchenko __out_ecount_opt(6) uint8_t mac_addrp[6]); 1193cfa023ebSAndrew Rybchenko 1194cfa023ebSAndrew Rybchenko extern __checkReturn efx_rc_t 1195cfa023ebSAndrew Rybchenko efx_mcdi_get_mac_address_vf( 1196cfa023ebSAndrew Rybchenko __in efx_nic_t *enp, 1197cfa023ebSAndrew Rybchenko __out_ecount_opt(6) uint8_t mac_addrp[6]); 1198cfa023ebSAndrew Rybchenko 1199cfa023ebSAndrew Rybchenko extern __checkReturn efx_rc_t 1200cfa023ebSAndrew Rybchenko efx_mcdi_get_clock( 1201cfa023ebSAndrew Rybchenko __in efx_nic_t *enp, 120278e5c87cSAndrew Rybchenko __out uint32_t *sys_freqp, 120378e5c87cSAndrew Rybchenko __out uint32_t *dpcpu_freqp); 120478e5c87cSAndrew Rybchenko 1205cfa023ebSAndrew Rybchenko extern __checkReturn efx_rc_t 120645becd76SAndrew Rybchenko efx_mcdi_get_rxdp_config( 120745becd76SAndrew Rybchenko __in efx_nic_t *enp, 120845becd76SAndrew Rybchenko __out uint32_t *end_paddingp); 120945becd76SAndrew Rybchenko 121045becd76SAndrew Rybchenko extern __checkReturn efx_rc_t 1211cfa023ebSAndrew Rybchenko efx_mcdi_get_vector_cfg( 1212cfa023ebSAndrew Rybchenko __in efx_nic_t *enp, 1213cfa023ebSAndrew Rybchenko __out_opt uint32_t *vec_basep, 1214cfa023ebSAndrew Rybchenko __out_opt uint32_t *pf_nvecp, 1215cfa023ebSAndrew Rybchenko __out_opt uint32_t *vf_nvecp); 1216cfa023ebSAndrew Rybchenko 1217cfa023ebSAndrew Rybchenko extern __checkReturn efx_rc_t 121880af6f26SAndrew Rybchenko ef10_get_privilege_mask( 121980af6f26SAndrew Rybchenko __in efx_nic_t *enp, 122080af6f26SAndrew Rybchenko __out uint32_t *maskp); 122180af6f26SAndrew Rybchenko 122217bcc056SAndrew Rybchenko #if EFSYS_OPT_FW_SUBVARIANT_AWARE 122317bcc056SAndrew Rybchenko 122417bcc056SAndrew Rybchenko extern __checkReturn efx_rc_t 122517bcc056SAndrew Rybchenko efx_mcdi_get_nic_global( 122617bcc056SAndrew Rybchenko __in efx_nic_t *enp, 122717bcc056SAndrew Rybchenko __in uint32_t key, 122817bcc056SAndrew Rybchenko __out uint32_t *valuep); 122917bcc056SAndrew Rybchenko 123017bcc056SAndrew Rybchenko extern __checkReturn efx_rc_t 123117bcc056SAndrew Rybchenko efx_mcdi_set_nic_global( 123217bcc056SAndrew Rybchenko __in efx_nic_t *enp, 123317bcc056SAndrew Rybchenko __in uint32_t key, 123417bcc056SAndrew Rybchenko __in uint32_t value); 123517bcc056SAndrew Rybchenko 123617bcc056SAndrew Rybchenko #endif /* EFSYS_OPT_FW_SUBVARIANT_AWARE */ 123717bcc056SAndrew Rybchenko 12388e0c4827SAndrew Rybchenko #if EFSYS_OPT_RX_PACKED_STREAM 12398e0c4827SAndrew Rybchenko 12408e0c4827SAndrew Rybchenko /* Data space per credit in packed stream mode */ 12418e0c4827SAndrew Rybchenko #define EFX_RX_PACKED_STREAM_MEM_PER_CREDIT (1 << 16) 12428e0c4827SAndrew Rybchenko 12438e0c4827SAndrew Rybchenko /* 12448e0c4827SAndrew Rybchenko * Received packets are always aligned at this boundary. Also there always 12458e0c4827SAndrew Rybchenko * exists a gap of this size between packets. 12468e0c4827SAndrew Rybchenko * (see SF-112241-TC, 4.5) 12478e0c4827SAndrew Rybchenko */ 12488e0c4827SAndrew Rybchenko #define EFX_RX_PACKED_STREAM_ALIGNMENT 64 12498e0c4827SAndrew Rybchenko 12508e0c4827SAndrew Rybchenko /* 12518e0c4827SAndrew Rybchenko * Size of a pseudo-header prepended to received packets 12528e0c4827SAndrew Rybchenko * in packed stream mode 12538e0c4827SAndrew Rybchenko */ 12548e0c4827SAndrew Rybchenko #define EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE 8 12558e0c4827SAndrew Rybchenko 12568e0c4827SAndrew Rybchenko /* Minimum space for packet in packed stream mode */ 12578e0c4827SAndrew Rybchenko #define EFX_RX_PACKED_STREAM_MIN_PACKET_SPACE \ 1258*ec30f0beSAndrew Rybchenko EFX_P2ROUNDUP(size_t, \ 1259*ec30f0beSAndrew Rybchenko EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE + \ 12608e0c4827SAndrew Rybchenko EFX_MAC_PDU_MIN + \ 12618e0c4827SAndrew Rybchenko EFX_RX_PACKED_STREAM_ALIGNMENT, \ 12628e0c4827SAndrew Rybchenko EFX_RX_PACKED_STREAM_ALIGNMENT) 12638e0c4827SAndrew Rybchenko 12648e0c4827SAndrew Rybchenko /* Maximum number of credits */ 12658e0c4827SAndrew Rybchenko #define EFX_RX_PACKED_STREAM_MAX_CREDITS 127 12668e0c4827SAndrew Rybchenko 12678e0c4827SAndrew Rybchenko #endif /* EFSYS_OPT_RX_PACKED_STREAM */ 12685f5c71ccSAndrew Rybchenko 126904381b5eSAndrew Rybchenko #if EFSYS_OPT_RX_ES_SUPER_BUFFER 127004381b5eSAndrew Rybchenko 127104381b5eSAndrew Rybchenko /* 127204381b5eSAndrew Rybchenko * Maximum DMA length and buffer stride alignment. 127304381b5eSAndrew Rybchenko * (see SF-119419-TC, 3.2) 127404381b5eSAndrew Rybchenko */ 127504381b5eSAndrew Rybchenko #define EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT 64 127604381b5eSAndrew Rybchenko 127704381b5eSAndrew Rybchenko #endif 127804381b5eSAndrew Rybchenko 12795f5c71ccSAndrew Rybchenko #ifdef __cplusplus 12805f5c71ccSAndrew Rybchenko } 12815f5c71ccSAndrew Rybchenko #endif 12825f5c71ccSAndrew Rybchenko 12835f5c71ccSAndrew Rybchenko #endif /* _SYS_EF10_IMPL_H */ 1284