xref: /illumos-gate/usr/src/uts/common/io/ntxn/unm_nic.h (revision 1f0a2977)
19a5557fdSlucy wang - Sun Microsystems - Beijing China /*
29a5557fdSlucy wang - Sun Microsystems - Beijing China  * CDDL HEADER START
39a5557fdSlucy wang - Sun Microsystems - Beijing China  *
49a5557fdSlucy wang - Sun Microsystems - Beijing China  * The contents of this file are subject to the terms of the
59a5557fdSlucy wang - Sun Microsystems - Beijing China  * Common Development and Distribution License (the "License").
69a5557fdSlucy wang - Sun Microsystems - Beijing China  * You may not use this file except in compliance with the License.
79a5557fdSlucy wang - Sun Microsystems - Beijing China  *
89a5557fdSlucy wang - Sun Microsystems - Beijing China  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99a5557fdSlucy wang - Sun Microsystems - Beijing China  * or http://www.opensolaris.org/os/licensing.
109a5557fdSlucy wang - Sun Microsystems - Beijing China  * See the License for the specific language governing permissions
119a5557fdSlucy wang - Sun Microsystems - Beijing China  * and limitations under the License.
129a5557fdSlucy wang - Sun Microsystems - Beijing China  *
139a5557fdSlucy wang - Sun Microsystems - Beijing China  * When distributing Covered Code, include this CDDL HEADER in each
149a5557fdSlucy wang - Sun Microsystems - Beijing China  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159a5557fdSlucy wang - Sun Microsystems - Beijing China  * If applicable, add the following below this CDDL HEADER, with the
169a5557fdSlucy wang - Sun Microsystems - Beijing China  * fields enclosed by brackets "[]" replaced with your own identifying
179a5557fdSlucy wang - Sun Microsystems - Beijing China  * information: Portions Copyright [yyyy] [name of copyright owner]
189a5557fdSlucy wang - Sun Microsystems - Beijing China  *
199a5557fdSlucy wang - Sun Microsystems - Beijing China  * CDDL HEADER END
209a5557fdSlucy wang - Sun Microsystems - Beijing China  */
2193833965Sjing xiong ERI-SUN 
229a5557fdSlucy wang - Sun Microsystems - Beijing China /*
239a5557fdSlucy wang - Sun Microsystems - Beijing China  * Copyright 2008 NetXen, Inc.  All rights reserved.
249a5557fdSlucy wang - Sun Microsystems - Beijing China  * Use is subject to license terms.
259a5557fdSlucy wang - Sun Microsystems - Beijing China  */
269a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2793833965Sjing xiong ERI-SUN  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
289a5557fdSlucy wang - Sun Microsystems - Beijing China  * Use is subject to license terms.
299a5557fdSlucy wang - Sun Microsystems - Beijing China  */
3093833965Sjing xiong ERI-SUN 
319a5557fdSlucy wang - Sun Microsystems - Beijing China #ifndef _UNM_NIC_
329a5557fdSlucy wang - Sun Microsystems - Beijing China #define	_UNM_NIC_
339a5557fdSlucy wang - Sun Microsystems - Beijing China 
3493833965Sjing xiong ERI-SUN #ifdef __cplusplus
3593833965Sjing xiong ERI-SUN extern "C" {
3693833965Sjing xiong ERI-SUN #endif
3793833965Sjing xiong ERI-SUN 
389a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/inttypes.h>
399a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/rwlock.h>
409a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/mutex.h>
419a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/ddi.h>
429a5557fdSlucy wang - Sun Microsystems - Beijing China 
439a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/sunddi.h>
449a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/types.h>
459a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/stream.h>
469a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/strsun.h>
479a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/strsubr.h>
489a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/dlpi.h>
499a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/devops.h>
509a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/stat.h>
519a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/pci.h>
529a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/note.h>
539a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/modctl.h>
549a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/kstat.h>
559a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/ethernet.h>
569a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/errno.h>
579a5557fdSlucy wang - Sun Microsystems - Beijing China #include <netinet/ip6.h>
589a5557fdSlucy wang - Sun Microsystems - Beijing China #include <inet/common.h>
599a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/pattr.h>
609a5557fdSlucy wang - Sun Microsystems - Beijing China #include <inet/mi.h>
619a5557fdSlucy wang - Sun Microsystems - Beijing China #include <inet/nd.h>
629a5557fdSlucy wang - Sun Microsystems - Beijing China 
63dda0720aSjing xiong ERI-SUN #ifdef SOLARIS11
64da14cebeSEric Cheng #include <sys/mac_provider.h>
659a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/mac_ether.h>
66dda0720aSjing xiong ERI-SUN #else
67dda0720aSjing xiong ERI-SUN #include "mac.h"
68dda0720aSjing xiong ERI-SUN #include "mac_ether.h"
69dda0720aSjing xiong ERI-SUN #endif
709a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/miiregs.h> /* by fjlite out of intel */
719a5557fdSlucy wang - Sun Microsystems - Beijing China 
729a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_nic_hw.h"
739a5557fdSlucy wang - Sun Microsystems - Beijing China #include "nic_cmn.h"
749a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_inc.h" /* For MAX_RCV_CTX */
759a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_brdcfg.h"
769a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_version.h"
779a5557fdSlucy wang - Sun Microsystems - Beijing China #include "nic_phan_reg.h"
789a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_nic_ioctl.h"
799a5557fdSlucy wang - Sun Microsystems - Beijing China 
809a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MAX_ADDR_LEN	 6
819a5557fdSlucy wang - Sun Microsystems - Beijing China 
829a5557fdSlucy wang - Sun Microsystems - Beijing China #define	ADDR_IN_WINDOW1(off)	\
839a5557fdSlucy wang - Sun Microsystems - Beijing China 	((off > UNM_CRB_PCIX_HOST2) && (off < UNM_CRB_MAX)) ? 1 : 0
849a5557fdSlucy wang - Sun Microsystems - Beijing China 
859a5557fdSlucy wang - Sun Microsystems - Beijing China typedef unsigned long uptr_t;
869a5557fdSlucy wang - Sun Microsystems - Beijing China 
879a5557fdSlucy wang - Sun Microsystems - Beijing China #define	FIRST_PAGE_GROUP_START	0
889a5557fdSlucy wang - Sun Microsystems - Beijing China #define	FIRST_PAGE_GROUP_END	0x100000
899a5557fdSlucy wang - Sun Microsystems - Beijing China 
909a5557fdSlucy wang - Sun Microsystems - Beijing China #define	SECOND_PAGE_GROUP_START	0x6000000
919a5557fdSlucy wang - Sun Microsystems - Beijing China #define	SECOND_PAGE_GROUP_END	0x68BC000
929a5557fdSlucy wang - Sun Microsystems - Beijing China 
939a5557fdSlucy wang - Sun Microsystems - Beijing China #define	THIRD_PAGE_GROUP_START	0x70E4000
949a5557fdSlucy wang - Sun Microsystems - Beijing China #define	THIRD_PAGE_GROUP_END	0x8000000
959a5557fdSlucy wang - Sun Microsystems - Beijing China 
969a5557fdSlucy wang - Sun Microsystems - Beijing China #define	FIRST_PAGE_GROUP_SIZE	FIRST_PAGE_GROUP_END - FIRST_PAGE_GROUP_START
979a5557fdSlucy wang - Sun Microsystems - Beijing China #define	SECOND_PAGE_GROUP_SIZE	SECOND_PAGE_GROUP_END - SECOND_PAGE_GROUP_START
989a5557fdSlucy wang - Sun Microsystems - Beijing China #define	THIRD_PAGE_GROUP_SIZE	THIRD_PAGE_GROUP_END - THIRD_PAGE_GROUP_START
999a5557fdSlucy wang - Sun Microsystems - Beijing China 
1009a5557fdSlucy wang - Sun Microsystems - Beijing China /*
1019a5557fdSlucy wang - Sun Microsystems - Beijing China  * normalize a 64MB crb address to 32MB PCI window
1029a5557fdSlucy wang - Sun Microsystems - Beijing China  * To use CRB_NORMALIZE, window _must_ be set to 1
1039a5557fdSlucy wang - Sun Microsystems - Beijing China  */
1049a5557fdSlucy wang - Sun Microsystems - Beijing China #define	CRB_NORMAL(reg)	\
1059a5557fdSlucy wang - Sun Microsystems - Beijing China 	(reg) - UNM_CRB_PCIX_HOST2 + UNM_CRB_PCIX_HOST
1069a5557fdSlucy wang - Sun Microsystems - Beijing China #define	CRB_NORMALIZE(adapter, reg) \
1079a5557fdSlucy wang - Sun Microsystems - Beijing China 	(void *)(unsigned long)(pci_base_offset(adapter, CRB_NORMAL(reg)))
1089a5557fdSlucy wang - Sun Microsystems - Beijing China 
1099a5557fdSlucy wang - Sun Microsystems - Beijing China #define	DB_NORMALIZE(adapter, off) \
1109a5557fdSlucy wang - Sun Microsystems - Beijing China 	(void *)((unsigned long)adapter->ahw.db_base + (off))
1119a5557fdSlucy wang - Sun Microsystems - Beijing China 
1129a5557fdSlucy wang - Sun Microsystems - Beijing China #define	find_diff_among(a, b, range) \
1139a5557fdSlucy wang - Sun Microsystems - Beijing China 	((a) < (b)?((b)-(a)):((b)+(range)-(a)))
1149a5557fdSlucy wang - Sun Microsystems - Beijing China 
1159a5557fdSlucy wang - Sun Microsystems - Beijing China #define	__FUNCTION__		__func__
1169a5557fdSlucy wang - Sun Microsystems - Beijing China #define	nx_msleep(_msecs_)	delay(drv_usectohz(_msecs_ * 1000))
1179a5557fdSlucy wang - Sun Microsystems - Beijing China 
1189a5557fdSlucy wang - Sun Microsystems - Beijing China #define	HOST_TO_LE_64			LE_64
1199a5557fdSlucy wang - Sun Microsystems - Beijing China #define	HOST_TO_LE_32			LE_32
1209a5557fdSlucy wang - Sun Microsystems - Beijing China #define	LE_TO_HOST_32			LE_32
1219a5557fdSlucy wang - Sun Microsystems - Beijing China #define	HOST_TO_LE_16			LE_16
1229a5557fdSlucy wang - Sun Microsystems - Beijing China #define	LE_TO_HOST_16			LE_16
1239a5557fdSlucy wang - Sun Microsystems - Beijing China 
1249a5557fdSlucy wang - Sun Microsystems - Beijing China #define	dbwritel(DATA, ADDRESS) \
1259a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put32(adapter->db_handle, (uint32_t *)(ADDRESS), (DATA))
1269a5557fdSlucy wang - Sun Microsystems - Beijing China 
1279a5557fdSlucy wang - Sun Microsystems - Beijing China /*
1289a5557fdSlucy wang - Sun Microsystems - Beijing China  * Following macros require the mapped addresses to access
1299a5557fdSlucy wang - Sun Microsystems - Beijing China  * the Phantom memory.
1309a5557fdSlucy wang - Sun Microsystems - Beijing China  */
1319a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_READ_8(ADDRESS) \
1329a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_get8(adapter->regs_handle, (uint8_t *)(ADDRESS))
1339a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_READ_16(ADDRESS) \
1349a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_get16(adapter->regs_handle, (uint16_t *)(ADDRESS))
1359a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_READ_32(ADDRESS) \
1369a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_get32(adapter->regs_handle, (uint32_t *)(ADDRESS))
1379a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_READ_64(ADDRESS) \
1389a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_get64(adapter->regs_handle, (uint64_t *)(ADDRESS))
1399a5557fdSlucy wang - Sun Microsystems - Beijing China 
1409a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_WRITE_8(DATA, ADDRESS) \
1419a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put8(adapter->regs_handle, (uint8_t *)(ADDRESS), (DATA))
1429a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_WRITE_16(DATA, ADDRESS) \
1439a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put16(adapter->regs_handle, (uint16_t *)(ADDRESS), (DATA))
1449a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_WRITE_32(DATA, ADDRESS) \
1459a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put32(adapter->regs_handle, (uint32_t *)(ADDRESS), (DATA))
1469a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_PCI_WRITE_64(DATA, ADDRESS) \
1479a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_put64(adapter->regs_handle, (uint64_t *)(ADDRESS), (DATA))
1489a5557fdSlucy wang - Sun Microsystems - Beijing China 
1499a5557fdSlucy wang - Sun Microsystems - Beijing China #ifdef DEBUG_LEVEL
1509a5557fdSlucy wang - Sun Microsystems - Beijing China #define	DPRINTF(n, args)	if (DEBUG_LEVEL > (n)) cmn_err args;
1519a5557fdSlucy wang - Sun Microsystems - Beijing China #else
1529a5557fdSlucy wang - Sun Microsystems - Beijing China #define	DPRINTF(n, args)
1539a5557fdSlucy wang - Sun Microsystems - Beijing China #endif
1549a5557fdSlucy wang - Sun Microsystems - Beijing China 
1559a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_SPIN_LOCK(_lp_)			mutex_enter((_lp_))
1569a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_SPIN_UNLOCK(_lp_)			mutex_exit((_lp_))
1579a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_SPIN_LOCK_ISR(_lp_)			mutex_enter((_lp_))
1589a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_SPIN_UNLOCK_ISR(_lp_)		mutex_exit((_lp_))
1599a5557fdSlucy wang - Sun Microsystems - Beijing China 
1609a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_WRITE_LOCK(_lp_)			rw_enter((_lp_), RW_WRITER)
1619a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_WRITE_UNLOCK(_lp_)			rw_exit((_lp_))
1629a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_READ_LOCK(_lp_)			rw_enter((_lp_), RW_READER)
1639a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_READ_UNLOCK(_lp_)			rw_exit((_lp_))
1649a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_WRITE_LOCK_IRQS(_lp_, _fl_)		rw_enter((_lp_), RW_WRITER)
1659a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_WRITE_UNLOCK_IRQR(_lp_, _fl_)	rw_exit((_lp_))
1669a5557fdSlucy wang - Sun Microsystems - Beijing China 
1679a5557fdSlucy wang - Sun Microsystems - Beijing China extern char unm_nic_driver_name[];
1689a5557fdSlucy wang - Sun Microsystems - Beijing China extern int verbmsg;
1699a5557fdSlucy wang - Sun Microsystems - Beijing China 
1709a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_dmah_node {
1719a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_dmah_node *next;
1729a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t dmahdl;
1739a5557fdSlucy wang - Sun Microsystems - Beijing China }unm_dmah_node_t;
1749a5557fdSlucy wang - Sun Microsystems - Beijing China 
1759a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct dma_area {
1769a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t	acc_hdl;	/* handle for memory	*/
1779a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t	dma_hdl;	/* DMA handle		*/
1789a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		ncookies;
1799a5557fdSlucy wang - Sun Microsystems - Beijing China 	u64			dma_addr;
1809a5557fdSlucy wang - Sun Microsystems - Beijing China 	void			*vaddr;
1819a5557fdSlucy wang - Sun Microsystems - Beijing China } dma_area_t;
1829a5557fdSlucy wang - Sun Microsystems - Beijing China 
1839a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_cmd_buffer {
1849a5557fdSlucy wang - Sun Microsystems - Beijing China 	dma_area_t	dma_area;
1859a5557fdSlucy wang - Sun Microsystems - Beijing China 	mblk_t		*msg;
1869a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_dmah_node_t	*head, *tail;
1879a5557fdSlucy wang - Sun Microsystems - Beijing China };
1889a5557fdSlucy wang - Sun Microsystems - Beijing China 
1899a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct pkt_info {
1909a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	total_len;
1919a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	mblk_no;
1929a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	etype;
1939a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	mac_hlen;
1949a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	ip_hlen;
1959a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t	l4_proto;
1969a5557fdSlucy wang - Sun Microsystems - Beijing China } pktinfo_t;
1979a5557fdSlucy wang - Sun Microsystems - Beijing China 
1989a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_rcv_desc_context_s unm_rcv_desc_ctx_t;
1999a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_adapter_s unm_adapter;
2009a5557fdSlucy wang - Sun Microsystems - Beijing China 
2019a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_rx_buffer {
2029a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_rx_buffer	*next;
2039a5557fdSlucy wang - Sun Microsystems - Beijing China 	dma_area_t		dma_info;
2049a5557fdSlucy wang - Sun Microsystems - Beijing China 	frtn_t			rx_recycle;	/* recycle function */
2059a5557fdSlucy wang - Sun Microsystems - Beijing China 	mblk_t			*mp;
2069a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rcv_desc_ctx_t	*rcv_desc;
2079a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_adapter		*adapter;
2089a5557fdSlucy wang - Sun Microsystems - Beijing China }unm_rx_buffer_t;
2099a5557fdSlucy wang - Sun Microsystems - Beijing China 
2109a5557fdSlucy wang - Sun Microsystems - Beijing China /* Board types */
2119a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_GBE		0x01
2129a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_XGBE    0x02
2139a5557fdSlucy wang - Sun Microsystems - Beijing China 
2149a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2159a5557fdSlucy wang - Sun Microsystems - Beijing China  * One hardware_context{} per adapter
2169a5557fdSlucy wang - Sun Microsystems - Beijing China  * contains interrupt info as well shared hardware info.
2179a5557fdSlucy wang - Sun Microsystems - Beijing China  */
2189a5557fdSlucy wang - Sun Microsystems - Beijing China typedef	struct _hardware_context {
2199a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_base0;
2209a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_len0;
2219a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_base1;
2229a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_len1;
2239a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_base2;
2249a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	pci_len2;
2259a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	first_page_group_end;
2269a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	first_page_group_start;
2279a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint8_t			revision_id;
2289a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint8_t			cut_through;
2299a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		board_type;
2309a5557fdSlucy wang - Sun Microsystems - Beijing China 	int				pci_func;
2319a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		max_ports;
2329a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_board_info_t	boardcfg;
2339a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		linkup;
2349a5557fdSlucy wang - Sun Microsystems - Beijing China 
2359a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_adapter_s	*adapter;
2369a5557fdSlucy wang - Sun Microsystems - Beijing China 	cmdDescType0_t			*cmdDescHead;
2379a5557fdSlucy wang - Sun Microsystems - Beijing China 
2389a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		cmdProducer;
2399a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		cmdConsumer;
2409a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		rcvFlag;
2419a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		crb_base;
2429a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	db_base;    /* base of mapped db memory */
2439a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	db_len;    /* length of mapped db memory */
2449a5557fdSlucy wang - Sun Microsystems - Beijing China 
2459a5557fdSlucy wang - Sun Microsystems - Beijing China 
2469a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t		cmdDesc_physAddr;
2479a5557fdSlucy wang - Sun Microsystems - Beijing China 	int				qdr_sn_window, ddr_mn_window;
2489a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long	mn_win_crb, ms_win_crb;
2499a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t cmd_desc_dma_handle;
2509a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t cmd_desc_acc_handle;
2519a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_cookie_t cmd_desc_dma_cookie;
2529a5557fdSlucy wang - Sun Microsystems - Beijing China } hardware_context, *phardware_context;
2539a5557fdSlucy wang - Sun Microsystems - Beijing China 
2549a5557fdSlucy wang - Sun Microsystems - Beijing China #define	NX_CT_DEFAULT_RX_BUF_LEN	2048
2559a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MTU_SIZE			1500
256dda0720aSjing xiong ERI-SUN #define	MAX_COOKIES_PER_CMD		15
2579a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_DB_MAPSIZE_BYTES		0x1000
2589a5557fdSlucy wang - Sun Microsystems - Beijing China #define	EXTRA_HANDLES			512
2599a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_TX_BCOPY_THRESHOLD		128
2609a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_RX_BCOPY_THRESHOLD		128
2619a5557fdSlucy wang - Sun Microsystems - Beijing China #define	NX_MIN_DRIVER_RDS_SIZE		64
2629a5557fdSlucy wang - Sun Microsystems - Beijing China 
2639a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_pauseparam {
2649a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t rx_pause;
2659a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t tx_pause;
2669a5557fdSlucy wang - Sun Microsystems - Beijing China } unm_pauseparam_t;
2679a5557fdSlucy wang - Sun Microsystems - Beijing China 
2689a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2699a5557fdSlucy wang - Sun Microsystems - Beijing China  * The driver supports the NDD ioctls ND_GET/ND_SET, and the loopback
2709a5557fdSlucy wang - Sun Microsystems - Beijing China  * ioctls LB_GET_INFO_SIZE/LB_GET_INFO/LB_GET_MODE/LB_SET_MODE
2719a5557fdSlucy wang - Sun Microsystems - Beijing China  *
2729a5557fdSlucy wang - Sun Microsystems - Beijing China  * These are the values to use with LD_SET_MODE.
2739a5557fdSlucy wang - Sun Microsystems - Beijing China  */
2749a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_LOOP_NONE	   0
2759a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_LOOP_INTERNAL_PHY   1
2769a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_LOOP_INTERNAL_MAC   2
2779a5557fdSlucy wang - Sun Microsystems - Beijing China 
2789a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2799a5557fdSlucy wang - Sun Microsystems - Beijing China  * Named Data (ND) Parameter Management Structure
2809a5557fdSlucy wang - Sun Microsystems - Beijing China  */
2819a5557fdSlucy wang - Sun Microsystems - Beijing China typedef	struct {
2829a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			ndp_info;
2839a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			ndp_min;
2849a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			ndp_max;
2859a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			ndp_val;
2869a5557fdSlucy wang - Sun Microsystems - Beijing China 	char		*ndp_name;
2879a5557fdSlucy wang - Sun Microsystems - Beijing China } nd_param_t; /* 0x18 (24) bytes  */
2889a5557fdSlucy wang - Sun Microsystems - Beijing China 
2899a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2909a5557fdSlucy wang - Sun Microsystems - Beijing China  * NDD parameter indexes, divided into:
2919a5557fdSlucy wang - Sun Microsystems - Beijing China  *
2929a5557fdSlucy wang - Sun Microsystems - Beijing China  *      read-only parameters describing the hardware's capabilities
2939a5557fdSlucy wang - Sun Microsystems - Beijing China  *      read-write parameters controlling the advertised capabilities
2949a5557fdSlucy wang - Sun Microsystems - Beijing China  *      read-only parameters describing the partner's capabilities
2959a5557fdSlucy wang - Sun Microsystems - Beijing China  *      read-only parameters describing the link state
2969a5557fdSlucy wang - Sun Microsystems - Beijing China  */
2979a5557fdSlucy wang - Sun Microsystems - Beijing China enum {
2989a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_AUTONEG_CAP = 0,
2999a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_PAUSE_CAP,
3009a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ASYM_PAUSE_CAP,
3019a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_10000FDX_CAP,
3029a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_1000FDX_CAP,
3039a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_1000HDX_CAP,
3049a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_100T4_CAP,
3059a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_100FDX_CAP,
3069a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_100HDX_CAP,
3079a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_10FDX_CAP,
3089a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_10HDX_CAP,
3099a5557fdSlucy wang - Sun Microsystems - Beijing China 
3109a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_AUTONEG_CAP,
3119a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_PAUSE_CAP,
3129a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_ASYM_PAUSE_CAP,
3139a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_10000FDX_CAP,
3149a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_1000FDX_CAP,
3159a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_1000HDX_CAP,
3169a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_100T4_CAP,
3179a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_100FDX_CAP,
3189a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_100HDX_CAP,
3199a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_10FDX_CAP,
3209a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_ADV_10HDX_CAP,
3219a5557fdSlucy wang - Sun Microsystems - Beijing China 
3229a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_LINK_STATUS,
3239a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_LINK_SPEED,
3249a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_LINK_DUPLEX,
3259a5557fdSlucy wang - Sun Microsystems - Beijing China 
3269a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_LOOP_MODE,
3279a5557fdSlucy wang - Sun Microsystems - Beijing China 
3289a5557fdSlucy wang - Sun Microsystems - Beijing China 	PARAM_COUNT
3299a5557fdSlucy wang - Sun Microsystems - Beijing China };
3309a5557fdSlucy wang - Sun Microsystems - Beijing China 
3319a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_stats {
3329a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rcvdbadmsg;
3339a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  xmitcalled;
3349a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  xmitedframes;
3359a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  xmitfinished;
3369a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  badmsglen;
3379a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  nocmddescriptor;
3389a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  polled;
3399a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  uphappy;
3409a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  updropped;
3419a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  uplcong;
3429a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  uphcong;
3439a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  upmcong;
3449a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  updunno;
3459a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  msgfreed;
3469a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txdropped;
3479a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txnullmsg;
3489a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  csummed;
3499a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  no_rcv;
3509a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rxbytes;
3519a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txbytes;
3529a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  ints;
3539a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  desballocfailed;
3549a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txcopyed;
3559a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  txmapped;
3569a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  outoftxdmahdl;
3579a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  outofcmddesc;
3589a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rxcopyed;
3599a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rxmapped;
3609a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  outofrxbuf;
3619a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  promiscmode;
3629a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  rxbufshort;
3639a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t  allocbfailed;
3649a5557fdSlucy wang - Sun Microsystems - Beijing China };
3659a5557fdSlucy wang - Sun Microsystems - Beijing China 
3669a5557fdSlucy wang - Sun Microsystems - Beijing China /* descriptor types */
3679a5557fdSlucy wang - Sun Microsystems - Beijing China #define	RCV_RING_STD		RCV_DESC_NORMAL
3689a5557fdSlucy wang - Sun Microsystems - Beijing China #define	RCV_RING_JUMBO		RCV_DESC_JUMBO
3699a5557fdSlucy wang - Sun Microsystems - Beijing China #define	RCV_RING_LRO		RCV_DESC_LRO
3709a5557fdSlucy wang - Sun Microsystems - Beijing China 
3719a5557fdSlucy wang - Sun Microsystems - Beijing China /*
3729a5557fdSlucy wang - Sun Microsystems - Beijing China  * Rcv Descriptor Context. One such per Rcv Descriptor. There may
3739a5557fdSlucy wang - Sun Microsystems - Beijing China  * be one Rcv Descriptor for normal packets, one for jumbo,
3749a5557fdSlucy wang - Sun Microsystems - Beijing China  * one for LRO and may be expanded.
3759a5557fdSlucy wang - Sun Microsystems - Beijing China  */
3769a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_rcv_desc_context_s {
3779a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	producer;
3789a5557fdSlucy wang - Sun Microsystems - Beijing China 
3799a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t	phys_addr;
3809a5557fdSlucy wang - Sun Microsystems - Beijing China 	dev_info_t	*phys_pdev;
3819a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* address of rx ring in Phantom */
3829a5557fdSlucy wang - Sun Microsystems - Beijing China 	rcvDesc_t	*desc_head;
3839a5557fdSlucy wang - Sun Microsystems - Beijing China 
3849a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxRxDescCount;
3859a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_desc_handled;
3869a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_buf_card;
3879a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_buf_total;
3889a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_buf_free;
3899a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	rx_buf_recycle;
3909a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rx_buffer_t *rx_buf_pool;
3919a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rx_buffer_t *pool_list;
3929a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rx_buffer_t *recycle_list;
3939a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t	pool_lock[1];	/* buffer pool lock */
3949a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t	recycle_lock[1]; /* buffer recycle lock */
3959a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* size of the receive buf */
3969a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	buf_size;
3979a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* rx buffers for receive   */
3989a5557fdSlucy wang - Sun Microsystems - Beijing China 
3999a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t	rx_desc_dma_handle;
4009a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t 	rx_desc_acc_handle;
4019a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_cookie_t	rx_desc_dma_cookie;
4029a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		host_rx_producer;
4039a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		dma_size;
4049a5557fdSlucy wang - Sun Microsystems - Beijing China };
4059a5557fdSlucy wang - Sun Microsystems - Beijing China 
4069a5557fdSlucy wang - Sun Microsystems - Beijing China /*
4079a5557fdSlucy wang - Sun Microsystems - Beijing China  * Receive context. There is one such structure per instance of the
4089a5557fdSlucy wang - Sun Microsystems - Beijing China  * receive processing. Any state information that is relevant to
4099a5557fdSlucy wang - Sun Microsystems - Beijing China  * the receive, and is must be in this structure. The global data may be
4109a5557fdSlucy wang - Sun Microsystems - Beijing China  * present elsewhere.
4119a5557fdSlucy wang - Sun Microsystems - Beijing China  */
4129a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_recv_context_s {
4139a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_rcv_desc_ctx_t 	rcv_desc[NUM_RCV_DESC_RINGS];
4149a5557fdSlucy wang - Sun Microsystems - Beijing China 
4159a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t			statusRxConsumer;
4169a5557fdSlucy wang - Sun Microsystems - Beijing China 
4179a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t			rcvStatusDesc_physAddr;
4189a5557fdSlucy wang - Sun Microsystems - Beijing China 	statusDesc_t 		*rcvStatusDescHead;
4199a5557fdSlucy wang - Sun Microsystems - Beijing China 
4209a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t	status_desc_dma_handle;
4219a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t	status_desc_acc_handle;
4229a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_cookie_t	status_desc_dma_cookie;
4239a5557fdSlucy wang - Sun Microsystems - Beijing China 
4249a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		state, host_sds_consumer;
4259a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		context_id, virt_port;
4269a5557fdSlucy wang - Sun Microsystems - Beijing China } unm_recv_context_t;
4279a5557fdSlucy wang - Sun Microsystems - Beijing China 
4289a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_MSI_ENABLED	0x02
4299a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_MSIX_ENABLED	0x04
4309a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_IS_MSI_FAMILY(ADAPTER)	\
4319a5557fdSlucy wang - Sun Microsystems - Beijing China 	((ADAPTER)->flags & (UNM_NIC_MSI_ENABLED | UNM_NIC_MSIX_ENABLED))
4329a5557fdSlucy wang - Sun Microsystems - Beijing China 
4339a5557fdSlucy wang - Sun Microsystems - Beijing China #define	NX_USE_MSIX
4349a5557fdSlucy wang - Sun Microsystems - Beijing China 
4359a5557fdSlucy wang - Sun Microsystems - Beijing China /* msix defines */
4369a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MSIX_ENTRIES_PER_ADAPTER	8
4379a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_MSIX_TBL_SPACE		8192
4389a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_PCI_REG_MSIX_TBL		0x44
4399a5557fdSlucy wang - Sun Microsystems - Beijing China 
4409a5557fdSlucy wang - Sun Microsystems - Beijing China /*
4419a5557fdSlucy wang - Sun Microsystems - Beijing China  * Bug: word or char write on MSI-X capcabilities register (0x40) in PCI config
4429a5557fdSlucy wang - Sun Microsystems - Beijing China  * space has no effect on register values. Need to write dword.
4439a5557fdSlucy wang - Sun Microsystems - Beijing China  */
4449a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_HWBUG_8_WORKAROUND
4459a5557fdSlucy wang - Sun Microsystems - Beijing China 
4469a5557fdSlucy wang - Sun Microsystems - Beijing China /*
4479a5557fdSlucy wang - Sun Microsystems - Beijing China  * Bug: Can not reset bit 32 (msix enable bit) on MSI-X capcabilities
4489a5557fdSlucy wang - Sun Microsystems - Beijing China  * register (0x40) independently.
4499a5557fdSlucy wang - Sun Microsystems - Beijing China  * Need to write 0x0 (zero) to MSI-X capcabilities register in order to reset
4509a5557fdSlucy wang - Sun Microsystems - Beijing China  * msix enable bit. On writing zero rest of the bits are not touched.
4519a5557fdSlucy wang - Sun Microsystems - Beijing China  */
4529a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_HWBUG_9_WORKAROUND
4539a5557fdSlucy wang - Sun Microsystems - Beijing China 
4549a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_MC_COUNT    38	/* == ((UNM_ADDR_L2LU_COUNT-1)/4) -2 */
4559a5557fdSlucy wang - Sun Microsystems - Beijing China 
4569a5557fdSlucy wang - Sun Microsystems - Beijing China /* Following structure is for specific port information */
4579a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_s {
4589a5557fdSlucy wang - Sun Microsystems - Beijing China 	hardware_context	ahw;
4599a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint8_t			id[32];
4609a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		portnum;
4619a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		physical_port;
4629a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		link_speed;
4639a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		link_duplex;
4649a5557fdSlucy wang - Sun Microsystems - Beijing China 
4659a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_adapter_stats stats;
4669a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			rx_csum;
4679a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			status;
4689a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t    		stats_lock;
4699a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned char		mac_addr[MAX_ADDR_LEN];
4709a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			mtu;		/* active mtu */
4719a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			maxmtu;		/* max possible mtu value */
4729a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		promisc;
4739a5557fdSlucy wang - Sun Microsystems - Beijing China 
4749a5557fdSlucy wang - Sun Microsystems - Beijing China 	mac_resource_handle_t   mac_rx_ring_ha;
4759a5557fdSlucy wang - Sun Microsystems - Beijing China 	mac_handle_t	mach;
4769a5557fdSlucy wang - Sun Microsystems - Beijing China 	int				flags;
4779a5557fdSlucy wang - Sun Microsystems - Beijing China 
4789a5557fdSlucy wang - Sun Microsystems - Beijing China 	int		  instance;
4799a5557fdSlucy wang - Sun Microsystems - Beijing China 	dev_info_t	  *dip;
4809a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t  pci_cfg_handle;
4819a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t  regs_handle;
4829a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_attr_t    gc_dma_attr_desc;
4839a5557fdSlucy wang - Sun Microsystems - Beijing China 
4849a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct ddi_device_acc_attr  gc_attr_desc;
4859a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_iblock_cookie_t iblock_cookie;
4869a5557fdSlucy wang - Sun Microsystems - Beijing China 	const char *name;
4879a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t  db_handle;
4889a5557fdSlucy wang - Sun Microsystems - Beijing China 
4899a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_intr_handle_t	intr_handle;
4909a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			intr_type;
4919a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint_t		intr_pri;
4929a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_dmah_node_t		*dmahdl_pool;
4939a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_dmah_node_t		tx_dma_hdls[MAX_CMD_DESCRIPTORS+EXTRA_HANDLES];
4949a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t		freehdls;
4959a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t		freecmds;
4969a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			tx_bcopy_threshold;
4979a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t		tx_lock;
4989a5557fdSlucy wang - Sun Microsystems - Beijing China 	krwlock_t		adapter_lock;
4999a5557fdSlucy wang - Sun Microsystems - Beijing China 	kmutex_t		lock;
5009a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct nx_legacy_intr_set	legacy_intr;
5019a5557fdSlucy wang - Sun Microsystems - Beijing China 	timeout_id_t		watchdog_timer;
5029a5557fdSlucy wang - Sun Microsystems - Beijing China 	kstat_t			*kstats[1];
5039a5557fdSlucy wang - Sun Microsystems - Beijing China 
5049a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		curr_window;
5059a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		crb_win;
5069a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		cmdProducer;
5079a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		*cmdConsumer;
5089a5557fdSlucy wang - Sun Microsystems - Beijing China 
5099a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		interrupt_crb;
5109a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		fw_major;
5119a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		crb_addr_cmd_producer;
5129a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		crb_addr_cmd_consumer;
5139a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint16_t		tx_context_id;
5149a5557fdSlucy wang - Sun Microsystems - Beijing China 	short			context_alloced;
5159a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			max_rds_rings;
5169a5557fdSlucy wang - Sun Microsystems - Beijing China 
5179a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t		lastCmdConsumer;
5189a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* Num of bufs posted in phantom */
5199a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	pendingCmdCount;
5209a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxTxDescCount;
5219a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxRxDescCount;
5229a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxJumboRxDescCount;
5239a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	MaxLroRxDescCount;
5249a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* Num of instances active on cmd buffer ring */
5259a5557fdSlucy wang - Sun Microsystems - Beijing China 	int		resched_needed;
5269a5557fdSlucy wang - Sun Microsystems - Beijing China 
5279a5557fdSlucy wang - Sun Microsystems - Beijing China 	int			driver_mismatch;
5289a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint32_t	temp;
5299a5557fdSlucy wang - Sun Microsystems - Beijing China 
5309a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct unm_cmd_buffer *cmd_buf_arr;  /* Command buffers for xmit */
5319a5557fdSlucy wang - Sun Microsystems - Beijing China 	int		rx_bcopy_threshold;
5329a5557fdSlucy wang - Sun Microsystems - Beijing China 
5339a5557fdSlucy wang - Sun Microsystems - Beijing China 	/*
5349a5557fdSlucy wang - Sun Microsystems - Beijing China 	 * Receive instances. These can be either one per port,
5359a5557fdSlucy wang - Sun Microsystems - Beijing China 	 * or one per peg, etc.
5369a5557fdSlucy wang - Sun Microsystems - Beijing China 	 */
5379a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_recv_context_t	recv_ctx[MAX_RCV_CTX];
5389a5557fdSlucy wang - Sun Microsystems - Beijing China 	int		is_up;
5399a5557fdSlucy wang - Sun Microsystems - Beijing China 
5409a5557fdSlucy wang - Sun Microsystems - Beijing China 	/* context interface shared between card and host */
5419a5557fdSlucy wang - Sun Microsystems - Beijing China 	RingContext		*ctxDesc;
5429a5557fdSlucy wang - Sun Microsystems - Beijing China 	uint64_t		ctxDesc_physAddr;
5439a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_dma_handle_t 	ctxDesc_dma_handle;
5449a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_acc_handle_t 	ctxDesc_acc_handle;
5459a5557fdSlucy wang - Sun Microsystems - Beijing China 
5469a5557fdSlucy wang - Sun Microsystems - Beijing China 	struct {
5479a5557fdSlucy wang - Sun Microsystems - Beijing China 		void			*addr;
5489a5557fdSlucy wang - Sun Microsystems - Beijing China 		uint64_t		phys_addr;
5499a5557fdSlucy wang - Sun Microsystems - Beijing China 		ddi_dma_handle_t	dma_handle;
5509a5557fdSlucy wang - Sun Microsystems - Beijing China 		ddi_acc_handle_t	acc_handle;
5519a5557fdSlucy wang - Sun Microsystems - Beijing China 	} dummy_dma;
5529a5557fdSlucy wang - Sun Microsystems - Beijing China 
5539a5557fdSlucy wang - Sun Microsystems - Beijing China 	void	(*unm_nic_pci_change_crbwindow)(struct unm_adapter_s *,
5549a5557fdSlucy wang - Sun Microsystems - Beijing China 		    uint32_t);
5559a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_crb_writelit_adapter)(struct unm_adapter_s *,
5569a5557fdSlucy wang - Sun Microsystems - Beijing China 		    unsigned long, int);
5579a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned long long
5589a5557fdSlucy wang - Sun Microsystems - Beijing China 		(*unm_nic_pci_set_window)(struct unm_adapter_s *,
5599a5557fdSlucy wang - Sun Microsystems - Beijing China 		    unsigned long long);
5609a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_fill_statistics)(struct unm_adapter_s *,
5619a5557fdSlucy wang - Sun Microsystems - Beijing China 		    struct unm_statistics *);
5629a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_clear_statistics)(struct unm_adapter_s *);
5639a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_hw_write_wx)(struct unm_adapter_s *, u64,
5649a5557fdSlucy wang - Sun Microsystems - Beijing China 	    void *, int);
5659a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_hw_read_wx)(struct unm_adapter_s *, u64, void *, int);
5669a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_hw_write_ioctl)(struct unm_adapter_s *, u64, void *,
5679a5557fdSlucy wang - Sun Microsystems - Beijing China 		    int);
5689a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_hw_read_ioctl)(struct unm_adapter_s *, u64, void *,
5699a5557fdSlucy wang - Sun Microsystems - Beijing China 		    int);
5709a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_pci_mem_write)(struct unm_adapter_s *, u64, void *,
5719a5557fdSlucy wang - Sun Microsystems - Beijing China 		    int);
5729a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_pci_mem_read)(struct unm_adapter_s *, u64, void *,
5739a5557fdSlucy wang - Sun Microsystems - Beijing China 		    int);
5749a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_pci_write_immediate)(struct unm_adapter_s *, u64,
5759a5557fdSlucy wang - Sun Microsystems - Beijing China 		    u32 *);
5769a5557fdSlucy wang - Sun Microsystems - Beijing China 	int	(*unm_nic_pci_read_immediate)(struct unm_adapter_s *, u64,
5779a5557fdSlucy wang - Sun Microsystems - Beijing China 		    u32 *);
5789a5557fdSlucy wang - Sun Microsystems - Beijing China 	void	(*unm_nic_pci_write_normalize)(struct unm_adapter_s *, u64,
5799a5557fdSlucy wang - Sun Microsystems - Beijing China 		    u32);
5809a5557fdSlucy wang - Sun Microsystems - Beijing China 	u32	(*unm_nic_pci_read_normalize)(struct unm_adapter_s *, u64);
5819a5557fdSlucy wang - Sun Microsystems - Beijing China 
5829a5557fdSlucy wang - Sun Microsystems - Beijing China 	caddr_t			nd_data_p;
5839a5557fdSlucy wang - Sun Microsystems - Beijing China 	nd_param_t		nd_params[PARAM_COUNT];
5849a5557fdSlucy wang - Sun Microsystems - Beijing China };  /* unm_adapter structure */
5859a5557fdSlucy wang - Sun Microsystems - Beijing China 
5869a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_HOST_DUMMY_DMA_SIZE	 1024
5879a5557fdSlucy wang - Sun Microsystems - Beijing China 
5889a5557fdSlucy wang - Sun Microsystems - Beijing China /* Following structure is for specific port information    */
5899a5557fdSlucy wang - Sun Microsystems - Beijing China 
5909a5557fdSlucy wang - Sun Microsystems - Beijing China #define	PCI_OFFSET_FIRST_RANGE(adapter, off)	\
5919a5557fdSlucy wang - Sun Microsystems - Beijing China 	((adapter)->ahw.pci_base0 + off)
5929a5557fdSlucy wang - Sun Microsystems - Beijing China #define	PCI_OFFSET_SECOND_RANGE(adapter, off)	\
5939a5557fdSlucy wang - Sun Microsystems - Beijing China 	((adapter)->ahw.pci_base1 + off - SECOND_PAGE_GROUP_START)
5949a5557fdSlucy wang - Sun Microsystems - Beijing China #define	PCI_OFFSET_THIRD_RANGE(adapter, off)	\
5959a5557fdSlucy wang - Sun Microsystems - Beijing China 	((adapter)->ahw.pci_base2 + off - THIRD_PAGE_GROUP_START)
5969a5557fdSlucy wang - Sun Microsystems - Beijing China 
5979a5557fdSlucy wang - Sun Microsystems - Beijing China #define	pci_base_offset(adapter, off)	\
5989a5557fdSlucy wang - Sun Microsystems - Beijing China 	((((off) < ((adapter)->ahw.first_page_group_end)) &&	\
5999a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((off) >= ((adapter)->ahw.first_page_group_start))) ?	\
6009a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((adapter)->ahw.pci_base0 + (off)) :	\
6019a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((((off) < SECOND_PAGE_GROUP_END) &&	\
6029a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((off) >= SECOND_PAGE_GROUP_START)) ?	\
6039a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((adapter)->ahw.pci_base1 +		\
6049a5557fdSlucy wang - Sun Microsystems - Beijing China 	    (off) - SECOND_PAGE_GROUP_START) :	\
6059a5557fdSlucy wang - Sun Microsystems - Beijing China 		((((off) < THIRD_PAGE_GROUP_END) &&	\
6069a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((off) >= THIRD_PAGE_GROUP_START)) ?	\
6079a5557fdSlucy wang - Sun Microsystems - Beijing China 	    ((adapter)->ahw.pci_base2 + (off) -	\
6089a5557fdSlucy wang - Sun Microsystems - Beijing China 	    THIRD_PAGE_GROUP_START) :		\
6099a5557fdSlucy wang - Sun Microsystems - Beijing China 	    0)))
6109a5557fdSlucy wang - Sun Microsystems - Beijing China #define	unm_nic_reg_write(_adp_, _off_, _val_)			\
6119a5557fdSlucy wang - Sun Microsystems - Beijing China 	{							\
6129a5557fdSlucy wang - Sun Microsystems - Beijing China 		__uint32_t	_v1_ = (_val_);			\
6139a5557fdSlucy wang - Sun Microsystems - Beijing China 		((_adp_)->unm_nic_hw_write_wx((_adp_), (_off_),	\
6149a5557fdSlucy wang - Sun Microsystems - Beijing China 		    &_v1_, 4));					\
6159a5557fdSlucy wang - Sun Microsystems - Beijing China 	}
6169a5557fdSlucy wang - Sun Microsystems - Beijing China 
6179a5557fdSlucy wang - Sun Microsystems - Beijing China #define	unm_nic_reg_read(_adp_, _off_, _ptr_)			\
6189a5557fdSlucy wang - Sun Microsystems - Beijing China 	((_adp_)->unm_nic_hw_read_wx((_adp_), (_off_), (_ptr_), 4))
6199a5557fdSlucy wang - Sun Microsystems - Beijing China 
6209a5557fdSlucy wang - Sun Microsystems - Beijing China 
6219a5557fdSlucy wang - Sun Microsystems - Beijing China #define	unm_nic_write_w0(_adp_, _idx_, _val_)			\
6229a5557fdSlucy wang - Sun Microsystems - Beijing China 	((_adp_)->unm_nic_hw_write_wx((_adp_), (_idx_), &(_val_), 4))
6239a5557fdSlucy wang - Sun Microsystems - Beijing China 
6249a5557fdSlucy wang - Sun Microsystems - Beijing China #define	unm_nic_read_w0(_adp_, _idx_, _val_)			\
6259a5557fdSlucy wang - Sun Microsystems - Beijing China 	((_adp_)->unm_nic_hw_read_wx((_adp_), (_idx_), (_val_), 4))
6269a5557fdSlucy wang - Sun Microsystems - Beijing China 
6279a5557fdSlucy wang - Sun Microsystems - Beijing China /* Functions available from unm_nic_hw.c */
6289a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_get_board_info(struct unm_adapter_s *adapter);
6299a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_write_crb(struct unm_adapter_s *adapter, uint32_t index,
6309a5557fdSlucy wang - Sun Microsystems - Beijing China 				uint32_t value);
6319a5557fdSlucy wang - Sun Microsystems - Beijing China void  unm_nic_write_crb(struct unm_adapter_s *adapter, uint32_t index,
6329a5557fdSlucy wang - Sun Microsystems - Beijing China 				uint32_t value);
6339a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_read_crb(struct unm_adapter_s *adapter, uint32_t index,
6349a5557fdSlucy wang - Sun Microsystems - Beijing China 				uint32_t *value);
6359a5557fdSlucy wang - Sun Microsystems - Beijing China void  unm_nic_read_crb(struct unm_adapter_s *adapter, uint32_t index,
6369a5557fdSlucy wang - Sun Microsystems - Beijing China 				uint32_t *value);
6379a5557fdSlucy wang - Sun Microsystems - Beijing China // int   unm_nic_reg_read (unm_adapter *adapter, u64 off);
6389a5557fdSlucy wang - Sun Microsystems - Beijing China int _unm_nic_hw_write(struct unm_adapter_s *adapter,
6399a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int len);
6409a5557fdSlucy wang - Sun Microsystems - Beijing China int  unm_nic_hw_write(struct unm_adapter_s *adapter,
6419a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int len);
6429a5557fdSlucy wang - Sun Microsystems - Beijing China int _unm_nic_hw_read(struct unm_adapter_s *adapter,
6439a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int len);
6449a5557fdSlucy wang - Sun Microsystems - Beijing China int  unm_nic_hw_read(struct unm_adapter_s *adapter,
6459a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int len);
6469a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_hw_block_read(struct unm_adapter_s *adapter,
6479a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int num_words);
6489a5557fdSlucy wang - Sun Microsystems - Beijing China void  unm_nic_hw_block_read(struct unm_adapter_s *adapter,
6499a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int num_words);
6509a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_hw_block_write(struct unm_adapter_s *adapter,
6519a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int num_words);
6529a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_hw_block_write(struct unm_adapter_s *adapter,
6539a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int num_words);
6549a5557fdSlucy wang - Sun Microsystems - Beijing China int  unm_nic_pci_mem_write(struct unm_adapter_s *adapter,
6559a5557fdSlucy wang - Sun Microsystems - Beijing China 				u64 off, void *data, int size);
6569a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_mem_block_read(struct unm_adapter_s *adapter, u64 off,
6579a5557fdSlucy wang - Sun Microsystems - Beijing China 				void *data, int num_words);
6589a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_mem_block_write(struct unm_adapter_s *adapter, u64 off,
6599a5557fdSlucy wang - Sun Microsystems - Beijing China 				void *data, int num_words);
6609a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_ioctl(unm_adapter *adapter, u64 off, void *data, int len);
6619a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_ioctl(unm_adapter *adapter, u64 off, void *data, int len);
6629a5557fdSlucy wang - Sun Microsystems - Beijing China int  unm_nic_macaddr_set(struct unm_adapter_s *, __uint8_t *addr);
6639a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_tcl_resetall(struct unm_adapter_s *adapter);
6649a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_tcl_phaninit(struct unm_adapter_s *adapter);
6659a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_tcl_postimage(struct unm_adapter_s *adapter);
6669a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_set_mtu(struct unm_adapter_s *adapter, int new_mtu);
6679a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_nic_phy_read(unm_adapter *adapter, long reg, __uint32_t *);
6689a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_nic_init_port(struct unm_adapter_s *adapter);
6699a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_crb_write_adapter(unsigned long off, void *data,
6709a5557fdSlucy wang - Sun Microsystems - Beijing China 		struct unm_adapter_s *adapter);
6719a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_read_adapter(unsigned long off, void *data,
6729a5557fdSlucy wang - Sun Microsystems - Beijing China 		struct unm_adapter_s *adapter);
6739a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_read_val_adapter(unsigned long off,
6749a5557fdSlucy wang - Sun Microsystems - Beijing China 		struct unm_adapter_s *adapter);
6759a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_stop_port(struct unm_adapter_s *adapter);
6769a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_set_promisc_mode(struct unm_adapter_s *adapter);
6779a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_unset_promisc_mode(struct unm_adapter_s *adapter);
6789a5557fdSlucy wang - Sun Microsystems - Beijing China 
6799a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_hw.c */
6809a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_change_crbwindow_128M(unm_adapter *adapter, uint32_t wndw);
6819a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_writelit_adapter_128M(struct unm_adapter_s *, unsigned long, int);
6829a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_wx_128M(unm_adapter *adapter, u64 off, void *data,
6839a5557fdSlucy wang - Sun Microsystems - Beijing China     int len);
6849a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_wx_128M(unm_adapter *adapter, u64 off, void *data, int len);
6859a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_ioctl_128M(unm_adapter *adapter, u64 off, void *data,
6869a5557fdSlucy wang - Sun Microsystems - Beijing China     int len);
6879a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_ioctl_128M(unm_adapter *adapter, u64 off, void *data,
6889a5557fdSlucy wang - Sun Microsystems - Beijing China     int len);
6899a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_write_128M(struct unm_adapter_s *adapter, u64 off,
6909a5557fdSlucy wang - Sun Microsystems - Beijing China     void *data, int size);
6919a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_read_128M(struct unm_adapter_s *adapter, u64 off,
6929a5557fdSlucy wang - Sun Microsystems - Beijing China     void *data, int size);
6939a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_write_normalize_128M(unm_adapter *adapter, u64 off, u32 data);
6949a5557fdSlucy wang - Sun Microsystems - Beijing China u32 unm_nic_pci_read_normalize_128M(unm_adapter *adapter, u64 off);
6959a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_write_immediate_128M(unm_adapter *adapter, u64 off, u32 *data);
6969a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_read_immediate_128M(unm_adapter *adapter, u64 off, u32 *data);
6979a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long unm_nic_pci_set_window_128M(unm_adapter *adapter,
6989a5557fdSlucy wang - Sun Microsystems - Beijing China     unsigned long long addr);
6999a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_clear_statistics_128M(struct unm_adapter_s *adapter);
7009a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_fill_statistics_128M(struct unm_adapter_s *adapter,
7019a5557fdSlucy wang - Sun Microsystems - Beijing China     struct unm_statistics *unm_stats);
7029a5557fdSlucy wang - Sun Microsystems - Beijing China 
7039a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_change_crbwindow_2M(unm_adapter *adapter, uint32_t wndw);
7049a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_writelit_adapter_2M(struct unm_adapter_s *, unsigned long, int);
7059a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_wx_2M(unm_adapter *adapter, u64 off, void *data, int len);
7069a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_write_2M(struct unm_adapter_s *adapter, u64 off,
7079a5557fdSlucy wang - Sun Microsystems - Beijing China     void *data, int size);
7089a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_read_2M(struct unm_adapter_s *adapter, u64 off,
7099a5557fdSlucy wang - Sun Microsystems - Beijing China     void *data, int size);
7109a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_wx_2M(unm_adapter *adapter, u64 off, void *data, int len);
7119a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_write_normalize_2M(unm_adapter *adapter, u64 off, u32 data);
7129a5557fdSlucy wang - Sun Microsystems - Beijing China u32 unm_nic_pci_read_normalize_2M(unm_adapter *adapter, u64 off);
7139a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_write_immediate_2M(unm_adapter *adapter, u64 off, u32 *data);
7149a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_read_immediate_2M(unm_adapter *adapter, u64 off, u32 *data);
7159a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long unm_nic_pci_set_window_2M(unm_adapter *adapter,
7169a5557fdSlucy wang - Sun Microsystems - Beijing China     unsigned long long addr);
7179a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_clear_statistics_2M(struct unm_adapter_s *adapter);
7189a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_fill_statistics_2M(struct unm_adapter_s *adapter,
7199a5557fdSlucy wang - Sun Microsystems - Beijing China     struct unm_statistics *unm_stats);
7209a5557fdSlucy wang - Sun Microsystems - Beijing China void nx_p3_nic_set_multi(unm_adapter *adapter);
7219a5557fdSlucy wang - Sun Microsystems - Beijing China 
7229a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_init.c */
7239a5557fdSlucy wang - Sun Microsystems - Beijing China int phantom_init(struct unm_adapter_s *adapter, int first_time);
7249a5557fdSlucy wang - Sun Microsystems - Beijing China int load_from_flash(struct unm_adapter_s *adapter);
7259a5557fdSlucy wang - Sun Microsystems - Beijing China int  pinit_from_rom(unm_adapter *adapter, int verbose);
7269a5557fdSlucy wang - Sun Microsystems - Beijing China int  rom_fast_read(struct unm_adapter_s *adapter, int addr, int *valp);
7279a5557fdSlucy wang - Sun Microsystems - Beijing China 
7289a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_isr.c */
7299a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_handle_phy_intr(unm_adapter *adapter);
7309a5557fdSlucy wang - Sun Microsystems - Beijing China 
7319a5557fdSlucy wang - Sun Microsystems - Beijing China /* niu.c */
7329a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_set_promiscuous_mode(struct unm_adapter_s *adapter,
7339a5557fdSlucy wang - Sun Microsystems - Beijing China 		unm_niu_prom_mode_t mode);
7349a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_xg_set_promiscuous_mode(struct unm_adapter_s *adapter,
7359a5557fdSlucy wang - Sun Microsystems - Beijing China 		unm_niu_prom_mode_t mode);
7369a5557fdSlucy wang - Sun Microsystems - Beijing China 
7379a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_xg_macaddr_set(struct unm_adapter_s *adapter,
7389a5557fdSlucy wang - Sun Microsystems - Beijing China 		unm_ethernet_macaddr_t addr);
7399a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_disable_xg_port(struct unm_adapter_s *adapter);
7409a5557fdSlucy wang - Sun Microsystems - Beijing China 
7419a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_niu_gbe_init_port(long port);
742*1f0a2977SToomas Soome native_t unm_niu_enable_gbe_port(struct unm_adapter_s *adapter);
7439a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_disable_gbe_port(struct unm_adapter_s *adapter);
7449a5557fdSlucy wang - Sun Microsystems - Beijing China 
7459a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_macaddr_get(struct unm_adapter_s *adapter, unsigned char *addr);
7469a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_macaddr_set(struct unm_adapter_s *adapter,
7479a5557fdSlucy wang - Sun Microsystems - Beijing China 		unm_ethernet_macaddr_t addr);
7489a5557fdSlucy wang - Sun Microsystems - Beijing China 
7499a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_xg_set_tx_flow_ctl(struct unm_adapter_s *adapter, int enable);
7509a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_gbe_set_rx_flow_ctl(struct unm_adapter_s *adapter, int enable);
7519a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_gbe_set_tx_flow_ctl(struct unm_adapter_s *adapter, int enable);
7529a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_niu_gbe_disable_phy_interrupts(struct unm_adapter_s *);
7539a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_niu_gbe_phy_read(struct unm_adapter_s *,
7549a5557fdSlucy wang - Sun Microsystems - Beijing China 		long reg, unm_crbword_t *readval);
7559a5557fdSlucy wang - Sun Microsystems - Beijing China 
7569a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_ctx.c */
7579a5557fdSlucy wang - Sun Microsystems - Beijing China int netxen_create_rxtx(struct unm_adapter_s *adapter);
7589a5557fdSlucy wang - Sun Microsystems - Beijing China void netxen_destroy_rxtx(struct unm_adapter_s *adapter);
7599a5557fdSlucy wang - Sun Microsystems - Beijing China int nx_fw_cmd_set_mtu(struct unm_adapter_s *adapter, int mtu);
7609a5557fdSlucy wang - Sun Microsystems - Beijing China 
7619a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_main.c */
7629a5557fdSlucy wang - Sun Microsystems - Beijing China int receive_peg_ready(struct unm_adapter_s *adapter);
7639a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_update_cmd_producer(struct unm_adapter_s *adapter,
7649a5557fdSlucy wang - Sun Microsystems - Beijing China     uint32_t crb_producer);
7659a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_desc_dma_sync(ddi_dma_handle_t handle, uint_t start, uint_t count,
7669a5557fdSlucy wang - Sun Microsystems - Beijing China     uint_t range, uint_t unit_size, uint_t direction);
7679a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_pci_alloc_consistent(unm_adapter *, int, caddr_t *,
7689a5557fdSlucy wang - Sun Microsystems - Beijing China     ddi_dma_cookie_t *, ddi_dma_handle_t *, ddi_acc_handle_t *);
7699a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_pci_free_consistent(ddi_dma_handle_t *, ddi_acc_handle_t *);
7709a5557fdSlucy wang - Sun Microsystems - Beijing China 
7719a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_ndd.c */
7729a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nd_init(unm_adapter *adapter);
7739a5557fdSlucy wang - Sun Microsystems - Beijing China enum ioc_reply unm_nd_ioctl(unm_adapter *adapter, queue_t *wq,
7749a5557fdSlucy wang - Sun Microsystems - Beijing China 		mblk_t *mp, struct iocblk *iocp);
7759a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nd_cleanup(unm_adapter *adapter);
7769a5557fdSlucy wang - Sun Microsystems - Beijing China 
7779a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_gem.c */
7789a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_destroy_intr(unm_adapter *adapter);
7799a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_free_dummy_dma(unm_adapter *adapter);
7809a5557fdSlucy wang - Sun Microsystems - Beijing China 
7819a5557fdSlucy wang - Sun Microsystems - Beijing China /*
7829a5557fdSlucy wang - Sun Microsystems - Beijing China  * (Internal) return values from ioctl subroutines
7839a5557fdSlucy wang - Sun Microsystems - Beijing China  */
7849a5557fdSlucy wang - Sun Microsystems - Beijing China enum ioc_reply {
7859a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_INVAL = -1,	/* bad, NAK with EINVAL */
7869a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_DONE, /* OK, reply sent  */
7879a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_ACK, /* OK, just send ACK  */
7889a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_REPLY, /* OK, just send reply */
7899a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_RESTART_ACK, /* OK, restart & ACK */
7909a5557fdSlucy wang - Sun Microsystems - Beijing China 	IOC_RESTART_REPLY /* OK, restart & reply */
7919a5557fdSlucy wang - Sun Microsystems - Beijing China };
7929a5557fdSlucy wang - Sun Microsystems - Beijing China 
7939a5557fdSlucy wang - Sun Microsystems - Beijing China /*
7949a5557fdSlucy wang - Sun Microsystems - Beijing China  * Shorthand for the NDD parameters
7959a5557fdSlucy wang - Sun Microsystems - Beijing China  */
7969a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_autoneg	nd_params[PARAM_ADV_AUTONEG_CAP].ndp_val
7979a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_pause		nd_params[PARAM_ADV_PAUSE_CAP].ndp_val
7989a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_asym_pause	nd_params[PARAM_ADV_ASYM_PAUSE_CAP].ndp_val
7999a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_10000fdx	nd_params[PARAM_ADV_10000FDX_CAP].ndp_val
8009a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_1000fdx	nd_params[PARAM_ADV_1000FDX_CAP].ndp_val
8019a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_1000hdx	nd_params[PARAM_ADV_1000HDX_CAP].ndp_val
8029a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_100fdx	nd_params[PARAM_ADV_100FDX_CAP].ndp_val
8039a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_100hdx	nd_params[PARAM_ADV_100HDX_CAP].ndp_val
8049a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_10fdx		nd_params[PARAM_ADV_10FDX_CAP].ndp_val
8059a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_adv_10hdx		nd_params[PARAM_ADV_10HDX_CAP].ndp_val
8069a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_link_up		nd_params[PARAM_LINK_STATUS].ndp_val
8079a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_link_speed	nd_params[PARAM_LINK_SPEED].ndp_val
8089a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_link_duplex	nd_params[PARAM_LINK_DUPLEX].ndp_val
8099a5557fdSlucy wang - Sun Microsystems - Beijing China #define	param_loop_mode		nd_params[PARAM_LOOP_MODE].ndp_val
8109a5557fdSlucy wang - Sun Microsystems - Beijing China 
8119a5557fdSlucy wang - Sun Microsystems - Beijing China /*
8129a5557fdSlucy wang - Sun Microsystems - Beijing China  * Property lookups
8139a5557fdSlucy wang - Sun Microsystems - Beijing China  */
8149a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_PROP_EXISTS(d, n) \
8159a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_prop_exists(DDI_DEV_T_ANY, (d), DDI_PROP_DONTPASS, (n))
8169a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_PROP_GET_INT(d, n) \
8179a5557fdSlucy wang - Sun Microsystems - Beijing China 	ddi_prop_get_int(DDI_DEV_T_ANY, (d), DDI_PROP_DONTPASS, (n), -1)
8189a5557fdSlucy wang - Sun Microsystems - Beijing China 
8199a5557fdSlucy wang - Sun Microsystems - Beijing China /*
8209a5557fdSlucy wang - Sun Microsystems - Beijing China  * Bit flags in the 'debug' word ...
8219a5557fdSlucy wang - Sun Microsystems - Beijing China  */
8229a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_DBG_TRACE	0x00000002 /* general flow tracing */
8239a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_DBG_NDD		0x20000000 /* NDD operations */
8249a5557fdSlucy wang - Sun Microsystems - Beijing China 
8259a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MBPS_10		10
8269a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MBPS_100	100
8279a5557fdSlucy wang - Sun Microsystems - Beijing China #define	MBPS_1000	1000
8289a5557fdSlucy wang - Sun Microsystems - Beijing China 
82993833965Sjing xiong ERI-SUN #ifdef __cplusplus
83093833965Sjing xiong ERI-SUN }
83193833965Sjing xiong ERI-SUN #endif
83293833965Sjing xiong ERI-SUN 
8339a5557fdSlucy wang - Sun Microsystems - Beijing China #endif	/* !_UNM_NIC_ */
834