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