ef10_impl.h revision 342441
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 342441 2018-12-25 07:21:35Z 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, 88310939Sarybchik __in uint32_t flags, 89299720Sarybchik __in efx_evq_t *eep); 90299720Sarybchik 91299720Sarybchik void 92299720Sarybchikef10_ev_qdestroy( 93299720Sarybchik __in efx_evq_t *eep); 94299720Sarybchik 95299720Sarybchik __checkReturn efx_rc_t 96299720Sarybchikef10_ev_qprime( 97299720Sarybchik __in efx_evq_t *eep, 98299720Sarybchik __in unsigned int count); 99299720Sarybchik 100299720Sarybchik void 101299720Sarybchikef10_ev_qpost( 102299720Sarybchik __in efx_evq_t *eep, 103299720Sarybchik __in uint16_t data); 104299720Sarybchik 105299720Sarybchik __checkReturn efx_rc_t 106299720Sarybchikef10_ev_qmoderate( 107299720Sarybchik __in efx_evq_t *eep, 108299720Sarybchik __in unsigned int us); 109299720Sarybchik 110299720Sarybchik#if EFSYS_OPT_QSTATS 111299720Sarybchik void 112299720Sarybchikef10_ev_qstats_update( 113299720Sarybchik __in efx_evq_t *eep, 114299720Sarybchik __inout_ecount(EV_NQSTATS) efsys_stat_t *stat); 115299720Sarybchik#endif /* EFSYS_OPT_QSTATS */ 116299720Sarybchik 117299720Sarybchik void 118299720Sarybchikef10_ev_rxlabel_init( 119299720Sarybchik __in efx_evq_t *eep, 120299720Sarybchik __in efx_rxq_t *erp, 121299720Sarybchik __in unsigned int label); 122299720Sarybchik 123299720Sarybchik void 124299720Sarybchikef10_ev_rxlabel_fini( 125299720Sarybchik __in efx_evq_t *eep, 126299720Sarybchik __in unsigned int label); 127299720Sarybchik 128299720Sarybchik/* INTR */ 129299720Sarybchik 130299720Sarybchik __checkReturn efx_rc_t 131299720Sarybchikef10_intr_init( 132299720Sarybchik __in efx_nic_t *enp, 133299720Sarybchik __in efx_intr_type_t type, 134299720Sarybchik __in efsys_mem_t *esmp); 135299720Sarybchik 136299720Sarybchik void 137299720Sarybchikef10_intr_enable( 138299720Sarybchik __in efx_nic_t *enp); 139299720Sarybchik 140299720Sarybchik void 141299720Sarybchikef10_intr_disable( 142299720Sarybchik __in efx_nic_t *enp); 143299720Sarybchik 144299720Sarybchik void 145299720Sarybchikef10_intr_disable_unlocked( 146299720Sarybchik __in efx_nic_t *enp); 147299720Sarybchik 148299720Sarybchik __checkReturn efx_rc_t 149299720Sarybchikef10_intr_trigger( 150299720Sarybchik __in efx_nic_t *enp, 151299720Sarybchik __in unsigned int level); 152299720Sarybchik 153299720Sarybchik void 154299720Sarybchikef10_intr_status_line( 155299720Sarybchik __in efx_nic_t *enp, 156299720Sarybchik __out boolean_t *fatalp, 157299720Sarybchik __out uint32_t *qmaskp); 158299720Sarybchik 159299720Sarybchik void 160299720Sarybchikef10_intr_status_message( 161299720Sarybchik __in efx_nic_t *enp, 162299720Sarybchik __in unsigned int message, 163299720Sarybchik __out boolean_t *fatalp); 164299720Sarybchik 165299720Sarybchik void 166299720Sarybchikef10_intr_fatal( 167299720Sarybchik __in efx_nic_t *enp); 168299720Sarybchik void 169299720Sarybchikef10_intr_fini( 170299720Sarybchik __in efx_nic_t *enp); 171299720Sarybchik 172299720Sarybchik/* NIC */ 173299720Sarybchik 174293887Sarybchikextern __checkReturn efx_rc_t 175299720Sarybchikef10_nic_probe( 176299720Sarybchik __in efx_nic_t *enp); 177299720Sarybchik 178299720Sarybchikextern __checkReturn efx_rc_t 179299720Sarybchikef10_nic_set_drv_limits( 180299720Sarybchik __inout efx_nic_t *enp, 181299720Sarybchik __in efx_drv_limits_t *edlp); 182299720Sarybchik 183299720Sarybchikextern __checkReturn efx_rc_t 184299720Sarybchikef10_nic_get_vi_pool( 185299720Sarybchik __in efx_nic_t *enp, 186299720Sarybchik __out uint32_t *vi_countp); 187299720Sarybchik 188299720Sarybchikextern __checkReturn efx_rc_t 189299720Sarybchikef10_nic_get_bar_region( 190299720Sarybchik __in efx_nic_t *enp, 191299720Sarybchik __in efx_nic_region_t region, 192299720Sarybchik __out uint32_t *offsetp, 193299720Sarybchik __out size_t *sizep); 194299720Sarybchik 195299720Sarybchikextern __checkReturn efx_rc_t 196299720Sarybchikef10_nic_reset( 197299720Sarybchik __in efx_nic_t *enp); 198299720Sarybchik 199299720Sarybchikextern __checkReturn efx_rc_t 200299720Sarybchikef10_nic_init( 201299720Sarybchik __in efx_nic_t *enp); 202299720Sarybchik 203299720Sarybchik#if EFSYS_OPT_DIAG 204299720Sarybchik 205299720Sarybchikextern __checkReturn efx_rc_t 206299720Sarybchikef10_nic_register_test( 207299720Sarybchik __in efx_nic_t *enp); 208299720Sarybchik 209299720Sarybchik#endif /* EFSYS_OPT_DIAG */ 210299720Sarybchik 211299720Sarybchikextern void 212299720Sarybchikef10_nic_fini( 213299720Sarybchik __in efx_nic_t *enp); 214299720Sarybchik 215299720Sarybchikextern void 216299720Sarybchikef10_nic_unprobe( 217299720Sarybchik __in efx_nic_t *enp); 218299720Sarybchik 219299720Sarybchik 220299720Sarybchik/* MAC */ 221299720Sarybchik 222299720Sarybchikextern __checkReturn efx_rc_t 223299720Sarybchikef10_mac_poll( 224299720Sarybchik __in efx_nic_t *enp, 225299720Sarybchik __out efx_link_mode_t *link_modep); 226299720Sarybchik 227299720Sarybchikextern __checkReturn efx_rc_t 228299720Sarybchikef10_mac_up( 229299720Sarybchik __in efx_nic_t *enp, 230299720Sarybchik __out boolean_t *mac_upp); 231299720Sarybchik 232299720Sarybchikextern __checkReturn efx_rc_t 233299720Sarybchikef10_mac_addr_set( 234299720Sarybchik __in efx_nic_t *enp); 235299720Sarybchik 236299720Sarybchikextern __checkReturn efx_rc_t 237299720Sarybchikef10_mac_pdu_set( 238299720Sarybchik __in efx_nic_t *enp); 239299720Sarybchik 240299720Sarybchikextern __checkReturn efx_rc_t 241300008Sarybchikef10_mac_pdu_get( 242300008Sarybchik __in efx_nic_t *enp, 243300008Sarybchik __out size_t *pdu); 244300008Sarybchik 245300008Sarybchikextern __checkReturn efx_rc_t 246299720Sarybchikef10_mac_reconfigure( 247299720Sarybchik __in efx_nic_t *enp); 248299720Sarybchik 249299720Sarybchikextern __checkReturn efx_rc_t 250299720Sarybchikef10_mac_multicast_list_set( 251299720Sarybchik __in efx_nic_t *enp); 252299720Sarybchik 253299720Sarybchikextern __checkReturn efx_rc_t 254299720Sarybchikef10_mac_filter_default_rxq_set( 255299720Sarybchik __in efx_nic_t *enp, 256299720Sarybchik __in efx_rxq_t *erp, 257299720Sarybchik __in boolean_t using_rss); 258299720Sarybchik 259299720Sarybchikextern void 260299720Sarybchikef10_mac_filter_default_rxq_clear( 261299720Sarybchik __in efx_nic_t *enp); 262299720Sarybchik 263299720Sarybchik#if EFSYS_OPT_LOOPBACK 264299720Sarybchik 265299720Sarybchikextern __checkReturn efx_rc_t 266299720Sarybchikef10_mac_loopback_set( 267299720Sarybchik __in efx_nic_t *enp, 268299720Sarybchik __in efx_link_mode_t link_mode, 269299720Sarybchik __in efx_loopback_type_t loopback_type); 270299720Sarybchik 271299720Sarybchik#endif /* EFSYS_OPT_LOOPBACK */ 272299720Sarybchik 273299720Sarybchik#if EFSYS_OPT_MAC_STATS 274299720Sarybchik 275299720Sarybchikextern __checkReturn efx_rc_t 276311017Sarybchikef10_mac_stats_get_mask( 277311017Sarybchik __in efx_nic_t *enp, 278311017Sarybchik __inout_bcount(mask_size) uint32_t *maskp, 279311017Sarybchik __in size_t mask_size); 280311017Sarybchik 281311017Sarybchikextern __checkReturn efx_rc_t 282299720Sarybchikef10_mac_stats_update( 283299720Sarybchik __in efx_nic_t *enp, 284299720Sarybchik __in efsys_mem_t *esmp, 285299720Sarybchik __inout_ecount(EFX_MAC_NSTATS) efsys_stat_t *stat, 286299720Sarybchik __inout_opt uint32_t *generationp); 287299720Sarybchik 288299720Sarybchik#endif /* EFSYS_OPT_MAC_STATS */ 289299720Sarybchik 290299720Sarybchik 291299720Sarybchik/* MCDI */ 292299720Sarybchik 293299720Sarybchik#if EFSYS_OPT_MCDI 294299720Sarybchik 295299720Sarybchikextern __checkReturn efx_rc_t 296299720Sarybchikef10_mcdi_init( 297299720Sarybchik __in efx_nic_t *enp, 298299720Sarybchik __in const efx_mcdi_transport_t *mtp); 299299720Sarybchik 300299720Sarybchikextern void 301299720Sarybchikef10_mcdi_fini( 302299720Sarybchik __in efx_nic_t *enp); 303299720Sarybchik 304299720Sarybchikextern void 305299720Sarybchikef10_mcdi_send_request( 306310934Sarybchik __in efx_nic_t *enp, 307310934Sarybchik __in_bcount(hdr_len) void *hdrp, 308310934Sarybchik __in size_t hdr_len, 309310934Sarybchik __in_bcount(sdu_len) void *sdup, 310310934Sarybchik __in size_t sdu_len); 311299720Sarybchik 312299720Sarybchikextern __checkReturn boolean_t 313299720Sarybchikef10_mcdi_poll_response( 314299720Sarybchik __in efx_nic_t *enp); 315299720Sarybchik 316299720Sarybchikextern void 317299720Sarybchikef10_mcdi_read_response( 318299720Sarybchik __in efx_nic_t *enp, 319299720Sarybchik __out_bcount(length) void *bufferp, 320299720Sarybchik __in size_t offset, 321299720Sarybchik __in size_t length); 322299720Sarybchik 323299720Sarybchikextern efx_rc_t 324299720Sarybchikef10_mcdi_poll_reboot( 325299720Sarybchik __in efx_nic_t *enp); 326299720Sarybchik 327299720Sarybchikextern __checkReturn efx_rc_t 328299720Sarybchikef10_mcdi_feature_supported( 329299720Sarybchik __in efx_nic_t *enp, 330299720Sarybchik __in efx_mcdi_feature_id_t id, 331299720Sarybchik __out boolean_t *supportedp); 332299720Sarybchik 333311486Sarybchikextern void 334311486Sarybchikef10_mcdi_get_timeout( 335311486Sarybchik __in efx_nic_t *enp, 336311486Sarybchik __in efx_mcdi_req_t *emrp, 337311486Sarybchik __out uint32_t *timeoutp); 338311486Sarybchik 339299720Sarybchik#endif /* EFSYS_OPT_MCDI */ 340299720Sarybchik 341299720Sarybchik/* NVRAM */ 342299720Sarybchik 343299720Sarybchik#if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD 344299720Sarybchik 345299720Sarybchikextern __checkReturn efx_rc_t 346299720Sarybchikef10_nvram_buf_read_tlv( 347299720Sarybchik __in efx_nic_t *enp, 348299720Sarybchik __in_bcount(max_seg_size) caddr_t seg_data, 349299720Sarybchik __in size_t max_seg_size, 350299720Sarybchik __in uint32_t tag, 351299720Sarybchik __deref_out_bcount_opt(*sizep) caddr_t *datap, 352299720Sarybchik __out size_t *sizep); 353299720Sarybchik 354299720Sarybchikextern __checkReturn efx_rc_t 355299720Sarybchikef10_nvram_buf_write_tlv( 356299720Sarybchik __inout_bcount(partn_size) caddr_t partn_data, 357299720Sarybchik __in size_t partn_size, 358299720Sarybchik __in uint32_t tag, 359299720Sarybchik __in_bcount(tag_size) caddr_t tag_data, 360299720Sarybchik __in size_t tag_size, 361299720Sarybchik __out size_t *total_lengthp); 362299720Sarybchik 363299720Sarybchikextern __checkReturn efx_rc_t 364299720Sarybchikef10_nvram_partn_read_tlv( 365299720Sarybchik __in efx_nic_t *enp, 366299720Sarybchik __in uint32_t partn, 367299720Sarybchik __in uint32_t tag, 368299720Sarybchik __deref_out_bcount_opt(*sizep) caddr_t *datap, 369299720Sarybchik __out size_t *sizep); 370299720Sarybchik 371299720Sarybchikextern __checkReturn efx_rc_t 372299720Sarybchikef10_nvram_partn_write_tlv( 373299720Sarybchik __in efx_nic_t *enp, 374299720Sarybchik __in uint32_t partn, 375299720Sarybchik __in uint32_t tag, 376299720Sarybchik __in_bcount(size) caddr_t data, 377299720Sarybchik __in size_t size); 378299720Sarybchik 379299720Sarybchikextern __checkReturn efx_rc_t 380299720Sarybchikef10_nvram_partn_write_segment_tlv( 381299720Sarybchik __in efx_nic_t *enp, 382299720Sarybchik __in uint32_t partn, 383299720Sarybchik __in uint32_t tag, 384299720Sarybchik __in_bcount(size) caddr_t data, 385299720Sarybchik __in size_t size, 386299720Sarybchik __in boolean_t all_segments); 387299720Sarybchik 388299720Sarybchikextern __checkReturn efx_rc_t 389299720Sarybchikef10_nvram_partn_lock( 390299720Sarybchik __in efx_nic_t *enp, 391299720Sarybchik __in uint32_t partn); 392299720Sarybchik 393311481Sarybchikextern __checkReturn efx_rc_t 394299720Sarybchikef10_nvram_partn_unlock( 395299720Sarybchik __in efx_nic_t *enp, 396311488Sarybchik __in uint32_t partn, 397311488Sarybchik __out_opt uint32_t *resultp); 398299720Sarybchik 399299720Sarybchik#endif /* EFSYS_OPT_NVRAM || EFSYS_OPT_VPD */ 400299720Sarybchik 401299720Sarybchik#if EFSYS_OPT_NVRAM 402299720Sarybchik 403299720Sarybchik#if EFSYS_OPT_DIAG 404299720Sarybchik 405299720Sarybchikextern __checkReturn efx_rc_t 406299720Sarybchikef10_nvram_test( 407299720Sarybchik __in efx_nic_t *enp); 408299720Sarybchik 409299720Sarybchik#endif /* EFSYS_OPT_DIAG */ 410299720Sarybchik 411299720Sarybchikextern __checkReturn efx_rc_t 412299720Sarybchikef10_nvram_type_to_partn( 413299720Sarybchik __in efx_nic_t *enp, 414299720Sarybchik __in efx_nvram_type_t type, 415299720Sarybchik __out uint32_t *partnp); 416299720Sarybchik 417299720Sarybchikextern __checkReturn efx_rc_t 418299720Sarybchikef10_nvram_partn_size( 419299720Sarybchik __in efx_nic_t *enp, 420299720Sarybchik __in uint32_t partn, 421299720Sarybchik __out size_t *sizep); 422299720Sarybchik 423299720Sarybchikextern __checkReturn efx_rc_t 424299720Sarybchikef10_nvram_partn_rw_start( 425299720Sarybchik __in efx_nic_t *enp, 426299720Sarybchik __in uint32_t partn, 427299720Sarybchik __out size_t *chunk_sizep); 428299720Sarybchik 429299720Sarybchikextern __checkReturn efx_rc_t 430299720Sarybchikef10_nvram_partn_read_mode( 431299720Sarybchik __in efx_nic_t *enp, 432299720Sarybchik __in uint32_t partn, 433299720Sarybchik __in unsigned int offset, 434299720Sarybchik __out_bcount(size) caddr_t data, 435299720Sarybchik __in size_t size, 436299720Sarybchik __in uint32_t mode); 437299720Sarybchik 438299720Sarybchikextern __checkReturn efx_rc_t 439299720Sarybchikef10_nvram_partn_read( 440299720Sarybchik __in efx_nic_t *enp, 441299720Sarybchik __in uint32_t partn, 442299720Sarybchik __in unsigned int offset, 443342441Sarybchik __in_bcount(size) caddr_t data, 444299720Sarybchik __in size_t size); 445299720Sarybchik 446299720Sarybchikextern __checkReturn efx_rc_t 447299720Sarybchikef10_nvram_partn_erase( 448299720Sarybchik __in efx_nic_t *enp, 449299720Sarybchik __in uint32_t partn, 450299720Sarybchik __in unsigned int offset, 451299720Sarybchik __in size_t size); 452299720Sarybchik 453299720Sarybchikextern __checkReturn efx_rc_t 454299720Sarybchikef10_nvram_partn_write( 455299720Sarybchik __in efx_nic_t *enp, 456299720Sarybchik __in uint32_t partn, 457299720Sarybchik __in unsigned int offset, 458299720Sarybchik __out_bcount(size) caddr_t data, 459299720Sarybchik __in size_t size); 460299720Sarybchik 461311481Sarybchikextern __checkReturn efx_rc_t 462299720Sarybchikef10_nvram_partn_rw_finish( 463299720Sarybchik __in efx_nic_t *enp, 464299720Sarybchik __in uint32_t partn); 465299720Sarybchik 466299720Sarybchikextern __checkReturn efx_rc_t 467299720Sarybchikef10_nvram_partn_get_version( 468299720Sarybchik __in efx_nic_t *enp, 469299720Sarybchik __in uint32_t partn, 470299720Sarybchik __out uint32_t *subtypep, 471299720Sarybchik __out_ecount(4) uint16_t version[4]); 472299720Sarybchik 473299720Sarybchikextern __checkReturn efx_rc_t 474299720Sarybchikef10_nvram_partn_set_version( 475299720Sarybchik __in efx_nic_t *enp, 476299720Sarybchik __in uint32_t partn, 477299720Sarybchik __in_ecount(4) uint16_t version[4]); 478299720Sarybchik 479299720Sarybchikextern __checkReturn efx_rc_t 480299720Sarybchikef10_nvram_buffer_validate( 481299720Sarybchik __in efx_nic_t *enp, 482299720Sarybchik __in uint32_t partn, 483299720Sarybchik __in_bcount(buffer_size) 484299720Sarybchik caddr_t bufferp, 485299720Sarybchik __in size_t buffer_size); 486299720Sarybchik 487299720Sarybchikextern __checkReturn efx_rc_t 488299720Sarybchikef10_nvram_buffer_create( 489299720Sarybchik __in efx_nic_t *enp, 490299720Sarybchik __in uint16_t partn_type, 491299720Sarybchik __in_bcount(buffer_size) 492299720Sarybchik caddr_t bufferp, 493299720Sarybchik __in size_t buffer_size); 494299720Sarybchik 495299720Sarybchikextern __checkReturn efx_rc_t 496299720Sarybchikef10_nvram_buffer_find_item_start( 497299720Sarybchik __in_bcount(buffer_size) 498299720Sarybchik caddr_t bufferp, 499299720Sarybchik __in size_t buffer_size, 500299720Sarybchik __out uint32_t *startp 501299720Sarybchik ); 502299720Sarybchik 503299720Sarybchikextern __checkReturn efx_rc_t 504299720Sarybchikef10_nvram_buffer_find_end( 505299720Sarybchik __in_bcount(buffer_size) 506299720Sarybchik caddr_t bufferp, 507299720Sarybchik __in size_t buffer_size, 508299720Sarybchik __in uint32_t offset, 509299720Sarybchik __out uint32_t *endp 510299720Sarybchik ); 511299720Sarybchik 512299720Sarybchikextern __checkReturn __success(return != B_FALSE) boolean_t 513299720Sarybchikef10_nvram_buffer_find_item( 514299720Sarybchik __in_bcount(buffer_size) 515299720Sarybchik caddr_t bufferp, 516299720Sarybchik __in size_t buffer_size, 517299720Sarybchik __in uint32_t offset, 518299720Sarybchik __out uint32_t *startp, 519299720Sarybchik __out uint32_t *lengthp 520299720Sarybchik ); 521299720Sarybchik 522299720Sarybchikextern __checkReturn efx_rc_t 523299720Sarybchikef10_nvram_buffer_get_item( 524299720Sarybchik __in_bcount(buffer_size) 525299720Sarybchik caddr_t bufferp, 526299720Sarybchik __in size_t buffer_size, 527299720Sarybchik __in uint32_t offset, 528299720Sarybchik __in uint32_t length, 529299720Sarybchik __out_bcount_part(item_max_size, *lengthp) 530299720Sarybchik caddr_t itemp, 531299720Sarybchik __in size_t item_max_size, 532299720Sarybchik __out uint32_t *lengthp 533299720Sarybchik ); 534299720Sarybchik 535299720Sarybchikextern __checkReturn efx_rc_t 536299720Sarybchikef10_nvram_buffer_insert_item( 537299720Sarybchik __in_bcount(buffer_size) 538299720Sarybchik caddr_t bufferp, 539299720Sarybchik __in size_t buffer_size, 540299720Sarybchik __in uint32_t offset, 541299720Sarybchik __in_bcount(length) caddr_t keyp, 542299720Sarybchik __in uint32_t length, 543299720Sarybchik __out uint32_t *lengthp 544299720Sarybchik ); 545299720Sarybchik 546299720Sarybchikextern __checkReturn efx_rc_t 547299720Sarybchikef10_nvram_buffer_delete_item( 548299720Sarybchik __in_bcount(buffer_size) 549299720Sarybchik caddr_t bufferp, 550299720Sarybchik __in size_t buffer_size, 551299720Sarybchik __in uint32_t offset, 552299720Sarybchik __in uint32_t length, 553299720Sarybchik __in uint32_t end 554299720Sarybchik ); 555299720Sarybchik 556299720Sarybchikextern __checkReturn efx_rc_t 557299720Sarybchikef10_nvram_buffer_finish( 558299720Sarybchik __in_bcount(buffer_size) 559299720Sarybchik caddr_t bufferp, 560299720Sarybchik __in size_t buffer_size 561299720Sarybchik ); 562299720Sarybchik 563299720Sarybchik#endif /* EFSYS_OPT_NVRAM */ 564299720Sarybchik 565299720Sarybchik 566299720Sarybchik/* PHY */ 567299720Sarybchik 568299720Sarybchiktypedef struct ef10_link_state_s { 569299720Sarybchik uint32_t els_adv_cap_mask; 570299720Sarybchik uint32_t els_lp_cap_mask; 571299720Sarybchik unsigned int els_fcntl; 572299720Sarybchik efx_link_mode_t els_link_mode; 573299720Sarybchik#if EFSYS_OPT_LOOPBACK 574299720Sarybchik efx_loopback_type_t els_loopback; 575299720Sarybchik#endif 576299720Sarybchik boolean_t els_mac_up; 577299720Sarybchik} ef10_link_state_t; 578299720Sarybchik 579299720Sarybchikextern void 580299720Sarybchikef10_phy_link_ev( 581299720Sarybchik __in efx_nic_t *enp, 582299720Sarybchik __in efx_qword_t *eqp, 583299720Sarybchik __out efx_link_mode_t *link_modep); 584299720Sarybchik 585299720Sarybchikextern __checkReturn efx_rc_t 586299720Sarybchikef10_phy_get_link( 587299720Sarybchik __in efx_nic_t *enp, 588299720Sarybchik __out ef10_link_state_t *elsp); 589299720Sarybchik 590299720Sarybchikextern __checkReturn efx_rc_t 591299720Sarybchikef10_phy_power( 592299720Sarybchik __in efx_nic_t *enp, 593299720Sarybchik __in boolean_t on); 594299720Sarybchik 595299720Sarybchikextern __checkReturn efx_rc_t 596299720Sarybchikef10_phy_reconfigure( 597299720Sarybchik __in efx_nic_t *enp); 598299720Sarybchik 599299720Sarybchikextern __checkReturn efx_rc_t 600299720Sarybchikef10_phy_verify( 601299720Sarybchik __in efx_nic_t *enp); 602299720Sarybchik 603299720Sarybchikextern __checkReturn efx_rc_t 604299720Sarybchikef10_phy_oui_get( 605299720Sarybchik __in efx_nic_t *enp, 606299720Sarybchik __out uint32_t *ouip); 607299720Sarybchik 608299720Sarybchik#if EFSYS_OPT_PHY_STATS 609299720Sarybchik 610299720Sarybchikextern __checkReturn efx_rc_t 611299720Sarybchikef10_phy_stats_update( 612299720Sarybchik __in efx_nic_t *enp, 613299720Sarybchik __in efsys_mem_t *esmp, 614299720Sarybchik __inout_ecount(EFX_PHY_NSTATS) uint32_t *stat); 615299720Sarybchik 616299720Sarybchik#endif /* EFSYS_OPT_PHY_STATS */ 617299720Sarybchik 618310944Sarybchik#if EFSYS_OPT_BIST 619299720Sarybchik 620310944Sarybchikextern __checkReturn efx_rc_t 621310944Sarybchikef10_bist_enable_offline( 622310944Sarybchik __in efx_nic_t *enp); 623310944Sarybchik 624310944Sarybchikextern __checkReturn efx_rc_t 625310944Sarybchikef10_bist_start( 626310944Sarybchik __in efx_nic_t *enp, 627310944Sarybchik __in efx_bist_type_t type); 628310944Sarybchik 629310944Sarybchikextern __checkReturn efx_rc_t 630310944Sarybchikef10_bist_poll( 631310944Sarybchik __in efx_nic_t *enp, 632310944Sarybchik __in efx_bist_type_t type, 633310944Sarybchik __out efx_bist_result_t *resultp, 634310944Sarybchik __out_opt __drv_when(count > 0, __notnull) 635310944Sarybchik uint32_t *value_maskp, 636310944Sarybchik __out_ecount_opt(count) __drv_when(count > 0, __notnull) 637310944Sarybchik unsigned long *valuesp, 638310944Sarybchik __in size_t count); 639310944Sarybchik 640310944Sarybchikextern void 641310944Sarybchikef10_bist_stop( 642310944Sarybchik __in efx_nic_t *enp, 643310944Sarybchik __in efx_bist_type_t type); 644310944Sarybchik 645310944Sarybchik#endif /* EFSYS_OPT_BIST */ 646310944Sarybchik 647299720Sarybchik/* TX */ 648299720Sarybchik 649299720Sarybchikextern __checkReturn efx_rc_t 650299720Sarybchikef10_tx_init( 651299720Sarybchik __in efx_nic_t *enp); 652299720Sarybchik 653299720Sarybchikextern void 654299720Sarybchikef10_tx_fini( 655299720Sarybchik __in efx_nic_t *enp); 656299720Sarybchik 657299720Sarybchikextern __checkReturn efx_rc_t 658299720Sarybchikef10_tx_qcreate( 659299720Sarybchik __in efx_nic_t *enp, 660299720Sarybchik __in unsigned int index, 661299720Sarybchik __in unsigned int label, 662299720Sarybchik __in efsys_mem_t *esmp, 663299720Sarybchik __in size_t n, 664299720Sarybchik __in uint32_t id, 665299720Sarybchik __in uint16_t flags, 666299720Sarybchik __in efx_evq_t *eep, 667299720Sarybchik __in efx_txq_t *etp, 668299720Sarybchik __out unsigned int *addedp); 669299720Sarybchik 670299720Sarybchikextern void 671299720Sarybchikef10_tx_qdestroy( 672299720Sarybchik __in efx_txq_t *etp); 673299720Sarybchik 674299720Sarybchikextern __checkReturn efx_rc_t 675299720Sarybchikef10_tx_qpost( 676299720Sarybchik __in efx_txq_t *etp, 677299720Sarybchik __in_ecount(n) efx_buffer_t *eb, 678299720Sarybchik __in unsigned int n, 679299720Sarybchik __in unsigned int completed, 680299720Sarybchik __inout unsigned int *addedp); 681299720Sarybchik 682299720Sarybchikextern void 683299720Sarybchikef10_tx_qpush( 684299720Sarybchik __in efx_txq_t *etp, 685299720Sarybchik __in unsigned int added, 686299720Sarybchik __in unsigned int pushed); 687299720Sarybchik 688299720Sarybchikextern __checkReturn efx_rc_t 689299720Sarybchikef10_tx_qpace( 690299720Sarybchik __in efx_txq_t *etp, 691299720Sarybchik __in unsigned int ns); 692299720Sarybchik 693299720Sarybchikextern __checkReturn efx_rc_t 694299720Sarybchikef10_tx_qflush( 695299720Sarybchik __in efx_txq_t *etp); 696299720Sarybchik 697299720Sarybchikextern void 698299720Sarybchikef10_tx_qenable( 699299720Sarybchik __in efx_txq_t *etp); 700299720Sarybchik 701299720Sarybchikextern __checkReturn efx_rc_t 702299720Sarybchikef10_tx_qpio_enable( 703299720Sarybchik __in efx_txq_t *etp); 704299720Sarybchik 705299720Sarybchikextern void 706299720Sarybchikef10_tx_qpio_disable( 707299720Sarybchik __in efx_txq_t *etp); 708299720Sarybchik 709299720Sarybchikextern __checkReturn efx_rc_t 710299720Sarybchikef10_tx_qpio_write( 711299720Sarybchik __in efx_txq_t *etp, 712299720Sarybchik __in_ecount(buf_length) uint8_t *buffer, 713299720Sarybchik __in size_t buf_length, 714299720Sarybchik __in size_t pio_buf_offset); 715299720Sarybchik 716299720Sarybchikextern __checkReturn efx_rc_t 717299720Sarybchikef10_tx_qpio_post( 718299720Sarybchik __in efx_txq_t *etp, 719299720Sarybchik __in size_t pkt_length, 720299720Sarybchik __in unsigned int completed, 721299720Sarybchik __inout unsigned int *addedp); 722299720Sarybchik 723299720Sarybchikextern __checkReturn efx_rc_t 724299720Sarybchikef10_tx_qdesc_post( 725299720Sarybchik __in efx_txq_t *etp, 726299720Sarybchik __in_ecount(n) efx_desc_t *ed, 727299720Sarybchik __in unsigned int n, 728299720Sarybchik __in unsigned int completed, 729299720Sarybchik __inout unsigned int *addedp); 730299720Sarybchik 731299720Sarybchikextern void 732299720Sarybchikef10_tx_qdesc_dma_create( 733299720Sarybchik __in efx_txq_t *etp, 734299720Sarybchik __in efsys_dma_addr_t addr, 735299720Sarybchik __in size_t size, 736299720Sarybchik __in boolean_t eop, 737299720Sarybchik __out efx_desc_t *edp); 738299720Sarybchik 739299720Sarybchikextern void 740299720Sarybchikef10_tx_qdesc_tso_create( 741299720Sarybchik __in efx_txq_t *etp, 742299720Sarybchik __in uint16_t ipv4_id, 743299720Sarybchik __in uint32_t tcp_seq, 744299720Sarybchik __in uint8_t tcp_flags, 745299720Sarybchik __out efx_desc_t *edp); 746299720Sarybchik 747299720Sarybchikextern void 748299720Sarybchikef10_tx_qdesc_tso2_create( 749299720Sarybchik __in efx_txq_t *etp, 750299720Sarybchik __in uint16_t ipv4_id, 751299720Sarybchik __in uint32_t tcp_seq, 752299720Sarybchik __in uint16_t tcp_mss, 753299720Sarybchik __out_ecount(count) efx_desc_t *edp, 754299720Sarybchik __in int count); 755299720Sarybchik 756299720Sarybchikextern void 757299720Sarybchikef10_tx_qdesc_vlantci_create( 758299720Sarybchik __in efx_txq_t *etp, 759299720Sarybchik __in uint16_t vlan_tci, 760299720Sarybchik __out efx_desc_t *edp); 761299720Sarybchik 762342438Sarybchikextern void 763342438Sarybchikef10_tx_qdesc_checksum_create( 764342438Sarybchik __in efx_txq_t *etp, 765342438Sarybchik __in uint16_t flags, 766342438Sarybchik __out efx_desc_t *edp); 767299720Sarybchik 768299720Sarybchik#if EFSYS_OPT_QSTATS 769299720Sarybchik 770299720Sarybchikextern void 771299720Sarybchikef10_tx_qstats_update( 772299720Sarybchik __in efx_txq_t *etp, 773299720Sarybchik __inout_ecount(TX_NQSTATS) efsys_stat_t *stat); 774299720Sarybchik 775299720Sarybchik#endif /* EFSYS_OPT_QSTATS */ 776299720Sarybchik 777299720Sarybchiktypedef uint32_t efx_piobuf_handle_t; 778299720Sarybchik 779299720Sarybchik#define EFX_PIOBUF_HANDLE_INVALID ((efx_piobuf_handle_t) -1) 780299720Sarybchik 781299720Sarybchikextern __checkReturn efx_rc_t 782299720Sarybchikef10_nic_pio_alloc( 783299720Sarybchik __inout efx_nic_t *enp, 784299720Sarybchik __out uint32_t *bufnump, 785299720Sarybchik __out efx_piobuf_handle_t *handlep, 786299720Sarybchik __out uint32_t *blknump, 787299720Sarybchik __out uint32_t *offsetp, 788299720Sarybchik __out size_t *sizep); 789299720Sarybchik 790299720Sarybchikextern __checkReturn efx_rc_t 791299720Sarybchikef10_nic_pio_free( 792299720Sarybchik __inout efx_nic_t *enp, 793299720Sarybchik __in uint32_t bufnum, 794299720Sarybchik __in uint32_t blknum); 795299720Sarybchik 796299720Sarybchikextern __checkReturn efx_rc_t 797299720Sarybchikef10_nic_pio_link( 798299720Sarybchik __inout efx_nic_t *enp, 799299720Sarybchik __in uint32_t vi_index, 800299720Sarybchik __in efx_piobuf_handle_t handle); 801299720Sarybchik 802299720Sarybchikextern __checkReturn efx_rc_t 803299720Sarybchikef10_nic_pio_unlink( 804299720Sarybchik __inout efx_nic_t *enp, 805299720Sarybchik __in uint32_t vi_index); 806299720Sarybchik 807299720Sarybchik 808299720Sarybchik/* VPD */ 809299720Sarybchik 810299720Sarybchik#if EFSYS_OPT_VPD 811299720Sarybchik 812299720Sarybchikextern __checkReturn efx_rc_t 813299720Sarybchikef10_vpd_init( 814299720Sarybchik __in efx_nic_t *enp); 815299720Sarybchik 816299720Sarybchikextern __checkReturn efx_rc_t 817299720Sarybchikef10_vpd_size( 818299720Sarybchik __in efx_nic_t *enp, 819299720Sarybchik __out size_t *sizep); 820299720Sarybchik 821299720Sarybchikextern __checkReturn efx_rc_t 822299720Sarybchikef10_vpd_read( 823299720Sarybchik __in efx_nic_t *enp, 824299720Sarybchik __out_bcount(size) caddr_t data, 825299720Sarybchik __in size_t size); 826299720Sarybchik 827299720Sarybchikextern __checkReturn efx_rc_t 828299720Sarybchikef10_vpd_verify( 829299720Sarybchik __in efx_nic_t *enp, 830299720Sarybchik __in_bcount(size) caddr_t data, 831299720Sarybchik __in size_t size); 832299720Sarybchik 833299720Sarybchikextern __checkReturn efx_rc_t 834299720Sarybchikef10_vpd_reinit( 835299720Sarybchik __in efx_nic_t *enp, 836299720Sarybchik __in_bcount(size) caddr_t data, 837299720Sarybchik __in size_t size); 838299720Sarybchik 839299720Sarybchikextern __checkReturn efx_rc_t 840299720Sarybchikef10_vpd_get( 841299720Sarybchik __in efx_nic_t *enp, 842299720Sarybchik __in_bcount(size) caddr_t data, 843299720Sarybchik __in size_t size, 844299720Sarybchik __inout efx_vpd_value_t *evvp); 845299720Sarybchik 846299720Sarybchikextern __checkReturn efx_rc_t 847299720Sarybchikef10_vpd_set( 848299720Sarybchik __in efx_nic_t *enp, 849299720Sarybchik __in_bcount(size) caddr_t data, 850299720Sarybchik __in size_t size, 851299720Sarybchik __in efx_vpd_value_t *evvp); 852299720Sarybchik 853299720Sarybchikextern __checkReturn efx_rc_t 854299720Sarybchikef10_vpd_next( 855299720Sarybchik __in efx_nic_t *enp, 856299720Sarybchik __in_bcount(size) caddr_t data, 857299720Sarybchik __in size_t size, 858299720Sarybchik __out efx_vpd_value_t *evvp, 859299720Sarybchik __inout unsigned int *contp); 860299720Sarybchik 861299720Sarybchikextern __checkReturn efx_rc_t 862299720Sarybchikef10_vpd_write( 863299720Sarybchik __in efx_nic_t *enp, 864299720Sarybchik __in_bcount(size) caddr_t data, 865299720Sarybchik __in size_t size); 866299720Sarybchik 867299720Sarybchikextern void 868299720Sarybchikef10_vpd_fini( 869299720Sarybchik __in efx_nic_t *enp); 870299720Sarybchik 871299720Sarybchik#endif /* EFSYS_OPT_VPD */ 872299720Sarybchik 873299720Sarybchik 874299720Sarybchik/* RX */ 875299720Sarybchik 876299720Sarybchikextern __checkReturn efx_rc_t 877299720Sarybchikef10_rx_init( 878299720Sarybchik __in efx_nic_t *enp); 879299720Sarybchik 880299720Sarybchik#if EFSYS_OPT_RX_SCATTER 881299720Sarybchikextern __checkReturn efx_rc_t 882299720Sarybchikef10_rx_scatter_enable( 883299720Sarybchik __in efx_nic_t *enp, 884299720Sarybchik __in unsigned int buf_size); 885299720Sarybchik#endif /* EFSYS_OPT_RX_SCATTER */ 886299720Sarybchik 887299720Sarybchik 888299720Sarybchik#if EFSYS_OPT_RX_SCALE 889299720Sarybchik 890299720Sarybchikextern __checkReturn efx_rc_t 891299720Sarybchikef10_rx_scale_mode_set( 892299720Sarybchik __in efx_nic_t *enp, 893299720Sarybchik __in efx_rx_hash_alg_t alg, 894299720Sarybchik __in efx_rx_hash_type_t type, 895299720Sarybchik __in boolean_t insert); 896299720Sarybchik 897299720Sarybchikextern __checkReturn efx_rc_t 898299720Sarybchikef10_rx_scale_key_set( 899299720Sarybchik __in efx_nic_t *enp, 900299720Sarybchik __in_ecount(n) uint8_t *key, 901299720Sarybchik __in size_t n); 902299720Sarybchik 903299720Sarybchikextern __checkReturn efx_rc_t 904299720Sarybchikef10_rx_scale_tbl_set( 905299720Sarybchik __in efx_nic_t *enp, 906299720Sarybchik __in_ecount(n) unsigned int *table, 907299720Sarybchik __in size_t n); 908299720Sarybchik 909299720Sarybchikextern __checkReturn uint32_t 910299720Sarybchikef10_rx_prefix_hash( 911299720Sarybchik __in efx_nic_t *enp, 912299720Sarybchik __in efx_rx_hash_alg_t func, 913299720Sarybchik __in uint8_t *buffer); 914299720Sarybchik 915299720Sarybchik#endif /* EFSYS_OPT_RX_SCALE */ 916299720Sarybchik 917299720Sarybchikextern __checkReturn efx_rc_t 918299720Sarybchikef10_rx_prefix_pktlen( 919299720Sarybchik __in efx_nic_t *enp, 920299720Sarybchik __in uint8_t *buffer, 921299720Sarybchik __out uint16_t *lengthp); 922299720Sarybchik 923299720Sarybchikextern void 924299720Sarybchikef10_rx_qpost( 925299720Sarybchik __in efx_rxq_t *erp, 926299720Sarybchik __in_ecount(n) efsys_dma_addr_t *addrp, 927299720Sarybchik __in size_t size, 928299720Sarybchik __in unsigned int n, 929299720Sarybchik __in unsigned int completed, 930299720Sarybchik __in unsigned int added); 931299720Sarybchik 932299720Sarybchikextern void 933299720Sarybchikef10_rx_qpush( 934299720Sarybchik __in efx_rxq_t *erp, 935299720Sarybchik __in unsigned int added, 936299720Sarybchik __inout unsigned int *pushedp); 937299720Sarybchik 938299720Sarybchikextern __checkReturn efx_rc_t 939299720Sarybchikef10_rx_qflush( 940299720Sarybchik __in efx_rxq_t *erp); 941299720Sarybchik 942299720Sarybchikextern void 943299720Sarybchikef10_rx_qenable( 944299720Sarybchik __in efx_rxq_t *erp); 945299720Sarybchik 946299720Sarybchikextern __checkReturn efx_rc_t 947299720Sarybchikef10_rx_qcreate( 948299720Sarybchik __in efx_nic_t *enp, 949299720Sarybchik __in unsigned int index, 950299720Sarybchik __in unsigned int label, 951299720Sarybchik __in efx_rxq_type_t type, 952299720Sarybchik __in efsys_mem_t *esmp, 953299720Sarybchik __in size_t n, 954299720Sarybchik __in uint32_t id, 955299720Sarybchik __in efx_evq_t *eep, 956299720Sarybchik __in efx_rxq_t *erp); 957299720Sarybchik 958299720Sarybchikextern void 959299720Sarybchikef10_rx_qdestroy( 960299720Sarybchik __in efx_rxq_t *erp); 961299720Sarybchik 962299720Sarybchikextern void 963299720Sarybchikef10_rx_fini( 964299720Sarybchik __in efx_nic_t *enp); 965299720Sarybchik 966299720Sarybchik#if EFSYS_OPT_FILTER 967299720Sarybchik 968299720Sarybchiktypedef struct ef10_filter_handle_s { 969299720Sarybchik uint32_t efh_lo; 970299720Sarybchik uint32_t efh_hi; 971299720Sarybchik} ef10_filter_handle_t; 972299720Sarybchik 973299720Sarybchiktypedef struct ef10_filter_entry_s { 974299720Sarybchik uintptr_t efe_spec; /* pointer to filter spec plus busy bit */ 975299720Sarybchik ef10_filter_handle_t efe_handle; 976299720Sarybchik} ef10_filter_entry_t; 977299720Sarybchik 978299720Sarybchik/* 979299720Sarybchik * BUSY flag indicates that an update is in progress. 980299720Sarybchik * AUTO_OLD flag is used to mark and sweep MAC packet filters. 981299720Sarybchik */ 982299720Sarybchik#define EFX_EF10_FILTER_FLAG_BUSY 1U 983299720Sarybchik#define EFX_EF10_FILTER_FLAG_AUTO_OLD 2U 984299720Sarybchik#define EFX_EF10_FILTER_FLAGS 3U 985299720Sarybchik 986299720Sarybchik/* 987299720Sarybchik * Size of the hash table used by the driver. Doesn't need to be the 988299720Sarybchik * same size as the hardware's table. 989299720Sarybchik */ 990299720Sarybchik#define EFX_EF10_FILTER_TBL_ROWS 8192 991299720Sarybchik 992299720Sarybchik/* Only need to allow for one directed and one unknown unicast filter */ 993299720Sarybchik#define EFX_EF10_FILTER_UNICAST_FILTERS_MAX 2 994299720Sarybchik 995299720Sarybchik/* Allow for the broadcast address to be added to the multicast list */ 996299720Sarybchik#define EFX_EF10_FILTER_MULTICAST_FILTERS_MAX (EFX_MAC_MULTICAST_LIST_MAX + 1) 997299720Sarybchik 998342416Sarybchik/* 999342416Sarybchik * For encapsulated packets, there is one filter each for each combination of 1000342416Sarybchik * IPv4 or IPv6 outer frame, VXLAN, GENEVE or NVGRE packet type, and unicast or 1001342416Sarybchik * multicast inner frames. 1002342416Sarybchik */ 1003342416Sarybchik#define EFX_EF10_FILTER_ENCAP_FILTERS_MAX 12 1004342416Sarybchik 1005299720Sarybchiktypedef struct ef10_filter_table_s { 1006299720Sarybchik ef10_filter_entry_t eft_entry[EFX_EF10_FILTER_TBL_ROWS]; 1007310917Sarybchik efx_rxq_t *eft_default_rxq; 1008299720Sarybchik boolean_t eft_using_rss; 1009299720Sarybchik uint32_t eft_unicst_filter_indexes[ 1010299720Sarybchik EFX_EF10_FILTER_UNICAST_FILTERS_MAX]; 1011310938Sarybchik uint32_t eft_unicst_filter_count; 1012299720Sarybchik uint32_t eft_mulcst_filter_indexes[ 1013299720Sarybchik EFX_EF10_FILTER_MULTICAST_FILTERS_MAX]; 1014299720Sarybchik uint32_t eft_mulcst_filter_count; 1015299720Sarybchik boolean_t eft_using_all_mulcst; 1016342416Sarybchik uint32_t eft_encap_filter_indexes[ 1017342416Sarybchik EFX_EF10_FILTER_ENCAP_FILTERS_MAX]; 1018342416Sarybchik uint32_t eft_encap_filter_count; 1019299720Sarybchik} ef10_filter_table_t; 1020299720Sarybchik 1021299720Sarybchik __checkReturn efx_rc_t 1022299720Sarybchikef10_filter_init( 1023299720Sarybchik __in efx_nic_t *enp); 1024299720Sarybchik 1025299720Sarybchik void 1026299720Sarybchikef10_filter_fini( 1027299720Sarybchik __in efx_nic_t *enp); 1028299720Sarybchik 1029299720Sarybchik __checkReturn efx_rc_t 1030299720Sarybchikef10_filter_restore( 1031299720Sarybchik __in efx_nic_t *enp); 1032299720Sarybchik 1033299720Sarybchik __checkReturn efx_rc_t 1034299720Sarybchikef10_filter_add( 1035299720Sarybchik __in efx_nic_t *enp, 1036299720Sarybchik __inout efx_filter_spec_t *spec, 1037299720Sarybchik __in boolean_t may_replace); 1038299720Sarybchik 1039299720Sarybchik __checkReturn efx_rc_t 1040299720Sarybchikef10_filter_delete( 1041299720Sarybchik __in efx_nic_t *enp, 1042299720Sarybchik __inout efx_filter_spec_t *spec); 1043299720Sarybchik 1044299720Sarybchikextern __checkReturn efx_rc_t 1045299720Sarybchikef10_filter_supported_filters( 1046311485Sarybchik __in efx_nic_t *enp, 1047311485Sarybchik __out_ecount(buffer_length) uint32_t *buffer, 1048311485Sarybchik __in size_t buffer_length, 1049311485Sarybchik __out size_t *list_lengthp); 1050299720Sarybchik 1051299720Sarybchikextern __checkReturn efx_rc_t 1052299720Sarybchikef10_filter_reconfigure( 1053299720Sarybchik __in efx_nic_t *enp, 1054299720Sarybchik __in_ecount(6) uint8_t const *mac_addr, 1055299720Sarybchik __in boolean_t all_unicst, 1056299720Sarybchik __in boolean_t mulcst, 1057299720Sarybchik __in boolean_t all_mulcst, 1058299720Sarybchik __in boolean_t brdcst, 1059299720Sarybchik __in_ecount(6*count) uint8_t const *addrs, 1060299720Sarybchik __in uint32_t count); 1061299720Sarybchik 1062299720Sarybchikextern void 1063299720Sarybchikef10_filter_get_default_rxq( 1064299720Sarybchik __in efx_nic_t *enp, 1065299720Sarybchik __out efx_rxq_t **erpp, 1066299720Sarybchik __out boolean_t *using_rss); 1067299720Sarybchik 1068299720Sarybchikextern void 1069299720Sarybchikef10_filter_default_rxq_set( 1070299720Sarybchik __in efx_nic_t *enp, 1071299720Sarybchik __in efx_rxq_t *erp, 1072299720Sarybchik __in boolean_t using_rss); 1073299720Sarybchik 1074299720Sarybchikextern void 1075299720Sarybchikef10_filter_default_rxq_clear( 1076299720Sarybchik __in efx_nic_t *enp); 1077299720Sarybchik 1078299720Sarybchik 1079299720Sarybchik#endif /* EFSYS_OPT_FILTER */ 1080299720Sarybchik 1081299720Sarybchikextern __checkReturn efx_rc_t 1082299720Sarybchikefx_mcdi_get_function_info( 1083299720Sarybchik __in efx_nic_t *enp, 1084299720Sarybchik __out uint32_t *pfp, 1085299720Sarybchik __out_opt uint32_t *vfp); 1086299720Sarybchik 1087299720Sarybchikextern __checkReturn efx_rc_t 1088299720Sarybchikefx_mcdi_privilege_mask( 1089299720Sarybchik __in efx_nic_t *enp, 1090299720Sarybchik __in uint32_t pf, 1091299720Sarybchik __in uint32_t vf, 1092299720Sarybchik __out uint32_t *maskp); 1093299720Sarybchik 1094299720Sarybchikextern __checkReturn efx_rc_t 1095293887Sarybchikefx_mcdi_get_port_assignment( 1096293887Sarybchik __in efx_nic_t *enp, 1097293887Sarybchik __out uint32_t *portp); 1098293734Sarybchik 1099293887Sarybchikextern __checkReturn efx_rc_t 1100293887Sarybchikefx_mcdi_get_port_modes( 1101293887Sarybchik __in efx_nic_t *enp, 1102299904Sarybchik __out uint32_t *modesp, 1103299904Sarybchik __out_opt uint32_t *current_modep); 1104293734Sarybchik 1105293887Sarybchikextern __checkReturn efx_rc_t 1106299904Sarybchikef10_nic_get_port_mode_bandwidth( 1107299904Sarybchik __in uint32_t port_mode, 1108299904Sarybchik __out uint32_t *bandwidth_mbpsp); 1109299904Sarybchik 1110299904Sarybchikextern __checkReturn efx_rc_t 1111293887Sarybchikefx_mcdi_get_mac_address_pf( 1112293887Sarybchik __in efx_nic_t *enp, 1113293887Sarybchik __out_ecount_opt(6) uint8_t mac_addrp[6]); 1114293887Sarybchik 1115293887Sarybchikextern __checkReturn efx_rc_t 1116293887Sarybchikefx_mcdi_get_mac_address_vf( 1117293887Sarybchik __in efx_nic_t *enp, 1118293887Sarybchik __out_ecount_opt(6) uint8_t mac_addrp[6]); 1119293887Sarybchik 1120293887Sarybchikextern __checkReturn efx_rc_t 1121293887Sarybchikefx_mcdi_get_clock( 1122293887Sarybchik __in efx_nic_t *enp, 1123300009Sarybchik __out uint32_t *sys_freqp, 1124300009Sarybchik __out uint32_t *dpcpu_freqp); 1125293887Sarybchik 1126300009Sarybchik 1127293887Sarybchikextern __checkReturn efx_rc_t 1128293887Sarybchikefx_mcdi_get_vector_cfg( 1129293887Sarybchik __in efx_nic_t *enp, 1130293887Sarybchik __out_opt uint32_t *vec_basep, 1131293887Sarybchik __out_opt uint32_t *pf_nvecp, 1132293887Sarybchik __out_opt uint32_t *vf_nvecp); 1133293887Sarybchik 1134293887Sarybchikextern __checkReturn efx_rc_t 1135293887Sarybchikef10_get_datapath_caps( 1136293887Sarybchik __in efx_nic_t *enp); 1137293887Sarybchik 1138294079Sarybchikextern __checkReturn efx_rc_t 1139294079Sarybchikef10_get_privilege_mask( 1140294079Sarybchik __in efx_nic_t *enp, 1141294079Sarybchik __out uint32_t *maskp); 1142294079Sarybchik 1143293887Sarybchikextern __checkReturn efx_rc_t 1144293887Sarybchikef10_external_port_mapping( 1145293887Sarybchik __in efx_nic_t *enp, 1146293887Sarybchik __in uint32_t port, 1147293887Sarybchik __out uint8_t *external_portp); 1148293887Sarybchik 1149293887Sarybchik 1150293734Sarybchik#ifdef __cplusplus 1151293734Sarybchik} 1152293734Sarybchik#endif 1153293734Sarybchik 1154293734Sarybchik#endif /* _SYS_EF10_IMPL_H */ 1155