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 /*
220dc2366fSVenugopal Iyer  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
2344961713Sgirish  * Use is subject to license terms.
2444961713Sgirish  */
2544961713Sgirish 
2644961713Sgirish #ifndef	_SYS_NXGE_NXGE_IMPL_H
2744961713Sgirish #define	_SYS_NXGE_NXGE_IMPL_H
2844961713Sgirish 
2944961713Sgirish #ifdef	__cplusplus
3044961713Sgirish extern "C" {
3144961713Sgirish #endif
3244961713Sgirish 
3344961713Sgirish /*
3444961713Sgirish  * NIU HV API version definitions.
354df55fdeSJanie Lu  *
364df55fdeSJanie Lu  * If additional major (HV API) is to be supported,
374df55fdeSJanie Lu  * please increment NIU_MAJOR_HI.
384df55fdeSJanie Lu  * If additional minor # is to be supported,
394df55fdeSJanie Lu  * please increment NIU_MINOR_HI.
4044961713Sgirish  */
414df55fdeSJanie Lu #define	NIU_MAJOR_HI		2
424df55fdeSJanie Lu #define	NIU_MINOR_HI		1
4344961713Sgirish #define	NIU_MAJOR_VER		1
4444961713Sgirish #define	NIU_MINOR_VER		1
454df55fdeSJanie Lu #define	NIU_MAJOR_VER_2		2
4644961713Sgirish 
47da14cebeSEric Cheng #if defined(sun4v)
48da14cebeSEric Cheng 
4944961713Sgirish /*
5044961713Sgirish  * NIU HV API v1.0 definitions
5144961713Sgirish  */
5244961713Sgirish #define	N2NIU_RX_LP_CONF		0x142
5344961713Sgirish #define	N2NIU_RX_LP_INFO		0x143
5444961713Sgirish #define	N2NIU_TX_LP_CONF		0x144
5544961713Sgirish #define	N2NIU_TX_LP_INFO		0x145
5644961713Sgirish 
57da14cebeSEric Cheng #endif /* defined(sun4v) */
58da14cebeSEric Cheng 
5944961713Sgirish #ifndef _ASM
6044961713Sgirish 
6144961713Sgirish #include	<sys/types.h>
6244961713Sgirish #include	<sys/byteorder.h>
6344961713Sgirish #include	<sys/debug.h>
6444961713Sgirish #include	<sys/stropts.h>
6544961713Sgirish #include	<sys/stream.h>
6644961713Sgirish #include	<sys/strlog.h>
6744961713Sgirish #include	<sys/strsubr.h>
6844961713Sgirish #include	<sys/cmn_err.h>
6944961713Sgirish #include	<sys/vtrace.h>
7044961713Sgirish #include	<sys/kmem.h>
7144961713Sgirish #include	<sys/ddi.h>
7244961713Sgirish #include	<sys/sunddi.h>
7344961713Sgirish #include	<sys/strsun.h>
7444961713Sgirish #include	<sys/stat.h>
7544961713Sgirish #include	<sys/cpu.h>
7644961713Sgirish #include	<sys/kstat.h>
7744961713Sgirish #include	<inet/common.h>
7844961713Sgirish #include	<inet/ip.h>
7944961713Sgirish #include	<sys/dlpi.h>
8044961713Sgirish #include	<inet/nd.h>
8144961713Sgirish #include	<netinet/in.h>
8244961713Sgirish #include	<sys/ethernet.h>
8344961713Sgirish #include	<sys/vlan.h>
8444961713Sgirish #include	<sys/pci.h>
8544961713Sgirish #include	<sys/taskq.h>
8644961713Sgirish #include	<sys/atomic.h>
8744961713Sgirish 
8844961713Sgirish #include 	<sys/nxge/nxge_defs.h>
8944961713Sgirish #include 	<sys/nxge/nxge_hw.h>
9044961713Sgirish #include 	<sys/nxge/nxge_mac.h>
9144961713Sgirish #include	<sys/nxge/nxge_mii.h>
9244961713Sgirish #include	<sys/nxge/nxge_fm.h>
9344961713Sgirish #include	<sys/netlb.h>
9444961713Sgirish 
9544961713Sgirish #include	<sys/ddi_intr.h>
96da14cebeSEric Cheng #include 	<sys/mac_provider.h>
9714ea4bb7Ssd #include	<sys/mac_ether.h>
9844961713Sgirish 
9944961713Sgirish #if	defined(sun4v)
10044961713Sgirish #include	<sys/hypervisor_api.h>
10144961713Sgirish #include 	<sys/machsystm.h>
10244961713Sgirish #include 	<sys/hsvc.h>
10344961713Sgirish #endif
10444961713Sgirish 
1051bd6825cSml #include 	<sys/dld.h>
1061bd6825cSml 
10744961713Sgirish /*
10844961713Sgirish  * Handy macros (taken from bge driver)
10944961713Sgirish  */
11044961713Sgirish #define	RBR_SIZE			4
11144961713Sgirish #define	DMA_COMMON_CHANNEL(area)	((area.dma_channel))
11244961713Sgirish #define	DMA_COMMON_VPTR(area)		((area.kaddrp))
11344961713Sgirish #define	DMA_COMMON_VPTR_INDEX(area, index)	\
11444961713Sgirish 					(((char *)(area.kaddrp)) + \
11544961713Sgirish 					(index * RBR_SIZE))
11644961713Sgirish #define	DMA_COMMON_HANDLE(area)		((area.dma_handle))
11744961713Sgirish #define	DMA_COMMON_ACC_HANDLE(area)	((area.acc_handle))
11844961713Sgirish #define	DMA_COMMON_IOADDR(area)		((area.dma_cookie.dmac_laddress))
11944961713Sgirish #define	DMA_COMMON_IOADDR_INDEX(area, index)	\
12044961713Sgirish 					((area.dma_cookie.dmac_laddress) + \
12144961713Sgirish 						(index * RBR_SIZE))
12244961713Sgirish 
12344961713Sgirish #define	DMA_NPI_HANDLE(area)		((area.npi_handle)
12444961713Sgirish 
12544961713Sgirish #define	DMA_COMMON_SYNC(area, flag)	((void) ddi_dma_sync((area).dma_handle,\
12644961713Sgirish 						(area).offset, (area).alength, \
12744961713Sgirish 						(flag)))
12844961713Sgirish #define	DMA_COMMON_SYNC_OFFSET(area, bufoffset, len, flag)	\
12944961713Sgirish 					((void) ddi_dma_sync((area).dma_handle,\
13044961713Sgirish 					(area.offset + bufoffset), len, \
13144961713Sgirish 					(flag)))
13244961713Sgirish 
13344961713Sgirish #define	DMA_COMMON_SYNC_RBR_DESC(area, index, flag)	\
13444961713Sgirish 				((void) ddi_dma_sync((area).dma_handle,\
13544961713Sgirish 				(index * RBR_SIZE), RBR_SIZE,	\
13644961713Sgirish 				(flag)))
13744961713Sgirish 
13844961713Sgirish #define	DMA_COMMON_SYNC_RBR_DESC_MULTI(area, index, count, flag)	\
13944961713Sgirish 			((void) ddi_dma_sync((area).dma_handle,\
14044961713Sgirish 			(index * RBR_SIZE), count * RBR_SIZE,	\
14144961713Sgirish 				(flag)))
14244961713Sgirish #define	DMA_COMMON_SYNC_ENTRY(area, index, flag)	\
14344961713Sgirish 				((void) ddi_dma_sync((area).dma_handle,\
14444961713Sgirish 				(index * (area).block_size),	\
14544961713Sgirish 				(area).block_size, \
14644961713Sgirish 				(flag)))
14744961713Sgirish 
14844961713Sgirish #define	NEXT_ENTRY(index, wrap)		((index + 1) & wrap)
14944961713Sgirish #define	NEXT_ENTRY_PTR(ptr, first, last)	\
15044961713Sgirish 					((ptr == last) ? first : (ptr + 1))
15144961713Sgirish 
15244961713Sgirish /*
15344961713Sgirish  * NPI related macros
15444961713Sgirish  */
15544961713Sgirish #define	NXGE_DEV_NPI_HANDLE(nxgep)	(nxgep->npi_handle)
15644961713Sgirish 
15744961713Sgirish #define	NPI_PCI_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_pci_handle.regh = ah)
15844961713Sgirish #define	NPI_PCI_ADD_HANDLE_SET(nxgep, ap) (nxgep->npi_pci_handle.regp = ap)
15944961713Sgirish 
16044961713Sgirish #define	NPI_ACC_HANDLE_SET(nxgep, ah)	(nxgep->npi_handle.regh = ah)
16144961713Sgirish #define	NPI_ADD_HANDLE_SET(nxgep, ap)	\
16244961713Sgirish 		nxgep->npi_handle.is_vraddr = B_FALSE;	\
16344961713Sgirish 		nxgep->npi_handle.function.instance = nxgep->instance;   \
16444961713Sgirish 		nxgep->npi_handle.function.function = nxgep->function_num;   \
16544961713Sgirish 		nxgep->npi_handle.nxgep = (void *) nxgep;   \
16644961713Sgirish 		nxgep->npi_handle.regp = ap;
16744961713Sgirish 
16844961713Sgirish #define	NPI_REG_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_reg_handle.regh = ah)
16944961713Sgirish #define	NPI_REG_ADD_HANDLE_SET(nxgep, ap)	\
17044961713Sgirish 		nxgep->npi_reg_handle.is_vraddr = B_FALSE;	\
17144961713Sgirish 		nxgep->npi_handle.function.instance = nxgep->instance;   \
17244961713Sgirish 		nxgep->npi_handle.function.function = nxgep->function_num;   \
17344961713Sgirish 		nxgep->npi_reg_handle.nxgep = (void *) nxgep;   \
17444961713Sgirish 		nxgep->npi_reg_handle.regp = ap;
17544961713Sgirish 
17644961713Sgirish #define	NPI_MSI_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_msi_handle.regh = ah)
17744961713Sgirish #define	NPI_MSI_ADD_HANDLE_SET(nxgep, ap) (nxgep->npi_msi_handle.regp = ap)
17844961713Sgirish 
17944961713Sgirish #define	NPI_VREG_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_vreg_handle.regh = ah)
18044961713Sgirish #define	NPI_VREG_ADD_HANDLE_SET(nxgep, ap)	\
18144961713Sgirish 		nxgep->npi_vreg_handle.is_vraddr = B_TRUE; \
18244961713Sgirish 		nxgep->npi_handle.function.instance = nxgep->instance;   \
18344961713Sgirish 		nxgep->npi_handle.function.function = nxgep->function_num;   \
18444961713Sgirish 		nxgep->npi_vreg_handle.nxgep = (void *) nxgep;   \
18544961713Sgirish 		nxgep->npi_vreg_handle.regp = ap;
18644961713Sgirish 
18744961713Sgirish #define	NPI_V2REG_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_v2reg_handle.regh = ah)
18844961713Sgirish #define	NPI_V2REG_ADD_HANDLE_SET(nxgep, ap)	\
18944961713Sgirish 		nxgep->npi_v2reg_handle.is_vraddr = B_TRUE; \
19044961713Sgirish 		nxgep->npi_handle.function.instance = nxgep->instance;   \
19144961713Sgirish 		nxgep->npi_handle.function.function = nxgep->function_num;   \
19244961713Sgirish 		nxgep->npi_v2reg_handle.nxgep = (void *) nxgep;   \
19344961713Sgirish 		nxgep->npi_v2reg_handle.regp = ap;
19444961713Sgirish 
19544961713Sgirish #define	NPI_PCI_ACC_HANDLE_GET(nxgep) (nxgep->npi_pci_handle.regh)
19644961713Sgirish #define	NPI_PCI_ADD_HANDLE_GET(nxgep) (nxgep->npi_pci_handle.regp)
19744961713Sgirish #define	NPI_ACC_HANDLE_GET(nxgep) (nxgep->npi_handle.regh)
19844961713Sgirish #define	NPI_ADD_HANDLE_GET(nxgep) (nxgep->npi_handle.regp)
19944961713Sgirish #define	NPI_REG_ACC_HANDLE_GET(nxgep) (nxgep->npi_reg_handle.regh)
20044961713Sgirish #define	NPI_REG_ADD_HANDLE_GET(nxgep) (nxgep->npi_reg_handle.regp)
20144961713Sgirish #define	NPI_MSI_ACC_HANDLE_GET(nxgep) (nxgep->npi_msi_handle.regh)
20244961713Sgirish #define	NPI_MSI_ADD_HANDLE_GET(nxgep) (nxgep->npi_msi_handle.regp)
20344961713Sgirish #define	NPI_VREG_ACC_HANDLE_GET(nxgep) (nxgep->npi_vreg_handle.regh)
20444961713Sgirish #define	NPI_VREG_ADD_HANDLE_GET(nxgep) (nxgep->npi_vreg_handle.regp)
20544961713Sgirish #define	NPI_V2REG_ACC_HANDLE_GET(nxgep) (nxgep->npi_v2reg_handle.regh)
20644961713Sgirish #define	NPI_V2REG_ADD_HANDLE_GET(nxgep) (nxgep->npi_v2reg_handle.regp)
20744961713Sgirish 
20844961713Sgirish #define	NPI_DMA_ACC_HANDLE_SET(dmap, ah) (dmap->npi_handle.regh = ah)
20944961713Sgirish #define	NPI_DMA_ACC_HANDLE_GET(dmap) 	(dmap->npi_handle.regh)
21044961713Sgirish 
21144961713Sgirish /*
21244961713Sgirish  * DMA handles.
21344961713Sgirish  */
21444961713Sgirish #define	NXGE_DESC_D_HANDLE_GET(desc)	(desc.dma_handle)
21544961713Sgirish #define	NXGE_DESC_D_IOADD_GET(desc)	(desc.dma_cookie.dmac_laddress)
21644961713Sgirish #define	NXGE_DMA_IOADD_GET(dma_cookie) (dma_cookie.dmac_laddress)
21744961713Sgirish #define	NXGE_DMA_AREA_IOADD_GET(dma_area) (dma_area.dma_cookie.dmac_laddress)
21844961713Sgirish 
21944961713Sgirish #define	LDV_ON(ldv, vector)	((vector >> ldv) & 0x1)
22044961713Sgirish #define	LDV2_ON_1(ldv, vector)	((vector >> (ldv - 64)) & 0x1)
22144961713Sgirish #define	LDV2_ON_2(ldv, vector)	(((vector >> 5) >> (ldv - 64)) & 0x1)
22244961713Sgirish 
22344961713Sgirish typedef uint32_t		nxge_status_t;
22444961713Sgirish 
22544961713Sgirish typedef enum  {
22644961713Sgirish 	IDLE,
22744961713Sgirish 	PROGRESS,
22844961713Sgirish 	CONFIGURED
22944961713Sgirish } dev_func_shared_t;
23044961713Sgirish 
23144961713Sgirish typedef enum  {
23244961713Sgirish 	DVMA,
23344961713Sgirish 	DMA,
23444961713Sgirish 	SDMA
23544961713Sgirish } dma_method_t;
23644961713Sgirish 
23744961713Sgirish typedef enum  {
23844961713Sgirish 	BKSIZE_4K,
23944961713Sgirish 	BKSIZE_8K,
24044961713Sgirish 	BKSIZE_16K,
24144961713Sgirish 	BKSIZE_32K
24244961713Sgirish } nxge_rx_block_size_t;
24344961713Sgirish 
24444961713Sgirish #ifdef TX_ONE_BUF
24544961713Sgirish #define	TX_BCOPY_MAX 1514
24644961713Sgirish #else
24744961713Sgirish #if	defined(sun4v) && defined(NIU_LP_WORKAROUND)
24844961713Sgirish #define	TX_BCOPY_MAX	4096
24944961713Sgirish #define	TX_BCOPY_SIZE	4096
25044961713Sgirish #else
25144961713Sgirish #define	TX_BCOPY_MAX	2048
25244961713Sgirish #define	TX_BCOPY_SIZE	2048
25344961713Sgirish #endif
25444961713Sgirish #endif
25544961713Sgirish 
25644961713Sgirish #define	TX_STREAM_MIN 512
25744961713Sgirish #define	TX_FASTDVMA_MIN 1024
25844961713Sgirish 
25953f3d8ecSyc /*
26053f3d8ecSyc  * Send repeated FMA ereports or display messages about some non-fatal
26153f3d8ecSyc  * hardware errors only the the first NXGE_ERROR_SHOW_MAX -1 times
26253f3d8ecSyc  */
26353f3d8ecSyc #define	NXGE_ERROR_SHOW_MAX	2
26453f3d8ecSyc 
26544961713Sgirish 
26644961713Sgirish /*
26744961713Sgirish  * Defaults
26844961713Sgirish  */
2697b26d9ffSSantwona Behera #define	NXGE_RDC_RCR_THRESHOLD		32
2707b26d9ffSSantwona Behera #define	NXGE_RDC_RCR_TIMEOUT		8
27144961713Sgirish 
27214ea4bb7Ssd #define	NXGE_RDC_RCR_THRESHOLD_MAX	1024
27344961713Sgirish #define	NXGE_RDC_RCR_TIMEOUT_MAX	64
2747b26d9ffSSantwona Behera #define	NXGE_RDC_RCR_THRESHOLD_MIN	8
27544961713Sgirish #define	NXGE_RDC_RCR_TIMEOUT_MIN	1
27644961713Sgirish #define	NXGE_RCR_FULL_HEADER		1
27744961713Sgirish 
27844961713Sgirish #define	NXGE_IS_VLAN_PACKET(ptr)				\
27944961713Sgirish 	((((struct ether_vlan_header *)ptr)->ether_tpid) ==	\
28044961713Sgirish 	htons(VLAN_ETHERTYPE))
28144961713Sgirish 
28244961713Sgirish typedef enum {
28344961713Sgirish 	NONE,
28444961713Sgirish 	SMALL,
28544961713Sgirish 	MEDIUM,
28644961713Sgirish 	LARGE
28744961713Sgirish } dma_size_t;
28844961713Sgirish 
28944961713Sgirish typedef enum {
29044961713Sgirish 	USE_NONE,
29144961713Sgirish 	USE_BCOPY,
29244961713Sgirish 	USE_DVMA,
29344961713Sgirish 	USE_DMA,
29444961713Sgirish 	USE_SDMA
29544961713Sgirish } dma_type_t;
29644961713Sgirish 
29744961713Sgirish typedef enum {
29844961713Sgirish 	NOT_IN_USE,
29944961713Sgirish 	HDR_BUF,
30044961713Sgirish 	MTU_BUF,
30144961713Sgirish 	RE_ASSEMBLY_BUF,
30244961713Sgirish 	FREE_BUF
30344961713Sgirish } rx_page_state_t;
30444961713Sgirish 
30544961713Sgirish struct _nxge_block_mv_t {
30644961713Sgirish 	uint32_t msg_type;
30744961713Sgirish 	dma_type_t dma_type;
30844961713Sgirish };
30944961713Sgirish 
31044961713Sgirish typedef struct _nxge_block_mv_t nxge_block_mv_t, *p_nxge_block_mv_t;
31144961713Sgirish 
31244961713Sgirish typedef enum {
31359ac0c16Sdavemq 	NIU_TYPE_NONE = 0,
31459ac0c16Sdavemq 
31500161856Syc 	/* QGC NIC */
31659ac0c16Sdavemq 	NEPTUNE_4_1GC =
31759ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER |
31859ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 4) |
31959ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 8) |
32059ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 12)),
32159ac0c16Sdavemq 
32200161856Syc 	/* Huron: 2 fiber XAUI cards */
32359ac0c16Sdavemq 	NEPTUNE_2_10GF =
32459ac0c16Sdavemq 	    (NXGE_PORT_10G_FIBRE |
32559ac0c16Sdavemq 	    (NXGE_PORT_10G_FIBRE << 4) |
32659ac0c16Sdavemq 	    (NXGE_PORT_NONE << 8) |
32759ac0c16Sdavemq 	    (NXGE_PORT_NONE << 12)),
32859ac0c16Sdavemq 
32900161856Syc 	/* Huron: port0 is a TN1010 copper XAUI */
33000161856Syc 	NEPTUNE_1_TN1010 =
33100161856Syc 	    (NXGE_PORT_TN1010 |
33200161856Syc 	    (NXGE_PORT_NONE << 4) |
33300161856Syc 	    (NXGE_PORT_NONE << 8) |
33400161856Syc 	    (NXGE_PORT_NONE << 12)),
33500161856Syc 
33600161856Syc 	/* Huron: port1 is a TN1010 copper XAUI */
33700161856Syc 	NEPTUNE_1_NONE_1_TN1010 =
33800161856Syc 	    (NXGE_PORT_NONE |
33900161856Syc 	    (NXGE_PORT_TN1010 << 4) |
34000161856Syc 	    (NXGE_PORT_NONE << 8) |
34100161856Syc 	    (NXGE_PORT_NONE << 12)),
34200161856Syc 
34300161856Syc 	/* Huron: 2 TN1010 copper XAUI cards */
34400161856Syc 	NEPTUNE_2_TN1010 =
34500161856Syc 	    (NXGE_PORT_TN1010 |
34600161856Syc 	    (NXGE_PORT_TN1010 << 4) |
34700161856Syc 	    (NXGE_PORT_NONE << 8) |
34800161856Syc 	    (NXGE_PORT_NONE << 12)),
34900161856Syc 
35000161856Syc 	/* Huron: port0 is fiber XAUI, port1 is copper XAUI */
35100161856Syc 	NEPTUNE_1_10GF_1_TN1010 =
35200161856Syc 	    (NXGE_PORT_10G_FIBRE |
35300161856Syc 	    (NXGE_PORT_TN1010 << 4) |
35400161856Syc 	    (NXGE_PORT_NONE << 8) |
35500161856Syc 	    (NXGE_PORT_NONE << 12)),
35600161856Syc 
35700161856Syc 	/* Huron: port0 is copper XAUI, port1 is fiber XAUI */
35800161856Syc 	NEPTUNE_1_TN1010_1_10GF =
35900161856Syc 	    (NXGE_PORT_TN1010 |
36000161856Syc 	    (NXGE_PORT_10G_FIBRE << 4) |
36100161856Syc 	    (NXGE_PORT_NONE << 8) |
36200161856Syc 	    (NXGE_PORT_NONE << 12)),
36300161856Syc 
36400161856Syc 	/* Maramba: port0 and port1 are fiber XAUIs */
36559ac0c16Sdavemq 	NEPTUNE_2_10GF_2_1GC =
36659ac0c16Sdavemq 	    (NXGE_PORT_10G_FIBRE |
36759ac0c16Sdavemq 	    (NXGE_PORT_10G_FIBRE << 4) |
36859ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 8) |
36959ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 12)),
37059ac0c16Sdavemq 
37100161856Syc 	/* Maramba: port0 and port1 are copper TN1010 XAUIs */
37200161856Syc 	NEPTUNE_2_TN1010_2_1GC =
37300161856Syc 	    (NXGE_PORT_TN1010 |
37400161856Syc 	    (NXGE_PORT_TN1010 << 4) |
37500161856Syc 	    (NXGE_PORT_1G_COPPER << 8) |
37600161856Syc 	    (NXGE_PORT_1G_COPPER << 12)),
37700161856Syc 
37800161856Syc 	/* Maramba: port0 is copper XAUI, port1 is Fiber XAUI */
37900161856Syc 	NEPTUNE_1_TN1010_1_10GF_2_1GC =
38000161856Syc 	    (NXGE_PORT_TN1010 |
38100161856Syc 	    (NXGE_PORT_10G_FIBRE << 4) |
38200161856Syc 	    (NXGE_PORT_1G_COPPER << 8) |
38300161856Syc 	    (NXGE_PORT_1G_COPPER << 12)),
38400161856Syc 
38500161856Syc 	/* Maramba: port0 is fiber XAUI, port1 is copper XAUI */
38600161856Syc 	NEPTUNE_1_10GF_1_TN1010_2_1GC =
38700161856Syc 	    (NXGE_PORT_10G_FIBRE |
38800161856Syc 	    (NXGE_PORT_TN1010 << 4) |
38900161856Syc 	    (NXGE_PORT_1G_COPPER << 8) |
39000161856Syc 	    (NXGE_PORT_1G_COPPER << 12)),
39100161856Syc 
39200161856Syc 	/* Maramba: port0 is fiber XAUI */
39359ac0c16Sdavemq 	NEPTUNE_1_10GF_3_1GC =
39459ac0c16Sdavemq 	    (NXGE_PORT_10G_FIBRE |
39559ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 4) |
39659ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 8) |
39759ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 12)),
39859ac0c16Sdavemq 
39900161856Syc 	/* Maramba: port0 is TN1010 copper XAUI */
40000161856Syc 	NEPTUNE_1_TN1010_3_1GC =
40100161856Syc 	    (NXGE_PORT_TN1010 |
40200161856Syc 	    (NXGE_PORT_1G_COPPER << 4) |
40300161856Syc 	    (NXGE_PORT_1G_COPPER << 8) |
40400161856Syc 	    (NXGE_PORT_1G_COPPER << 12)),
40500161856Syc 
40600161856Syc 	/* Maramba: port1 is fiber XAUI */
40759ac0c16Sdavemq 	NEPTUNE_1_1GC_1_10GF_2_1GC =
40859ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER |
40959ac0c16Sdavemq 	    (NXGE_PORT_10G_FIBRE << 4) |
41059ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 8) |
41159ac0c16Sdavemq 	    (NXGE_PORT_1G_COPPER << 12)),
41259ac0c16Sdavemq 
41300161856Syc 	/* Maramba: port1 is TN1010 copper XAUI */
41400161856Syc 	NEPTUNE_1_1GC_1_TN1010_2_1GC =
41500161856Syc 	    (NXGE_PORT_1G_COPPER |
41600161856Syc 	    (NXGE_PORT_TN1010 << 4) |
41700161856Syc 	    (NXGE_PORT_1G_COPPER << 8) |
41800161856Syc 	    (NXGE_PORT_1G_COPPER << 12)),
41900161856Syc 
42059a835ddSjoycey 	NEPTUNE_2_1GRF =
42159a835ddSjoycey 	    (NXGE_PORT_NONE |
42259a835ddSjoycey 	    (NXGE_PORT_NONE << 4) |
42359a835ddSjoycey 	    (NXGE_PORT_1G_RGMII_FIBER << 8) |
42459a835ddSjoycey 	    (NXGE_PORT_1G_RGMII_FIBER << 12)),
42559a835ddSjoycey 
42659a835ddSjoycey 	NEPTUNE_2_10GF_2_1GRF =
42759a835ddSjoycey 	    (NXGE_PORT_10G_FIBRE |
42859a835ddSjoycey 	    (NXGE_PORT_10G_FIBRE << 4) |
42959a835ddSjoycey 	    (NXGE_PORT_1G_RGMII_FIBER << 8) |
43059a835ddSjoycey 	    (NXGE_PORT_1G_RGMII_FIBER << 12)),
43159a835ddSjoycey 
43259ac0c16Sdavemq 	N2_NIU =
43359ac0c16Sdavemq 	    (NXGE_PORT_RSVD |
43459ac0c16Sdavemq 	    (NXGE_PORT_RSVD << 4) |
43559ac0c16Sdavemq 	    (NXGE_PORT_RSVD << 8) |
43659ac0c16Sdavemq 	    (NXGE_PORT_RSVD << 12))
43759ac0c16Sdavemq 
43844961713Sgirish } niu_type_t;
43944961713Sgirish 
4404df55fdeSJanie Lu /*
4414df55fdeSJanie Lu  * The niu_hw_type is for non-PHY related functions
4424df55fdeSJanie Lu  * designed on various versions of NIU chips (i.e. RF/NIU has
4434df55fdeSJanie Lu  * additional classification features and communicates with
4444df55fdeSJanie Lu  * a different SerDes than N2/NIU).
4454df55fdeSJanie Lu  */
4464df55fdeSJanie Lu typedef enum {
4474df55fdeSJanie Lu 	NIU_HW_TYPE_DEFAULT = 0,	/* N2/NIU */
4484df55fdeSJanie Lu 	NIU_HW_TYPE_RF = 1,		/* RF/NIU */
4494df55fdeSJanie Lu } niu_hw_type_t;
4504df55fdeSJanie Lu 
45100161856Syc /*
45200161856Syc  * P_NEPTUNE_GENERIC:
45300161856Syc  *	The cover-all case for Neptune (as opposed to NIU) where we do not
45400161856Syc  *	care the exact platform as we do not do anything that is platform
45500161856Syc  *	specific.
45600161856Syc  * P_NEPTUNE_ATLAS_2PORT:
45700161856Syc  *	Dual Port Fiber Neptune based NIC (2XGF)
45800161856Syc  * P_NEPTUNE_ATLAS_4PORT:
45900161856Syc  *	Quad Port Copper Neptune based NIC (QGC)
46000161856Syc  * P_NEPTUNE_NIU:
46100161856Syc  *	This is NIU. Could be Huron, Glendale, Monza or any other NIU based
46200161856Syc  *	platform.
46300161856Syc  */
46459ac0c16Sdavemq typedef enum {
46559ac0c16Sdavemq 	P_NEPTUNE_NONE,
4662d17280bSsbehera 	P_NEPTUNE_GENERIC,
4672e59129aSraghus 	P_NEPTUNE_ATLAS_2PORT,
4682e59129aSraghus 	P_NEPTUNE_ATLAS_4PORT,
46959ac0c16Sdavemq 	P_NEPTUNE_MARAMBA_P0,
47059ac0c16Sdavemq 	P_NEPTUNE_MARAMBA_P1,
471d81011f0Ssbehera 	P_NEPTUNE_ALONSO,
47223b952a3SSantwona Behera 	P_NEPTUNE_ROCK,
47359ac0c16Sdavemq 	P_NEPTUNE_NIU
47459ac0c16Sdavemq } platform_type_t;
47559ac0c16Sdavemq 
476d81011f0Ssbehera #define	NXGE_IS_VALID_NEPTUNE_TYPE(nxgep) \
477d81011f0Ssbehera 	(((nxgep->platform_type) == P_NEPTUNE_ATLAS_2PORT) || \
478d81011f0Ssbehera 	    ((nxgep->platform_type) == P_NEPTUNE_ATLAS_4PORT) || \
479d81011f0Ssbehera 	    ((nxgep->platform_type) == P_NEPTUNE_MARAMBA_P0) || \
480d81011f0Ssbehera 	    ((nxgep->platform_type) == P_NEPTUNE_MARAMBA_P1) || \
4812d17280bSsbehera 	    ((nxgep->platform_type) == P_NEPTUNE_GENERIC) || \
48223b952a3SSantwona Behera 	    ((nxgep->platform_type) == P_NEPTUNE_ALONSO) || \
48323b952a3SSantwona Behera 	    ((nxgep->platform_type) == P_NEPTUNE_ROCK))
48459ac0c16Sdavemq 
485cb9d3ae6Smisaki #define	NXGE_IS_XAUI_PLATFORM(nxgep) \
486cb9d3ae6Smisaki 	(((nxgep->platform_type) == P_NEPTUNE_NIU) || \
487cb9d3ae6Smisaki 	    ((nxgep->platform_type) == P_NEPTUNE_MARAMBA_P0) || \
488cb9d3ae6Smisaki 	    ((nxgep->platform_type) == P_NEPTUNE_MARAMBA_P1))
489cb9d3ae6Smisaki 
490cb9d3ae6Smisaki 
49144961713Sgirish typedef enum {
49244961713Sgirish 	CFG_DEFAULT = 0,	/* default cfg */
49344961713Sgirish 	CFG_EQUAL,	/* Equal */
49444961713Sgirish 	CFG_FAIR,	/* Equal */
49544961713Sgirish 	CFG_CLASSIFY,
49644961713Sgirish 	CFG_L2_CLASSIFY,
49744961713Sgirish 	CFG_L3_CLASSIFY,
49844961713Sgirish 	CFG_L3_DISTRIBUTE,
49944961713Sgirish 	CFG_L3_WEB,
50044961713Sgirish 	CFG_L3_TCAM,
50144961713Sgirish 	CFG_NOT_SPECIFIED,
50244961713Sgirish 	CFG_CUSTOM	/* Custom */
50344961713Sgirish } cfg_type_t;
50444961713Sgirish 
50544961713Sgirish typedef enum {
50644961713Sgirish 	NO_MSG = 0x0,		/* No message output or storage. */
50744961713Sgirish 	CONSOLE = 0x1,		/* Messages are go to the console. */
50844961713Sgirish 	BUFFER = 0x2,		/* Messages are go to the system buffer. */
50944961713Sgirish 	CON_BUF = 0x3,		/* Messages are go to the console and */
51044961713Sgirish 				/* system buffer. */
51144961713Sgirish 	VERBOSE = 0x4		/* Messages are go out only in VERBOSE node. */
51244961713Sgirish } out_msg_t, *p_out_msg_t;
51344961713Sgirish 
51444961713Sgirish typedef enum {
51544961713Sgirish 	DBG_NO_MSG = 0x0,	/* No message output or storage. */
51644961713Sgirish 	DBG_CONSOLE = 0x1,	/* Messages are go to the console. */
51744961713Sgirish 	DBG_BUFFER = 0x2,	/* Messages are go to the system buffer. */
51844961713Sgirish 	DBG_CON_BUF = 0x3,	/* Messages are go to the console and */
51944961713Sgirish 				/* system buffer. */
52044961713Sgirish 	STR_LOG = 4		/* Sessage sent to streams logging driver. */
52144961713Sgirish } out_dbgmsg_t, *p_out_dbgmsg_t;
52244961713Sgirish 
523678453a8Sspeer typedef enum {
524678453a8Sspeer 	DDI_MEM_ALLOC,		/* default (use ddi_dma_mem_alloc) */
525678453a8Sspeer 	KMEM_ALLOC,		/* use kmem_alloc(). */
526678453a8Sspeer 	CONTIG_MEM_ALLOC	/* use contig_mem_alloc() (N2/NIU only) */
527678453a8Sspeer } buf_alloc_type_t;
52844961713Sgirish 
529678453a8Sspeer #define	BUF_ALLOCATED		0x00000001
530678453a8Sspeer #define	BUF_ALLOCATED_WAIT_FREE	0x00000002
53144961713Sgirish 
53244961713Sgirish typedef struct ether_addr ether_addr_st, *p_ether_addr_t;
53344961713Sgirish typedef struct ether_header ether_header_t, *p_ether_header_t;
53444961713Sgirish typedef queue_t *p_queue_t;
53544961713Sgirish typedef mblk_t *p_mblk_t;
53644961713Sgirish 
53759ac0c16Sdavemq /*
53859ac0c16Sdavemq  * Generic phy table to support different phy types.
53900161856Syc  *
54000161856Syc  * The argument for check_link is nxgep, which is passed to check_link
54100161856Syc  * as an argument to the timer routine.
54259ac0c16Sdavemq  */
54359ac0c16Sdavemq typedef struct _nxge_xcvr_table {
54459ac0c16Sdavemq 	nxge_status_t	(*serdes_init)	();	/* Serdes init routine */
54559ac0c16Sdavemq 	nxge_status_t	(*xcvr_init)	();	/* xcvr init routine */
54659ac0c16Sdavemq 	nxge_status_t	(*link_intr_stop) ();	/* Link intr disable routine */
54759ac0c16Sdavemq 	nxge_status_t	(*link_intr_start) ();	/* Link intr enable routine */
54859ac0c16Sdavemq 	nxge_status_t	(*check_link) ();	/* Link check routine */
54959ac0c16Sdavemq 
55059ac0c16Sdavemq 	uint32_t	xcvr_inuse;
55159ac0c16Sdavemq } nxge_xcvr_table_t, *p_nxge_xcvr_table_t;
55259ac0c16Sdavemq 
55344961713Sgirish /*
55444961713Sgirish  * Common DMA data elements.
55544961713Sgirish  */
556678453a8Sspeer typedef struct _nxge_dma_pool_t nxge_dma_pool_t, *p_nxge_dma_pool_t;
557678453a8Sspeer 
55844961713Sgirish struct _nxge_dma_common_t {
55944961713Sgirish 	uint16_t		dma_channel;
56044961713Sgirish 	void			*kaddrp;
56144961713Sgirish 	void			*last_kaddrp;
56244961713Sgirish 	void			*ioaddr_pp;
56344961713Sgirish 	void			*first_ioaddr_pp;
56444961713Sgirish 	void			*last_ioaddr_pp;
56544961713Sgirish 	ddi_dma_cookie_t 	dma_cookie;
56644961713Sgirish 	uint32_t		ncookies;
56744961713Sgirish 
56844961713Sgirish 	ddi_dma_handle_t	dma_handle;
56944961713Sgirish 	nxge_os_acc_handle_t	acc_handle;
57044961713Sgirish 	npi_handle_t		npi_handle;
57144961713Sgirish 
57244961713Sgirish 	size_t			block_size;
57344961713Sgirish 	uint32_t		nblocks;
57444961713Sgirish 	size_t			alength;
57544961713Sgirish 	uint_t			offset;
57644961713Sgirish 	uint_t			dma_chunk_index;
57744961713Sgirish 	void			*orig_ioaddr_pp;
57844961713Sgirish 	uint64_t		orig_vatopa;
57944961713Sgirish 	void			*orig_kaddrp;
58044961713Sgirish 	size_t			orig_alength;
58144961713Sgirish 	boolean_t		contig_alloc_type;
582678453a8Sspeer 	/*
583678453a8Sspeer 	 * Receive buffers may be allocated using
584678453a8Sspeer 	 * kmem_alloc(). The buffer free function
585678453a8Sspeer 	 * depends on its allocation function.
586678453a8Sspeer 	 */
587678453a8Sspeer 	boolean_t		kmem_alloc_type;
588678453a8Sspeer 	uint32_t		buf_alloc_state;
589678453a8Sspeer 	buf_alloc_type_t	buf_alloc_type;
590678453a8Sspeer 	p_nxge_dma_pool_t	rx_buf_pool_p;
59144961713Sgirish };
59244961713Sgirish 
59344961713Sgirish typedef struct _nxge_t nxge_t, *p_nxge_t;
59444961713Sgirish typedef struct _nxge_dma_common_t nxge_dma_common_t, *p_nxge_dma_common_t;
59544961713Sgirish 
596678453a8Sspeer struct _nxge_dma_pool_t {
59744961713Sgirish 	p_nxge_dma_common_t	*dma_buf_pool_p;
59844961713Sgirish 	uint32_t		ndmas;
59944961713Sgirish 	uint32_t		*num_chunks;
60044961713Sgirish 	boolean_t		buf_allocated;
601678453a8Sspeer };
60244961713Sgirish 
60344961713Sgirish /*
60444961713Sgirish  * Each logical device (69):
60544961713Sgirish  *	- LDG #
60644961713Sgirish  *	- flag bits
60744961713Sgirish  *	- masks.
60844961713Sgirish  *	- interrupt handler function.
60944961713Sgirish  *
61044961713Sgirish  * Generic system interrupt handler with two arguments:
61144961713Sgirish  *	(nxge_sys_intr_t)
61244961713Sgirish  *	Per device instance data structure
61344961713Sgirish  *	Logical group data structure.
61444961713Sgirish  *
61544961713Sgirish  * Logical device interrupt handler with two arguments:
61644961713Sgirish  *	(nxge_ldv_intr_t)
61744961713Sgirish  *	Per device instance data structure
61844961713Sgirish  *	Logical device number
61944961713Sgirish  */
62044961713Sgirish typedef struct	_nxge_ldg_t nxge_ldg_t, *p_nxge_ldg_t;
62144961713Sgirish typedef struct	_nxge_ldv_t nxge_ldv_t, *p_nxge_ldv_t;
622*e3d11eeeSToomas Soome typedef uint_t	(*nxge_sys_intr_t)(char *arg1, char *arg2);
623*e3d11eeeSToomas Soome typedef uint_t	(*nxge_ldv_intr_t)(char *arg1, char *arg2);
62444961713Sgirish 
62544961713Sgirish /*
62644961713Sgirish  * Each logical device Group (64) needs to have the following
62744961713Sgirish  * configurations:
62844961713Sgirish  *	- timer counter (6 bits)
62944961713Sgirish  *	- timer resolution (20 bits, number of system clocks)
63044961713Sgirish  *	- system data (7 bits)
63144961713Sgirish  */
63244961713Sgirish struct _nxge_ldg_t {
63344961713Sgirish 	uint8_t			ldg;		/* logical group number */
63444961713Sgirish 	uint8_t			vldg_index;
63544961713Sgirish 	boolean_t		arm;
63644961713Sgirish 	uint16_t		ldg_timer;	/* counter */
63744961713Sgirish 	uint8_t			func;
63844961713Sgirish 	uint8_t			vector;
63944961713Sgirish 	uint8_t			intdata;
64044961713Sgirish 	uint8_t			nldvs;
64144961713Sgirish 	p_nxge_ldv_t		ldvp;
64244961713Sgirish 	nxge_sys_intr_t		sys_intr_handler;
64344961713Sgirish 	p_nxge_t		nxgep;
6440dc2366fSVenugopal Iyer 	uint32_t		htable_idx;
64544961713Sgirish };
64644961713Sgirish 
64744961713Sgirish struct _nxge_ldv_t {
64844961713Sgirish 	uint8_t			ldg_assigned;
64944961713Sgirish 	uint8_t			ldv;
65044961713Sgirish 	boolean_t		is_rxdma;
65144961713Sgirish 	boolean_t		is_txdma;
65244961713Sgirish 	boolean_t		is_mif;
65344961713Sgirish 	boolean_t		is_mac;
65444961713Sgirish 	boolean_t		is_syserr;
65544961713Sgirish 	boolean_t		use_timer;
65644961713Sgirish 	uint8_t			channel;
65744961713Sgirish 	uint8_t			vdma_index;
65844961713Sgirish 	uint8_t			func;
65944961713Sgirish 	p_nxge_ldg_t		ldgp;
66044961713Sgirish 	uint8_t			ldv_flags;
66144961713Sgirish 	uint8_t			ldv_ldf_masks;
66244961713Sgirish 	nxge_ldv_intr_t		ldv_intr_handler;
66344961713Sgirish 	p_nxge_t		nxgep;
66444961713Sgirish };
66544961713Sgirish 
66644961713Sgirish typedef struct _nxge_logical_page_t {
66744961713Sgirish 	uint16_t		dma;
66844961713Sgirish 	uint16_t		page;
66944961713Sgirish 	boolean_t		valid;
67044961713Sgirish 	uint64_t		mask;
67144961713Sgirish 	uint64_t		value;
67244961713Sgirish 	uint64_t		reloc;
67344961713Sgirish 	uint32_t		handle;
67444961713Sgirish } nxge_logical_page_t, *p_nxge_logical_page_t;
67544961713Sgirish 
67644961713Sgirish /*
67744961713Sgirish  * (Internal) return values from ioctl subroutines.
67844961713Sgirish  */
67944961713Sgirish enum nxge_ioc_reply {
68044961713Sgirish 	IOC_INVAL = -1,				/* bad, NAK with EINVAL	*/
68144961713Sgirish 	IOC_DONE,				/* OK, reply sent	*/
68244961713Sgirish 	IOC_ACK,				/* OK, just send ACK	*/
68344961713Sgirish 	IOC_REPLY,				/* OK, just send reply	*/
68444961713Sgirish 	IOC_RESTART_ACK,			/* OK, restart & ACK	*/
68544961713Sgirish 	IOC_RESTART_REPLY			/* OK, restart & reply	*/
68644961713Sgirish };
68744961713Sgirish 
68844961713Sgirish typedef struct _pci_cfg_t {
68944961713Sgirish 	uint16_t vendorid;
69044961713Sgirish 	uint16_t devid;
69144961713Sgirish 	uint16_t command;
69244961713Sgirish 	uint16_t status;
69344961713Sgirish 	uint8_t  revid;
69444961713Sgirish 	uint8_t  res0;
69544961713Sgirish 	uint16_t junk1;
69644961713Sgirish 	uint8_t  cache_line;
69744961713Sgirish 	uint8_t  latency;
69844961713Sgirish 	uint8_t  header;
69944961713Sgirish 	uint8_t  bist;
70044961713Sgirish 	uint32_t base;
70144961713Sgirish 	uint32_t base14;
70244961713Sgirish 	uint32_t base18;
70344961713Sgirish 	uint32_t base1c;
70444961713Sgirish 	uint32_t base20;
70544961713Sgirish 	uint32_t base24;
70644961713Sgirish 	uint32_t base28;
70744961713Sgirish 	uint32_t base2c;
70844961713Sgirish 	uint32_t base30;
70944961713Sgirish 	uint32_t res1[2];
71044961713Sgirish 	uint8_t int_line;
71144961713Sgirish 	uint8_t int_pin;
71244961713Sgirish 	uint8_t	min_gnt;
71344961713Sgirish 	uint8_t max_lat;
71444961713Sgirish } pci_cfg_t, *p_pci_cfg_t;
71544961713Sgirish 
71644961713Sgirish typedef struct _dev_regs_t {
71744961713Sgirish 	nxge_os_acc_handle_t	nxge_pciregh;	/* PCI config DDI IO handle */
71844961713Sgirish 	p_pci_cfg_t		nxge_pciregp;	/* mapped PCI registers */
71944961713Sgirish 
72044961713Sgirish 	nxge_os_acc_handle_t	nxge_regh;	/* device DDI IO (BAR 0) */
72144961713Sgirish 	void			*nxge_regp;	/* mapped device registers */
72244961713Sgirish 
72344961713Sgirish 	nxge_os_acc_handle_t	nxge_msix_regh;	/* MSI/X DDI handle (BAR 2) */
72444961713Sgirish 	void 			*nxge_msix_regp; /* MSI/X register */
72544961713Sgirish 
72644961713Sgirish 	nxge_os_acc_handle_t	nxge_vir_regh;	/* virtualization (BAR 4) */
72744961713Sgirish 	unsigned char		*nxge_vir_regp;	/* virtualization register */
72844961713Sgirish 
72944961713Sgirish 	nxge_os_acc_handle_t	nxge_vir2_regh;	/* second virtualization */
73044961713Sgirish 	unsigned char		*nxge_vir2_regp; /* second virtualization */
73144961713Sgirish 
73244961713Sgirish 	nxge_os_acc_handle_t	nxge_romh;	/* fcode rom handle */
73344961713Sgirish 	unsigned char		*nxge_romp;	/* fcode pointer */
73444961713Sgirish } dev_regs_t, *p_dev_regs_t;
73544961713Sgirish 
73658324dfcSspeer 
73758324dfcSspeer typedef struct _nxge_mac_addr_t {
73858324dfcSspeer 	ether_addr_t	addr;
73958324dfcSspeer 	uint_t		flags;
74058324dfcSspeer } nxge_mac_addr_t;
74158324dfcSspeer 
74244961713Sgirish /*
74358324dfcSspeer  * The hardware supports 1 unique MAC and 16 alternate MACs (num_mmac)
74458324dfcSspeer  * for each XMAC port and supports 1 unique MAC and 7 alternate MACs
74558324dfcSspeer  * for each BMAC port.  The number of MACs assigned by the factory is
74658324dfcSspeer  * different and is as follows,
74758324dfcSspeer  * 	BMAC port:		   num_factory_mmac = num_mmac = 7
74858324dfcSspeer  *	XMAC port on a 2-port NIC: num_factory_mmac = num_mmac - 1 = 15
74958324dfcSspeer  *	XMAC port on a 4-port NIC: num_factory_mmac = 7
75058324dfcSspeer  * So num_factory_mmac is smaller than num_mmac.  nxge_m_mmac_add uses
75158324dfcSspeer  * num_mmac and nxge_m_mmac_reserve uses num_factory_mmac.
75258324dfcSspeer  *
75358324dfcSspeer  * total_factory_macs is the total number of factory MACs, including
75458324dfcSspeer  * the unique MAC, assigned to a Neptune based NIC card, it is 32.
75544961713Sgirish  */
75644961713Sgirish typedef struct _nxge_mmac_t {
75758324dfcSspeer 	uint8_t		total_factory_macs;
75858324dfcSspeer 	uint8_t		num_mmac;
75958324dfcSspeer 	uint8_t		num_factory_mmac;
76058324dfcSspeer 	nxge_mac_addr_t	mac_pool[XMAC_MAX_ADDR_ENTRY];
76158324dfcSspeer 	ether_addr_t	factory_mac_pool[XMAC_MAX_ADDR_ENTRY];
76258324dfcSspeer 	uint8_t		naddrfree;  /* number of alt mac addr available */
76344961713Sgirish } nxge_mmac_t;
76444961713Sgirish 
76544961713Sgirish /*
76644961713Sgirish  * mmac stats structure
76744961713Sgirish  */
76844961713Sgirish typedef struct _nxge_mmac_stats_t {
76944961713Sgirish 	uint8_t mmac_max_cnt;
77044961713Sgirish 	uint8_t	mmac_avail_cnt;
77144961713Sgirish 	struct ether_addr mmac_avail_pool[16];
77244961713Sgirish } nxge_mmac_stats_t, *p_nxge_mmac_stats_t;
77344961713Sgirish 
774da14cebeSEric Cheng /*
775da14cebeSEric Cheng  * Copied from mac.h. Should be cleaned up by driver.
776da14cebeSEric Cheng  */
777da14cebeSEric Cheng #define	MMAC_SLOT_USED		0x1   /* address slot used */
778da14cebeSEric Cheng #define	MMAC_VENDOR_ADDR	0x2   /* address returned is vendor supplied */
779da14cebeSEric Cheng 
780da14cebeSEric Cheng 
78144961713Sgirish #define	NXGE_MAX_MMAC_ADDRS	32
78244961713Sgirish #define	NXGE_NUM_MMAC_ADDRS	8
78356d930aeSspeer #define	NXGE_NUM_OF_PORTS_QUAD	4
78456d930aeSspeer #define	NXGE_NUM_OF_PORTS_DUAL	2
78556d930aeSspeer 
7862e59129aSraghus #define	NXGE_QGC_LP_BM_STR		"501-7606"
7872e59129aSraghus #define	NXGE_2XGF_LP_BM_STR		"501-7283"
7882e59129aSraghus #define	NXGE_QGC_PEM_BM_STR		"501-7765"
7892e59129aSraghus #define	NXGE_2XGF_PEM_BM_STR		"501-7626"
790d81011f0Ssbehera #define	NXGE_ALONSO_BM_STR		"373-0202-01"
791d81011f0Ssbehera #define	NXGE_ALONSO_MODEL_STR		"SUNW,CP3220"
792321febdeSsbehera #define	NXGE_RFEM_BM_STR		"501-7961-01"
793321febdeSsbehera #define	NXGE_RFEM_MODEL_STR		"SUNW,pcie-rfem"
79459a835ddSjoycey #define	NXGE_ARTM_BM_STR		"375-3544-01"
79559a835ddSjoycey #define	NXGE_ARTM_MODEL_STR		"SUNW,pcie-artm"
79623b952a3SSantwona Behera /* ROCK OBP creates a compatible property for ROCK */
79723b952a3SSantwona Behera #define	NXGE_ROCK_COMPATIBLE		"SUNW,rock-pciex108e,abcd"
79856d930aeSspeer #define	NXGE_EROM_LEN			1048576
79944961713Sgirish 
80044961713Sgirish #include 	<sys/nxge/nxge_common_impl.h>
80144961713Sgirish #include 	<sys/nxge/nxge_common.h>
80244961713Sgirish #include	<sys/nxge/nxge_txc.h>
80344961713Sgirish #include	<sys/nxge/nxge_rxdma.h>
80444961713Sgirish #include	<sys/nxge/nxge_txdma.h>
80544961713Sgirish #include	<sys/nxge/nxge_fflp.h>
80644961713Sgirish #include	<sys/nxge/nxge_ipp.h>
80744961713Sgirish #include	<sys/nxge/nxge_zcp.h>
80844961713Sgirish #include	<sys/nxge/nxge_fzc.h>
80944961713Sgirish #include	<sys/nxge/nxge_flow.h>
81044961713Sgirish #include	<sys/nxge/nxge_virtual.h>
81144961713Sgirish 
81256d930aeSspeer #include	<npi_espc.h>
81356d930aeSspeer #include	<npi_vir.h>
81456d930aeSspeer 
81544961713Sgirish #include 	<sys/nxge/nxge.h>
81644961713Sgirish 
81744961713Sgirish #include	<sys/modctl.h>
81844961713Sgirish #include	<sys/pattr.h>
81944961713Sgirish 
82044961713Sgirish extern int secpolicy_net_config(const cred_t *, boolean_t);
82144961713Sgirish extern void nxge_fm_report_error(p_nxge_t, uint8_t,
82244961713Sgirish 			uint8_t, nxge_fm_ereport_id_t);
82314ea4bb7Ssd extern int fm_check_acc_handle(ddi_acc_handle_t);
82414ea4bb7Ssd extern int fm_check_dma_handle(ddi_dma_handle_t);
82544961713Sgirish 
82644961713Sgirish /* nxge_classify.c */
82744961713Sgirish nxge_status_t nxge_classify_init(p_nxge_t);
82814ea4bb7Ssd nxge_status_t nxge_classify_uninit(p_nxge_t);
82944961713Sgirish nxge_status_t nxge_set_hw_classify_config(p_nxge_t);
83014ea4bb7Ssd nxge_status_t nxge_classify_exit_sw(p_nxge_t);
83144961713Sgirish 
83244961713Sgirish /* nxge_fflp.c */
83344961713Sgirish void nxge_put_tcam(p_nxge_t, p_mblk_t);
83444961713Sgirish void nxge_get_tcam(p_nxge_t, p_mblk_t);
83544961713Sgirish nxge_status_t nxge_classify_init_hw(p_nxge_t);
83644961713Sgirish nxge_status_t nxge_classify_init_sw(p_nxge_t);
83744961713Sgirish nxge_status_t nxge_fflp_ip_class_config_all(p_nxge_t);
83844961713Sgirish nxge_status_t nxge_fflp_ip_class_config(p_nxge_t, tcam_class_t,
83944961713Sgirish 				    uint32_t);
84044961713Sgirish 
84144961713Sgirish nxge_status_t nxge_fflp_ip_class_config_get(p_nxge_t,
84244961713Sgirish 				    tcam_class_t,
84344961713Sgirish 				    uint32_t *);
84444961713Sgirish 
84544961713Sgirish nxge_status_t nxge_cfg_ip_cls_flow_key(p_nxge_t, tcam_class_t,
84644961713Sgirish 				    uint32_t);
84744961713Sgirish 
84844961713Sgirish nxge_status_t nxge_fflp_ip_usr_class_config(p_nxge_t, tcam_class_t,
84944961713Sgirish 				    uint32_t);
85044961713Sgirish 
85144961713Sgirish uint64_t nxge_classify_get_cfg_value(p_nxge_t, uint8_t, uint8_t);
85244961713Sgirish nxge_status_t nxge_add_flow(p_nxge_t, flow_resource_t *);
85344961713Sgirish nxge_status_t nxge_fflp_config_tcam_enable(p_nxge_t);
85444961713Sgirish nxge_status_t nxge_fflp_config_tcam_disable(p_nxge_t);
85544961713Sgirish 
85644961713Sgirish nxge_status_t nxge_fflp_config_hash_lookup_enable(p_nxge_t);
85744961713Sgirish nxge_status_t nxge_fflp_config_hash_lookup_disable(p_nxge_t);
85844961713Sgirish 
85944961713Sgirish nxge_status_t nxge_fflp_config_llc_snap_enable(p_nxge_t);
86044961713Sgirish nxge_status_t nxge_fflp_config_llc_snap_disable(p_nxge_t);
86144961713Sgirish 
86244961713Sgirish nxge_status_t nxge_logical_mac_assign_rdc_table(p_nxge_t, uint8_t);
86344961713Sgirish nxge_status_t nxge_fflp_config_vlan_table(p_nxge_t, uint16_t);
86444961713Sgirish 
86544961713Sgirish nxge_status_t nxge_fflp_set_hash1(p_nxge_t, uint32_t);
86644961713Sgirish 
86744961713Sgirish nxge_status_t nxge_fflp_set_hash2(p_nxge_t, uint16_t);
86844961713Sgirish 
86944961713Sgirish nxge_status_t nxge_fflp_init_hostinfo(p_nxge_t);
87044961713Sgirish 
87144961713Sgirish void nxge_handle_tcam_fragment_bug(p_nxge_t);
8724df55fdeSJanie Lu int nxge_rxclass_ioctl(p_nxge_t, queue_t *, mblk_t *);
8734df55fdeSJanie Lu int nxge_rxhash_ioctl(p_nxge_t, queue_t *, mblk_t *);
8744df55fdeSJanie Lu 
87544961713Sgirish nxge_status_t nxge_fflp_hw_reset(p_nxge_t);
87644961713Sgirish nxge_status_t nxge_fflp_handle_sys_errors(p_nxge_t);
87744961713Sgirish nxge_status_t nxge_zcp_handle_sys_errors(p_nxge_t);
87844961713Sgirish 
87944961713Sgirish /* nxge_kstats.c */
88044961713Sgirish void nxge_init_statsp(p_nxge_t);
88144961713Sgirish void nxge_setup_kstats(p_nxge_t);
882678453a8Sspeer void nxge_setup_rdc_kstats(p_nxge_t, int);
883678453a8Sspeer void nxge_setup_tdc_kstats(p_nxge_t, int);
88444961713Sgirish void nxge_destroy_kstats(p_nxge_t);
88544961713Sgirish int nxge_port_kstat_update(kstat_t *, int);
88644961713Sgirish void nxge_save_cntrs(p_nxge_t);
88744961713Sgirish 
88844961713Sgirish int nxge_m_stat(void *arg, uint_t, uint64_t *);
8890dc2366fSVenugopal Iyer int nxge_rx_ring_stat(mac_ring_driver_t, uint_t, uint64_t *);
8900dc2366fSVenugopal Iyer int nxge_tx_ring_stat(mac_ring_driver_t, uint_t, uint64_t *);
89144961713Sgirish 
89244961713Sgirish /* nxge_hw.c */
89344961713Sgirish void
89444961713Sgirish nxge_hw_ioctl(p_nxge_t, queue_t *, mblk_t *, struct iocblk *);
89544961713Sgirish void nxge_loopback_ioctl(p_nxge_t, queue_t *, mblk_t *, struct iocblk *);
896321febdeSsbehera nxge_status_t nxge_global_reset(p_nxge_t);
897*e3d11eeeSToomas Soome uint_t nxge_intr(char *, char *);
89844961713Sgirish void nxge_intr_enable(p_nxge_t);
89944961713Sgirish void nxge_intr_disable(p_nxge_t);
90044961713Sgirish void nxge_hw_blank(void *arg, time_t, uint_t);
90144961713Sgirish void nxge_hw_id_init(p_nxge_t);
90244961713Sgirish void nxge_hw_init_niu_common(p_nxge_t);
90344961713Sgirish void nxge_intr_hw_enable(p_nxge_t);
90444961713Sgirish void nxge_intr_hw_disable(p_nxge_t);
90544961713Sgirish void nxge_hw_stop(p_nxge_t);
90644961713Sgirish void nxge_check_hw_state(p_nxge_t);
90744961713Sgirish 
90844961713Sgirish void nxge_rxdma_channel_put64(nxge_os_acc_handle_t,
90944961713Sgirish 	void *, uint32_t, uint16_t,
91044961713Sgirish 	uint64_t);
91144961713Sgirish uint64_t nxge_rxdma_channel_get64(nxge_os_acc_handle_t, void *,
91244961713Sgirish 	uint32_t, uint16_t);
91344961713Sgirish 
91444961713Sgirish 
91544961713Sgirish void nxge_get32(p_nxge_t, p_mblk_t);
91644961713Sgirish void nxge_put32(p_nxge_t, p_mblk_t);
91744961713Sgirish 
91844961713Sgirish void nxge_hw_set_mac_modes(p_nxge_t);
91944961713Sgirish 
92044961713Sgirish /* nxge_send.c. */
92144961713Sgirish uint_t nxge_reschedule(caddr_t);
922da14cebeSEric Cheng mblk_t *nxge_tx_ring_send(void *, mblk_t *);
923da14cebeSEric Cheng int nxge_start(p_nxge_t, p_tx_ring_t, p_mblk_t);
92444961713Sgirish 
92544961713Sgirish /* nxge_rxdma.c */
92644961713Sgirish nxge_status_t nxge_rxdma_cfg_rdcgrp_default_rdc(p_nxge_t,
92744961713Sgirish 					    uint8_t, uint8_t);
92844961713Sgirish 
92944961713Sgirish nxge_status_t nxge_rxdma_cfg_port_default_rdc(p_nxge_t,
93044961713Sgirish 				    uint8_t, uint8_t);
93144961713Sgirish nxge_status_t nxge_rxdma_cfg_rcr_threshold(p_nxge_t, uint8_t,
93244961713Sgirish 				    uint16_t);
93344961713Sgirish nxge_status_t nxge_rxdma_cfg_rcr_timeout(p_nxge_t, uint8_t,
93444961713Sgirish 				    uint16_t, uint8_t);
93544961713Sgirish 
93644961713Sgirish /* nxge_ndd.c */
93744961713Sgirish void nxge_get_param_soft_properties(p_nxge_t);
93844961713Sgirish void nxge_copy_hw_default_to_param(p_nxge_t);
93944961713Sgirish void nxge_copy_param_hw_to_config(p_nxge_t);
94044961713Sgirish void nxge_setup_param(p_nxge_t);
94144961713Sgirish void nxge_init_param(p_nxge_t);
94244961713Sgirish void nxge_destroy_param(p_nxge_t);
94344961713Sgirish boolean_t nxge_check_rxdma_rdcgrp_member(p_nxge_t, uint8_t, uint8_t);
94444961713Sgirish boolean_t nxge_check_rxdma_port_member(p_nxge_t, uint8_t);
94544961713Sgirish boolean_t nxge_check_rdcgrp_port_member(p_nxge_t, uint8_t);
94644961713Sgirish 
94744961713Sgirish boolean_t nxge_check_txdma_port_member(p_nxge_t, uint8_t);
94844961713Sgirish 
94944961713Sgirish int nxge_param_get_generic(p_nxge_t, queue_t *, mblk_t *, caddr_t);
95044961713Sgirish int nxge_param_set_generic(p_nxge_t, queue_t *, mblk_t *, char *, caddr_t);
95144961713Sgirish int nxge_get_default(p_nxge_t, queue_t *, p_mblk_t, caddr_t);
95244961713Sgirish int nxge_set_default(p_nxge_t, queue_t *, p_mblk_t, char *, caddr_t);
95344961713Sgirish int nxge_nd_get_names(p_nxge_t, queue_t *, p_mblk_t, caddr_t);
95444961713Sgirish int nxge_mk_mblk_tail_space(p_mblk_t, p_mblk_t *, size_t);
95544961713Sgirish long nxge_strtol(char *, char **, int);
95644961713Sgirish boolean_t nxge_param_get_instance(queue_t *, mblk_t *);
95744961713Sgirish void nxge_param_ioctl(p_nxge_t, queue_t *, mblk_t *, struct iocblk *);
95844961713Sgirish boolean_t nxge_nd_load(caddr_t *, char *, pfi_t, pfi_t, caddr_t);
95944961713Sgirish void nxge_nd_free(caddr_t *);
96044961713Sgirish int nxge_nd_getset(p_nxge_t, queue_t *, caddr_t, p_mblk_t);
96144961713Sgirish 
962321febdeSsbehera nxge_status_t nxge_set_lb_normal(p_nxge_t);
96344961713Sgirish boolean_t nxge_set_lb(p_nxge_t, queue_t *, p_mblk_t);
9641bd6825cSml boolean_t nxge_param_link_update(p_nxge_t);
9651bd6825cSml int nxge_param_set_ip_opt(p_nxge_t, queue_t *, mblk_t *, char *, caddr_t);
9661bd6825cSml int nxge_dld_get_ip_opt(p_nxge_t, caddr_t);
9671bd6825cSml int nxge_param_rx_intr_pkts(p_nxge_t, queue_t *,
9681bd6825cSml 	mblk_t *, char *, caddr_t);
9691bd6825cSml int nxge_param_rx_intr_time(p_nxge_t, queue_t *,
9701bd6825cSml 	mblk_t *, char *, caddr_t);
9711bd6825cSml 
97244961713Sgirish 
97344961713Sgirish /* nxge_virtual.c */
97444961713Sgirish nxge_status_t nxge_cntlops(dev_info_t *, nxge_ctl_enum_t, void *, void *);
97544961713Sgirish void nxge_common_lock_get(p_nxge_t);
97644961713Sgirish void nxge_common_lock_free(p_nxge_t);
97744961713Sgirish 
97844961713Sgirish nxge_status_t nxge_get_config_properties(p_nxge_t);
97944961713Sgirish void nxge_get_xcvr_properties(p_nxge_t);
98044961713Sgirish void nxge_init_vlan_config(p_nxge_t);
98144961713Sgirish void nxge_init_mac_config(p_nxge_t);
98244961713Sgirish 
98344961713Sgirish 
98444961713Sgirish void nxge_init_logical_devs(p_nxge_t);
98544961713Sgirish int nxge_init_ldg_intrs(p_nxge_t);
98644961713Sgirish 
98744961713Sgirish void nxge_set_ldgimgmt(p_nxge_t, uint32_t, boolean_t,
98844961713Sgirish 	uint32_t);
98944961713Sgirish 
99044961713Sgirish void nxge_init_fzc_txdma_channels(p_nxge_t);
99144961713Sgirish 
99244961713Sgirish nxge_status_t nxge_init_fzc_txdma_channel(p_nxge_t, uint16_t,
99344961713Sgirish 	p_tx_ring_t, p_tx_mbox_t);
99444961713Sgirish nxge_status_t nxge_init_fzc_txdma_port(p_nxge_t);
99544961713Sgirish 
996678453a8Sspeer nxge_status_t nxge_init_fzc_rxdma_channel(p_nxge_t, uint16_t);
99744961713Sgirish 
99844961713Sgirish nxge_status_t nxge_init_fzc_rx_common(p_nxge_t);
99944961713Sgirish nxge_status_t nxge_init_fzc_rxdma_port(p_nxge_t);
100044961713Sgirish 
100144961713Sgirish nxge_status_t nxge_init_fzc_rxdma_channel_pages(p_nxge_t,
100244961713Sgirish 	uint16_t, p_rx_rbr_ring_t);
100344961713Sgirish nxge_status_t nxge_init_fzc_rxdma_channel_red(p_nxge_t,
100444961713Sgirish 	uint16_t, p_rx_rcr_ring_t);
100544961713Sgirish 
100644961713Sgirish nxge_status_t nxge_init_fzc_rxdma_channel_clrlog(p_nxge_t,
100744961713Sgirish 	uint16_t, p_rx_rbr_ring_t);
100844961713Sgirish 
100944961713Sgirish 
101044961713Sgirish nxge_status_t nxge_init_fzc_txdma_channel_pages(p_nxge_t,
101144961713Sgirish 	uint16_t, p_tx_ring_t);
101244961713Sgirish 
101344961713Sgirish nxge_status_t nxge_init_fzc_txdma_channel_drr(p_nxge_t, uint16_t,
101444961713Sgirish 	p_tx_ring_t);
101544961713Sgirish 
101644961713Sgirish nxge_status_t nxge_init_fzc_txdma_port(p_nxge_t);
101744961713Sgirish 
101844961713Sgirish void nxge_init_fzc_ldg_num(p_nxge_t);
101944961713Sgirish void nxge_init_fzc_sys_int_data(p_nxge_t);
102044961713Sgirish void nxge_init_fzc_ldg_int_timer(p_nxge_t);
102144961713Sgirish nxge_status_t nxge_intr_mask_mgmt_set(p_nxge_t, boolean_t on);
102244961713Sgirish 
102344961713Sgirish /* MAC functions */
102444961713Sgirish nxge_status_t nxge_mac_init(p_nxge_t);
102544961713Sgirish nxge_status_t nxge_link_init(p_nxge_t);
102644961713Sgirish nxge_status_t nxge_xif_init(p_nxge_t);
102744961713Sgirish nxge_status_t nxge_pcs_init(p_nxge_t);
1028cb9d3ae6Smisaki nxge_status_t nxge_mac_ctrl_init(p_nxge_t);
102944961713Sgirish nxge_status_t nxge_serdes_init(p_nxge_t);
1030d81011f0Ssbehera nxge_status_t nxge_serdes_reset(p_nxge_t);
10312e59129aSraghus nxge_status_t nxge_xcvr_find(p_nxge_t);
10322e59129aSraghus nxge_status_t nxge_get_xcvr_type(p_nxge_t);
103359ac0c16Sdavemq nxge_status_t nxge_setup_xcvr_table(p_nxge_t);
103444961713Sgirish nxge_status_t nxge_xcvr_init(p_nxge_t);
103544961713Sgirish nxge_status_t nxge_tx_mac_init(p_nxge_t);
103644961713Sgirish nxge_status_t nxge_rx_mac_init(p_nxge_t);
103744961713Sgirish nxge_status_t nxge_tx_mac_enable(p_nxge_t);
103844961713Sgirish nxge_status_t nxge_tx_mac_disable(p_nxge_t);
103944961713Sgirish nxge_status_t nxge_rx_mac_enable(p_nxge_t);
104044961713Sgirish nxge_status_t nxge_rx_mac_disable(p_nxge_t);
104144961713Sgirish nxge_status_t nxge_tx_mac_reset(p_nxge_t);
104244961713Sgirish nxge_status_t nxge_rx_mac_reset(p_nxge_t);
104344961713Sgirish nxge_status_t nxge_link_intr(p_nxge_t, link_intr_enable_t);
104444961713Sgirish nxge_status_t nxge_mii_xcvr_init(p_nxge_t);
1045d81011f0Ssbehera nxge_status_t nxge_mii_xcvr_fiber_init(p_nxge_t);
104644961713Sgirish nxge_status_t nxge_mii_read(p_nxge_t, uint8_t,
104744961713Sgirish 			uint8_t, uint16_t *);
104844961713Sgirish nxge_status_t nxge_mii_write(p_nxge_t, uint8_t,
104944961713Sgirish 			uint8_t, uint16_t);
105044961713Sgirish nxge_status_t nxge_mdio_read(p_nxge_t, uint8_t, uint8_t,
105144961713Sgirish 			uint16_t, uint16_t *);
105244961713Sgirish nxge_status_t nxge_mdio_write(p_nxge_t, uint8_t,
105344961713Sgirish 			uint8_t, uint16_t, uint16_t);
105444961713Sgirish nxge_status_t nxge_mii_check(p_nxge_t, mii_bmsr_t,
1055a3c5bd6dSspeer 			mii_bmsr_t, nxge_link_state_t *);
105600161856Syc void nxge_pcs_check(p_nxge_t, uint8_t portn, nxge_link_state_t *);
105744961713Sgirish nxge_status_t nxge_add_mcast_addr(p_nxge_t, struct ether_addr *);
105844961713Sgirish nxge_status_t nxge_del_mcast_addr(p_nxge_t, struct ether_addr *);
105944961713Sgirish nxge_status_t nxge_set_mac_addr(p_nxge_t, struct ether_addr *);
106044961713Sgirish nxge_status_t nxge_check_bcm8704_link(p_nxge_t, boolean_t *);
106100161856Syc nxge_status_t nxge_check_tn1010_link(p_nxge_t);
106244961713Sgirish void nxge_link_is_down(p_nxge_t);
106344961713Sgirish void nxge_link_is_up(p_nxge_t);
106444961713Sgirish nxge_status_t nxge_link_monitor(p_nxge_t, link_mon_enable_t);
106544961713Sgirish uint32_t crc32_mchash(p_ether_addr_t);
106644961713Sgirish nxge_status_t nxge_set_promisc(p_nxge_t, boolean_t);
106744961713Sgirish nxge_status_t nxge_mac_handle_sys_errors(p_nxge_t);
106844961713Sgirish nxge_status_t nxge_10g_link_led_on(p_nxge_t);
106944961713Sgirish nxge_status_t nxge_10g_link_led_off(p_nxge_t);
107059ac0c16Sdavemq nxge_status_t nxge_scan_ports_phy(p_nxge_t, p_nxge_hw_list_t);
107156d930aeSspeer boolean_t nxge_is_valid_local_mac(ether_addr_st);
10721bd6825cSml nxge_status_t nxge_mac_set_framesize(p_nxge_t);
107344961713Sgirish 
107444961713Sgirish /* espc (sprom) prototypes */
107544961713Sgirish nxge_status_t nxge_espc_mac_addrs_get(p_nxge_t);
107644961713Sgirish nxge_status_t nxge_espc_num_macs_get(p_nxge_t, uint8_t *);
107744961713Sgirish nxge_status_t nxge_espc_num_ports_get(p_nxge_t);
107844961713Sgirish nxge_status_t nxge_espc_phy_type_get(p_nxge_t);
107959ac0c16Sdavemq nxge_status_t nxge_espc_verify_chksum(p_nxge_t);
108056d930aeSspeer void nxge_espc_get_next_mac_addr(uint8_t *, uint8_t, struct ether_addr *);
10812e59129aSraghus void nxge_vpd_info_get(p_nxge_t);
108244961713Sgirish 
108344961713Sgirish 
108444961713Sgirish void nxge_debug_msg(p_nxge_t, uint64_t, char *, ...);
10852e59129aSraghus int nxge_get_nports(p_nxge_t);
108644961713Sgirish 
1087678453a8Sspeer void nxge_free_buf(buf_alloc_type_t, uint64_t, uint32_t);
1088678453a8Sspeer 
1089da14cebeSEric Cheng #if defined(sun4v)
1090da14cebeSEric Cheng 
109144961713Sgirish uint64_t hv_niu_rx_logical_page_conf(uint64_t, uint64_t,
109244961713Sgirish 	uint64_t, uint64_t);
109344961713Sgirish #pragma weak	hv_niu_rx_logical_page_conf
109444961713Sgirish 
109544961713Sgirish uint64_t hv_niu_rx_logical_page_info(uint64_t, uint64_t,
109644961713Sgirish 	uint64_t *, uint64_t *);
109744961713Sgirish #pragma weak	hv_niu_rx_logical_page_info
109844961713Sgirish 
109944961713Sgirish uint64_t hv_niu_tx_logical_page_conf(uint64_t, uint64_t,
110044961713Sgirish 	uint64_t, uint64_t);
110144961713Sgirish #pragma weak	hv_niu_tx_logical_page_conf
110244961713Sgirish 
110344961713Sgirish uint64_t hv_niu_tx_logical_page_info(uint64_t, uint64_t,
110444961713Sgirish 	uint64_t *, uint64_t *);
110544961713Sgirish #pragma weak	hv_niu_tx_logical_page_info
110644961713Sgirish 
1107678453a8Sspeer uint64_t hv_niu_vr_assign(uint64_t vridx, uint64_t ldc_id, uint32_t *cookie);
1108678453a8Sspeer #pragma weak	hv_niu_vr_assign
1109678453a8Sspeer 
1110678453a8Sspeer uint64_t hv_niu_vr_unassign(uint32_t cookie);
1111678453a8Sspeer #pragma weak	hv_niu_vr_unassign
1112678453a8Sspeer 
1113678453a8Sspeer uint64_t hv_niu_vr_getinfo(uint32_t cookie, uint64_t *real_start,
1114678453a8Sspeer     uint64_t *size);
1115678453a8Sspeer #pragma weak	hv_niu_vr_getinfo
1116678453a8Sspeer 
1117678453a8Sspeer uint64_t hv_niu_vr_get_rxmap(uint32_t cookie, uint64_t *dma_map);
1118678453a8Sspeer #pragma weak	hv_niu_vr_get_rxmap
1119678453a8Sspeer 
1120678453a8Sspeer uint64_t hv_niu_vr_get_txmap(uint32_t cookie, uint64_t *dma_map);
1121678453a8Sspeer #pragma weak	hv_niu_vr_get_txmap
1122678453a8Sspeer 
1123678453a8Sspeer uint64_t hv_niu_rx_dma_assign(uint32_t cookie, uint64_t chidx,
1124678453a8Sspeer     uint64_t *vchidx);
1125678453a8Sspeer #pragma weak	hv_niu_rx_dma_assign
1126678453a8Sspeer 
1127678453a8Sspeer uint64_t hv_niu_rx_dma_unassign(uint32_t cookie, uint64_t chidx);
1128678453a8Sspeer #pragma weak	hv_niu_rx_dma_unassign
1129678453a8Sspeer 
1130678453a8Sspeer uint64_t hv_niu_tx_dma_assign(uint32_t cookie, uint64_t chidx,
1131678453a8Sspeer     uint64_t *vchidx);
1132678453a8Sspeer #pragma weak	hv_niu_tx_dma_assign
1133678453a8Sspeer 
1134678453a8Sspeer uint64_t hv_niu_tx_dma_unassign(uint32_t cookie, uint64_t chidx);
1135678453a8Sspeer #pragma weak	hv_niu_tx_dma_unassign
1136678453a8Sspeer 
1137678453a8Sspeer uint64_t hv_niu_vrrx_logical_page_conf(uint32_t cookie, uint64_t chidx,
1138678453a8Sspeer     uint64_t pgidx, uint64_t raddr, uint64_t size);
1139678453a8Sspeer #pragma weak	hv_niu_vrrx_logical_page_conf
1140678453a8Sspeer 
1141678453a8Sspeer uint64_t hv_niu_vrrx_logical_page_info(uint32_t cookie, uint64_t chidx,
1142678453a8Sspeer     uint64_t pgidx, uint64_t *raddr, uint64_t *size);
1143678453a8Sspeer #pragma weak	hv_niu_vrrx_logical_page_info
1144678453a8Sspeer 
1145678453a8Sspeer uint64_t hv_niu_vrtx_logical_page_conf(uint32_t cookie, uint64_t chidx,
1146678453a8Sspeer     uint64_t pgidx, uint64_t raddr, uint64_t size);
1147678453a8Sspeer #pragma weak	hv_niu_vrtx_logical_page_conf
1148678453a8Sspeer 
1149678453a8Sspeer uint64_t hv_niu_vrtx_logical_page_info(uint32_t cookie, uint64_t chidx,
1150678453a8Sspeer     uint64_t pgidx, uint64_t *raddr, uint64_t *size);
1151678453a8Sspeer #pragma weak	hv_niu_vrtx_logical_page_info
1152678453a8Sspeer 
11534df55fdeSJanie Lu uint64_t hv_niu_cfgh_rx_logical_page_conf(uint64_t, uint64_t, uint64_t,
11544df55fdeSJanie Lu 	uint64_t, uint64_t);
1155c22d83ccStc #pragma weak	hv_niu_cfgh_rx_logical_page_conf
11564df55fdeSJanie Lu 
11574df55fdeSJanie Lu uint64_t hv_niu_cfgh_rx_logical_page_info(uint64_t, uint64_t, uint64_t,
11584df55fdeSJanie Lu 	uint64_t *, uint64_t *);
1159c22d83ccStc #pragma weak	hv_niu_cfgh_rx_logical_page_info
11604df55fdeSJanie Lu 
11614df55fdeSJanie Lu uint64_t hv_niu_cfgh_tx_logical_page_conf(uint64_t, uint64_t, uint64_t,
11624df55fdeSJanie Lu 	uint64_t, uint64_t);
1163c22d83ccStc #pragma weak	hv_niu_cfgh_tx_logical_page_conf
11644df55fdeSJanie Lu 
11654df55fdeSJanie Lu uint64_t hv_niu_cfgh_tx_logical_page_info(uint64_t, uint64_t, uint64_t,
11664df55fdeSJanie Lu 	uint64_t *, uint64_t *);
1167c22d83ccStc #pragma weak	hv_niu_cfgh_tx_logical_page_info
11684df55fdeSJanie Lu 
11694df55fdeSJanie Lu uint64_t hv_niu_cfgh_vr_assign(uint64_t, uint64_t vridx, uint64_t ldc_id,
11704df55fdeSJanie Lu 	uint32_t *cookie);
1171c22d83ccStc #pragma weak	hv_niu_cfgh_vr_assign
11724df55fdeSJanie Lu 
1173678453a8Sspeer //
1174678453a8Sspeer // NIU-specific interrupt API
1175678453a8Sspeer //
1176678453a8Sspeer uint64_t hv_niu_vrrx_getinfo(uint32_t cookie, uint64_t v_chidx,
1177678453a8Sspeer     uint64_t *group, uint64_t *logdev);
1178678453a8Sspeer #pragma weak	hv_niu_vrrx_getinfo
1179678453a8Sspeer 
1180678453a8Sspeer uint64_t hv_niu_vrtx_getinfo(uint32_t cookie, uint64_t v_chidx,
1181678453a8Sspeer     uint64_t *group, uint64_t *logdev);
1182678453a8Sspeer #pragma weak	hv_niu_vrtx_getinfo
1183678453a8Sspeer 
1184678453a8Sspeer uint64_t hv_niu_vrrx_to_logical_dev(uint32_t cookie, uint64_t v_chidx,
1185678453a8Sspeer     uint64_t *ldn);
1186678453a8Sspeer #pragma weak	hv_niu_vrrx_to_logical_dev
1187678453a8Sspeer 
1188678453a8Sspeer uint64_t hv_niu_vrtx_to_logical_dev(uint32_t cookie, uint64_t v_chidx,
1189678453a8Sspeer     uint64_t *ldn);
1190678453a8Sspeer #pragma weak	hv_niu_vrtx_to_logical_dev
1191678453a8Sspeer 
1192da14cebeSEric Cheng #endif /* defined(sun4v) */
1193da14cebeSEric Cheng 
119444961713Sgirish #ifdef NXGE_DEBUG
119544961713Sgirish char *nxge_dump_packet(char *, int);
119644961713Sgirish #endif
119744961713Sgirish 
119844961713Sgirish #endif	/* !_ASM */
119944961713Sgirish 
120044961713Sgirish #ifdef	__cplusplus
120144961713Sgirish }
120244961713Sgirish #endif
120344961713Sgirish 
120444961713Sgirish #endif	/* _SYS_NXGE_NXGE_IMPL_H */
1205