1293734Sarybchik/*- 2301388Sarybchik * Copyright (c) 2015-2016 Solarflare Communications Inc. 3293734Sarybchik * All rights reserved. 4293734Sarybchik * 5293734Sarybchik * Redistribution and use in source and binary forms, with or without 6293734Sarybchik * modification, are permitted provided that the following conditions are met: 7293734Sarybchik * 8293734Sarybchik * 1. Redistributions of source code must retain the above copyright notice, 9293734Sarybchik * this list of conditions and the following disclaimer. 10293734Sarybchik * 2. Redistributions in binary form must reproduce the above copyright notice, 11293734Sarybchik * this list of conditions and the following disclaimer in the documentation 12293734Sarybchik * and/or other materials provided with the distribution. 13293734Sarybchik * 14293734Sarybchik * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15293734Sarybchik * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 16293734Sarybchik * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17293734Sarybchik * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 18293734Sarybchik * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19293734Sarybchik * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20293734Sarybchik * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 21293734Sarybchik * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 22293734Sarybchik * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 23293734Sarybchik * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 24293734Sarybchik * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25293734Sarybchik * 26293734Sarybchik * The views and conclusions contained in the software and documentation are 27293734Sarybchik * those of the authors and should not be interpreted as representing official 28293734Sarybchik * policies, either expressed or implied, of the FreeBSD Project. 29293734Sarybchik * 30293734Sarybchik * $FreeBSD: stable/10/sys/dev/sfxge/common/ef10_impl.h 342512 2018-12-26 10:21:40Z arybchik $ 31293734Sarybchik */ 32293734Sarybchik 33293734Sarybchik#ifndef _SYS_EF10_IMPL_H 34293734Sarybchik#define _SYS_EF10_IMPL_H 35293734Sarybchik 36293734Sarybchik#ifdef __cplusplus 37293734Sarybchikextern "C" { 38293734Sarybchik#endif 39293734Sarybchik 40293982Sarybchik#if (EFSYS_OPT_HUNTINGTON && EFSYS_OPT_MEDFORD) 41293982Sarybchik#define EF10_MAX_PIOBUF_NBUFS MAX(HUNT_PIOBUF_NBUFS, MEDFORD_PIOBUF_NBUFS) 42293982Sarybchik#elif EFSYS_OPT_HUNTINGTON 43293982Sarybchik#define EF10_MAX_PIOBUF_NBUFS HUNT_PIOBUF_NBUFS 44293982Sarybchik#elif EFSYS_OPT_MEDFORD 45293982Sarybchik#define EF10_MAX_PIOBUF_NBUFS MEDFORD_PIOBUF_NBUFS 46293982Sarybchik#endif 47293734Sarybchik 48301348Sarybchik/* 49301348Sarybchik * FIXME: This is just a power of 2 which fits in an MCDI v1 message, and could 50301348Sarybchik * possibly be increased, or the write size reported by newer firmware used 51301348Sarybchik * instead. 52301348Sarybchik */ 53301348Sarybchik#define EF10_NVRAM_CHUNK 0x80 54301348Sarybchik 55301348Sarybchik/* Alignment requirement for value written to RX WPTR: 56301348Sarybchik * the WPTR must be aligned to an 8 descriptor boundary 57301348Sarybchik */ 58301348Sarybchik#define EF10_RX_WPTR_ALIGN 8 59301348Sarybchik 60301348Sarybchik/* 61301348Sarybchik * Max byte offset into the packet the TCP header must start for the hardware 62301348Sarybchik * to be able to parse the packet correctly. 63301348Sarybchik */ 64301348Sarybchik#define EF10_TCP_HEADER_OFFSET_LIMIT 208 65301348Sarybchik 66301348Sarybchik/* Invalid RSS context handle */ 67301348Sarybchik#define EF10_RSS_CONTEXT_INVALID (0xffffffff) 68301348Sarybchik 69301348Sarybchik 70301348Sarybchik/* EV */ 71301348Sarybchik 72301348Sarybchik __checkReturn efx_rc_t 73301348Sarybchikef10_ev_init( 74301348Sarybchik __in efx_nic_t *enp); 75301348Sarybchik 76301348Sarybchik void 77301348Sarybchikef10_ev_fini( 78301348Sarybchik __in efx_nic_t *enp); 79301348Sarybchik 80301348Sarybchik __checkReturn efx_rc_t 81301348Sarybchikef10_ev_qcreate( 82301348Sarybchik __in efx_nic_t *enp, 83301348Sarybchik __in unsigned int index, 84301348Sarybchik __in efsys_mem_t *esmp, 85301348Sarybchik __in size_t n, 86301348Sarybchik __in uint32_t id, 87301980Sarybchik __in uint32_t us, 88311070Sarybchik __in uint32_t flags, 89301348Sarybchik __in efx_evq_t *eep); 90301348Sarybchik 91301348Sarybchik void 92301348Sarybchikef10_ev_qdestroy( 93301348Sarybchik __in efx_evq_t *eep); 94301348Sarybchik 95301348Sarybchik __checkReturn efx_rc_t 96301348Sarybchikef10_ev_qprime( 97301348Sarybchik __in efx_evq_t *eep, 98301348Sarybchik __in unsigned int count); 99301348Sarybchik 100301348Sarybchik void 101301348Sarybchikef10_ev_qpost( 102301348Sarybchik __in efx_evq_t *eep, 103301348Sarybchik __in uint16_t data); 104301348Sarybchik 105301348Sarybchik __checkReturn efx_rc_t 106301348Sarybchikef10_ev_qmoderate( 107301348Sarybchik __in efx_evq_t *eep, 108301348Sarybchik __in unsigned int us); 109301348Sarybchik 110301348Sarybchik#if EFSYS_OPT_QSTATS 111301348Sarybchik void 112301348Sarybchikef10_ev_qstats_update( 113301348Sarybchik __in efx_evq_t *eep, 114301348Sarybchik __inout_ecount(EV_NQSTATS) efsys_stat_t *stat); 115301348Sarybchik#endif /* EFSYS_OPT_QSTATS */ 116301348Sarybchik 117301348Sarybchik void 118301348Sarybchikef10_ev_rxlabel_init( 119301348Sarybchik __in efx_evq_t *eep, 120301348Sarybchik __in efx_rxq_t *erp, 121301348Sarybchik __in unsigned int label); 122301348Sarybchik 123301348Sarybchik void 124301348Sarybchikef10_ev_rxlabel_fini( 125301348Sarybchik __in efx_evq_t *eep, 126301348Sarybchik __in unsigned int label); 127301348Sarybchik 128301348Sarybchik/* INTR */ 129301348Sarybchik 130301348Sarybchik __checkReturn efx_rc_t 131301348Sarybchikef10_intr_init( 132301348Sarybchik __in efx_nic_t *enp, 133301348Sarybchik __in efx_intr_type_t type, 134301348Sarybchik __in efsys_mem_t *esmp); 135301348Sarybchik 136301348Sarybchik void 137301348Sarybchikef10_intr_enable( 138301348Sarybchik __in efx_nic_t *enp); 139301348Sarybchik 140301348Sarybchik void 141301348Sarybchikef10_intr_disable( 142301348Sarybchik __in efx_nic_t *enp); 143301348Sarybchik 144301348Sarybchik void 145301348Sarybchikef10_intr_disable_unlocked( 146301348Sarybchik __in efx_nic_t *enp); 147301348Sarybchik 148301348Sarybchik __checkReturn efx_rc_t 149301348Sarybchikef10_intr_trigger( 150301348Sarybchik __in efx_nic_t *enp, 151301348Sarybchik __in unsigned int level); 152301348Sarybchik 153301348Sarybchik void 154301348Sarybchikef10_intr_status_line( 155301348Sarybchik __in efx_nic_t *enp, 156301348Sarybchik __out boolean_t *fatalp, 157301348Sarybchik __out uint32_t *qmaskp); 158301348Sarybchik 159301348Sarybchik void 160301348Sarybchikef10_intr_status_message( 161301348Sarybchik __in efx_nic_t *enp, 162301348Sarybchik __in unsigned int message, 163301348Sarybchik __out boolean_t *fatalp); 164301348Sarybchik 165301348Sarybchik void 166301348Sarybchikef10_intr_fatal( 167301348Sarybchik __in efx_nic_t *enp); 168301348Sarybchik void 169301348Sarybchikef10_intr_fini( 170301348Sarybchik __in efx_nic_t *enp); 171301348Sarybchik 172301348Sarybchik/* NIC */ 173301348Sarybchik 174294377Sarybchikextern __checkReturn efx_rc_t 175301348Sarybchikef10_nic_probe( 176301348Sarybchik __in efx_nic_t *enp); 177301348Sarybchik 178301348Sarybchikextern __checkReturn efx_rc_t 179301348Sarybchikef10_nic_set_drv_limits( 180301348Sarybchik __inout efx_nic_t *enp, 181301348Sarybchik __in efx_drv_limits_t *edlp); 182301348Sarybchik 183301348Sarybchikextern __checkReturn efx_rc_t 184301348Sarybchikef10_nic_get_vi_pool( 185301348Sarybchik __in efx_nic_t *enp, 186301348Sarybchik __out uint32_t *vi_countp); 187301348Sarybchik 188301348Sarybchikextern __checkReturn efx_rc_t 189301348Sarybchikef10_nic_get_bar_region( 190301348Sarybchik __in efx_nic_t *enp, 191301348Sarybchik __in efx_nic_region_t region, 192301348Sarybchik __out uint32_t *offsetp, 193301348Sarybchik __out size_t *sizep); 194301348Sarybchik 195301348Sarybchikextern __checkReturn efx_rc_t 196301348Sarybchikef10_nic_reset( 197301348Sarybchik __in efx_nic_t *enp); 198301348Sarybchik 199301348Sarybchikextern __checkReturn efx_rc_t 200301348Sarybchikef10_nic_init( 201301348Sarybchik __in efx_nic_t *enp); 202301348Sarybchik 203301348Sarybchik#if EFSYS_OPT_DIAG 204301348Sarybchik 205301348Sarybchikextern __checkReturn efx_rc_t 206301348Sarybchikef10_nic_register_test( 207301348Sarybchik __in efx_nic_t *enp); 208301348Sarybchik 209301348Sarybchik#endif /* EFSYS_OPT_DIAG */ 210301348Sarybchik 211301348Sarybchikextern void 212301348Sarybchikef10_nic_fini( 213301348Sarybchik __in efx_nic_t *enp); 214301348Sarybchik 215301348Sarybchikextern void 216301348Sarybchikef10_nic_unprobe( 217301348Sarybchik __in efx_nic_t *enp); 218301348Sarybchik 219301348Sarybchik 220301348Sarybchik/* MAC */ 221301348Sarybchik 222301348Sarybchikextern __checkReturn efx_rc_t 223301348Sarybchikef10_mac_poll( 224301348Sarybchik __in efx_nic_t *enp, 225301348Sarybchik __out efx_link_mode_t *link_modep); 226301348Sarybchik 227301348Sarybchikextern __checkReturn efx_rc_t 228301348Sarybchikef10_mac_up( 229301348Sarybchik __in efx_nic_t *enp, 230301348Sarybchik __out boolean_t *mac_upp); 231301348Sarybchik 232301348Sarybchikextern __checkReturn efx_rc_t 233301348Sarybchikef10_mac_addr_set( 234301348Sarybchik __in efx_nic_t *enp); 235301348Sarybchik 236301348Sarybchikextern __checkReturn efx_rc_t 237301348Sarybchikef10_mac_pdu_set( 238301348Sarybchik __in efx_nic_t *enp); 239301348Sarybchik 240301348Sarybchikextern __checkReturn efx_rc_t 241301380Sarybchikef10_mac_pdu_get( 242301380Sarybchik __in efx_nic_t *enp, 243301380Sarybchik __out size_t *pdu); 244301380Sarybchik 245301380Sarybchikextern __checkReturn efx_rc_t 246301348Sarybchikef10_mac_reconfigure( 247301348Sarybchik __in efx_nic_t *enp); 248301348Sarybchik 249301348Sarybchikextern __checkReturn efx_rc_t 250301348Sarybchikef10_mac_multicast_list_set( 251301348Sarybchik __in efx_nic_t *enp); 252301348Sarybchik 253301348Sarybchikextern __checkReturn efx_rc_t 254301348Sarybchikef10_mac_filter_default_rxq_set( 255301348Sarybchik __in efx_nic_t *enp, 256301348Sarybchik __in efx_rxq_t *erp, 257301348Sarybchik __in boolean_t using_rss); 258301348Sarybchik 259301348Sarybchikextern void 260301348Sarybchikef10_mac_filter_default_rxq_clear( 261301348Sarybchik __in efx_nic_t *enp); 262301348Sarybchik 263301348Sarybchik#if EFSYS_OPT_LOOPBACK 264301348Sarybchik 265301348Sarybchikextern __checkReturn efx_rc_t 266301348Sarybchikef10_mac_loopback_set( 267301348Sarybchik __in efx_nic_t *enp, 268301348Sarybchik __in efx_link_mode_t link_mode, 269301348Sarybchik __in efx_loopback_type_t loopback_type); 270301348Sarybchik 271301348Sarybchik#endif /* EFSYS_OPT_LOOPBACK */ 272301348Sarybchik 273301348Sarybchik#if EFSYS_OPT_MAC_STATS 274301348Sarybchik 275301348Sarybchikextern __checkReturn efx_rc_t 276311080Sarybchikef10_mac_stats_get_mask( 277311080Sarybchik __in efx_nic_t *enp, 278311080Sarybchik __inout_bcount(mask_size) uint32_t *maskp, 279311080Sarybchik __in size_t mask_size); 280311080Sarybchik 281311080Sarybchikextern __checkReturn efx_rc_t 282301348Sarybchikef10_mac_stats_update( 283301348Sarybchik __in efx_nic_t *enp, 284301348Sarybchik __in efsys_mem_t *esmp, 285301348Sarybchik __inout_ecount(EFX_MAC_NSTATS) efsys_stat_t *stat, 286301348Sarybchik __inout_opt uint32_t *generationp); 287301348Sarybchik 288301348Sarybchik#endif /* EFSYS_OPT_MAC_STATS */ 289301348Sarybchik 290301348Sarybchik 291301348Sarybchik/* MCDI */ 292301348Sarybchik 293301348Sarybchik#if EFSYS_OPT_MCDI 294301348Sarybchik 295301348Sarybchikextern __checkReturn efx_rc_t 296301348Sarybchikef10_mcdi_init( 297301348Sarybchik __in efx_nic_t *enp, 298301348Sarybchik __in const efx_mcdi_transport_t *mtp); 299301348Sarybchik 300301348Sarybchikextern void 301301348Sarybchikef10_mcdi_fini( 302301348Sarybchik __in efx_nic_t *enp); 303301348Sarybchik 304301348Sarybchikextern void 305301348Sarybchikef10_mcdi_send_request( 306311065Sarybchik __in efx_nic_t *enp, 307311065Sarybchik __in_bcount(hdr_len) void *hdrp, 308311065Sarybchik __in size_t hdr_len, 309311065Sarybchik __in_bcount(sdu_len) void *sdup, 310311065Sarybchik __in size_t sdu_len); 311301348Sarybchik 312301348Sarybchikextern __checkReturn boolean_t 313301348Sarybchikef10_mcdi_poll_response( 314301348Sarybchik __in efx_nic_t *enp); 315301348Sarybchik 316301348Sarybchikextern void 317301348Sarybchikef10_mcdi_read_response( 318301348Sarybchik __in efx_nic_t *enp, 319301348Sarybchik __out_bcount(length) void *bufferp, 320301348Sarybchik __in size_t offset, 321301348Sarybchik __in size_t length); 322301348Sarybchik 323301348Sarybchikextern efx_rc_t 324301348Sarybchikef10_mcdi_poll_reboot( 325301348Sarybchik __in efx_nic_t *enp); 326301348Sarybchik 327301348Sarybchikextern __checkReturn efx_rc_t 328301348Sarybchikef10_mcdi_feature_supported( 329301348Sarybchik __in efx_nic_t *enp, 330301348Sarybchik __in efx_mcdi_feature_id_t id, 331301348Sarybchik __out boolean_t *supportedp); 332301348Sarybchik 333311496Sarybchikextern void 334311496Sarybchikef10_mcdi_get_timeout( 335311496Sarybchik __in efx_nic_t *enp, 336311496Sarybchik __in efx_mcdi_req_t *emrp, 337311496Sarybchik __out uint32_t *timeoutp); 338311496Sarybchik 339301348Sarybchik#endif /* EFSYS_OPT_MCDI */ 340301348Sarybchik 341301348Sarybchik/* NVRAM */ 342301348Sarybchik 343301348Sarybchik#if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD 344301348Sarybchik 345301348Sarybchikextern __checkReturn efx_rc_t 346301348Sarybchikef10_nvram_buf_read_tlv( 347301348Sarybchik __in efx_nic_t *enp, 348301348Sarybchik __in_bcount(max_seg_size) caddr_t seg_data, 349301348Sarybchik __in size_t max_seg_size, 350301348Sarybchik __in uint32_t tag, 351301348Sarybchik __deref_out_bcount_opt(*sizep) caddr_t *datap, 352301348Sarybchik __out size_t *sizep); 353301348Sarybchik 354301348Sarybchikextern __checkReturn efx_rc_t 355301348Sarybchikef10_nvram_buf_write_tlv( 356301348Sarybchik __inout_bcount(partn_size) caddr_t partn_data, 357301348Sarybchik __in size_t partn_size, 358301348Sarybchik __in uint32_t tag, 359301348Sarybchik __in_bcount(tag_size) caddr_t tag_data, 360301348Sarybchik __in size_t tag_size, 361301348Sarybchik __out size_t *total_lengthp); 362301348Sarybchik 363301348Sarybchikextern __checkReturn efx_rc_t 364301348Sarybchikef10_nvram_partn_read_tlv( 365301348Sarybchik __in efx_nic_t *enp, 366301348Sarybchik __in uint32_t partn, 367301348Sarybchik __in uint32_t tag, 368301348Sarybchik __deref_out_bcount_opt(*sizep) caddr_t *datap, 369301348Sarybchik __out size_t *sizep); 370301348Sarybchik 371301348Sarybchikextern __checkReturn efx_rc_t 372301348Sarybchikef10_nvram_partn_write_tlv( 373301348Sarybchik __in efx_nic_t *enp, 374301348Sarybchik __in uint32_t partn, 375301348Sarybchik __in uint32_t tag, 376301348Sarybchik __in_bcount(size) caddr_t data, 377301348Sarybchik __in size_t size); 378301348Sarybchik 379301348Sarybchikextern __checkReturn efx_rc_t 380301348Sarybchikef10_nvram_partn_write_segment_tlv( 381301348Sarybchik __in efx_nic_t *enp, 382301348Sarybchik __in uint32_t partn, 383301348Sarybchik __in uint32_t tag, 384301348Sarybchik __in_bcount(size) caddr_t data, 385301348Sarybchik __in size_t size, 386301348Sarybchik __in boolean_t all_segments); 387301348Sarybchik 388301348Sarybchikextern __checkReturn efx_rc_t 389301348Sarybchikef10_nvram_partn_lock( 390301348Sarybchik __in efx_nic_t *enp, 391301348Sarybchik __in uint32_t partn); 392301348Sarybchik 393311495Sarybchikextern __checkReturn efx_rc_t 394301348Sarybchikef10_nvram_partn_unlock( 395301348Sarybchik __in efx_nic_t *enp, 396311498Sarybchik __in uint32_t partn, 397311498Sarybchik __out_opt uint32_t *resultp); 398301348Sarybchik 399301348Sarybchik#endif /* EFSYS_OPT_NVRAM || EFSYS_OPT_VPD */ 400301348Sarybchik 401301348Sarybchik#if EFSYS_OPT_NVRAM 402301348Sarybchik 403301348Sarybchik#if EFSYS_OPT_DIAG 404301348Sarybchik 405301348Sarybchikextern __checkReturn efx_rc_t 406301348Sarybchikef10_nvram_test( 407301348Sarybchik __in efx_nic_t *enp); 408301348Sarybchik 409301348Sarybchik#endif /* EFSYS_OPT_DIAG */ 410301348Sarybchik 411301348Sarybchikextern __checkReturn efx_rc_t 412301348Sarybchikef10_nvram_type_to_partn( 413301348Sarybchik __in efx_nic_t *enp, 414301348Sarybchik __in efx_nvram_type_t type, 415301348Sarybchik __out uint32_t *partnp); 416301348Sarybchik 417301348Sarybchikextern __checkReturn efx_rc_t 418301348Sarybchikef10_nvram_partn_size( 419301348Sarybchik __in efx_nic_t *enp, 420301348Sarybchik __in uint32_t partn, 421301348Sarybchik __out size_t *sizep); 422301348Sarybchik 423301348Sarybchikextern __checkReturn efx_rc_t 424301348Sarybchikef10_nvram_partn_rw_start( 425301348Sarybchik __in efx_nic_t *enp, 426301348Sarybchik __in uint32_t partn, 427301348Sarybchik __out size_t *chunk_sizep); 428301348Sarybchik 429301348Sarybchikextern __checkReturn efx_rc_t 430301348Sarybchikef10_nvram_partn_read_mode( 431301348Sarybchik __in efx_nic_t *enp, 432301348Sarybchik __in uint32_t partn, 433301348Sarybchik __in unsigned int offset, 434301348Sarybchik __out_bcount(size) caddr_t data, 435301348Sarybchik __in size_t size, 436301348Sarybchik __in uint32_t mode); 437301348Sarybchik 438301348Sarybchikextern __checkReturn efx_rc_t 439301348Sarybchikef10_nvram_partn_read( 440301348Sarybchik __in efx_nic_t *enp, 441301348Sarybchik __in uint32_t partn, 442301348Sarybchik __in unsigned int offset, 443342512Sarybchik __in_bcount(size) caddr_t data, 444301348Sarybchik __in size_t size); 445301348Sarybchik 446301348Sarybchikextern __checkReturn efx_rc_t 447301348Sarybchikef10_nvram_partn_erase( 448301348Sarybchik __in efx_nic_t *enp, 449301348Sarybchik __in uint32_t partn, 450301348Sarybchik __in unsigned int offset, 451301348Sarybchik __in size_t size); 452301348Sarybchik 453301348Sarybchikextern __checkReturn efx_rc_t 454301348Sarybchikef10_nvram_partn_write( 455301348Sarybchik __in efx_nic_t *enp, 456301348Sarybchik __in uint32_t partn, 457301348Sarybchik __in unsigned int offset, 458301348Sarybchik __out_bcount(size) caddr_t data, 459301348Sarybchik __in size_t size); 460301348Sarybchik 461311495Sarybchikextern __checkReturn efx_rc_t 462301348Sarybchikef10_nvram_partn_rw_finish( 463301348Sarybchik __in efx_nic_t *enp, 464301348Sarybchik __in uint32_t partn); 465301348Sarybchik 466301348Sarybchikextern __checkReturn efx_rc_t 467301348Sarybchikef10_nvram_partn_get_version( 468301348Sarybchik __in efx_nic_t *enp, 469301348Sarybchik __in uint32_t partn, 470301348Sarybchik __out uint32_t *subtypep, 471301348Sarybchik __out_ecount(4) uint16_t version[4]); 472301348Sarybchik 473301348Sarybchikextern __checkReturn efx_rc_t 474301348Sarybchikef10_nvram_partn_set_version( 475301348Sarybchik __in efx_nic_t *enp, 476301348Sarybchik __in uint32_t partn, 477301348Sarybchik __in_ecount(4) uint16_t version[4]); 478301348Sarybchik 479301348Sarybchikextern __checkReturn efx_rc_t 480301348Sarybchikef10_nvram_buffer_validate( 481301348Sarybchik __in efx_nic_t *enp, 482301348Sarybchik __in uint32_t partn, 483301348Sarybchik __in_bcount(buffer_size) 484301348Sarybchik caddr_t bufferp, 485301348Sarybchik __in size_t buffer_size); 486301348Sarybchik 487301348Sarybchikextern __checkReturn efx_rc_t 488301348Sarybchikef10_nvram_buffer_create( 489301348Sarybchik __in efx_nic_t *enp, 490301348Sarybchik __in uint16_t partn_type, 491301348Sarybchik __in_bcount(buffer_size) 492301348Sarybchik caddr_t bufferp, 493301348Sarybchik __in size_t buffer_size); 494301348Sarybchik 495301348Sarybchikextern __checkReturn efx_rc_t 496301348Sarybchikef10_nvram_buffer_find_item_start( 497301348Sarybchik __in_bcount(buffer_size) 498301348Sarybchik caddr_t bufferp, 499301348Sarybchik __in size_t buffer_size, 500301348Sarybchik __out uint32_t *startp 501301348Sarybchik ); 502301348Sarybchik 503301348Sarybchikextern __checkReturn efx_rc_t 504301348Sarybchikef10_nvram_buffer_find_end( 505301348Sarybchik __in_bcount(buffer_size) 506301348Sarybchik caddr_t bufferp, 507301348Sarybchik __in size_t buffer_size, 508301348Sarybchik __in uint32_t offset, 509301348Sarybchik __out uint32_t *endp 510301348Sarybchik ); 511301348Sarybchik 512301348Sarybchikextern __checkReturn __success(return != B_FALSE) boolean_t 513301348Sarybchikef10_nvram_buffer_find_item( 514301348Sarybchik __in_bcount(buffer_size) 515301348Sarybchik caddr_t bufferp, 516301348Sarybchik __in size_t buffer_size, 517301348Sarybchik __in uint32_t offset, 518301348Sarybchik __out uint32_t *startp, 519301348Sarybchik __out uint32_t *lengthp 520301348Sarybchik ); 521301348Sarybchik 522301348Sarybchikextern __checkReturn efx_rc_t 523301348Sarybchikef10_nvram_buffer_get_item( 524301348Sarybchik __in_bcount(buffer_size) 525301348Sarybchik caddr_t bufferp, 526301348Sarybchik __in size_t buffer_size, 527301348Sarybchik __in uint32_t offset, 528301348Sarybchik __in uint32_t length, 529301348Sarybchik __out_bcount_part(item_max_size, *lengthp) 530301348Sarybchik caddr_t itemp, 531301348Sarybchik __in size_t item_max_size, 532301348Sarybchik __out uint32_t *lengthp 533301348Sarybchik ); 534301348Sarybchik 535301348Sarybchikextern __checkReturn efx_rc_t 536301348Sarybchikef10_nvram_buffer_insert_item( 537301348Sarybchik __in_bcount(buffer_size) 538301348Sarybchik caddr_t bufferp, 539301348Sarybchik __in size_t buffer_size, 540301348Sarybchik __in uint32_t offset, 541301348Sarybchik __in_bcount(length) caddr_t keyp, 542301348Sarybchik __in uint32_t length, 543301348Sarybchik __out uint32_t *lengthp 544301348Sarybchik ); 545301348Sarybchik 546301348Sarybchikextern __checkReturn efx_rc_t 547301348Sarybchikef10_nvram_buffer_delete_item( 548301348Sarybchik __in_bcount(buffer_size) 549301348Sarybchik caddr_t bufferp, 550301348Sarybchik __in size_t buffer_size, 551301348Sarybchik __in uint32_t offset, 552301348Sarybchik __in uint32_t length, 553301348Sarybchik __in uint32_t end 554301348Sarybchik ); 555301348Sarybchik 556301348Sarybchikextern __checkReturn efx_rc_t 557301348Sarybchikef10_nvram_buffer_finish( 558301348Sarybchik __in_bcount(buffer_size) 559301348Sarybchik caddr_t bufferp, 560301348Sarybchik __in size_t buffer_size 561301348Sarybchik ); 562301348Sarybchik 563301348Sarybchik#endif /* EFSYS_OPT_NVRAM */ 564301348Sarybchik 565301348Sarybchik 566301348Sarybchik/* PHY */ 567301348Sarybchik 568301348Sarybchiktypedef struct ef10_link_state_s { 569301348Sarybchik uint32_t els_adv_cap_mask; 570301348Sarybchik uint32_t els_lp_cap_mask; 571301348Sarybchik unsigned int els_fcntl; 572301348Sarybchik efx_link_mode_t els_link_mode; 573301348Sarybchik#if EFSYS_OPT_LOOPBACK 574301348Sarybchik efx_loopback_type_t els_loopback; 575301348Sarybchik#endif 576301348Sarybchik boolean_t els_mac_up; 577301348Sarybchik} ef10_link_state_t; 578301348Sarybchik 579301348Sarybchikextern void 580301348Sarybchikef10_phy_link_ev( 581301348Sarybchik __in efx_nic_t *enp, 582301348Sarybchik __in efx_qword_t *eqp, 583301348Sarybchik __out efx_link_mode_t *link_modep); 584301348Sarybchik 585301348Sarybchikextern __checkReturn efx_rc_t 586301348Sarybchikef10_phy_get_link( 587301348Sarybchik __in efx_nic_t *enp, 588301348Sarybchik __out ef10_link_state_t *elsp); 589301348Sarybchik 590301348Sarybchikextern __checkReturn efx_rc_t 591301348Sarybchikef10_phy_power( 592301348Sarybchik __in efx_nic_t *enp, 593301348Sarybchik __in boolean_t on); 594301348Sarybchik 595301348Sarybchikextern __checkReturn efx_rc_t 596301348Sarybchikef10_phy_reconfigure( 597301348Sarybchik __in efx_nic_t *enp); 598301348Sarybchik 599301348Sarybchikextern __checkReturn efx_rc_t 600301348Sarybchikef10_phy_verify( 601301348Sarybchik __in efx_nic_t *enp); 602301348Sarybchik 603301348Sarybchikextern __checkReturn efx_rc_t 604301348Sarybchikef10_phy_oui_get( 605301348Sarybchik __in efx_nic_t *enp, 606301348Sarybchik __out uint32_t *ouip); 607301348Sarybchik 608301348Sarybchik#if EFSYS_OPT_PHY_STATS 609301348Sarybchik 610301348Sarybchikextern __checkReturn efx_rc_t 611301348Sarybchikef10_phy_stats_update( 612301348Sarybchik __in efx_nic_t *enp, 613301348Sarybchik __in efsys_mem_t *esmp, 614301348Sarybchik __inout_ecount(EFX_PHY_NSTATS) uint32_t *stat); 615301348Sarybchik 616301348Sarybchik#endif /* EFSYS_OPT_PHY_STATS */ 617301348Sarybchik 618311074Sarybchik#if EFSYS_OPT_BIST 619301348Sarybchik 620311074Sarybchikextern __checkReturn efx_rc_t 621311074Sarybchikef10_bist_enable_offline( 622311074Sarybchik __in efx_nic_t *enp); 623311074Sarybchik 624311074Sarybchikextern __checkReturn efx_rc_t 625311074Sarybchikef10_bist_start( 626311074Sarybchik __in efx_nic_t *enp, 627311074Sarybchik __in efx_bist_type_t type); 628311074Sarybchik 629311074Sarybchikextern __checkReturn efx_rc_t 630311074Sarybchikef10_bist_poll( 631311074Sarybchik __in efx_nic_t *enp, 632311074Sarybchik __in efx_bist_type_t type, 633311074Sarybchik __out efx_bist_result_t *resultp, 634311074Sarybchik __out_opt __drv_when(count > 0, __notnull) 635311074Sarybchik uint32_t *value_maskp, 636311074Sarybchik __out_ecount_opt(count) __drv_when(count > 0, __notnull) 637311074Sarybchik unsigned long *valuesp, 638311074Sarybchik __in size_t count); 639311074Sarybchik 640311074Sarybchikextern void 641311074Sarybchikef10_bist_stop( 642311074Sarybchik __in efx_nic_t *enp, 643311074Sarybchik __in efx_bist_type_t type); 644311074Sarybchik 645311074Sarybchik#endif /* EFSYS_OPT_BIST */ 646311074Sarybchik 647301348Sarybchik/* TX */ 648301348Sarybchik 649301348Sarybchikextern __checkReturn efx_rc_t 650301348Sarybchikef10_tx_init( 651301348Sarybchik __in efx_nic_t *enp); 652301348Sarybchik 653301348Sarybchikextern void 654301348Sarybchikef10_tx_fini( 655301348Sarybchik __in efx_nic_t *enp); 656301348Sarybchik 657301348Sarybchikextern __checkReturn efx_rc_t 658301348Sarybchikef10_tx_qcreate( 659301348Sarybchik __in efx_nic_t *enp, 660301348Sarybchik __in unsigned int index, 661301348Sarybchik __in unsigned int label, 662301348Sarybchik __in efsys_mem_t *esmp, 663301348Sarybchik __in size_t n, 664301348Sarybchik __in uint32_t id, 665301348Sarybchik __in uint16_t flags, 666301348Sarybchik __in efx_evq_t *eep, 667301348Sarybchik __in efx_txq_t *etp, 668301348Sarybchik __out unsigned int *addedp); 669301348Sarybchik 670301348Sarybchikextern void 671301348Sarybchikef10_tx_qdestroy( 672301348Sarybchik __in efx_txq_t *etp); 673301348Sarybchik 674301348Sarybchikextern __checkReturn efx_rc_t 675301348Sarybchikef10_tx_qpost( 676301348Sarybchik __in efx_txq_t *etp, 677301348Sarybchik __in_ecount(n) efx_buffer_t *eb, 678301348Sarybchik __in unsigned int n, 679301348Sarybchik __in unsigned int completed, 680301348Sarybchik __inout unsigned int *addedp); 681301348Sarybchik 682301348Sarybchikextern void 683301348Sarybchikef10_tx_qpush( 684301348Sarybchik __in efx_txq_t *etp, 685301348Sarybchik __in unsigned int added, 686301348Sarybchik __in unsigned int pushed); 687301348Sarybchik 688301348Sarybchikextern __checkReturn efx_rc_t 689301348Sarybchikef10_tx_qpace( 690301348Sarybchik __in efx_txq_t *etp, 691301348Sarybchik __in unsigned int ns); 692301348Sarybchik 693301348Sarybchikextern __checkReturn efx_rc_t 694301348Sarybchikef10_tx_qflush( 695301348Sarybchik __in efx_txq_t *etp); 696301348Sarybchik 697301348Sarybchikextern void 698301348Sarybchikef10_tx_qenable( 699301348Sarybchik __in efx_txq_t *etp); 700301348Sarybchik 701301348Sarybchikextern __checkReturn efx_rc_t 702301348Sarybchikef10_tx_qpio_enable( 703301348Sarybchik __in efx_txq_t *etp); 704301348Sarybchik 705301348Sarybchikextern void 706301348Sarybchikef10_tx_qpio_disable( 707301348Sarybchik __in efx_txq_t *etp); 708301348Sarybchik 709301348Sarybchikextern __checkReturn efx_rc_t 710301348Sarybchikef10_tx_qpio_write( 711301348Sarybchik __in efx_txq_t *etp, 712301348Sarybchik __in_ecount(buf_length) uint8_t *buffer, 713301348Sarybchik __in size_t buf_length, 714301348Sarybchik __in size_t pio_buf_offset); 715301348Sarybchik 716301348Sarybchikextern __checkReturn efx_rc_t 717301348Sarybchikef10_tx_qpio_post( 718301348Sarybchik __in efx_txq_t *etp, 719301348Sarybchik __in size_t pkt_length, 720301348Sarybchik __in unsigned int completed, 721301348Sarybchik __inout unsigned int *addedp); 722301348Sarybchik 723301348Sarybchikextern __checkReturn efx_rc_t 724301348Sarybchikef10_tx_qdesc_post( 725301348Sarybchik __in efx_txq_t *etp, 726301348Sarybchik __in_ecount(n) efx_desc_t *ed, 727301348Sarybchik __in unsigned int n, 728301348Sarybchik __in unsigned int completed, 729301348Sarybchik __inout unsigned int *addedp); 730301348Sarybchik 731301348Sarybchikextern void 732301348Sarybchikef10_tx_qdesc_dma_create( 733301348Sarybchik __in efx_txq_t *etp, 734301348Sarybchik __in efsys_dma_addr_t addr, 735301348Sarybchik __in size_t size, 736301348Sarybchik __in boolean_t eop, 737301348Sarybchik __out efx_desc_t *edp); 738301348Sarybchik 739301348Sarybchikextern void 740301348Sarybchikef10_tx_qdesc_tso_create( 741301348Sarybchik __in efx_txq_t *etp, 742301348Sarybchik __in uint16_t ipv4_id, 743301348Sarybchik __in uint32_t tcp_seq, 744301348Sarybchik __in uint8_t tcp_flags, 745301348Sarybchik __out efx_desc_t *edp); 746301348Sarybchik 747301348Sarybchikextern void 748301348Sarybchikef10_tx_qdesc_tso2_create( 749301348Sarybchik __in efx_txq_t *etp, 750301348Sarybchik __in uint16_t ipv4_id, 751301348Sarybchik __in uint32_t tcp_seq, 752301348Sarybchik __in uint16_t tcp_mss, 753301348Sarybchik __out_ecount(count) efx_desc_t *edp, 754301348Sarybchik __in int count); 755301348Sarybchik 756301348Sarybchikextern void 757301348Sarybchikef10_tx_qdesc_vlantci_create( 758301348Sarybchik __in efx_txq_t *etp, 759301348Sarybchik __in uint16_t vlan_tci, 760301348Sarybchik __out efx_desc_t *edp); 761301348Sarybchik 762342509Sarybchikextern void 763342509Sarybchikef10_tx_qdesc_checksum_create( 764342509Sarybchik __in efx_txq_t *etp, 765342509Sarybchik __in uint16_t flags, 766342509Sarybchik __out efx_desc_t *edp); 767301348Sarybchik 768301348Sarybchik#if EFSYS_OPT_QSTATS 769301348Sarybchik 770301348Sarybchikextern void 771301348Sarybchikef10_tx_qstats_update( 772301348Sarybchik __in efx_txq_t *etp, 773301348Sarybchik __inout_ecount(TX_NQSTATS) efsys_stat_t *stat); 774301348Sarybchik 775301348Sarybchik#endif /* EFSYS_OPT_QSTATS */ 776301348Sarybchik 777301348Sarybchiktypedef uint32_t efx_piobuf_handle_t; 778301348Sarybchik 779301348Sarybchik#define EFX_PIOBUF_HANDLE_INVALID ((efx_piobuf_handle_t) -1) 780301348Sarybchik 781301348Sarybchikextern __checkReturn efx_rc_t 782301348Sarybchikef10_nic_pio_alloc( 783301348Sarybchik __inout efx_nic_t *enp, 784301348Sarybchik __out uint32_t *bufnump, 785301348Sarybchik __out efx_piobuf_handle_t *handlep, 786301348Sarybchik __out uint32_t *blknump, 787301348Sarybchik __out uint32_t *offsetp, 788301348Sarybchik __out size_t *sizep); 789301348Sarybchik 790301348Sarybchikextern __checkReturn efx_rc_t 791301348Sarybchikef10_nic_pio_free( 792301348Sarybchik __inout efx_nic_t *enp, 793301348Sarybchik __in uint32_t bufnum, 794301348Sarybchik __in uint32_t blknum); 795301348Sarybchik 796301348Sarybchikextern __checkReturn efx_rc_t 797301348Sarybchikef10_nic_pio_link( 798301348Sarybchik __inout efx_nic_t *enp, 799301348Sarybchik __in uint32_t vi_index, 800301348Sarybchik __in efx_piobuf_handle_t handle); 801301348Sarybchik 802301348Sarybchikextern __checkReturn efx_rc_t 803301348Sarybchikef10_nic_pio_unlink( 804301348Sarybchik __inout efx_nic_t *enp, 805301348Sarybchik __in uint32_t vi_index); 806301348Sarybchik 807301348Sarybchik 808301348Sarybchik/* VPD */ 809301348Sarybchik 810301348Sarybchik#if EFSYS_OPT_VPD 811301348Sarybchik 812301348Sarybchikextern __checkReturn efx_rc_t 813301348Sarybchikef10_vpd_init( 814301348Sarybchik __in efx_nic_t *enp); 815301348Sarybchik 816301348Sarybchikextern __checkReturn efx_rc_t 817301348Sarybchikef10_vpd_size( 818301348Sarybchik __in efx_nic_t *enp, 819301348Sarybchik __out size_t *sizep); 820301348Sarybchik 821301348Sarybchikextern __checkReturn efx_rc_t 822301348Sarybchikef10_vpd_read( 823301348Sarybchik __in efx_nic_t *enp, 824301348Sarybchik __out_bcount(size) caddr_t data, 825301348Sarybchik __in size_t size); 826301348Sarybchik 827301348Sarybchikextern __checkReturn efx_rc_t 828301348Sarybchikef10_vpd_verify( 829301348Sarybchik __in efx_nic_t *enp, 830301348Sarybchik __in_bcount(size) caddr_t data, 831301348Sarybchik __in size_t size); 832301348Sarybchik 833301348Sarybchikextern __checkReturn efx_rc_t 834301348Sarybchikef10_vpd_reinit( 835301348Sarybchik __in efx_nic_t *enp, 836301348Sarybchik __in_bcount(size) caddr_t data, 837301348Sarybchik __in size_t size); 838301348Sarybchik 839301348Sarybchikextern __checkReturn efx_rc_t 840301348Sarybchikef10_vpd_get( 841301348Sarybchik __in efx_nic_t *enp, 842301348Sarybchik __in_bcount(size) caddr_t data, 843301348Sarybchik __in size_t size, 844301348Sarybchik __inout efx_vpd_value_t *evvp); 845301348Sarybchik 846301348Sarybchikextern __checkReturn efx_rc_t 847301348Sarybchikef10_vpd_set( 848301348Sarybchik __in efx_nic_t *enp, 849301348Sarybchik __in_bcount(size) caddr_t data, 850301348Sarybchik __in size_t size, 851301348Sarybchik __in efx_vpd_value_t *evvp); 852301348Sarybchik 853301348Sarybchikextern __checkReturn efx_rc_t 854301348Sarybchikef10_vpd_next( 855301348Sarybchik __in efx_nic_t *enp, 856301348Sarybchik __in_bcount(size) caddr_t data, 857301348Sarybchik __in size_t size, 858301348Sarybchik __out efx_vpd_value_t *evvp, 859301348Sarybchik __inout unsigned int *contp); 860301348Sarybchik 861301348Sarybchikextern __checkReturn efx_rc_t 862301348Sarybchikef10_vpd_write( 863301348Sarybchik __in efx_nic_t *enp, 864301348Sarybchik __in_bcount(size) caddr_t data, 865301348Sarybchik __in size_t size); 866301348Sarybchik 867301348Sarybchikextern void 868301348Sarybchikef10_vpd_fini( 869301348Sarybchik __in efx_nic_t *enp); 870301348Sarybchik 871301348Sarybchik#endif /* EFSYS_OPT_VPD */ 872301348Sarybchik 873301348Sarybchik 874301348Sarybchik/* RX */ 875301348Sarybchik 876301348Sarybchikextern __checkReturn efx_rc_t 877301348Sarybchikef10_rx_init( 878301348Sarybchik __in efx_nic_t *enp); 879301348Sarybchik 880301348Sarybchik#if EFSYS_OPT_RX_SCATTER 881301348Sarybchikextern __checkReturn efx_rc_t 882301348Sarybchikef10_rx_scatter_enable( 883301348Sarybchik __in efx_nic_t *enp, 884301348Sarybchik __in unsigned int buf_size); 885301348Sarybchik#endif /* EFSYS_OPT_RX_SCATTER */ 886301348Sarybchik 887301348Sarybchik 888301348Sarybchik#if EFSYS_OPT_RX_SCALE 889301348Sarybchik 890301348Sarybchikextern __checkReturn efx_rc_t 891301348Sarybchikef10_rx_scale_mode_set( 892301348Sarybchik __in efx_nic_t *enp, 893301348Sarybchik __in efx_rx_hash_alg_t alg, 894301348Sarybchik __in efx_rx_hash_type_t type, 895301348Sarybchik __in boolean_t insert); 896301348Sarybchik 897301348Sarybchikextern __checkReturn efx_rc_t 898301348Sarybchikef10_rx_scale_key_set( 899301348Sarybchik __in efx_nic_t *enp, 900301348Sarybchik __in_ecount(n) uint8_t *key, 901301348Sarybchik __in size_t n); 902301348Sarybchik 903301348Sarybchikextern __checkReturn efx_rc_t 904301348Sarybchikef10_rx_scale_tbl_set( 905301348Sarybchik __in efx_nic_t *enp, 906301348Sarybchik __in_ecount(n) unsigned int *table, 907301348Sarybchik __in size_t n); 908301348Sarybchik 909301348Sarybchikextern __checkReturn uint32_t 910301348Sarybchikef10_rx_prefix_hash( 911301348Sarybchik __in efx_nic_t *enp, 912301348Sarybchik __in efx_rx_hash_alg_t func, 913301348Sarybchik __in uint8_t *buffer); 914301348Sarybchik 915301348Sarybchik#endif /* EFSYS_OPT_RX_SCALE */ 916301348Sarybchik 917301348Sarybchikextern __checkReturn efx_rc_t 918301348Sarybchikef10_rx_prefix_pktlen( 919301348Sarybchik __in efx_nic_t *enp, 920301348Sarybchik __in uint8_t *buffer, 921301348Sarybchik __out uint16_t *lengthp); 922301348Sarybchik 923301348Sarybchikextern void 924301348Sarybchikef10_rx_qpost( 925301348Sarybchik __in efx_rxq_t *erp, 926301348Sarybchik __in_ecount(n) efsys_dma_addr_t *addrp, 927301348Sarybchik __in size_t size, 928301348Sarybchik __in unsigned int n, 929301348Sarybchik __in unsigned int completed, 930301348Sarybchik __in unsigned int added); 931301348Sarybchik 932301348Sarybchikextern void 933301348Sarybchikef10_rx_qpush( 934301348Sarybchik __in efx_rxq_t *erp, 935301348Sarybchik __in unsigned int added, 936301348Sarybchik __inout unsigned int *pushedp); 937301348Sarybchik 938301348Sarybchikextern __checkReturn efx_rc_t 939301348Sarybchikef10_rx_qflush( 940301348Sarybchik __in efx_rxq_t *erp); 941301348Sarybchik 942301348Sarybchikextern void 943301348Sarybchikef10_rx_qenable( 944301348Sarybchik __in efx_rxq_t *erp); 945301348Sarybchik 946301348Sarybchikextern __checkReturn efx_rc_t 947301348Sarybchikef10_rx_qcreate( 948301348Sarybchik __in efx_nic_t *enp, 949301348Sarybchik __in unsigned int index, 950301348Sarybchik __in unsigned int label, 951301348Sarybchik __in efx_rxq_type_t type, 952301348Sarybchik __in efsys_mem_t *esmp, 953301348Sarybchik __in size_t n, 954301348Sarybchik __in uint32_t id, 955301348Sarybchik __in efx_evq_t *eep, 956301348Sarybchik __in efx_rxq_t *erp); 957301348Sarybchik 958301348Sarybchikextern void 959301348Sarybchikef10_rx_qdestroy( 960301348Sarybchik __in efx_rxq_t *erp); 961301348Sarybchik 962301348Sarybchikextern void 963301348Sarybchikef10_rx_fini( 964301348Sarybchik __in efx_nic_t *enp); 965301348Sarybchik 966301348Sarybchik#if EFSYS_OPT_FILTER 967301348Sarybchik 968301348Sarybchiktypedef struct ef10_filter_handle_s { 969301348Sarybchik uint32_t efh_lo; 970301348Sarybchik uint32_t efh_hi; 971301348Sarybchik} ef10_filter_handle_t; 972301348Sarybchik 973301348Sarybchiktypedef struct ef10_filter_entry_s { 974301348Sarybchik uintptr_t efe_spec; /* pointer to filter spec plus busy bit */ 975301348Sarybchik ef10_filter_handle_t efe_handle; 976301348Sarybchik} ef10_filter_entry_t; 977301348Sarybchik 978301348Sarybchik/* 979301348Sarybchik * BUSY flag indicates that an update is in progress. 980301348Sarybchik * AUTO_OLD flag is used to mark and sweep MAC packet filters. 981301348Sarybchik */ 982301348Sarybchik#define EFX_EF10_FILTER_FLAG_BUSY 1U 983301348Sarybchik#define EFX_EF10_FILTER_FLAG_AUTO_OLD 2U 984301348Sarybchik#define EFX_EF10_FILTER_FLAGS 3U 985301348Sarybchik 986301348Sarybchik/* 987301348Sarybchik * Size of the hash table used by the driver. Doesn't need to be the 988301348Sarybchik * same size as the hardware's table. 989301348Sarybchik */ 990301348Sarybchik#define EFX_EF10_FILTER_TBL_ROWS 8192 991301348Sarybchik 992301348Sarybchik/* Only need to allow for one directed and one unknown unicast filter */ 993301348Sarybchik#define EFX_EF10_FILTER_UNICAST_FILTERS_MAX 2 994301348Sarybchik 995301348Sarybchik/* Allow for the broadcast address to be added to the multicast list */ 996301348Sarybchik#define EFX_EF10_FILTER_MULTICAST_FILTERS_MAX (EFX_MAC_MULTICAST_LIST_MAX + 1) 997301348Sarybchik 998342487Sarybchik/* 999342487Sarybchik * For encapsulated packets, there is one filter each for each combination of 1000342487Sarybchik * IPv4 or IPv6 outer frame, VXLAN, GENEVE or NVGRE packet type, and unicast or 1001342487Sarybchik * multicast inner frames. 1002342487Sarybchik */ 1003342487Sarybchik#define EFX_EF10_FILTER_ENCAP_FILTERS_MAX 12 1004342487Sarybchik 1005301348Sarybchiktypedef struct ef10_filter_table_s { 1006301348Sarybchik ef10_filter_entry_t eft_entry[EFX_EF10_FILTER_TBL_ROWS]; 1007311051Sarybchik efx_rxq_t *eft_default_rxq; 1008301348Sarybchik boolean_t eft_using_rss; 1009301348Sarybchik uint32_t eft_unicst_filter_indexes[ 1010301348Sarybchik EFX_EF10_FILTER_UNICAST_FILTERS_MAX]; 1011311069Sarybchik uint32_t eft_unicst_filter_count; 1012301348Sarybchik uint32_t eft_mulcst_filter_indexes[ 1013301348Sarybchik EFX_EF10_FILTER_MULTICAST_FILTERS_MAX]; 1014301348Sarybchik uint32_t eft_mulcst_filter_count; 1015301348Sarybchik boolean_t eft_using_all_mulcst; 1016342487Sarybchik uint32_t eft_encap_filter_indexes[ 1017342487Sarybchik EFX_EF10_FILTER_ENCAP_FILTERS_MAX]; 1018342487Sarybchik uint32_t eft_encap_filter_count; 1019301348Sarybchik} ef10_filter_table_t; 1020301348Sarybchik 1021301348Sarybchik __checkReturn efx_rc_t 1022301348Sarybchikef10_filter_init( 1023301348Sarybchik __in efx_nic_t *enp); 1024301348Sarybchik 1025301348Sarybchik void 1026301348Sarybchikef10_filter_fini( 1027301348Sarybchik __in efx_nic_t *enp); 1028301348Sarybchik 1029301348Sarybchik __checkReturn efx_rc_t 1030301348Sarybchikef10_filter_restore( 1031301348Sarybchik __in efx_nic_t *enp); 1032301348Sarybchik 1033301348Sarybchik __checkReturn efx_rc_t 1034301348Sarybchikef10_filter_add( 1035301348Sarybchik __in efx_nic_t *enp, 1036301348Sarybchik __inout efx_filter_spec_t *spec, 1037301348Sarybchik __in boolean_t may_replace); 1038301348Sarybchik 1039301348Sarybchik __checkReturn efx_rc_t 1040301348Sarybchikef10_filter_delete( 1041301348Sarybchik __in efx_nic_t *enp, 1042301348Sarybchik __inout efx_filter_spec_t *spec); 1043301348Sarybchik 1044301348Sarybchikextern __checkReturn efx_rc_t 1045301348Sarybchikef10_filter_supported_filters( 1046311494Sarybchik __in efx_nic_t *enp, 1047311494Sarybchik __out_ecount(buffer_length) uint32_t *buffer, 1048311494Sarybchik __in size_t buffer_length, 1049311494Sarybchik __out size_t *list_lengthp); 1050301348Sarybchik 1051301348Sarybchikextern __checkReturn efx_rc_t 1052301348Sarybchikef10_filter_reconfigure( 1053301348Sarybchik __in efx_nic_t *enp, 1054301348Sarybchik __in_ecount(6) uint8_t const *mac_addr, 1055301348Sarybchik __in boolean_t all_unicst, 1056301348Sarybchik __in boolean_t mulcst, 1057301348Sarybchik __in boolean_t all_mulcst, 1058301348Sarybchik __in boolean_t brdcst, 1059301348Sarybchik __in_ecount(6*count) uint8_t const *addrs, 1060301348Sarybchik __in uint32_t count); 1061301348Sarybchik 1062301348Sarybchikextern void 1063301348Sarybchikef10_filter_get_default_rxq( 1064301348Sarybchik __in efx_nic_t *enp, 1065301348Sarybchik __out efx_rxq_t **erpp, 1066301348Sarybchik __out boolean_t *using_rss); 1067301348Sarybchik 1068301348Sarybchikextern void 1069301348Sarybchikef10_filter_default_rxq_set( 1070301348Sarybchik __in efx_nic_t *enp, 1071301348Sarybchik __in efx_rxq_t *erp, 1072301348Sarybchik __in boolean_t using_rss); 1073301348Sarybchik 1074301348Sarybchikextern void 1075301348Sarybchikef10_filter_default_rxq_clear( 1076301348Sarybchik __in efx_nic_t *enp); 1077301348Sarybchik 1078301348Sarybchik 1079301348Sarybchik#endif /* EFSYS_OPT_FILTER */ 1080301348Sarybchik 1081301348Sarybchikextern __checkReturn efx_rc_t 1082301348Sarybchikefx_mcdi_get_function_info( 1083301348Sarybchik __in efx_nic_t *enp, 1084301348Sarybchik __out uint32_t *pfp, 1085301348Sarybchik __out_opt uint32_t *vfp); 1086301348Sarybchik 1087301348Sarybchikextern __checkReturn efx_rc_t 1088301348Sarybchikefx_mcdi_privilege_mask( 1089301348Sarybchik __in efx_nic_t *enp, 1090301348Sarybchik __in uint32_t pf, 1091301348Sarybchik __in uint32_t vf, 1092301348Sarybchik __out uint32_t *maskp); 1093301348Sarybchik 1094301348Sarybchikextern __checkReturn efx_rc_t 1095294377Sarybchikefx_mcdi_get_port_assignment( 1096294377Sarybchik __in efx_nic_t *enp, 1097294377Sarybchik __out uint32_t *portp); 1098293734Sarybchik 1099294377Sarybchikextern __checkReturn efx_rc_t 1100294377Sarybchikefx_mcdi_get_port_modes( 1101294377Sarybchik __in efx_nic_t *enp, 1102301365Sarybchik __out uint32_t *modesp, 1103301365Sarybchik __out_opt uint32_t *current_modep); 1104293734Sarybchik 1105294377Sarybchikextern __checkReturn efx_rc_t 1106301365Sarybchikef10_nic_get_port_mode_bandwidth( 1107301365Sarybchik __in uint32_t port_mode, 1108301365Sarybchik __out uint32_t *bandwidth_mbpsp); 1109301365Sarybchik 1110301365Sarybchikextern __checkReturn efx_rc_t 1111294377Sarybchikefx_mcdi_get_mac_address_pf( 1112294377Sarybchik __in efx_nic_t *enp, 1113294377Sarybchik __out_ecount_opt(6) uint8_t mac_addrp[6]); 1114294377Sarybchik 1115294377Sarybchikextern __checkReturn efx_rc_t 1116294377Sarybchikefx_mcdi_get_mac_address_vf( 1117294377Sarybchik __in efx_nic_t *enp, 1118294377Sarybchik __out_ecount_opt(6) uint8_t mac_addrp[6]); 1119294377Sarybchik 1120294377Sarybchikextern __checkReturn efx_rc_t 1121294377Sarybchikefx_mcdi_get_clock( 1122294377Sarybchik __in efx_nic_t *enp, 1123301381Sarybchik __out uint32_t *sys_freqp, 1124301381Sarybchik __out uint32_t *dpcpu_freqp); 1125294377Sarybchik 1126301381Sarybchik 1127294377Sarybchikextern __checkReturn efx_rc_t 1128294377Sarybchikefx_mcdi_get_vector_cfg( 1129294377Sarybchik __in efx_nic_t *enp, 1130294377Sarybchik __out_opt uint32_t *vec_basep, 1131294377Sarybchik __out_opt uint32_t *pf_nvecp, 1132294377Sarybchik __out_opt uint32_t *vf_nvecp); 1133294377Sarybchik 1134294377Sarybchikextern __checkReturn efx_rc_t 1135294377Sarybchikef10_get_datapath_caps( 1136294377Sarybchik __in efx_nic_t *enp); 1137294377Sarybchik 1138294392Sarybchikextern __checkReturn efx_rc_t 1139294392Sarybchikef10_get_privilege_mask( 1140294392Sarybchik __in efx_nic_t *enp, 1141294392Sarybchik __out uint32_t *maskp); 1142294392Sarybchik 1143294377Sarybchikextern __checkReturn efx_rc_t 1144294377Sarybchikef10_external_port_mapping( 1145294377Sarybchik __in efx_nic_t *enp, 1146294377Sarybchik __in uint32_t port, 1147294377Sarybchik __out uint8_t *external_portp); 1148294377Sarybchik 1149294377Sarybchik 1150293734Sarybchik#ifdef __cplusplus 1151293734Sarybchik} 1152293734Sarybchik#endif 1153293734Sarybchik 1154293734Sarybchik#endif /* _SYS_EF10_IMPL_H */ 1155