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 /* 2244961713Sgirish * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 2344961713Sgirish * Use is subject to license terms. 2444961713Sgirish */ 2544961713Sgirish 2644961713Sgirish #ifndef _NPI_ZCP_H 2744961713Sgirish #define _NPI_ZCP_H 2844961713Sgirish 2944961713Sgirish #pragma ident "%Z%%M% %I% %E% SMI" 3044961713Sgirish 3144961713Sgirish #ifdef __cplusplus 3244961713Sgirish extern "C" { 3344961713Sgirish #endif 3444961713Sgirish 3544961713Sgirish #include <npi.h> 3644961713Sgirish #include <nxge_zcp_hw.h> 3744961713Sgirish 3844961713Sgirish typedef enum zcp_buf_region_e { 3944961713Sgirish BAM_4BUF = 1, 4044961713Sgirish BAM_8BUF = 2, 4144961713Sgirish BAM_16BUF = 3, 4244961713Sgirish BAM_32BUF = 4 4344961713Sgirish } zcp_buf_region_t; 4444961713Sgirish 4544961713Sgirish typedef enum zcp_config_e { 4644961713Sgirish CFG_ZCP = 0x01, 4744961713Sgirish CFG_ZCP_ECC_CHK = 0x02, 4844961713Sgirish CFG_ZCP_PAR_CHK = 0x04, 4944961713Sgirish CFG_ZCP_BUF_RESP = 0x08, 5044961713Sgirish CFG_ZCP_BUF_REQ = 0x10, 5144961713Sgirish CFG_ZCP_ALL = 0x1F 5244961713Sgirish } zcp_config_t; 5344961713Sgirish 5444961713Sgirish typedef enum zcp_iconfig_e { 5544961713Sgirish ICFG_ZCP_RRFIFO_UNDERRUN = RRFIFO_UNDERRUN, 5644961713Sgirish ICFG_ZCP_RRFIFO_OVERRUN = RRFIFO_OVERRUN, 5744961713Sgirish ICFG_ZCP_RSPFIFO_UNCORR_ERR = RSPFIFO_UNCORR_ERR, 5844961713Sgirish ICFG_ZCP_BUFFER_OVERFLOW = BUFFER_OVERFLOW, 5944961713Sgirish ICFG_ZCP_STAT_TBL_PERR = STAT_TBL_PERR, 6044961713Sgirish ICFG_ZCP_DYN_TBL_PERR = BUF_DYN_TBL_PERR, 6144961713Sgirish ICFG_ZCP_BUF_TBL_PERR = BUF_TBL_PERR, 6244961713Sgirish ICFG_ZCP_TT_PROGRAM_ERR = TT_PROGRAM_ERR, 6344961713Sgirish ICFG_ZCP_RSP_TT_INDEX_ERR = RSP_TT_INDEX_ERR, 6444961713Sgirish ICFG_ZCP_SLV_TT_INDEX_ERR = SLV_TT_INDEX_ERR, 6544961713Sgirish ICFG_ZCP_TT_INDEX_ERR = ZCP_TT_INDEX_ERR, 6644961713Sgirish ICFG_ZCP_CFIFO_ECC3 = CFIFO_ECC3, 6744961713Sgirish ICFG_ZCP_CFIFO_ECC2 = CFIFO_ECC2, 6844961713Sgirish ICFG_ZCP_CFIFO_ECC1 = CFIFO_ECC1, 6944961713Sgirish ICFG_ZCP_CFIFO_ECC0 = CFIFO_ECC0, 7044961713Sgirish ICFG_ZCP_ALL = (RRFIFO_UNDERRUN | RRFIFO_OVERRUN | 7144961713Sgirish RSPFIFO_UNCORR_ERR | STAT_TBL_PERR | 7244961713Sgirish BUF_DYN_TBL_PERR | BUF_TBL_PERR | 7344961713Sgirish TT_PROGRAM_ERR | RSP_TT_INDEX_ERR | 7444961713Sgirish SLV_TT_INDEX_ERR | ZCP_TT_INDEX_ERR | 7544961713Sgirish CFIFO_ECC3 | CFIFO_ECC2 | CFIFO_ECC1 | 7644961713Sgirish CFIFO_ECC0 | BUFFER_OVERFLOW) 7744961713Sgirish } zcp_iconfig_t; 7844961713Sgirish 7944961713Sgirish typedef enum tte_sflow_attr_mask_e { 8044961713Sgirish TTE_RDC_TBL_OFF = 0x0001, 8144961713Sgirish TTE_BUF_SIZE = 0x0002, 8244961713Sgirish TTE_NUM_BUF = 0x0004, 8344961713Sgirish TTE_ULP_END = 0x0008, 8444961713Sgirish TTE_ULP_END_EN = 0x0010, 8544961713Sgirish TTE_UNMAP_ALL_EN = 0x0020, 8644961713Sgirish TTE_TMODE = 0x0040, 8744961713Sgirish TTE_SKIP = 0x0080, 8844961713Sgirish TTE_HBM_RING_BASE_ADDR = 0x0100, 8944961713Sgirish TTE_HBM_RING_SIZE = 0x0200, 9044961713Sgirish TTE_HBM_BUSY = 0x0400, 9144961713Sgirish TTE_HBM_TOQ = 0x0800, 9244961713Sgirish TTE_SFLOW_ATTR_ALL = 0x0FFF 9344961713Sgirish } tte_sflow_attr_mask_t; 9444961713Sgirish 9544961713Sgirish typedef enum tte_dflow_attr_mask_e { 9644961713Sgirish TTE_MAPPED_IN = 0x0001, 9744961713Sgirish TTE_ANCHOR_SEQ = 0x0002, 9844961713Sgirish TTE_ANCHOR_OFFSET = 0x0004, 9944961713Sgirish TTE_ANCHOR_BUFFER = 0x0008, 10044961713Sgirish TTE_ANCHOR_BUF_FLAG = 0x0010, 10144961713Sgirish TTE_UNMAP_ON_LEFT = 0x0020, 10244961713Sgirish TTE_ULP_END_REACHED = 0x0040, 10344961713Sgirish TTE_ERR_STAT = 0x0080, 10444961713Sgirish TTE_HBM_WR_PTR = 0x0100, 10544961713Sgirish TTE_HBM_HOQ = 0x0200, 10644961713Sgirish TTE_HBM_PREFETCH_ON = 0x0400, 10744961713Sgirish TTE_DFLOW_ATTR_ALL = 0x07FF 10844961713Sgirish } tte_dflow_attr_mask_t; 10944961713Sgirish 11044961713Sgirish #define IS_VALID_BAM_REGION(region)\ 11144961713Sgirish ((region == BAM_4BUF) || (region == BAM_8BUF) ||\ 11244961713Sgirish (region == BAM_16BUF) || (region == BAM_32BUF)) 11344961713Sgirish 11444961713Sgirish #define ZCP_WAIT_RAM_READY(handle, val) {\ 11544961713Sgirish uint32_t cnt = MAX_PIO_RETRIES;\ 11644961713Sgirish do {\ 11744961713Sgirish NXGE_REG_RD64(handle, ZCP_RAM_ACC_REG, &val);\ 11844961713Sgirish cnt--;\ 11944961713Sgirish } while ((ram_ctl.bits.ldw.busy != 0) && (cnt > 0));\ 12044961713Sgirish } 12144961713Sgirish 12244961713Sgirish #define ZCP_DMA_THRES_INVALID 0x10 12344961713Sgirish #define ZCP_BAM_REGION_INVALID 0x11 12444961713Sgirish #define ZCP_ROW_INDEX_INVALID 0x12 12544961713Sgirish #define ZCP_SFLOW_ATTR_INVALID 0x13 12644961713Sgirish #define ZCP_DFLOW_ATTR_INVALID 0x14 12744961713Sgirish #define ZCP_FLOW_ID_INVALID 0x15 12844961713Sgirish #define ZCP_BAM_BANK_INVALID 0x16 12944961713Sgirish #define ZCP_BAM_WORD_EN_INVALID 0x17 13044961713Sgirish 13144961713Sgirish #define NPI_ZCP_OPCODE_INVALID ((ZCP_BLK_ID << 8) | OPCODE_INVALID) 13244961713Sgirish #define NPI_ZCP_CONFIG_INVALID ((ZCP_BLK_ID << 8) | CONFIG_INVALID) 13344961713Sgirish #define NPI_ZCP_DMA_THRES_INVALID ((ZCP_BLK_ID << 8) |\ 13444961713Sgirish ZCP_DMA_THRES_INVALID) 13544961713Sgirish #define NPI_ZCP_BAM_REGION_INVALID ((ZCP_BLK_ID << 8) |\ 13644961713Sgirish ZCP_BAM_REGION_INVALID) 13744961713Sgirish #define NPI_ZCP_ROW_INDEX_INVALID ((ZCP_BLK_ID << 8) |\ 13844961713Sgirish ZCP_ROW_INDEX_INVALID) 13944961713Sgirish #define NPI_ZCP_SFLOW_ATTR_INVALID ((ZCP_BLK_ID << 8) |\ 14044961713Sgirish ZCP_SFLOW_ATTR_INVALID) 14144961713Sgirish #define NPI_ZCP_DFLOW_ATTR_INVALID ((ZCP_BLK_ID << 8) |\ 14244961713Sgirish ZCP_DFLOW_ATTR_INVALID) 14344961713Sgirish #define NPI_ZCP_FLOW_ID_INVALID ((ZCP_BLK_ID << 8) |\ 14444961713Sgirish ZCP_FLOW_ID_INVALID) 14544961713Sgirish #define NPI_ZCP_MEM_WRITE_FAILED ((ZCP_BLK_ID << 8) | WRITE_FAILED) 14644961713Sgirish #define NPI_ZCP_MEM_READ_FAILED ((ZCP_BLK_ID << 8) | READ_FAILED) 14744961713Sgirish #define NPI_ZCP_BAM_BANK_INVALID ((ZCP_BLK_ID << 8) |\ 14844961713Sgirish (ZCP_BAM_BANK_INVALID)) 14944961713Sgirish #define NPI_ZCP_BAM_WORD_EN_INVALID ((ZCP_BLK_ID << 8) |\ 15044961713Sgirish (ZCP_BAM_WORD_EN_INVALID)) 15144961713Sgirish #define NPI_ZCP_PORT_INVALID(portn) ((ZCP_BLK_ID << 8) | PORT_INVALID |\ 15244961713Sgirish (portn << 12)) 15344961713Sgirish 15444961713Sgirish /* ZCP HW NPI Prototypes */ 15544961713Sgirish npi_status_t npi_zcp_config(npi_handle_t, config_op_t, 15644961713Sgirish zcp_config_t); 15744961713Sgirish npi_status_t npi_zcp_iconfig(npi_handle_t, config_op_t, 15844961713Sgirish zcp_iconfig_t); 15944961713Sgirish npi_status_t npi_zcp_get_istatus(npi_handle_t, zcp_iconfig_t *); 16044961713Sgirish npi_status_t npi_zcp_clear_istatus(npi_handle_t); 16144961713Sgirish npi_status_t npi_zcp_set_dma_thresh(npi_handle_t, uint16_t); 16244961713Sgirish npi_status_t npi_zcp_set_bam_region(npi_handle_t, 16344961713Sgirish zcp_buf_region_t, 16444961713Sgirish zcp_bam_region_reg_t *); 16544961713Sgirish npi_status_t npi_zcp_set_sdt_region(npi_handle_t, 16644961713Sgirish zcp_buf_region_t, uint16_t); 16744961713Sgirish npi_status_t npi_zcp_tt_static_entry(npi_handle_t, io_op_t, 16844961713Sgirish uint16_t, tte_sflow_attr_mask_t, 16944961713Sgirish tte_sflow_attr_t *); 17044961713Sgirish npi_status_t npi_zcp_tt_dynamic_entry(npi_handle_t, io_op_t, 17144961713Sgirish uint16_t, tte_dflow_attr_mask_t, 17244961713Sgirish tte_dflow_attr_t *); 17344961713Sgirish npi_status_t npi_zcp_tt_bam_entry(npi_handle_t, io_op_t, 17444961713Sgirish uint16_t, uint8_t, 17544961713Sgirish uint8_t, zcp_ram_unit_t *); 17644961713Sgirish npi_status_t npi_zcp_tt_cfifo_entry(npi_handle_t, io_op_t, 17744961713Sgirish uint8_t, uint16_t, 17844961713Sgirish zcp_ram_unit_t *); 17944961713Sgirish 18044961713Sgirish npi_status_t npi_zcp_rest_cfifo_port(npi_handle_t, uint8_t); 18144961713Sgirish npi_status_t npi_zcp_rest_cfifo_all(npi_handle_t); 18244961713Sgirish 18344961713Sgirish #ifdef __cplusplus 18444961713Sgirish } 18544961713Sgirish #endif 18644961713Sgirish 18744961713Sgirish #endif /* _NPI_ZCP_H */ 188