13c1c5cc4SAndrew Rybchenko /* SPDX-License-Identifier: BSD-3-Clause 23c1c5cc4SAndrew Rybchenko * 3672386c1SAndrew Rybchenko * Copyright(c) 2019-2021 Xilinx, Inc. 43c1c5cc4SAndrew Rybchenko * Copyright(c) 2018-2019 Solarflare Communications Inc. 53c1c5cc4SAndrew Rybchenko */ 63c1c5cc4SAndrew Rybchenko 73c1c5cc4SAndrew Rybchenko #ifndef _SYS_RHEAD_IMPL_H 83c1c5cc4SAndrew Rybchenko #define _SYS_RHEAD_IMPL_H 93c1c5cc4SAndrew Rybchenko 103c1c5cc4SAndrew Rybchenko #ifdef __cplusplus 113c1c5cc4SAndrew Rybchenko extern "C" { 123c1c5cc4SAndrew Rybchenko #endif 133c1c5cc4SAndrew Rybchenko 143c1c5cc4SAndrew Rybchenko 15b97bf1caSAndrew Rybchenko /* 16b97bf1caSAndrew Rybchenko * Riverhead requires physically contiguous event rings (so, just one 17b97bf1caSAndrew Rybchenko * DMA address is sufficient to represent it), but MCDI interface is still 18b97bf1caSAndrew Rybchenko * in terms of 4k size 4k-aligned DMA buffers. 19b97bf1caSAndrew Rybchenko */ 20b97bf1caSAndrew Rybchenko #define RHEAD_EVQ_MAXNBUFS 32 21b97bf1caSAndrew Rybchenko 223c1c5cc4SAndrew Rybchenko #define RHEAD_EVQ_MAXNEVS 16384 233c1c5cc4SAndrew Rybchenko #define RHEAD_EVQ_MINNEVS 256 243c1c5cc4SAndrew Rybchenko 253c1c5cc4SAndrew Rybchenko #define RHEAD_RXQ_MAXNDESCS 16384 263c1c5cc4SAndrew Rybchenko #define RHEAD_RXQ_MINNDESCS 256 273c1c5cc4SAndrew Rybchenko 283c1c5cc4SAndrew Rybchenko #define RHEAD_TXQ_MAXNDESCS 16384 293c1c5cc4SAndrew Rybchenko #define RHEAD_TXQ_MINNDESCS 256 303c1c5cc4SAndrew Rybchenko 313c1c5cc4SAndrew Rybchenko #define RHEAD_EVQ_DESC_SIZE (sizeof (efx_qword_t)) 323c1c5cc4SAndrew Rybchenko #define RHEAD_RXQ_DESC_SIZE (sizeof (efx_qword_t)) 333c1c5cc4SAndrew Rybchenko #define RHEAD_TXQ_DESC_SIZE (sizeof (efx_oword_t)) 343c1c5cc4SAndrew Rybchenko 35f8a60f76SAndy Moreton #if EFSYS_OPT_EV_EXTENDED_WIDTH 36f8a60f76SAndy Moreton #define RHEAD_EVQ_EW_DESC_SIZE (sizeof (efx_xword_t)) 37f8a60f76SAndy Moreton #endif 38f8a60f76SAndy Moreton 393c1c5cc4SAndrew Rybchenko 403c1c5cc4SAndrew Rybchenko /* NIC */ 413c1c5cc4SAndrew Rybchenko 423c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 433c1c5cc4SAndrew Rybchenko extern __checkReturn efx_rc_t 443c1c5cc4SAndrew Rybchenko rhead_board_cfg( 453c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp); 463c1c5cc4SAndrew Rybchenko 473c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 483c1c5cc4SAndrew Rybchenko extern __checkReturn efx_rc_t 493c1c5cc4SAndrew Rybchenko rhead_nic_probe( 503c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp); 513c1c5cc4SAndrew Rybchenko 523c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 533c1c5cc4SAndrew Rybchenko extern __checkReturn efx_rc_t 543c1c5cc4SAndrew Rybchenko rhead_nic_set_drv_limits( 553c1c5cc4SAndrew Rybchenko __inout efx_nic_t *enp, 563c1c5cc4SAndrew Rybchenko __in efx_drv_limits_t *edlp); 573c1c5cc4SAndrew Rybchenko 583c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 593c1c5cc4SAndrew Rybchenko extern __checkReturn efx_rc_t 603c1c5cc4SAndrew Rybchenko rhead_nic_get_vi_pool( 613c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp, 623c1c5cc4SAndrew Rybchenko __out uint32_t *vi_countp); 633c1c5cc4SAndrew Rybchenko 643c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 653c1c5cc4SAndrew Rybchenko extern __checkReturn efx_rc_t 663c1c5cc4SAndrew Rybchenko rhead_nic_get_bar_region( 673c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp, 683c1c5cc4SAndrew Rybchenko __in efx_nic_region_t region, 693c1c5cc4SAndrew Rybchenko __out uint32_t *offsetp, 703c1c5cc4SAndrew Rybchenko __out size_t *sizep); 713c1c5cc4SAndrew Rybchenko 723c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 733c1c5cc4SAndrew Rybchenko extern __checkReturn efx_rc_t 743c1c5cc4SAndrew Rybchenko rhead_nic_reset( 753c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp); 763c1c5cc4SAndrew Rybchenko 773c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 783c1c5cc4SAndrew Rybchenko extern __checkReturn efx_rc_t 793c1c5cc4SAndrew Rybchenko rhead_nic_init( 803c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp); 813c1c5cc4SAndrew Rybchenko 823c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 833c1c5cc4SAndrew Rybchenko extern __checkReturn boolean_t 843c1c5cc4SAndrew Rybchenko rhead_nic_hw_unavailable( 853c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp); 863c1c5cc4SAndrew Rybchenko 873c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 883c1c5cc4SAndrew Rybchenko extern void 893c1c5cc4SAndrew Rybchenko rhead_nic_set_hw_unavailable( 903c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp); 913c1c5cc4SAndrew Rybchenko 923c1c5cc4SAndrew Rybchenko #if EFSYS_OPT_DIAG 933c1c5cc4SAndrew Rybchenko 943c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 953c1c5cc4SAndrew Rybchenko extern __checkReturn efx_rc_t 963c1c5cc4SAndrew Rybchenko rhead_nic_register_test( 973c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp); 983c1c5cc4SAndrew Rybchenko 993c1c5cc4SAndrew Rybchenko #endif /* EFSYS_OPT_DIAG */ 1003c1c5cc4SAndrew Rybchenko 1013c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 1023c1c5cc4SAndrew Rybchenko extern void 1033c1c5cc4SAndrew Rybchenko rhead_nic_fini( 1043c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp); 1053c1c5cc4SAndrew Rybchenko 1063c1c5cc4SAndrew Rybchenko LIBEFX_INTERNAL 1073c1c5cc4SAndrew Rybchenko extern void 1083c1c5cc4SAndrew Rybchenko rhead_nic_unprobe( 1093c1c5cc4SAndrew Rybchenko __in efx_nic_t *enp); 1103c1c5cc4SAndrew Rybchenko 1113c1c5cc4SAndrew Rybchenko 112b97bf1caSAndrew Rybchenko /* EV */ 113b97bf1caSAndrew Rybchenko 114b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL 115b97bf1caSAndrew Rybchenko extern __checkReturn efx_rc_t 116b97bf1caSAndrew Rybchenko rhead_ev_init( 117b97bf1caSAndrew Rybchenko __in efx_nic_t *enp); 118b97bf1caSAndrew Rybchenko 119b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL 120b97bf1caSAndrew Rybchenko extern void 121b97bf1caSAndrew Rybchenko rhead_ev_fini( 122b97bf1caSAndrew Rybchenko __in efx_nic_t *enp); 123b97bf1caSAndrew Rybchenko 124b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL 125b97bf1caSAndrew Rybchenko extern __checkReturn efx_rc_t 126b97bf1caSAndrew Rybchenko rhead_ev_qcreate( 127b97bf1caSAndrew Rybchenko __in efx_nic_t *enp, 128b97bf1caSAndrew Rybchenko __in unsigned int index, 129b97bf1caSAndrew Rybchenko __in efsys_mem_t *esmp, 130b97bf1caSAndrew Rybchenko __in size_t ndescs, 131b97bf1caSAndrew Rybchenko __in uint32_t id, 132b97bf1caSAndrew Rybchenko __in uint32_t us, 133b97bf1caSAndrew Rybchenko __in uint32_t flags, 134aa6dc101SAndrew Rybchenko __in uint32_t irq, 135b97bf1caSAndrew Rybchenko __in efx_evq_t *eep); 136b97bf1caSAndrew Rybchenko 137b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL 138b97bf1caSAndrew Rybchenko extern void 139b97bf1caSAndrew Rybchenko rhead_ev_qdestroy( 140b97bf1caSAndrew Rybchenko __in efx_evq_t *eep); 141b97bf1caSAndrew Rybchenko 142b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL 143b97bf1caSAndrew Rybchenko extern __checkReturn efx_rc_t 144b97bf1caSAndrew Rybchenko rhead_ev_qprime( 145b97bf1caSAndrew Rybchenko __in efx_evq_t *eep, 146b97bf1caSAndrew Rybchenko __in unsigned int count); 147b97bf1caSAndrew Rybchenko 148b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL 149b97bf1caSAndrew Rybchenko extern void 150b97bf1caSAndrew Rybchenko rhead_ev_qpost( 151b97bf1caSAndrew Rybchenko __in efx_evq_t *eep, 152b97bf1caSAndrew Rybchenko __in uint16_t data); 153b97bf1caSAndrew Rybchenko 154b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL 155b97bf1caSAndrew Rybchenko extern void 156b97bf1caSAndrew Rybchenko rhead_ev_qpoll( 157b97bf1caSAndrew Rybchenko __in efx_evq_t *eep, 158b97bf1caSAndrew Rybchenko __inout unsigned int *countp, 159b97bf1caSAndrew Rybchenko __in const efx_ev_callbacks_t *eecp, 160b97bf1caSAndrew Rybchenko __in_opt void *arg); 161b97bf1caSAndrew Rybchenko 162b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL 163b97bf1caSAndrew Rybchenko extern __checkReturn efx_rc_t 164b97bf1caSAndrew Rybchenko rhead_ev_qmoderate( 165b97bf1caSAndrew Rybchenko __in efx_evq_t *eep, 166b97bf1caSAndrew Rybchenko __in unsigned int us); 167b97bf1caSAndrew Rybchenko 168b97bf1caSAndrew Rybchenko #if EFSYS_OPT_QSTATS 169b97bf1caSAndrew Rybchenko 170b97bf1caSAndrew Rybchenko LIBEFX_INTERNAL 171b97bf1caSAndrew Rybchenko extern void 172b97bf1caSAndrew Rybchenko rhead_ev_qstats_update( 173b97bf1caSAndrew Rybchenko __in efx_evq_t *eep, 174b97bf1caSAndrew Rybchenko __inout_ecount(EV_NQSTATS) efsys_stat_t *stat); 175b97bf1caSAndrew Rybchenko 176b97bf1caSAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */ 177b97bf1caSAndrew Rybchenko 178b97bf1caSAndrew Rybchenko 17990ff7b9bSAndrew Rybchenko /* INTR */ 18090ff7b9bSAndrew Rybchenko 18190ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL 18290ff7b9bSAndrew Rybchenko extern __checkReturn efx_rc_t 18390ff7b9bSAndrew Rybchenko rhead_intr_init( 18490ff7b9bSAndrew Rybchenko __in efx_nic_t *enp, 18590ff7b9bSAndrew Rybchenko __in efx_intr_type_t type, 18690ff7b9bSAndrew Rybchenko __in efsys_mem_t *esmp); 18790ff7b9bSAndrew Rybchenko 18890ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL 18990ff7b9bSAndrew Rybchenko extern void 19090ff7b9bSAndrew Rybchenko rhead_intr_enable( 19190ff7b9bSAndrew Rybchenko __in efx_nic_t *enp); 19290ff7b9bSAndrew Rybchenko 19390ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL 19490ff7b9bSAndrew Rybchenko extern void 19590ff7b9bSAndrew Rybchenko rhead_intr_disable( 19690ff7b9bSAndrew Rybchenko __in efx_nic_t *enp); 19790ff7b9bSAndrew Rybchenko 19890ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL 19990ff7b9bSAndrew Rybchenko extern void 20090ff7b9bSAndrew Rybchenko rhead_intr_disable_unlocked( 20190ff7b9bSAndrew Rybchenko __in efx_nic_t *enp); 20290ff7b9bSAndrew Rybchenko 20390ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL 20490ff7b9bSAndrew Rybchenko extern __checkReturn efx_rc_t 20590ff7b9bSAndrew Rybchenko rhead_intr_trigger( 20690ff7b9bSAndrew Rybchenko __in efx_nic_t *enp, 20790ff7b9bSAndrew Rybchenko __in unsigned int level); 20890ff7b9bSAndrew Rybchenko 20990ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL 21090ff7b9bSAndrew Rybchenko extern void 21190ff7b9bSAndrew Rybchenko rhead_intr_status_line( 21290ff7b9bSAndrew Rybchenko __in efx_nic_t *enp, 21390ff7b9bSAndrew Rybchenko __out boolean_t *fatalp, 21490ff7b9bSAndrew Rybchenko __out uint32_t *qmaskp); 21590ff7b9bSAndrew Rybchenko 21690ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL 21790ff7b9bSAndrew Rybchenko extern void 21890ff7b9bSAndrew Rybchenko rhead_intr_status_message( 21990ff7b9bSAndrew Rybchenko __in efx_nic_t *enp, 22090ff7b9bSAndrew Rybchenko __in unsigned int message, 22190ff7b9bSAndrew Rybchenko __out boolean_t *fatalp); 22290ff7b9bSAndrew Rybchenko 22390ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL 22490ff7b9bSAndrew Rybchenko extern void 22590ff7b9bSAndrew Rybchenko rhead_intr_fatal( 22690ff7b9bSAndrew Rybchenko __in efx_nic_t *enp); 22790ff7b9bSAndrew Rybchenko 22890ff7b9bSAndrew Rybchenko LIBEFX_INTERNAL 22990ff7b9bSAndrew Rybchenko extern void 23090ff7b9bSAndrew Rybchenko rhead_intr_fini( 23190ff7b9bSAndrew Rybchenko __in efx_nic_t *enp); 23290ff7b9bSAndrew Rybchenko 23390ff7b9bSAndrew Rybchenko 234b6b29352SAndrew Rybchenko /* RX */ 235b6b29352SAndrew Rybchenko 236b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 237b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 238b6b29352SAndrew Rybchenko rhead_rx_init( 239b6b29352SAndrew Rybchenko __in efx_nic_t *enp); 240b6b29352SAndrew Rybchenko 241b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 242b6b29352SAndrew Rybchenko extern void 243b6b29352SAndrew Rybchenko rhead_rx_fini( 244b6b29352SAndrew Rybchenko __in efx_nic_t *enp); 245b6b29352SAndrew Rybchenko 246b6b29352SAndrew Rybchenko #if EFSYS_OPT_RX_SCATTER 247b6b29352SAndrew Rybchenko 248b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 249b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 250b6b29352SAndrew Rybchenko rhead_rx_scatter_enable( 251b6b29352SAndrew Rybchenko __in efx_nic_t *enp, 252b6b29352SAndrew Rybchenko __in unsigned int buf_size); 253b6b29352SAndrew Rybchenko 254b6b29352SAndrew Rybchenko #endif /* EFSYS_OPT_RX_SCATTER */ 255b6b29352SAndrew Rybchenko 256b6b29352SAndrew Rybchenko #if EFSYS_OPT_RX_SCALE 257b6b29352SAndrew Rybchenko 258b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 259b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 260b6b29352SAndrew Rybchenko rhead_rx_scale_context_alloc( 261b6b29352SAndrew Rybchenko __in efx_nic_t *enp, 262b6b29352SAndrew Rybchenko __in efx_rx_scale_context_type_t type, 263b6b29352SAndrew Rybchenko __in uint32_t num_queues, 264*e7ea5f30SIvan Malov __in uint32_t table_nentries, 265b6b29352SAndrew Rybchenko __out uint32_t *rss_contextp); 266b6b29352SAndrew Rybchenko 267b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 268b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 269b6b29352SAndrew Rybchenko rhead_rx_scale_context_free( 270b6b29352SAndrew Rybchenko __in efx_nic_t *enp, 271b6b29352SAndrew Rybchenko __in uint32_t rss_context); 272b6b29352SAndrew Rybchenko 273b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 274b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 275b6b29352SAndrew Rybchenko rhead_rx_scale_mode_set( 276b6b29352SAndrew Rybchenko __in efx_nic_t *enp, 277b6b29352SAndrew Rybchenko __in uint32_t rss_context, 278b6b29352SAndrew Rybchenko __in efx_rx_hash_alg_t alg, 279b6b29352SAndrew Rybchenko __in efx_rx_hash_type_t type, 280b6b29352SAndrew Rybchenko __in boolean_t insert); 281b6b29352SAndrew Rybchenko 282b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 283b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 284b6b29352SAndrew Rybchenko rhead_rx_scale_key_set( 285b6b29352SAndrew Rybchenko __in efx_nic_t *enp, 286b6b29352SAndrew Rybchenko __in uint32_t rss_context, 287b6b29352SAndrew Rybchenko __in_ecount(n) uint8_t *key, 288b6b29352SAndrew Rybchenko __in size_t n); 289b6b29352SAndrew Rybchenko 290b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 291b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 292b6b29352SAndrew Rybchenko rhead_rx_scale_tbl_set( 293b6b29352SAndrew Rybchenko __in efx_nic_t *enp, 294b6b29352SAndrew Rybchenko __in uint32_t rss_context, 2957a71c15dSIvan Malov __in_ecount(nentries) unsigned int *table, 2967a71c15dSIvan Malov __in size_t nentries); 297b6b29352SAndrew Rybchenko 298b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 299b6b29352SAndrew Rybchenko extern __checkReturn uint32_t 300b6b29352SAndrew Rybchenko rhead_rx_prefix_hash( 301b6b29352SAndrew Rybchenko __in efx_nic_t *enp, 302b6b29352SAndrew Rybchenko __in efx_rx_hash_alg_t func, 303b6b29352SAndrew Rybchenko __in uint8_t *buffer); 304b6b29352SAndrew Rybchenko 305b6b29352SAndrew Rybchenko #endif /* EFSYS_OPT_RX_SCALE */ 306b6b29352SAndrew Rybchenko 307b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 308b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 309b6b29352SAndrew Rybchenko rhead_rx_prefix_pktlen( 310b6b29352SAndrew Rybchenko __in efx_nic_t *enp, 311b6b29352SAndrew Rybchenko __in uint8_t *buffer, 312b6b29352SAndrew Rybchenko __out uint16_t *lengthp); 313b6b29352SAndrew Rybchenko 314b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 315b6b29352SAndrew Rybchenko extern void 316b6b29352SAndrew Rybchenko rhead_rx_qpost( 317b6b29352SAndrew Rybchenko __in efx_rxq_t *erp, 318b6b29352SAndrew Rybchenko __in_ecount(ndescs) efsys_dma_addr_t *addrp, 319b6b29352SAndrew Rybchenko __in size_t size, 320b6b29352SAndrew Rybchenko __in unsigned int ndescs, 321b6b29352SAndrew Rybchenko __in unsigned int completed, 322b6b29352SAndrew Rybchenko __in unsigned int added); 323b6b29352SAndrew Rybchenko 324b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 325b6b29352SAndrew Rybchenko extern void 326b6b29352SAndrew Rybchenko rhead_rx_qpush( 327b6b29352SAndrew Rybchenko __in efx_rxq_t *erp, 328b6b29352SAndrew Rybchenko __in unsigned int added, 329b6b29352SAndrew Rybchenko __inout unsigned int *pushedp); 330b6b29352SAndrew Rybchenko 331b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 332b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 333b6b29352SAndrew Rybchenko rhead_rx_qflush( 334b6b29352SAndrew Rybchenko __in efx_rxq_t *erp); 335b6b29352SAndrew Rybchenko 336b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 337b6b29352SAndrew Rybchenko extern void 338b6b29352SAndrew Rybchenko rhead_rx_qenable( 339b6b29352SAndrew Rybchenko __in efx_rxq_t *erp); 340b6b29352SAndrew Rybchenko 341b6b29352SAndrew Rybchenko union efx_rxq_type_data_u; 342b6b29352SAndrew Rybchenko 343b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 344b6b29352SAndrew Rybchenko extern __checkReturn efx_rc_t 345b6b29352SAndrew Rybchenko rhead_rx_qcreate( 346b6b29352SAndrew Rybchenko __in efx_nic_t *enp, 347b6b29352SAndrew Rybchenko __in unsigned int index, 348b6b29352SAndrew Rybchenko __in unsigned int label, 349b6b29352SAndrew Rybchenko __in efx_rxq_type_t type, 350b6b29352SAndrew Rybchenko __in const union efx_rxq_type_data_u *type_data, 351b6b29352SAndrew Rybchenko __in efsys_mem_t *esmp, 352b6b29352SAndrew Rybchenko __in size_t ndescs, 353b6b29352SAndrew Rybchenko __in uint32_t id, 354b6b29352SAndrew Rybchenko __in unsigned int flags, 355b6b29352SAndrew Rybchenko __in efx_evq_t *eep, 356b6b29352SAndrew Rybchenko __in efx_rxq_t *erp); 357b6b29352SAndrew Rybchenko 358b6b29352SAndrew Rybchenko LIBEFX_INTERNAL 359b6b29352SAndrew Rybchenko extern void 360b6b29352SAndrew Rybchenko rhead_rx_qdestroy( 361b6b29352SAndrew Rybchenko __in efx_rxq_t *erp); 362b6b29352SAndrew Rybchenko 363b6b29352SAndrew Rybchenko 3644fd0181fSAndrew Rybchenko /* TX */ 3654fd0181fSAndrew Rybchenko 3664fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 3674fd0181fSAndrew Rybchenko extern __checkReturn efx_rc_t 3684fd0181fSAndrew Rybchenko rhead_tx_init( 3694fd0181fSAndrew Rybchenko __in efx_nic_t *enp); 3704fd0181fSAndrew Rybchenko 3714fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 3724fd0181fSAndrew Rybchenko extern void 3734fd0181fSAndrew Rybchenko rhead_tx_fini( 3744fd0181fSAndrew Rybchenko __in efx_nic_t *enp); 3754fd0181fSAndrew Rybchenko 3764fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 3774fd0181fSAndrew Rybchenko extern __checkReturn efx_rc_t 3784fd0181fSAndrew Rybchenko rhead_tx_qcreate( 3794fd0181fSAndrew Rybchenko __in efx_nic_t *enp, 3804fd0181fSAndrew Rybchenko __in unsigned int index, 3814fd0181fSAndrew Rybchenko __in unsigned int label, 3824fd0181fSAndrew Rybchenko __in efsys_mem_t *esmp, 3834fd0181fSAndrew Rybchenko __in size_t ndescs, 3844fd0181fSAndrew Rybchenko __in uint32_t id, 3854fd0181fSAndrew Rybchenko __in uint16_t flags, 3864fd0181fSAndrew Rybchenko __in efx_evq_t *eep, 3874fd0181fSAndrew Rybchenko __in efx_txq_t *etp, 3884fd0181fSAndrew Rybchenko __out unsigned int *addedp); 3894fd0181fSAndrew Rybchenko 3904fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 3914fd0181fSAndrew Rybchenko extern void 3924fd0181fSAndrew Rybchenko rhead_tx_qdestroy( 3934fd0181fSAndrew Rybchenko __in efx_txq_t *etp); 3944fd0181fSAndrew Rybchenko 3954fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 3964fd0181fSAndrew Rybchenko extern __checkReturn efx_rc_t 3974fd0181fSAndrew Rybchenko rhead_tx_qpost( 3984fd0181fSAndrew Rybchenko __in efx_txq_t *etp, 3994fd0181fSAndrew Rybchenko __in_ecount(ndescs) efx_buffer_t *ebp, 4004fd0181fSAndrew Rybchenko __in unsigned int ndescs, 4014fd0181fSAndrew Rybchenko __in unsigned int completed, 4024fd0181fSAndrew Rybchenko __inout unsigned int *addedp); 4034fd0181fSAndrew Rybchenko 4044fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 4054fd0181fSAndrew Rybchenko extern void 4064fd0181fSAndrew Rybchenko rhead_tx_qpush( 4074fd0181fSAndrew Rybchenko __in efx_txq_t *etp, 4084fd0181fSAndrew Rybchenko __in unsigned int added, 4094fd0181fSAndrew Rybchenko __in unsigned int pushed); 4104fd0181fSAndrew Rybchenko 4114fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 4124fd0181fSAndrew Rybchenko extern __checkReturn efx_rc_t 4134fd0181fSAndrew Rybchenko rhead_tx_qpace( 4144fd0181fSAndrew Rybchenko __in efx_txq_t *etp, 4154fd0181fSAndrew Rybchenko __in unsigned int ns); 4164fd0181fSAndrew Rybchenko 4174fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 4184fd0181fSAndrew Rybchenko extern __checkReturn efx_rc_t 4194fd0181fSAndrew Rybchenko rhead_tx_qflush( 4204fd0181fSAndrew Rybchenko __in efx_txq_t *etp); 4214fd0181fSAndrew Rybchenko 4224fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 4234fd0181fSAndrew Rybchenko extern void 4244fd0181fSAndrew Rybchenko rhead_tx_qenable( 4254fd0181fSAndrew Rybchenko __in efx_txq_t *etp); 4264fd0181fSAndrew Rybchenko 4274fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 4284fd0181fSAndrew Rybchenko extern __checkReturn efx_rc_t 4294fd0181fSAndrew Rybchenko rhead_tx_qdesc_post( 4304fd0181fSAndrew Rybchenko __in efx_txq_t *etp, 4314fd0181fSAndrew Rybchenko __in_ecount(n) efx_desc_t *ed, 4324fd0181fSAndrew Rybchenko __in unsigned int n, 4334fd0181fSAndrew Rybchenko __in unsigned int completed, 4344fd0181fSAndrew Rybchenko __inout unsigned int *addedp); 4354fd0181fSAndrew Rybchenko 4364fd0181fSAndrew Rybchenko #if EFSYS_OPT_QSTATS 4374fd0181fSAndrew Rybchenko 4384fd0181fSAndrew Rybchenko LIBEFX_INTERNAL 4394fd0181fSAndrew Rybchenko extern void 4404fd0181fSAndrew Rybchenko rhead_tx_qstats_update( 4414fd0181fSAndrew Rybchenko __in efx_txq_t *etp, 4424fd0181fSAndrew Rybchenko __inout_ecount(TX_NQSTATS) efsys_stat_t *stat); 4434fd0181fSAndrew Rybchenko 4444fd0181fSAndrew Rybchenko #endif /* EFSYS_OPT_QSTATS */ 4454fd0181fSAndrew Rybchenko 446d874d2a1SIgor Romanov #if EFSYS_OPT_TUNNEL 447d874d2a1SIgor Romanov 448d874d2a1SIgor Romanov LIBEFX_INTERNAL 449d874d2a1SIgor Romanov extern __checkReturn efx_rc_t 450d874d2a1SIgor Romanov rhead_tunnel_reconfigure( 451d874d2a1SIgor Romanov __in efx_nic_t *enp); 452d874d2a1SIgor Romanov 453d874d2a1SIgor Romanov LIBEFX_INTERNAL 454d874d2a1SIgor Romanov extern void 455d874d2a1SIgor Romanov rhead_tunnel_fini( 456d874d2a1SIgor Romanov __in efx_nic_t *enp); 457d874d2a1SIgor Romanov 458d874d2a1SIgor Romanov #endif /* EFSYS_OPT_TUNNEL */ 459d874d2a1SIgor Romanov 460a45edfceSIgor Romanov #if EFSYS_OPT_PCI 461a45edfceSIgor Romanov 462a45edfceSIgor Romanov /* 463a45edfceSIgor Romanov * Perform discovery of function control window by looking for a 464a45edfceSIgor Romanov * EF100 locator in Xilinx capabilities tables. 465a45edfceSIgor Romanov */ 466a45edfceSIgor Romanov LIBEFX_INTERNAL 467a45edfceSIgor Romanov extern __checkReturn efx_rc_t 468a45edfceSIgor Romanov rhead_pci_nic_membar_lookup( 469a45edfceSIgor Romanov __in efsys_pci_config_t *espcp, 47007999984SIgor Romanov __in const efx_pci_ops_t *epop, 471a45edfceSIgor Romanov __out efx_bar_region_t *ebrp); 472a45edfceSIgor Romanov 473a45edfceSIgor Romanov #endif /* EFSYS_OPT_PCI */ 4744fd0181fSAndrew Rybchenko 475ba9568b8SIgor Romanov LIBEFX_INTERNAL 476ba9568b8SIgor Romanov extern __checkReturn efx_rc_t 477ba9568b8SIgor Romanov rhead_nic_xilinx_cap_tbl_read_ef100_locator( 478ba9568b8SIgor Romanov __in efsys_bar_t *esbp, 479ba9568b8SIgor Romanov __in efsys_dma_addr_t offset, 480ba9568b8SIgor Romanov __out efx_bar_region_t *ebrp); 481ba9568b8SIgor Romanov 4824dda72dbSVijay Srivastava #if EFSYS_OPT_VIRTIO 4834dda72dbSVijay Srivastava 4844dda72dbSVijay Srivastava LIBEFX_INTERNAL 4854dda72dbSVijay Srivastava extern __checkReturn efx_rc_t 4864dda72dbSVijay Srivastava rhead_virtio_qstart( 4874dda72dbSVijay Srivastava __in efx_virtio_vq_t *evvp, 4884dda72dbSVijay Srivastava __in efx_virtio_vq_cfg_t *evvcp, 4894dda72dbSVijay Srivastava __in_opt efx_virtio_vq_dyncfg_t *evvdp); 4904dda72dbSVijay Srivastava 4914dda72dbSVijay Srivastava LIBEFX_INTERNAL 4924dda72dbSVijay Srivastava extern __checkReturn efx_rc_t 4934dda72dbSVijay Srivastava rhead_virtio_qstop( 4944dda72dbSVijay Srivastava __in efx_virtio_vq_t *evvp, 4954dda72dbSVijay Srivastava __out_opt efx_virtio_vq_dyncfg_t *evvdp); 4964dda72dbSVijay Srivastava 497ec03ce69SVijay Srivastava LIBEFX_INTERNAL 498ec03ce69SVijay Srivastava extern __checkReturn efx_rc_t 499ec03ce69SVijay Srivastava rhead_virtio_get_doorbell_offset( 500ec03ce69SVijay Srivastava __in efx_virtio_vq_t *evvp, 501ec03ce69SVijay Srivastava __out uint32_t *offsetp); 502ec03ce69SVijay Srivastava 50346d2b38bSVijay Kumar Srivastava LIBEFX_INTERNAL 50446d2b38bSVijay Kumar Srivastava extern __checkReturn efx_rc_t 50546d2b38bSVijay Kumar Srivastava rhead_virtio_get_features( 50646d2b38bSVijay Kumar Srivastava __in efx_nic_t *enp, 50746d2b38bSVijay Kumar Srivastava __in efx_virtio_device_type_t type, 50846d2b38bSVijay Kumar Srivastava __out uint64_t *featuresp); 50946d2b38bSVijay Kumar Srivastava 510b8a896abSVijay Kumar Srivastava LIBEFX_INTERNAL 511b8a896abSVijay Kumar Srivastava extern __checkReturn efx_rc_t 512b8a896abSVijay Kumar Srivastava rhead_virtio_verify_features( 513b8a896abSVijay Kumar Srivastava __in efx_nic_t *enp, 514b8a896abSVijay Kumar Srivastava __in efx_virtio_device_type_t type, 515b8a896abSVijay Kumar Srivastava __in uint64_t features); 516b8a896abSVijay Kumar Srivastava 5174dda72dbSVijay Srivastava #endif /* EFSYS_OPT_VIRTIO */ 5184dda72dbSVijay Srivastava 5193c1c5cc4SAndrew Rybchenko #ifdef __cplusplus 5203c1c5cc4SAndrew Rybchenko } 5213c1c5cc4SAndrew Rybchenko #endif 5223c1c5cc4SAndrew Rybchenko 5233c1c5cc4SAndrew Rybchenko #endif /* _SYS_RHEAD_IMPL_H */ 524