144961713Sgirish /* 244961713Sgirish * CDDL HEADER START 344961713Sgirish * 444961713Sgirish * The contents of this file are subject to the terms of the 544961713Sgirish * Common Development and Distribution License (the "License"). 644961713Sgirish * You may not use this file except in compliance with the License. 744961713Sgirish * 844961713Sgirish * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 944961713Sgirish * or http://www.opensolaris.org/os/licensing. 1044961713Sgirish * See the License for the specific language governing permissions 1144961713Sgirish * and limitations under the License. 1244961713Sgirish * 1344961713Sgirish * When distributing Covered Code, include this CDDL HEADER in each 1444961713Sgirish * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1544961713Sgirish * If applicable, add the following below this CDDL HEADER, with the 1644961713Sgirish * fields enclosed by brackets "[]" replaced with your own identifying 1744961713Sgirish * information: Portions Copyright [yyyy] [name of copyright owner] 1844961713Sgirish * 1944961713Sgirish * CDDL HEADER END 2044961713Sgirish */ 213587e8e2SMichael Speer 2244961713Sgirish /* 23*0dc2366fSVenugopal Iyer * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 2444961713Sgirish * Use is subject to license terms. 2544961713Sgirish */ 2644961713Sgirish 2744961713Sgirish #ifndef _SYS_NXGE_NXGE_RXDMA_H 2844961713Sgirish #define _SYS_NXGE_NXGE_RXDMA_H 2944961713Sgirish 3044961713Sgirish #ifdef __cplusplus 3144961713Sgirish extern "C" { 3244961713Sgirish #endif 3344961713Sgirish 3444961713Sgirish #include <sys/nxge/nxge_rxdma_hw.h> 3544961713Sgirish #include <npi_rxdma.h> 3644961713Sgirish 3744961713Sgirish #define RXDMA_CK_DIV_DEFAULT 7500 /* 25 usec */ 3844961713Sgirish /* 3944961713Sgirish * Hardware RDC designer: 8 cache lines during Atlas bringup. 4044961713Sgirish */ 4144961713Sgirish #define RXDMA_RED_LESS_BYTES (8 * 64) /* 8 cache line */ 4244961713Sgirish #define RXDMA_RED_LESS_ENTRIES (RXDMA_RED_LESS_BYTES/8) 4344961713Sgirish #define RXDMA_RED_WINDOW_DEFAULT 0 4444961713Sgirish #define RXDMA_RED_THRES_DEFAULT 0 4544961713Sgirish 4644961713Sgirish #define RXDMA_RCR_PTHRES_DEFAULT 0x20 4744961713Sgirish #define RXDMA_RCR_TO_DEFAULT 0x8 4844961713Sgirish 4944961713Sgirish /* 5044961713Sgirish * hardware workarounds: kick 16 (was 8 before) 5144961713Sgirish */ 5244961713Sgirish #define NXGE_RXDMA_POST_BATCH 16 5344961713Sgirish 5444961713Sgirish #define RXBUF_START_ADDR(a, index, bsize) ((a & (index * bsize)) 5544961713Sgirish #define RXBUF_OFFSET_FROM_START(a, start) (start - a) 5644961713Sgirish #define RXBUF_64B_ALIGNED 64 5744961713Sgirish 5844961713Sgirish #define NXGE_RXBUF_EXTRA 34 5944961713Sgirish /* 6044961713Sgirish * Receive buffer thresholds and buffer types 6144961713Sgirish */ 6244961713Sgirish #define NXGE_RX_BCOPY_SCALE 8 /* use 1/8 as lowest granularity */ 6344961713Sgirish typedef enum { 6444961713Sgirish NXGE_RX_COPY_ALL = 0, /* do bcopy on every packet */ 6544961713Sgirish NXGE_RX_COPY_1, /* bcopy on 1/8 of buffer posted */ 6644961713Sgirish NXGE_RX_COPY_2, /* bcopy on 2/8 of buffer posted */ 6744961713Sgirish NXGE_RX_COPY_3, /* bcopy on 3/8 of buffer posted */ 6844961713Sgirish NXGE_RX_COPY_4, /* bcopy on 4/8 of buffer posted */ 6944961713Sgirish NXGE_RX_COPY_5, /* bcopy on 5/8 of buffer posted */ 7044961713Sgirish NXGE_RX_COPY_6, /* bcopy on 6/8 of buffer posted */ 7144961713Sgirish NXGE_RX_COPY_7, /* bcopy on 7/8 of buffer posted */ 7244961713Sgirish NXGE_RX_COPY_NONE /* don't do bcopy at all */ 7344961713Sgirish } nxge_rxbuf_threshold_t; 7444961713Sgirish 7544961713Sgirish typedef enum { 7644961713Sgirish NXGE_RBR_TYPE0 = RCR_PKTBUFSZ_0, /* bcopy buffer size 0 (small) */ 7744961713Sgirish NXGE_RBR_TYPE1 = RCR_PKTBUFSZ_1, /* bcopy buffer size 1 (medium) */ 7844961713Sgirish NXGE_RBR_TYPE2 = RCR_PKTBUFSZ_2 /* bcopy buffer size 2 (large) */ 7944961713Sgirish } nxge_rxbuf_type_t; 8044961713Sgirish 8144961713Sgirish typedef struct _rdc_errlog { 8244961713Sgirish rdmc_par_err_log_t pre_par; 8344961713Sgirish rdmc_par_err_log_t sha_par; 8444961713Sgirish uint8_t compl_err_type; 8544961713Sgirish } rdc_errlog_t; 8644961713Sgirish 8744961713Sgirish /* 8844961713Sgirish * Receive Statistics. 8944961713Sgirish */ 9044961713Sgirish typedef struct _nxge_rx_ring_stats_t { 9144961713Sgirish uint64_t ipackets; 9244961713Sgirish uint64_t ibytes; 9344961713Sgirish uint32_t ierrors; 9444961713Sgirish uint32_t multircv; 9544961713Sgirish uint32_t brdcstrcv; 9644961713Sgirish uint32_t norcvbuf; 9744961713Sgirish 9844961713Sgirish uint32_t rx_inits; 9944961713Sgirish uint32_t rx_jumbo_pkts; 10044961713Sgirish uint32_t rx_multi_pkts; 10144961713Sgirish uint32_t rx_mtu_pkts; 10244961713Sgirish uint32_t rx_no_buf; 10344961713Sgirish 10444961713Sgirish /* 10544961713Sgirish * Receive buffer management statistics. 10644961713Sgirish */ 10744961713Sgirish uint32_t rx_new_pages; 10844961713Sgirish uint32_t rx_new_mtu_pgs; 10944961713Sgirish uint32_t rx_new_nxt_pgs; 11044961713Sgirish uint32_t rx_reused_pgs; 11144961713Sgirish uint32_t rx_mtu_drops; 11244961713Sgirish uint32_t rx_nxt_drops; 11344961713Sgirish 11444961713Sgirish /* 11544961713Sgirish * Error event stats. 11644961713Sgirish */ 11744961713Sgirish uint32_t rx_rbr_tmout; 1184202ea4bSsbehera uint32_t pkt_too_long_err; 11944961713Sgirish uint32_t l2_err; 12044961713Sgirish uint32_t l4_cksum_err; 12144961713Sgirish uint32_t fflp_soft_err; 12244961713Sgirish uint32_t zcp_soft_err; 12353f3d8ecSyc uint32_t rcr_unknown_err; 12444961713Sgirish uint32_t dcf_err; 12544961713Sgirish uint32_t rbr_tmout; 12644961713Sgirish uint32_t rsp_cnt_err; 12744961713Sgirish uint32_t byte_en_err; 12844961713Sgirish uint32_t byte_en_bus; 12944961713Sgirish uint32_t rsp_dat_err; 13044961713Sgirish uint32_t rcr_ack_err; 13144961713Sgirish uint32_t dc_fifo_err; 13244961713Sgirish uint32_t rcr_sha_par; 13344961713Sgirish uint32_t rbr_pre_par; 13444961713Sgirish uint32_t port_drop_pkt; 13544961713Sgirish uint32_t wred_drop; 13644961713Sgirish uint32_t rbr_pre_empty; 13744961713Sgirish uint32_t rcr_shadow_full; 13844961713Sgirish uint32_t config_err; 13944961713Sgirish uint32_t rcrincon; 14044961713Sgirish uint32_t rcrfull; 14144961713Sgirish uint32_t rbr_empty; 14244961713Sgirish uint32_t rbrfull; 14344961713Sgirish uint32_t rbrlogpage; 14444961713Sgirish uint32_t cfiglogpage; 14544961713Sgirish uint32_t rcrto; 14644961713Sgirish uint32_t rcrthres; 14744961713Sgirish uint32_t mex; 14844961713Sgirish rdc_errlog_t errlog; 14944961713Sgirish } nxge_rx_ring_stats_t, *p_nxge_rx_ring_stats_t; 15044961713Sgirish 15144961713Sgirish typedef struct _nxge_rdc_sys_stats { 15244961713Sgirish uint32_t pre_par; 15344961713Sgirish uint32_t sha_par; 15444961713Sgirish uint32_t id_mismatch; 15544961713Sgirish uint32_t ipp_eop_err; 15644961713Sgirish uint32_t zcp_eop_err; 15744961713Sgirish } nxge_rdc_sys_stats_t, *p_nxge_rdc_sys_stats_t; 15844961713Sgirish 159da14cebeSEric Cheng /* 160da14cebeSEric Cheng * Software reserved buffer offset 161da14cebeSEric Cheng */ 162da14cebeSEric Cheng typedef struct _nxge_rxbuf_off_hdr_t { 163da14cebeSEric Cheng uint32_t index; 164da14cebeSEric Cheng } nxge_rxbuf_off_hdr_t, *p_nxge_rxbuf_off_hdr_t; 165da14cebeSEric Cheng 16644961713Sgirish 16744961713Sgirish typedef struct _rx_msg_t { 16844961713Sgirish nxge_os_dma_common_t buf_dma; 16944961713Sgirish nxge_os_mutex_t lock; 17044961713Sgirish struct _nxge_t *nxgep; 17144961713Sgirish struct _rx_rbr_ring_t *rx_rbr_p; 17244961713Sgirish boolean_t spare_in_use; 17344961713Sgirish boolean_t free; 17444961713Sgirish uint32_t ref_cnt; 17544961713Sgirish #ifdef RXBUFF_USE_SEPARATE_UP_CNTR 17644961713Sgirish uint32_t pass_up_cnt; 17744961713Sgirish boolean_t release; 17844961713Sgirish #endif 17944961713Sgirish nxge_os_frtn_t freeb; 18044961713Sgirish size_t bytes_arrived; 18144961713Sgirish size_t bytes_expected; 18244961713Sgirish size_t block_size; 18344961713Sgirish uint32_t block_index; 18444961713Sgirish uint32_t pkt_buf_size; 18544961713Sgirish uint32_t pkt_buf_size_code; 18644961713Sgirish uint32_t max_pkt_bufs; 18744961713Sgirish uint32_t cur_usage_cnt; 18844961713Sgirish uint32_t max_usage_cnt; 18944961713Sgirish uchar_t *buffer; 19044961713Sgirish uint32_t pri; 19144961713Sgirish uint32_t shifted_addr; 19244961713Sgirish boolean_t use_buf_pool; 19344961713Sgirish p_mblk_t rx_mblk_p; 19444961713Sgirish boolean_t rx_use_bcopy; 19544961713Sgirish } rx_msg_t, *p_rx_msg_t; 19644961713Sgirish 19744961713Sgirish typedef struct _rx_dma_handle_t { 19844961713Sgirish nxge_os_dma_handle_t dma_handle; /* DMA handle */ 19944961713Sgirish nxge_os_acc_handle_t acc_handle; /* DMA memory handle */ 20044961713Sgirish npi_handle_t npi_handle; 20144961713Sgirish } rx_dma_handle_t, *p_rx_dma_handle_t; 20244961713Sgirish 20344961713Sgirish 20444961713Sgirish /* Receive Completion Ring */ 20544961713Sgirish typedef struct _rx_rcr_ring_t { 20644961713Sgirish nxge_os_dma_common_t rcr_desc; 20744961713Sgirish 20844961713Sgirish struct _nxge_t *nxgep; 20944961713Sgirish 21044961713Sgirish p_nxge_rx_ring_stats_t rdc_stats; 21144961713Sgirish 212*0dc2366fSVenugopal Iyer boolean_t poll_flag; /* B_TRUE, if polling mode */ 213678453a8Sspeer 21444961713Sgirish rcrcfig_a_t rcr_cfga; 21544961713Sgirish rcrcfig_b_t rcr_cfgb; 21644961713Sgirish 21744961713Sgirish nxge_os_mutex_t lock; 21844961713Sgirish uint16_t index; 21944961713Sgirish uint16_t rdc; 22044961713Sgirish boolean_t full_hdr_flag; /* 1: 18 bytes header */ 22144961713Sgirish uint16_t sw_priv_hdr_len; /* 0 - 192 bytes (SW) */ 22244961713Sgirish uint32_t comp_size; /* # of RCR entries */ 22344961713Sgirish uint64_t rcr_addr; 22444961713Sgirish uint_t comp_wrap_mask; 22544961713Sgirish uint_t comp_rd_index; 22644961713Sgirish uint_t comp_wt_index; 22744961713Sgirish 22844961713Sgirish p_rcr_entry_t rcr_desc_first_p; 22944961713Sgirish p_rcr_entry_t rcr_desc_first_pp; 23044961713Sgirish p_rcr_entry_t rcr_desc_last_p; 23144961713Sgirish p_rcr_entry_t rcr_desc_last_pp; 23244961713Sgirish 23344961713Sgirish p_rcr_entry_t rcr_desc_rd_head_p; /* software next read */ 23444961713Sgirish p_rcr_entry_t rcr_desc_rd_head_pp; 23544961713Sgirish 23644961713Sgirish uint64_t rcr_tail_pp; 23744961713Sgirish uint64_t rcr_head_pp; 23844961713Sgirish struct _rx_rbr_ring_t *rx_rbr_p; 23914ea4bb7Ssd uint32_t intr_timeout; 24014ea4bb7Ssd uint32_t intr_threshold; 24144961713Sgirish uint64_t max_receive_pkts; 242da14cebeSEric Cheng mac_ring_handle_t rcr_mac_handle; 243da14cebeSEric Cheng uint64_t rcr_gen_num; 244a3c5bd6dSspeer uint32_t rcvd_pkt_bytes; /* Received bytes of a packet */ 245da14cebeSEric Cheng p_nxge_ldv_t ldvp; 246da14cebeSEric Cheng p_nxge_ldg_t ldgp; 247*0dc2366fSVenugopal Iyer boolean_t started; 24844961713Sgirish } rx_rcr_ring_t, *p_rx_rcr_ring_t; 24944961713Sgirish 25044961713Sgirish 25144961713Sgirish 25244961713Sgirish /* Buffer index information */ 25344961713Sgirish typedef struct _rxbuf_index_info_t { 25444961713Sgirish uint32_t buf_index; 25544961713Sgirish uint32_t start_index; 25644961713Sgirish uint32_t buf_size; 25744961713Sgirish uint64_t dvma_addr; 25844961713Sgirish uint64_t kaddr; 25944961713Sgirish } rxbuf_index_info_t, *p_rxbuf_index_info_t; 26044961713Sgirish 261290b5530SMichael Speer /* 262290b5530SMichael Speer * Buffer index information 263290b5530SMichael Speer */ 26444961713Sgirish typedef struct _rxring_info_t { 265290b5530SMichael Speer uint32_t hint[RCR_N_PKTBUF_SZ]; 26644961713Sgirish uint32_t block_size_mask; 26744961713Sgirish uint16_t max_iterations; 26844961713Sgirish rxbuf_index_info_t buffer[NXGE_DMA_BLOCK]; 26944961713Sgirish } rxring_info_t, *p_rxring_info_t; 27044961713Sgirish 27144961713Sgirish 272007969e0Stm typedef enum { 273007969e0Stm RBR_POSTING = 1, /* We may post rx buffers. */ 274007969e0Stm RBR_UNMAPPING, /* We are in the process of unmapping. */ 275007969e0Stm RBR_UNMAPPED /* The ring is unmapped. */ 276007969e0Stm } rbr_state_t; 277007969e0Stm 278007969e0Stm 27944961713Sgirish /* Receive Buffer Block Ring */ 28044961713Sgirish typedef struct _rx_rbr_ring_t { 28144961713Sgirish nxge_os_dma_common_t rbr_desc; 28244961713Sgirish p_rx_msg_t *rx_msg_ring; 28344961713Sgirish p_nxge_dma_common_t *dma_bufp; 28444961713Sgirish rbr_cfig_a_t rbr_cfga; 28544961713Sgirish rbr_cfig_b_t rbr_cfgb; 28644961713Sgirish rbr_kick_t rbr_kick; 28744961713Sgirish log_page_vld_t page_valid; 28844961713Sgirish log_page_mask_t page_mask_1; 28944961713Sgirish log_page_mask_t page_mask_2; 29044961713Sgirish log_page_value_t page_value_1; 29144961713Sgirish log_page_value_t page_value_2; 29244961713Sgirish log_page_relo_t page_reloc_1; 29344961713Sgirish log_page_relo_t page_reloc_2; 29444961713Sgirish log_page_hdl_t page_hdl; 29544961713Sgirish 29644961713Sgirish boolean_t cfg_set; 29744961713Sgirish 29844961713Sgirish nxge_os_mutex_t lock; 29944961713Sgirish nxge_os_mutex_t post_lock; 30044961713Sgirish uint16_t index; 30144961713Sgirish struct _nxge_t *nxgep; 30244961713Sgirish uint16_t rdc; 30344961713Sgirish uint16_t rdc_grp_id; 30444961713Sgirish uint_t rbr_max_size; 30544961713Sgirish uint64_t rbr_addr; 30644961713Sgirish uint_t rbr_wrap_mask; 30744961713Sgirish uint_t rbb_max; 30844961713Sgirish uint_t rbb_added; 30944961713Sgirish uint_t block_size; 31044961713Sgirish uint_t num_blocks; 31144961713Sgirish uint_t tnblocks; 31244961713Sgirish uint_t pkt_buf_size0; 31344961713Sgirish uint_t pkt_buf_size0_bytes; 31444961713Sgirish uint_t npi_pkt_buf_size0; 31544961713Sgirish uint_t pkt_buf_size1; 31644961713Sgirish uint_t pkt_buf_size1_bytes; 31744961713Sgirish uint_t npi_pkt_buf_size1; 31844961713Sgirish uint_t pkt_buf_size2; 31944961713Sgirish uint_t pkt_buf_size2_bytes; 32044961713Sgirish uint_t npi_pkt_buf_size2; 32144961713Sgirish 32244961713Sgirish uint32_t *rbr_desc_vp; 32344961713Sgirish 32444961713Sgirish p_rx_rcr_ring_t rx_rcr_p; 32544961713Sgirish 32644961713Sgirish uint_t rbr_wr_index; 32744961713Sgirish uint_t rbr_rd_index; 32844961713Sgirish 32944961713Sgirish rxring_info_t *ring_info; 33044961713Sgirish #if defined(sun4v) && defined(NIU_LP_WORKAROUND) 33144961713Sgirish uint64_t hv_rx_buf_base_ioaddr_pp; 33244961713Sgirish uint64_t hv_rx_buf_ioaddr_size; 33344961713Sgirish uint64_t hv_rx_cntl_base_ioaddr_pp; 33444961713Sgirish uint64_t hv_rx_cntl_ioaddr_size; 33544961713Sgirish boolean_t hv_set; 33644961713Sgirish #endif 33744961713Sgirish uint_t rbr_consumed; 33844961713Sgirish uint_t rbr_threshold_hi; 33944961713Sgirish uint_t rbr_threshold_lo; 34044961713Sgirish nxge_rxbuf_type_t rbr_bufsize_type; 34144961713Sgirish boolean_t rbr_use_bcopy; 342007969e0Stm 343007969e0Stm /* 344007969e0Stm * <rbr_ref_cnt> is a count of those receive buffers which 345007969e0Stm * have been loaned to the kernel. We will not free this 346007969e0Stm * ring until the reference count reaches zero (0). 347007969e0Stm */ 348007969e0Stm uint32_t rbr_ref_cnt; 349007969e0Stm rbr_state_t rbr_state; /* POSTING, etc */ 350678453a8Sspeer /* 351678453a8Sspeer * Receive buffer allocation types: 352678453a8Sspeer * ddi_dma_mem_alloc(), contig_mem_alloc(), kmem_alloc() 353678453a8Sspeer */ 354678453a8Sspeer buf_alloc_type_t rbr_alloc_type; 35544961713Sgirish } rx_rbr_ring_t, *p_rx_rbr_ring_t; 35644961713Sgirish 35744961713Sgirish /* Receive Mailbox */ 35844961713Sgirish typedef struct _rx_mbox_t { 35944961713Sgirish nxge_os_dma_common_t rx_mbox; 36044961713Sgirish rxdma_cfig1_t rx_cfg1; 36144961713Sgirish rxdma_cfig2_t rx_cfg2; 36244961713Sgirish uint64_t mbox_addr; 36344961713Sgirish boolean_t cfg_set; 36444961713Sgirish 36544961713Sgirish nxge_os_mutex_t lock; 36644961713Sgirish uint16_t index; 36744961713Sgirish struct _nxge_t *nxgep; 36844961713Sgirish uint16_t rdc; 36944961713Sgirish } rx_mbox_t, *p_rx_mbox_t; 37044961713Sgirish 37144961713Sgirish 37244961713Sgirish typedef struct _rx_rbr_rings_t { 37344961713Sgirish p_rx_rbr_ring_t *rbr_rings; 3746920a987SMisaki Miyashita uint32_t ndmas; 375da14cebeSEric Cheng boolean_t rxbuf_allocated; 37644961713Sgirish } rx_rbr_rings_t, *p_rx_rbr_rings_t; 37744961713Sgirish 37844961713Sgirish typedef struct _rx_rcr_rings_t { 37944961713Sgirish p_rx_rcr_ring_t *rcr_rings; 3806920a987SMisaki Miyashita uint32_t ndmas; 381da14cebeSEric Cheng boolean_t cntl_buf_allocated; 38244961713Sgirish } rx_rcr_rings_t, *p_rx_rcr_rings_t; 38344961713Sgirish 38444961713Sgirish typedef struct _rx_mbox_areas_t { 38544961713Sgirish p_rx_mbox_t *rxmbox_areas; 3866920a987SMisaki Miyashita uint32_t ndmas; 38744961713Sgirish boolean_t mbox_allocated; 38844961713Sgirish } rx_mbox_areas_t, *p_rx_mbox_areas_t; 38944961713Sgirish 39044961713Sgirish /* 39144961713Sgirish * Global register definitions per chip and they are initialized 39244961713Sgirish * using the function zero control registers. 39344961713Sgirish * . 39444961713Sgirish */ 39544961713Sgirish 39644961713Sgirish typedef struct _rxdma_globals { 39744961713Sgirish boolean_t mode32; 39844961713Sgirish uint16_t rxdma_ck_div_cnt; 39944961713Sgirish uint16_t rxdma_red_ran_init; 40044961713Sgirish uint32_t rxdma_eing_timeout; 40144961713Sgirish } rxdma_globals_t, *p_rxdma_globals; 40244961713Sgirish 40344961713Sgirish 40444961713Sgirish /* 40544961713Sgirish * Receive DMA Prototypes. 40644961713Sgirish */ 40744961713Sgirish nxge_status_t nxge_init_rxdma_channels(p_nxge_t); 40844961713Sgirish void nxge_uninit_rxdma_channels(p_nxge_t); 409678453a8Sspeer 410678453a8Sspeer nxge_status_t nxge_init_rxdma_channel(p_nxge_t, int); 411678453a8Sspeer void nxge_uninit_rxdma_channel(p_nxge_t, int); 412678453a8Sspeer 413678453a8Sspeer nxge_status_t nxge_init_rxdma_channel_rcrflush(p_nxge_t, uint8_t); 41444961713Sgirish nxge_status_t nxge_reset_rxdma_channel(p_nxge_t, uint16_t); 41544961713Sgirish nxge_status_t nxge_init_rxdma_channel_cntl_stat(p_nxge_t, 41644961713Sgirish uint16_t, p_rx_dma_ctl_stat_t); 41744961713Sgirish nxge_status_t nxge_enable_rxdma_channel(p_nxge_t, 41844961713Sgirish uint16_t, p_rx_rbr_ring_t, p_rx_rcr_ring_t, 41944961713Sgirish p_rx_mbox_t); 42044961713Sgirish nxge_status_t nxge_init_rxdma_channel_event_mask(p_nxge_t, 42144961713Sgirish uint16_t, p_rx_dma_ent_msk_t); 42244961713Sgirish 42344961713Sgirish nxge_status_t nxge_rxdma_hw_mode(p_nxge_t, boolean_t); 42444961713Sgirish void nxge_hw_start_rx(p_nxge_t); 42544961713Sgirish void nxge_fixup_rxdma_rings(p_nxge_t); 42644961713Sgirish nxge_status_t nxge_dump_rxdma_channel(p_nxge_t, uint8_t); 42744961713Sgirish 42844961713Sgirish void nxge_rxdma_fix_channel(p_nxge_t, uint16_t); 42944961713Sgirish 430da14cebeSEric Cheng mblk_t *nxge_rx_poll(void *, int); 431da14cebeSEric Cheng int nxge_enable_poll(void *); 432da14cebeSEric Cheng int nxge_disable_poll(void *); 433da14cebeSEric Cheng 43444961713Sgirish void nxge_rxdma_regs_dump_channels(p_nxge_t); 43544961713Sgirish nxge_status_t nxge_rxdma_handle_sys_errors(p_nxge_t); 43644961713Sgirish void nxge_rxdma_inject_err(p_nxge_t, uint32_t, uint8_t); 43744961713Sgirish 438678453a8Sspeer extern nxge_status_t nxge_alloc_rx_mem_pool(p_nxge_t); 439678453a8Sspeer extern nxge_status_t nxge_alloc_rxb(p_nxge_t nxgep, int channel); 440678453a8Sspeer extern void nxge_free_rxb(p_nxge_t nxgep, int channel); 44144961713Sgirish 442da14cebeSEric Cheng int nxge_get_rxring_index(p_nxge_t, int, int); 443da14cebeSEric Cheng 44444961713Sgirish #ifdef __cplusplus 44544961713Sgirish } 44644961713Sgirish #endif 44744961713Sgirish 44844961713Sgirish #endif /* _SYS_NXGE_NXGE_RXDMA_H */ 449