/* * 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_IPP_H #define _NPI_IPP_H #ifdef __cplusplus extern "C" { #endif #include #include /* IBTP IPP Configuration */ typedef enum ipp_config_e { CFG_IPP = IPP_EN, CFG_IPP_DFIFO_ECC_CORRECT = IPP_DFIFO_ECC_CORRECT_EN, CFG_IPP_DROP_BAD_CRC = IPP_DROP_BAD_CRC_EN, CFG_IPP_TCP_UDP_CKSUM = IPP_TCP_UDP_CKSUM_EN, CFG_IPP_DFIFO_PIO_WR = IPP_DFIFO_PIO_WR_EN, CFG_IPP_PRE_FIFO_PIO_WR = IPP_PRE_FIFO_PIO_WR_EN, CFG_IPP_FFLP_CKSUM_INFO_PIO_WR = IPP_FFLP_CKSUM_INFO_PIO_WR_EN, CFG_IPP_ALL = (IPP_EN | IPP_DFIFO_ECC_CORRECT_EN | IPP_DROP_BAD_CRC_EN | IPP_TCP_UDP_CKSUM_EN | IPP_DFIFO_PIO_WR_EN | IPP_PRE_FIFO_PIO_WR_EN) } ipp_config_t; typedef enum ipp_iconfig_e { ICFG_IPP_PKT_DISCARD_OVFL = IPP_PKT_DISCARD_CNT_INTR_DIS, ICFG_IPP_BAD_TCPIP_CKSUM_OVFL = IPP_BAD_TCPIP_CKSUM_CNT_INTR_DIS, ICFG_IPP_PRE_FIFO_UNDERRUN = IPP_PRE_FIFO_UNDERRUN_INTR_DIS, ICFG_IPP_PRE_FIFO_OVERRUN = IPP_PRE_FIFO_OVERRUN_INTR_DIS, ICFG_IPP_PRE_FIFO_PERR = IPP_PRE_FIFO_PERR_INTR_DIS, ICFG_IPP_DFIFO_ECC_UNCORR_ERR = IPP_DFIFO_ECC_UNCORR_ERR_INTR_DIS, ICFG_IPP_DFIFO_MISSING_EOP_SOP = IPP_DFIFO_MISSING_EOP_SOP_INTR_DIS, ICFG_IPP_ECC_ERR_OVFL = IPP_ECC_ERR_CNT_MAX_INTR_DIS, ICFG_IPP_ALL = (IPP_PKT_DISCARD_CNT_INTR_DIS | IPP_BAD_TCPIP_CKSUM_CNT_INTR_DIS | IPP_PRE_FIFO_UNDERRUN_INTR_DIS | IPP_PRE_FIFO_OVERRUN_INTR_DIS | IPP_PRE_FIFO_PERR_INTR_DIS | IPP_DFIFO_ECC_UNCORR_ERR_INTR_DIS | IPP_DFIFO_MISSING_EOP_SOP_INTR_DIS | IPP_ECC_ERR_CNT_MAX_INTR_DIS) } ipp_iconfig_t; typedef enum ipp_counter_e { CNT_IPP_DISCARD_PKT = 0x00000001, CNT_IPP_TCP_CKSUM_ERR = 0x00000002, CNT_IPP_ECC_ERR = 0x00000004, CNT_IPP_ALL = 0x00000007 } ipp_counter_t; typedef enum ipp_port_cnt_idx_e { HWCI_IPP_PKT_DISCARD = 0, HWCI_IPP_TCP_CKSUM_ERR, HWCI_IPP_ECC_ERR, CI_IPP_MISSING_EOP_SOP, CI_IPP_UNCORR_ERR, CI_IPP_PERR, CI_IPP_FIFO_OVERRUN, CI_IPP_FIFO_UNDERRUN, CI_IPP_PORT_CNT_ARR_SIZE } ipp_port_cnt_idx_t; /* IPP specific errors */ #define IPP_MAX_PKT_BYTES_INVALID 0x50 #define IPP_FIFO_ADDR_INVALID 0x51 /* IPP error return macros */ #define NPI_IPP_PORT_INVALID(portn)\ ((IPP_BLK_ID << NPI_BLOCK_ID_SHIFT) | PORT_INVALID |\ IS_PORT | (portn << NPI_PORT_CHAN_SHIFT)) #define NPI_IPP_OPCODE_INVALID(portn)\ ((IPP_BLK_ID << NPI_BLOCK_ID_SHIFT) | OPCODE_INVALID |\ IS_PORT | (portn << NPI_PORT_CHAN_SHIFT)) #define NPI_IPP_CONFIG_INVALID(portn)\ ((IPP_BLK_ID << NPI_BLOCK_ID_SHIFT) | CONFIG_INVALID |\ IS_PORT | (portn << NPI_PORT_CHAN_SHIFT)) #define NPI_IPP_MAX_PKT_BYTES_INVALID(portn)\ ((IPP_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ IPP_MAX_PKT_BYTES_INVALID |\ IS_PORT | (portn << NPI_PORT_CHAN_SHIFT)) #define NPI_IPP_COUNTER_INVALID(portn)\ ((IPP_BLK_ID << NPI_BLOCK_ID_SHIFT) | COUNTER_INVALID |\ IS_PORT | (portn << NPI_PORT_CHAN_SHIFT)) #define NPI_IPP_RESET_FAILED(portn)\ ((IPP_BLK_ID << NPI_BLOCK_ID_SHIFT) | RESET_FAILED |\ IS_PORT | (portn << NPI_PORT_CHAN_SHIFT)) #define NPI_IPP_FIFO_ADDR_INVALID(portn)\ ((IPP_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ IPP_FIFO_ADDR_INVALID |\ IS_PORT | (portn << NPI_PORT_CHAN_SHIFT)) #define IPP_REG_RD(handle, portn, reg, val) {\ NXGE_REG_RD64(handle, IPP_REG_ADDR(portn, reg), val);\ } #define IPP_REG_WR(handle, portn, reg, val) {\ NXGE_REG_WR64(handle, IPP_REG_ADDR(portn, reg), val);\ } /* IPP NPI function prototypes */ npi_status_t npi_ipp_get_pfifo_rd_ptr(npi_handle_t, uint8_t, uint16_t *); npi_status_t npi_ipp_get_pfifo_wr_ptr(npi_handle_t, uint8_t, uint16_t *); npi_status_t npi_ipp_write_pfifo(npi_handle_t, uint8_t, uint8_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); npi_status_t npi_ipp_read_pfifo(npi_handle_t, uint8_t, uint8_t, uint32_t *, uint32_t *, uint32_t *, uint32_t *, uint32_t *); npi_status_t npi_ipp_write_dfifo(npi_handle_t, uint8_t, uint16_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); npi_status_t npi_ipp_read_dfifo(npi_handle_t, uint8_t, uint16_t, uint32_t *, uint32_t *, uint32_t *, uint32_t *, uint32_t *); npi_status_t npi_ipp_reset(npi_handle_t, uint8_t); npi_status_t npi_ipp_config(npi_handle_t, config_op_t, uint8_t, ipp_config_t); npi_status_t npi_ipp_set_max_pktsize(npi_handle_t, uint8_t, uint32_t); npi_status_t npi_ipp_iconfig(npi_handle_t, config_op_t, uint8_t, ipp_iconfig_t); npi_status_t npi_ipp_get_status(npi_handle_t, uint8_t, ipp_status_t *); npi_status_t npi_ipp_counters(npi_handle_t, counter_op_t, ipp_counter_t, uint8_t, npi_counter_t *); npi_status_t npi_ipp_get_ecc_syndrome(npi_handle_t, uint8_t, uint16_t *); npi_status_t npi_ipp_get_dfifo_eopm_rdptr(npi_handle_t, uint8_t, uint16_t *); npi_status_t npi_ipp_get_state_mach(npi_handle_t, uint8_t, uint32_t *); npi_status_t npi_ipp_get_dfifo_rd_ptr(npi_handle_t, uint8_t, uint16_t *); npi_status_t npi_ipp_get_dfifo_wr_ptr(npi_handle_t, uint8_t, uint16_t *); npi_status_t npi_ipp_get_ecc_err_count(npi_handle_t, uint8_t, uint8_t *); npi_status_t npi_ipp_get_pkt_dis_count(npi_handle_t, uint8_t, uint16_t *); npi_status_t npi_ipp_get_cs_err_count(npi_handle_t, uint8_t, uint16_t *); npi_status_t npi_ipp_dump_regs(npi_handle_t, uint8_t); void npi_ipp_read_regs(npi_handle_t, uint8_t); #ifdef __cplusplus } #endif #endif /* _NPI_IPP_H */