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