xref: /illumos-gate/usr/src/uts/common/io/nxge/npi/npi_zcp.h (revision 6f45ec7b)
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