summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/nxge/npi/npi_rxdma.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/io/nxge/npi/npi_rxdma.h')
-rw-r--r--usr/src/uts/common/io/nxge/npi/npi_rxdma.h1335
1 files changed, 1335 insertions, 0 deletions
diff --git a/usr/src/uts/common/io/nxge/npi/npi_rxdma.h b/usr/src/uts/common/io/nxge/npi/npi_rxdma.h
new file mode 100644
index 0000000000..ebf96c94e9
--- /dev/null
+++ b/usr/src/uts/common/io/nxge/npi/npi_rxdma.h
@@ -0,0 +1,1335 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _NPI_RXDMA_H
+#define _NPI_RXDMA_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <npi.h>
+
+#include "nxge_defs.h"
+#include "nxge_hw.h"
+#include <nxge_rxdma_hw.h>
+
+/*
+ * Register offset (0x200 bytes for each channel) for receive ring registers.
+ */
+#define NXGE_RXDMA_OFFSET(x, v, channel) (x + \
+ (!v ? DMC_OFFSET(channel) : \
+ RDMC_PIOVADDR_OFFSET(channel)))
+
+
+#define REG_FZC_RDC_OFFSET(reg, rdc) (reg + RX_LOG_DMA_OFFSET(rdc))
+
+#define REG_RDC_TABLE_OFFSET(table) \
+ (RDC_TBL_REG + table * (NXGE_MAX_RDCS * 8))
+
+#define RXDMA_REG_READ64(handle, reg, channel, data_p) {\
+ NXGE_REG_RD64(handle, (NXGE_RXDMA_OFFSET(reg, handle.is_vraddr,\
+ channel)), (data_p))\
+}
+
+#define RXDMA_REG_READ32(handle, reg, channel) \
+ NXGE_NPI_PIO_READ32(handle, (NXGE_RXDMA_OFFSET(reg, handle.is_vraddr,\
+ channel)))
+
+
+#define RXDMA_REG_WRITE64(handle, reg, channel, data) {\
+ NXGE_REG_WR64(handle, (NXGE_RXDMA_OFFSET(reg, handle.is_vraddr,\
+ channel)), (data))\
+}
+
+/*
+ * RX NPI error codes
+ */
+#define RXDMA_ER_ST (RXDMA_BLK_ID << NPI_BLOCK_ID_SHIFT)
+#define RXDMA_ID_SHIFT(n) (n << NPI_PORT_CHAN_SHIFT)
+
+
+#define NPI_RXDMA_ERROR RXDMA_ER_ST
+
+#define NPI_RXDMA_SW_PARAM_ERROR (NPI_RXDMA_ERROR | 0x40)
+#define NPI_RXDMA_HW_ERROR (NPI_RXDMA_ERROR | 0x80)
+
+#define NPI_RXDMA_RDC_INVALID (NPI_RXDMA_ERROR | CHANNEL_INVALID)
+#define NPI_RXDMA_PAGE_INVALID (NPI_RXDMA_ERROR | LOGICAL_PAGE_INVALID)
+#define NPI_RXDMA_RESET_ERR (NPI_RXDMA_HW_ERROR | RESET_FAILED)
+#define NPI_RXDMA_DISABLE_ERR (NPI_RXDMA_HW_ERROR | 0x0000a)
+#define NPI_RXDMA_ENABLE_ERR (NPI_RXDMA_HW_ERROR | 0x0000b)
+#define NPI_RXDMA_FUNC_INVALID (NPI_RXDMA_SW_PARAM_ERROR | 0x0000a)
+#define NPI_RXDMA_BUFSZIE_INVALID (NPI_RXDMA_SW_PARAM_ERROR | 0x0000b)
+#define NPI_RXDMA_RBRSZIE_INVALID (NPI_RXDMA_SW_PARAM_ERROR | 0x0000c)
+#define NPI_RXDMA_RCRSZIE_INVALID (NPI_RXDMA_SW_PARAM_ERROR | 0x0000d)
+#define NPI_RXDMA_PORT_INVALID (NPI_RXDMA_ERROR | PORT_INVALID)
+#define NPI_RXDMA_TABLE_INVALID (NPI_RXDMA_ERROR | RDC_TAB_INVALID)
+
+#define NPI_RXDMA_CHANNEL_INVALID(n) (RXDMA_ID_SHIFT(n) | \
+ NPI_RXDMA_ERROR | CHANNEL_INVALID)
+#define NPI_RXDMA_OPCODE_INVALID(n) (RXDMA_ID_SHIFT(n) | \
+ NPI_RXDMA_ERROR | OPCODE_INVALID)
+
+
+#define NPI_RXDMA_ERROR_ENCODE(err, rdc) \
+ (RXDMA_ID_SHIFT(rdc) | RXDMA_ER_ST | err)
+
+
+#define RXDMA_CHANNEL_VALID(rdc) \
+ ((rdc < NXGE_MAX_RDCS))
+
+#define RXDMA_PORT_VALID(port) \
+ ((port < MAX_PORTS_PER_NXGE))
+
+#define RXDMA_TABLE_VALID(table) \
+ ((table < NXGE_MAX_RDC_GROUPS))
+
+
+#define RXDMA_PAGE_VALID(page) \
+ ((page == 0) || (page == 1))
+
+#define RXDMA_BUFF_OFFSET_VALID(offset) \
+ ((offset == SW_OFFSET_NO_OFFSET) || \
+ (offset == SW_OFFSET_64) || \
+ (offset == SW_OFFSET_128))
+
+
+#define RXDMA_RCR_TO_VALID(tov) ((tov) && (tov < 64))
+#define RXDMA_RCR_THRESH_VALID(thresh) ((thresh) && (thresh < 512))
+
+
+/*
+ * RXDMA NPI defined control types.
+ */
+typedef enum _rxdma_cs_cntl_e {
+ RXDMA_CS_CLEAR_ALL = 0x1,
+ RXDMA_MEX_SET = 0x2,
+ RXDMA_RCRTO_CLEAR = 0x8,
+ RXDMA_PT_DROP_PKT_CLEAR = 0x10,
+ RXDMA_WRED_DROP_CLEAR = 0x20,
+ RXDMA_RCR_SFULL_CLEAR = 0x40,
+ RXDMA_RCR_FULL_CLEAR = 0x80,
+ RXDMA_RBR_PRE_EMPTY_CLEAR = 0x100,
+ RXDMA_RBR_EMPTY_CLEAR = 0x200
+} rxdma_cs_cntl_t;
+
+/*
+ * RXDMA NPI defined event masks (mapped to the hardware defined masks).
+ */
+typedef enum _rxdma_ent_msk_cfg_e {
+ CFG_RXDMA_ENT_MSK_CFIGLOGPGE_MASK = RX_DMA_ENT_MSK_CFIGLOGPGE_MASK,
+ CFG_RXDMA_ENT_MSK_RBRLOGPGE_MASK = RX_DMA_ENT_MSK_RBRLOGPGE_MASK,
+ CFG_RXDMA_ENT_MSK_RBRFULL_MASK = RX_DMA_ENT_MSK_RBRFULL_MASK,
+ CFG_RXDMA_ENT_MSK_RBREMPTY_MASK = RX_DMA_ENT_MSK_RBREMPTY_MASK,
+ CFG_RXDMA_ENT_MSK_RCRFULL_MASK = RX_DMA_ENT_MSK_RCRFULL_MASK,
+ CFG_RXDMA_ENT_MSK_RCRINCON_MASK = RX_DMA_ENT_MSK_RCRINCON_MASK,
+ CFG_RXDMA_ENT_MSK_CONFIG_ERR = RX_DMA_ENT_MSK_CONFIG_ERR_MASK,
+ CFG_RXDMA_ENT_MSK_RCR_SH_FULL_MASK = RX_DMA_ENT_MSK_RCRSH_FULL_MASK,
+ CFG_RXDMA_ENT_MSK_RBR_PRE_EMTY_MASK = RX_DMA_ENT_MSK_RBR_PRE_EMPTY_MASK,
+ CFG_RXDMA_ENT_MSK_WRED_DROP_MASK = RX_DMA_ENT_MSK_WRED_DROP_MASK,
+ CFG_RXDMA_ENT_MSK_PT_DROP_PKT_MASK = RX_DMA_ENT_MSK_PTDROP_PKT_MASK,
+ CFG_RXDMA_ENT_MSK_RBR_PRE_PAR_MASK = RX_DMA_ENT_MSK_RBR_PRE_PAR_MASK,
+ CFG_RXDMA_ENT_MSK_RCR_SHA_PAR_MASK = RX_DMA_ENT_MSK_RCR_SHA_PAR_MASK,
+ CFG_RXDMA_ENT_MSK_RCRTO_MASK = RX_DMA_ENT_MSK_RCRTO_MASK,
+ CFG_RXDMA_ENT_MSK_THRES_MASK = RX_DMA_ENT_MSK_THRES_MASK,
+ CFG_RXDMA_ENT_MSK_DC_FIFO_ERR_MASK = RX_DMA_ENT_MSK_DC_FIFO_ERR_MASK,
+ CFG_RXDMA_ENT_MSK_RCR_ACK_ERR_MASK = RX_DMA_ENT_MSK_RCR_ACK_ERR_MASK,
+ CFG_RXDMA_ENT_MSK_RSP_DAT_ERR_MASK = RX_DMA_ENT_MSK_RSP_DAT_ERR_MASK,
+ CFG_RXDMA_ENT_MSK_BYTE_EN_BUS_MASK = RX_DMA_ENT_MSK_BYTE_EN_BUS_MASK,
+ CFG_RXDMA_ENT_MSK_RSP_CNT_ERR_MASK = RX_DMA_ENT_MSK_RSP_CNT_ERR_MASK,
+ CFG_RXDMA_ENT_MSK_RBR_TMOUT_MASK = RX_DMA_ENT_MSK_RBR_TMOUT_MASK,
+
+ CFG_RXDMA_MASK_ALL = (RX_DMA_ENT_MSK_CFIGLOGPGE_MASK |
+ RX_DMA_ENT_MSK_RBRLOGPGE_MASK |
+ RX_DMA_ENT_MSK_RBRFULL_MASK |
+ RX_DMA_ENT_MSK_RBREMPTY_MASK |
+ RX_DMA_ENT_MSK_RCRFULL_MASK |
+ RX_DMA_ENT_MSK_RCRINCON_MASK |
+ RX_DMA_ENT_MSK_CONFIG_ERR_MASK |
+ RX_DMA_ENT_MSK_RCRSH_FULL_MASK |
+ RX_DMA_ENT_MSK_RBR_PRE_EMPTY_MASK |
+ RX_DMA_ENT_MSK_WRED_DROP_MASK |
+ RX_DMA_ENT_MSK_PTDROP_PKT_MASK |
+ RX_DMA_ENT_MSK_RBR_PRE_PAR_MASK |
+ RX_DMA_ENT_MSK_RCR_SHA_PAR_MASK |
+ RX_DMA_ENT_MSK_RCRTO_MASK |
+ RX_DMA_ENT_MSK_THRES_MASK |
+ RX_DMA_ENT_MSK_DC_FIFO_ERR_MASK |
+ RX_DMA_ENT_MSK_RCR_ACK_ERR_MASK |
+ RX_DMA_ENT_MSK_RSP_DAT_ERR_MASK |
+ RX_DMA_ENT_MSK_BYTE_EN_BUS_MASK |
+ RX_DMA_ENT_MSK_RSP_CNT_ERR_MASK |
+ RX_DMA_ENT_MSK_RBR_TMOUT_MASK)
+} rxdma_ent_msk_cfg_t;
+
+
+
+typedef union _addr44 {
+ uint64_t addr;
+ struct {
+#if defined(_BIG_ENDIAN)
+ uint32_t rsrvd:20;
+ uint32_t hdw:12;
+ uint32_t ldw;
+#else
+ uint32_t ldw;
+ uint32_t hdw:12;
+ uint32_t rsrvd:20;
+#endif
+ } bits;
+} addr44_t;
+
+
+/*
+ * npi_rxdma_cfg_default_port_rdc()
+ * Set the default rdc for the port
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ * portnm: Physical Port Number
+ * rdc: RX DMA Channel number
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_RXDMA_RDC_INVALID
+ * NPI_RXDMA_PORT_INVALID
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_default_port_rdc(npi_handle_t,
+ uint8_t, uint8_t);
+
+/*
+ * npi_rxdma_cfg_rdc_table()
+ * Configure/populate the RDC table
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ * table: RDC Group Number
+ * rdc[]: Array of RX DMA Channels
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_RXDMA_TABLE_INVALID
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_rdc_table(npi_handle_t,
+ uint8_t, uint8_t []);
+
+npi_status_t npi_rxdma_cfg_rdc_table_default_rdc(npi_handle_t,
+ uint8_t, uint8_t);
+npi_status_t npi_rxdma_cfg_rdc_rcr_timeout_disable(npi_handle_t,
+ uint8_t);
+
+
+/*
+ * npi_rxdma_32bitmode_enable()
+ * Enable 32 bit mode
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_HW_ERR
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_32bitmode_enable(npi_handle_t);
+
+
+/*
+ * npi_rxdma_32bitmode_disable()
+ * disable 32 bit mode
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_HW_ERR
+ *
+ */
+
+
+npi_status_t npi_rxdma_cfg_32bitmode_disable(npi_handle_t);
+
+/*
+ * npi_rxdma_cfg_ram_access_enable()
+ * Enable PIO access to shadow and prefetch memory.
+ * In the case of DMA errors, software may need to
+ * initialize the shadow and prefetch memories to
+ * sane value (may be clear it) before re-enabling
+ * the DMA channel.
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_HW_ERR
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_ram_access_enable(npi_handle_t);
+
+
+/*
+ * npi_rxdma_cfg_ram_access_disable()
+ * Disable PIO access to shadow and prefetch memory.
+ * This is the normal operation mode.
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_HW_ERR
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_ram_access_disable(npi_handle_t);
+
+
+/*
+ * npi_rxdma_cfg_clock_div_set()
+ * init the clock division, used for RX timers
+ * This determines the granularity of RX DMA countdown timers
+ * It depends on the system clock. For example if the system
+ * clock is 300 MHz, a value of 30000 will yield a granularity
+ * of 100usec.
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ * count: System clock divider
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_SW_ERR
+ * NPI_HW_ERR
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_clock_div_set(npi_handle_t, uint16_t);
+
+/*
+ * npi_rxdma_cfg_red_rand_init()
+ * init the WRED Discard
+ * By default, it is enabled
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ * init_value: WRED init value
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_SW_ERR
+ * NPI_HW_ERR
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_red_rand_init(npi_handle_t, uint16_t);
+
+/*
+ * npi_rxdma_cfg_wred_disable()
+ * init the WRED Discard
+ * By default, it is enabled
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_SW_ERR
+ * NPI_HW_ERR
+ *
+ */
+
+
+npi_status_t npi_rxdma_cfg_wred_disable(npi_handle_t);
+
+/*
+ * npi_rxdma_cfg_wred_param()
+ * COnfigure per rxdma channel WRED parameters
+ * By default, it is enabled
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ * rdc: RX DMA Channel number
+ * wred_params: WRED configuration parameters
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_SW_ERR
+ * NPI_HW_ERR
+ *
+ */
+
+
+
+npi_status_t npi_rxdma_cfg_wred_param(npi_handle_t, uint8_t,
+ rdc_red_para_t *);
+
+
+/*
+ * npi_rxdma_port_ddr_weight
+ * Set the DDR weight for a port.
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ * portnm: Physical Port Number
+ * weight: Port relative weight (in approx. bytes)
+ * Default values are:
+ * 0x400 (port 0 and 1) corresponding to 10 standard
+ * size (1500 bytes) Frames
+ * 0x66 (port 2 and 3) corresponding to 10% 10Gig ports
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_HW_ERR
+ * NPI_SW_ERR
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_port_ddr_weight(npi_handle_t,
+ uint8_t, uint32_t);
+
+
+/*
+ * npi_rxdma_port_usage_get()
+ * Gets the port usage, in terms of 16 byte blocks
+ *
+ * NOTE: The register count is cleared upon reading.
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ * portnm: Physical Port Number
+ * blocks: ptr to save current count.
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_HW_ERR
+ * NPI_SW_ERR
+ *
+ */
+
+npi_status_t npi_rxdma_port_usage_get(npi_handle_t,
+ uint8_t, uint32_t *);
+
+
+/*
+ * npi_rxdma_cfg_logical_page()
+ * Configure per rxdma channel Logical page
+ *
+ * To disable the logical page, set valid = 0;
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ * rdc: RX DMA Channel number
+ * page_params: Logical Page configuration parameters
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_SW_ERR
+ * NPI_HW_ERR
+ *
+ */
+
+
+
+npi_status_t npi_rxdma_cfg_logical_page(npi_handle_t, uint8_t,
+ dma_log_page_t *);
+
+
+/*
+ * npi_rxdma_cfg_logical_page_handle()
+ * Configure per rxdma channel Logical page handle
+ *
+ *
+ * Inputs:
+ * handle: register handle interpreted by the underlying OS
+ * rdc: RX DMA Channel number
+ * pg_handle: Logical Page handle
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_SW_ERR
+ * NPI_HW_ERR
+ *
+ */
+
+
+npi_status_t npi_rxdma_cfg_logical_page_handle(npi_handle_t, uint8_t,
+ uint64_t);
+
+
+
+
+npi_status_t npi_rxdma_cfg_logical_page_disable(npi_handle_t,
+ uint8_t, uint8_t);
+
+typedef enum _bsize {
+ SIZE_0B = 0x0,
+ SIZE_64B,
+ SIZE_128B,
+ SIZE_192B,
+ SIZE_256B,
+ SIZE_512B,
+ SIZE_1KB,
+ SIZE_2KB,
+ SIZE_4KB,
+ SIZE_8KB,
+ SIZE_16KB,
+ SIZE_32KB
+} bsize_t;
+
+
+
+/*
+ * npi_rxdma_cfg_rdc_ring()
+ * Configure The RDC channel Rcv Buffer Ring
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * rdc_params: RDC configuration parameters
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_SW_ERR
+ * NPI_HW_ERR
+ *
+ */
+
+typedef struct _rdc_desc_cfg_t {
+ uint8_t mbox_enable; /* Enable full (18b) header */
+ uint8_t full_hdr; /* Enable full (18b) header */
+ uint8_t offset; /* 64 byte offsets */
+ uint8_t valid2; /* size 2 is valid */
+ bsize_t size2; /* Size 2 length */
+ uint8_t valid1; /* size 1 is valid */
+ bsize_t size1; /* Size 1 length */
+ uint8_t valid0; /* size 0 is valid */
+ bsize_t size0; /* Size 1 length */
+ bsize_t page_size; /* Page or buffer Size */
+ uint8_t rcr_timeout_enable;
+ uint8_t rcr_timeout;
+ uint16_t rcr_threshold;
+ uint16_t rcr_len; /* RBR Descriptor size (entries) */
+ uint16_t rbr_len; /* RBR Descriptor size (entries) */
+ uint64_t mbox_addr; /* Mailbox Address */
+ uint64_t rcr_addr; /* RCR Address */
+ uint64_t rbr_addr; /* RBB Address */
+} rdc_desc_cfg_t;
+
+
+
+npi_status_t npi_rxdma_cfg_rdc_ring(npi_handle_t, uint8_t,
+ rdc_desc_cfg_t *);
+
+
+
+
+/*
+ * npi_rxdma_rdc_rcr_flush
+ * Forces RX completion ring update
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ *
+ * Return:
+ *
+ */
+
+#define npi_rxdma_rdc_rcr_flush(handle, rdc) \
+ RXDMA_REG_WRITE64(handle, RCR_FLSH_REG, rdc, \
+ (RCR_FLSH_SET << RCR_FLSH_SHIFT))
+
+
+
+/*
+ * npi_rxdma_rdc_rcr_read_update
+ * Update the number of rcr packets and buffers processed
+ *
+ * Inputs:
+ * channel: RX DMA Channel number
+ * num_pkts: Number of pkts processed by SW.
+ * A packet could constitute multiple
+ * buffers, in case jumbo packets.
+ * num_bufs: Number of buffer processed by SW.
+ *
+ * Return:
+ * NPI_FAILURE -
+ * NPI_RXDMA_OPCODE_INVALID -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ *
+ */
+
+npi_status_t npi_rxdma_rdc_rcr_read_update(npi_handle_t, uint8_t,
+ uint16_t, uint16_t);
+/*
+ * npi_rxdma_rdc_rcr_pktread_update
+ * Update the number of packets processed
+ *
+ * Inputs:
+ * channel: RX DMA Channel number
+ * num_pkts: Number ofpkts processed by SW.
+ * A packet could constitute multiple
+ * buffers, in case jumbo packets.
+ *
+ * Return:
+ * NPI_FAILURE -
+ * NPI_RXDMA_OPCODE_INVALID -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ *
+ */
+
+npi_status_t npi_rxdma_rdc_rcr_pktread_update(npi_handle_t,
+ uint8_t, uint16_t);
+
+
+
+/*
+ * npi_rxdma_rdc_rcr_bufread_update
+ * Update the number of buffers processed
+ *
+ * Inputs:
+ * channel: RX DMA Channel number
+ * num_bufs: Number of buffer processed by SW. Multiple buffers
+ * could be part of a single packet.
+ *
+ * Return:
+ * NPI_FAILURE -
+ * NPI_RXDMA_OPCODE_INVALID -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ *
+ */
+
+npi_status_t npi_rxdma_rdc_rcr_bufread_update(npi_handle_t,
+ uint8_t, uint16_t);
+
+
+
+/*
+ * npi_rxdma_rdc_rbr_kick
+ * Kick RDC RBR
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * num_buffers: Number of Buffers posted to the RBR
+ *
+ * Return:
+ *
+ */
+
+#define npi_rxdma_rdc_rbr_kick(handle, rdc, num_buffers) \
+ RXDMA_REG_WRITE64(handle, RBR_KICK_REG, rdc, num_buffers)
+
+
+/*
+ * npi_rxdma_rdc_rbr_head_get
+ * Gets the current rbr head pointer.
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * hdptr ptr to write the rbr head value
+ *
+ * Return:
+ *
+ */
+
+npi_status_t npi_rxdma_rdc_rbr_head_get(npi_handle_t,
+ uint8_t, addr44_t *);
+
+
+
+/*
+ * npi_rxdma_rdc_rbr_stat_get
+ * Returns the RBR stat. The stat consists of the
+ * RX buffers in the ring. It also indicates if there
+ * has been an overflow.
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * rbr_stat_t: Structure to update stat
+ *
+ * Return:
+ *
+ */
+
+npi_status_t npi_rxdma_rdc_rbr_stat_get(npi_handle_t, uint8_t,
+ rbr_stat_t *);
+
+
+
+/*
+ * npi_rxdma_cfg_rdc_reset
+ * Resets the RDC channel
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ *
+ * Return:
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_rdc_reset(npi_handle_t, uint8_t);
+
+
+/*
+ * npi_rxdma_rdc_enable
+ * Enables the RDC channel
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ *
+ * Return:
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_rdc_enable(npi_handle_t, uint8_t);
+
+/*
+ * npi_rxdma_rdc_disable
+ * Disables the RDC channel
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ *
+ * Return:
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_rdc_disable(npi_handle_t, uint8_t);
+
+
+/*
+ * npi_rxdma_cfg_rdc_rcr_timeout()
+ * Configure The RDC channel completion ring timeout.
+ * If a frame has been received, an event would be
+ * generated atleast at the expiration of the timeout.
+ *
+ * Enables timeout by default.
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * rcr_timeout: Completion Ring timeout value
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_SW_ERR
+ * NPI_HW_ERR
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_rdc_rcr_timeout(npi_handle_t, uint8_t,
+ uint8_t);
+
+
+/*
+ * npi_rxdma_cfg_rdc_rcr_threshold()
+ * Configure The RDC channel completion ring threshold.
+ * An event would be If the number of frame received,
+ * surpasses the threshold value
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * rcr_threshold: Completion Ring Threshold count
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_SW_ERR
+ * NPI_HW_ERR
+ *
+ */
+
+npi_status_t npi_rxdma_cfg_rdc_rcr_threshold(npi_handle_t, uint8_t,
+ uint16_t);
+
+
+npi_status_t npi_rxdma_cfg_rdc_rcr_timeout_disable(npi_handle_t, uint8_t);
+
+typedef struct _rdc_error_stat_t {
+ uint8_t fault:1;
+ uint8_t multi_fault:1;
+ uint8_t rbr_fault:1;
+ uint8_t buff_fault:1;
+ uint8_t rcr_fault:1;
+ addr44_t fault_addr;
+} rdc_error_stat_t;
+
+#if OLD
+/*
+ * npi_rxdma_rdc_error_stat_get
+ * Gets the current Error stat for the RDC.
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * error_stat Structure to write current RDC Error stat
+ *
+ * Return:
+ *
+ */
+
+npi_status_t npi_rxdma_rdc_error_stat_get(npi_handle_t,
+ uint8_t, rdc_error_stat_t *);
+
+#endif
+
+/*
+ * npi_rxdma_rdc_rcr_tail_get
+ * Gets the current RCR tail address for the RDC.
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * tail_addr Structure to write current RDC RCR tail address
+ *
+ * Return:
+ *
+ */
+
+npi_status_t npi_rxdma_rdc_rcr_tail_get(npi_handle_t,
+ uint8_t, addr44_t *);
+
+
+npi_status_t npi_rxdma_rdc_rcr_qlen_get(npi_handle_t,
+ uint8_t, uint16_t *);
+
+
+
+typedef struct _rdc_discard_stat_t {
+ uint8_t nobuf_ovflow;
+ uint8_t red_ovflow;
+ uint32_t nobuf_discard;
+ uint32_t red_discard;
+} rdc_discard_stat_t;
+
+
+/*
+ * npi_rxdma_rdc_discard_stat_get
+ * Gets the current discrad stats for the RDC.
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * rcr_stat Structure to write current RDC discard stat
+ *
+ * Return:
+ *
+ */
+
+npi_status_t npi_rxdma_rdc_discard_stat_get(npi_handle_t,
+ uint8_t, rdc_discard_stat_t);
+
+
+/*
+ * npi_rx_port_discard_stat_get
+ * Gets the current input (IPP) discrad stats for the rx port.
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * rx_disc_cnt_t Structure to write current RDC discard stat
+ *
+ * Return:
+ *
+ */
+
+npi_status_t npi_rx_port_discard_stat_get(npi_handle_t,
+ uint8_t,
+ rx_disc_cnt_t *);
+
+
+/*
+ * npi_rxdma_red_discard_stat_get
+ * Gets the current discrad count due RED
+ * The counter overflow bit is cleared, if it has been set.
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * rx_disc_cnt_t Structure to write current RDC discard stat
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_RXDMA_RDC_INVALID
+ *
+ */
+
+npi_status_t npi_rxdma_red_discard_stat_get(npi_handle_t, uint8_t,
+ rx_disc_cnt_t *);
+
+
+
+/*
+ * npi_rxdma_red_discard_oflow_clear
+ * Clear RED discard counter overflow bit
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_RXDMA_RDC_INVALID
+ *
+ */
+
+npi_status_t npi_rxdma_red_discard_oflow_clear(npi_handle_t,
+ uint8_t);
+
+
+
+
+/*
+ * npi_rxdma_misc_discard_stat_get
+ * Gets the current discrad count for the rdc due to
+ * buffer pool empty
+ * The counter overflow bit is cleared, if it has been set.
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ * rx_disc_cnt_t Structure to write current RDC discard stat
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_RXDMA_RDC_INVALID
+ *
+ */
+
+npi_status_t npi_rxdma_misc_discard_stat_get(npi_handle_t, uint8_t,
+ rx_disc_cnt_t *);
+
+
+
+/*
+ * npi_rxdma_red_discard_oflow_clear
+ * Clear RED discard counter overflow bit
+ * clear the overflow bit for buffer pool empty discrad counter
+ * for the rdc
+ *
+ *
+ * Inputs:
+ * rdc: RX DMA Channel number
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_RXDMA_RDC_INVALID
+ *
+ */
+
+npi_status_t npi_rxdma_misc_discard_oflow_clear(npi_handle_t,
+ uint8_t);
+
+
+
+/*
+ * npi_rxdma_ring_perr_stat_get
+ * Gets the current RDC Memory parity error
+ * The counter overflow bit is cleared, if it has been set.
+ *
+ * Inputs:
+ * pre_cnt: Structure to write current RDC Prefetch memory
+ * Parity Error stat
+ * sha_cnt: Structure to write current RDC Shadow memory
+ * Parity Error stat
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_RXDMA_RDC_INVALID
+ *
+ */
+
+npi_status_t npi_rxdma_ring_perr_stat_get(npi_handle_t,
+ rdmc_par_err_log_t *,
+ rdmc_par_err_log_t *);
+
+
+/*
+ * npi_rxdma_ring_perr_stat_get
+ * Clear RDC Memory Parity Error counter overflow bits
+ *
+ * Inputs:
+ * Return:
+ * NPI_SUCCESS
+ *
+ */
+
+npi_status_t npi_rxdma_ring_perr_stat_clear(npi_handle_t);
+
+
+/* Access the RDMC Memory: used for debugging */
+
+npi_status_t npi_rxdma_rdmc_memory_io(npi_handle_t,
+ rdmc_mem_access_t *, uint8_t);
+
+
+
+/*
+ * npi_rxdma_rxctl_fifo_error_intr_set
+ * Configure The RX ctrl fifo error interrupt generation
+ *
+ * Inputs:
+ * mask: rx_ctl_dat_fifo_mask_t specifying the errors
+ *
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ *
+ */
+
+npi_status_t npi_rxdma_rxctl_fifo_error_intr_set(npi_handle_t,
+ rx_ctl_dat_fifo_mask_t *);
+
+/*
+ * npi_rxdma_rxctl_fifo_error_status_get
+ * Read The RX ctrl fifo error Status
+ *
+ * Inputs:
+ * stat: rx_ctl_dat_fifo_stat_t to read the errors to
+ * valid fields in rx_ctl_dat_fifo_stat_t structure are:
+ * zcp_eop_err, ipp_eop_err, id_mismatch.
+ * Return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ *
+ */
+
+npi_status_t npi_rxdma_rxctl_fifo_error_status_get(npi_handle_t,
+ rx_ctl_dat_fifo_stat_t *);
+
+
+/*
+ * npi_rxdma_channel_mex_set():
+ * This function is called to arm the DMA channel with
+ * mailbox updating capability. Software needs to rearm
+ * for each update by writing to the control and status register.
+ *
+ * Parameters:
+ * handle - NPI handle (virtualization flag must be defined).
+ * channel - logical RXDMA channel from 0 to 23.
+ * (If virtualization flag is not set, then
+ * logical channel is the same as the hardware
+ * channel number).
+ *
+ * Return:
+ * NPI_SUCCESS - If enable channel with mailbox update
+ * is complete successfully.
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_channel_mex_set(npi_handle_t, uint8_t);
+
+/*
+ * npi_rxdma_channel_rcrto_clear():
+ * This function is called to reset RCRTO bit to 0.
+ *
+ * Parameters:
+ * handle - NPI handle (virtualization flag must be defined).
+ * channel - logical RXDMA channel from 0 to 23.
+ * (If virtualization flag is not set, then
+ * logical channel is the same as the hardware
+ * channel number).
+ * Return:
+ * NPI_SUCCESS
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_channel_rcrto_clear(npi_handle_t, uint8_t);
+
+/*
+ * npi_rxdma_channel_pt_drop_pkt_clear():
+ * This function is called to clear the port drop packet bit (debug).
+ *
+ * Parameters:
+ * handle - NPI handle (virtualization flag must be defined).
+ * channel - logical RXDMA channel from 0 to 23.
+ * (If virtualization flag is not set, then
+ * logical channel is the same as the hardware
+ * channel number).
+ * Return:
+ * NPI_SUCCESS
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_channel_pt_drop_pkt_clear(npi_handle_t, uint8_t);
+
+/*
+ * npi_rxdma_channel_wred_drop_clear():
+ * This function is called to wred drop bit (debug only).
+ *
+ * Parameters:
+ * handle - NPI handle (virtualization flag must be defined).
+ * channel - logical RXDMA channel from 0 to 23.
+ * (If virtualization flag is not set, then
+ * logical channel is the same as the hardware
+ * channel number).
+ * Return:
+ * NPI_SUCCESS
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_channel_wred_drop_clear(npi_handle_t, uint8_t);
+
+/*
+ * npi_rxdma_channel_rcr_shfull_clear():
+ * This function is called to clear RCR shadow full bit.
+ *
+ * Parameters:
+ * handle - NPI handle (virtualization flag must be defined).
+ * channel - logical RXDMA channel from 0 to 23.
+ * (If virtualization flag is not set, then
+ * logical channel is the same as the hardware
+ * channel number).
+ * Return:
+ * NPI_SUCCESS
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_channel_rcr_shfull_clear(npi_handle_t, uint8_t);
+
+/*
+ * npi_rxdma_channel_rcrfull_clear():
+ * This function is called to clear RCR full bit.
+ *
+ * Parameters:
+ * handle - NPI handle (virtualization flag must be defined).
+ * channel - logical RXDMA channel from 0 to 23.
+ * (If virtualization flag is not set, then
+ * logical channel is the same as the hardware
+ * channel number).
+ * Return:
+ * NPI_SUCCESS
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_channel_rcrfull_clear(npi_handle_t, uint8_t);
+
+/*
+ * npi_rxdma_rbr_pre_empty_clear():
+ * This function is called to control a receive DMA channel
+ * for arming the channel with mailbox updates, resetting
+ * various event status bits (control and status register).
+ *
+ * Parameters:
+ * handle - NPI handle (virtualization flag must be defined).
+ * control - NPI defined control type supported:
+ * - RXDMA_MEX_SET
+ * - RXDMA_RCRTO_CLEAR
+ * - RXDMA_PT_DROP_PKT_CLEAR
+ * - RXDMA_WRED_DROP_CLEAR
+ * - RXDMA_RCR_SFULL_CLEAR
+ * - RXDMA_RCR_FULL_CLEAR
+ * - RXDMA_RBR_PRE_EMPTY_CLEAR
+ * channel - logical RXDMA channel from 0 to 23.
+ * (If virtualization flag is not set, then
+ * logical channel is the same as the hardware.
+ * Return:
+ * NPI_SUCCESS
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_channel_rbr_pre_empty_clear(npi_handle_t, uint8_t);
+
+/*
+ * npi_rxdma_channel_control():
+ * This function is called to control a receive DMA channel
+ * for arming the channel with mailbox updates, resetting
+ * various event status bits (control and status register).
+ *
+ * Parameters:
+ * handle - NPI handle (virtualization flag must be defined).
+ * control - NPI defined control type supported:
+ * - RXDMA_MEX_SET
+ * - RXDMA_RCRTO_CLEAR
+ * - RXDMA_PT_DROP_PKT_CLEAR
+ * - RXDMA_WRED_DROP_CLEAR
+ * - RXDMA_RCR_SFULL_CLEAR
+ * - RXDMA_RCR_FULL_CLEAR
+ * - RXDMA_RBR_PRE_EMPTY_CLEAR
+ * channel - logical RXDMA channel from 0 to 23.
+ * (If virtualization flag is not set, then
+ * logical channel is the same as the hardware.
+ * Return:
+ * NPI_SUCCESS
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_TXDMA_OPCODE_INVALID -
+ * NPI_TXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_channel_control(npi_handle_t,
+ rxdma_cs_cntl_t, uint8_t);
+
+/*
+ * npi_rxdma_control_status():
+ * This function is called to operate on the control
+ * and status register.
+ *
+ * Parameters:
+ * handle - NPI handle
+ * op_mode - OP_GET: get hardware control and status
+ * OP_SET: set hardware control and status
+ * OP_UPDATE: update hardware control and status.
+ * OP_CLEAR: clear control and status register to 0s.
+ * channel - hardware RXDMA channel from 0 to 23.
+ * cs_p - pointer to hardware defined control and status
+ * structure.
+ * Return:
+ * NPI_SUCCESS
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_OPCODE_INVALID -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_control_status(npi_handle_t, io_op_t,
+ uint8_t, p_rx_dma_ctl_stat_t);
+
+/*
+ * npi_rxdma_event_mask():
+ * This function is called to operate on the event mask
+ * register which is used for generating interrupts.
+ *
+ * Parameters:
+ * handle - NPI handle
+ * op_mode - OP_GET: get hardware event mask
+ * OP_SET: set hardware interrupt event masks
+ * OP_CLEAR: clear control and status register to 0s.
+ * channel - hardware RXDMA channel from 0 to 23.
+ * mask_p - pointer to hardware defined event mask
+ * structure.
+ * Return:
+ * NPI_SUCCESS - If set is complete successfully.
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_OPCODE_INVALID -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_event_mask(npi_handle_t, io_op_t,
+ uint8_t, p_rx_dma_ent_msk_t);
+
+/*
+ * npi_rxdma_event_mask_config():
+ * This function is called to operate on the event mask
+ * register which is used for generating interrupts
+ * and status register.
+ *
+ * Parameters:
+ * handle - NPI handle
+ * op_mode - OP_GET: get hardware event mask
+ * OP_SET: set hardware interrupt event masks
+ * OP_CLEAR: clear control and status register to 0s.
+ * channel - hardware RXDMA channel from 0 to 23.
+ * cfgp - pointer to NPI defined event mask
+ * enum data type.
+ * Return:
+ * NPI_SUCCESS - If set is complete successfully.
+ *
+ * Error:
+ * NPI_FAILURE -
+ * NPI_RXDMA_OPCODE_INVALID -
+ * NPI_RXDMA_CHANNEL_INVALID -
+ */
+npi_status_t npi_rxdma_event_mask_config(npi_handle_t, io_op_t,
+ uint8_t, rxdma_ent_msk_cfg_t *);
+
+
+/*
+ * npi_rxdma_dump_rdc_regs
+ * Dumps the contents of rdc csrs and fzc registers
+ *
+ * Input:
+ * rdc: RX DMA number
+ *
+ * return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_RXDMA_RDC_INVALID
+ *
+ */
+
+npi_status_t npi_rxdma_dump_rdc_regs(npi_handle_t, uint8_t);
+
+
+/*
+ * npi_rxdma_dump_fzc_regs
+ * Dumps the contents of rdc csrs and fzc registers
+ *
+ * Input:
+ * rdc: RX DMA number
+ *
+ * return:
+ * NPI_SUCCESS
+ * NPI_FAILURE
+ * NPI_RXDMA_RDC_INVALID
+ *
+ */
+
+npi_status_t npi_rxdma_dump_fzc_regs(npi_handle_t);
+
+npi_status_t npi_rxdma_channel_rbr_empty_clear(npi_handle_t,
+ uint8_t);
+npi_status_t npi_rxdma_rxctl_fifo_error_intr_get(npi_handle_t,
+ rx_ctl_dat_fifo_stat_t *);
+
+npi_status_t npi_rxdma_rxctl_fifo_error_intr_set(npi_handle_t,
+ rx_ctl_dat_fifo_mask_t *);
+
+npi_status_t npi_rxdma_dump_rdc_table(npi_handle_t, uint8_t);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NPI_RXDMA_H */