ef10_impl.h revision 299720
1293734Sarybchik/*- 2293734Sarybchik * Copyright (c) 2015 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: head/sys/dev/sfxge/common/ef10_impl.h 299720 2016-05-14 06:02:00Z arybchik $ 31293734Sarybchik */ 32293734Sarybchik 33293734Sarybchik#ifndef _SYS_EF10_IMPL_H 34293734Sarybchik#define _SYS_EF10_IMPL_H 35293734Sarybchik 36293734Sarybchik#ifdef __cplusplus 37293734Sarybchikextern "C" { 38293734Sarybchik#endif 39293734Sarybchik 40293748Sarybchik#if (EFSYS_OPT_HUNTINGTON && EFSYS_OPT_MEDFORD) 41293748Sarybchik#define EF10_MAX_PIOBUF_NBUFS MAX(HUNT_PIOBUF_NBUFS, MEDFORD_PIOBUF_NBUFS) 42293748Sarybchik#elif EFSYS_OPT_HUNTINGTON 43293748Sarybchik#define EF10_MAX_PIOBUF_NBUFS HUNT_PIOBUF_NBUFS 44293748Sarybchik#elif EFSYS_OPT_MEDFORD 45293748Sarybchik#define EF10_MAX_PIOBUF_NBUFS MEDFORD_PIOBUF_NBUFS 46293748Sarybchik#endif 47293734Sarybchik 48299720Sarybchik/* 49299720Sarybchik * FIXME: This is just a power of 2 which fits in an MCDI v1 message, and could 50299720Sarybchik * possibly be increased, or the write size reported by newer firmware used 51299720Sarybchik * instead. 52299720Sarybchik */ 53299720Sarybchik#define EF10_NVRAM_CHUNK 0x80 54299720Sarybchik 55299720Sarybchik/* Alignment requirement for value written to RX WPTR: 56299720Sarybchik * the WPTR must be aligned to an 8 descriptor boundary 57299720Sarybchik */ 58299720Sarybchik#define EF10_RX_WPTR_ALIGN 8 59299720Sarybchik 60299720Sarybchik/* 61299720Sarybchik * Max byte offset into the packet the TCP header must start for the hardware 62299720Sarybchik * to be able to parse the packet correctly. 63299720Sarybchik */ 64299720Sarybchik#define EF10_TCP_HEADER_OFFSET_LIMIT 208 65299720Sarybchik 66299720Sarybchik/* Invalid RSS context handle */ 67299720Sarybchik#define EF10_RSS_CONTEXT_INVALID (0xffffffff) 68299720Sarybchik 69299720Sarybchik 70299720Sarybchik/* EV */ 71299720Sarybchik 72299720Sarybchik __checkReturn efx_rc_t 73299720Sarybchikef10_ev_init( 74299720Sarybchik __in efx_nic_t *enp); 75299720Sarybchik 76299720Sarybchik void 77299720Sarybchikef10_ev_fini( 78299720Sarybchik __in efx_nic_t *enp); 79299720Sarybchik 80299720Sarybchik __checkReturn efx_rc_t 81299720Sarybchikef10_ev_qcreate( 82299720Sarybchik __in efx_nic_t *enp, 83299720Sarybchik __in unsigned int index, 84299720Sarybchik __in efsys_mem_t *esmp, 85299720Sarybchik __in size_t n, 86299720Sarybchik __in uint32_t id, 87299720Sarybchik __in efx_evq_t *eep); 88299720Sarybchik 89299720Sarybchik void 90299720Sarybchikef10_ev_qdestroy( 91299720Sarybchik __in efx_evq_t *eep); 92299720Sarybchik 93299720Sarybchik __checkReturn efx_rc_t 94299720Sarybchikef10_ev_qprime( 95299720Sarybchik __in efx_evq_t *eep, 96299720Sarybchik __in unsigned int count); 97299720Sarybchik 98299720Sarybchik void 99299720Sarybchikef10_ev_qpost( 100299720Sarybchik __in efx_evq_t *eep, 101299720Sarybchik __in uint16_t data); 102299720Sarybchik 103299720Sarybchik __checkReturn efx_rc_t 104299720Sarybchikef10_ev_qmoderate( 105299720Sarybchik __in efx_evq_t *eep, 106299720Sarybchik __in unsigned int us); 107299720Sarybchik 108299720Sarybchik#if EFSYS_OPT_QSTATS 109299720Sarybchik void 110299720Sarybchikef10_ev_qstats_update( 111299720Sarybchik __in efx_evq_t *eep, 112299720Sarybchik __inout_ecount(EV_NQSTATS) efsys_stat_t *stat); 113299720Sarybchik#endif /* EFSYS_OPT_QSTATS */ 114299720Sarybchik 115299720Sarybchik void 116299720Sarybchikef10_ev_rxlabel_init( 117299720Sarybchik __in efx_evq_t *eep, 118299720Sarybchik __in efx_rxq_t *erp, 119299720Sarybchik __in unsigned int label); 120299720Sarybchik 121299720Sarybchik void 122299720Sarybchikef10_ev_rxlabel_fini( 123299720Sarybchik __in efx_evq_t *eep, 124299720Sarybchik __in unsigned int label); 125299720Sarybchik 126299720Sarybchik/* INTR */ 127299720Sarybchik 128299720Sarybchik __checkReturn efx_rc_t 129299720Sarybchikef10_intr_init( 130299720Sarybchik __in efx_nic_t *enp, 131299720Sarybchik __in efx_intr_type_t type, 132299720Sarybchik __in efsys_mem_t *esmp); 133299720Sarybchik 134299720Sarybchik void 135299720Sarybchikef10_intr_enable( 136299720Sarybchik __in efx_nic_t *enp); 137299720Sarybchik 138299720Sarybchik void 139299720Sarybchikef10_intr_disable( 140299720Sarybchik __in efx_nic_t *enp); 141299720Sarybchik 142299720Sarybchik void 143299720Sarybchikef10_intr_disable_unlocked( 144299720Sarybchik __in efx_nic_t *enp); 145299720Sarybchik 146299720Sarybchik __checkReturn efx_rc_t 147299720Sarybchikef10_intr_trigger( 148299720Sarybchik __in efx_nic_t *enp, 149299720Sarybchik __in unsigned int level); 150299720Sarybchik 151299720Sarybchik void 152299720Sarybchikef10_intr_status_line( 153299720Sarybchik __in efx_nic_t *enp, 154299720Sarybchik __out boolean_t *fatalp, 155299720Sarybchik __out uint32_t *qmaskp); 156299720Sarybchik 157299720Sarybchik void 158299720Sarybchikef10_intr_status_message( 159299720Sarybchik __in efx_nic_t *enp, 160299720Sarybchik __in unsigned int message, 161299720Sarybchik __out boolean_t *fatalp); 162299720Sarybchik 163299720Sarybchik void 164299720Sarybchikef10_intr_fatal( 165299720Sarybchik __in efx_nic_t *enp); 166299720Sarybchik void 167299720Sarybchikef10_intr_fini( 168299720Sarybchik __in efx_nic_t *enp); 169299720Sarybchik 170299720Sarybchik/* NIC */ 171299720Sarybchik 172293887Sarybchikextern __checkReturn efx_rc_t 173299720Sarybchikef10_nic_probe( 174299720Sarybchik __in efx_nic_t *enp); 175299720Sarybchik 176299720Sarybchikextern __checkReturn efx_rc_t 177299720Sarybchikef10_nic_set_drv_limits( 178299720Sarybchik __inout efx_nic_t *enp, 179299720Sarybchik __in efx_drv_limits_t *edlp); 180299720Sarybchik 181299720Sarybchikextern __checkReturn efx_rc_t 182299720Sarybchikef10_nic_get_vi_pool( 183299720Sarybchik __in efx_nic_t *enp, 184299720Sarybchik __out uint32_t *vi_countp); 185299720Sarybchik 186299720Sarybchikextern __checkReturn efx_rc_t 187299720Sarybchikef10_nic_get_bar_region( 188299720Sarybchik __in efx_nic_t *enp, 189299720Sarybchik __in efx_nic_region_t region, 190299720Sarybchik __out uint32_t *offsetp, 191299720Sarybchik __out size_t *sizep); 192299720Sarybchik 193299720Sarybchikextern __checkReturn efx_rc_t 194299720Sarybchikef10_nic_reset( 195299720Sarybchik __in efx_nic_t *enp); 196299720Sarybchik 197299720Sarybchikextern __checkReturn efx_rc_t 198299720Sarybchikef10_nic_init( 199299720Sarybchik __in efx_nic_t *enp); 200299720Sarybchik 201299720Sarybchik#if EFSYS_OPT_DIAG 202299720Sarybchik 203299720Sarybchikextern __checkReturn efx_rc_t 204299720Sarybchikef10_nic_register_test( 205299720Sarybchik __in efx_nic_t *enp); 206299720Sarybchik 207299720Sarybchik#endif /* EFSYS_OPT_DIAG */ 208299720Sarybchik 209299720Sarybchikextern void 210299720Sarybchikef10_nic_fini( 211299720Sarybchik __in efx_nic_t *enp); 212299720Sarybchik 213299720Sarybchikextern void 214299720Sarybchikef10_nic_unprobe( 215299720Sarybchik __in efx_nic_t *enp); 216299720Sarybchik 217299720Sarybchik 218299720Sarybchik/* MAC */ 219299720Sarybchik 220299720Sarybchikextern __checkReturn efx_rc_t 221299720Sarybchikef10_mac_poll( 222299720Sarybchik __in efx_nic_t *enp, 223299720Sarybchik __out efx_link_mode_t *link_modep); 224299720Sarybchik 225299720Sarybchikextern __checkReturn efx_rc_t 226299720Sarybchikef10_mac_up( 227299720Sarybchik __in efx_nic_t *enp, 228299720Sarybchik __out boolean_t *mac_upp); 229299720Sarybchik 230299720Sarybchikextern __checkReturn efx_rc_t 231299720Sarybchikef10_mac_addr_set( 232299720Sarybchik __in efx_nic_t *enp); 233299720Sarybchik 234299720Sarybchikextern __checkReturn efx_rc_t 235299720Sarybchikef10_mac_pdu_set( 236299720Sarybchik __in efx_nic_t *enp); 237299720Sarybchik 238299720Sarybchikextern __checkReturn efx_rc_t 239299720Sarybchikef10_mac_reconfigure( 240299720Sarybchik __in efx_nic_t *enp); 241299720Sarybchik 242299720Sarybchikextern __checkReturn efx_rc_t 243299720Sarybchikef10_mac_multicast_list_set( 244299720Sarybchik __in efx_nic_t *enp); 245299720Sarybchik 246299720Sarybchikextern __checkReturn efx_rc_t 247299720Sarybchikef10_mac_filter_default_rxq_set( 248299720Sarybchik __in efx_nic_t *enp, 249299720Sarybchik __in efx_rxq_t *erp, 250299720Sarybchik __in boolean_t using_rss); 251299720Sarybchik 252299720Sarybchikextern void 253299720Sarybchikef10_mac_filter_default_rxq_clear( 254299720Sarybchik __in efx_nic_t *enp); 255299720Sarybchik 256299720Sarybchik#if EFSYS_OPT_LOOPBACK 257299720Sarybchik 258299720Sarybchikextern __checkReturn efx_rc_t 259299720Sarybchikef10_mac_loopback_set( 260299720Sarybchik __in efx_nic_t *enp, 261299720Sarybchik __in efx_link_mode_t link_mode, 262299720Sarybchik __in efx_loopback_type_t loopback_type); 263299720Sarybchik 264299720Sarybchik#endif /* EFSYS_OPT_LOOPBACK */ 265299720Sarybchik 266299720Sarybchik#if EFSYS_OPT_MAC_STATS 267299720Sarybchik 268299720Sarybchikextern __checkReturn efx_rc_t 269299720Sarybchikef10_mac_stats_update( 270299720Sarybchik __in efx_nic_t *enp, 271299720Sarybchik __in efsys_mem_t *esmp, 272299720Sarybchik __inout_ecount(EFX_MAC_NSTATS) efsys_stat_t *stat, 273299720Sarybchik __inout_opt uint32_t *generationp); 274299720Sarybchik 275299720Sarybchik#endif /* EFSYS_OPT_MAC_STATS */ 276299720Sarybchik 277299720Sarybchik 278299720Sarybchik/* MCDI */ 279299720Sarybchik 280299720Sarybchik#if EFSYS_OPT_MCDI 281299720Sarybchik 282299720Sarybchikextern __checkReturn efx_rc_t 283299720Sarybchikef10_mcdi_init( 284299720Sarybchik __in efx_nic_t *enp, 285299720Sarybchik __in const efx_mcdi_transport_t *mtp); 286299720Sarybchik 287299720Sarybchikextern void 288299720Sarybchikef10_mcdi_fini( 289299720Sarybchik __in efx_nic_t *enp); 290299720Sarybchik 291299720Sarybchikextern void 292299720Sarybchikef10_mcdi_send_request( 293299720Sarybchik __in efx_nic_t *enp, 294299720Sarybchik __in void *hdrp, 295299720Sarybchik __in size_t hdr_len, 296299720Sarybchik __in void *sdup, 297299720Sarybchik __in size_t sdu_len); 298299720Sarybchik 299299720Sarybchikextern __checkReturn boolean_t 300299720Sarybchikef10_mcdi_poll_response( 301299720Sarybchik __in efx_nic_t *enp); 302299720Sarybchik 303299720Sarybchikextern void 304299720Sarybchikef10_mcdi_read_response( 305299720Sarybchik __in efx_nic_t *enp, 306299720Sarybchik __out_bcount(length) void *bufferp, 307299720Sarybchik __in size_t offset, 308299720Sarybchik __in size_t length); 309299720Sarybchik 310299720Sarybchikextern efx_rc_t 311299720Sarybchikef10_mcdi_poll_reboot( 312299720Sarybchik __in efx_nic_t *enp); 313299720Sarybchik 314299720Sarybchikextern __checkReturn efx_rc_t 315299720Sarybchikef10_mcdi_feature_supported( 316299720Sarybchik __in efx_nic_t *enp, 317299720Sarybchik __in efx_mcdi_feature_id_t id, 318299720Sarybchik __out boolean_t *supportedp); 319299720Sarybchik 320299720Sarybchik#endif /* EFSYS_OPT_MCDI */ 321299720Sarybchik 322299720Sarybchik/* NVRAM */ 323299720Sarybchik 324299720Sarybchik#if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD 325299720Sarybchik 326299720Sarybchikextern __checkReturn efx_rc_t 327299720Sarybchikef10_nvram_buf_read_tlv( 328299720Sarybchik __in efx_nic_t *enp, 329299720Sarybchik __in_bcount(max_seg_size) caddr_t seg_data, 330299720Sarybchik __in size_t max_seg_size, 331299720Sarybchik __in uint32_t tag, 332299720Sarybchik __deref_out_bcount_opt(*sizep) caddr_t *datap, 333299720Sarybchik __out size_t *sizep); 334299720Sarybchik 335299720Sarybchikextern __checkReturn efx_rc_t 336299720Sarybchikef10_nvram_buf_write_tlv( 337299720Sarybchik __inout_bcount(partn_size) caddr_t partn_data, 338299720Sarybchik __in size_t partn_size, 339299720Sarybchik __in uint32_t tag, 340299720Sarybchik __in_bcount(tag_size) caddr_t tag_data, 341299720Sarybchik __in size_t tag_size, 342299720Sarybchik __out size_t *total_lengthp); 343299720Sarybchik 344299720Sarybchikextern __checkReturn efx_rc_t 345299720Sarybchikef10_nvram_partn_read_tlv( 346299720Sarybchik __in efx_nic_t *enp, 347299720Sarybchik __in uint32_t partn, 348299720Sarybchik __in uint32_t tag, 349299720Sarybchik __deref_out_bcount_opt(*sizep) caddr_t *datap, 350299720Sarybchik __out size_t *sizep); 351299720Sarybchik 352299720Sarybchikextern __checkReturn efx_rc_t 353299720Sarybchikef10_nvram_partn_write_tlv( 354299720Sarybchik __in efx_nic_t *enp, 355299720Sarybchik __in uint32_t partn, 356299720Sarybchik __in uint32_t tag, 357299720Sarybchik __in_bcount(size) caddr_t data, 358299720Sarybchik __in size_t size); 359299720Sarybchik 360299720Sarybchikextern __checkReturn efx_rc_t 361299720Sarybchikef10_nvram_partn_write_segment_tlv( 362299720Sarybchik __in efx_nic_t *enp, 363299720Sarybchik __in uint32_t partn, 364299720Sarybchik __in uint32_t tag, 365299720Sarybchik __in_bcount(size) caddr_t data, 366299720Sarybchik __in size_t size, 367299720Sarybchik __in boolean_t all_segments); 368299720Sarybchik 369299720Sarybchikextern __checkReturn efx_rc_t 370299720Sarybchikef10_nvram_partn_lock( 371299720Sarybchik __in efx_nic_t *enp, 372299720Sarybchik __in uint32_t partn); 373299720Sarybchik 374299720Sarybchikextern void 375299720Sarybchikef10_nvram_partn_unlock( 376299720Sarybchik __in efx_nic_t *enp, 377299720Sarybchik __in uint32_t partn); 378299720Sarybchik 379299720Sarybchik#endif /* EFSYS_OPT_NVRAM || EFSYS_OPT_VPD */ 380299720Sarybchik 381299720Sarybchik#if EFSYS_OPT_NVRAM 382299720Sarybchik 383299720Sarybchik#if EFSYS_OPT_DIAG 384299720Sarybchik 385299720Sarybchikextern __checkReturn efx_rc_t 386299720Sarybchikef10_nvram_test( 387299720Sarybchik __in efx_nic_t *enp); 388299720Sarybchik 389299720Sarybchik#endif /* EFSYS_OPT_DIAG */ 390299720Sarybchik 391299720Sarybchikextern __checkReturn efx_rc_t 392299720Sarybchikef10_nvram_type_to_partn( 393299720Sarybchik __in efx_nic_t *enp, 394299720Sarybchik __in efx_nvram_type_t type, 395299720Sarybchik __out uint32_t *partnp); 396299720Sarybchik 397299720Sarybchikextern __checkReturn efx_rc_t 398299720Sarybchikef10_nvram_partn_size( 399299720Sarybchik __in efx_nic_t *enp, 400299720Sarybchik __in uint32_t partn, 401299720Sarybchik __out size_t *sizep); 402299720Sarybchik 403299720Sarybchikextern __checkReturn efx_rc_t 404299720Sarybchikef10_nvram_partn_rw_start( 405299720Sarybchik __in efx_nic_t *enp, 406299720Sarybchik __in uint32_t partn, 407299720Sarybchik __out size_t *chunk_sizep); 408299720Sarybchik 409299720Sarybchikextern __checkReturn efx_rc_t 410299720Sarybchikef10_nvram_partn_read_mode( 411299720Sarybchik __in efx_nic_t *enp, 412299720Sarybchik __in uint32_t partn, 413299720Sarybchik __in unsigned int offset, 414299720Sarybchik __out_bcount(size) caddr_t data, 415299720Sarybchik __in size_t size, 416299720Sarybchik __in uint32_t mode); 417299720Sarybchik 418299720Sarybchikextern __checkReturn efx_rc_t 419299720Sarybchikef10_nvram_partn_read( 420299720Sarybchik __in efx_nic_t *enp, 421299720Sarybchik __in uint32_t partn, 422299720Sarybchik __in unsigned int offset, 423299720Sarybchik __out_bcount(size) caddr_t data, 424299720Sarybchik __in size_t size); 425299720Sarybchik 426299720Sarybchikextern __checkReturn efx_rc_t 427299720Sarybchikef10_nvram_partn_erase( 428299720Sarybchik __in efx_nic_t *enp, 429299720Sarybchik __in uint32_t partn, 430299720Sarybchik __in unsigned int offset, 431299720Sarybchik __in size_t size); 432299720Sarybchik 433299720Sarybchikextern __checkReturn efx_rc_t 434299720Sarybchikef10_nvram_partn_write( 435299720Sarybchik __in efx_nic_t *enp, 436299720Sarybchik __in uint32_t partn, 437299720Sarybchik __in unsigned int offset, 438299720Sarybchik __out_bcount(size) caddr_t data, 439299720Sarybchik __in size_t size); 440299720Sarybchik 441299720Sarybchikextern void 442299720Sarybchikef10_nvram_partn_rw_finish( 443299720Sarybchik __in efx_nic_t *enp, 444299720Sarybchik __in uint32_t partn); 445299720Sarybchik 446299720Sarybchikextern __checkReturn efx_rc_t 447299720Sarybchikef10_nvram_partn_get_version( 448299720Sarybchik __in efx_nic_t *enp, 449299720Sarybchik __in uint32_t partn, 450299720Sarybchik __out uint32_t *subtypep, 451299720Sarybchik __out_ecount(4) uint16_t version[4]); 452299720Sarybchik 453299720Sarybchikextern __checkReturn efx_rc_t 454299720Sarybchikef10_nvram_partn_set_version( 455299720Sarybchik __in efx_nic_t *enp, 456299720Sarybchik __in uint32_t partn, 457299720Sarybchik __in_ecount(4) uint16_t version[4]); 458299720Sarybchik 459299720Sarybchikextern __checkReturn efx_rc_t 460299720Sarybchikef10_nvram_buffer_validate( 461299720Sarybchik __in efx_nic_t *enp, 462299720Sarybchik __in uint32_t partn, 463299720Sarybchik __in_bcount(buffer_size) 464299720Sarybchik caddr_t bufferp, 465299720Sarybchik __in size_t buffer_size); 466299720Sarybchik 467299720Sarybchikextern __checkReturn efx_rc_t 468299720Sarybchikef10_nvram_buffer_create( 469299720Sarybchik __in efx_nic_t *enp, 470299720Sarybchik __in uint16_t partn_type, 471299720Sarybchik __in_bcount(buffer_size) 472299720Sarybchik caddr_t bufferp, 473299720Sarybchik __in size_t buffer_size); 474299720Sarybchik 475299720Sarybchikextern __checkReturn efx_rc_t 476299720Sarybchikef10_nvram_buffer_find_item_start( 477299720Sarybchik __in_bcount(buffer_size) 478299720Sarybchik caddr_t bufferp, 479299720Sarybchik __in size_t buffer_size, 480299720Sarybchik __out uint32_t *startp 481299720Sarybchik ); 482299720Sarybchik 483299720Sarybchikextern __checkReturn efx_rc_t 484299720Sarybchikef10_nvram_buffer_find_end( 485299720Sarybchik __in_bcount(buffer_size) 486299720Sarybchik caddr_t bufferp, 487299720Sarybchik __in size_t buffer_size, 488299720Sarybchik __in uint32_t offset, 489299720Sarybchik __out uint32_t *endp 490299720Sarybchik ); 491299720Sarybchik 492299720Sarybchikextern __checkReturn __success(return != B_FALSE) boolean_t 493299720Sarybchikef10_nvram_buffer_find_item( 494299720Sarybchik __in_bcount(buffer_size) 495299720Sarybchik caddr_t bufferp, 496299720Sarybchik __in size_t buffer_size, 497299720Sarybchik __in uint32_t offset, 498299720Sarybchik __out uint32_t *startp, 499299720Sarybchik __out uint32_t *lengthp 500299720Sarybchik ); 501299720Sarybchik 502299720Sarybchikextern __checkReturn efx_rc_t 503299720Sarybchikef10_nvram_buffer_get_item( 504299720Sarybchik __in_bcount(buffer_size) 505299720Sarybchik caddr_t bufferp, 506299720Sarybchik __in size_t buffer_size, 507299720Sarybchik __in uint32_t offset, 508299720Sarybchik __in uint32_t length, 509299720Sarybchik __out_bcount_part(item_max_size, *lengthp) 510299720Sarybchik caddr_t itemp, 511299720Sarybchik __in size_t item_max_size, 512299720Sarybchik __out uint32_t *lengthp 513299720Sarybchik ); 514299720Sarybchik 515299720Sarybchikextern __checkReturn efx_rc_t 516299720Sarybchikef10_nvram_buffer_insert_item( 517299720Sarybchik __in_bcount(buffer_size) 518299720Sarybchik caddr_t bufferp, 519299720Sarybchik __in size_t buffer_size, 520299720Sarybchik __in uint32_t offset, 521299720Sarybchik __in_bcount(length) caddr_t keyp, 522299720Sarybchik __in uint32_t length, 523299720Sarybchik __out uint32_t *lengthp 524299720Sarybchik ); 525299720Sarybchik 526299720Sarybchikextern __checkReturn efx_rc_t 527299720Sarybchikef10_nvram_buffer_delete_item( 528299720Sarybchik __in_bcount(buffer_size) 529299720Sarybchik caddr_t bufferp, 530299720Sarybchik __in size_t buffer_size, 531299720Sarybchik __in uint32_t offset, 532299720Sarybchik __in uint32_t length, 533299720Sarybchik __in uint32_t end 534299720Sarybchik ); 535299720Sarybchik 536299720Sarybchikextern __checkReturn efx_rc_t 537299720Sarybchikef10_nvram_buffer_finish( 538299720Sarybchik __in_bcount(buffer_size) 539299720Sarybchik caddr_t bufferp, 540299720Sarybchik __in size_t buffer_size 541299720Sarybchik ); 542299720Sarybchik 543299720Sarybchik#endif /* EFSYS_OPT_NVRAM */ 544299720Sarybchik 545299720Sarybchik 546299720Sarybchik/* PHY */ 547299720Sarybchik 548299720Sarybchiktypedef struct ef10_link_state_s { 549299720Sarybchik uint32_t els_adv_cap_mask; 550299720Sarybchik uint32_t els_lp_cap_mask; 551299720Sarybchik unsigned int els_fcntl; 552299720Sarybchik efx_link_mode_t els_link_mode; 553299720Sarybchik#if EFSYS_OPT_LOOPBACK 554299720Sarybchik efx_loopback_type_t els_loopback; 555299720Sarybchik#endif 556299720Sarybchik boolean_t els_mac_up; 557299720Sarybchik} ef10_link_state_t; 558299720Sarybchik 559299720Sarybchikextern void 560299720Sarybchikef10_phy_link_ev( 561299720Sarybchik __in efx_nic_t *enp, 562299720Sarybchik __in efx_qword_t *eqp, 563299720Sarybchik __out efx_link_mode_t *link_modep); 564299720Sarybchik 565299720Sarybchikextern __checkReturn efx_rc_t 566299720Sarybchikef10_phy_get_link( 567299720Sarybchik __in efx_nic_t *enp, 568299720Sarybchik __out ef10_link_state_t *elsp); 569299720Sarybchik 570299720Sarybchikextern __checkReturn efx_rc_t 571299720Sarybchikef10_phy_power( 572299720Sarybchik __in efx_nic_t *enp, 573299720Sarybchik __in boolean_t on); 574299720Sarybchik 575299720Sarybchikextern __checkReturn efx_rc_t 576299720Sarybchikef10_phy_reconfigure( 577299720Sarybchik __in efx_nic_t *enp); 578299720Sarybchik 579299720Sarybchikextern __checkReturn efx_rc_t 580299720Sarybchikef10_phy_verify( 581299720Sarybchik __in efx_nic_t *enp); 582299720Sarybchik 583299720Sarybchikextern __checkReturn efx_rc_t 584299720Sarybchikef10_phy_oui_get( 585299720Sarybchik __in efx_nic_t *enp, 586299720Sarybchik __out uint32_t *ouip); 587299720Sarybchik 588299720Sarybchik#if EFSYS_OPT_PHY_STATS 589299720Sarybchik 590299720Sarybchikextern __checkReturn efx_rc_t 591299720Sarybchikef10_phy_stats_update( 592299720Sarybchik __in efx_nic_t *enp, 593299720Sarybchik __in efsys_mem_t *esmp, 594299720Sarybchik __inout_ecount(EFX_PHY_NSTATS) uint32_t *stat); 595299720Sarybchik 596299720Sarybchik#endif /* EFSYS_OPT_PHY_STATS */ 597299720Sarybchik 598299720Sarybchik#if EFSYS_OPT_PHY_PROPS 599299720Sarybchik 600299720Sarybchik#if EFSYS_OPT_NAMES 601299720Sarybchik 602299720Sarybchikextern const char * 603299720Sarybchikef10_phy_prop_name( 604299720Sarybchik __in efx_nic_t *enp, 605299720Sarybchik __in unsigned int id); 606299720Sarybchik 607299720Sarybchik#endif /* EFSYS_OPT_NAMES */ 608299720Sarybchik 609299720Sarybchikextern __checkReturn efx_rc_t 610299720Sarybchikef10_phy_prop_get( 611299720Sarybchik __in efx_nic_t *enp, 612299720Sarybchik __in unsigned int id, 613299720Sarybchik __in uint32_t flags, 614299720Sarybchik __out uint32_t *valp); 615299720Sarybchik 616299720Sarybchikextern __checkReturn efx_rc_t 617299720Sarybchikef10_phy_prop_set( 618299720Sarybchik __in efx_nic_t *enp, 619299720Sarybchik __in unsigned int id, 620299720Sarybchik __in uint32_t val); 621299720Sarybchik 622299720Sarybchik#endif /* EFSYS_OPT_PHY_PROPS */ 623299720Sarybchik 624299720Sarybchik 625299720Sarybchik/* TX */ 626299720Sarybchik 627299720Sarybchikextern __checkReturn efx_rc_t 628299720Sarybchikef10_tx_init( 629299720Sarybchik __in efx_nic_t *enp); 630299720Sarybchik 631299720Sarybchikextern void 632299720Sarybchikef10_tx_fini( 633299720Sarybchik __in efx_nic_t *enp); 634299720Sarybchik 635299720Sarybchikextern __checkReturn efx_rc_t 636299720Sarybchikef10_tx_qcreate( 637299720Sarybchik __in efx_nic_t *enp, 638299720Sarybchik __in unsigned int index, 639299720Sarybchik __in unsigned int label, 640299720Sarybchik __in efsys_mem_t *esmp, 641299720Sarybchik __in size_t n, 642299720Sarybchik __in uint32_t id, 643299720Sarybchik __in uint16_t flags, 644299720Sarybchik __in efx_evq_t *eep, 645299720Sarybchik __in efx_txq_t *etp, 646299720Sarybchik __out unsigned int *addedp); 647299720Sarybchik 648299720Sarybchikextern void 649299720Sarybchikef10_tx_qdestroy( 650299720Sarybchik __in efx_txq_t *etp); 651299720Sarybchik 652299720Sarybchikextern __checkReturn efx_rc_t 653299720Sarybchikef10_tx_qpost( 654299720Sarybchik __in efx_txq_t *etp, 655299720Sarybchik __in_ecount(n) efx_buffer_t *eb, 656299720Sarybchik __in unsigned int n, 657299720Sarybchik __in unsigned int completed, 658299720Sarybchik __inout unsigned int *addedp); 659299720Sarybchik 660299720Sarybchikextern void 661299720Sarybchikef10_tx_qpush( 662299720Sarybchik __in efx_txq_t *etp, 663299720Sarybchik __in unsigned int added, 664299720Sarybchik __in unsigned int pushed); 665299720Sarybchik 666299720Sarybchikextern __checkReturn efx_rc_t 667299720Sarybchikef10_tx_qpace( 668299720Sarybchik __in efx_txq_t *etp, 669299720Sarybchik __in unsigned int ns); 670299720Sarybchik 671299720Sarybchikextern __checkReturn efx_rc_t 672299720Sarybchikef10_tx_qflush( 673299720Sarybchik __in efx_txq_t *etp); 674299720Sarybchik 675299720Sarybchikextern void 676299720Sarybchikef10_tx_qenable( 677299720Sarybchik __in efx_txq_t *etp); 678299720Sarybchik 679299720Sarybchikextern __checkReturn efx_rc_t 680299720Sarybchikef10_tx_qpio_enable( 681299720Sarybchik __in efx_txq_t *etp); 682299720Sarybchik 683299720Sarybchikextern void 684299720Sarybchikef10_tx_qpio_disable( 685299720Sarybchik __in efx_txq_t *etp); 686299720Sarybchik 687299720Sarybchikextern __checkReturn efx_rc_t 688299720Sarybchikef10_tx_qpio_write( 689299720Sarybchik __in efx_txq_t *etp, 690299720Sarybchik __in_ecount(buf_length) uint8_t *buffer, 691299720Sarybchik __in size_t buf_length, 692299720Sarybchik __in size_t pio_buf_offset); 693299720Sarybchik 694299720Sarybchikextern __checkReturn efx_rc_t 695299720Sarybchikef10_tx_qpio_post( 696299720Sarybchik __in efx_txq_t *etp, 697299720Sarybchik __in size_t pkt_length, 698299720Sarybchik __in unsigned int completed, 699299720Sarybchik __inout unsigned int *addedp); 700299720Sarybchik 701299720Sarybchikextern __checkReturn efx_rc_t 702299720Sarybchikef10_tx_qdesc_post( 703299720Sarybchik __in efx_txq_t *etp, 704299720Sarybchik __in_ecount(n) efx_desc_t *ed, 705299720Sarybchik __in unsigned int n, 706299720Sarybchik __in unsigned int completed, 707299720Sarybchik __inout unsigned int *addedp); 708299720Sarybchik 709299720Sarybchikextern void 710299720Sarybchikef10_tx_qdesc_dma_create( 711299720Sarybchik __in efx_txq_t *etp, 712299720Sarybchik __in efsys_dma_addr_t addr, 713299720Sarybchik __in size_t size, 714299720Sarybchik __in boolean_t eop, 715299720Sarybchik __out efx_desc_t *edp); 716299720Sarybchik 717299720Sarybchikextern void 718299720Sarybchikef10_tx_qdesc_tso_create( 719299720Sarybchik __in efx_txq_t *etp, 720299720Sarybchik __in uint16_t ipv4_id, 721299720Sarybchik __in uint32_t tcp_seq, 722299720Sarybchik __in uint8_t tcp_flags, 723299720Sarybchik __out efx_desc_t *edp); 724299720Sarybchik 725299720Sarybchikextern void 726299720Sarybchikef10_tx_qdesc_tso2_create( 727299720Sarybchik __in efx_txq_t *etp, 728299720Sarybchik __in uint16_t ipv4_id, 729299720Sarybchik __in uint32_t tcp_seq, 730299720Sarybchik __in uint16_t tcp_mss, 731299720Sarybchik __out_ecount(count) efx_desc_t *edp, 732299720Sarybchik __in int count); 733299720Sarybchik 734299720Sarybchikextern void 735299720Sarybchikef10_tx_qdesc_vlantci_create( 736299720Sarybchik __in efx_txq_t *etp, 737299720Sarybchik __in uint16_t vlan_tci, 738299720Sarybchik __out efx_desc_t *edp); 739299720Sarybchik 740299720Sarybchik 741299720Sarybchik#if EFSYS_OPT_QSTATS 742299720Sarybchik 743299720Sarybchikextern void 744299720Sarybchikef10_tx_qstats_update( 745299720Sarybchik __in efx_txq_t *etp, 746299720Sarybchik __inout_ecount(TX_NQSTATS) efsys_stat_t *stat); 747299720Sarybchik 748299720Sarybchik#endif /* EFSYS_OPT_QSTATS */ 749299720Sarybchik 750299720Sarybchiktypedef uint32_t efx_piobuf_handle_t; 751299720Sarybchik 752299720Sarybchik#define EFX_PIOBUF_HANDLE_INVALID ((efx_piobuf_handle_t) -1) 753299720Sarybchik 754299720Sarybchikextern __checkReturn efx_rc_t 755299720Sarybchikef10_nic_pio_alloc( 756299720Sarybchik __inout efx_nic_t *enp, 757299720Sarybchik __out uint32_t *bufnump, 758299720Sarybchik __out efx_piobuf_handle_t *handlep, 759299720Sarybchik __out uint32_t *blknump, 760299720Sarybchik __out uint32_t *offsetp, 761299720Sarybchik __out size_t *sizep); 762299720Sarybchik 763299720Sarybchikextern __checkReturn efx_rc_t 764299720Sarybchikef10_nic_pio_free( 765299720Sarybchik __inout efx_nic_t *enp, 766299720Sarybchik __in uint32_t bufnum, 767299720Sarybchik __in uint32_t blknum); 768299720Sarybchik 769299720Sarybchikextern __checkReturn efx_rc_t 770299720Sarybchikef10_nic_pio_link( 771299720Sarybchik __inout efx_nic_t *enp, 772299720Sarybchik __in uint32_t vi_index, 773299720Sarybchik __in efx_piobuf_handle_t handle); 774299720Sarybchik 775299720Sarybchikextern __checkReturn efx_rc_t 776299720Sarybchikef10_nic_pio_unlink( 777299720Sarybchik __inout efx_nic_t *enp, 778299720Sarybchik __in uint32_t vi_index); 779299720Sarybchik 780299720Sarybchik 781299720Sarybchik/* VPD */ 782299720Sarybchik 783299720Sarybchik#if EFSYS_OPT_VPD 784299720Sarybchik 785299720Sarybchikextern __checkReturn efx_rc_t 786299720Sarybchikef10_vpd_init( 787299720Sarybchik __in efx_nic_t *enp); 788299720Sarybchik 789299720Sarybchikextern __checkReturn efx_rc_t 790299720Sarybchikef10_vpd_size( 791299720Sarybchik __in efx_nic_t *enp, 792299720Sarybchik __out size_t *sizep); 793299720Sarybchik 794299720Sarybchikextern __checkReturn efx_rc_t 795299720Sarybchikef10_vpd_read( 796299720Sarybchik __in efx_nic_t *enp, 797299720Sarybchik __out_bcount(size) caddr_t data, 798299720Sarybchik __in size_t size); 799299720Sarybchik 800299720Sarybchikextern __checkReturn efx_rc_t 801299720Sarybchikef10_vpd_verify( 802299720Sarybchik __in efx_nic_t *enp, 803299720Sarybchik __in_bcount(size) caddr_t data, 804299720Sarybchik __in size_t size); 805299720Sarybchik 806299720Sarybchikextern __checkReturn efx_rc_t 807299720Sarybchikef10_vpd_reinit( 808299720Sarybchik __in efx_nic_t *enp, 809299720Sarybchik __in_bcount(size) caddr_t data, 810299720Sarybchik __in size_t size); 811299720Sarybchik 812299720Sarybchikextern __checkReturn efx_rc_t 813299720Sarybchikef10_vpd_get( 814299720Sarybchik __in efx_nic_t *enp, 815299720Sarybchik __in_bcount(size) caddr_t data, 816299720Sarybchik __in size_t size, 817299720Sarybchik __inout efx_vpd_value_t *evvp); 818299720Sarybchik 819299720Sarybchikextern __checkReturn efx_rc_t 820299720Sarybchikef10_vpd_set( 821299720Sarybchik __in efx_nic_t *enp, 822299720Sarybchik __in_bcount(size) caddr_t data, 823299720Sarybchik __in size_t size, 824299720Sarybchik __in efx_vpd_value_t *evvp); 825299720Sarybchik 826299720Sarybchikextern __checkReturn efx_rc_t 827299720Sarybchikef10_vpd_next( 828299720Sarybchik __in efx_nic_t *enp, 829299720Sarybchik __in_bcount(size) caddr_t data, 830299720Sarybchik __in size_t size, 831299720Sarybchik __out efx_vpd_value_t *evvp, 832299720Sarybchik __inout unsigned int *contp); 833299720Sarybchik 834299720Sarybchikextern __checkReturn efx_rc_t 835299720Sarybchikef10_vpd_write( 836299720Sarybchik __in efx_nic_t *enp, 837299720Sarybchik __in_bcount(size) caddr_t data, 838299720Sarybchik __in size_t size); 839299720Sarybchik 840299720Sarybchikextern void 841299720Sarybchikef10_vpd_fini( 842299720Sarybchik __in efx_nic_t *enp); 843299720Sarybchik 844299720Sarybchik#endif /* EFSYS_OPT_VPD */ 845299720Sarybchik 846299720Sarybchik 847299720Sarybchik/* RX */ 848299720Sarybchik 849299720Sarybchikextern __checkReturn efx_rc_t 850299720Sarybchikef10_rx_init( 851299720Sarybchik __in efx_nic_t *enp); 852299720Sarybchik 853299720Sarybchik#if EFSYS_OPT_RX_SCATTER 854299720Sarybchikextern __checkReturn efx_rc_t 855299720Sarybchikef10_rx_scatter_enable( 856299720Sarybchik __in efx_nic_t *enp, 857299720Sarybchik __in unsigned int buf_size); 858299720Sarybchik#endif /* EFSYS_OPT_RX_SCATTER */ 859299720Sarybchik 860299720Sarybchik 861299720Sarybchik#if EFSYS_OPT_RX_SCALE 862299720Sarybchik 863299720Sarybchikextern __checkReturn efx_rc_t 864299720Sarybchikef10_rx_scale_mode_set( 865299720Sarybchik __in efx_nic_t *enp, 866299720Sarybchik __in efx_rx_hash_alg_t alg, 867299720Sarybchik __in efx_rx_hash_type_t type, 868299720Sarybchik __in boolean_t insert); 869299720Sarybchik 870299720Sarybchikextern __checkReturn efx_rc_t 871299720Sarybchikef10_rx_scale_key_set( 872299720Sarybchik __in efx_nic_t *enp, 873299720Sarybchik __in_ecount(n) uint8_t *key, 874299720Sarybchik __in size_t n); 875299720Sarybchik 876299720Sarybchikextern __checkReturn efx_rc_t 877299720Sarybchikef10_rx_scale_tbl_set( 878299720Sarybchik __in efx_nic_t *enp, 879299720Sarybchik __in_ecount(n) unsigned int *table, 880299720Sarybchik __in size_t n); 881299720Sarybchik 882299720Sarybchikextern __checkReturn uint32_t 883299720Sarybchikef10_rx_prefix_hash( 884299720Sarybchik __in efx_nic_t *enp, 885299720Sarybchik __in efx_rx_hash_alg_t func, 886299720Sarybchik __in uint8_t *buffer); 887299720Sarybchik 888299720Sarybchik#endif /* EFSYS_OPT_RX_SCALE */ 889299720Sarybchik 890299720Sarybchikextern __checkReturn efx_rc_t 891299720Sarybchikef10_rx_prefix_pktlen( 892299720Sarybchik __in efx_nic_t *enp, 893299720Sarybchik __in uint8_t *buffer, 894299720Sarybchik __out uint16_t *lengthp); 895299720Sarybchik 896299720Sarybchikextern void 897299720Sarybchikef10_rx_qpost( 898299720Sarybchik __in efx_rxq_t *erp, 899299720Sarybchik __in_ecount(n) efsys_dma_addr_t *addrp, 900299720Sarybchik __in size_t size, 901299720Sarybchik __in unsigned int n, 902299720Sarybchik __in unsigned int completed, 903299720Sarybchik __in unsigned int added); 904299720Sarybchik 905299720Sarybchikextern void 906299720Sarybchikef10_rx_qpush( 907299720Sarybchik __in efx_rxq_t *erp, 908299720Sarybchik __in unsigned int added, 909299720Sarybchik __inout unsigned int *pushedp); 910299720Sarybchik 911299720Sarybchikextern __checkReturn efx_rc_t 912299720Sarybchikef10_rx_qflush( 913299720Sarybchik __in efx_rxq_t *erp); 914299720Sarybchik 915299720Sarybchikextern void 916299720Sarybchikef10_rx_qenable( 917299720Sarybchik __in efx_rxq_t *erp); 918299720Sarybchik 919299720Sarybchikextern __checkReturn efx_rc_t 920299720Sarybchikef10_rx_qcreate( 921299720Sarybchik __in efx_nic_t *enp, 922299720Sarybchik __in unsigned int index, 923299720Sarybchik __in unsigned int label, 924299720Sarybchik __in efx_rxq_type_t type, 925299720Sarybchik __in efsys_mem_t *esmp, 926299720Sarybchik __in size_t n, 927299720Sarybchik __in uint32_t id, 928299720Sarybchik __in efx_evq_t *eep, 929299720Sarybchik __in efx_rxq_t *erp); 930299720Sarybchik 931299720Sarybchikextern void 932299720Sarybchikef10_rx_qdestroy( 933299720Sarybchik __in efx_rxq_t *erp); 934299720Sarybchik 935299720Sarybchikextern void 936299720Sarybchikef10_rx_fini( 937299720Sarybchik __in efx_nic_t *enp); 938299720Sarybchik 939299720Sarybchik#if EFSYS_OPT_FILTER 940299720Sarybchik 941299720Sarybchiktypedef struct ef10_filter_handle_s { 942299720Sarybchik uint32_t efh_lo; 943299720Sarybchik uint32_t efh_hi; 944299720Sarybchik} ef10_filter_handle_t; 945299720Sarybchik 946299720Sarybchiktypedef struct ef10_filter_entry_s { 947299720Sarybchik uintptr_t efe_spec; /* pointer to filter spec plus busy bit */ 948299720Sarybchik ef10_filter_handle_t efe_handle; 949299720Sarybchik} ef10_filter_entry_t; 950299720Sarybchik 951299720Sarybchik/* 952299720Sarybchik * BUSY flag indicates that an update is in progress. 953299720Sarybchik * AUTO_OLD flag is used to mark and sweep MAC packet filters. 954299720Sarybchik */ 955299720Sarybchik#define EFX_EF10_FILTER_FLAG_BUSY 1U 956299720Sarybchik#define EFX_EF10_FILTER_FLAG_AUTO_OLD 2U 957299720Sarybchik#define EFX_EF10_FILTER_FLAGS 3U 958299720Sarybchik 959299720Sarybchik/* 960299720Sarybchik * Size of the hash table used by the driver. Doesn't need to be the 961299720Sarybchik * same size as the hardware's table. 962299720Sarybchik */ 963299720Sarybchik#define EFX_EF10_FILTER_TBL_ROWS 8192 964299720Sarybchik 965299720Sarybchik/* Only need to allow for one directed and one unknown unicast filter */ 966299720Sarybchik#define EFX_EF10_FILTER_UNICAST_FILTERS_MAX 2 967299720Sarybchik 968299720Sarybchik/* Allow for the broadcast address to be added to the multicast list */ 969299720Sarybchik#define EFX_EF10_FILTER_MULTICAST_FILTERS_MAX (EFX_MAC_MULTICAST_LIST_MAX + 1) 970299720Sarybchik 971299720Sarybchiktypedef struct ef10_filter_table_s { 972299720Sarybchik ef10_filter_entry_t eft_entry[EFX_EF10_FILTER_TBL_ROWS]; 973299720Sarybchik efx_rxq_t * eft_default_rxq; 974299720Sarybchik boolean_t eft_using_rss; 975299720Sarybchik uint32_t eft_unicst_filter_indexes[ 976299720Sarybchik EFX_EF10_FILTER_UNICAST_FILTERS_MAX]; 977299720Sarybchik boolean_t eft_unicst_filter_count; 978299720Sarybchik uint32_t eft_mulcst_filter_indexes[ 979299720Sarybchik EFX_EF10_FILTER_MULTICAST_FILTERS_MAX]; 980299720Sarybchik uint32_t eft_mulcst_filter_count; 981299720Sarybchik boolean_t eft_using_all_mulcst; 982299720Sarybchik} ef10_filter_table_t; 983299720Sarybchik 984299720Sarybchik __checkReturn efx_rc_t 985299720Sarybchikef10_filter_init( 986299720Sarybchik __in efx_nic_t *enp); 987299720Sarybchik 988299720Sarybchik void 989299720Sarybchikef10_filter_fini( 990299720Sarybchik __in efx_nic_t *enp); 991299720Sarybchik 992299720Sarybchik __checkReturn efx_rc_t 993299720Sarybchikef10_filter_restore( 994299720Sarybchik __in efx_nic_t *enp); 995299720Sarybchik 996299720Sarybchik __checkReturn efx_rc_t 997299720Sarybchikef10_filter_add( 998299720Sarybchik __in efx_nic_t *enp, 999299720Sarybchik __inout efx_filter_spec_t *spec, 1000299720Sarybchik __in boolean_t may_replace); 1001299720Sarybchik 1002299720Sarybchik __checkReturn efx_rc_t 1003299720Sarybchikef10_filter_delete( 1004299720Sarybchik __in efx_nic_t *enp, 1005299720Sarybchik __inout efx_filter_spec_t *spec); 1006299720Sarybchik 1007299720Sarybchikextern __checkReturn efx_rc_t 1008299720Sarybchikef10_filter_supported_filters( 1009299720Sarybchik __in efx_nic_t *enp, 1010299720Sarybchik __out uint32_t *list, 1011299720Sarybchik __out size_t *length); 1012299720Sarybchik 1013299720Sarybchikextern __checkReturn efx_rc_t 1014299720Sarybchikef10_filter_reconfigure( 1015299720Sarybchik __in efx_nic_t *enp, 1016299720Sarybchik __in_ecount(6) uint8_t const *mac_addr, 1017299720Sarybchik __in boolean_t all_unicst, 1018299720Sarybchik __in boolean_t mulcst, 1019299720Sarybchik __in boolean_t all_mulcst, 1020299720Sarybchik __in boolean_t brdcst, 1021299720Sarybchik __in_ecount(6*count) uint8_t const *addrs, 1022299720Sarybchik __in uint32_t count); 1023299720Sarybchik 1024299720Sarybchikextern void 1025299720Sarybchikef10_filter_get_default_rxq( 1026299720Sarybchik __in efx_nic_t *enp, 1027299720Sarybchik __out efx_rxq_t **erpp, 1028299720Sarybchik __out boolean_t *using_rss); 1029299720Sarybchik 1030299720Sarybchikextern void 1031299720Sarybchikef10_filter_default_rxq_set( 1032299720Sarybchik __in efx_nic_t *enp, 1033299720Sarybchik __in efx_rxq_t *erp, 1034299720Sarybchik __in boolean_t using_rss); 1035299720Sarybchik 1036299720Sarybchikextern void 1037299720Sarybchikef10_filter_default_rxq_clear( 1038299720Sarybchik __in efx_nic_t *enp); 1039299720Sarybchik 1040299720Sarybchik 1041299720Sarybchik#endif /* EFSYS_OPT_FILTER */ 1042299720Sarybchik 1043299720Sarybchikextern __checkReturn efx_rc_t 1044299720Sarybchikefx_mcdi_get_function_info( 1045299720Sarybchik __in efx_nic_t *enp, 1046299720Sarybchik __out uint32_t *pfp, 1047299720Sarybchik __out_opt uint32_t *vfp); 1048299720Sarybchik 1049299720Sarybchikextern __checkReturn efx_rc_t 1050299720Sarybchikefx_mcdi_privilege_mask( 1051299720Sarybchik __in efx_nic_t *enp, 1052299720Sarybchik __in uint32_t pf, 1053299720Sarybchik __in uint32_t vf, 1054299720Sarybchik __out uint32_t *maskp); 1055299720Sarybchik 1056299720Sarybchikextern __checkReturn efx_rc_t 1057293887Sarybchikefx_mcdi_get_port_assignment( 1058293887Sarybchik __in efx_nic_t *enp, 1059293887Sarybchik __out uint32_t *portp); 1060293734Sarybchik 1061293887Sarybchikextern __checkReturn efx_rc_t 1062293887Sarybchikefx_mcdi_get_port_modes( 1063293887Sarybchik __in efx_nic_t *enp, 1064293887Sarybchik __out uint32_t *modesp); 1065293734Sarybchik 1066293887Sarybchikextern __checkReturn efx_rc_t 1067293887Sarybchikefx_mcdi_get_mac_address_pf( 1068293887Sarybchik __in efx_nic_t *enp, 1069293887Sarybchik __out_ecount_opt(6) uint8_t mac_addrp[6]); 1070293887Sarybchik 1071293887Sarybchikextern __checkReturn efx_rc_t 1072293887Sarybchikefx_mcdi_get_mac_address_vf( 1073293887Sarybchik __in efx_nic_t *enp, 1074293887Sarybchik __out_ecount_opt(6) uint8_t mac_addrp[6]); 1075293887Sarybchik 1076293887Sarybchikextern __checkReturn efx_rc_t 1077293887Sarybchikefx_mcdi_get_clock( 1078293887Sarybchik __in efx_nic_t *enp, 1079293887Sarybchik __out uint32_t *sys_freqp); 1080293887Sarybchik 1081293887Sarybchikextern __checkReturn efx_rc_t 1082293887Sarybchikefx_mcdi_get_vector_cfg( 1083293887Sarybchik __in efx_nic_t *enp, 1084293887Sarybchik __out_opt uint32_t *vec_basep, 1085293887Sarybchik __out_opt uint32_t *pf_nvecp, 1086293887Sarybchik __out_opt uint32_t *vf_nvecp); 1087293887Sarybchik 1088293887Sarybchikextern __checkReturn efx_rc_t 1089293887Sarybchikef10_get_datapath_caps( 1090293887Sarybchik __in efx_nic_t *enp); 1091293887Sarybchik 1092294079Sarybchikextern __checkReturn efx_rc_t 1093294079Sarybchikef10_get_privilege_mask( 1094294079Sarybchik __in efx_nic_t *enp, 1095294079Sarybchik __out uint32_t *maskp); 1096294079Sarybchik 1097293887Sarybchikextern __checkReturn efx_rc_t 1098293887Sarybchikef10_external_port_mapping( 1099293887Sarybchik __in efx_nic_t *enp, 1100293887Sarybchik __in uint32_t port, 1101293887Sarybchik __out uint8_t *external_portp); 1102293887Sarybchik 1103293887Sarybchik 1104293734Sarybchik#ifdef __cplusplus 1105293734Sarybchik} 1106293734Sarybchik#endif 1107293734Sarybchik 1108293734Sarybchik#endif /* _SYS_EF10_IMPL_H */ 1109