xref: /illumos-gate/usr/src/uts/common/io/ntxn/unm_nic.h (revision 9a5557fd)
1*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * CDDL HEADER START
3*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *
4*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * The contents of this file are subject to the terms of the
5*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Common Development and Distribution License (the "License").
6*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * You may not use this file except in compliance with the License.
7*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *
8*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * or http://www.opensolaris.org/os/licensing.
10*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * See the License for the specific language governing permissions
11*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * and limitations under the License.
12*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *
13*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * When distributing Covered Code, include this CDDL HEADER in each
14*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * If applicable, add the following below this CDDL HEADER, with the
16*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * fields enclosed by brackets "[]" replaced with your own identifying
17*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *
19*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * CDDL HEADER END
20*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
21*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
22*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Copyright 2008 NetXen, Inc.  All rights reserved.
23*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Use is subject to license terms.
24*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
25*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
26*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
27*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Use is subject to license terms.
28*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
29*9a5557fdSlucy wang - Sun Microsystems - Beijing China #ifndef _UNM_NIC_
30*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	_UNM_NIC_
31*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
32*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/inttypes.h>
33*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/rwlock.h>
34*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/mutex.h>
35*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/ddi.h>
36*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
37*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/sunddi.h>
38*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/types.h>
39*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/stream.h>
40*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/strsun.h>
41*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/strsubr.h>
42*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/dlpi.h>
43*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/devops.h>
44*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/stat.h>
45*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/pci.h>
46*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/note.h>
47*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/modctl.h>
48*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/kstat.h>
49*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/ethernet.h>
50*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/errno.h>
51*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <netinet/ip6.h>
52*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <inet/common.h>
53*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/pattr.h>
54*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <inet/mi.h>
55*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <inet/nd.h>
56*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
57*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/mac.h>
58*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/mac_ether.h>
59*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/miiregs.h> /* by fjlite out of intel */
60*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
61*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_nic_hw.h"
62*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "nic_cmn.h"
63*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_inc.h" /* For MAX_RCV_CTX */
64*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_brdcfg.h"
65*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_version.h"
66*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "nic_phan_reg.h"
67*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_nic_ioctl.h"
68*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
69*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MAX_ADDR_LEN	 6
70*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
71*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	ADDR_IN_WINDOW1(off)	\
72*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((off > UNM_CRB_PCIX_HOST2) && (off < UNM_CRB_MAX)) ? 1 : 0
73*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
74*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef unsigned long uptr_t;
75*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
76*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	FIRST_PAGE_GROUP_START	0
77*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	FIRST_PAGE_GROUP_END	0x100000
78*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
79*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	SECOND_PAGE_GROUP_START	0x6000000
80*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	SECOND_PAGE_GROUP_END	0x68BC000
81*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
82*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	THIRD_PAGE_GROUP_START	0x70E4000
83*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	THIRD_PAGE_GROUP_END	0x8000000
84*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
85*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	FIRST_PAGE_GROUP_SIZE	FIRST_PAGE_GROUP_END - FIRST_PAGE_GROUP_START
86*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	SECOND_PAGE_GROUP_SIZE	SECOND_PAGE_GROUP_END - SECOND_PAGE_GROUP_START
87*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	THIRD_PAGE_GROUP_SIZE	THIRD_PAGE_GROUP_END - THIRD_PAGE_GROUP_START
88*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
89*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
90*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * normalize a 64MB crb address to 32MB PCI window
91*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * To use CRB_NORMALIZE, window _must_ be set to 1
92*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
93*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	CRB_NORMAL(reg)	\
94*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	(reg) - UNM_CRB_PCIX_HOST2 + UNM_CRB_PCIX_HOST
95*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	CRB_NORMALIZE(adapter, reg) \
96*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	(void *)(unsigned long)(pci_base_offset(adapter, CRB_NORMAL(reg)))
97*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
98*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	DB_NORMALIZE(adapter, off) \
99*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	(void *)((unsigned long)adapter->ahw.db_base + (off))
100*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
101*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	find_diff_among(a, b, range) \
102*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((a) < (b)?((b)-(a)):((b)+(range)-(a)))
103*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
104*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	__FUNCTION__		__func__
105*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	nx_msleep(_msecs_)	delay(drv_usectohz(_msecs_ * 1000))
106*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
107*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	HOST_TO_LE_64			LE_64
108*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	HOST_TO_LE_32			LE_32
109*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	LE_TO_HOST_32			LE_32
110*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	HOST_TO_LE_16			LE_16
111*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	LE_TO_HOST_16			LE_16
112*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
113*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	dbwritel(DATA, ADDRESS) \
114*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put32(adapter->db_handle, (uint32_t *)(ADDRESS), (DATA))
115*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
116*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
117*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Following macros require the mapped addresses to access
118*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * the Phantom memory.
119*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
120*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_READ_8(ADDRESS) \
121*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_get8(adapter->regs_handle, (uint8_t *)(ADDRESS))
122*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_READ_16(ADDRESS) \
123*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_get16(adapter->regs_handle, (uint16_t *)(ADDRESS))
124*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_READ_32(ADDRESS) \
125*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_get32(adapter->regs_handle, (uint32_t *)(ADDRESS))
126*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_READ_64(ADDRESS) \
127*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_get64(adapter->regs_handle, (uint64_t *)(ADDRESS))
128*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
129*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_WRITE_8(DATA, ADDRESS) \
130*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put8(adapter->regs_handle, (uint8_t *)(ADDRESS), (DATA))
131*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_WRITE_16(DATA, ADDRESS) \
132*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put16(adapter->regs_handle, (uint16_t *)(ADDRESS), (DATA))
133*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_WRITE_32(DATA, ADDRESS) \
134*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put32(adapter->regs_handle, (uint32_t *)(ADDRESS), (DATA))
135*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_WRITE_64(DATA, ADDRESS) \
136*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put64(adapter->regs_handle, (uint64_t *)(ADDRESS), (DATA))
137*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
138*9a5557fdSlucy wang - Sun Microsystems - Beijing China #ifdef DEBUG_LEVEL
139*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	DPRINTF(n, args)	if (DEBUG_LEVEL > (n)) cmn_err args;
140*9a5557fdSlucy wang - Sun Microsystems - Beijing China #else
141*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	DPRINTF(n, args)
142*9a5557fdSlucy wang - Sun Microsystems - Beijing China #endif
143*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
144*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_SPIN_LOCK(_lp_)			mutex_enter((_lp_))
145*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_SPIN_UNLOCK(_lp_)			mutex_exit((_lp_))
146*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_SPIN_LOCK_ISR(_lp_)			mutex_enter((_lp_))
147*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_SPIN_UNLOCK_ISR(_lp_)		mutex_exit((_lp_))
148*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
149*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_WRITE_LOCK(_lp_)			rw_enter((_lp_), RW_WRITER)
150*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_WRITE_UNLOCK(_lp_)			rw_exit((_lp_))
151*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_READ_LOCK(_lp_)			rw_enter((_lp_), RW_READER)
152*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_READ_UNLOCK(_lp_)			rw_exit((_lp_))
153*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_WRITE_LOCK_IRQS(_lp_, _fl_)		rw_enter((_lp_), RW_WRITER)
154*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_WRITE_UNLOCK_IRQR(_lp_, _fl_)	rw_exit((_lp_))
155*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
156*9a5557fdSlucy wang - Sun Microsystems - Beijing China extern char unm_nic_driver_name[];
157*9a5557fdSlucy wang - Sun Microsystems - Beijing China extern int verbmsg;
158*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
159*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_dmah_node {
160*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_dmah_node *next;
161*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t dmahdl;
162*9a5557fdSlucy wang - Sun Microsystems - Beijing China }unm_dmah_node_t;
163*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
164*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct dma_area {
165*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t	acc_hdl;	/* handle for memory	*/
166*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t	dma_hdl;	/* DMA handle		*/
167*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		ncookies;
168*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	u64			dma_addr;
169*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	void			*vaddr;
170*9a5557fdSlucy wang - Sun Microsystems - Beijing China } dma_area_t;
171*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
172*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_cmd_buffer {
173*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	dma_area_t	dma_area;
174*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	mblk_t		*msg;
175*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_dmah_node_t	*head, *tail;
176*9a5557fdSlucy wang - Sun Microsystems - Beijing China };
177*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
178*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct pkt_info {
179*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	total_len;
180*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	mblk_no;
181*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	etype;
182*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	mac_hlen;
183*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	ip_hlen;
184*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	l4_proto;
185*9a5557fdSlucy wang - Sun Microsystems - Beijing China } pktinfo_t;
186*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
187*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_rcv_desc_context_s unm_rcv_desc_ctx_t;
188*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_adapter_s unm_adapter;
189*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
190*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_rx_buffer {
191*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_rx_buffer	*next;
192*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	dma_area_t		dma_info;
193*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	frtn_t			rx_recycle;	/* recycle function */
194*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	mblk_t			*mp;
195*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rcv_desc_ctx_t	*rcv_desc;
196*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_adapter		*adapter;
197*9a5557fdSlucy wang - Sun Microsystems - Beijing China }unm_rx_buffer_t;
198*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
199*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Board types */
200*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_GBE		0x01
201*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_XGBE    0x02
202*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
203*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
204*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * One hardware_context{} per adapter
205*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * contains interrupt info as well shared hardware info.
206*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
207*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef	struct _hardware_context {
208*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_base0;
209*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_len0;
210*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_base1;
211*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_len1;
212*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_base2;
213*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_len2;
214*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	first_page_group_end;
215*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	first_page_group_start;
216*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint8_t			revision_id;
217*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint8_t			cut_through;
218*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		board_type;
219*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int				pci_func;
220*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		max_ports;
221*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_board_info_t	boardcfg;
222*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		linkup;
223*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
224*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_adapter_s	*adapter;
225*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	cmdDescType0_t			*cmdDescHead;
226*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
227*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		cmdProducer;
228*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		cmdConsumer;
229*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		rcvFlag;
230*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		crb_base;
231*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	db_base;    /* base of mapped db memory */
232*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	db_len;    /* length of mapped db memory */
233*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
234*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
235*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t		cmdDesc_physAddr;
236*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int				qdr_sn_window, ddr_mn_window;
237*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	mn_win_crb, ms_win_crb;
238*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t cmd_desc_dma_handle;
239*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t cmd_desc_acc_handle;
240*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_cookie_t cmd_desc_dma_cookie;
241*9a5557fdSlucy wang - Sun Microsystems - Beijing China } hardware_context, *phardware_context;
242*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
243*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	NX_CT_DEFAULT_RX_BUF_LEN	2048
244*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MTU_SIZE			1500
245*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MAX_COOKIES_PER_CMD		16
246*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_DB_MAPSIZE_BYTES		0x1000
247*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	EXTRA_HANDLES			512
248*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_TX_BCOPY_THRESHOLD		128
249*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_RX_BCOPY_THRESHOLD		128
250*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	NX_MIN_DRIVER_RDS_SIZE		64
251*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
252*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_pauseparam {
253*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t rx_pause;
254*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t tx_pause;
255*9a5557fdSlucy wang - Sun Microsystems - Beijing China } unm_pauseparam_t;
256*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
257*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
258*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * The driver supports the NDD ioctls ND_GET/ND_SET, and the loopback
259*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * ioctls LB_GET_INFO_SIZE/LB_GET_INFO/LB_GET_MODE/LB_SET_MODE
260*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *
261*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * These are the values to use with LD_SET_MODE.
262*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
263*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_LOOP_NONE	   0
264*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_LOOP_INTERNAL_PHY   1
265*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_LOOP_INTERNAL_MAC   2
266*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
267*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
268*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Named Data (ND) Parameter Management Structure
269*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
270*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef	struct {
271*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			ndp_info;
272*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			ndp_min;
273*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			ndp_max;
274*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			ndp_val;
275*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	char		*ndp_name;
276*9a5557fdSlucy wang - Sun Microsystems - Beijing China } nd_param_t; /* 0x18 (24) bytes  */
277*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
278*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
279*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * NDD parameter indexes, divided into:
280*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *
281*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *      read-only parameters describing the hardware's capabilities
282*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *      read-write parameters controlling the advertised capabilities
283*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *      read-only parameters describing the partner's capabilities
284*9a5557fdSlucy wang - Sun Microsystems - Beijing China  *      read-only parameters describing the link state
285*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
286*9a5557fdSlucy wang - Sun Microsystems - Beijing China enum {
287*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_AUTONEG_CAP = 0,
288*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_PAUSE_CAP,
289*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ASYM_PAUSE_CAP,
290*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_10000FDX_CAP,
291*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_1000FDX_CAP,
292*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_1000HDX_CAP,
293*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_100T4_CAP,
294*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_100FDX_CAP,
295*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_100HDX_CAP,
296*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_10FDX_CAP,
297*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_10HDX_CAP,
298*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
299*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_AUTONEG_CAP,
300*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_PAUSE_CAP,
301*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_ASYM_PAUSE_CAP,
302*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_10000FDX_CAP,
303*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_1000FDX_CAP,
304*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_1000HDX_CAP,
305*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_100T4_CAP,
306*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_100FDX_CAP,
307*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_100HDX_CAP,
308*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_10FDX_CAP,
309*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_10HDX_CAP,
310*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
311*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_LINK_STATUS,
312*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_LINK_SPEED,
313*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_LINK_DUPLEX,
314*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
315*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_LOOP_MODE,
316*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
317*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_COUNT
318*9a5557fdSlucy wang - Sun Microsystems - Beijing China };
319*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
320*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_stats {
321*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rcvdbadmsg;
322*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  xmitcalled;
323*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  xmitedframes;
324*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  xmitfinished;
325*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  badmsglen;
326*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  nocmddescriptor;
327*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  polled;
328*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  uphappy;
329*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  updropped;
330*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  uplcong;
331*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  uphcong;
332*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  upmcong;
333*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  updunno;
334*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  msgfreed;
335*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txdropped;
336*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txnullmsg;
337*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  csummed;
338*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  no_rcv;
339*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rxbytes;
340*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txbytes;
341*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  ints;
342*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  desballocfailed;
343*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txcopyed;
344*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txmapped;
345*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  outoftxdmahdl;
346*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  outofcmddesc;
347*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rxcopyed;
348*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rxmapped;
349*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  outofrxbuf;
350*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  promiscmode;
351*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rxbufshort;
352*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  allocbfailed;
353*9a5557fdSlucy wang - Sun Microsystems - Beijing China };
354*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
355*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* descriptor types */
356*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	RCV_RING_STD		RCV_DESC_NORMAL
357*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	RCV_RING_JUMBO		RCV_DESC_JUMBO
358*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	RCV_RING_LRO		RCV_DESC_LRO
359*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
360*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
361*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Rcv Descriptor Context. One such per Rcv Descriptor. There may
362*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * be one Rcv Descriptor for normal packets, one for jumbo,
363*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * one for LRO and may be expanded.
364*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
365*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_rcv_desc_context_s {
366*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	producer;
367*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
368*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t	phys_addr;
369*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	dev_info_t	*phys_pdev;
370*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* address of rx ring in Phantom */
371*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	rcvDesc_t	*desc_head;
372*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
373*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxRxDescCount;
374*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_desc_handled;
375*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_buf_card;
376*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_buf_total;
377*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_buf_free;
378*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_buf_recycle;
379*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rx_buffer_t *rx_buf_pool;
380*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rx_buffer_t *pool_list;
381*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rx_buffer_t *recycle_list;
382*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t	pool_lock[1];	/* buffer pool lock */
383*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t	recycle_lock[1]; /* buffer recycle lock */
384*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* size of the receive buf */
385*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	buf_size;
386*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* rx buffers for receive   */
387*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
388*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t	rx_desc_dma_handle;
389*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t 	rx_desc_acc_handle;
390*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_cookie_t	rx_desc_dma_cookie;
391*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		host_rx_producer;
392*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		dma_size;
393*9a5557fdSlucy wang - Sun Microsystems - Beijing China };
394*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
395*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
396*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Receive context. There is one such structure per instance of the
397*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * receive processing. Any state information that is relevant to
398*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * the receive, and is must be in this structure. The global data may be
399*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * present elsewhere.
400*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
401*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_recv_context_s {
402*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rcv_desc_ctx_t 	rcv_desc[NUM_RCV_DESC_RINGS];
403*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
404*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t			statusRxConsumer;
405*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
406*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t			rcvStatusDesc_physAddr;
407*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	statusDesc_t 		*rcvStatusDescHead;
408*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
409*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t	status_desc_dma_handle;
410*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t	status_desc_acc_handle;
411*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_cookie_t	status_desc_dma_cookie;
412*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
413*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		state, host_sds_consumer;
414*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		context_id, virt_port;
415*9a5557fdSlucy wang - Sun Microsystems - Beijing China } unm_recv_context_t;
416*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
417*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_MSI_ENABLED	0x02
418*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_MSIX_ENABLED	0x04
419*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_IS_MSI_FAMILY(ADAPTER)	\
420*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((ADAPTER)->flags & (UNM_NIC_MSI_ENABLED | UNM_NIC_MSIX_ENABLED))
421*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
422*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	NX_USE_MSIX
423*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
424*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* msix defines */
425*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MSIX_ENTRIES_PER_ADAPTER	8
426*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_MSIX_TBL_SPACE		8192
427*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_PCI_REG_MSIX_TBL		0x44
428*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
429*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
430*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Bug: word or char write on MSI-X capcabilities register (0x40) in PCI config
431*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * space has no effect on register values. Need to write dword.
432*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
433*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_HWBUG_8_WORKAROUND
434*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
435*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
436*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Bug: Can not reset bit 32 (msix enable bit) on MSI-X capcabilities
437*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * register (0x40) independently.
438*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Need to write 0x0 (zero) to MSI-X capcabilities register in order to reset
439*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * msix enable bit. On writing zero rest of the bits are not touched.
440*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
441*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_HWBUG_9_WORKAROUND
442*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
443*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_MC_COUNT    38	/* == ((UNM_ADDR_L2LU_COUNT-1)/4) -2 */
444*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
445*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Following structure is for specific port information */
446*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_s {
447*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	hardware_context	ahw;
448*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint8_t			id[32];
449*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		portnum;
450*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		physical_port;
451*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		link_speed;
452*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		link_duplex;
453*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
454*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_adapter_stats stats;
455*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			rx_csum;
456*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			status;
457*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t    		stats_lock;
458*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned char		mac_addr[MAX_ADDR_LEN];
459*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			mtu;		/* active mtu */
460*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			maxmtu;		/* max possible mtu value */
461*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		promisc;
462*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
463*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	mac_resource_handle_t   mac_rx_ring_ha;
464*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	mac_handle_t	mach;
465*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int				flags;
466*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
467*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int		  instance;
468*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	dev_info_t	  *dip;
469*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t  pci_cfg_handle;
470*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t  regs_handle;
471*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_attr_t    gc_dma_attr_desc;
472*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
473*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct ddi_device_acc_attr  gc_attr_desc;
474*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_iblock_cookie_t iblock_cookie;
475*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	const char *name;
476*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t  db_handle;
477*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
478*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_intr_handle_t	intr_handle;
479*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			intr_type;
480*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint_t		intr_pri;
481*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_dmah_node_t		*dmahdl_pool;
482*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_dmah_node_t		tx_dma_hdls[MAX_CMD_DESCRIPTORS+EXTRA_HANDLES];
483*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t		freehdls;
484*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t		freecmds;
485*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			tx_bcopy_threshold;
486*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t		tx_lock;
487*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	krwlock_t		adapter_lock;
488*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t		lock;
489*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct nx_legacy_intr_set	legacy_intr;
490*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	timeout_id_t		watchdog_timer;
491*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	kstat_t			*kstats[1];
492*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
493*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		curr_window;
494*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		crb_win;
495*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		cmdProducer;
496*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		*cmdConsumer;
497*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
498*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		interrupt_crb;
499*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		fw_major;
500*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		crb_addr_cmd_producer;
501*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		crb_addr_cmd_consumer;
502*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		tx_context_id;
503*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	short			context_alloced;
504*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			max_rds_rings;
505*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
506*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		lastCmdConsumer;
507*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* Num of bufs posted in phantom */
508*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	pendingCmdCount;
509*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxTxDescCount;
510*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxRxDescCount;
511*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxJumboRxDescCount;
512*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxLroRxDescCount;
513*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* Num of instances active on cmd buffer ring */
514*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int		resched_needed;
515*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
516*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			driver_mismatch;
517*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	temp;
518*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
519*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_cmd_buffer *cmd_buf_arr;  /* Command buffers for xmit */
520*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int		rx_bcopy_threshold;
521*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
522*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	/*
523*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	 * Receive instances. These can be either one per port,
524*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	 * or one per peg, etc.
525*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	 */
526*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_recv_context_t	recv_ctx[MAX_RCV_CTX];
527*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int		is_up;
528*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
529*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* context interface shared between card and host */
530*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	RingContext		*ctxDesc;
531*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t		ctxDesc_physAddr;
532*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t 	ctxDesc_dma_handle;
533*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t 	ctxDesc_acc_handle;
534*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
535*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct {
536*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		void			*addr;
537*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		uint64_t		phys_addr;
538*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		ddi_dma_handle_t	dma_handle;
539*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		ddi_acc_handle_t	acc_handle;
540*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	} dummy_dma;
541*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
542*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	void	(*unm_nic_pci_change_crbwindow)(struct unm_adapter_s *,
543*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    uint32_t);
544*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_crb_writelit_adapter)(struct unm_adapter_s *,
545*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    unsigned long, int);
546*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long long
547*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		(*unm_nic_pci_set_window)(struct unm_adapter_s *,
548*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    unsigned long long);
549*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_fill_statistics)(struct unm_adapter_s *,
550*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    struct unm_statistics *);
551*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_clear_statistics)(struct unm_adapter_s *);
552*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_hw_write_wx)(struct unm_adapter_s *, u64,
553*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    void *, int);
554*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_hw_read_wx)(struct unm_adapter_s *, u64, void *, int);
555*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_hw_write_ioctl)(struct unm_adapter_s *, u64, void *,
556*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    int);
557*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_hw_read_ioctl)(struct unm_adapter_s *, u64, void *,
558*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    int);
559*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_pci_mem_write)(struct unm_adapter_s *, u64, void *,
560*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    int);
561*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_pci_mem_read)(struct unm_adapter_s *, u64, void *,
562*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    int);
563*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_pci_write_immediate)(struct unm_adapter_s *, u64,
564*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    u32 *);
565*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_pci_read_immediate)(struct unm_adapter_s *, u64,
566*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    u32 *);
567*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	void	(*unm_nic_pci_write_normalize)(struct unm_adapter_s *, u64,
568*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    u32);
569*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	u32	(*unm_nic_pci_read_normalize)(struct unm_adapter_s *, u64);
570*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
571*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	caddr_t			nd_data_p;
572*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	nd_param_t		nd_params[PARAM_COUNT];
573*9a5557fdSlucy wang - Sun Microsystems - Beijing China };  /* unm_adapter structure */
574*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
575*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_HOST_DUMMY_DMA_SIZE	 1024
576*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
577*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Following structure is for specific port information    */
578*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
579*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	PCI_OFFSET_FIRST_RANGE(adapter, off)	\
580*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((adapter)->ahw.pci_base0 + off)
581*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	PCI_OFFSET_SECOND_RANGE(adapter, off)	\
582*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((adapter)->ahw.pci_base1 + off - SECOND_PAGE_GROUP_START)
583*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	PCI_OFFSET_THIRD_RANGE(adapter, off)	\
584*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((adapter)->ahw.pci_base2 + off - THIRD_PAGE_GROUP_START)
585*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
586*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	pci_base_offset(adapter, off)	\
587*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((((off) < ((adapter)->ahw.first_page_group_end)) &&	\
588*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((off) >= ((adapter)->ahw.first_page_group_start))) ?	\
589*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((adapter)->ahw.pci_base0 + (off)) :	\
590*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((((off) < SECOND_PAGE_GROUP_END) &&	\
591*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((off) >= SECOND_PAGE_GROUP_START)) ?	\
592*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((adapter)->ahw.pci_base1 +		\
593*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    (off) - SECOND_PAGE_GROUP_START) :	\
594*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		((((off) < THIRD_PAGE_GROUP_END) &&	\
595*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((off) >= THIRD_PAGE_GROUP_START)) ?	\
596*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((adapter)->ahw.pci_base2 + (off) -	\
597*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    THIRD_PAGE_GROUP_START) :		\
598*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	    0)))
599*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	unm_nic_reg_write(_adp_, _off_, _val_)			\
600*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	{							\
601*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		__uint32_t	_v1_ = (_val_);			\
602*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		((_adp_)->unm_nic_hw_write_wx((_adp_), (_off_),	\
603*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		    &_v1_, 4));					\
604*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	}
605*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
606*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	unm_nic_reg_read(_adp_, _off_, _ptr_)			\
607*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((_adp_)->unm_nic_hw_read_wx((_adp_), (_off_), (_ptr_), 4))
608*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
609*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
610*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	unm_nic_write_w0(_adp_, _idx_, _val_)			\
611*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((_adp_)->unm_nic_hw_write_wx((_adp_), (_idx_), &(_val_), 4))
612*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
613*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	unm_nic_read_w0(_adp_, _idx_, _val_)			\
614*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	((_adp_)->unm_nic_hw_read_wx((_adp_), (_idx_), (_val_), 4))
615*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
616*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Functions available from unm_nic_hw.c */
617*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_get_board_info(struct unm_adapter_s *adapter);
618*9a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_write_crb(struct unm_adapter_s *adapter, uint32_t index,
619*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				uint32_t value);
620*9a5557fdSlucy wang - Sun Microsystems - Beijing China void  unm_nic_write_crb(struct unm_adapter_s *adapter, uint32_t index,
621*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				uint32_t value);
622*9a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_read_crb(struct unm_adapter_s *adapter, uint32_t index,
623*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				uint32_t *value);
624*9a5557fdSlucy wang - Sun Microsystems - Beijing China void  unm_nic_read_crb(struct unm_adapter_s *adapter, uint32_t index,
625*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				uint32_t *value);
626*9a5557fdSlucy wang - Sun Microsystems - Beijing China // int   unm_nic_reg_read (unm_adapter *adapter, u64 off);
627*9a5557fdSlucy wang - Sun Microsystems - Beijing China int _unm_nic_hw_write(struct unm_adapter_s *adapter,
628*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int len);
629*9a5557fdSlucy wang - Sun Microsystems - Beijing China int  unm_nic_hw_write(struct unm_adapter_s *adapter,
630*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int len);
631*9a5557fdSlucy wang - Sun Microsystems - Beijing China int _unm_nic_hw_read(struct unm_adapter_s *adapter,
632*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int len);
633*9a5557fdSlucy wang - Sun Microsystems - Beijing China int  unm_nic_hw_read(struct unm_adapter_s *adapter,
634*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int len);
635*9a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_hw_block_read(struct unm_adapter_s *adapter,
636*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int num_words);
637*9a5557fdSlucy wang - Sun Microsystems - Beijing China void  unm_nic_hw_block_read(struct unm_adapter_s *adapter,
638*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int num_words);
639*9a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_hw_block_write(struct unm_adapter_s *adapter,
640*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int num_words);
641*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_hw_block_write(struct unm_adapter_s *adapter,
642*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int num_words);
643*9a5557fdSlucy wang - Sun Microsystems - Beijing China int  unm_nic_pci_mem_write(struct unm_adapter_s *adapter,
644*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int size);
645*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_mem_block_read(struct unm_adapter_s *adapter, u64 off,
646*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				void *data, int num_words);
647*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_mem_block_write(struct unm_adapter_s *adapter, u64 off,
648*9a5557fdSlucy wang - Sun Microsystems - Beijing China 				void *data, int num_words);
649*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_ioctl(unm_adapter *adapter, u64 off, void *data, int len);
650*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_ioctl(unm_adapter *adapter, u64 off, void *data, int len);
651*9a5557fdSlucy wang - Sun Microsystems - Beijing China int  unm_nic_macaddr_set(struct unm_adapter_s *, __uint8_t *addr);
652*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_tcl_resetall(struct unm_adapter_s *adapter);
653*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_tcl_phaninit(struct unm_adapter_s *adapter);
654*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_tcl_postimage(struct unm_adapter_s *adapter);
655*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_set_mtu(struct unm_adapter_s *adapter, int new_mtu);
656*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_nic_phy_read(unm_adapter *adapter, long reg, __uint32_t *);
657*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_nic_init_port(struct unm_adapter_s *adapter);
658*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_crb_write_adapter(unsigned long off, void *data,
659*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		struct unm_adapter_s *adapter);
660*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_read_adapter(unsigned long off, void *data,
661*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		struct unm_adapter_s *adapter);
662*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_read_val_adapter(unsigned long off,
663*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		struct unm_adapter_s *adapter);
664*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_stop_port(struct unm_adapter_s *adapter);
665*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_set_promisc_mode(struct unm_adapter_s *adapter);
666*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_unset_promisc_mode(struct unm_adapter_s *adapter);
667*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
668*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_hw.c */
669*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_change_crbwindow_128M(unm_adapter *adapter, uint32_t wndw);
670*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_writelit_adapter_128M(struct unm_adapter_s *, unsigned long, int);
671*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_wx_128M(unm_adapter *adapter, u64 off, void *data,
672*9a5557fdSlucy wang - Sun Microsystems - Beijing China     int len);
673*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_wx_128M(unm_adapter *adapter, u64 off, void *data, int len);
674*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_ioctl_128M(unm_adapter *adapter, u64 off, void *data,
675*9a5557fdSlucy wang - Sun Microsystems - Beijing China     int len);
676*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_ioctl_128M(unm_adapter *adapter, u64 off, void *data,
677*9a5557fdSlucy wang - Sun Microsystems - Beijing China     int len);
678*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_write_128M(struct unm_adapter_s *adapter, u64 off,
679*9a5557fdSlucy wang - Sun Microsystems - Beijing China     void *data, int size);
680*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_read_128M(struct unm_adapter_s *adapter, u64 off,
681*9a5557fdSlucy wang - Sun Microsystems - Beijing China     void *data, int size);
682*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_write_normalize_128M(unm_adapter *adapter, u64 off, u32 data);
683*9a5557fdSlucy wang - Sun Microsystems - Beijing China u32 unm_nic_pci_read_normalize_128M(unm_adapter *adapter, u64 off);
684*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_write_immediate_128M(unm_adapter *adapter, u64 off, u32 *data);
685*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_read_immediate_128M(unm_adapter *adapter, u64 off, u32 *data);
686*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long unm_nic_pci_set_window_128M(unm_adapter *adapter,
687*9a5557fdSlucy wang - Sun Microsystems - Beijing China     unsigned long long addr);
688*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_clear_statistics_128M(struct unm_adapter_s *adapter);
689*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_fill_statistics_128M(struct unm_adapter_s *adapter,
690*9a5557fdSlucy wang - Sun Microsystems - Beijing China     struct unm_statistics *unm_stats);
691*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
692*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_change_crbwindow_2M(unm_adapter *adapter, uint32_t wndw);
693*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_writelit_adapter_2M(struct unm_adapter_s *, unsigned long, int);
694*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_wx_2M(unm_adapter *adapter, u64 off, void *data, int len);
695*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_write_2M(struct unm_adapter_s *adapter, u64 off,
696*9a5557fdSlucy wang - Sun Microsystems - Beijing China     void *data, int size);
697*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_read_2M(struct unm_adapter_s *adapter, u64 off,
698*9a5557fdSlucy wang - Sun Microsystems - Beijing China     void *data, int size);
699*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_wx_2M(unm_adapter *adapter, u64 off, void *data, int len);
700*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_write_normalize_2M(unm_adapter *adapter, u64 off, u32 data);
701*9a5557fdSlucy wang - Sun Microsystems - Beijing China u32 unm_nic_pci_read_normalize_2M(unm_adapter *adapter, u64 off);
702*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_write_immediate_2M(unm_adapter *adapter, u64 off, u32 *data);
703*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_read_immediate_2M(unm_adapter *adapter, u64 off, u32 *data);
704*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long unm_nic_pci_set_window_2M(unm_adapter *adapter,
705*9a5557fdSlucy wang - Sun Microsystems - Beijing China     unsigned long long addr);
706*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_clear_statistics_2M(struct unm_adapter_s *adapter);
707*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_fill_statistics_2M(struct unm_adapter_s *adapter,
708*9a5557fdSlucy wang - Sun Microsystems - Beijing China     struct unm_statistics *unm_stats);
709*9a5557fdSlucy wang - Sun Microsystems - Beijing China void nx_p3_nic_set_multi(unm_adapter *adapter);
710*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
711*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_init.c */
712*9a5557fdSlucy wang - Sun Microsystems - Beijing China int phantom_init(struct unm_adapter_s *adapter, int first_time);
713*9a5557fdSlucy wang - Sun Microsystems - Beijing China int load_from_flash(struct unm_adapter_s *adapter);
714*9a5557fdSlucy wang - Sun Microsystems - Beijing China int  pinit_from_rom(unm_adapter *adapter, int verbose);
715*9a5557fdSlucy wang - Sun Microsystems - Beijing China int  rom_fast_read(struct unm_adapter_s *adapter, int addr, int *valp);
716*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
717*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_isr.c */
718*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_handle_phy_intr(unm_adapter *adapter);
719*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
720*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* niu.c */
721*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_set_promiscuous_mode(struct unm_adapter_s *adapter,
722*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		unm_niu_prom_mode_t mode);
723*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_xg_set_promiscuous_mode(struct unm_adapter_s *adapter,
724*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		unm_niu_prom_mode_t mode);
725*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
726*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_xg_macaddr_set(struct unm_adapter_s *adapter,
727*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		unm_ethernet_macaddr_t addr);
728*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_disable_xg_port(struct unm_adapter_s *adapter);
729*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
730*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_niu_gbe_init_port(long port);
731*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_enable_gbe_port(struct unm_adapter_s *adapter,
732*9a5557fdSlucy wang - Sun Microsystems - Beijing China     unm_niu_gbe_ifmode_t mode);
733*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_disable_gbe_port(struct unm_adapter_s *adapter);
734*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
735*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_macaddr_get(struct unm_adapter_s *adapter, unsigned char *addr);
736*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_macaddr_set(struct unm_adapter_s *adapter,
737*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		unm_ethernet_macaddr_t addr);
738*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
739*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_xg_set_tx_flow_ctl(struct unm_adapter_s *adapter, int enable);
740*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_gbe_set_rx_flow_ctl(struct unm_adapter_s *adapter, int enable);
741*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_gbe_set_tx_flow_ctl(struct unm_adapter_s *adapter, int enable);
742*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_niu_gbe_disable_phy_interrupts(struct unm_adapter_s *);
743*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_niu_gbe_phy_read(struct unm_adapter_s *,
744*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		long reg, unm_crbword_t *readval);
745*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
746*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_ctx.c */
747*9a5557fdSlucy wang - Sun Microsystems - Beijing China int netxen_create_rxtx(struct unm_adapter_s *adapter);
748*9a5557fdSlucy wang - Sun Microsystems - Beijing China void netxen_destroy_rxtx(struct unm_adapter_s *adapter);
749*9a5557fdSlucy wang - Sun Microsystems - Beijing China int nx_fw_cmd_set_mtu(struct unm_adapter_s *adapter, int mtu);
750*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
751*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_main.c */
752*9a5557fdSlucy wang - Sun Microsystems - Beijing China int receive_peg_ready(struct unm_adapter_s *adapter);
753*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_update_cmd_producer(struct unm_adapter_s *adapter,
754*9a5557fdSlucy wang - Sun Microsystems - Beijing China     uint32_t crb_producer);
755*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_desc_dma_sync(ddi_dma_handle_t handle, uint_t start, uint_t count,
756*9a5557fdSlucy wang - Sun Microsystems - Beijing China     uint_t range, uint_t unit_size, uint_t direction);
757*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_pci_alloc_consistent(unm_adapter *, int, caddr_t *,
758*9a5557fdSlucy wang - Sun Microsystems - Beijing China     ddi_dma_cookie_t *, ddi_dma_handle_t *, ddi_acc_handle_t *);
759*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_pci_free_consistent(ddi_dma_handle_t *, ddi_acc_handle_t *);
760*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
761*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_ndd.c */
762*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nd_init(unm_adapter *adapter);
763*9a5557fdSlucy wang - Sun Microsystems - Beijing China enum ioc_reply unm_nd_ioctl(unm_adapter *adapter, queue_t *wq,
764*9a5557fdSlucy wang - Sun Microsystems - Beijing China 		mblk_t *mp, struct iocblk *iocp);
765*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nd_cleanup(unm_adapter *adapter);
766*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
767*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_gem.c */
768*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_destroy_intr(unm_adapter *adapter);
769*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_free_dummy_dma(unm_adapter *adapter);
770*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
771*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
772*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * (Internal) return values from ioctl subroutines
773*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
774*9a5557fdSlucy wang - Sun Microsystems - Beijing China enum ioc_reply {
775*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_INVAL = -1,	/* bad, NAK with EINVAL */
776*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_DONE, /* OK, reply sent  */
777*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_ACK, /* OK, just send ACK  */
778*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_REPLY, /* OK, just send reply */
779*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_RESTART_ACK, /* OK, restart & ACK */
780*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_RESTART_REPLY /* OK, restart & reply */
781*9a5557fdSlucy wang - Sun Microsystems - Beijing China };
782*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
783*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
784*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Shorthand for the NDD parameters
785*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
786*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_autoneg	nd_params[PARAM_ADV_AUTONEG_CAP].ndp_val
787*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_pause		nd_params[PARAM_ADV_PAUSE_CAP].ndp_val
788*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_asym_pause	nd_params[PARAM_ADV_ASYM_PAUSE_CAP].ndp_val
789*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_10000fdx	nd_params[PARAM_ADV_10000FDX_CAP].ndp_val
790*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_1000fdx	nd_params[PARAM_ADV_1000FDX_CAP].ndp_val
791*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_1000hdx	nd_params[PARAM_ADV_1000HDX_CAP].ndp_val
792*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_100fdx	nd_params[PARAM_ADV_100FDX_CAP].ndp_val
793*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_100hdx	nd_params[PARAM_ADV_100HDX_CAP].ndp_val
794*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_10fdx		nd_params[PARAM_ADV_10FDX_CAP].ndp_val
795*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_10hdx		nd_params[PARAM_ADV_10HDX_CAP].ndp_val
796*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_link_up		nd_params[PARAM_LINK_STATUS].ndp_val
797*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_link_speed	nd_params[PARAM_LINK_SPEED].ndp_val
798*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_link_duplex	nd_params[PARAM_LINK_DUPLEX].ndp_val
799*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_loop_mode		nd_params[PARAM_LOOP_MODE].ndp_val
800*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
801*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
802*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Property lookups
803*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
804*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_PROP_EXISTS(d, n) \
805*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_prop_exists(DDI_DEV_T_ANY, (d), DDI_PROP_DONTPASS, (n))
806*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_PROP_GET_INT(d, n) \
807*9a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_prop_get_int(DDI_DEV_T_ANY, (d), DDI_PROP_DONTPASS, (n), -1)
808*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
809*9a5557fdSlucy wang - Sun Microsystems - Beijing China /*
810*9a5557fdSlucy wang - Sun Microsystems - Beijing China  * Bit flags in the 'debug' word ...
811*9a5557fdSlucy wang - Sun Microsystems - Beijing China  */
812*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_DBG_TRACE	0x00000002 /* general flow tracing */
813*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_DBG_NDD		0x20000000 /* NDD operations */
814*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
815*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MBPS_10		10
816*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MBPS_100	100
817*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MBPS_1000	1000
818*9a5557fdSlucy wang - Sun Microsystems - Beijing China 
819*9a5557fdSlucy wang - Sun Microsystems - Beijing China #endif	/* !_UNM_NIC_ */
820