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