xref: /onnv-gate/usr/src/uts/common/sys/fibre-channel/fca/oce/oce_impl.h (revision 13020:1b6086d6d5a1)
111374SSukumar.Swaminathan@Sun.COM /*
211374SSukumar.Swaminathan@Sun.COM  * CDDL HEADER START
311374SSukumar.Swaminathan@Sun.COM  *
411374SSukumar.Swaminathan@Sun.COM  * The contents of this file are subject to the terms of the
511374SSukumar.Swaminathan@Sun.COM  * Common Development and Distribution License (the "License").
611374SSukumar.Swaminathan@Sun.COM  * You may not use this file except in compliance with the License.
711374SSukumar.Swaminathan@Sun.COM  *
811374SSukumar.Swaminathan@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
911374SSukumar.Swaminathan@Sun.COM  * or http://www.opensolaris.org/os/licensing.
1011374SSukumar.Swaminathan@Sun.COM  * See the License for the specific language governing permissions
1111374SSukumar.Swaminathan@Sun.COM  * and limitations under the License.
1211374SSukumar.Swaminathan@Sun.COM  *
1311374SSukumar.Swaminathan@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
1411374SSukumar.Swaminathan@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1511374SSukumar.Swaminathan@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
1611374SSukumar.Swaminathan@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
1711374SSukumar.Swaminathan@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
1811374SSukumar.Swaminathan@Sun.COM  *
1911374SSukumar.Swaminathan@Sun.COM  * CDDL HEADER END
2011374SSukumar.Swaminathan@Sun.COM  */
2111374SSukumar.Swaminathan@Sun.COM 
2211374SSukumar.Swaminathan@Sun.COM /*
2312043SSukumar.Swaminathan@Sun.COM  * Copyright 2010 Emulex.  All rights reserved.
2411374SSukumar.Swaminathan@Sun.COM  * Use is subject to license terms.
2511374SSukumar.Swaminathan@Sun.COM  */
2611374SSukumar.Swaminathan@Sun.COM 
2711374SSukumar.Swaminathan@Sun.COM /*
2811374SSukumar.Swaminathan@Sun.COM  * Driver specific data structures and function prototypes
2911374SSukumar.Swaminathan@Sun.COM  */
3011374SSukumar.Swaminathan@Sun.COM 
3111374SSukumar.Swaminathan@Sun.COM #ifndef	_OCE_IMPL_H_
3211374SSukumar.Swaminathan@Sun.COM #define	_OCE_IMPL_H_
3311374SSukumar.Swaminathan@Sun.COM 
3411374SSukumar.Swaminathan@Sun.COM #ifdef __cplusplus
3511374SSukumar.Swaminathan@Sun.COM extern "C" {
3611374SSukumar.Swaminathan@Sun.COM #endif
3711374SSukumar.Swaminathan@Sun.COM 
3811374SSukumar.Swaminathan@Sun.COM #include <sys/types.h>
3911374SSukumar.Swaminathan@Sun.COM #include <sys/dditypes.h>
4011374SSukumar.Swaminathan@Sun.COM #include <sys/kstat.h>
4111374SSukumar.Swaminathan@Sun.COM #include <sys/ddi_intr.h>
4211374SSukumar.Swaminathan@Sun.COM #include <sys/cmn_err.h>
4311374SSukumar.Swaminathan@Sun.COM #include <sys/byteorder.h>
4411374SSukumar.Swaminathan@Sun.COM #include <sys/mac_provider.h>
4511374SSukumar.Swaminathan@Sun.COM #include <sys/mac_ether.h>
4611374SSukumar.Swaminathan@Sun.COM #include <sys/vlan.h>
4711374SSukumar.Swaminathan@Sun.COM #include <sys/bitmap.h>
4811374SSukumar.Swaminathan@Sun.COM #include <sys/ddidmareq.h>
4911374SSukumar.Swaminathan@Sun.COM #include <sys/kmem.h>
5011374SSukumar.Swaminathan@Sun.COM #include <sys/ddi.h>
5111374SSukumar.Swaminathan@Sun.COM #include <sys/sunddi.h>
5211374SSukumar.Swaminathan@Sun.COM #include <sys/modctl.h>
5311374SSukumar.Swaminathan@Sun.COM #include <sys/devops.h>
5411374SSukumar.Swaminathan@Sun.COM #include <sys/systm.h>
5511374SSukumar.Swaminathan@Sun.COM #include <sys/conf.h>
5611374SSukumar.Swaminathan@Sun.COM #include <sys/dlpi.h>
5711374SSukumar.Swaminathan@Sun.COM #include <sys/ethernet.h>
5811374SSukumar.Swaminathan@Sun.COM #include <sys/strsun.h>
5911374SSukumar.Swaminathan@Sun.COM #include <sys/pattr.h>
6011374SSukumar.Swaminathan@Sun.COM #include <sys/strsubr.h>
6111374SSukumar.Swaminathan@Sun.COM #include <sys/ddifm.h>
6211374SSukumar.Swaminathan@Sun.COM #include <sys/fm/protocol.h>
6311374SSukumar.Swaminathan@Sun.COM #include <sys/fm/util.h>
6411374SSukumar.Swaminathan@Sun.COM #include <sys/fm/io/ddi.h>
6511374SSukumar.Swaminathan@Sun.COM #include <sys/note.h>
66*13020SSukumar.Swaminathan@Sun.COM #include <sys/pci.h>
67*13020SSukumar.Swaminathan@Sun.COM #include <sys/random.h>
6811374SSukumar.Swaminathan@Sun.COM #include <oce_hw.h>
6911374SSukumar.Swaminathan@Sun.COM #include <oce_hw_eth.h>
7011374SSukumar.Swaminathan@Sun.COM #include <oce_io.h>
7111374SSukumar.Swaminathan@Sun.COM #include <oce_buf.h>
7211374SSukumar.Swaminathan@Sun.COM #include <oce_utils.h>
7311374SSukumar.Swaminathan@Sun.COM #include <oce_version.h>
7411374SSukumar.Swaminathan@Sun.COM 
75*13020SSukumar.Swaminathan@Sun.COM #define	SIZE_128	128
76*13020SSukumar.Swaminathan@Sun.COM #define	SIZE_256	256
77*13020SSukumar.Swaminathan@Sun.COM #define	SIZE_512	512
78*13020SSukumar.Swaminathan@Sun.COM #define	SIZE_1K		1024
79*13020SSukumar.Swaminathan@Sun.COM #define	SIZE_2K		(2 * 1024)
80*13020SSukumar.Swaminathan@Sun.COM #define	SIZE_4K		(4 * 1024)
81*13020SSukumar.Swaminathan@Sun.COM #define	SIZE_8K		(8 * 1024)
82*13020SSukumar.Swaminathan@Sun.COM 
83*13020SSukumar.Swaminathan@Sun.COM #define	END		0xdeadface
84*13020SSukumar.Swaminathan@Sun.COM 
85*13020SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_ETH_FRAME_SIZE	1500
86*13020SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_JUMBO_FRAME_SIZE 9018
87*13020SSukumar.Swaminathan@Sun.COM #define	OCE_MIN_ETH_FRAME_SIZE	64
88*13020SSukumar.Swaminathan@Sun.COM #define	OCE_LLC_SNAP_HDR_LEN	8
89*13020SSukumar.Swaminathan@Sun.COM 
9011374SSukumar.Swaminathan@Sun.COM #define	OCE_MIN_MTU	1500
9111374SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_MTU	9000
9211374SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_MCA	32
9311374SSukumar.Swaminathan@Sun.COM #define	OCE_RQ_MAX_FRAME_SZ 9018
9411374SSukumar.Swaminathan@Sun.COM 
9511374SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_EQ	8
9611374SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_CQ	1024
9711374SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_WQ	8
98*13020SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_RQ	5
99*13020SSukumar.Swaminathan@Sun.COM 
100*13020SSukumar.Swaminathan@Sun.COM #define	OCE_WQ_NUM_BUFFERS		2048
101*13020SSukumar.Swaminathan@Sun.COM #define	OCE_WQ_BUF_SIZE			2048
102*13020SSukumar.Swaminathan@Sun.COM #define	OCE_LSO_MAX_SIZE		(64 * 1024)
103*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_TX_BCOPY_LIMIT	512
10411723SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_RX_BCOPY_LIMIT	128
105*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_WQ_EQD		16
106*13020SSukumar.Swaminathan@Sun.COM 
107*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_TX_RING_SIZE	2048
108*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_RX_RING_SIZE	1024
109*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_WQS			1
110*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_RQS			1
111*13020SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_RQS			5
11211374SSukumar.Swaminathan@Sun.COM 
113*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_RX_PKT_PER_INTR (OCE_DEFAULT_RX_RING_SIZE / 2)
114*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_TX_RECLAIM_THRESHOLD 1024
115*13020SSukumar.Swaminathan@Sun.COM #define	OCE_MAX_RQ_POSTS		255
116*13020SSukumar.Swaminathan@Sun.COM #define	OCE_RQ_NUM_BUFFERS		2048
117*13020SSukumar.Swaminathan@Sun.COM #define	OCE_RQ_BUF_SIZE			8192
11811374SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_RECHARGE_THRESHOLD	OCE_MAX_RQ_POSTS
119*13020SSukumar.Swaminathan@Sun.COM #define	OCE_NUM_USED_VECTORS		2
120*13020SSukumar.Swaminathan@Sun.COM #define	OCE_ITBL_SIZE			64
121*13020SSukumar.Swaminathan@Sun.COM #define	OCE_HKEY_SIZE			40
122*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DMA_ALIGNMENT		0x1000ull
12311374SSukumar.Swaminathan@Sun.COM 
124*13020SSukumar.Swaminathan@Sun.COM #define	OCE_MIN_VECTORS			1
12511374SSukumar.Swaminathan@Sun.COM 
126*13020SSukumar.Swaminathan@Sun.COM #define	OCE_CAPAB_FLAGS	(MBX_RX_IFACE_FLAGS_BROADCAST		| \
127*13020SSukumar.Swaminathan@Sun.COM 			MBX_RX_IFACE_FLAGS_PROMISCUOUS		| \
12811374SSukumar.Swaminathan@Sun.COM 			MBX_RX_IFACE_FLAGS_UNTAGGED		| \
12911374SSukumar.Swaminathan@Sun.COM 			MBX_RX_IFACE_FLAGS_MCAST_PROMISCUOUS	| \
13011374SSukumar.Swaminathan@Sun.COM 			MBX_RX_IFACE_FLAGS_PASS_L3L4)
13111374SSukumar.Swaminathan@Sun.COM 
132*13020SSukumar.Swaminathan@Sun.COM #define	OCE_CAPAB_ENABLE	(MBX_RX_IFACE_FLAGS_BROADCAST	| \
13311374SSukumar.Swaminathan@Sun.COM 				MBX_RX_IFACE_FLAGS_UNTAGGED	| \
13411374SSukumar.Swaminathan@Sun.COM 				MBX_RX_IFACE_FLAGS_PASS_L3L4)
13511374SSukumar.Swaminathan@Sun.COM 
13612043SSukumar.Swaminathan@Sun.COM #define	OCE_FM_CAPABILITY		(DDI_FM_EREPORT_CAPABLE	|	\
13711374SSukumar.Swaminathan@Sun.COM 					DDI_FM_ACCCHK_CAPABLE	|	\
13812043SSukumar.Swaminathan@Sun.COM 					DDI_FM_DMACHK_CAPABLE)
13911374SSukumar.Swaminathan@Sun.COM 
140*13020SSukumar.Swaminathan@Sun.COM 
141*13020SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_RSS_TYPE	(RSS_ENABLE_IPV4|RSS_ENABLE_TCP_IPV4)
142*13020SSukumar.Swaminathan@Sun.COM 
14311374SSukumar.Swaminathan@Sun.COM /* flow control definitions */
14411374SSukumar.Swaminathan@Sun.COM #define	OCE_FC_NONE	0x00000000
14511374SSukumar.Swaminathan@Sun.COM #define	OCE_FC_TX	0x00000001
14611374SSukumar.Swaminathan@Sun.COM #define	OCE_FC_RX	0x00000002
14711374SSukumar.Swaminathan@Sun.COM #define	OCE_DEFAULT_FLOW_CONTROL	(OCE_FC_TX | OCE_FC_RX)
14811374SSukumar.Swaminathan@Sun.COM 
14911374SSukumar.Swaminathan@Sun.COM /* PCI Information */
15011374SSukumar.Swaminathan@Sun.COM #define	OCE_DEV_CFG_BAR	0x01
15111374SSukumar.Swaminathan@Sun.COM #define	OCE_PCI_CSR_BAR	0x02
15211374SSukumar.Swaminathan@Sun.COM #define	OCE_PCI_DB_BAR	0x03
15311374SSukumar.Swaminathan@Sun.COM 
15411374SSukumar.Swaminathan@Sun.COM /* macros for device IO */
15511374SSukumar.Swaminathan@Sun.COM #define	OCE_READ_REG32(handle, addr) ddi_get32(handle, addr)
15611374SSukumar.Swaminathan@Sun.COM #define	OCE_WRITE_REG32(handle, addr, value) ddi_put32(handle, addr, value)
15711374SSukumar.Swaminathan@Sun.COM 
15811374SSukumar.Swaminathan@Sun.COM #define	OCE_CSR_READ32(dev, offset) \
15911374SSukumar.Swaminathan@Sun.COM 	OCE_READ_REG32((dev)->csr_handle, \
16011374SSukumar.Swaminathan@Sun.COM 	    (uint32_t *)(void *)((dev)->csr_addr + offset))
16111374SSukumar.Swaminathan@Sun.COM 
16211374SSukumar.Swaminathan@Sun.COM #define	OCE_CSR_WRITE32(dev, offset, value) \
16311374SSukumar.Swaminathan@Sun.COM 	OCE_WRITE_REG32((dev)->csr_handle, \
16411374SSukumar.Swaminathan@Sun.COM 	    (uint32_t *)(void *)((dev)->csr_addr + offset), value)
16511374SSukumar.Swaminathan@Sun.COM 
16611374SSukumar.Swaminathan@Sun.COM #define	OCE_DB_READ32(dev, offset) \
16711374SSukumar.Swaminathan@Sun.COM 	OCE_READ_REG32((dev)->db_handle, \
16811374SSukumar.Swaminathan@Sun.COM 	    (uint32_t *)(void *)((dev)->db_addr + offset))
16911374SSukumar.Swaminathan@Sun.COM 
17011374SSukumar.Swaminathan@Sun.COM #define	OCE_DB_WRITE32(dev, offset, value) \
17111374SSukumar.Swaminathan@Sun.COM 	OCE_WRITE_REG32((dev)->db_handle, \
17211374SSukumar.Swaminathan@Sun.COM 		(uint32_t *)(void *)((dev)->db_addr + offset), value)
17311374SSukumar.Swaminathan@Sun.COM 
17411374SSukumar.Swaminathan@Sun.COM #define	OCE_CFG_READ32(dev, offset) \
17511374SSukumar.Swaminathan@Sun.COM 	OCE_READ_REG32((dev)->dev_cfg_handle, \
17611374SSukumar.Swaminathan@Sun.COM 	    (uint32_t *)(void *)((dev)->dev_cfg_addr + offset))
17711374SSukumar.Swaminathan@Sun.COM 
17811374SSukumar.Swaminathan@Sun.COM #define	OCE_CFG_WRITE32(dev, offset, value) \
17911374SSukumar.Swaminathan@Sun.COM 	OCE_WRITE_REG32((dev)->dev_cfg_handle, \
18011374SSukumar.Swaminathan@Sun.COM 	    (uint32_t *)(void *)((dev)->dev_cfg_addr + offset), value)
18111374SSukumar.Swaminathan@Sun.COM 
18211374SSukumar.Swaminathan@Sun.COM #define	OCE_PCI_FUNC(dev) \
18311374SSukumar.Swaminathan@Sun.COM 	((OCE_CFG_READ32(dev, PCICFG_INTR_CTRL) \
18411374SSukumar.Swaminathan@Sun.COM 	    >> HOSTINTR_PFUNC_SHIFT) & HOSTINTR_PFUNC_MASK)
18511374SSukumar.Swaminathan@Sun.COM 
18611723SSukumar.Swaminathan@Sun.COM #define	DEV_LOCK(dev)	mutex_enter(&dev->dev_lock)
18711374SSukumar.Swaminathan@Sun.COM 
18811723SSukumar.Swaminathan@Sun.COM #define	DEV_UNLOCK(dev)	mutex_exit(&dev->dev_lock)
18911374SSukumar.Swaminathan@Sun.COM 
19011374SSukumar.Swaminathan@Sun.COM enum oce_ring_size {
19111374SSukumar.Swaminathan@Sun.COM 	RING_SIZE_256  = 256,
19211374SSukumar.Swaminathan@Sun.COM 	RING_SIZE_512  = 512,
19311374SSukumar.Swaminathan@Sun.COM 	RING_SIZE_1024 = 1024,
19411374SSukumar.Swaminathan@Sun.COM 	RING_SIZE_2048 = 2048
19511374SSukumar.Swaminathan@Sun.COM };
19611374SSukumar.Swaminathan@Sun.COM 
19711374SSukumar.Swaminathan@Sun.COM enum oce_driver_state {
19811374SSukumar.Swaminathan@Sun.COM 	STATE_INIT		= 0x2,
19911374SSukumar.Swaminathan@Sun.COM 	STATE_MAC_STARTED	= 0x4,
20011374SSukumar.Swaminathan@Sun.COM 	STATE_QUIESCE		= 0x8,
20111374SSukumar.Swaminathan@Sun.COM 	STATE_MAC_STOPPING	= 0x10
20211374SSukumar.Swaminathan@Sun.COM };
20311374SSukumar.Swaminathan@Sun.COM 
20411374SSukumar.Swaminathan@Sun.COM struct oce_dev {
205*13020SSukumar.Swaminathan@Sun.COM 	kmutex_t bmbx_lock;		/* Bootstrap Lock */
206*13020SSukumar.Swaminathan@Sun.COM 	kmutex_t dev_lock;		/* lock for device */
207*13020SSukumar.Swaminathan@Sun.COM 
208*13020SSukumar.Swaminathan@Sun.COM 	/* Queues relarted */
20911374SSukumar.Swaminathan@Sun.COM 	struct oce_wq *wq[OCE_MAX_WQ];	/* TXQ Array */
21011374SSukumar.Swaminathan@Sun.COM 	struct oce_rq *rq[OCE_MAX_RQ];	/* RXQ Array */
21111374SSukumar.Swaminathan@Sun.COM 	struct oce_cq *cq[OCE_MAX_CQ];	/* Completion Queues */
21211374SSukumar.Swaminathan@Sun.COM 	struct oce_eq *eq[OCE_MAX_EQ];	/* Event Queues	*/
213*13020SSukumar.Swaminathan@Sun.COM 	struct oce_mq *mq;		/* MQ ring */
214*13020SSukumar.Swaminathan@Sun.COM 
215*13020SSukumar.Swaminathan@Sun.COM 	/* driver state  machine */
216*13020SSukumar.Swaminathan@Sun.COM 	enum oce_driver_state state;	/* state */
217*13020SSukumar.Swaminathan@Sun.COM 	boolean_t suspended;		/* CPR */
218*13020SSukumar.Swaminathan@Sun.COM 	uint32_t attach_state;		/* attach progress */
219*13020SSukumar.Swaminathan@Sun.COM 
220*13020SSukumar.Swaminathan@Sun.COM 	oce_dma_buf_t *bmbx;		/* Bootstrap MailBox */
221*13020SSukumar.Swaminathan@Sun.COM 
22211723SSukumar.Swaminathan@Sun.COM 	uint32_t tx_bcopy_limit;	/* TX BCOPY Limit */
22311723SSukumar.Swaminathan@Sun.COM 	uint32_t rx_bcopy_limit;	/* RX BCOPY Limit */
224*13020SSukumar.Swaminathan@Sun.COM 	uint32_t tx_reclaim_threshold;	/* Tx reclaim */
225*13020SSukumar.Swaminathan@Sun.COM 	uint32_t rx_pkt_per_intr;	/* Rx pkts processed per intr */
22611374SSukumar.Swaminathan@Sun.COM 
227*13020SSukumar.Swaminathan@Sun.COM 	/* BARS */
228*13020SSukumar.Swaminathan@Sun.COM 	int num_bars;
22911723SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t pci_cfg_handle; /* Config space handle */
23011723SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t cfg_handle;	/* MMIO PCI Config Space Regs */
23111374SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t csr_handle;	/* MMIO Control Status Regs */
232*13020SSukumar.Swaminathan@Sun.COM 	caddr_t csr_addr;
23311374SSukumar.Swaminathan@Sun.COM 	caddr_t db_addr;
234*13020SSukumar.Swaminathan@Sun.COM 	caddr_t dev_cfg_addr;
23511374SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t db_handle;	/* MMIO DoorBell Area */
236*13020SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t dev_cfg_handle; /* MMIO CONFIG SPACE */
23711374SSukumar.Swaminathan@Sun.COM 	mac_handle_t mac_handle;	/* MAC HANDLE	*/
23811374SSukumar.Swaminathan@Sun.COM 
239*13020SSukumar.Swaminathan@Sun.COM 	/* device stats */
24011374SSukumar.Swaminathan@Sun.COM 	kstat_t *oce_kstats;		/* NIC STATS */
24111374SSukumar.Swaminathan@Sun.COM 	oce_dma_buf_t *stats_dbuf;	/* STATS BUFFER */
24211374SSukumar.Swaminathan@Sun.COM 	struct mbx_get_nic_stats *hw_stats;
24311374SSukumar.Swaminathan@Sun.COM 	/* dev stats */
24411374SSukumar.Swaminathan@Sun.COM 	uint32_t tx_errors;
24511374SSukumar.Swaminathan@Sun.COM 	uint32_t tx_noxmtbuf;
24611374SSukumar.Swaminathan@Sun.COM 
24711374SSukumar.Swaminathan@Sun.COM 	/* link status */
248*13020SSukumar.Swaminathan@Sun.COM 	link_state_t link_status;
249*13020SSukumar.Swaminathan@Sun.COM 	int32_t link_speed;		/* Link speed in Mbps */
25011374SSukumar.Swaminathan@Sun.COM 
251*13020SSukumar.Swaminathan@Sun.COM 	/* OS */
252*13020SSukumar.Swaminathan@Sun.COM 	uint32_t dev_id;	/* device ID or instance number */
253*13020SSukumar.Swaminathan@Sun.COM 	dev_info_t *dip;	/* device info structure for device tree node */
254*13020SSukumar.Swaminathan@Sun.COM 
255*13020SSukumar.Swaminathan@Sun.COM 	/* Interrupt related */
256*13020SSukumar.Swaminathan@Sun.COM 	int intr_type;		/* INTR TYPE USED */
257*13020SSukumar.Swaminathan@Sun.COM 	int num_vectors;	/* number of vectors used */
258*13020SSukumar.Swaminathan@Sun.COM 	uint_t intr_pri;	/* interrupt priority */
25911374SSukumar.Swaminathan@Sun.COM 	int intr_cap;
260*13020SSukumar.Swaminathan@Sun.COM 	ddi_intr_handle_t *htable;	/* intr handler table */
261*13020SSukumar.Swaminathan@Sun.COM 	int32_t hsize;
26211374SSukumar.Swaminathan@Sun.COM 
26311374SSukumar.Swaminathan@Sun.COM 	/* device configuration */
264*13020SSukumar.Swaminathan@Sun.COM 	uint32_t rq_max_bufs;		/* maximum prealloced buffers */
265*13020SSukumar.Swaminathan@Sun.COM 	uint32_t rq_frag_size;		/* Rxq fragment size */
26611374SSukumar.Swaminathan@Sun.COM 	enum oce_ring_size tx_ring_size;
26711374SSukumar.Swaminathan@Sun.COM 	enum oce_ring_size rx_ring_size;
268*13020SSukumar.Swaminathan@Sun.COM 	uint32_t neqs;			/* No of event queues */
269*13020SSukumar.Swaminathan@Sun.COM 	uint32_t nwqs;			/* No of Work Queues */
270*13020SSukumar.Swaminathan@Sun.COM 	uint32_t nrqs;			/* No of Receive Queues */
271*13020SSukumar.Swaminathan@Sun.COM 	uint32_t nifs;			/* No of interfaces created */
272*13020SSukumar.Swaminathan@Sun.COM 	uint32_t tx_rings;
273*13020SSukumar.Swaminathan@Sun.COM 	uint32_t rx_rings;
274*13020SSukumar.Swaminathan@Sun.COM 	uint32_t pmac_id;		/* used to add or remove mac */
275*13020SSukumar.Swaminathan@Sun.COM 	uint8_t unicast_addr[ETHERADDRL];
276*13020SSukumar.Swaminathan@Sun.COM 	uint32_t mtu;
277*13020SSukumar.Swaminathan@Sun.COM 	int32_t fm_caps;
278*13020SSukumar.Swaminathan@Sun.COM 	boolean_t rss_enable;		/* RSS support */
279*13020SSukumar.Swaminathan@Sun.COM 	boolean_t lso_capable;		/* LSO */
280*13020SSukumar.Swaminathan@Sun.COM 	boolean_t promisc;		/* PROMISC MODE */
281*13020SSukumar.Swaminathan@Sun.COM 	uint32_t if_cap_flags;		/* IF CAPAB */
282*13020SSukumar.Swaminathan@Sun.COM 	uint32_t flow_control;		/* flow control settings */
283*13020SSukumar.Swaminathan@Sun.COM 	uint8_t mac_addr[ETHERADDRL];	/* hardware mac address */
284*13020SSukumar.Swaminathan@Sun.COM 	uint16_t num_mca;		/* MCA supported */
285*13020SSukumar.Swaminathan@Sun.COM 	struct ether_addr multi_cast[OCE_MAX_MCA];	/* MC TABLE */
286*13020SSukumar.Swaminathan@Sun.COM 	uint32_t cookie;		/* used during fw download */
28711374SSukumar.Swaminathan@Sun.COM 
28811374SSukumar.Swaminathan@Sun.COM 	/* fw config: only relevant fields */
289*13020SSukumar.Swaminathan@Sun.COM 	uint32_t config_number;
290*13020SSukumar.Swaminathan@Sun.COM 	uint32_t asic_revision;
291*13020SSukumar.Swaminathan@Sun.COM 	uint32_t port_id;
292*13020SSukumar.Swaminathan@Sun.COM 	uint32_t function_mode;
293*13020SSukumar.Swaminathan@Sun.COM 	uint32_t function_caps;
294*13020SSukumar.Swaminathan@Sun.COM 	uint32_t max_tx_rings;		/* Max Rx rings available */
295*13020SSukumar.Swaminathan@Sun.COM 	uint32_t max_rx_rings;		/* Max rx rings available */
296*13020SSukumar.Swaminathan@Sun.COM 	int32_t if_id;			/* IF ID */
297*13020SSukumar.Swaminathan@Sun.COM 	uint8_t fn;			/* function number */
298*13020SSukumar.Swaminathan@Sun.COM 	uint8_t fw_version[32];		/* fw version string */
299*13020SSukumar.Swaminathan@Sun.COM 
300*13020SSukumar.Swaminathan@Sun.COM 	/* Logging related */
301*13020SSukumar.Swaminathan@Sun.COM 	uint16_t mod_mask;		/* Log Mask */
302*13020SSukumar.Swaminathan@Sun.COM 	int16_t severity;		/* Log level */
30311374SSukumar.Swaminathan@Sun.COM };
30411374SSukumar.Swaminathan@Sun.COM 
30511374SSukumar.Swaminathan@Sun.COM /* GLD handler functions */
30611374SSukumar.Swaminathan@Sun.COM int oce_m_start(void *arg);
30711374SSukumar.Swaminathan@Sun.COM void oce_m_stop(void *arg);
30811374SSukumar.Swaminathan@Sun.COM mblk_t *oce_m_send(void *arg, mblk_t *pkt);
30911374SSukumar.Swaminathan@Sun.COM int oce_m_promiscuous(void *arg, boolean_t enable);
31011374SSukumar.Swaminathan@Sun.COM int oce_m_multicast(void *arg, boolean_t add, const uint8_t *mca);
31111374SSukumar.Swaminathan@Sun.COM int oce_m_unicast(void *arg, const uint8_t *uca);
31211374SSukumar.Swaminathan@Sun.COM boolean_t oce_m_getcap(void *arg, mac_capab_t cap, void *data);
31311374SSukumar.Swaminathan@Sun.COM void oce_m_ioctl(void *arg, queue_t *wq, mblk_t *mp);
31411374SSukumar.Swaminathan@Sun.COM int oce_m_setprop(void *arg, const char *name, mac_prop_id_t id,
31511374SSukumar.Swaminathan@Sun.COM     uint_t size, const void *val);
31611374SSukumar.Swaminathan@Sun.COM int oce_m_getprop(void *arg, const char *name, mac_prop_id_t id,
31711878SVenu.Iyer@Sun.COM     uint_t size, void *val);
31811878SVenu.Iyer@Sun.COM void oce_m_propinfo(void *arg, const char *pr_name, mac_prop_id_t pr_num,
31911878SVenu.Iyer@Sun.COM     mac_prop_info_handle_t prh);
32011878SVenu.Iyer@Sun.COM 
32111374SSukumar.Swaminathan@Sun.COM int oce_m_stat(void *arg, uint_t stat, uint64_t *val);
32211374SSukumar.Swaminathan@Sun.COM 
32311374SSukumar.Swaminathan@Sun.COM /* Hardware start/stop functions */
32411374SSukumar.Swaminathan@Sun.COM int oce_start(struct oce_dev *dev);
32511374SSukumar.Swaminathan@Sun.COM void oce_stop(struct oce_dev *dev);
32611374SSukumar.Swaminathan@Sun.COM 
32711374SSukumar.Swaminathan@Sun.COM /* FMA support Functions */
32811374SSukumar.Swaminathan@Sun.COM void oce_fm_init(struct oce_dev *dev);
32911374SSukumar.Swaminathan@Sun.COM void oce_fm_fini(struct oce_dev *dev);
33011374SSukumar.Swaminathan@Sun.COM void oce_set_dma_fma_flags(int fm_caps);
33111374SSukumar.Swaminathan@Sun.COM void oce_set_reg_fma_flags(int fm_caps);
33211374SSukumar.Swaminathan@Sun.COM void oce_set_tx_map_dma_fma_flags(int fm_caps);
33311374SSukumar.Swaminathan@Sun.COM void oce_fm_ereport(struct oce_dev *dev, char *detail);
33411374SSukumar.Swaminathan@Sun.COM int  oce_fm_check_acc_handle(struct oce_dev *dev,
33511374SSukumar.Swaminathan@Sun.COM     ddi_acc_handle_t acc_handle);
33611374SSukumar.Swaminathan@Sun.COM int  oce_fm_check_dma_handle(struct oce_dev *dev,
33711374SSukumar.Swaminathan@Sun.COM     ddi_dma_handle_t dma_handle);
33811374SSukumar.Swaminathan@Sun.COM 
33911374SSukumar.Swaminathan@Sun.COM /* Interrupt handling */
34011374SSukumar.Swaminathan@Sun.COM int oce_setup_intr(struct oce_dev *dev);
34111374SSukumar.Swaminathan@Sun.COM int oce_teardown_intr(struct oce_dev *dev);
34211374SSukumar.Swaminathan@Sun.COM int oce_setup_handlers(struct oce_dev *dev);
34311374SSukumar.Swaminathan@Sun.COM void oce_remove_handler(struct oce_dev *dev);
34411374SSukumar.Swaminathan@Sun.COM void oce_ei(struct oce_dev *dev);
34511374SSukumar.Swaminathan@Sun.COM void oce_di(struct oce_dev *dev);
34611374SSukumar.Swaminathan@Sun.COM void oce_chip_ei(struct oce_dev *dev);
34711374SSukumar.Swaminathan@Sun.COM void oce_chip_di(struct oce_dev *dev);
34811374SSukumar.Swaminathan@Sun.COM 
34911723SSukumar.Swaminathan@Sun.COM /* HW initialisation */
35011723SSukumar.Swaminathan@Sun.COM int oce_hw_init(struct oce_dev *dev);
35111723SSukumar.Swaminathan@Sun.COM void oce_hw_fini(struct oce_dev *dev);
35211723SSukumar.Swaminathan@Sun.COM int oce_setup_adapter(struct oce_dev *dev);
35311723SSukumar.Swaminathan@Sun.COM void oce_unsetup_adapter(struct oce_dev *dev);
35411723SSukumar.Swaminathan@Sun.COM 
35511374SSukumar.Swaminathan@Sun.COM #ifdef __cplusplus
35611374SSukumar.Swaminathan@Sun.COM }
35711374SSukumar.Swaminathan@Sun.COM #endif
35811374SSukumar.Swaminathan@Sun.COM 
35911374SSukumar.Swaminathan@Sun.COM #endif /* _OCE_IMPL_H_ */
360