xref: /onnv-gate/usr/src/uts/common/sys/fibre-channel/fca/qlc/ql_api.h (revision 12279:f13874aa8143)
18311SSukumar.Swaminathan@Sun.COM /*
28311SSukumar.Swaminathan@Sun.COM  * CDDL HEADER START
38311SSukumar.Swaminathan@Sun.COM  *
48311SSukumar.Swaminathan@Sun.COM  * The contents of this file are subject to the terms of the
58311SSukumar.Swaminathan@Sun.COM  * Common Development and Distribution License (the "License").
68311SSukumar.Swaminathan@Sun.COM  * You may not use this file except in compliance with the License.
78311SSukumar.Swaminathan@Sun.COM  *
88311SSukumar.Swaminathan@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
98311SSukumar.Swaminathan@Sun.COM  * or http://www.opensolaris.org/os/licensing.
108311SSukumar.Swaminathan@Sun.COM  * See the License for the specific language governing permissions
118311SSukumar.Swaminathan@Sun.COM  * and limitations under the License.
128311SSukumar.Swaminathan@Sun.COM  *
138311SSukumar.Swaminathan@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
148311SSukumar.Swaminathan@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
158311SSukumar.Swaminathan@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
168311SSukumar.Swaminathan@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
178311SSukumar.Swaminathan@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
188311SSukumar.Swaminathan@Sun.COM  *
198311SSukumar.Swaminathan@Sun.COM  * CDDL HEADER END
208311SSukumar.Swaminathan@Sun.COM  */
218311SSukumar.Swaminathan@Sun.COM 
2211541SDaniel.Beauregard@Sun.COM /* Copyright 2010 QLogic Corporation */
238311SSukumar.Swaminathan@Sun.COM 
248311SSukumar.Swaminathan@Sun.COM /*
25*12279SDaniel.Beauregard@Sun.COM  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
268311SSukumar.Swaminathan@Sun.COM  */
278311SSukumar.Swaminathan@Sun.COM 
288311SSukumar.Swaminathan@Sun.COM #ifndef	_QL_API_H
298311SSukumar.Swaminathan@Sun.COM #define	_QL_API_H
308311SSukumar.Swaminathan@Sun.COM 
318311SSukumar.Swaminathan@Sun.COM /*
328311SSukumar.Swaminathan@Sun.COM  * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
338311SSukumar.Swaminathan@Sun.COM  *
348311SSukumar.Swaminathan@Sun.COM  * ***********************************************************************
358311SSukumar.Swaminathan@Sun.COM  * *									**
368311SSukumar.Swaminathan@Sun.COM  * *				NOTICE					**
3711541SDaniel.Beauregard@Sun.COM  * *		COPYRIGHT (C) 1996-2010 QLOGIC CORPORATION		**
388311SSukumar.Swaminathan@Sun.COM  * *			ALL RIGHTS RESERVED				**
398311SSukumar.Swaminathan@Sun.COM  * *									**
408311SSukumar.Swaminathan@Sun.COM  * ***********************************************************************
418311SSukumar.Swaminathan@Sun.COM  *
428311SSukumar.Swaminathan@Sun.COM  */
438311SSukumar.Swaminathan@Sun.COM 
448311SSukumar.Swaminathan@Sun.COM #ifdef	__cplusplus
458311SSukumar.Swaminathan@Sun.COM extern "C" {
468311SSukumar.Swaminathan@Sun.COM #endif
478311SSukumar.Swaminathan@Sun.COM 
488311SSukumar.Swaminathan@Sun.COM /* OS include files. */
498311SSukumar.Swaminathan@Sun.COM #include <sys/scsi/scsi_types.h>
508311SSukumar.Swaminathan@Sun.COM #include <sys/byteorder.h>
518311SSukumar.Swaminathan@Sun.COM #include <sys/pci.h>
528311SSukumar.Swaminathan@Sun.COM #include <sys/utsname.h>
538311SSukumar.Swaminathan@Sun.COM #include <sys/file.h>
548311SSukumar.Swaminathan@Sun.COM #include <sys/param.h>
558311SSukumar.Swaminathan@Sun.COM #include <ql_open.h>
568311SSukumar.Swaminathan@Sun.COM 
578311SSukumar.Swaminathan@Sun.COM #include <sys/fibre-channel/fc.h>
588311SSukumar.Swaminathan@Sun.COM #include <sys/fibre-channel/impl/fc_fcaif.h>
598311SSukumar.Swaminathan@Sun.COM 
608311SSukumar.Swaminathan@Sun.COM #ifndef	DDI_INTR_TYPE_FIXED
618311SSukumar.Swaminathan@Sun.COM #define	DDI_INTR_TYPE_FIXED	0x1
628311SSukumar.Swaminathan@Sun.COM #endif
638311SSukumar.Swaminathan@Sun.COM #ifndef	DDI_INTR_TYPE_MSI
648311SSukumar.Swaminathan@Sun.COM #define	DDI_INTR_TYPE_MSI	0x2
658311SSukumar.Swaminathan@Sun.COM #endif
668311SSukumar.Swaminathan@Sun.COM #ifndef	DDI_INTR_TYPE_MSIX
678311SSukumar.Swaminathan@Sun.COM #define	DDI_INTR_TYPE_MSIX	0x4
688311SSukumar.Swaminathan@Sun.COM #endif
698311SSukumar.Swaminathan@Sun.COM #ifndef	DDI_INTR_FLAG_BLOCK
708311SSukumar.Swaminathan@Sun.COM #define	DDI_INTR_FLAG_BLOCK	0x100
718311SSukumar.Swaminathan@Sun.COM #endif
728311SSukumar.Swaminathan@Sun.COM #ifndef	DDI_INTR_ALLOC_NORMAL
738311SSukumar.Swaminathan@Sun.COM #define	DDI_INTR_ALLOC_NORMAL	0
748311SSukumar.Swaminathan@Sun.COM #endif
758311SSukumar.Swaminathan@Sun.COM #ifndef	DDI_INTR_ALLOC_STRICT
768311SSukumar.Swaminathan@Sun.COM #define	DDI_INTR_ALLOC_STRICT	1
778311SSukumar.Swaminathan@Sun.COM #endif
788311SSukumar.Swaminathan@Sun.COM 
798311SSukumar.Swaminathan@Sun.COM /*
808311SSukumar.Swaminathan@Sun.COM  * NPIV defines
818311SSukumar.Swaminathan@Sun.COM  */
828311SSukumar.Swaminathan@Sun.COM #ifndef	FC_NPIV_FDISC_FAILED
838311SSukumar.Swaminathan@Sun.COM #define	FC_NPIV_FDISC_FAILED	0x45
848311SSukumar.Swaminathan@Sun.COM #endif
858311SSukumar.Swaminathan@Sun.COM #ifndef	FC_NPIV_FDISC_WWN_INUSE
868311SSukumar.Swaminathan@Sun.COM #define	FC_NPIV_FDISC_WWN_INUSE	0x46
878311SSukumar.Swaminathan@Sun.COM #endif
888311SSukumar.Swaminathan@Sun.COM #ifndef	FC_NPIV_NOT_SUPPORTED
898311SSukumar.Swaminathan@Sun.COM #define	FC_NPIV_NOT_SUPPORTED	0x47
908311SSukumar.Swaminathan@Sun.COM #endif
918311SSukumar.Swaminathan@Sun.COM #ifndef	FC_NPIV_WRONG_TOPOLOGY
928311SSukumar.Swaminathan@Sun.COM #define	FC_NPIV_WRONG_TOPOLOGY	0x48
938311SSukumar.Swaminathan@Sun.COM #endif
948311SSukumar.Swaminathan@Sun.COM #ifndef	FC_NPIV_NPIV_BOUND
958311SSukumar.Swaminathan@Sun.COM #define	FC_NPIV_NPIV_BOUND	0x49
968311SSukumar.Swaminathan@Sun.COM #endif
978311SSukumar.Swaminathan@Sun.COM 
988311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_supported_types
998311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_nintrs
1008311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_alloc
1018311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_free
1028311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_pri
1038311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_add_handler
1048311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_dup_handler
1058311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_navail
1068311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_block_disable
1078311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_block_enable
1088311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_disable
1098311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_enable
1108311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_cap
1118311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_remove_handler
1128311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_supported_types();
1138311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_nintrs();
1148311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_alloc();
1158311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_free();
1168311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_pri();
1178311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_add_handler();
1188311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_dup_handler();
1198311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_navail();
1208311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_block_disable();
1218311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_block_enable();
1228311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_disable();
1238311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_enable();
1248311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_cap();
1258311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_remove_handler();
1268311SSukumar.Swaminathan@Sun.COM 
1278311SSukumar.Swaminathan@Sun.COM #ifndef QL_DRV_HARDENING
1288311SSukumar.Swaminathan@Sun.COM #define	ddi_devstate_t			int
1298311SSukumar.Swaminathan@Sun.COM #define	DDI_DEVSTATE_UP			0
1308311SSukumar.Swaminathan@Sun.COM #define	ddi_get_devstate(a)		DDI_DEVSTATE_UP
1318311SSukumar.Swaminathan@Sun.COM #define	ddi_dev_report_fault(a, b, c, d)
1328311SSukumar.Swaminathan@Sun.COM #define	ddi_check_dma_handle(a)		DDI_SUCCESS
1338311SSukumar.Swaminathan@Sun.COM #define	ddi_check_acc_handle(a)		DDI_SUCCESS
1348311SSukumar.Swaminathan@Sun.COM #define	QL_CLEAR_DMA_HANDLE(x)
1358311SSukumar.Swaminathan@Sun.COM #else
1368311SSukumar.Swaminathan@Sun.COM #define	QL_CLEAR_DMA_HANDLE(x)	((ddi_dma_impl_t *)x)->dmai_fault_notify = 0; \
1378311SSukumar.Swaminathan@Sun.COM 				((ddi_dma_impl_t *)x)->dmai_fault_check  = 0; \
1388311SSukumar.Swaminathan@Sun.COM 				((ddi_dma_impl_t *)x)->dmai_fault	 = 0
1398311SSukumar.Swaminathan@Sun.COM #endif
1408311SSukumar.Swaminathan@Sun.COM 
1418311SSukumar.Swaminathan@Sun.COM #ifndef	FC_STATE_1GBIT_SPEED
1429446SDaniel.Beauregard@Sun.COM #define	FC_STATE_1GBIT_SPEED	0x0100	/* 1 Gbit/sec */
1438311SSukumar.Swaminathan@Sun.COM #endif
1448311SSukumar.Swaminathan@Sun.COM #ifndef	FC_STATE_2GBIT_SPEED
1459446SDaniel.Beauregard@Sun.COM #define	FC_STATE_2GBIT_SPEED	0x0400	/* 2 Gbit/sec */
1468311SSukumar.Swaminathan@Sun.COM #endif
1478311SSukumar.Swaminathan@Sun.COM #ifndef	FC_STATE_4GBIT_SPEED
1489446SDaniel.Beauregard@Sun.COM #define	FC_STATE_4GBIT_SPEED	0x0500	/* 4 Gbit/sec */
1499446SDaniel.Beauregard@Sun.COM #endif
1509446SDaniel.Beauregard@Sun.COM #ifndef FC_STATE_8GBIT_SPEED
1519446SDaniel.Beauregard@Sun.COM #define	FC_STATE_8GBIT_SPEED	0x0700	/* 8 Gbit/sec */
1529446SDaniel.Beauregard@Sun.COM #endif
1539446SDaniel.Beauregard@Sun.COM #ifndef FC_STATE_10GBIT_SPEED
1549446SDaniel.Beauregard@Sun.COM #define	FC_STATE_10GBIT_SPEED	0x0600	/* 10 Gbit/sec */
1558311SSukumar.Swaminathan@Sun.COM #endif
1568311SSukumar.Swaminathan@Sun.COM 
1578311SSukumar.Swaminathan@Sun.COM /*
1588311SSukumar.Swaminathan@Sun.COM  * Data bit definitions.
1598311SSukumar.Swaminathan@Sun.COM  */
1608311SSukumar.Swaminathan@Sun.COM #define	BIT_0   0x1
1618311SSukumar.Swaminathan@Sun.COM #define	BIT_1   0x2
1628311SSukumar.Swaminathan@Sun.COM #define	BIT_2   0x4
1638311SSukumar.Swaminathan@Sun.COM #define	BIT_3   0x8
1648311SSukumar.Swaminathan@Sun.COM #define	BIT_4   0x10
1658311SSukumar.Swaminathan@Sun.COM #define	BIT_5   0x20
1668311SSukumar.Swaminathan@Sun.COM #define	BIT_6   0x40
1678311SSukumar.Swaminathan@Sun.COM #define	BIT_7   0x80
1688311SSukumar.Swaminathan@Sun.COM #define	BIT_8   0x100
1698311SSukumar.Swaminathan@Sun.COM #define	BIT_9   0x200
1708311SSukumar.Swaminathan@Sun.COM #define	BIT_10  0x400
1718311SSukumar.Swaminathan@Sun.COM #define	BIT_11  0x800
1728311SSukumar.Swaminathan@Sun.COM #define	BIT_12  0x1000
1738311SSukumar.Swaminathan@Sun.COM #define	BIT_13  0x2000
1748311SSukumar.Swaminathan@Sun.COM #define	BIT_14  0x4000
1758311SSukumar.Swaminathan@Sun.COM #define	BIT_15  0x8000
1768311SSukumar.Swaminathan@Sun.COM #define	BIT_16  0x10000
1778311SSukumar.Swaminathan@Sun.COM #define	BIT_17  0x20000
1788311SSukumar.Swaminathan@Sun.COM #define	BIT_18  0x40000
1798311SSukumar.Swaminathan@Sun.COM #define	BIT_19  0x80000
1808311SSukumar.Swaminathan@Sun.COM #define	BIT_20  0x100000
1818311SSukumar.Swaminathan@Sun.COM #define	BIT_21  0x200000
1828311SSukumar.Swaminathan@Sun.COM #define	BIT_22  0x400000
1838311SSukumar.Swaminathan@Sun.COM #define	BIT_23  0x800000
1848311SSukumar.Swaminathan@Sun.COM #define	BIT_24  0x1000000
1858311SSukumar.Swaminathan@Sun.COM #define	BIT_25  0x2000000
1868311SSukumar.Swaminathan@Sun.COM #define	BIT_26  0x4000000
1878311SSukumar.Swaminathan@Sun.COM #define	BIT_27  0x8000000
1888311SSukumar.Swaminathan@Sun.COM #define	BIT_28  0x10000000
1898311SSukumar.Swaminathan@Sun.COM #define	BIT_29  0x20000000
1908311SSukumar.Swaminathan@Sun.COM #define	BIT_30  0x40000000
1918311SSukumar.Swaminathan@Sun.COM #define	BIT_31  0x80000000
1928311SSukumar.Swaminathan@Sun.COM 
1938311SSukumar.Swaminathan@Sun.COM /*
1948311SSukumar.Swaminathan@Sun.COM  *  Local Macro Definitions.
1958311SSukumar.Swaminathan@Sun.COM  */
1968311SSukumar.Swaminathan@Sun.COM #ifndef TRUE
1978311SSukumar.Swaminathan@Sun.COM #define	TRUE	B_TRUE
1988311SSukumar.Swaminathan@Sun.COM #endif
1998311SSukumar.Swaminathan@Sun.COM 
2008311SSukumar.Swaminathan@Sun.COM #ifndef FALSE
2018311SSukumar.Swaminathan@Sun.COM #define	FALSE	B_FALSE
2028311SSukumar.Swaminathan@Sun.COM #endif
2038311SSukumar.Swaminathan@Sun.COM 
2048311SSukumar.Swaminathan@Sun.COM /*
2058311SSukumar.Swaminathan@Sun.COM  * I/O register
2068311SSukumar.Swaminathan@Sun.COM  */
2078311SSukumar.Swaminathan@Sun.COM #define	RD_REG_BYTE(ha, addr) \
20811924SDaniel.Beauregard@Sun.COM 	(uint8_t)ddi_get8(ha->dev_handle, (uint8_t *)(addr))
2098311SSukumar.Swaminathan@Sun.COM #define	RD_REG_WORD(ha, addr) \
21011924SDaniel.Beauregard@Sun.COM 	(uint16_t)ddi_get16(ha->dev_handle, (uint16_t *)(addr))
2118311SSukumar.Swaminathan@Sun.COM #define	RD_REG_DWORD(ha, addr) \
21211924SDaniel.Beauregard@Sun.COM 	(uint32_t)ddi_get32(ha->dev_handle, (uint32_t *)(addr))
21311924SDaniel.Beauregard@Sun.COM #define	RD_REG_DDWORD(ha, addr) \
21411924SDaniel.Beauregard@Sun.COM 	(uint64_t)ddi_get64(ha->dev_handle, (uint64_t *)(addr))
2158311SSukumar.Swaminathan@Sun.COM 
2168311SSukumar.Swaminathan@Sun.COM #define	WRT_REG_BYTE(ha, addr, data) \
21711924SDaniel.Beauregard@Sun.COM 	ddi_put8(ha->dev_handle, (uint8_t *)(addr), (uint8_t)(data))
2188311SSukumar.Swaminathan@Sun.COM #define	WRT_REG_WORD(ha, addr, data) \
21911924SDaniel.Beauregard@Sun.COM 	ddi_put16(ha->dev_handle, (uint16_t *)(addr), (uint16_t)(data))
2208311SSukumar.Swaminathan@Sun.COM #define	WRT_REG_DWORD(ha, addr, data) \
22111924SDaniel.Beauregard@Sun.COM 	ddi_put32(ha->dev_handle, (uint32_t *)(addr), (uint32_t)(data))
22211924SDaniel.Beauregard@Sun.COM #define	WRT_REG_DDWORD(ha, addr, data) \
22311924SDaniel.Beauregard@Sun.COM 	ddi_put64(ha->dev_handle, (uint64_t *)(addr), (uint64_t)(data))
2248311SSukumar.Swaminathan@Sun.COM 
2258311SSukumar.Swaminathan@Sun.COM #define	RD8_IO_REG(ha, regname) \
2268311SSukumar.Swaminathan@Sun.COM 	RD_REG_BYTE(ha, (ha->iobase + ha->reg_off->regname))
2278311SSukumar.Swaminathan@Sun.COM #define	RD16_IO_REG(ha, regname) \
2288311SSukumar.Swaminathan@Sun.COM 	RD_REG_WORD(ha, (ha->iobase + ha->reg_off->regname))
2298311SSukumar.Swaminathan@Sun.COM #define	RD32_IO_REG(ha, regname) \
2308311SSukumar.Swaminathan@Sun.COM 	RD_REG_DWORD(ha, (ha->iobase + ha->reg_off->regname))
2318311SSukumar.Swaminathan@Sun.COM 
2328311SSukumar.Swaminathan@Sun.COM #define	WRT8_IO_REG(ha, regname, data) \
23311924SDaniel.Beauregard@Sun.COM 	WRT_REG_BYTE(ha, (ha->iobase + ha->reg_off->regname), (data))
2348311SSukumar.Swaminathan@Sun.COM #define	WRT16_IO_REG(ha, regname, data) \
23511924SDaniel.Beauregard@Sun.COM 	WRT_REG_WORD(ha, (ha->iobase + ha->reg_off->regname), (data))
2368311SSukumar.Swaminathan@Sun.COM #define	WRT32_IO_REG(ha, regname, data) \
23711924SDaniel.Beauregard@Sun.COM 	WRT_REG_DWORD(ha, (ha->iobase + ha->reg_off->regname), (data))
2388311SSukumar.Swaminathan@Sun.COM 
2398311SSukumar.Swaminathan@Sun.COM #define	RD_IOREG_BYTE(ha, addr) \
24011924SDaniel.Beauregard@Sun.COM 	(uint8_t)ddi_get8(ha->iomap_dev_handle, (uint8_t *)(addr))
2418311SSukumar.Swaminathan@Sun.COM #define	RD_IOREG_WORD(ha, addr) \
24211924SDaniel.Beauregard@Sun.COM 	(uint16_t)ddi_get16(ha->iomap_dev_handle, (uint16_t *)(addr))
2438311SSukumar.Swaminathan@Sun.COM #define	RD_IOREG_DWORD(ha, addr) \
24411924SDaniel.Beauregard@Sun.COM 	(uint32_t)ddi_get32(ha->iomap_dev_handle, (uint32_t *)(addr))
2458311SSukumar.Swaminathan@Sun.COM 
2468311SSukumar.Swaminathan@Sun.COM #define	WRT_IOREG_BYTE(ha, addr, data) \
24711924SDaniel.Beauregard@Sun.COM 	ddi_put8(ha->iomap_dev_handle, (uint8_t *)addr, (uint8_t)(data))
2488311SSukumar.Swaminathan@Sun.COM #define	WRT_IOREG_WORD(ha, addr, data) \
24911924SDaniel.Beauregard@Sun.COM 	ddi_put16(ha->iomap_dev_handle, (uint16_t *)addr, (uint16_t)(data))
2508311SSukumar.Swaminathan@Sun.COM #define	WRT_IOREG_DWORD(ha, addr, data) \
25111924SDaniel.Beauregard@Sun.COM 	ddi_put32(ha->iomap_dev_handle, (uint32_t *)addr, (uint32_t)(data))
2528311SSukumar.Swaminathan@Sun.COM 
2538311SSukumar.Swaminathan@Sun.COM #define	RD8_IOMAP_REG(ha, regname) \
2548311SSukumar.Swaminathan@Sun.COM 	RD_IOREG_BYTE(ha, (ha->iomap_iobase + ha->reg_off->regname))
2558311SSukumar.Swaminathan@Sun.COM #define	RD16_IOMAP_REG(ha, regname) \
2568311SSukumar.Swaminathan@Sun.COM 	RD_IOREG_WORD(ha, (ha->iomap_iobase + ha->reg_off->regname))
2578311SSukumar.Swaminathan@Sun.COM #define	RD32_IOMAP_REG(ha, regname) \
2588311SSukumar.Swaminathan@Sun.COM 	RD_IOREG_DWORD(ha, (ha->iomap_iobase + ha->reg_off->regname))
2598311SSukumar.Swaminathan@Sun.COM 
2608311SSukumar.Swaminathan@Sun.COM #define	WRT8_IOMAP_REG(ha, regname, data) \
26111924SDaniel.Beauregard@Sun.COM 	WRT_IOREG_BYTE(ha, (ha->iomap_iobase + ha->reg_off->regname), (data))
2628311SSukumar.Swaminathan@Sun.COM #define	WRT16_IOMAP_REG(ha, regname, data) \
26311924SDaniel.Beauregard@Sun.COM 	WRT_IOREG_WORD(ha, (ha->iomap_iobase + ha->reg_off->regname), (data))
2648311SSukumar.Swaminathan@Sun.COM #define	WRT32_IOMAP_REG(ha, regname, data) \
26511924SDaniel.Beauregard@Sun.COM 	WRT_IOREG_DWORD(ha, (ha->iomap_iobase + ha->reg_off->regname), (data))
2668311SSukumar.Swaminathan@Sun.COM 
2678311SSukumar.Swaminathan@Sun.COM /*
2688311SSukumar.Swaminathan@Sun.COM  * FCA definitions
2698311SSukumar.Swaminathan@Sun.COM  */
2708311SSukumar.Swaminathan@Sun.COM #define	MAX_LUNS	16384
2718311SSukumar.Swaminathan@Sun.COM #define	QL_FCA_BRAND	0x0fca2200
2728311SSukumar.Swaminathan@Sun.COM 
2738311SSukumar.Swaminathan@Sun.COM /* Following to be removed when defined by OS. */
2748311SSukumar.Swaminathan@Sun.COM /* ************************************************************************ */
2758311SSukumar.Swaminathan@Sun.COM #define	LA_ELS_FARP_REQ		0x54
2768311SSukumar.Swaminathan@Sun.COM #define	LA_ELS_FARP_REPLY	0x55
2778311SSukumar.Swaminathan@Sun.COM #define	LA_ELS_LPC		0x71
2788311SSukumar.Swaminathan@Sun.COM #define	LA_ELS_LSTS		0x72
2798311SSukumar.Swaminathan@Sun.COM 
2808311SSukumar.Swaminathan@Sun.COM typedef struct {
2818311SSukumar.Swaminathan@Sun.COM 	ls_code_t ls_code;
2828311SSukumar.Swaminathan@Sun.COM 	uint8_t rsvd[3];
2838311SSukumar.Swaminathan@Sun.COM 	uint8_t port_control;
2848311SSukumar.Swaminathan@Sun.COM 	uint8_t lpb[16];
2858311SSukumar.Swaminathan@Sun.COM 	uint8_t lpe[16];
2868311SSukumar.Swaminathan@Sun.COM } ql_lpc_t;
2878311SSukumar.Swaminathan@Sun.COM 
2888311SSukumar.Swaminathan@Sun.COM typedef struct {
2898311SSukumar.Swaminathan@Sun.COM 	ls_code_t ls_code;
2908311SSukumar.Swaminathan@Sun.COM } ql_acc_rjt_t;
2918311SSukumar.Swaminathan@Sun.COM 
2928311SSukumar.Swaminathan@Sun.COM typedef	fc_linit_resp_t ql_lpc_resp_t;
2938311SSukumar.Swaminathan@Sun.COM typedef	fc_scr_resp_t ql_rscn_resp_t;
2948311SSukumar.Swaminathan@Sun.COM 
2958311SSukumar.Swaminathan@Sun.COM typedef struct {
2968311SSukumar.Swaminathan@Sun.COM 	uint16_t    class_valid_svc_opt;
2978311SSukumar.Swaminathan@Sun.COM 	uint16_t    initiator_ctl;
2988311SSukumar.Swaminathan@Sun.COM 	uint16_t    recipient_ctl;
2998311SSukumar.Swaminathan@Sun.COM 	uint16_t    rcv_data_size;
3008311SSukumar.Swaminathan@Sun.COM 	uint16_t    conc_sequences;
3018311SSukumar.Swaminathan@Sun.COM 	uint16_t    n_port_end_to_end_credit;
3028311SSukumar.Swaminathan@Sun.COM 	uint16_t    open_sequences_per_exch;
3038311SSukumar.Swaminathan@Sun.COM 	uint16_t    unused;
3048311SSukumar.Swaminathan@Sun.COM } class_svc_param_t;
3058311SSukumar.Swaminathan@Sun.COM 
3068311SSukumar.Swaminathan@Sun.COM typedef struct {
3078311SSukumar.Swaminathan@Sun.COM 	uint8_t    type;
3088311SSukumar.Swaminathan@Sun.COM 	uint8_t    rsvd;
3098311SSukumar.Swaminathan@Sun.COM 	uint16_t    process_assoc_flags;
3108311SSukumar.Swaminathan@Sun.COM 	uint32_t    originator_process;
3118311SSukumar.Swaminathan@Sun.COM 	uint32_t    responder_process;
3128311SSukumar.Swaminathan@Sun.COM 	uint32_t    process_flags;
3138311SSukumar.Swaminathan@Sun.COM } prli_svc_param_t;
3148311SSukumar.Swaminathan@Sun.COM /* *********************************************************************** */
3158311SSukumar.Swaminathan@Sun.COM 
3168311SSukumar.Swaminathan@Sun.COM /*
3178311SSukumar.Swaminathan@Sun.COM  * Fibre Channel device definitions.
3188311SSukumar.Swaminathan@Sun.COM  */
3198311SSukumar.Swaminathan@Sun.COM #define	MAX_22_FIBRE_DEVICES	256
3208311SSukumar.Swaminathan@Sun.COM #define	MAX_24_FIBRE_DEVICES	2048
3219156SDaniel.Beauregard@Sun.COM #define	MAX_24_VIRTUAL_PORTS	127
3229156SDaniel.Beauregard@Sun.COM #define	MAX_25_VIRTUAL_PORTS	254
3238311SSukumar.Swaminathan@Sun.COM 
3248311SSukumar.Swaminathan@Sun.COM #define	LAST_LOCAL_LOOP_ID		 0x7d
3258311SSukumar.Swaminathan@Sun.COM #define	FL_PORT_LOOP_ID			 0x7e /* FFFFFE Fabric F_Port */
3268311SSukumar.Swaminathan@Sun.COM #define	SWITCH_FABRIC_CONTROLLER_LOOP_ID 0x7f /* FFFFFD Fabric Controller */
3278311SSukumar.Swaminathan@Sun.COM #define	SIMPLE_NAME_SERVER_LOOP_ID	 0x80 /* FFFFFC Directory Server */
3288311SSukumar.Swaminathan@Sun.COM #define	SNS_FIRST_LOOP_ID		 0x81
3298311SSukumar.Swaminathan@Sun.COM #define	SNS_LAST_LOOP_ID		 0xfe
3308311SSukumar.Swaminathan@Sun.COM #define	IP_BROADCAST_LOOP_ID		 0xff /* FFFFFF Broadcast */
3318311SSukumar.Swaminathan@Sun.COM #define	BROADCAST_ADDR			 0xffffff /* FFFFFF Broadcast */
3328311SSukumar.Swaminathan@Sun.COM 
3338311SSukumar.Swaminathan@Sun.COM /*
3348311SSukumar.Swaminathan@Sun.COM  * Fibre Channel 24xx device definitions.
3358311SSukumar.Swaminathan@Sun.COM  */
3368311SSukumar.Swaminathan@Sun.COM #define	LAST_N_PORT_HDL		0x7ef
3378311SSukumar.Swaminathan@Sun.COM #define	SNS_24XX_HDL		0x7FC	/* SNS FFFFFCh */
3388311SSukumar.Swaminathan@Sun.COM #define	SFC_24XX_HDL		0x7FD	/* fabric controller FFFFFDh */
3398311SSukumar.Swaminathan@Sun.COM #define	FL_PORT_24XX_HDL	0x7FE	/* F_Port FFFFFEh */
3408311SSukumar.Swaminathan@Sun.COM #define	BROADCAST_24XX_HDL	0x7FF	/* IP broadcast FFFFFFh */
3418311SSukumar.Swaminathan@Sun.COM 
3428311SSukumar.Swaminathan@Sun.COM /* Loop ID's used as flags, must be higher than any valid Loop ID */
3438311SSukumar.Swaminathan@Sun.COM #define	PORT_NO_LOOP_ID		0x8000	/* Device does not have loop ID. */
3448311SSukumar.Swaminathan@Sun.COM #define	PORT_LOST_ID		0x4000	/* Device has been lost. */
3458311SSukumar.Swaminathan@Sun.COM 
3468311SSukumar.Swaminathan@Sun.COM /* Fibre Channel Topoploy. */
3478311SSukumar.Swaminathan@Sun.COM #define	QL_N_PORT		BIT_0
3488311SSukumar.Swaminathan@Sun.COM #define	QL_NL_PORT		BIT_1
3498311SSukumar.Swaminathan@Sun.COM #define	QL_F_PORT		BIT_2
3508311SSukumar.Swaminathan@Sun.COM #define	QL_FL_PORT		BIT_3
3518311SSukumar.Swaminathan@Sun.COM #define	QL_SNS_CONNECTION	BIT_4
3528311SSukumar.Swaminathan@Sun.COM #define	QL_LOOP_CONNECTION	(QL_NL_PORT | QL_FL_PORT)
3538311SSukumar.Swaminathan@Sun.COM #define	QL_P2P_CONNECTION	(QL_F_PORT | QL_N_PORT)
3548311SSukumar.Swaminathan@Sun.COM 
3558311SSukumar.Swaminathan@Sun.COM /* Timeout timer counts in seconds (must greater than 1 second). */
3568311SSukumar.Swaminathan@Sun.COM #define	WATCHDOG_TIME		5			/* 0 - 255 */
3578311SSukumar.Swaminathan@Sun.COM #define	PORT_RETRY_TIME		2			/* 0 - 255 */
3588311SSukumar.Swaminathan@Sun.COM #define	LOOP_DOWN_TIMER_OFF	0
3598311SSukumar.Swaminathan@Sun.COM #define	LOOP_DOWN_TIMER_START	240			/* 0 - 255 */
3608311SSukumar.Swaminathan@Sun.COM #define	LOOP_DOWN_TIMER_END	1
3618311SSukumar.Swaminathan@Sun.COM #define	LOOP_DOWN_RESET		(LOOP_DOWN_TIMER_START - 45)	/* 0 - 255 */
3628311SSukumar.Swaminathan@Sun.COM #define	R_A_TOV_DEFAULT		20			/* 0 - 65535 */
3638311SSukumar.Swaminathan@Sun.COM #define	IDLE_CHECK_TIMER	300			/* 0 - 65535 */
3648311SSukumar.Swaminathan@Sun.COM #define	MAX_DEVICE_LOST_RETRY	16			/* 0 - 255 */
365*12279SDaniel.Beauregard@Sun.COM #define	TIMEOUT_THRESHOLD	16			/* 0 - 255 */
3668311SSukumar.Swaminathan@Sun.COM 
3678311SSukumar.Swaminathan@Sun.COM /* Maximum outstanding commands in ISP queues (1-4095) */
3688311SSukumar.Swaminathan@Sun.COM #define	MAX_OUTSTANDING_COMMANDS	0x400
3698311SSukumar.Swaminathan@Sun.COM #define	OSC_INDEX_MASK			0xfff
3708311SSukumar.Swaminathan@Sun.COM #define	OSC_INDEX_SHIFT			12
3718311SSukumar.Swaminathan@Sun.COM 
3728311SSukumar.Swaminathan@Sun.COM /* Maximum unsolicited buffers (1-65535) */
3738311SSukumar.Swaminathan@Sun.COM #define	QL_UB_LIMIT	256
3748311SSukumar.Swaminathan@Sun.COM 
3758311SSukumar.Swaminathan@Sun.COM /* ISP request, response and receive buffer entry counts */
3768311SSukumar.Swaminathan@Sun.COM #define	REQUEST_ENTRY_CNT	512	/* Request entries (205-65535) */
3778311SSukumar.Swaminathan@Sun.COM #define	RESPONSE_ENTRY_CNT	256	/* Response entries (1-65535) */
3788311SSukumar.Swaminathan@Sun.COM #define	RCVBUF_CONTAINER_CNT	64	/* Rcv buffer containers (8-1024) */
3798311SSukumar.Swaminathan@Sun.COM 
3808311SSukumar.Swaminathan@Sun.COM /*
3818311SSukumar.Swaminathan@Sun.COM  * ISP request, response, mailbox and receive buffer queue sizes
3828311SSukumar.Swaminathan@Sun.COM  */
3838311SSukumar.Swaminathan@Sun.COM #define	REQUEST_ENTRY_SIZE	64
3848311SSukumar.Swaminathan@Sun.COM #define	REQUEST_QUEUE_SIZE	(REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT)
3858311SSukumar.Swaminathan@Sun.COM 
3868311SSukumar.Swaminathan@Sun.COM #define	RESPONSE_ENTRY_SIZE	64
3878311SSukumar.Swaminathan@Sun.COM #define	RESPONSE_QUEUE_SIZE	(RESPONSE_ENTRY_SIZE * RESPONSE_ENTRY_CNT)
3888311SSukumar.Swaminathan@Sun.COM 
3898311SSukumar.Swaminathan@Sun.COM #define	MAILBOX_BUFFER_SIZE	0x4000
3908311SSukumar.Swaminathan@Sun.COM 
3918311SSukumar.Swaminathan@Sun.COM #define	RCVBUF_CONTAINER_SIZE	12
3928311SSukumar.Swaminathan@Sun.COM #define	RCVBUF_QUEUE_SIZE	(RCVBUF_CONTAINER_SIZE * RCVBUF_CONTAINER_CNT)
3938311SSukumar.Swaminathan@Sun.COM 
3948311SSukumar.Swaminathan@Sun.COM /*
3958311SSukumar.Swaminathan@Sun.COM  * ISP DMA buffer definitions
3968311SSukumar.Swaminathan@Sun.COM  */
3978311SSukumar.Swaminathan@Sun.COM #define	REQUEST_Q_BUFFER_OFFSET  0
3988311SSukumar.Swaminathan@Sun.COM #define	RESPONSE_Q_BUFFER_OFFSET (REQUEST_Q_BUFFER_OFFSET + REQUEST_QUEUE_SIZE)
3998311SSukumar.Swaminathan@Sun.COM #define	RCVBUF_Q_BUFFER_OFFSET  (RESPONSE_Q_BUFFER_OFFSET + RESPONSE_QUEUE_SIZE)
4008311SSukumar.Swaminathan@Sun.COM 
4018311SSukumar.Swaminathan@Sun.COM /*
4028311SSukumar.Swaminathan@Sun.COM  * DMA attributes definitions.
4038311SSukumar.Swaminathan@Sun.COM  */
4048311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_LOW_ADDRESS		(uint64_t)0
4058311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_HIGH_64BIT_ADDRESS	(uint64_t)0xffffffffffffffff
4068311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_HIGH_32BIT_ADDRESS	(uint64_t)0xffffffff
4078311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_XFER_COUNTER		(uint64_t)0xffffffff
4088311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_ADDRESS_ALIGNMENT	(uint64_t)8
4098311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_ALIGN_8_BYTE_BOUNDARY	(uint64_t)BIT_3
4108311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_RING_ADDRESS_ALIGNMENT	(uint64_t)64
4118311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_ALIGN_64_BYTE_BOUNDARY	(uint64_t)BIT_6
4128311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_BURSTSIZES		0xff
4138311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_MIN_XFER_SIZE		1
4148311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_MAX_XFER_SIZE		(uint64_t)0xffffffff
4158311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_SEGMENT_BOUNDARY		(uint64_t)0xffffffff
4168311SSukumar.Swaminathan@Sun.COM 
4178311SSukumar.Swaminathan@Sun.COM #ifdef __sparc
4188311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_SG_LIST_LENGTH	1
4198311SSukumar.Swaminathan@Sun.COM #define	QL_FCSM_CMD_SGLLEN	1
4208311SSukumar.Swaminathan@Sun.COM #define	QL_FCSM_RSP_SGLLEN	1
4218311SSukumar.Swaminathan@Sun.COM #define	QL_FCIP_CMD_SGLLEN	1
4228311SSukumar.Swaminathan@Sun.COM #define	QL_FCIP_RSP_SGLLEN	1
4238311SSukumar.Swaminathan@Sun.COM #define	QL_FCP_CMD_SGLLEN	1
4248311SSukumar.Swaminathan@Sun.COM #define	QL_FCP_RSP_SGLLEN	1
4258311SSukumar.Swaminathan@Sun.COM #else
4268311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_SG_LIST_LENGTH	1024
4278311SSukumar.Swaminathan@Sun.COM #define	QL_FCSM_CMD_SGLLEN	1
4288311SSukumar.Swaminathan@Sun.COM #define	QL_FCSM_RSP_SGLLEN	6
4298311SSukumar.Swaminathan@Sun.COM /*
4308311SSukumar.Swaminathan@Sun.COM  * QL_FCIP_CMD_SGLLEN needs to be increased as we changed the max fcip packet
4318311SSukumar.Swaminathan@Sun.COM  * size to about 64K. With this, we need to increase the maximum number of
4328311SSukumar.Swaminathan@Sun.COM  * scatter-gather elements allowable from the existing 7. We want it to be more
4338311SSukumar.Swaminathan@Sun.COM  * like 17 (max fragments for an fcip packet that is unaligned). (64K / 4K) + 1
4348311SSukumar.Swaminathan@Sun.COM  * or whatever. Otherwise the DMA breakup routines will give bad results.
4358311SSukumar.Swaminathan@Sun.COM  */
4368311SSukumar.Swaminathan@Sun.COM #define	QL_FCIP_CMD_SGLLEN	17
4378311SSukumar.Swaminathan@Sun.COM #define	QL_FCIP_RSP_SGLLEN	1
4388311SSukumar.Swaminathan@Sun.COM #define	QL_FCP_CMD_SGLLEN	1
4398311SSukumar.Swaminathan@Sun.COM #define	QL_FCP_RSP_SGLLEN	1
4408311SSukumar.Swaminathan@Sun.COM #endif
4418311SSukumar.Swaminathan@Sun.COM 
4428311SSukumar.Swaminathan@Sun.COM #ifndef	DDI_DMA_RELAXED_ORDERING
4438311SSukumar.Swaminathan@Sun.COM #define	DDI_DMA_RELAXED_ORDERING	0x400
4448311SSukumar.Swaminathan@Sun.COM #endif
4458311SSukumar.Swaminathan@Sun.COM 
4468311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_GRANULARITY	1
4478311SSukumar.Swaminathan@Sun.COM #define	QL_DMA_XFER_FLAGS	0
4488311SSukumar.Swaminathan@Sun.COM 
4498311SSukumar.Swaminathan@Sun.COM typedef union  {
4508311SSukumar.Swaminathan@Sun.COM 	uint64_t size64;	/* 1 X 64 bit number */
4518311SSukumar.Swaminathan@Sun.COM 	uint32_t size32[2];	/* 2 x 32 bit number */
4528311SSukumar.Swaminathan@Sun.COM 	uint16_t size16[4];	/* 4 x 16 bit number */
4538311SSukumar.Swaminathan@Sun.COM 	uint8_t	 size8[8];	/* 8 x  8 bit number */
4548311SSukumar.Swaminathan@Sun.COM } conv_num_t;
4558311SSukumar.Swaminathan@Sun.COM 
4568311SSukumar.Swaminathan@Sun.COM /*
4578311SSukumar.Swaminathan@Sun.COM  *  Device register offsets.
4588311SSukumar.Swaminathan@Sun.COM  */
4598311SSukumar.Swaminathan@Sun.COM #define	MAX_MBOX_COUNT		32
4608311SSukumar.Swaminathan@Sun.COM typedef struct {
46111924SDaniel.Beauregard@Sun.COM 	uint16_t flash_address;	/* Flash BIOS address */
46211924SDaniel.Beauregard@Sun.COM 	uint16_t flash_data;	/* Flash BIOS data */
46311924SDaniel.Beauregard@Sun.COM 	uint16_t ctrl_status;	/* Control/Status */
46411924SDaniel.Beauregard@Sun.COM 	uint16_t ictrl;		/* Interrupt control */
46511924SDaniel.Beauregard@Sun.COM 	uint16_t istatus;	/* Interrupt status */
46611924SDaniel.Beauregard@Sun.COM 	uint16_t semaphore;	/* Semaphore */
46711924SDaniel.Beauregard@Sun.COM 	uint16_t nvram;		/* NVRAM register. */
46811924SDaniel.Beauregard@Sun.COM 	uint16_t req_in;		/* for 2200 MBX 4 Write */
46911924SDaniel.Beauregard@Sun.COM 	uint16_t req_out;	/* for 2200 MBX 4 read */
47011924SDaniel.Beauregard@Sun.COM 	uint16_t resp_in;	/* for 2200 MBX 5 Read */
47111924SDaniel.Beauregard@Sun.COM 	uint16_t resp_out;	/* for 2200 MBX 5 Write */
47211924SDaniel.Beauregard@Sun.COM 	uint16_t risc2host;
47311924SDaniel.Beauregard@Sun.COM 	uint16_t mbox_cnt;	/* Number of mailboxes */
47411924SDaniel.Beauregard@Sun.COM 	uint16_t mailbox_in[MAX_MBOX_COUNT]; /* Mailbox registers */
47511924SDaniel.Beauregard@Sun.COM 	uint16_t mailbox_out[MAX_MBOX_COUNT]; /* Mailbox registers */
47611924SDaniel.Beauregard@Sun.COM 	uint16_t fpm_diag_config;
47711924SDaniel.Beauregard@Sun.COM 	uint16_t pcr;		/* Processor Control Register. */
47811924SDaniel.Beauregard@Sun.COM 	uint16_t mctr;		/* Memory Configuration and Timing. */
47911924SDaniel.Beauregard@Sun.COM 	uint16_t fb_cmd;
48011924SDaniel.Beauregard@Sun.COM 	uint16_t hccr;		/* Host command & control register. */
48111924SDaniel.Beauregard@Sun.COM 	uint16_t gpiod;		/* GPIO Data register. */
48211924SDaniel.Beauregard@Sun.COM 	uint16_t gpioe;		/* GPIO Enable register. */
48311924SDaniel.Beauregard@Sun.COM 	uint16_t host_to_host_sema;	/* 2312 resource lock register */
48411924SDaniel.Beauregard@Sun.COM 	uint16_t pri_req_in;	/* 2400 */
48511924SDaniel.Beauregard@Sun.COM 	uint16_t pri_req_out;	/* 2400 */
48611924SDaniel.Beauregard@Sun.COM 	uint16_t atio_req_in;	/* 2400 */
48711924SDaniel.Beauregard@Sun.COM 	uint16_t atio_req_out;	/* 2400 */
48811924SDaniel.Beauregard@Sun.COM 	uint16_t io_base_addr;	/* 2400 */
48911924SDaniel.Beauregard@Sun.COM 	uint16_t nx_host_int;	/* NetXen */
49011924SDaniel.Beauregard@Sun.COM 	uint16_t nx_risc_int;	/* NetXen */
4918311SSukumar.Swaminathan@Sun.COM } reg_off_t;
4928311SSukumar.Swaminathan@Sun.COM 
4938311SSukumar.Swaminathan@Sun.COM /*
4948311SSukumar.Swaminathan@Sun.COM  * Mbox-8 read maximum debounce count.
4958311SSukumar.Swaminathan@Sun.COM  * Reading Mbox-8 could be debouncing, before getting stable value.
4968311SSukumar.Swaminathan@Sun.COM  * This is the recommended driver fix from Qlogic along with firmware fix.
4978311SSukumar.Swaminathan@Sun.COM  * During testing, maximum count did not cross 3.
4988311SSukumar.Swaminathan@Sun.COM  */
4998311SSukumar.Swaminathan@Sun.COM #define	QL_MAX_DEBOUNCE	10
5008311SSukumar.Swaminathan@Sun.COM 
5018311SSukumar.Swaminathan@Sun.COM /*
5028311SSukumar.Swaminathan@Sun.COM  * Control Status register definitions
5038311SSukumar.Swaminathan@Sun.COM  */
5048311SSukumar.Swaminathan@Sun.COM #define	ISP_FUNC_NUM_MASK	(BIT_15 | BIT_14)
5058311SSukumar.Swaminathan@Sun.COM #define	ISP_FLASH_64K_BANK	BIT_3	/* Flash BIOS 64K Bank Select */
5068311SSukumar.Swaminathan@Sun.COM #define	ISP_FLASH_ENABLE	BIT_1	/* Flash BIOS Read/Write enable */
5078311SSukumar.Swaminathan@Sun.COM #define	ISP_RESET		BIT_0	/* ISP soft reset */
5088311SSukumar.Swaminathan@Sun.COM 
5098311SSukumar.Swaminathan@Sun.COM /*
5108311SSukumar.Swaminathan@Sun.COM  * Control Status 24xx register definitions
5118311SSukumar.Swaminathan@Sun.COM  */
5128311SSukumar.Swaminathan@Sun.COM #define	FLASH_NVRAM_ACCESS_ERROR	BIT_18
5138311SSukumar.Swaminathan@Sun.COM #define	DMA_ACTIVE			BIT_17
5148311SSukumar.Swaminathan@Sun.COM #define	DMA_SHUTDOWN			BIT_16
5158311SSukumar.Swaminathan@Sun.COM #define	FUNCTION_NUMBER			BIT_15
5168311SSukumar.Swaminathan@Sun.COM 
5178311SSukumar.Swaminathan@Sun.COM #define	MWB_4096_BYTES			(BIT_5 | BIT_4)
5188311SSukumar.Swaminathan@Sun.COM #define	MWB_2048_BYTES			BIT_5
5198311SSukumar.Swaminathan@Sun.COM #define	MWB_1024_BYTES			BIT_4
5208311SSukumar.Swaminathan@Sun.COM #define	MWB_512_BYTES			0
5218311SSukumar.Swaminathan@Sun.COM 
5228311SSukumar.Swaminathan@Sun.COM /*
5238311SSukumar.Swaminathan@Sun.COM  * Interrupt Control register definitions
5248311SSukumar.Swaminathan@Sun.COM  */
5258311SSukumar.Swaminathan@Sun.COM #define	ISP_EN_INT		BIT_15	/* ISP enable interrupts. */
5268311SSukumar.Swaminathan@Sun.COM #define	ISP_EN_RISC		BIT_3	/* ISP enable RISC interrupts. */
5278311SSukumar.Swaminathan@Sun.COM 
5288311SSukumar.Swaminathan@Sun.COM /*
5298311SSukumar.Swaminathan@Sun.COM  * Interrupt Status register definitions
5308311SSukumar.Swaminathan@Sun.COM  */
5318311SSukumar.Swaminathan@Sun.COM #define	RISC_INT		BIT_3	/* RISC interrupt */
5328311SSukumar.Swaminathan@Sun.COM 
5338311SSukumar.Swaminathan@Sun.COM /*
53411924SDaniel.Beauregard@Sun.COM  * NetXen Host/Risc Interrupt register definitions
53511924SDaniel.Beauregard@Sun.COM  */
53611924SDaniel.Beauregard@Sun.COM #define	NX_MBX_CMD		BIT_0	/* Mailbox command present */
53711924SDaniel.Beauregard@Sun.COM #define	NX_RISC_INT		BIT_0	/* RISC interrupt present */
53811924SDaniel.Beauregard@Sun.COM 
53911924SDaniel.Beauregard@Sun.COM /*
5408311SSukumar.Swaminathan@Sun.COM  * NVRAM register definitions.
5418311SSukumar.Swaminathan@Sun.COM  */
5428311SSukumar.Swaminathan@Sun.COM #define	NV_DESELECT		0
5438311SSukumar.Swaminathan@Sun.COM #define	NV_CLOCK		BIT_0
5448311SSukumar.Swaminathan@Sun.COM #define	NV_SELECT		BIT_1
5458311SSukumar.Swaminathan@Sun.COM #define	NV_DATA_OUT		BIT_2
5468311SSukumar.Swaminathan@Sun.COM #define	NV_DATA_IN		BIT_3
5478311SSukumar.Swaminathan@Sun.COM #define	NV_PR_ENABLE		BIT_13	/* protection register enable */
5488311SSukumar.Swaminathan@Sun.COM #define	NV_WR_ENABLE		BIT_14	/* write enable */
5498311SSukumar.Swaminathan@Sun.COM #define	NV_BUSY			BIT_15
5508311SSukumar.Swaminathan@Sun.COM 
5518311SSukumar.Swaminathan@Sun.COM /*
5528311SSukumar.Swaminathan@Sun.COM  * Flash/NVRAM 24xx definitions
5538311SSukumar.Swaminathan@Sun.COM  */
5548311SSukumar.Swaminathan@Sun.COM #define	FLASH_DATA_FLAG		BIT_31
5558311SSukumar.Swaminathan@Sun.COM #define	FLASH_CONF_ADDR		0x7FFD0000
5569446SDaniel.Beauregard@Sun.COM #define	FLASH_24_25_DATA_ADDR	0x7FF00000
5579446SDaniel.Beauregard@Sun.COM #define	FLASH_8100_DATA_ADDR	0x7F800000
5588311SSukumar.Swaminathan@Sun.COM #define	FLASH_ADDR_MASK		0x7FFF0000
5598311SSukumar.Swaminathan@Sun.COM 
5608311SSukumar.Swaminathan@Sun.COM #define	NVRAM_CONF_ADDR		0x7FFF0000
5618311SSukumar.Swaminathan@Sun.COM #define	NVRAM_DATA_ADDR		0x7FFE0000
5628311SSukumar.Swaminathan@Sun.COM 
5639446SDaniel.Beauregard@Sun.COM #define	NVRAM_2200_FUNC0_ADDR		0x0
5649446SDaniel.Beauregard@Sun.COM #define	NVRAM_2300_FUNC0_ADDR		0x0
5659446SDaniel.Beauregard@Sun.COM #define	NVRAM_2300_FUNC1_ADDR		0x80
5669446SDaniel.Beauregard@Sun.COM #define	NVRAM_2400_FUNC0_ADDR		0x80
5679446SDaniel.Beauregard@Sun.COM #define	NVRAM_2400_FUNC1_ADDR		0x180
5689446SDaniel.Beauregard@Sun.COM #define	NVRAM_2500_FUNC0_ADDR		0x48080
5699446SDaniel.Beauregard@Sun.COM #define	NVRAM_2500_FUNC1_ADDR		0x48180
5709446SDaniel.Beauregard@Sun.COM #define	NVRAM_8100_FUNC0_ADDR		0xD0080
5719446SDaniel.Beauregard@Sun.COM #define	NVRAM_8100_FUNC1_ADDR		0xD0180
57211924SDaniel.Beauregard@Sun.COM #define	NVRAM_8021_FUNC0_ADDR		0xF0080
57311924SDaniel.Beauregard@Sun.COM #define	NVRAM_8021_FUNC1_ADDR		0xF0180
5748311SSukumar.Swaminathan@Sun.COM 
5759446SDaniel.Beauregard@Sun.COM #define	VPD_2400_FUNC0_ADDR		0
5769446SDaniel.Beauregard@Sun.COM #define	VPD_2400_FUNC1_ADDR		0x100
5779446SDaniel.Beauregard@Sun.COM #define	VPD_2500_FUNC0_ADDR		0x48000
5789446SDaniel.Beauregard@Sun.COM #define	VPD_2500_FUNC1_ADDR		0x48100
5799446SDaniel.Beauregard@Sun.COM #define	VPD_8100_FUNC0_ADDR		0xD0000
5809446SDaniel.Beauregard@Sun.COM #define	VPD_8100_FUNC1_ADDR		0xD0400
58111924SDaniel.Beauregard@Sun.COM #define	VPD_8021_FUNC0_ADDR		0xFA300
58211924SDaniel.Beauregard@Sun.COM #define	VPD_8021_FUNC1_ADDR		0xFA300
5839446SDaniel.Beauregard@Sun.COM #define	VPD_SIZE			0x80
5848311SSukumar.Swaminathan@Sun.COM 
5859446SDaniel.Beauregard@Sun.COM #define	FLASH_2200_FIRMWARE_ADDR	0x20000
5869446SDaniel.Beauregard@Sun.COM #define	FLASH_2300_FIRMWARE_ADDR	0x20000
5879446SDaniel.Beauregard@Sun.COM #define	FLASH_2400_FIRMWARE_ADDR	0x20000
5889446SDaniel.Beauregard@Sun.COM #define	FLASH_2500_FIRMWARE_ADDR	0x20000
5899446SDaniel.Beauregard@Sun.COM #define	FLASH_8100_FIRMWARE_ADDR	0xA0000
59011924SDaniel.Beauregard@Sun.COM #define	FLASH_8021_FIRMWARE_ADDR	0x40000
59111924SDaniel.Beauregard@Sun.COM #define	FLASH_8021_FIRMWARE_SIZE	0x80000
59211924SDaniel.Beauregard@Sun.COM #define	FLASH_8021_BOOTLOADER_ADDR	0x4000
59311924SDaniel.Beauregard@Sun.COM #define	FLASH_8021_BOOTLOADER_SIZE	0x8000
5949446SDaniel.Beauregard@Sun.COM 
5959446SDaniel.Beauregard@Sun.COM #define	FLASH_2400_ERRLOG_START_ADDR_0	0
5969446SDaniel.Beauregard@Sun.COM #define	FLASH_2400_ERRLOG_START_ADDR_1	0
5978311SSukumar.Swaminathan@Sun.COM #define	FLASH_2500_ERRLOG_START_ADDR_0	0x54000
5988311SSukumar.Swaminathan@Sun.COM #define	FLASH_2500_ERRLOG_START_ADDR_1	0x54400
5999446SDaniel.Beauregard@Sun.COM #define	FLASH_8100_ERRLOG_START_ADDR_0	0xDC000
6009446SDaniel.Beauregard@Sun.COM #define	FLASH_8100_ERRLOG_START_ADDR_1	0xDC400
6018311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_SIZE		0x200
6028311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_ENTRY_SIZE		4
6039446SDaniel.Beauregard@Sun.COM 
6049446SDaniel.Beauregard@Sun.COM #define	FLASH_2400_DESCRIPTOR_TABLE	0
6058311SSukumar.Swaminathan@Sun.COM #define	FLASH_2500_DESCRIPTOR_TABLE	0x50000
6069446SDaniel.Beauregard@Sun.COM #define	FLASH_8100_DESCRIPTOR_TABLE	0xD8000
60711924SDaniel.Beauregard@Sun.COM #define	FLASH_8021_DESCRIPTOR_TABLE	0
6089446SDaniel.Beauregard@Sun.COM 
6099446SDaniel.Beauregard@Sun.COM #define	FLASH_2400_LAYOUT_TABLE		0x11400
6109446SDaniel.Beauregard@Sun.COM #define	FLASH_2500_LAYOUT_TABLE		0x50400
6119446SDaniel.Beauregard@Sun.COM #define	FLASH_8100_LAYOUT_TABLE		0xD8400
61211924SDaniel.Beauregard@Sun.COM #define	FLASH_8021_LAYOUT_TABLE		0xFC400
6138311SSukumar.Swaminathan@Sun.COM 
6148311SSukumar.Swaminathan@Sun.COM /*
6158311SSukumar.Swaminathan@Sun.COM  * Flash Error Log Event Codes.
6168311SSukumar.Swaminathan@Sun.COM  */
6178311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_AEN_8002		0x8002
6188311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_AEN_8003		0x8003
6198311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_AEN_8004		0x8004
6208311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_RESET_ERR		0xF00B
6218311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_ISP_ERR		0xF020
6228311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_PARITY_ERR		0xF022
6238311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_NVRAM_CHKSUM_ERR	0xF023
6248311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_FLASH_FW_ERR	0xF024
6258311SSukumar.Swaminathan@Sun.COM 
6268311SSukumar.Swaminathan@Sun.COM #define	VPD_TAG_END		0x78
6278311SSukumar.Swaminathan@Sun.COM #define	VPD_TAG_CHKSUM		"RV"
6288311SSukumar.Swaminathan@Sun.COM #define	VPD_TAG_SN		"SN"
6298311SSukumar.Swaminathan@Sun.COM #define	VPD_TAG_PN		"PN"
6308311SSukumar.Swaminathan@Sun.COM #define	VPD_TAG_PRODID		"\x82"
6318311SSukumar.Swaminathan@Sun.COM #define	VPD_TAG_LRT		0x90
6328311SSukumar.Swaminathan@Sun.COM #define	VPD_TAG_LRTC		0x91
6338311SSukumar.Swaminathan@Sun.COM 
6348311SSukumar.Swaminathan@Sun.COM /*
6358311SSukumar.Swaminathan@Sun.COM  * RISC to Host Status register definitions.
6368311SSukumar.Swaminathan@Sun.COM  */
6378311SSukumar.Swaminathan@Sun.COM #define	RH_RISC_INT		BIT_15		/* RISC to Host Intrpt Req */
6388311SSukumar.Swaminathan@Sun.COM #define	RH_RISC_PAUSED		BIT_8		/* RISC Paused bit. */
6398311SSukumar.Swaminathan@Sun.COM 
6408311SSukumar.Swaminathan@Sun.COM /*
6418311SSukumar.Swaminathan@Sun.COM  * RISC to Host Status register status field definitions.
6428311SSukumar.Swaminathan@Sun.COM  */
6438311SSukumar.Swaminathan@Sun.COM #define	ROM_MBX_SUCCESS		0x01
6448311SSukumar.Swaminathan@Sun.COM #define	ROM_MBX_ERR		0x02
6458311SSukumar.Swaminathan@Sun.COM #define	MBX_SUCCESS		0x10
6468311SSukumar.Swaminathan@Sun.COM #define	MBX_ERR			0x11
6478311SSukumar.Swaminathan@Sun.COM #define	ASYNC_EVENT		0x12
6488311SSukumar.Swaminathan@Sun.COM #define	RESP_UPDATE		0x13
6498311SSukumar.Swaminathan@Sun.COM #define	REQ_UPDATE		0x14
6508311SSukumar.Swaminathan@Sun.COM #define	SCSI_FAST_POST_16	0x15
6518311SSukumar.Swaminathan@Sun.COM #define	SCSI_FAST_POST_32	0x16
6528311SSukumar.Swaminathan@Sun.COM #define	CTIO_FAST_POST		0x17
6538311SSukumar.Swaminathan@Sun.COM #define	IP_FAST_POST_XMT	0x18
6548311SSukumar.Swaminathan@Sun.COM #define	IP_FAST_POST_RCV	0x19
6558311SSukumar.Swaminathan@Sun.COM #define	IP_FAST_POST_BRD	0x1a
6568311SSukumar.Swaminathan@Sun.COM #define	IP_FAST_POST_RCV_ALN	0x1b
6578311SSukumar.Swaminathan@Sun.COM #define	ATIO_UPDATE		0x1c
6588311SSukumar.Swaminathan@Sun.COM #define	ATIO_RESP_UPDATE	0x1d
6598311SSukumar.Swaminathan@Sun.COM 
6608311SSukumar.Swaminathan@Sun.COM /*
6618311SSukumar.Swaminathan@Sun.COM  * HCCR commands.
6628311SSukumar.Swaminathan@Sun.COM  */
6638311SSukumar.Swaminathan@Sun.COM #define	HC_RESET_RISC		0x1000	/* Reset RISC */
6648311SSukumar.Swaminathan@Sun.COM #define	HC_PAUSE_RISC		0x2000	/* Pause RISC */
6658311SSukumar.Swaminathan@Sun.COM #define	HC_RELEASE_RISC		0x3000	/* Release RISC from reset. */
6668311SSukumar.Swaminathan@Sun.COM #define	HC_DISABLE_PARITY_PAUSE	0x4001	/* qla2200/2300 - disable parity err */
6678311SSukumar.Swaminathan@Sun.COM 					/* RISC pause. */
6688311SSukumar.Swaminathan@Sun.COM #define	HC_SET_HOST_INT		0x5000	/* Set host interrupt */
6698311SSukumar.Swaminathan@Sun.COM #define	HC_CLR_HOST_INT		0x6000	/* Clear HOST interrupt */
6708311SSukumar.Swaminathan@Sun.COM #define	HC_CLR_RISC_INT		0x7000	/* Clear RISC interrupt */
6718311SSukumar.Swaminathan@Sun.COM #define	HC_HOST_INT		BIT_7	/* Host interrupt bit */
6728311SSukumar.Swaminathan@Sun.COM #define	HC_RISC_PAUSE		BIT_5	/* Pause mode bit */
6738311SSukumar.Swaminathan@Sun.COM 
6748311SSukumar.Swaminathan@Sun.COM /*
6758311SSukumar.Swaminathan@Sun.COM  * HCCR commands for 24xx and 25xx.
6768311SSukumar.Swaminathan@Sun.COM  */
6778311SSukumar.Swaminathan@Sun.COM #define	HC24_RESET_RISC		0x10000000	/* Reset RISC */
6788311SSukumar.Swaminathan@Sun.COM #define	HC24_CLEAR_RISC_RESET	0x20000000	/* Release RISC from reset. */
6798311SSukumar.Swaminathan@Sun.COM #define	HC24_PAUSE_RISC		0x30000000	/* Pause RISC */
6808311SSukumar.Swaminathan@Sun.COM #define	HC24_RELEASE_PAUSE	0x40000000	/* Release RISC from pause */
6818311SSukumar.Swaminathan@Sun.COM #define	HC24_SET_HOST_INT	0x50000000	/* Set host interrupt */
6828311SSukumar.Swaminathan@Sun.COM #define	HC24_CLR_HOST_INT	0x60000000	/* Clear HOST interrupt */
6838311SSukumar.Swaminathan@Sun.COM #define	HC24_CLR_RISC_INT	0xA0000000	/* Clear RISC interrupt */
6848311SSukumar.Swaminathan@Sun.COM #define	HC24_HOST_INT		BIT_6		/* Host to RISC intrpt bit */
6858311SSukumar.Swaminathan@Sun.COM #define	HC24_RISC_RESET		BIT_5		/* RISC Reset mode bit. */
6868311SSukumar.Swaminathan@Sun.COM 
6878311SSukumar.Swaminathan@Sun.COM /*
6888311SSukumar.Swaminathan@Sun.COM  * ISP Initialization Control Blocks.
6898311SSukumar.Swaminathan@Sun.COM  * Little endian except where noted.
6908311SSukumar.Swaminathan@Sun.COM  */
6918311SSukumar.Swaminathan@Sun.COM #define	ICB_VERSION		1
6928311SSukumar.Swaminathan@Sun.COM typedef struct ql_init_cb {
6938311SSukumar.Swaminathan@Sun.COM 	uint8_t  version;
6948311SSukumar.Swaminathan@Sun.COM 	uint8_t  reserved;
6958311SSukumar.Swaminathan@Sun.COM 
6968311SSukumar.Swaminathan@Sun.COM 	/*
6978311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 0  = enable_hard_loop_id
6988311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 1  = enable_fairness
6998311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 2  = enable_full_duplex
7008311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 3  = enable_fast_posting
7018311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 4  = enable_target_mode
7028311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 5  = disable_initiator_mode
7038311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 6  = enable_adisc
7048311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 7  = enable_target_inquiry_data
7058311SSukumar.Swaminathan@Sun.COM 	 *
7068311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 0  = enable_port_update_ae
7078311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 1  = disable_initial_lip
7088311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 2  = enable_decending_soft_assign
7098311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 3  = previous_assigned_addressing
7108311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 4  = enable_stop_q_on_full
7118311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 5  = enable_full_login_on_lip
7128311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 6  = enable_node_name
7138311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 7  = extended_control_block
7148311SSukumar.Swaminathan@Sun.COM 	 */
7158311SSukumar.Swaminathan@Sun.COM 	uint8_t firmware_options[2];
7168311SSukumar.Swaminathan@Sun.COM 
7178311SSukumar.Swaminathan@Sun.COM 	uint8_t max_frame_length[2];
7188311SSukumar.Swaminathan@Sun.COM 	uint8_t max_iocb_allocation[2];
7198311SSukumar.Swaminathan@Sun.COM 	uint8_t execution_throttle[2];
7208311SSukumar.Swaminathan@Sun.COM 	uint8_t login_retry_count;
7218311SSukumar.Swaminathan@Sun.COM 	uint8_t retry_delay;			/* unused */
7228311SSukumar.Swaminathan@Sun.COM 	uint8_t port_name[8];			/* Big endian. */
7238311SSukumar.Swaminathan@Sun.COM 	uint8_t hard_address[2];		/* option bit 0 */
7248311SSukumar.Swaminathan@Sun.COM 	uint8_t inquiry;			/* option bit 7 */
7258311SSukumar.Swaminathan@Sun.COM 	uint8_t login_timeout;
7268311SSukumar.Swaminathan@Sun.COM 	uint8_t node_name[8];			/* Big endian */
7278311SSukumar.Swaminathan@Sun.COM 	uint8_t request_q_outpointer[2];
7288311SSukumar.Swaminathan@Sun.COM 	uint8_t response_q_inpointer[2];
7298311SSukumar.Swaminathan@Sun.COM 	uint8_t request_q_length[2];
7308311SSukumar.Swaminathan@Sun.COM 	uint8_t response_q_length[2];
7318311SSukumar.Swaminathan@Sun.COM 	uint8_t request_q_address[8];
7328311SSukumar.Swaminathan@Sun.COM 	uint8_t response_q_address[8];
7338311SSukumar.Swaminathan@Sun.COM 	uint8_t lun_enables[2];
7348311SSukumar.Swaminathan@Sun.COM 	uint8_t command_resouce_count;
7358311SSukumar.Swaminathan@Sun.COM 	uint8_t immediate_notify_resouce_count;
7368311SSukumar.Swaminathan@Sun.COM 	uint8_t timeout[2];
7378311SSukumar.Swaminathan@Sun.COM 	uint8_t reserved_2[2];
7388311SSukumar.Swaminathan@Sun.COM 
7398311SSukumar.Swaminathan@Sun.COM 	/*
7408311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 0 = Timer operation mode bit 0
7418311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 1 = Timer operation mode bit 1
7428311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 2 = Timer operation mode bit 2
7438311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 3 = Timer operation mode bit 3
7448311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 4 = P2P Connection option bit 0
7458311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 5 = P2P Connection option bit 1
7468311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 6 = P2P Connection option bit 2
7478311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 7 = Enable Non part on LIHA failure
7488311SSukumar.Swaminathan@Sun.COM 	 *
7498311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 0 = Enable class 2
7508311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 1 = Enable ACK0
7518311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 2 =
7528311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 3 =
7538311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 4 = FC Tape Enable
7548311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 5 = Enable FC Confirm
7558311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 6 = Enable CRN
7568311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 7 =
7578311SSukumar.Swaminathan@Sun.COM 	 */
7588311SSukumar.Swaminathan@Sun.COM 	uint8_t  add_fw_opt[2];
7598311SSukumar.Swaminathan@Sun.COM 
7608311SSukumar.Swaminathan@Sun.COM 	uint8_t  response_accumulation_timer;
7618311SSukumar.Swaminathan@Sun.COM 	uint8_t  interrupt_delay_timer;
7628311SSukumar.Swaminathan@Sun.COM 
7638311SSukumar.Swaminathan@Sun.COM 	/*
7648311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 0 = Enable Read xfr_rdy
7658311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 1 = Soft ID only
7668311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 2 =
7678311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 3 =
7688311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 4 = FCP RSP Payload [0]
7698311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 5 = FCP RSP Payload [1] / Sbus enable - 2200
7708311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 6 =
7718311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 7 =
7728311SSukumar.Swaminathan@Sun.COM 	 *
7738311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 0 = Sbus enable - 2300
7748311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 1 =
7758311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 2 =
7768311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 3 =
7778311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 4 =
7788311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 5 = enable 50 ohm termination
7798311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 6 = Data Rate (2300 only)
7808311SSukumar.Swaminathan@Sun.COM 	 * MSB BIT 7 = Data Rate (2300 only)
7818311SSukumar.Swaminathan@Sun.COM 	 */
7828311SSukumar.Swaminathan@Sun.COM 	uint8_t  special_options[2];
7838311SSukumar.Swaminathan@Sun.COM 
7848311SSukumar.Swaminathan@Sun.COM 	uint8_t  reserved_3[26];
7858311SSukumar.Swaminathan@Sun.COM } ql_init_cb_t;
7869446SDaniel.Beauregard@Sun.COM 
7878311SSukumar.Swaminathan@Sun.COM /*
7888311SSukumar.Swaminathan@Sun.COM  * Virtual port definition.
7898311SSukumar.Swaminathan@Sun.COM  */
7908311SSukumar.Swaminathan@Sun.COM typedef struct ql_vp_cfg {
7918311SSukumar.Swaminathan@Sun.COM 	uint8_t  reserved[2];
7928311SSukumar.Swaminathan@Sun.COM 	uint8_t  options;
7938311SSukumar.Swaminathan@Sun.COM 	uint8_t  hard_prev_addr;
7948311SSukumar.Swaminathan@Sun.COM 	uint8_t  port_name[8];
7958311SSukumar.Swaminathan@Sun.COM 	uint8_t  node_name[8];
7968311SSukumar.Swaminathan@Sun.COM } ql_vp_cfg_t;
7978311SSukumar.Swaminathan@Sun.COM 
7988311SSukumar.Swaminathan@Sun.COM /*
7998311SSukumar.Swaminathan@Sun.COM  * VP options.
8008311SSukumar.Swaminathan@Sun.COM  */
8019611SDaniel.Beauregard@Sun.COM #define	VPO_ENABLE_SNS_LOGIN_SCR	BIT_6
8028311SSukumar.Swaminathan@Sun.COM #define	VPO_TARGET_MODE_DISABLED	BIT_5
8038311SSukumar.Swaminathan@Sun.COM #define	VPO_INITIATOR_MODE_ENABLED	BIT_4
8048311SSukumar.Swaminathan@Sun.COM #define	VPO_ENABLED			BIT_3
8058311SSukumar.Swaminathan@Sun.COM #define	VPO_ID_NOT_ACQUIRED		BIT_2
8068311SSukumar.Swaminathan@Sun.COM #define	VPO_PREVIOUSLY_ASSIGNED_ID	BIT_1
8078311SSukumar.Swaminathan@Sun.COM #define	VPO_HARD_ASSIGNED_ID		BIT_0
8088311SSukumar.Swaminathan@Sun.COM 
8098311SSukumar.Swaminathan@Sun.COM #define	ICB_24XX_VERSION	1
8108311SSukumar.Swaminathan@Sun.COM typedef struct ql_init_24xx_cb {
8118311SSukumar.Swaminathan@Sun.COM 	uint8_t version[2];
8128311SSukumar.Swaminathan@Sun.COM 	uint8_t reserved_1[2];
8138311SSukumar.Swaminathan@Sun.COM 	uint8_t max_frame_length[2];
8148311SSukumar.Swaminathan@Sun.COM 	uint8_t execution_throttle[2];
8158311SSukumar.Swaminathan@Sun.COM 	uint8_t exchange_count[2];
8168311SSukumar.Swaminathan@Sun.COM 	uint8_t hard_address[2];
8178311SSukumar.Swaminathan@Sun.COM 	uint8_t port_name[8];	/* Big endian. */
8188311SSukumar.Swaminathan@Sun.COM 	uint8_t node_name[8];	/* Big endian. */
8198311SSukumar.Swaminathan@Sun.COM 
8208311SSukumar.Swaminathan@Sun.COM 	uint8_t response_q_inpointer[2];
8218311SSukumar.Swaminathan@Sun.COM 	uint8_t request_q_outpointer[2];
8228311SSukumar.Swaminathan@Sun.COM 
8238311SSukumar.Swaminathan@Sun.COM 	uint8_t login_retry_count[2];
8248311SSukumar.Swaminathan@Sun.COM 
8258311SSukumar.Swaminathan@Sun.COM 	uint8_t prio_request_q_outpointer[2];
8268311SSukumar.Swaminathan@Sun.COM 
8278311SSukumar.Swaminathan@Sun.COM 	uint8_t response_q_length[2];
8288311SSukumar.Swaminathan@Sun.COM 	uint8_t request_q_length[2];
8298311SSukumar.Swaminathan@Sun.COM 
8308311SSukumar.Swaminathan@Sun.COM 	uint8_t link_down_on_nos[2];
8318311SSukumar.Swaminathan@Sun.COM 
8328311SSukumar.Swaminathan@Sun.COM 	uint8_t prio_request_q_length[2];
8338311SSukumar.Swaminathan@Sun.COM 	uint8_t request_q_address[8];
8348311SSukumar.Swaminathan@Sun.COM 	uint8_t response_q_address[8];
8358311SSukumar.Swaminathan@Sun.COM 	uint8_t prio_request_q_address[8];
8369446SDaniel.Beauregard@Sun.COM 	uint8_t msi_x_vector[2];
8379446SDaniel.Beauregard@Sun.COM 	uint8_t reserved_2[6];
8388311SSukumar.Swaminathan@Sun.COM 	uint8_t atio_q_inpointer[2];
8398311SSukumar.Swaminathan@Sun.COM 	uint8_t atio_q_length[2];
8408311SSukumar.Swaminathan@Sun.COM 	uint8_t atio_q_address[8];
8418311SSukumar.Swaminathan@Sun.COM 
8428311SSukumar.Swaminathan@Sun.COM 	uint8_t interrupt_delay_timer[2];	/* 100us per */
8438311SSukumar.Swaminathan@Sun.COM 	uint8_t login_timeout[2];
8448311SSukumar.Swaminathan@Sun.COM 	/*
8458311SSukumar.Swaminathan@Sun.COM 	 * BIT 0  = Hard Assigned Loop ID
8468311SSukumar.Swaminathan@Sun.COM 	 * BIT 1  = Enable Fairness
8478311SSukumar.Swaminathan@Sun.COM 	 * BIT 2  = Enable Full-Duplex
8488311SSukumar.Swaminathan@Sun.COM 	 * BIT 3  = Reserved
8498311SSukumar.Swaminathan@Sun.COM 	 * BIT 4  = Target Mode Enable
8508311SSukumar.Swaminathan@Sun.COM 	 * BIT 5  = Initiator Mode Disable
8518311SSukumar.Swaminathan@Sun.COM 	 * BIT 6  = Reserved
8528311SSukumar.Swaminathan@Sun.COM 	 * BIT 7  = Reserved
8538311SSukumar.Swaminathan@Sun.COM 	 *
8548311SSukumar.Swaminathan@Sun.COM 	 * BIT 8  = Reserved
8558311SSukumar.Swaminathan@Sun.COM 	 * BIT 9  = Disable Initial LIP
8568311SSukumar.Swaminathan@Sun.COM 	 * BIT 10 = Descending Loop ID Search
8578311SSukumar.Swaminathan@Sun.COM 	 * BIT 11 = Previous Assigned Loop ID
8588311SSukumar.Swaminathan@Sun.COM 	 * BIT 12 = Reserved
8598311SSukumar.Swaminathan@Sun.COM 	 * BIT 13 = Full Login after LIP
8608311SSukumar.Swaminathan@Sun.COM 	 * BIT 14 = Node Name Option
8618311SSukumar.Swaminathan@Sun.COM 	 * BIT 15-31 = Reserved
8628311SSukumar.Swaminathan@Sun.COM 	 */
8638311SSukumar.Swaminathan@Sun.COM 	uint8_t  firmware_options_1[4];
8648311SSukumar.Swaminathan@Sun.COM 
8658311SSukumar.Swaminathan@Sun.COM 	/*
8668311SSukumar.Swaminathan@Sun.COM 	 * BIT 0  = Operation Mode bit 0
8678311SSukumar.Swaminathan@Sun.COM 	 * BIT 1  = Operation Mode bit 1
8688311SSukumar.Swaminathan@Sun.COM 	 * BIT 2  = Operation Mode bit 2
8698311SSukumar.Swaminathan@Sun.COM 	 * BIT 3  = Operation Mode bit 3
8708311SSukumar.Swaminathan@Sun.COM 	 * BIT 4  = Connection Options bit 0
8718311SSukumar.Swaminathan@Sun.COM 	 * BIT 5  = Connection Options bit 1
8728311SSukumar.Swaminathan@Sun.COM 	 * BIT 6  = Connection Options bit 2
8738311SSukumar.Swaminathan@Sun.COM 	 * BIT 7  = Enable Non part on LIHA failure
8748311SSukumar.Swaminathan@Sun.COM 	 *
8758311SSukumar.Swaminathan@Sun.COM 	 * BIT 8  = Enable Class 2
8768311SSukumar.Swaminathan@Sun.COM 	 * BIT 9  = Enable ACK0
8778311SSukumar.Swaminathan@Sun.COM 	 * BIT 10 = Reserved
8788311SSukumar.Swaminathan@Sun.COM 	 * BIT 11 = Enable FC-SP Security
8798311SSukumar.Swaminathan@Sun.COM 	 * BIT 12 = FC Tape Enable
8809446SDaniel.Beauregard@Sun.COM 	 * BIT 13 = Reserved
8819446SDaniel.Beauregard@Sun.COM 	 * BIT 14 = Target PRLI Control
8829446SDaniel.Beauregard@Sun.COM 	 * BIT 15 = Reserved
8839446SDaniel.Beauregard@Sun.COM 	 *
8849446SDaniel.Beauregard@Sun.COM 	 * BIT 16  = Enable Emulated MSIX
8859446SDaniel.Beauregard@Sun.COM 	 * BIT 17  = Reserved
8869446SDaniel.Beauregard@Sun.COM 	 * BIT 18  = Enable Alternate Device Number
8879446SDaniel.Beauregard@Sun.COM 	 * BIT 19  = Enable Alternate Bus Number
8889446SDaniel.Beauregard@Sun.COM 	 * BIT 20  = Enable Translated Address
8899446SDaniel.Beauregard@Sun.COM 	 * BIT 21  = Enable VM Security
8909446SDaniel.Beauregard@Sun.COM 	 * BIT 22  = Enable Interrupt Handshake
8919446SDaniel.Beauregard@Sun.COM 	 * BIT 23  = Enable Multiple Queue
8929446SDaniel.Beauregard@Sun.COM 	 *
8939446SDaniel.Beauregard@Sun.COM 	 * BIT 24  = IOCB Security
8949446SDaniel.Beauregard@Sun.COM 	 * BIT 25  = qos
8959446SDaniel.Beauregard@Sun.COM 	 * BIT 26-31 = Reserved
8968311SSukumar.Swaminathan@Sun.COM 	 */
8978311SSukumar.Swaminathan@Sun.COM 	uint8_t firmware_options_2[4];
8988311SSukumar.Swaminathan@Sun.COM 
8998311SSukumar.Swaminathan@Sun.COM 	/*
9008311SSukumar.Swaminathan@Sun.COM 	 * BIT 0  = Reserved
9018311SSukumar.Swaminathan@Sun.COM 	 * BIT 1  = Soft ID only
9028311SSukumar.Swaminathan@Sun.COM 	 * BIT 2  = Reserved
9038311SSukumar.Swaminathan@Sun.COM 	 * BIT 3  = Reserved
9048311SSukumar.Swaminathan@Sun.COM 	 * BIT 4  = FCP RSP Payload bit 0
9058311SSukumar.Swaminathan@Sun.COM 	 * BIT 5  = FCP RSP Payload bit 1
9068311SSukumar.Swaminathan@Sun.COM 	 * BIT 6  = Enable Rec Out-of-Order data frame handling
9078311SSukumar.Swaminathan@Sun.COM 	 * BIT 7  = Disable Automatic PLOGI on Local Loop
9088311SSukumar.Swaminathan@Sun.COM 	 *
9098311SSukumar.Swaminathan@Sun.COM 	 * BIT 8  = Reserved
9108311SSukumar.Swaminathan@Sun.COM 	 * BIT 9  = Enable Out-of-Order FCP_XFER_RDY relative
9118311SSukumar.Swaminathan@Sun.COM 	 *	    offset handling
9128311SSukumar.Swaminathan@Sun.COM 	 * BIT 10 = Reserved
9138311SSukumar.Swaminathan@Sun.COM 	 * BIT 11 = Reserved
9148311SSukumar.Swaminathan@Sun.COM 	 * BIT 12 = Reserved
9158311SSukumar.Swaminathan@Sun.COM 	 * BIT 13 = Data Rate bit 0
9168311SSukumar.Swaminathan@Sun.COM 	 * BIT 14 = Data Rate bit 1
9178311SSukumar.Swaminathan@Sun.COM 	 * BIT 15 = Data Rate bit 2
9189446SDaniel.Beauregard@Sun.COM 	 *
9198311SSukumar.Swaminathan@Sun.COM 	 * BIT 16 = 75-ohm Termination Select
9209446SDaniel.Beauregard@Sun.COM 	 * BIT 17 = Enable Multiple FCFs
9219446SDaniel.Beauregard@Sun.COM 	 * BIT 18 = MAC Addressing Mode
9229446SDaniel.Beauregard@Sun.COM 	 * BIT 19 = MAC Addressing Mode
9239446SDaniel.Beauregard@Sun.COM 	 * BIT 20 = MAC Addressing Mode
9249446SDaniel.Beauregard@Sun.COM 	 * BIT 21 = Ethernet Data Rate
9259446SDaniel.Beauregard@Sun.COM 	 * BIT 22 = Ethernet Data Rate
9269446SDaniel.Beauregard@Sun.COM 	 * BIT 23 = Ethernet Data Rate
9279446SDaniel.Beauregard@Sun.COM 	 *
9289446SDaniel.Beauregard@Sun.COM 	 * BIT 24 = Ethernet Data Rate
9299446SDaniel.Beauregard@Sun.COM 	 * BIT 25 = Ethernet Data Rate
9309446SDaniel.Beauregard@Sun.COM 	 * BIT 26 = Enable Ethernet Header ATIO Queue
9319446SDaniel.Beauregard@Sun.COM 	 * BIT 27 = Enable Ethernet Header Response Queue
9329446SDaniel.Beauregard@Sun.COM 	 * BIT 28 = SPMA Selection
9339446SDaniel.Beauregard@Sun.COM 	 * BIT 29 = SPMA Selection
9349446SDaniel.Beauregard@Sun.COM 	 * BIT 30 = Reserved
9359446SDaniel.Beauregard@Sun.COM 	 * BIT 31 = Reserved
9368311SSukumar.Swaminathan@Sun.COM 	 */
9378311SSukumar.Swaminathan@Sun.COM 	uint8_t firmware_options_3[4];
9388311SSukumar.Swaminathan@Sun.COM 
9399446SDaniel.Beauregard@Sun.COM 	uint8_t  qos[2];
9409446SDaniel.Beauregard@Sun.COM 	uint8_t  rid[2];
9419446SDaniel.Beauregard@Sun.COM 
9429446SDaniel.Beauregard@Sun.COM 	uint8_t  reserved_3[4];
9439446SDaniel.Beauregard@Sun.COM 
9449446SDaniel.Beauregard@Sun.COM 	uint8_t  enode_mac_addr[6];
9459446SDaniel.Beauregard@Sun.COM 
9469446SDaniel.Beauregard@Sun.COM 	uint8_t  reserved_4[10];
9478311SSukumar.Swaminathan@Sun.COM 
9488311SSukumar.Swaminathan@Sun.COM 	/*
9498311SSukumar.Swaminathan@Sun.COM 	 * Multi-ID firmware.
9508311SSukumar.Swaminathan@Sun.COM 	 */
9518311SSukumar.Swaminathan@Sun.COM 	uint8_t		vp_count[2];
9528311SSukumar.Swaminathan@Sun.COM 
9538311SSukumar.Swaminathan@Sun.COM 	/*
9548311SSukumar.Swaminathan@Sun.COM 	 * BIT 1  = Allows mode 2 connection option
9558311SSukumar.Swaminathan@Sun.COM 	 */
9568311SSukumar.Swaminathan@Sun.COM 	uint8_t		global_vp_option[2];
9578311SSukumar.Swaminathan@Sun.COM 
9589446SDaniel.Beauregard@Sun.COM 	ql_vp_cfg_t	vpc[MAX_25_VIRTUAL_PORTS + 1];
9599446SDaniel.Beauregard@Sun.COM 
9609446SDaniel.Beauregard@Sun.COM 	/*
9619446SDaniel.Beauregard@Sun.COM 	 * Extended Initialization Control Block
9629446SDaniel.Beauregard@Sun.COM 	 */
9639446SDaniel.Beauregard@Sun.COM 	ql_ext_icb_8100_t	ext_blk;
9648311SSukumar.Swaminathan@Sun.COM } ql_init_24xx_cb_t;
9658311SSukumar.Swaminathan@Sun.COM 
9668311SSukumar.Swaminathan@Sun.COM typedef union ql_comb_init_cb {
9678311SSukumar.Swaminathan@Sun.COM 	ql_init_cb_t		cb;
9688311SSukumar.Swaminathan@Sun.COM 	ql_init_24xx_cb_t	cb24;
9698311SSukumar.Swaminathan@Sun.COM } ql_comb_init_cb_t;
9708311SSukumar.Swaminathan@Sun.COM 
9718311SSukumar.Swaminathan@Sun.COM /*
9728311SSukumar.Swaminathan@Sun.COM  * ISP IP Initialization Control Block.
9738311SSukumar.Swaminathan@Sun.COM  * Little endian except where noted.
9748311SSukumar.Swaminathan@Sun.COM  */
9758311SSukumar.Swaminathan@Sun.COM #define	IP_ICB_VERSION	1
9768311SSukumar.Swaminathan@Sun.COM typedef struct ql_ip_init_cb {
9778311SSukumar.Swaminathan@Sun.COM 	uint8_t  version;
9788311SSukumar.Swaminathan@Sun.COM 	uint8_t  reserved;
9798311SSukumar.Swaminathan@Sun.COM 
9808311SSukumar.Swaminathan@Sun.COM 	/*
9818311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 0  = receive_buffer_address_length
9828311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 1  = fast post broadcast received
9838311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 2  = allow out of receive buffers AE
9848311SSukumar.Swaminathan@Sun.COM 	 */
9858311SSukumar.Swaminathan@Sun.COM 	uint8_t ip_firmware_options[2];
9868311SSukumar.Swaminathan@Sun.COM 	uint8_t ip_header_size[2];
9878311SSukumar.Swaminathan@Sun.COM 	uint8_t mtu_size[2];			/* max value is 65280 */
9888311SSukumar.Swaminathan@Sun.COM 	uint8_t buf_size[2];
9898311SSukumar.Swaminathan@Sun.COM 	uint8_t reserved_1[8];
9908311SSukumar.Swaminathan@Sun.COM 	uint8_t queue_size[2];			/* 8-1024 */
9918311SSukumar.Swaminathan@Sun.COM 	uint8_t low_water_mark[2];
9928311SSukumar.Swaminathan@Sun.COM 	uint8_t queue_address[8];
9938311SSukumar.Swaminathan@Sun.COM 	uint8_t queue_inpointer[2];
9948311SSukumar.Swaminathan@Sun.COM 	uint8_t fast_post_reg_count[2];		/* 0-14 */
9958311SSukumar.Swaminathan@Sun.COM 	uint8_t cc[2];
9968311SSukumar.Swaminathan@Sun.COM 	uint8_t reserved_2[28];
9978311SSukumar.Swaminathan@Sun.COM } ql_ip_init_cb_t;
9988311SSukumar.Swaminathan@Sun.COM 
9998311SSukumar.Swaminathan@Sun.COM #define	IP_ICB_24XX_VERSION	1
10008311SSukumar.Swaminathan@Sun.COM typedef struct ql_ip_init_24xx_cb {
10018311SSukumar.Swaminathan@Sun.COM 	uint8_t  version;
10028311SSukumar.Swaminathan@Sun.COM 	uint8_t  reserved;
10038311SSukumar.Swaminathan@Sun.COM 	/*
10048311SSukumar.Swaminathan@Sun.COM 	 * LSB BIT 2  = allow out of receive buffers AE
10058311SSukumar.Swaminathan@Sun.COM 	 */
10068311SSukumar.Swaminathan@Sun.COM 	uint8_t ip_firmware_options[2];
10078311SSukumar.Swaminathan@Sun.COM 	uint8_t ip_header_size[2];
10088311SSukumar.Swaminathan@Sun.COM 	uint8_t mtu_size[2];
10098311SSukumar.Swaminathan@Sun.COM 	uint8_t buf_size[2];
10108311SSukumar.Swaminathan@Sun.COM 	uint8_t reserved_1[10];
10118311SSukumar.Swaminathan@Sun.COM 	uint8_t low_water_mark[2];
10128311SSukumar.Swaminathan@Sun.COM 	uint8_t reserved_3[12];
10138311SSukumar.Swaminathan@Sun.COM 	uint8_t cc[2];
10148311SSukumar.Swaminathan@Sun.COM 	uint8_t reserved_2[28];
10158311SSukumar.Swaminathan@Sun.COM } ql_ip_init_24xx_cb_t;
10168311SSukumar.Swaminathan@Sun.COM 
10178311SSukumar.Swaminathan@Sun.COM typedef union ql_comb_ip_init_cb {
10188311SSukumar.Swaminathan@Sun.COM 	ql_ip_init_cb_t		cb;
10198311SSukumar.Swaminathan@Sun.COM 	ql_ip_init_24xx_cb_t	cb24;
10208311SSukumar.Swaminathan@Sun.COM } ql_comb_ip_init_cb_t;
10218311SSukumar.Swaminathan@Sun.COM 
10228311SSukumar.Swaminathan@Sun.COM /*
10238311SSukumar.Swaminathan@Sun.COM  * f/w module table
10248311SSukumar.Swaminathan@Sun.COM  */
10258311SSukumar.Swaminathan@Sun.COM struct fw_table {
10268311SSukumar.Swaminathan@Sun.COM 	uint16_t	fw_class;
10278311SSukumar.Swaminathan@Sun.COM 	int8_t		*fw_version;
10288311SSukumar.Swaminathan@Sun.COM };
10298311SSukumar.Swaminathan@Sun.COM 
10308311SSukumar.Swaminathan@Sun.COM /*
10318311SSukumar.Swaminathan@Sun.COM  * aif function table
10328311SSukumar.Swaminathan@Sun.COM  */
10338311SSukumar.Swaminathan@Sun.COM typedef struct ql_ifunc {
10348311SSukumar.Swaminathan@Sun.COM 	uint_t		(*ifunc)();
10358311SSukumar.Swaminathan@Sun.COM } ql_ifunc_t;
10368311SSukumar.Swaminathan@Sun.COM 
10378311SSukumar.Swaminathan@Sun.COM #define	QL_MSIX_AIF		0x0
10388311SSukumar.Swaminathan@Sun.COM #define	QL_MSIX_RSPQ		0x1
10398311SSukumar.Swaminathan@Sun.COM #define	QL_MSIX_MAXAIF		QL_MSIX_RSPQ + 1
10408311SSukumar.Swaminathan@Sun.COM 
10418311SSukumar.Swaminathan@Sun.COM /*
10428311SSukumar.Swaminathan@Sun.COM  * DMA memory type.
10438311SSukumar.Swaminathan@Sun.COM  */
10448311SSukumar.Swaminathan@Sun.COM typedef enum mem_alloc_type {
10458311SSukumar.Swaminathan@Sun.COM 	UNKNOWN_MEMORY,
10468311SSukumar.Swaminathan@Sun.COM 	TASK_MEMORY,
10478311SSukumar.Swaminathan@Sun.COM 	LITTLE_ENDIAN_DMA,
10488311SSukumar.Swaminathan@Sun.COM 	BIG_ENDIAN_DMA,
10498311SSukumar.Swaminathan@Sun.COM 	KERNEL_MEM,
10508311SSukumar.Swaminathan@Sun.COM 	NO_SWAP_DMA,
10518311SSukumar.Swaminathan@Sun.COM 	STRUCT_BUF_MEMORY
10528311SSukumar.Swaminathan@Sun.COM } mem_alloc_type_t;
10538311SSukumar.Swaminathan@Sun.COM 
10548311SSukumar.Swaminathan@Sun.COM /*
10558311SSukumar.Swaminathan@Sun.COM  * DMA memory alignment type.
10568311SSukumar.Swaminathan@Sun.COM  */
10578311SSukumar.Swaminathan@Sun.COM typedef enum men_align_type {
10589156SDaniel.Beauregard@Sun.COM 	QL_DMA_DATA_ALIGN,
10599156SDaniel.Beauregard@Sun.COM 	QL_DMA_RING_ALIGN,
10608311SSukumar.Swaminathan@Sun.COM } mem_alignment_t;
10618311SSukumar.Swaminathan@Sun.COM 
10628311SSukumar.Swaminathan@Sun.COM /*
10638311SSukumar.Swaminathan@Sun.COM  * DMA memory object.
10648311SSukumar.Swaminathan@Sun.COM  */
10658311SSukumar.Swaminathan@Sun.COM typedef struct dma_mem {
10668311SSukumar.Swaminathan@Sun.COM 	uint64_t		alignment;
10678311SSukumar.Swaminathan@Sun.COM 	void			*bp;
10688311SSukumar.Swaminathan@Sun.COM 	ddi_dma_cookie_t	*cookies;
10698311SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t	acc_handle;
10708311SSukumar.Swaminathan@Sun.COM 	ddi_dma_handle_t	dma_handle;
10718311SSukumar.Swaminathan@Sun.COM 	ddi_dma_cookie_t	cookie;
10728311SSukumar.Swaminathan@Sun.COM 	uint32_t		cookie_count;
10738311SSukumar.Swaminathan@Sun.COM 	uint32_t		size;
10748311SSukumar.Swaminathan@Sun.COM 	uint32_t		memflags;
10758311SSukumar.Swaminathan@Sun.COM 	mem_alloc_type_t	type;
10768311SSukumar.Swaminathan@Sun.COM 	uint32_t		flags;		/* Solaris DMA flags. */
10778311SSukumar.Swaminathan@Sun.COM } dma_mem_t;
10788311SSukumar.Swaminathan@Sun.COM 
10798311SSukumar.Swaminathan@Sun.COM /*
10808311SSukumar.Swaminathan@Sun.COM  * dma_mem_t memflags defines
10818311SSukumar.Swaminathan@Sun.COM  */
10828311SSukumar.Swaminathan@Sun.COM #define	MFLG_32BIT_ONLY		BIT_0
10838311SSukumar.Swaminathan@Sun.COM 
10848311SSukumar.Swaminathan@Sun.COM /*
10858311SSukumar.Swaminathan@Sun.COM  * 24 bit port ID type definition.
10868311SSukumar.Swaminathan@Sun.COM  */
10878311SSukumar.Swaminathan@Sun.COM typedef union {
10888311SSukumar.Swaminathan@Sun.COM 	struct {
10898311SSukumar.Swaminathan@Sun.COM 		uint8_t d_id[3];
10908311SSukumar.Swaminathan@Sun.COM 		uint8_t rsvd_1;
10918311SSukumar.Swaminathan@Sun.COM 	}r;
10928311SSukumar.Swaminathan@Sun.COM 
10938311SSukumar.Swaminathan@Sun.COM 	uint32_t	b24 : 24;
10948311SSukumar.Swaminathan@Sun.COM 
10958311SSukumar.Swaminathan@Sun.COM #if defined(_BIT_FIELDS_LTOH)
10968311SSukumar.Swaminathan@Sun.COM 	struct {
10978311SSukumar.Swaminathan@Sun.COM 		uint8_t al_pa;
10988311SSukumar.Swaminathan@Sun.COM 		uint8_t area;
10998311SSukumar.Swaminathan@Sun.COM 		uint8_t domain;
11008311SSukumar.Swaminathan@Sun.COM 		uint8_t rsvd_1;
11018311SSukumar.Swaminathan@Sun.COM 	}b;
11028311SSukumar.Swaminathan@Sun.COM #elif defined(_BIT_FIELDS_HTOL)
11038311SSukumar.Swaminathan@Sun.COM 	struct {
11048311SSukumar.Swaminathan@Sun.COM 		uint8_t domain;
11058311SSukumar.Swaminathan@Sun.COM 		uint8_t area;
11068311SSukumar.Swaminathan@Sun.COM 		uint8_t al_pa;
11078311SSukumar.Swaminathan@Sun.COM 		uint8_t rsvd_1;
11088311SSukumar.Swaminathan@Sun.COM 	}b;
11098311SSukumar.Swaminathan@Sun.COM #else
11108311SSukumar.Swaminathan@Sun.COM #error  One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
11118311SSukumar.Swaminathan@Sun.COM #endif
11128311SSukumar.Swaminathan@Sun.COM } port_id_t;
11138311SSukumar.Swaminathan@Sun.COM 
11148311SSukumar.Swaminathan@Sun.COM /*
11158311SSukumar.Swaminathan@Sun.COM  * Link list definitions.
11168311SSukumar.Swaminathan@Sun.COM  */
11178311SSukumar.Swaminathan@Sun.COM typedef struct ql_link {
11188311SSukumar.Swaminathan@Sun.COM 	struct ql_link *prev;
11198311SSukumar.Swaminathan@Sun.COM 	struct ql_link *next;
11208311SSukumar.Swaminathan@Sun.COM 	void   *base_address;
11218311SSukumar.Swaminathan@Sun.COM 	struct ql_head *head;	/* the queue this link is on */
11228311SSukumar.Swaminathan@Sun.COM } ql_link_t;
11238311SSukumar.Swaminathan@Sun.COM 
11248311SSukumar.Swaminathan@Sun.COM typedef struct ql_head {
11258311SSukumar.Swaminathan@Sun.COM 	ql_link_t  *first;
11268311SSukumar.Swaminathan@Sun.COM 	ql_link_t  *last;
11278311SSukumar.Swaminathan@Sun.COM } ql_head_t;
11288311SSukumar.Swaminathan@Sun.COM 
11298311SSukumar.Swaminathan@Sun.COM /*
11308311SSukumar.Swaminathan@Sun.COM  * This is the per-command structure
11318311SSukumar.Swaminathan@Sun.COM  */
11328311SSukumar.Swaminathan@Sun.COM typedef struct ql_srb {
11338311SSukumar.Swaminathan@Sun.COM 	/* Command link. */
11348311SSukumar.Swaminathan@Sun.COM 	ql_link_t		cmd;
11358311SSukumar.Swaminathan@Sun.COM 
11368311SSukumar.Swaminathan@Sun.COM 	/* Watchdog link and timer. */
11378311SSukumar.Swaminathan@Sun.COM 	ql_link_t		wdg;
11388311SSukumar.Swaminathan@Sun.COM 	time_t			wdg_q_time;
11398311SSukumar.Swaminathan@Sun.COM 	time_t			init_wdg_q_time;
11408311SSukumar.Swaminathan@Sun.COM 	uint16_t		isp_timeout;
11418311SSukumar.Swaminathan@Sun.COM 
11428311SSukumar.Swaminathan@Sun.COM 	/* FCA and FC Transport data. */
11438311SSukumar.Swaminathan@Sun.COM 	fc_packet_t		*pkt;
11448311SSukumar.Swaminathan@Sun.COM 	struct ql_adapter_state	*ha;
11458311SSukumar.Swaminathan@Sun.COM 	uint32_t		magic_number;
11468311SSukumar.Swaminathan@Sun.COM 
11478311SSukumar.Swaminathan@Sun.COM 	/* unsolicited buffer context. */
11488311SSukumar.Swaminathan@Sun.COM 	dma_mem_t		ub_buffer;
11498311SSukumar.Swaminathan@Sun.COM 	uint32_t		ub_type;
11508311SSukumar.Swaminathan@Sun.COM 	uint32_t		ub_size;
11518311SSukumar.Swaminathan@Sun.COM 
11528311SSukumar.Swaminathan@Sun.COM 	/* FCP command. */
11538311SSukumar.Swaminathan@Sun.COM 	fcp_cmd_t		*fcp;
11548311SSukumar.Swaminathan@Sun.COM 
11558311SSukumar.Swaminathan@Sun.COM 	/* Request sense. */
11568311SSukumar.Swaminathan@Sun.COM 	uint32_t		request_sense_length;
11578311SSukumar.Swaminathan@Sun.COM 	caddr_t			request_sense_ptr;
11588311SSukumar.Swaminathan@Sun.COM 
11598311SSukumar.Swaminathan@Sun.COM 	/* Device queue pointer. */
11608311SSukumar.Swaminathan@Sun.COM 	struct ql_lun		*lun_queue;
11618311SSukumar.Swaminathan@Sun.COM 
11628311SSukumar.Swaminathan@Sun.COM 	/* Command state/status flags. */
11638311SSukumar.Swaminathan@Sun.COM 	volatile uint32_t	flags;
11648311SSukumar.Swaminathan@Sun.COM 
11658311SSukumar.Swaminathan@Sun.COM 	/* Command IOCB context. */
11668311SSukumar.Swaminathan@Sun.COM 	void			(*iocb)(struct ql_adapter_state *,
11678311SSukumar.Swaminathan@Sun.COM 	    struct ql_srb *, void *);
1168*12279SDaniel.Beauregard@Sun.COM 	struct cmd_entry	*request_ring_ptr;
11698311SSukumar.Swaminathan@Sun.COM 	uint32_t		handle;
11708311SSukumar.Swaminathan@Sun.COM 	uint16_t		req_cnt;
11718311SSukumar.Swaminathan@Sun.COM 	uint8_t			retry_count;
1172*12279SDaniel.Beauregard@Sun.COM 	dma_mem_t		sg_dma;
11738311SSukumar.Swaminathan@Sun.COM } ql_srb_t;
11748311SSukumar.Swaminathan@Sun.COM 
11758311SSukumar.Swaminathan@Sun.COM #define	SRB_ISP_STARTED		  BIT_0   /* Command sent to ISP. */
11768311SSukumar.Swaminathan@Sun.COM #define	SRB_ISP_COMPLETED	  BIT_1   /* ISP finished with command. */
11778311SSukumar.Swaminathan@Sun.COM #define	SRB_RETRY		  BIT_2   /* Driver retrying command. */
11788311SSukumar.Swaminathan@Sun.COM #define	SRB_POLL		  BIT_3   /* Poll for completion. */
11798311SSukumar.Swaminathan@Sun.COM #define	SRB_WATCHDOG_ENABLED	  BIT_4   /* Command on watchdog list. */
11808311SSukumar.Swaminathan@Sun.COM #define	SRB_ABORT		  BIT_5   /* SRB to be aborted. */
11818311SSukumar.Swaminathan@Sun.COM #define	SRB_UB_IN_FCA		  BIT_6   /* FCA holds unsolicited buffer */
11828311SSukumar.Swaminathan@Sun.COM #define	SRB_UB_IN_ISP		  BIT_7   /* ISP holds unsolicited buffer */
11838311SSukumar.Swaminathan@Sun.COM #define	SRB_UB_CALLBACK		  BIT_8   /* Unsolicited callback needed. */
11848311SSukumar.Swaminathan@Sun.COM #define	SRB_UB_RSCN		  BIT_9   /* Unsolicited RSCN callback. */
11858311SSukumar.Swaminathan@Sun.COM #define	SRB_UB_FCP		  BIT_10  /* Unsolicited RSCN callback. */
11868311SSukumar.Swaminathan@Sun.COM #define	SRB_FCP_CMD_PKT		  BIT_11  /* FCP command type packet. */
11878311SSukumar.Swaminathan@Sun.COM #define	SRB_FCP_DATA_PKT	  BIT_12  /* FCP data type packet. */
11888311SSukumar.Swaminathan@Sun.COM #define	SRB_FCP_RSP_PKT		  BIT_13  /* FCP response type packet. */
11898311SSukumar.Swaminathan@Sun.COM #define	SRB_IP_PKT		  BIT_14  /* IP type packet. */
11908311SSukumar.Swaminathan@Sun.COM #define	SRB_GENERIC_SERVICES_PKT  BIT_15  /* Generic services type packet */
11918311SSukumar.Swaminathan@Sun.COM #define	SRB_COMMAND_TIMEOUT	  BIT_16  /* Command timed out. */
11928311SSukumar.Swaminathan@Sun.COM #define	SRB_ABORTING		  BIT_17  /* SRB aborting. */
11938311SSukumar.Swaminathan@Sun.COM #define	SRB_IN_DEVICE_QUEUE	  BIT_18  /* In Device Queue */
11948311SSukumar.Swaminathan@Sun.COM #define	SRB_IN_TOKEN_ARRAY	  BIT_19  /* In Token Array */
11958311SSukumar.Swaminathan@Sun.COM #define	SRB_UB_FREE_REQUESTED	  BIT_20  /* UB Free requested */
11968311SSukumar.Swaminathan@Sun.COM #define	SRB_UB_ACQUIRED		  BIT_21  /* UB selected for upcall */
11978311SSukumar.Swaminathan@Sun.COM #define	SRB_MS_PKT		  BIT_22  /* Management Service pkt */
11989446SDaniel.Beauregard@Sun.COM #define	SRB_ELS_PKT		  BIT_23  /* Extended Link Services pkt */
11998311SSukumar.Swaminathan@Sun.COM 
12008311SSukumar.Swaminathan@Sun.COM /*
12018311SSukumar.Swaminathan@Sun.COM  * This byte will be used to define flags for the LUN on the target.
12028311SSukumar.Swaminathan@Sun.COM  * Presently, we have untagged-command as one flag. Others can be
12038311SSukumar.Swaminathan@Sun.COM  * added later, if needed.
12048311SSukumar.Swaminathan@Sun.COM  */
12058311SSukumar.Swaminathan@Sun.COM typedef struct tgt_lun_flags {
12068311SSukumar.Swaminathan@Sun.COM 	uint8_t
12078311SSukumar.Swaminathan@Sun.COM 		untagged_pending:1,
12088311SSukumar.Swaminathan@Sun.COM 		unused_bits:7;
12098311SSukumar.Swaminathan@Sun.COM } tgt_lun_flags_t;
12108311SSukumar.Swaminathan@Sun.COM 
12118311SSukumar.Swaminathan@Sun.COM #define	QL_IS_UNTAGGED_PENDING(q, lun_num) \
12128311SSukumar.Swaminathan@Sun.COM 	((q->lun_flags[lun_num].untagged_pending == TRUE) ? 1 : 0)
12138311SSukumar.Swaminathan@Sun.COM #define	QL_SET_UNTAGGED_PENDING(q, lun_num) \
12148311SSukumar.Swaminathan@Sun.COM 	(q->lun_flags[lun_num].untagged_pending = TRUE)
12158311SSukumar.Swaminathan@Sun.COM #define	QL_CLEAR_UNTAGGED_PENDING(q, lun_num) \
12168311SSukumar.Swaminathan@Sun.COM 	(q->lun_flags[lun_num].untagged_pending = FALSE)
12178311SSukumar.Swaminathan@Sun.COM 
12188311SSukumar.Swaminathan@Sun.COM /*
12198311SSukumar.Swaminathan@Sun.COM  * Fibre Channel LUN Queue structure
12208311SSukumar.Swaminathan@Sun.COM  */
12218311SSukumar.Swaminathan@Sun.COM typedef struct ql_lun {
12228311SSukumar.Swaminathan@Sun.COM 	/* Head command link. */
12238311SSukumar.Swaminathan@Sun.COM 	ql_head_t		cmd;
12248311SSukumar.Swaminathan@Sun.COM 
12258311SSukumar.Swaminathan@Sun.COM 	struct ql_target	*target_queue;
12268311SSukumar.Swaminathan@Sun.COM 
12278311SSukumar.Swaminathan@Sun.COM 	uint32_t		flags;
12288311SSukumar.Swaminathan@Sun.COM 
12298311SSukumar.Swaminathan@Sun.COM 	/* LUN execution throttle. */
12308311SSukumar.Swaminathan@Sun.COM 	uint16_t		lun_outcnt;
12318311SSukumar.Swaminathan@Sun.COM 
12328311SSukumar.Swaminathan@Sun.COM 	uint16_t		lun_no;
12338311SSukumar.Swaminathan@Sun.COM 
12348311SSukumar.Swaminathan@Sun.COM 	ql_link_t		link;
12358311SSukumar.Swaminathan@Sun.COM } ql_lun_t;
12368311SSukumar.Swaminathan@Sun.COM 
12378311SSukumar.Swaminathan@Sun.COM /*
12388311SSukumar.Swaminathan@Sun.COM  * LUN Queue flags
12398311SSukumar.Swaminathan@Sun.COM  */
12408311SSukumar.Swaminathan@Sun.COM #define	LQF_UNTAGGED_PENDING	BIT_0
12418311SSukumar.Swaminathan@Sun.COM 
12428311SSukumar.Swaminathan@Sun.COM /*
12438311SSukumar.Swaminathan@Sun.COM  * Fibre Channel Device Queue structure
12448311SSukumar.Swaminathan@Sun.COM  */
12458311SSukumar.Swaminathan@Sun.COM typedef struct ql_target {
12468311SSukumar.Swaminathan@Sun.COM 	/* Device queue lock. */
12478311SSukumar.Swaminathan@Sun.COM 	kmutex_t		mutex;
12488311SSukumar.Swaminathan@Sun.COM 
12498311SSukumar.Swaminathan@Sun.COM 	/* Head target command link. */
12508311SSukumar.Swaminathan@Sun.COM 	ql_head_t		tgt_cmd;
12518311SSukumar.Swaminathan@Sun.COM 
12528311SSukumar.Swaminathan@Sun.COM 	volatile uint32_t	flags;
12538311SSukumar.Swaminathan@Sun.COM 	port_id_t		d_id;
12548311SSukumar.Swaminathan@Sun.COM 	uint16_t		loop_id;
12558311SSukumar.Swaminathan@Sun.COM 	volatile uint16_t	outcnt;		/* # of cmds running in ISP */
12568311SSukumar.Swaminathan@Sun.COM 	uint32_t		iidma_rate;
12578311SSukumar.Swaminathan@Sun.COM 
12588311SSukumar.Swaminathan@Sun.COM 	/* Device link. */
12598311SSukumar.Swaminathan@Sun.COM 	ql_link_t		device;
12608311SSukumar.Swaminathan@Sun.COM 
12618311SSukumar.Swaminathan@Sun.COM 	/* Head watchdog link. */
12628311SSukumar.Swaminathan@Sun.COM 	ql_head_t		wdg;
12638311SSukumar.Swaminathan@Sun.COM 
12648311SSukumar.Swaminathan@Sun.COM 	/* Unsolicited buffer IP data. */
12658311SSukumar.Swaminathan@Sun.COM 	uint32_t		ub_frame_ro;
12668311SSukumar.Swaminathan@Sun.COM 	uint16_t		ub_sequence_length;
12678311SSukumar.Swaminathan@Sun.COM 	uint16_t		ub_loop_id;
12688311SSukumar.Swaminathan@Sun.COM 	uint8_t			ub_total_seg_cnt;
12698311SSukumar.Swaminathan@Sun.COM 	uint8_t			ub_seq_cnt;
12708311SSukumar.Swaminathan@Sun.COM 	uint8_t			ub_seq_id;
12718311SSukumar.Swaminathan@Sun.COM 
12728311SSukumar.Swaminathan@Sun.COM 	/* Port down retry counter. */
12738311SSukumar.Swaminathan@Sun.COM 	uint16_t		port_down_retry_count;
12748311SSukumar.Swaminathan@Sun.COM 	uint16_t		qfull_retry_count;
12758311SSukumar.Swaminathan@Sun.COM 
12768311SSukumar.Swaminathan@Sun.COM 	/* logout sent state */
12778311SSukumar.Swaminathan@Sun.COM 	uint8_t			logout_sent;
12788311SSukumar.Swaminathan@Sun.COM 
12798311SSukumar.Swaminathan@Sun.COM 	/* Data from Port database matches machine type. */
12808311SSukumar.Swaminathan@Sun.COM 	uint8_t			master_state;
12818311SSukumar.Swaminathan@Sun.COM 	uint8_t			slave_state;
12828311SSukumar.Swaminathan@Sun.COM 	port_id_t		hard_addr;
12838311SSukumar.Swaminathan@Sun.COM 	uint8_t			port_name[8];
12848311SSukumar.Swaminathan@Sun.COM 	uint8_t			node_name[8];
12858311SSukumar.Swaminathan@Sun.COM 	uint16_t		cmn_features;
12868311SSukumar.Swaminathan@Sun.COM 	uint16_t		conc_sequences;
12878311SSukumar.Swaminathan@Sun.COM 	uint16_t		relative_offset;
12888311SSukumar.Swaminathan@Sun.COM 	uint16_t		class3_recipient_ctl;
12898311SSukumar.Swaminathan@Sun.COM 	uint16_t		class3_rcv_data_size;
12908311SSukumar.Swaminathan@Sun.COM 	uint16_t		class3_conc_sequences;
12918311SSukumar.Swaminathan@Sun.COM 	uint16_t		class3_open_sequences_per_exch;
12928311SSukumar.Swaminathan@Sun.COM 	uint16_t		prli_payload_length;
12938311SSukumar.Swaminathan@Sun.COM 	uint16_t		prli_svc_param_word_0;
12948311SSukumar.Swaminathan@Sun.COM 	uint16_t		prli_svc_param_word_3;
12958311SSukumar.Swaminathan@Sun.COM 
12968311SSukumar.Swaminathan@Sun.COM 	/* LUN context. */
12978311SSukumar.Swaminathan@Sun.COM 	ql_head_t		lun_queues;
12988311SSukumar.Swaminathan@Sun.COM 	ql_lun_t		*last_lun_queue;
12998311SSukumar.Swaminathan@Sun.COM } ql_tgt_t;
13008311SSukumar.Swaminathan@Sun.COM 
13018311SSukumar.Swaminathan@Sun.COM /*
13028311SSukumar.Swaminathan@Sun.COM  * Target Queue flags
13038311SSukumar.Swaminathan@Sun.COM  */
13048311SSukumar.Swaminathan@Sun.COM #define	TQF_TAPE_DEVICE		BIT_0
13058311SSukumar.Swaminathan@Sun.COM #define	TQF_QUEUE_SUSPENDED	BIT_1  /* Queue suspended. */
13068311SSukumar.Swaminathan@Sun.COM #define	TQF_FABRIC_DEVICE	BIT_2
13078311SSukumar.Swaminathan@Sun.COM #define	TQF_INITIATOR_DEVICE	BIT_3
13088311SSukumar.Swaminathan@Sun.COM #define	TQF_RSCN_RCVD		BIT_4
13098311SSukumar.Swaminathan@Sun.COM #define	TQF_NEED_AUTHENTICATION	BIT_5
13108311SSukumar.Swaminathan@Sun.COM #define	TQF_PLOGI_PROGRS	BIT_6
13118311SSukumar.Swaminathan@Sun.COM #define	TQF_IIDMA_NEEDED	BIT_7
13129446SDaniel.Beauregard@Sun.COM /*
13139446SDaniel.Beauregard@Sun.COM  * Tempoary N_Port information
13149446SDaniel.Beauregard@Sun.COM  */
13159446SDaniel.Beauregard@Sun.COM typedef struct ql_n_port_info {
13169446SDaniel.Beauregard@Sun.COM 	uint16_t	n_port_handle;
13179446SDaniel.Beauregard@Sun.COM 	uint8_t		port_name[8];	/* Big endian. */
13189446SDaniel.Beauregard@Sun.COM 	uint8_t		node_name[8];	/* Big endian. */
13199446SDaniel.Beauregard@Sun.COM } ql_n_port_info_t;
13208311SSukumar.Swaminathan@Sun.COM 
13218311SSukumar.Swaminathan@Sun.COM /*
13228311SSukumar.Swaminathan@Sun.COM  * iiDMA
13238311SSukumar.Swaminathan@Sun.COM  */
13248311SSukumar.Swaminathan@Sun.COM #define	IIDMA_RATE_INIT		0xffffffff	/* init state */
13258311SSukumar.Swaminathan@Sun.COM #define	IIDMA_RATE_NDEF		0xfffffffe	/* not defined in conf file */
13268311SSukumar.Swaminathan@Sun.COM #define	IIDMA_RATE_1GB		0x0
13278311SSukumar.Swaminathan@Sun.COM #define	IIDMA_RATE_2GB		0x1
13288311SSukumar.Swaminathan@Sun.COM #define	IIDMA_RATE_4GB		0x3
13298311SSukumar.Swaminathan@Sun.COM #define	IIDMA_RATE_8GB		0x4
13309446SDaniel.Beauregard@Sun.COM #define	IIDMA_RATE_10GB		0x13
13319446SDaniel.Beauregard@Sun.COM #define	IIDMA_RATE_MAX		IIDMA_RATE_10GB
13328311SSukumar.Swaminathan@Sun.COM 
13338311SSukumar.Swaminathan@Sun.COM /*
13348311SSukumar.Swaminathan@Sun.COM  * Kernel statistic structure definitions.
13358311SSukumar.Swaminathan@Sun.COM  */
13368311SSukumar.Swaminathan@Sun.COM typedef struct ql_device_stat {
13378311SSukumar.Swaminathan@Sun.COM 	int logouts_recvd;
13388311SSukumar.Swaminathan@Sun.COM 	int task_mgmt_failures;
13398311SSukumar.Swaminathan@Sun.COM 	int data_ro_mismatches;
13408311SSukumar.Swaminathan@Sun.COM 	int dl_len_mismatches;
13418311SSukumar.Swaminathan@Sun.COM } ql_device_stat_t;
13428311SSukumar.Swaminathan@Sun.COM 
13438311SSukumar.Swaminathan@Sun.COM typedef struct ql_adapter_24xx_stat {
13448311SSukumar.Swaminathan@Sun.COM 	int version;			/* version of this struct */
13458311SSukumar.Swaminathan@Sun.COM 	int lip_count;			/* lips forced  */
13468311SSukumar.Swaminathan@Sun.COM 	int ncmds;			/* outstanding commands */
13478311SSukumar.Swaminathan@Sun.COM 	ql_adapter_revlvl_t revlvl;	/* adapter revision levels */
13488311SSukumar.Swaminathan@Sun.COM 	ql_device_stat_t d_stats[MAX_24_FIBRE_DEVICES]; /* per device stats */
13498311SSukumar.Swaminathan@Sun.COM } ql_adapter_stat_t;
13508311SSukumar.Swaminathan@Sun.COM 
13518311SSukumar.Swaminathan@Sun.COM /*
13528311SSukumar.Swaminathan@Sun.COM  * Firmware code segment.
13538311SSukumar.Swaminathan@Sun.COM  */
13548311SSukumar.Swaminathan@Sun.COM #define	MAX_RISC_CODE_SEGMENTS 3
13558311SSukumar.Swaminathan@Sun.COM typedef struct fw_code {
13568311SSukumar.Swaminathan@Sun.COM 	caddr_t			code;
13578311SSukumar.Swaminathan@Sun.COM 	uint32_t		addr;
13588311SSukumar.Swaminathan@Sun.COM 	uint32_t		length;
13598311SSukumar.Swaminathan@Sun.COM } ql_fw_code_t;
13608311SSukumar.Swaminathan@Sun.COM 
13618311SSukumar.Swaminathan@Sun.COM /* diagnostic els ECHO defines */
13628311SSukumar.Swaminathan@Sun.COM #define	QL_ECHO_CMD		0x10000000	/* echo opcode */
13638311SSukumar.Swaminathan@Sun.COM #define	QL_ECHO_CMD_LENGTH	220		/* command length */
13648311SSukumar.Swaminathan@Sun.COM 
13658311SSukumar.Swaminathan@Sun.COM /* DUMP state flags. */
13668311SSukumar.Swaminathan@Sun.COM #define	QL_DUMPING		BIT_0
13678311SSukumar.Swaminathan@Sun.COM #define	QL_DUMP_VALID		BIT_1
13688311SSukumar.Swaminathan@Sun.COM #define	QL_DUMP_UPLOADED	BIT_2
13698311SSukumar.Swaminathan@Sun.COM 
13709156SDaniel.Beauregard@Sun.COM typedef struct el_trace_desc {
13719156SDaniel.Beauregard@Sun.COM 	kmutex_t	mutex;
13729156SDaniel.Beauregard@Sun.COM 	uint16_t	next;
13739156SDaniel.Beauregard@Sun.COM 	uint32_t	trace_buffer_size;
13749156SDaniel.Beauregard@Sun.COM 	char		*trace_buffer;
13759156SDaniel.Beauregard@Sun.COM } el_trace_desc_t;
13769156SDaniel.Beauregard@Sun.COM 
13778311SSukumar.Swaminathan@Sun.COM /*
137811541SDaniel.Beauregard@Sun.COM  * NVRAM cache descriptor.
137911541SDaniel.Beauregard@Sun.COM  */
138011541SDaniel.Beauregard@Sun.COM typedef struct nvram_cache_desc {
138111541SDaniel.Beauregard@Sun.COM 	kmutex_t	mutex;
138211541SDaniel.Beauregard@Sun.COM 	uint32_t	valid;
138311541SDaniel.Beauregard@Sun.COM 	uint32_t	size;
138411541SDaniel.Beauregard@Sun.COM 	void		*cache;
138511541SDaniel.Beauregard@Sun.COM } nvram_cache_desc_t;
138611541SDaniel.Beauregard@Sun.COM 
138711541SDaniel.Beauregard@Sun.COM /*
13888311SSukumar.Swaminathan@Sun.COM  * ql attach progress indication
13898311SSukumar.Swaminathan@Sun.COM  */
13908311SSukumar.Swaminathan@Sun.COM #define	QL_SOFT_STATE_ALLOCED		BIT_0
13918311SSukumar.Swaminathan@Sun.COM #define	QL_REGS_MAPPED			BIT_1
13928311SSukumar.Swaminathan@Sun.COM #define	QL_HBA_BUFFER_SETUP		BIT_2
13938311SSukumar.Swaminathan@Sun.COM #define	QL_MUTEX_CV_INITED		BIT_3
13948311SSukumar.Swaminathan@Sun.COM #define	QL_INTR_ADDED			BIT_4
13958311SSukumar.Swaminathan@Sun.COM #define	QL_CONFIG_SPACE_SETUP		BIT_5
13968311SSukumar.Swaminathan@Sun.COM #define	QL_TASK_DAEMON_STARTED		BIT_6
13978311SSukumar.Swaminathan@Sun.COM #define	QL_KSTAT_CREATED		BIT_7
13988311SSukumar.Swaminathan@Sun.COM #define	QL_MINOR_NODE_CREATED		BIT_8
13998311SSukumar.Swaminathan@Sun.COM #define	QL_FCA_TRAN_ALLOCED		BIT_9
14008311SSukumar.Swaminathan@Sun.COM #define	QL_FCA_ATTACH_DONE		BIT_10
14018311SSukumar.Swaminathan@Sun.COM #define	QL_IOMAP_IOBASE_MAPPED		BIT_11
14029446SDaniel.Beauregard@Sun.COM #define	QL_N_PORT_INFO_CREATED		BIT_12
140311924SDaniel.Beauregard@Sun.COM #define	QL_DB_IOBASE_MAPPED		BIT_13
14048311SSukumar.Swaminathan@Sun.COM /* Device queue head list size (based on AL_PA address). */
14058311SSukumar.Swaminathan@Sun.COM #define	DEVICE_HEAD_LIST_SIZE	0x81
14068311SSukumar.Swaminathan@Sun.COM 
140711924SDaniel.Beauregard@Sun.COM struct legacy_intr_set {
140811924SDaniel.Beauregard@Sun.COM 	uint32_t	int_vec_bit;
140911924SDaniel.Beauregard@Sun.COM 	uint32_t	tgt_status_reg;
141011924SDaniel.Beauregard@Sun.COM 	uint32_t	tgt_mask_reg;
141111924SDaniel.Beauregard@Sun.COM 	uint32_t	pci_int_reg;
141211924SDaniel.Beauregard@Sun.COM };
141311924SDaniel.Beauregard@Sun.COM 
14148311SSukumar.Swaminathan@Sun.COM /*
14158311SSukumar.Swaminathan@Sun.COM  * Adapter state structure.
14168311SSukumar.Swaminathan@Sun.COM  */
14178311SSukumar.Swaminathan@Sun.COM typedef struct ql_adapter_state {
14188311SSukumar.Swaminathan@Sun.COM 	ql_link_t		hba;
14198311SSukumar.Swaminathan@Sun.COM 
14208311SSukumar.Swaminathan@Sun.COM 	kmutex_t		mutex;
14218311SSukumar.Swaminathan@Sun.COM 	volatile uint32_t	flags;			/* State flags. */
14228311SSukumar.Swaminathan@Sun.COM 	uint32_t		state;
14238311SSukumar.Swaminathan@Sun.COM 	port_id_t		d_id;
14248311SSukumar.Swaminathan@Sun.COM 	uint16_t		loop_id;
14258311SSukumar.Swaminathan@Sun.COM 	uint8_t			topology;
14268311SSukumar.Swaminathan@Sun.COM 	uint16_t		sfp_stat;
14278311SSukumar.Swaminathan@Sun.COM 
14288311SSukumar.Swaminathan@Sun.COM 	uint16_t		idle_timer;
14298311SSukumar.Swaminathan@Sun.COM 	uint8_t			loop_down_abort_time;
14308311SSukumar.Swaminathan@Sun.COM 	uint8_t			port_retry_timer;
14318311SSukumar.Swaminathan@Sun.COM 	uint8_t			loop_down_timer;
14328311SSukumar.Swaminathan@Sun.COM 	uint8_t			watchdog_timer;
14338311SSukumar.Swaminathan@Sun.COM 	uint16_t		r_a_tov;	    /* 2 * R_A_TOV + 5 */
14348311SSukumar.Swaminathan@Sun.COM 
14358311SSukumar.Swaminathan@Sun.COM 	/* Task Daemon context. */
14368311SSukumar.Swaminathan@Sun.COM 	callb_cpr_t		cprinfo;
14378311SSukumar.Swaminathan@Sun.COM 	kmutex_t		task_daemon_mutex;
14388311SSukumar.Swaminathan@Sun.COM 	kcondvar_t		cv_dr_suspended;
14398311SSukumar.Swaminathan@Sun.COM 	kcondvar_t		cv_task_daemon;
14408311SSukumar.Swaminathan@Sun.COM 	volatile uint32_t	task_daemon_flags;
14418311SSukumar.Swaminathan@Sun.COM 	ql_head_t		callback_queue;
14428311SSukumar.Swaminathan@Sun.COM 
14438311SSukumar.Swaminathan@Sun.COM 	/* Interrupt context. */
14448311SSukumar.Swaminathan@Sun.COM 	kmutex_t		intr_mutex;
144511924SDaniel.Beauregard@Sun.COM 	caddr_t			iobase;
14468311SSukumar.Swaminathan@Sun.COM 	uint8_t			rev_id;
14478311SSukumar.Swaminathan@Sun.COM 	uint16_t		device_id;
14488311SSukumar.Swaminathan@Sun.COM 	uint16_t		subsys_id;
14498311SSukumar.Swaminathan@Sun.COM 	uint16_t		subven_id;
14508311SSukumar.Swaminathan@Sun.COM 	uint16_t		ven_id;
14518311SSukumar.Swaminathan@Sun.COM 	uint16_t		fw_class;
14528311SSukumar.Swaminathan@Sun.COM 	ql_srb_t		*status_srb;
14538311SSukumar.Swaminathan@Sun.COM 	volatile uint8_t	intr_claimed;
14548311SSukumar.Swaminathan@Sun.COM 
14558311SSukumar.Swaminathan@Sun.COM 	/*
14568311SSukumar.Swaminathan@Sun.COM 	 * ISP request queue, response queue, mailbox buffer and
14578311SSukumar.Swaminathan@Sun.COM 	 * IP receive queue buffer.
14588311SSukumar.Swaminathan@Sun.COM 	 */
14598311SSukumar.Swaminathan@Sun.COM 	dma_mem_t		hba_buf;
14608311SSukumar.Swaminathan@Sun.COM 
14618311SSukumar.Swaminathan@Sun.COM 	/* ISP request queue context. */
14628311SSukumar.Swaminathan@Sun.COM 	kmutex_t		req_ring_mutex;
14638311SSukumar.Swaminathan@Sun.COM 	struct cmd_entry	*request_ring_bp;
14648311SSukumar.Swaminathan@Sun.COM 	struct cmd_entry	*request_ring_ptr;
14658311SSukumar.Swaminathan@Sun.COM 	uint64_t		request_dvma;
14668311SSukumar.Swaminathan@Sun.COM 	uint16_t		req_ring_index;
14678311SSukumar.Swaminathan@Sun.COM 	uint16_t		req_q_cnt;	/* # of available entries. */
14688311SSukumar.Swaminathan@Sun.COM 	ql_head_t		pending_cmds;
14698311SSukumar.Swaminathan@Sun.COM 	ql_srb_t		**outstanding_cmds;
14708311SSukumar.Swaminathan@Sun.COM 	uint16_t		osc_index;
14718311SSukumar.Swaminathan@Sun.COM 
14728311SSukumar.Swaminathan@Sun.COM 	/* ISP response queue context. */
14738311SSukumar.Swaminathan@Sun.COM 	struct sts_entry	*response_ring_bp;
14748311SSukumar.Swaminathan@Sun.COM 	struct sts_entry	*response_ring_ptr;
14758311SSukumar.Swaminathan@Sun.COM 	uint64_t		response_dvma;
14768311SSukumar.Swaminathan@Sun.COM 	uint16_t		rsp_ring_index;
14778311SSukumar.Swaminathan@Sun.COM 	uint16_t		isp_rsp_index;
14788311SSukumar.Swaminathan@Sun.COM 
14798311SSukumar.Swaminathan@Sun.COM 	/* Mailbox context. */
14808311SSukumar.Swaminathan@Sun.COM 	kmutex_t		mbx_mutex;
14818311SSukumar.Swaminathan@Sun.COM 	caddr_t			mbx_bp;
14828311SSukumar.Swaminathan@Sun.COM 	struct mbx_cmd		*mcp;
14838311SSukumar.Swaminathan@Sun.COM 	kcondvar_t		cv_mbx_wait;
14848311SSukumar.Swaminathan@Sun.COM 	kcondvar_t		cv_mbx_intr;
14858311SSukumar.Swaminathan@Sun.COM 	volatile uint8_t	mailbox_flags;
14868311SSukumar.Swaminathan@Sun.COM 
14878311SSukumar.Swaminathan@Sun.COM 	/* ISP receive buffer queue context. */
14888311SSukumar.Swaminathan@Sun.COM 	ql_tgt_t		*rcv_dev_q;
14898311SSukumar.Swaminathan@Sun.COM 	struct rcvbuf		*rcvbuf_ring_bp;
14908311SSukumar.Swaminathan@Sun.COM 	struct rcvbuf		*rcvbuf_ring_ptr;
14918311SSukumar.Swaminathan@Sun.COM 	uint64_t		rcvbuf_dvma;
14928311SSukumar.Swaminathan@Sun.COM 	uint16_t		rcvbuf_ring_index;
14938311SSukumar.Swaminathan@Sun.COM 
14948311SSukumar.Swaminathan@Sun.COM 	/* Unsolicited buffer data. */
14958311SSukumar.Swaminathan@Sun.COM 	uint16_t		ub_outcnt;
14968311SSukumar.Swaminathan@Sun.COM 	uint8_t			ub_seq_id;
14978311SSukumar.Swaminathan@Sun.COM 	uint8_t			ub_command_count;
14988311SSukumar.Swaminathan@Sun.COM 	uint8_t			ub_notify_count;
14998311SSukumar.Swaminathan@Sun.COM 	uint32_t		ub_allocated;
15008311SSukumar.Swaminathan@Sun.COM 	kmutex_t		ub_mutex;
15018311SSukumar.Swaminathan@Sun.COM 	kcondvar_t		cv_ub;
15028311SSukumar.Swaminathan@Sun.COM 	fc_unsol_buf_t		**ub_array;
15038311SSukumar.Swaminathan@Sun.COM 
15048311SSukumar.Swaminathan@Sun.COM 	/* Head of device queue list. */
15058311SSukumar.Swaminathan@Sun.COM 	ql_head_t		*dev;
15068311SSukumar.Swaminathan@Sun.COM 
15078311SSukumar.Swaminathan@Sun.COM 	/* Kernel statistics. */
15088311SSukumar.Swaminathan@Sun.COM 	kstat_t			*k_stats;
15098311SSukumar.Swaminathan@Sun.COM 	ql_adapter_stat_t	*adapter_stats;
15108311SSukumar.Swaminathan@Sun.COM 
15118311SSukumar.Swaminathan@Sun.COM 	/* Solaris adapter configuration data */
15128311SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t	dev_handle;
15138311SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t	pci_handle;	/* config space */
15148311SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t	iomap_dev_handle;
15158311SSukumar.Swaminathan@Sun.COM 	caddr_t			iomap_iobase;
15168311SSukumar.Swaminathan@Sun.COM 	dev_info_t		*dip;
15178311SSukumar.Swaminathan@Sun.COM 	ddi_iblock_cookie_t	iblock_cookie;
15188311SSukumar.Swaminathan@Sun.COM 	fc_fca_tran_t		*tran;
15199156SDaniel.Beauregard@Sun.COM 	uint32_t		instance;
15208311SSukumar.Swaminathan@Sun.COM 	int8_t			*devpath;
15218311SSukumar.Swaminathan@Sun.COM 	uint32_t   		fru_hba_index;
15228311SSukumar.Swaminathan@Sun.COM 	uint32_t   		fru_port_index;
15238311SSukumar.Swaminathan@Sun.COM 	uint8_t			adapInfo[18];
15248311SSukumar.Swaminathan@Sun.COM 
15258311SSukumar.Swaminathan@Sun.COM 	/* Adapter context */
15268311SSukumar.Swaminathan@Sun.COM 	la_els_logi_t		loginparams;
15278311SSukumar.Swaminathan@Sun.COM 	fc_fca_bind_info_t	bind_info;
15288311SSukumar.Swaminathan@Sun.COM 	ddi_modhandle_t		fw_module;
152911924SDaniel.Beauregard@Sun.COM 	uint32_t		fw_major_version;
153011924SDaniel.Beauregard@Sun.COM 	uint32_t		fw_minor_version;
153111924SDaniel.Beauregard@Sun.COM 	uint32_t		fw_subminor_version;
15328311SSukumar.Swaminathan@Sun.COM 	uint16_t		fw_attributes;
15338311SSukumar.Swaminathan@Sun.COM 	uint32_t		fw_ext_memory_size;
15348311SSukumar.Swaminathan@Sun.COM 	uint32_t		parity_pause_errors;
153511924SDaniel.Beauregard@Sun.COM 	boolean_t		log_parity_pause;
15368311SSukumar.Swaminathan@Sun.COM 	uint16_t		parity_hccr_err;
15378311SSukumar.Swaminathan@Sun.COM 	uint32_t		parity_stat_err;
15388311SSukumar.Swaminathan@Sun.COM 	reg_off_t		*reg_off;
15398311SSukumar.Swaminathan@Sun.COM 	caddr_t			risc_code;
15408311SSukumar.Swaminathan@Sun.COM 	uint32_t		risc_code_size;
15418311SSukumar.Swaminathan@Sun.COM 	ql_fw_code_t		risc_fw[MAX_RISC_CODE_SEGMENTS];
15428311SSukumar.Swaminathan@Sun.COM 	uint32_t		risc_dump_size;
15438311SSukumar.Swaminathan@Sun.COM 	void			(*fcp_cmd)(struct ql_adapter_state *,
15448311SSukumar.Swaminathan@Sun.COM 				    ql_srb_t *, void *);
15458311SSukumar.Swaminathan@Sun.COM 	void			(*ip_cmd)(struct ql_adapter_state *,
15468311SSukumar.Swaminathan@Sun.COM 				    ql_srb_t *, void *);
15478311SSukumar.Swaminathan@Sun.COM 	void			(*ms_cmd)(struct ql_adapter_state *,
15488311SSukumar.Swaminathan@Sun.COM 				    ql_srb_t *, void *);
15498311SSukumar.Swaminathan@Sun.COM 	uint8_t			cmd_segs;
15508311SSukumar.Swaminathan@Sun.COM 	uint8_t			cmd_cont_segs;
15518311SSukumar.Swaminathan@Sun.COM 
15528311SSukumar.Swaminathan@Sun.COM 	/* NVRAM configuration data */
15538311SSukumar.Swaminathan@Sun.COM 	uint32_t		cfg_flags;
15548311SSukumar.Swaminathan@Sun.COM 	ql_comb_init_cb_t	init_ctrl_blk;
15558311SSukumar.Swaminathan@Sun.COM 	ql_comb_ip_init_cb_t	ip_init_ctrl_blk;
15568311SSukumar.Swaminathan@Sun.COM 	uint16_t		nvram_version;
15578311SSukumar.Swaminathan@Sun.COM 	uint16_t		adapter_features;
15588311SSukumar.Swaminathan@Sun.COM 	uint32_t		fw_transfer_size;
15598311SSukumar.Swaminathan@Sun.COM 	uint16_t		execution_throttle;
15608311SSukumar.Swaminathan@Sun.COM 	uint16_t		port_down_retry_count;
15618311SSukumar.Swaminathan@Sun.COM 	uint8_t			port_down_retry_delay;
15628311SSukumar.Swaminathan@Sun.COM 	uint8_t			qfull_retry_count;
15638311SSukumar.Swaminathan@Sun.COM 	uint8_t			qfull_retry_delay;
15648311SSukumar.Swaminathan@Sun.COM 	uint16_t		serdes_param[4];
15658311SSukumar.Swaminathan@Sun.COM 	uint8_t			loop_reset_delay;
15668311SSukumar.Swaminathan@Sun.COM 
15678311SSukumar.Swaminathan@Sun.COM 	/* Power management context. */
15688311SSukumar.Swaminathan@Sun.COM 	kmutex_t		pm_mutex;
15698311SSukumar.Swaminathan@Sun.COM 	uint32_t		busy;
15708311SSukumar.Swaminathan@Sun.COM 	uint8_t			power_level;
15718311SSukumar.Swaminathan@Sun.COM 	uint8_t			pm_capable;
15728311SSukumar.Swaminathan@Sun.COM 	uint8_t			config_saved;
15738311SSukumar.Swaminathan@Sun.COM 	uint8_t			lip_on_panic;
15748311SSukumar.Swaminathan@Sun.COM 	port_id_t		port_hard_address;
15758311SSukumar.Swaminathan@Sun.COM 
15768311SSukumar.Swaminathan@Sun.COM 	/* sbus card data */
15778311SSukumar.Swaminathan@Sun.COM 	caddr_t			sbus_fpga_iobase;
15788311SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t	sbus_fpga_dev_handle;
15798311SSukumar.Swaminathan@Sun.COM 	ddi_acc_handle_t	sbus_config_handle;
15808311SSukumar.Swaminathan@Sun.COM 	caddr_t			sbus_config_base;
15818311SSukumar.Swaminathan@Sun.COM 
15828311SSukumar.Swaminathan@Sun.COM 	/* XIOCTL context pointer. */
15838311SSukumar.Swaminathan@Sun.COM 	struct ql_xioctl	*xioctl;
15848311SSukumar.Swaminathan@Sun.COM 
15858311SSukumar.Swaminathan@Sun.COM 	kmutex_t		cache_mutex;
15868311SSukumar.Swaminathan@Sun.COM 	struct ql_fcache	*fcache;
15878311SSukumar.Swaminathan@Sun.COM 	int8_t			*vcache;
15888311SSukumar.Swaminathan@Sun.COM 
15898311SSukumar.Swaminathan@Sun.COM 	/* AIF (Advanced Interrupt Framework) support */
15908311SSukumar.Swaminathan@Sun.COM 	ddi_intr_handle_t	*htable;
15918311SSukumar.Swaminathan@Sun.COM 	uint32_t		hsize;
15928311SSukumar.Swaminathan@Sun.COM 	int32_t			intr_cnt;
15938311SSukumar.Swaminathan@Sun.COM 	uint32_t		intr_pri;
15948311SSukumar.Swaminathan@Sun.COM 	int32_t			intr_cap;
15958311SSukumar.Swaminathan@Sun.COM 	uint32_t		iflags;
15968311SSukumar.Swaminathan@Sun.COM 
15978311SSukumar.Swaminathan@Sun.COM 	/* PCI maximum read request override */
15988311SSukumar.Swaminathan@Sun.COM 	uint16_t		pci_max_read_req;
15998311SSukumar.Swaminathan@Sun.COM 
16008311SSukumar.Swaminathan@Sun.COM 	/* port manage mutex */
16018311SSukumar.Swaminathan@Sun.COM 	kmutex_t		portmutex;
16028311SSukumar.Swaminathan@Sun.COM 	uint16_t		maximum_luns_per_target;
16038311SSukumar.Swaminathan@Sun.COM 
16049156SDaniel.Beauregard@Sun.COM 	/* f/w dump mutex */
16059156SDaniel.Beauregard@Sun.COM 	uint32_t		ql_dump_size;
16069156SDaniel.Beauregard@Sun.COM 	uint32_t		ql_dump_state;
16079156SDaniel.Beauregard@Sun.COM 	void			*ql_dump_ptr;
16089156SDaniel.Beauregard@Sun.COM 	kmutex_t		dump_mutex;
16099156SDaniel.Beauregard@Sun.COM 
16108311SSukumar.Swaminathan@Sun.COM 	uint8_t			fwwait;
16119156SDaniel.Beauregard@Sun.COM 
16129156SDaniel.Beauregard@Sun.COM 	dma_mem_t		fwexttracebuf;		/* extended trace  */
16139156SDaniel.Beauregard@Sun.COM 	dma_mem_t		fwfcetracebuf;		/* event trace */
16148311SSukumar.Swaminathan@Sun.COM 	uint32_t		fwfcetraceopt;
16158311SSukumar.Swaminathan@Sun.COM 	uint32_t		flash_errlog_start;	/* 32bit word addr */
16168311SSukumar.Swaminathan@Sun.COM 	uint32_t		flash_errlog_ptr;	/* 32bit word addr */
16179446SDaniel.Beauregard@Sun.COM 	uint8_t			send_plogi_timer;
16188311SSukumar.Swaminathan@Sun.COM 
16198311SSukumar.Swaminathan@Sun.COM 	/* Virtual port context. */
16208311SSukumar.Swaminathan@Sun.COM 	fca_port_attrs_t	*pi_attrs;
16218311SSukumar.Swaminathan@Sun.COM 	struct ql_adapter_state	*pha;
16228311SSukumar.Swaminathan@Sun.COM 	struct ql_adapter_state *vp_next;
16238311SSukumar.Swaminathan@Sun.COM 	uint8_t			vp_index;
16248311SSukumar.Swaminathan@Sun.COM 
16258311SSukumar.Swaminathan@Sun.COM 	uint16_t		free_loop_id;
16268311SSukumar.Swaminathan@Sun.COM 
16279446SDaniel.Beauregard@Sun.COM 	/* Tempoary N_Port information */
16289446SDaniel.Beauregard@Sun.COM 	struct ql_n_port_info	*n_port;
16299446SDaniel.Beauregard@Sun.COM 
16309446SDaniel.Beauregard@Sun.COM 	void			(*els_cmd)(struct ql_adapter_state *,
16319446SDaniel.Beauregard@Sun.COM 				    ql_srb_t *, void *);
16329156SDaniel.Beauregard@Sun.COM 	el_trace_desc_t		*el_trace_desc;
16339446SDaniel.Beauregard@Sun.COM 
16349446SDaniel.Beauregard@Sun.COM 	uint32_t		flash_data_addr;
16359446SDaniel.Beauregard@Sun.COM 	uint32_t		flash_fw_addr;
16369446SDaniel.Beauregard@Sun.COM 	uint32_t		flash_golden_fw_addr;
16379446SDaniel.Beauregard@Sun.COM 	uint32_t		flash_vpd_addr;
16389446SDaniel.Beauregard@Sun.COM 	uint32_t		flash_nvram_addr;
16399446SDaniel.Beauregard@Sun.COM 	uint32_t		flash_desc_addr;
16409446SDaniel.Beauregard@Sun.COM 	uint32_t		mpi_capability_list;
16419446SDaniel.Beauregard@Sun.COM 	uint8_t			phy_fw_major_version;
16429446SDaniel.Beauregard@Sun.COM 	uint8_t			phy_fw_minor_version;
16439446SDaniel.Beauregard@Sun.COM 	uint8_t			phy_fw_subminor_version;
16449446SDaniel.Beauregard@Sun.COM 	uint8_t			mpi_fw_major_version;
16459446SDaniel.Beauregard@Sun.COM 	uint8_t			mpi_fw_minor_version;
16469446SDaniel.Beauregard@Sun.COM 	uint8_t			mpi_fw_subminor_version;
16479446SDaniel.Beauregard@Sun.COM 
16489446SDaniel.Beauregard@Sun.COM 	uint8_t			idc_flash_acc;
1649*12279SDaniel.Beauregard@Sun.COM 	uint8_t			idc_restart_cnt;
16509446SDaniel.Beauregard@Sun.COM 	uint16_t		idc_mb[8];
1651*12279SDaniel.Beauregard@Sun.COM 	uint8_t			idc_restart_timer;
1652*12279SDaniel.Beauregard@Sun.COM 	uint8_t			idc_flash_acc_timer;
16539793SDaniel.Beauregard@Sun.COM 
16549793SDaniel.Beauregard@Sun.COM 	/* VLAN ID and MAC address */
16559793SDaniel.Beauregard@Sun.COM 	uint8_t			fcoe_vnport_mac[6];
16569793SDaniel.Beauregard@Sun.COM 	uint16_t		fabric_params;
16579793SDaniel.Beauregard@Sun.COM 	uint16_t		fcoe_vlan_id;
16589793SDaniel.Beauregard@Sun.COM 	uint16_t		fcoe_fcf_idx;
165911541SDaniel.Beauregard@Sun.COM 	nvram_cache_desc_t	*nvram_cache;
166011924SDaniel.Beauregard@Sun.COM 
166111924SDaniel.Beauregard@Sun.COM 	/* NetXen context */
166211924SDaniel.Beauregard@Sun.COM 	ddi_acc_handle_t	db_dev_handle;
166311924SDaniel.Beauregard@Sun.COM 	caddr_t			db_iobase;
166411924SDaniel.Beauregard@Sun.COM 	uint64_t		first_page_group_start;
166511924SDaniel.Beauregard@Sun.COM 	uint64_t		first_page_group_end;
166611924SDaniel.Beauregard@Sun.COM 	uint64_t		mn_win_crb;
166711924SDaniel.Beauregard@Sun.COM 	caddr_t			nx_pcibase;	/* BAR0 base I/O address */
166811924SDaniel.Beauregard@Sun.COM 	uint32_t		crb_win;
166911924SDaniel.Beauregard@Sun.COM 	uint32_t		ddr_mn_window;
167011924SDaniel.Beauregard@Sun.COM 	uint32_t		qdr_sn_window;
167111924SDaniel.Beauregard@Sun.COM 	uint32_t		*nx_req_in;
167211924SDaniel.Beauregard@Sun.COM 	caddr_t			db_read;
167311924SDaniel.Beauregard@Sun.COM 	uint32_t		pci_bus_addr;
167411924SDaniel.Beauregard@Sun.COM 	struct legacy_intr_set	nx_legacy_intr;
167511924SDaniel.Beauregard@Sun.COM 	uint32_t		bootloader_size;
167611924SDaniel.Beauregard@Sun.COM 	uint32_t		bootloader_addr;
167711924SDaniel.Beauregard@Sun.COM 	uint32_t		flash_fw_size;
1678*12279SDaniel.Beauregard@Sun.COM 	uint16_t		iidma_rate;
167911924SDaniel.Beauregard@Sun.COM 	uint8_t			function_number;
1680*12279SDaniel.Beauregard@Sun.COM 	uint8_t			timeout_cnt;
16818311SSukumar.Swaminathan@Sun.COM } ql_adapter_state_t;
16828311SSukumar.Swaminathan@Sun.COM 
16838311SSukumar.Swaminathan@Sun.COM /*
16848311SSukumar.Swaminathan@Sun.COM  * adapter state flags
16858311SSukumar.Swaminathan@Sun.COM  */
16868311SSukumar.Swaminathan@Sun.COM #define	FCA_BOUND			BIT_0
16878311SSukumar.Swaminathan@Sun.COM #define	QL_OPENED			BIT_1
16888311SSukumar.Swaminathan@Sun.COM #define	ONLINE				BIT_2
16898311SSukumar.Swaminathan@Sun.COM #define	INTERRUPTS_ENABLED		BIT_3
16909156SDaniel.Beauregard@Sun.COM #define	ABORT_CMDS_LOOP_DOWN_TMO	BIT_4
16918311SSukumar.Swaminathan@Sun.COM #define	POINT_TO_POINT			BIT_5
16928311SSukumar.Swaminathan@Sun.COM #define	IP_ENABLED			BIT_6
16938311SSukumar.Swaminathan@Sun.COM #define	IP_INITIALIZED			BIT_7
16949446SDaniel.Beauregard@Sun.COM #define	MENLO_LOGIN_OPERATIONAL		BIT_8
16958311SSukumar.Swaminathan@Sun.COM #define	ADAPTER_SUSPENDED		BIT_9
16968311SSukumar.Swaminathan@Sun.COM #define	ADAPTER_TIMER_BUSY		BIT_10
16978311SSukumar.Swaminathan@Sun.COM #define	PARITY_ERROR			BIT_11
16988311SSukumar.Swaminathan@Sun.COM #define	FLASH_ERRLOG_MARKER		BIT_12
16998311SSukumar.Swaminathan@Sun.COM #define	VP_ENABLED			BIT_13
17008311SSukumar.Swaminathan@Sun.COM #define	FDISC_ENABLED			BIT_14
17019446SDaniel.Beauregard@Sun.COM #define	FUNCTION_1			BIT_15
17029611SDaniel.Beauregard@Sun.COM #define	MPI_RESET_NEEDED		BIT_16
17038311SSukumar.Swaminathan@Sun.COM 
17048311SSukumar.Swaminathan@Sun.COM /*
17058311SSukumar.Swaminathan@Sun.COM  * task daemon flags
17068311SSukumar.Swaminathan@Sun.COM  */
17078311SSukumar.Swaminathan@Sun.COM #define	TASK_DAEMON_STOP_FLG		BIT_0
17088311SSukumar.Swaminathan@Sun.COM #define	TASK_DAEMON_SLEEPING_FLG	BIT_1
17098311SSukumar.Swaminathan@Sun.COM #define	TASK_DAEMON_ALIVE_FLG		BIT_2
17108311SSukumar.Swaminathan@Sun.COM #define	TASK_DAEMON_IDLE_CHK_FLG	BIT_3
17118311SSukumar.Swaminathan@Sun.COM #define	SUSPENDED_WAKEUP_FLG		BIT_4
17128311SSukumar.Swaminathan@Sun.COM #define	FC_STATE_CHANGE			BIT_5
17138311SSukumar.Swaminathan@Sun.COM #define	NEED_UNSOLICITED_BUFFERS	BIT_6
17148311SSukumar.Swaminathan@Sun.COM #define	RESET_MARKER_NEEDED		BIT_7
17158311SSukumar.Swaminathan@Sun.COM #define	RESET_ACTIVE			BIT_8
17168311SSukumar.Swaminathan@Sun.COM #define	ISP_ABORT_NEEDED		BIT_9
17178311SSukumar.Swaminathan@Sun.COM #define	ABORT_ISP_ACTIVE		BIT_10
17188311SSukumar.Swaminathan@Sun.COM #define	LOOP_RESYNC_NEEDED		BIT_11
17198311SSukumar.Swaminathan@Sun.COM #define	LOOP_RESYNC_ACTIVE		BIT_12
17208311SSukumar.Swaminathan@Sun.COM #define	LOOP_DOWN			BIT_13
17218311SSukumar.Swaminathan@Sun.COM #define	DRIVER_STALL			BIT_14
17228311SSukumar.Swaminathan@Sun.COM #define	COMMAND_WAIT_NEEDED		BIT_15
17238311SSukumar.Swaminathan@Sun.COM #define	COMMAND_WAIT_ACTIVE		BIT_16
17248311SSukumar.Swaminathan@Sun.COM #define	STATE_ONLINE			BIT_17
17258311SSukumar.Swaminathan@Sun.COM #define	ABORT_QUEUES_NEEDED		BIT_18
17268311SSukumar.Swaminathan@Sun.COM #define	TASK_DAEMON_STALLED_FLG		BIT_19
17278311SSukumar.Swaminathan@Sun.COM #define	TASK_THREAD_CALLED		BIT_20
17288311SSukumar.Swaminathan@Sun.COM #define	FIRMWARE_UP			BIT_21
17298311SSukumar.Swaminathan@Sun.COM #define	LIP_RESET_PENDING		BIT_22
17308311SSukumar.Swaminathan@Sun.COM #define	FIRMWARE_LOADED			BIT_23
17318311SSukumar.Swaminathan@Sun.COM #define	RSCN_UPDATE_NEEDED		BIT_24
17328311SSukumar.Swaminathan@Sun.COM #define	HANDLE_PORT_BYPASS_CHANGE	BIT_25
17338311SSukumar.Swaminathan@Sun.COM #define	PORT_RETRY_NEEDED		BIT_26
17348311SSukumar.Swaminathan@Sun.COM #define	TASK_DAEMON_POWERING_DOWN	BIT_27
17358311SSukumar.Swaminathan@Sun.COM #define	TD_IIDMA_NEEDED			BIT_28
17369156SDaniel.Beauregard@Sun.COM #define	SEND_PLOGI			BIT_29
1737*12279SDaniel.Beauregard@Sun.COM #define	IDC_EVENT			BIT_30
17388311SSukumar.Swaminathan@Sun.COM 
17398311SSukumar.Swaminathan@Sun.COM /*
17408311SSukumar.Swaminathan@Sun.COM  * Mailbox flags
17418311SSukumar.Swaminathan@Sun.COM  */
17429156SDaniel.Beauregard@Sun.COM #define	MBX_WANT_FLG				BIT_0
17439156SDaniel.Beauregard@Sun.COM #define	MBX_BUSY_FLG				BIT_1
17449156SDaniel.Beauregard@Sun.COM #define	MBX_INTERRUPT				BIT_2
17459156SDaniel.Beauregard@Sun.COM #define	MBX_ABORT				BIT_3
17468311SSukumar.Swaminathan@Sun.COM 
17478311SSukumar.Swaminathan@Sun.COM /*
17488311SSukumar.Swaminathan@Sun.COM  * Configuration flags
17498311SSukumar.Swaminathan@Sun.COM  */
17509156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_HARD_ADDRESS			BIT_0
17519156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_64BIT_ADDRESSING		BIT_1
17529156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_LIP_RESET			BIT_2
17539156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_FULL_LIP_LOGIN		BIT_3
17549156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_TARGET_RESET			BIT_4
17559156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_LINK_DOWN_REPORTING		BIT_5
17569446SDaniel.Beauregard@Sun.COM #define	CFG_DISABLE_EXTENDED_LOGGING_TRACE	BIT_6
17579156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_FCP_2_SUPPORT		BIT_7
17589156SDaniel.Beauregard@Sun.COM #define	CFG_MULTI_CHIP_ADAPTER			BIT_8
17599156SDaniel.Beauregard@Sun.COM #define	CFG_SBUS_CARD				BIT_9
17609156SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_2300				BIT_10
17619156SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_6322				BIT_11
17629156SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_2200				BIT_12
17639156SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_2422				BIT_13
17649156SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_25XX				BIT_14
17659156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_EXTENDED_LOGGING		BIT_15
17669156SDaniel.Beauregard@Sun.COM #define	CFG_DISABLE_RISC_CODE_LOAD		BIT_16
17679156SDaniel.Beauregard@Sun.COM #define	CFG_SET_CACHE_LINE_SIZE_1		BIT_17
17689446SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_MENLO				BIT_18
17699156SDaniel.Beauregard@Sun.COM #define	CFG_EXT_FW_INTERFACE			BIT_19
17709156SDaniel.Beauregard@Sun.COM #define	CFG_LOAD_FLASH_FW			BIT_20
17719156SDaniel.Beauregard@Sun.COM #define	CFG_DUMP_MAILBOX_TIMEOUT		BIT_21
17729156SDaniel.Beauregard@Sun.COM #define	CFG_DUMP_ISP_SYSTEM_ERROR		BIT_22
17739156SDaniel.Beauregard@Sun.COM #define	CFG_DUMP_DRIVER_COMMAND_TIMEOUT		BIT_23
17749156SDaniel.Beauregard@Sun.COM #define	CFG_DUMP_LOOP_OFFLINE_TIMEOUT		BIT_24
17759156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_FWEXTTRACE			BIT_25
17769156SDaniel.Beauregard@Sun.COM #define	CFG_ENABLE_FWFCETRACE			BIT_26
17779156SDaniel.Beauregard@Sun.COM #define	CFG_FW_MISMATCH				BIT_27
17789446SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_81XX				BIT_28
177911924SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_8021				BIT_29
178011924SDaniel.Beauregard@Sun.COM #define	CFG_FAST_TIMEOUT			BIT_30
178111924SDaniel.Beauregard@Sun.COM #define	CFG_LR_SUPPORT				BIT_31
17828311SSukumar.Swaminathan@Sun.COM 
17839446SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_2425  		(CFG_CTRL_2422 | CFG_CTRL_25XX)
178411924SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_8081  		(CFG_CTRL_8021 | CFG_CTRL_81XX)
17859446SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_2581  		(CFG_CTRL_25XX | CFG_CTRL_81XX)
17869446SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_242581		(CFG_CTRL_2422 | CFG_CTRL_25XX | CFG_CTRL_81XX)
178711924SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_24258081	(CFG_CTRL_2425 | CFG_CTRL_8081)
178811924SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_258081  	(CFG_CTRL_25XX | CFG_CTRL_8081)
178911924SDaniel.Beauregard@Sun.COM #define	CFG_CTRL_2480  		(CFG_CTRL_2422 | CFG_CTRL_8021)
17909446SDaniel.Beauregard@Sun.COM 
17919446SDaniel.Beauregard@Sun.COM #define	CFG_IST(ha, cfgflags)	(ha->cfg_flags & cfgflags)
17928311SSukumar.Swaminathan@Sun.COM 
17938311SSukumar.Swaminathan@Sun.COM /*
17948311SSukumar.Swaminathan@Sun.COM  * Interrupt configuration flags
17958311SSukumar.Swaminathan@Sun.COM  */
17969156SDaniel.Beauregard@Sun.COM #define	IFLG_INTR_LEGACY			BIT_0
17979156SDaniel.Beauregard@Sun.COM #define	IFLG_INTR_FIXED				BIT_1
17989156SDaniel.Beauregard@Sun.COM #define	IFLG_INTR_MSI				BIT_2
17999156SDaniel.Beauregard@Sun.COM #define	IFLG_INTR_MSIX				BIT_3
18008311SSukumar.Swaminathan@Sun.COM 
18018311SSukumar.Swaminathan@Sun.COM #define	IFLG_INTR_AIF	(IFLG_INTR_MSI | IFLG_INTR_FIXED | IFLG_INTR_MSIX)
18028311SSukumar.Swaminathan@Sun.COM 
18038311SSukumar.Swaminathan@Sun.COM /*
18048311SSukumar.Swaminathan@Sun.COM  * Macros to help code, maintain, etc.
18058311SSukumar.Swaminathan@Sun.COM  */
18068311SSukumar.Swaminathan@Sun.COM #define	LSB(x)		(uint8_t)(x)
18078311SSukumar.Swaminathan@Sun.COM #define	MSB(x)		(uint8_t)((uint16_t)(x) >> 8)
18088311SSukumar.Swaminathan@Sun.COM #define	MSW(x)		(uint16_t)((uint32_t)(x) >> 16)
18098311SSukumar.Swaminathan@Sun.COM #define	LSW(x)		(uint16_t)(x)
18108311SSukumar.Swaminathan@Sun.COM #define	LSD(x)		(uint32_t)(x)
18118311SSukumar.Swaminathan@Sun.COM #define	MSD(x)		(uint32_t)((uint64_t)(x) >> 32)
18128311SSukumar.Swaminathan@Sun.COM 
18138311SSukumar.Swaminathan@Sun.COM #define	SHORT_TO_LONG(lsw, msw) (uint32_t)((uint16_t)msw << 16 | (uint16_t)lsw)
18148311SSukumar.Swaminathan@Sun.COM #define	CHAR_TO_SHORT(lsb, msb) (uint16_t)((uint8_t)msb << 8 | (uint8_t)lsb)
18158311SSukumar.Swaminathan@Sun.COM #define	CHAR_TO_LONG(lsb, b1, b2, msb) \
18168311SSukumar.Swaminathan@Sun.COM 	(uint32_t)(SHORT_TO_LONG(CHAR_TO_SHORT(lsb, b1), \
18178311SSukumar.Swaminathan@Sun.COM 	CHAR_TO_SHORT(b2, msb)))
18188311SSukumar.Swaminathan@Sun.COM 
18198311SSukumar.Swaminathan@Sun.COM /* Little endian machine correction defines. */
18208311SSukumar.Swaminathan@Sun.COM #ifdef _LITTLE_ENDIAN
18218311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN_16(x)
18228311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN_24(x)
18238311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN_32(x)
18248311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN_64(x)
18258311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN(bp, bytes)
18268311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN_16(x)	ql_chg_endian((uint8_t *)x, 2)
18278311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN_24(x)	ql_chg_endian((uint8_t *)x, 3)
18288311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN_32(x)	ql_chg_endian((uint8_t *)x, 4)
18298311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN_64(x)	ql_chg_endian((uint8_t *)x, 8)
18308311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN(bp, bytes)	ql_chg_endian((uint8_t *)bp, bytes)
18318311SSukumar.Swaminathan@Sun.COM #endif /* _LITTLE_ENDIAN */
18328311SSukumar.Swaminathan@Sun.COM 
18338311SSukumar.Swaminathan@Sun.COM /* Big endian machine correction defines. */
18348311SSukumar.Swaminathan@Sun.COM #ifdef _BIG_ENDIAN
18358311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN_16(x)		ql_chg_endian((uint8_t *)x, 2)
18368311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN_24(x)		ql_chg_endian((uint8_t *)x, 3)
18378311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN_32(x)		ql_chg_endian((uint8_t *)x, 4)
18388311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN_64(x)		ql_chg_endian((uint8_t *)x, 8)
18398311SSukumar.Swaminathan@Sun.COM #define	LITTLE_ENDIAN(bp, bytes)	ql_chg_endian((uint8_t *)bp, bytes)
18408311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN_16(x)
18418311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN_24(x)
18428311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN_32(x)
18438311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN_64(x)
18448311SSukumar.Swaminathan@Sun.COM #define	BIG_ENDIAN(bp, bytes)
18458311SSukumar.Swaminathan@Sun.COM #endif /* _BIG_ENDIAN */
18468311SSukumar.Swaminathan@Sun.COM 
18478311SSukumar.Swaminathan@Sun.COM #define	LOCAL_LOOP_ID(x)	(x <= LAST_LOCAL_LOOP_ID)
18488311SSukumar.Swaminathan@Sun.COM 
18498311SSukumar.Swaminathan@Sun.COM #define	FABRIC_LOOP_ID(x)	(x == FL_PORT_LOOP_ID || \
18508311SSukumar.Swaminathan@Sun.COM     x == SIMPLE_NAME_SERVER_LOOP_ID)
18518311SSukumar.Swaminathan@Sun.COM 
18528311SSukumar.Swaminathan@Sun.COM #define	SNS_LOOP_ID(x)		(x >= SNS_FIRST_LOOP_ID && \
18538311SSukumar.Swaminathan@Sun.COM     x <= SNS_LAST_LOOP_ID)
18548311SSukumar.Swaminathan@Sun.COM 
18558311SSukumar.Swaminathan@Sun.COM #define	BROADCAST_LOOP_ID(x)	(x == IP_BROADCAST_LOOP_ID)
18568311SSukumar.Swaminathan@Sun.COM 
18578311SSukumar.Swaminathan@Sun.COM #define	VALID_LOOP_ID(x)	(LOCAL_LOOP_ID(x) || SNS_LOOP_ID(x) || \
18588311SSukumar.Swaminathan@Sun.COM     FABRIC_LOOP_ID(x) || BROADCAST_LOOP_ID(x))
18598311SSukumar.Swaminathan@Sun.COM 
18608311SSukumar.Swaminathan@Sun.COM #define	VALID_N_PORT_HDL(x)	(x <= LAST_N_PORT_HDL || \
18618311SSukumar.Swaminathan@Sun.COM 	(x >= SNS_24XX_HDL && x <= BROADCAST_24XX_HDL))
18628311SSukumar.Swaminathan@Sun.COM 
186311924SDaniel.Beauregard@Sun.COM #define	VALID_DEVICE_ID(ha, x)  (CFG_IST(ha, CFG_CTRL_24258081) ? \
18648311SSukumar.Swaminathan@Sun.COM 	VALID_N_PORT_HDL(x) : VALID_LOOP_ID(x))
18658311SSukumar.Swaminathan@Sun.COM 
186611924SDaniel.Beauregard@Sun.COM #define	VALID_TARGET_ID(ha, x)  (CFG_IST(ha, CFG_CTRL_24258081) ? \
18678311SSukumar.Swaminathan@Sun.COM 	(x <= LAST_N_PORT_HDL) : (LOCAL_LOOP_ID(x) || SNS_LOOP_ID(x)))
18688311SSukumar.Swaminathan@Sun.COM 
186911924SDaniel.Beauregard@Sun.COM #define	RESERVED_LOOP_ID(ha, x) (CFG_IST(ha, CFG_CTRL_24258081) ? \
18708311SSukumar.Swaminathan@Sun.COM 	(x > LAST_N_PORT_HDL && x <= FL_PORT_24XX_HDL) : \
18718311SSukumar.Swaminathan@Sun.COM 	(x >= FL_PORT_LOOP_ID && x <= SIMPLE_NAME_SERVER_LOOP_ID))
18728311SSukumar.Swaminathan@Sun.COM 
18738311SSukumar.Swaminathan@Sun.COM #define	QL_LOOP_TRANSITION	(RESET_MARKER_NEEDED | RESET_ACTIVE | \
18748311SSukumar.Swaminathan@Sun.COM 				ISP_ABORT_NEEDED | ABORT_ISP_ACTIVE | \
18758311SSukumar.Swaminathan@Sun.COM 				LOOP_RESYNC_NEEDED | LOOP_RESYNC_ACTIVE | \
18768311SSukumar.Swaminathan@Sun.COM 				COMMAND_WAIT_NEEDED | COMMAND_WAIT_ACTIVE)
18778311SSukumar.Swaminathan@Sun.COM 
18788311SSukumar.Swaminathan@Sun.COM #define	QL_SUSPENDED		(QL_LOOP_TRANSITION | LOOP_DOWN | DRIVER_STALL)
18798311SSukumar.Swaminathan@Sun.COM 
18808311SSukumar.Swaminathan@Sun.COM #define	LOOP_RECONFIGURE(ha)	(ha->task_daemon_flags & (QL_LOOP_TRANSITION | \
18818311SSukumar.Swaminathan@Sun.COM 				DRIVER_STALL))
18828311SSukumar.Swaminathan@Sun.COM 
18838311SSukumar.Swaminathan@Sun.COM #define	DRIVER_SUSPENDED(ha)	(ha->task_daemon_flags & QL_SUSPENDED)
18848311SSukumar.Swaminathan@Sun.COM 
18858311SSukumar.Swaminathan@Sun.COM #define	LOOP_NOT_READY(ha)	(ha->task_daemon_flags & (QL_LOOP_TRANSITION | \
18868311SSukumar.Swaminathan@Sun.COM 				LOOP_DOWN))
18878311SSukumar.Swaminathan@Sun.COM 
18888311SSukumar.Swaminathan@Sun.COM #define	LOOP_READY(ha)		(LOOP_NOT_READY(ha) == 0)
18898311SSukumar.Swaminathan@Sun.COM 
18908311SSukumar.Swaminathan@Sun.COM #define	QL_TASK_PENDING(ha)	( \
18918311SSukumar.Swaminathan@Sun.COM     ha->task_daemon_flags & (QL_LOOP_TRANSITION | ABORT_QUEUES_NEEDED | \
18928311SSukumar.Swaminathan@Sun.COM     PORT_RETRY_NEEDED) || ha->callback_queue.first != NULL)
18938311SSukumar.Swaminathan@Sun.COM 
18948311SSukumar.Swaminathan@Sun.COM #define	QL_DAEMON_NOT_ACTIVE(ha)	( \
18958311SSukumar.Swaminathan@Sun.COM 	!(ha->task_daemon_flags & TASK_DAEMON_ALIVE_FLG) || \
18968311SSukumar.Swaminathan@Sun.COM 	ha->task_daemon_flags & (TASK_DAEMON_SLEEPING_FLG | \
18978311SSukumar.Swaminathan@Sun.COM 	TASK_DAEMON_STOP_FLG))
18988311SSukumar.Swaminathan@Sun.COM 
18998311SSukumar.Swaminathan@Sun.COM #define	QL_DAEMON_SUSPENDED(ha)	(\
19008311SSukumar.Swaminathan@Sun.COM 	(((ha)->cprinfo.cc_events & CALLB_CPR_START) ||\
19018311SSukumar.Swaminathan@Sun.COM 	((ha)->flags & ADAPTER_SUSPENDED)))
19028311SSukumar.Swaminathan@Sun.COM 
190311924SDaniel.Beauregard@Sun.COM #define	INTERRUPT_PENDING(ha)	(CFG_IST(ha, CFG_CTRL_8021) ? \
190411924SDaniel.Beauregard@Sun.COM 				RD32_IO_REG(ha, nx_risc_int) & NX_RISC_INT : \
190511924SDaniel.Beauregard@Sun.COM 				RD16_IO_REG(ha, istatus) & RISC_INT)
190611924SDaniel.Beauregard@Sun.COM 
190711924SDaniel.Beauregard@Sun.COM #define	QL_MAX_FRAME_SIZE(ha) \
190811924SDaniel.Beauregard@Sun.COM 	    (uint16_t)(CFG_IST(ha, CFG_CTRL_24258081) ? CHAR_TO_SHORT( \
190911924SDaniel.Beauregard@Sun.COM 	    ha->init_ctrl_blk.cb24.max_frame_length[0], \
191011924SDaniel.Beauregard@Sun.COM 	    ha->init_ctrl_blk.cb24.max_frame_length[1]) : CHAR_TO_SHORT( \
191111924SDaniel.Beauregard@Sun.COM 	    ha->init_ctrl_blk.cb.max_frame_length[0], \
191211924SDaniel.Beauregard@Sun.COM 	    ha->init_ctrl_blk.cb.max_frame_length[1]))
191311924SDaniel.Beauregard@Sun.COM 
19148311SSukumar.Swaminathan@Sun.COM /*
19158311SSukumar.Swaminathan@Sun.COM  * Locking Macro Definitions
19168311SSukumar.Swaminathan@Sun.COM  */
19178311SSukumar.Swaminathan@Sun.COM #define	GLOBAL_STATE_LOCK()		mutex_enter(&ql_global_mutex)
19188311SSukumar.Swaminathan@Sun.COM #define	GLOBAL_STATE_UNLOCK()		mutex_exit(&ql_global_mutex)
19198311SSukumar.Swaminathan@Sun.COM 
19208311SSukumar.Swaminathan@Sun.COM #define	TRY_DEVICE_QUEUE_LOCK(q)	mutex_tryenter(&q->mutex)
19218311SSukumar.Swaminathan@Sun.COM #define	DEVICE_QUEUE_LOCK(q)		mutex_enter(&q->mutex)
19228311SSukumar.Swaminathan@Sun.COM #define	DEVICE_QUEUE_UNLOCK(q)		mutex_exit(&q->mutex)
19238311SSukumar.Swaminathan@Sun.COM 
192410240SDaniel.Beauregard@Sun.COM #define	TRY_MBX_REGISTER_LOCK(ha)	mutex_tryenter(&ha->pha->mbx_mutex)
192510240SDaniel.Beauregard@Sun.COM #define	MBX_REGISTER_LOCK_OWNER(ha)	mutex_owner(&ha->pha->mbx_mutex)
19268311SSukumar.Swaminathan@Sun.COM #define	MBX_REGISTER_LOCK(ha)		mutex_enter(&ha->pha->mbx_mutex)
19278311SSukumar.Swaminathan@Sun.COM #define	MBX_REGISTER_UNLOCK(ha)		mutex_exit(&ha->pha->mbx_mutex)
19288311SSukumar.Swaminathan@Sun.COM 
19298311SSukumar.Swaminathan@Sun.COM #define	INTR_LOCK(ha)			mutex_enter(&ha->pha->intr_mutex)
19308311SSukumar.Swaminathan@Sun.COM #define	INTR_UNLOCK(ha)			mutex_exit(&ha->pha->intr_mutex)
19318311SSukumar.Swaminathan@Sun.COM 
19328311SSukumar.Swaminathan@Sun.COM #define	TASK_DAEMON_LOCK(ha)		mutex_enter(&ha->pha->task_daemon_mutex)
19338311SSukumar.Swaminathan@Sun.COM #define	TASK_DAEMON_UNLOCK(ha)		mutex_exit(&ha->pha->task_daemon_mutex)
19348311SSukumar.Swaminathan@Sun.COM 
19358311SSukumar.Swaminathan@Sun.COM #define	REQUEST_RING_LOCK(ha)		mutex_enter(&ha->pha->req_ring_mutex)
19368311SSukumar.Swaminathan@Sun.COM #define	REQUEST_RING_UNLOCK(ha)		mutex_exit(&ha->pha->req_ring_mutex)
19378311SSukumar.Swaminathan@Sun.COM 
19388311SSukumar.Swaminathan@Sun.COM #define	CACHE_LOCK(ha)			mutex_enter(&ha->pha->cache_mutex);
19398311SSukumar.Swaminathan@Sun.COM #define	CACHE_UNLOCK(ha)		mutex_exit(&ha->pha->cache_mutex);
19408311SSukumar.Swaminathan@Sun.COM 
19418311SSukumar.Swaminathan@Sun.COM #define	PORTMANAGE_LOCK(ha)		mutex_enter(&ha->pha->portmutex);
19428311SSukumar.Swaminathan@Sun.COM #define	PORTMANAGE_UNLOCK(ha)		mutex_exit(&ha->pha->portmutex);
19438311SSukumar.Swaminathan@Sun.COM 
19448311SSukumar.Swaminathan@Sun.COM #define	ADAPTER_STATE_LOCK(ha)		mutex_enter(&ha->pha->mutex)
19458311SSukumar.Swaminathan@Sun.COM #define	ADAPTER_STATE_UNLOCK(ha)	mutex_exit(&ha->pha->mutex)
19468311SSukumar.Swaminathan@Sun.COM 
19479156SDaniel.Beauregard@Sun.COM #define	QL_DUMP_LOCK(ha)		mutex_enter(&ha->pha->dump_mutex)
19489156SDaniel.Beauregard@Sun.COM #define	QL_DUMP_UNLOCK(ha)		mutex_exit(&ha->pha->dump_mutex)
19499156SDaniel.Beauregard@Sun.COM 
19508311SSukumar.Swaminathan@Sun.COM #define	QL_PM_LOCK(ha)			mutex_enter(&ha->pha->pm_mutex)
19518311SSukumar.Swaminathan@Sun.COM #define	QL_PM_UNLOCK(ha)		mutex_exit(&ha->pha->pm_mutex)
19528311SSukumar.Swaminathan@Sun.COM 
19538311SSukumar.Swaminathan@Sun.COM #define	QL_UB_LOCK(ha)			mutex_enter(&ha->pha->ub_mutex)
19548311SSukumar.Swaminathan@Sun.COM #define	QL_UB_UNLOCK(ha)		mutex_exit(&ha->pha->ub_mutex)
19558311SSukumar.Swaminathan@Sun.COM 
19568311SSukumar.Swaminathan@Sun.COM #define	GLOBAL_HW_LOCK()		mutex_enter(&ql_global_hw_mutex)
19578311SSukumar.Swaminathan@Sun.COM #define	GLOBAL_HW_UNLOCK()		mutex_exit(&ql_global_hw_mutex)
19588311SSukumar.Swaminathan@Sun.COM 
195911541SDaniel.Beauregard@Sun.COM #define	NVRAM_CACHE_LOCK(ha)		mutex_enter(&ha->nvram_cache->mutex);
196011541SDaniel.Beauregard@Sun.COM #define	NVRAM_CACHE_UNLOCK(ha)		mutex_exit(&ha->nvram_cache->mutex);
196111541SDaniel.Beauregard@Sun.COM 
19628311SSukumar.Swaminathan@Sun.COM /*
19638311SSukumar.Swaminathan@Sun.COM  * PCI power management control/status register location
19648311SSukumar.Swaminathan@Sun.COM  */
19658311SSukumar.Swaminathan@Sun.COM #define	QL_PM_CS_REG			0x48
19668311SSukumar.Swaminathan@Sun.COM 
19678311SSukumar.Swaminathan@Sun.COM /*
19688311SSukumar.Swaminathan@Sun.COM  * ql component
19698311SSukumar.Swaminathan@Sun.COM  */
19708311SSukumar.Swaminathan@Sun.COM #define	QL_POWER_COMPONENT		0
19718311SSukumar.Swaminathan@Sun.COM 
19728311SSukumar.Swaminathan@Sun.COM typedef struct ql_config_space {
19738311SSukumar.Swaminathan@Sun.COM 	uint16_t	chs_command;
19748311SSukumar.Swaminathan@Sun.COM 	uint8_t		chs_cache_line_size;
19758311SSukumar.Swaminathan@Sun.COM 	uint8_t		chs_latency_timer;
19768311SSukumar.Swaminathan@Sun.COM 	uint8_t		chs_header_type;
19778311SSukumar.Swaminathan@Sun.COM 	uint8_t		chs_sec_latency_timer;
19788311SSukumar.Swaminathan@Sun.COM 	uint8_t		chs_bridge_control;
19798311SSukumar.Swaminathan@Sun.COM 	uint32_t	chs_base0;
19808311SSukumar.Swaminathan@Sun.COM 	uint32_t	chs_base1;
19818311SSukumar.Swaminathan@Sun.COM 	uint32_t	chs_base2;
19828311SSukumar.Swaminathan@Sun.COM 	uint32_t	chs_base3;
19838311SSukumar.Swaminathan@Sun.COM 	uint32_t	chs_base4;
19848311SSukumar.Swaminathan@Sun.COM 	uint32_t	chs_base5;
19858311SSukumar.Swaminathan@Sun.COM } ql_config_space_t;
19868311SSukumar.Swaminathan@Sun.COM 
19878311SSukumar.Swaminathan@Sun.COM #ifdef	USE_DDI_INTERFACES
19888311SSukumar.Swaminathan@Sun.COM 
19898311SSukumar.Swaminathan@Sun.COM #define	QL_SAVE_CONFIG_REGS(dip)		pci_save_config_regs(dip)
19908311SSukumar.Swaminathan@Sun.COM #define	QL_RESTORE_CONFIG_REGS(dip)		pci_restore_config_regs(dip)
19918311SSukumar.Swaminathan@Sun.COM 
19928311SSukumar.Swaminathan@Sun.COM #else /* USE_DDI_INTERFACES */
19938311SSukumar.Swaminathan@Sun.COM 
19948311SSukumar.Swaminathan@Sun.COM #define	QL_SAVE_CONFIG_REGS(dip)		ql_save_config_regs(dip)
19958311SSukumar.Swaminathan@Sun.COM #define	QL_RESTORE_CONFIG_REGS(dip)		ql_restore_config_regs(dip)
19968311SSukumar.Swaminathan@Sun.COM 
19978311SSukumar.Swaminathan@Sun.COM #endif /* USE_DDI_INTERFACES */
19988311SSukumar.Swaminathan@Sun.COM 
19998311SSukumar.Swaminathan@Sun.COM #define	QL_IS_SET(x, y)	(((x) & (y)) == (y))
20008311SSukumar.Swaminathan@Sun.COM 
20018311SSukumar.Swaminathan@Sun.COM /*
20028311SSukumar.Swaminathan@Sun.COM  * QL local function return status codes
20038311SSukumar.Swaminathan@Sun.COM  */
20048311SSukumar.Swaminathan@Sun.COM #define	QL_SUCCESS			0x4000
20058311SSukumar.Swaminathan@Sun.COM #define	QL_INVALID_COMMAND		0x4001
20068311SSukumar.Swaminathan@Sun.COM #define	QL_INTERFACE_ERROR		0x4002
20078311SSukumar.Swaminathan@Sun.COM #define	QL_TEST_FAILED			0x4003
20088311SSukumar.Swaminathan@Sun.COM #define	QL_COMMAND_ERROR		0x4005
20098311SSukumar.Swaminathan@Sun.COM #define	QL_PARAMETER_ERROR		0x4006
20108311SSukumar.Swaminathan@Sun.COM #define	QL_PORT_ID_USED			0x4007
20118311SSukumar.Swaminathan@Sun.COM #define	QL_LOOP_ID_USED			0x4008
20128311SSukumar.Swaminathan@Sun.COM #define	QL_ALL_IDS_IN_USE		0x4009
20138311SSukumar.Swaminathan@Sun.COM #define	QL_NOT_LOGGED_IN		0x400A
20148311SSukumar.Swaminathan@Sun.COM #define	QL_LOOP_DOWN			0x400B
20158311SSukumar.Swaminathan@Sun.COM #define	QL_LOOP_BACK_ERROR		0x400C
20168311SSukumar.Swaminathan@Sun.COM #define	QL_CHECKSUM_ERROR		0x4010
20179446SDaniel.Beauregard@Sun.COM #define	QL_CONSUMED			0x4011
20188311SSukumar.Swaminathan@Sun.COM 
20198311SSukumar.Swaminathan@Sun.COM #define	QL_FUNCTION_TIMEOUT		0x100
20208311SSukumar.Swaminathan@Sun.COM #define	QL_FUNCTION_PARAMETER_ERROR	0x101
20218311SSukumar.Swaminathan@Sun.COM #define	QL_FUNCTION_FAILED		0x102
20228311SSukumar.Swaminathan@Sun.COM #define	QL_MEMORY_ALLOC_FAILED		0x103
20238311SSukumar.Swaminathan@Sun.COM #define	QL_FABRIC_NOT_INITIALIZED	0x104
20248311SSukumar.Swaminathan@Sun.COM #define	QL_LOCK_TIMEOUT			0x105
20258311SSukumar.Swaminathan@Sun.COM #define	QL_ABORTED			0x106
20268311SSukumar.Swaminathan@Sun.COM #define	QL_FUNCTION_SUSPENDED		0x107
20278311SSukumar.Swaminathan@Sun.COM #define	QL_END_OF_DATA			0x108
20288311SSukumar.Swaminathan@Sun.COM #define	QL_IP_UNSUPPORTED		0x109
20298311SSukumar.Swaminathan@Sun.COM #define	QL_PM_ERROR			0x10a
20308311SSukumar.Swaminathan@Sun.COM #define	QL_DATA_EXISTS			0x10b
20318311SSukumar.Swaminathan@Sun.COM #define	QL_NOT_SUPPORTED		0x10c
20328311SSukumar.Swaminathan@Sun.COM #define	QL_MEMORY_FULL			0x10d
20338311SSukumar.Swaminathan@Sun.COM #define	QL_FW_NOT_SUPPORTED		0x10e
20348311SSukumar.Swaminathan@Sun.COM #define	QL_FWMODLOAD_FAILED		0x10f
20359156SDaniel.Beauregard@Sun.COM #define	QL_FWSYM_NOT_FOUND		0x110
20369156SDaniel.Beauregard@Sun.COM #define	QL_LOGIN_NOT_SUPPORTED		0x111
20378311SSukumar.Swaminathan@Sun.COM 
20388311SSukumar.Swaminathan@Sun.COM /*
20398311SSukumar.Swaminathan@Sun.COM  * SBus card FPGA register offsets.
20408311SSukumar.Swaminathan@Sun.COM  */
20418311SSukumar.Swaminathan@Sun.COM #define	FPGA_CONF		0x100
20428311SSukumar.Swaminathan@Sun.COM #define	FPGA_EEPROM_LOADDR	0x102
20438311SSukumar.Swaminathan@Sun.COM #define	FPGA_EEPROM_HIADDR	0x104
20448311SSukumar.Swaminathan@Sun.COM #define	FPGA_EEPROM_DATA	0x106
20458311SSukumar.Swaminathan@Sun.COM #define	FPGA_REVISION		0x108
20468311SSukumar.Swaminathan@Sun.COM 
20478311SSukumar.Swaminathan@Sun.COM #define	SBUS_FLASH_WRITE_ENABLE	0x0080
20488311SSukumar.Swaminathan@Sun.COM #define	QL_SBUS_FCODE_SIZE	0x30000
20498311SSukumar.Swaminathan@Sun.COM #define	QL_FCODE_OFFSET		0
20508311SSukumar.Swaminathan@Sun.COM #define	QL_FPGA_SIZE		0x40000
20518311SSukumar.Swaminathan@Sun.COM #define	QL_FPGA_OFFSET		0x40000
20528311SSukumar.Swaminathan@Sun.COM 
20538311SSukumar.Swaminathan@Sun.COM #define	READ_PORT_ID(addr)	((uint32_t)((((uint32_t)((addr)[0])) << 16) | \
20548311SSukumar.Swaminathan@Sun.COM 					(((uint32_t)((addr)[1])) << 8) | \
20558311SSukumar.Swaminathan@Sun.COM 					(((uint32_t)((addr)[2])))))
20568311SSukumar.Swaminathan@Sun.COM #define	READ_PORT_NAME(addr) ((u_longlong_t)((((uint64_t)((addr)[0])) << 56) | \
20578311SSukumar.Swaminathan@Sun.COM 					(((uint64_t)((addr)[1])) << 48) | \
20588311SSukumar.Swaminathan@Sun.COM 					(((uint64_t)((addr)[2])) << 40) | \
20598311SSukumar.Swaminathan@Sun.COM 					(((uint64_t)((addr)[3])) << 32) | \
20608311SSukumar.Swaminathan@Sun.COM 					(((uint64_t)((addr)[4])) << 24) | \
20618311SSukumar.Swaminathan@Sun.COM 					(((uint64_t)((addr)[5])) << 16) | \
20628311SSukumar.Swaminathan@Sun.COM 					(((uint64_t)((addr)[6])) << 8) | \
20638311SSukumar.Swaminathan@Sun.COM 					(((uint64_t)((addr)[7])))))
20649156SDaniel.Beauregard@Sun.COM /*
20659156SDaniel.Beauregard@Sun.COM  * Structure used to associate cmds with strings which describe them.
20669156SDaniel.Beauregard@Sun.COM  */
20679156SDaniel.Beauregard@Sun.COM typedef struct cmd_table_entry {
20689156SDaniel.Beauregard@Sun.COM 	uint16_t cmd;
20699156SDaniel.Beauregard@Sun.COM 	char    *string;
20709156SDaniel.Beauregard@Sun.COM } cmd_table_t;
20719156SDaniel.Beauregard@Sun.COM 
20729156SDaniel.Beauregard@Sun.COM /*
20739156SDaniel.Beauregard@Sun.COM  * ELS command table initializer
20749156SDaniel.Beauregard@Sun.COM  */
20759156SDaniel.Beauregard@Sun.COM #define	ELS_CMD_TABLE()					\
20769156SDaniel.Beauregard@Sun.COM {							\
20779156SDaniel.Beauregard@Sun.COM 	{LA_ELS_RJT, "LA_ELS_RJT"},			\
20789156SDaniel.Beauregard@Sun.COM 	{LA_ELS_ACC, "LA_ELS_ACC"},			\
20799156SDaniel.Beauregard@Sun.COM 	{LA_ELS_PLOGI, "LA_ELS_PLOGI"},			\
20809156SDaniel.Beauregard@Sun.COM 	{LA_ELS_PDISC, "LA_ELS_PDISC"},			\
20819156SDaniel.Beauregard@Sun.COM 	{LA_ELS_FLOGI, "LA_ELS_FLOGI"},			\
20829156SDaniel.Beauregard@Sun.COM 	{LA_ELS_FDISC, "LA_ELS_FDISC"},			\
20839156SDaniel.Beauregard@Sun.COM 	{LA_ELS_LOGO, "LA_ELS_LOGO"},			\
20849156SDaniel.Beauregard@Sun.COM 	{LA_ELS_PRLI, "LA_ELS_PRLI"},			\
20859156SDaniel.Beauregard@Sun.COM 	{LA_ELS_PRLO, "LA_ELS_PRLO"},			\
20869156SDaniel.Beauregard@Sun.COM 	{LA_ELS_ADISC, "LA_ELS_ADISC"},			\
20879156SDaniel.Beauregard@Sun.COM 	{LA_ELS_LINIT, "LA_ELS_LINIT"},			\
20889156SDaniel.Beauregard@Sun.COM 	{LA_ELS_LPC, "LA_ELS_LPC"},			\
20899156SDaniel.Beauregard@Sun.COM 	{LA_ELS_LSTS, "LA_ELS_LSTS"},			\
20909156SDaniel.Beauregard@Sun.COM 	{LA_ELS_SCR, "LA_ELS_SCR"},			\
20919156SDaniel.Beauregard@Sun.COM 	{LA_ELS_RSCN, "LA_ELS_RSCN"},			\
20929156SDaniel.Beauregard@Sun.COM 	{LA_ELS_FARP_REQ, "LA_ELS_FARP_REQ"},		\
20939156SDaniel.Beauregard@Sun.COM 	{LA_ELS_FARP_REPLY, "LA_ELS_FARP_REPLY"},	\
20949156SDaniel.Beauregard@Sun.COM 	{LA_ELS_RLS, "LA_ELS_RLS"},			\
20959156SDaniel.Beauregard@Sun.COM 	{LA_ELS_RNID, "LA_ELS_RNID"},			\
20969156SDaniel.Beauregard@Sun.COM 	{NULL, NULL}					\
20979156SDaniel.Beauregard@Sun.COM }
20989156SDaniel.Beauregard@Sun.COM 
20999156SDaniel.Beauregard@Sun.COM /*
21009156SDaniel.Beauregard@Sun.COM  * ELS Passthru IOCB data segment descriptor.
21019156SDaniel.Beauregard@Sun.COM  */
21029156SDaniel.Beauregard@Sun.COM typedef struct data_seg_desc {
21039156SDaniel.Beauregard@Sun.COM 	uint32_t addr[2];
21049156SDaniel.Beauregard@Sun.COM 	uint32_t length;
21059156SDaniel.Beauregard@Sun.COM } data_seg_desc_t;
21069156SDaniel.Beauregard@Sun.COM 
21079156SDaniel.Beauregard@Sun.COM /*
21089156SDaniel.Beauregard@Sun.COM  * ELS descriptor used to abstract the hosts fibre channel packet
21099156SDaniel.Beauregard@Sun.COM  * from the ISP ELS code.
21109156SDaniel.Beauregard@Sun.COM  */
21119156SDaniel.Beauregard@Sun.COM typedef struct els_desc {
21129156SDaniel.Beauregard@Sun.COM 	uint8_t			els;		/* the ELS command code */
21139156SDaniel.Beauregard@Sun.COM 	ddi_acc_handle_t	els_handle;
21149156SDaniel.Beauregard@Sun.COM 	uint16_t		n_port_handle;
21159156SDaniel.Beauregard@Sun.COM 	port_id_t		d_id;
21169156SDaniel.Beauregard@Sun.COM 	port_id_t		s_id;
21179156SDaniel.Beauregard@Sun.COM 	uint16_t		control_flags;
21189156SDaniel.Beauregard@Sun.COM 	uint32_t		cmd_byte_count;
21199156SDaniel.Beauregard@Sun.COM 	uint32_t		rsp_byte_count;
21209156SDaniel.Beauregard@Sun.COM 	data_seg_desc_t		tx_dsd;		/* FC frame payload */
21219156SDaniel.Beauregard@Sun.COM 	data_seg_desc_t		rx_dsd;		/* ELS resp payload buffer */
21229156SDaniel.Beauregard@Sun.COM } els_descriptor_t;
21239156SDaniel.Beauregard@Sun.COM 
21249156SDaniel.Beauregard@Sun.COM typedef struct prli_svc_pram_resp_page {
21259156SDaniel.Beauregard@Sun.COM 	uint8_t		type_code;
21269156SDaniel.Beauregard@Sun.COM 	uint8_t		type_code_ext;
21279156SDaniel.Beauregard@Sun.COM 	uint16_t	prli_resp_flags;
21289156SDaniel.Beauregard@Sun.COM 	uint32_t	orig_process_associator;
21299156SDaniel.Beauregard@Sun.COM 	uint32_t	resp_process_associator;
21309156SDaniel.Beauregard@Sun.COM 	uint32_t	common_parameters;
21319156SDaniel.Beauregard@Sun.COM } prli_svc_pram_resp_page_t;
21329156SDaniel.Beauregard@Sun.COM 
21339156SDaniel.Beauregard@Sun.COM /*
21349156SDaniel.Beauregard@Sun.COM  * PRLI accept Service Parameter Page Word 3
21359156SDaniel.Beauregard@Sun.COM  */
21369156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_WRITE_FCP_XFR_RDY_DISABLED	BIT_0
21379156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_READ_FCP_XFR_RDY_DISABLED	BIT_1
21389156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_OBSOLETE_BIT_2			BIT_2
21399156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_OBSOLETE_BIT_3			BIT_3
21409156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_TARGET_FUNCTION			BIT_4
21419156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_INITIATOR_FUNCTION		BIT_5
21429156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_DATA_OVERLAY_ALLOWED		BIT_6
21439156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_CONFIRMED_COMP_ALLOWED		BIT_7
21449156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_RETRY				BIT_8
21459156SDaniel.Beauregard@Sun.COM #define	PRLI_W3_TASK_RETRY_ID_REQUESTED		BIT_9
21469156SDaniel.Beauregard@Sun.COM 
21479156SDaniel.Beauregard@Sun.COM typedef struct prli_acc_resp {
21489156SDaniel.Beauregard@Sun.COM 	uint8_t				ls_code;
21499156SDaniel.Beauregard@Sun.COM 	uint8_t				page_length;
21509156SDaniel.Beauregard@Sun.COM 	uint16_t			payload_length;
21519156SDaniel.Beauregard@Sun.COM 	struct prli_svc_pram_resp_page	svc_params;
21529156SDaniel.Beauregard@Sun.COM } prli_acc_resp_t;
21539156SDaniel.Beauregard@Sun.COM 
21549156SDaniel.Beauregard@Sun.COM #define	EL_TRACE_BUF_SIZE	8192
21558311SSukumar.Swaminathan@Sun.COM 
21568311SSukumar.Swaminathan@Sun.COM /*
21578311SSukumar.Swaminathan@Sun.COM  * Global Data in ql_api.c source file.
21588311SSukumar.Swaminathan@Sun.COM  */
21598311SSukumar.Swaminathan@Sun.COM extern void		*ql_state;		/* for soft state routine */
21608311SSukumar.Swaminathan@Sun.COM extern uint32_t		ql_os_release_level;
21618311SSukumar.Swaminathan@Sun.COM extern ql_head_t	ql_hba;
21628311SSukumar.Swaminathan@Sun.COM extern kmutex_t		ql_global_mutex;
21638311SSukumar.Swaminathan@Sun.COM extern kmutex_t		ql_global_hw_mutex;
21648311SSukumar.Swaminathan@Sun.COM extern kmutex_t		ql_global_el_mutex;
21658311SSukumar.Swaminathan@Sun.COM extern uint8_t		ql_ip_fast_post_count;
21668311SSukumar.Swaminathan@Sun.COM extern uint32_t		ql_ip_buffer_count;
21678311SSukumar.Swaminathan@Sun.COM extern uint32_t		ql_ip_low_water;
21688311SSukumar.Swaminathan@Sun.COM extern uint8_t		ql_alpa_to_index[];
21698311SSukumar.Swaminathan@Sun.COM extern uint32_t		ql_gfru_hba_index;
2170*12279SDaniel.Beauregard@Sun.COM extern uint32_t		ql_enable_ets;
2171*12279SDaniel.Beauregard@Sun.COM extern uint16_t		ql_osc_wait_count;
21728311SSukumar.Swaminathan@Sun.COM 
21738311SSukumar.Swaminathan@Sun.COM /*
21748311SSukumar.Swaminathan@Sun.COM  * Global Function Prototypes in ql_api.c source file.
21758311SSukumar.Swaminathan@Sun.COM  */
21768311SSukumar.Swaminathan@Sun.COM void ql_chg_endian(uint8_t *, size_t);
21778311SSukumar.Swaminathan@Sun.COM void ql_populate_hba_fru_details(ql_adapter_state_t *, fc_fca_port_info_t *);
21788311SSukumar.Swaminathan@Sun.COM void ql_setup_fruinfo(ql_adapter_state_t *);
21798311SSukumar.Swaminathan@Sun.COM uint16_t ql_pci_config_get16(ql_adapter_state_t *, off_t);
21808311SSukumar.Swaminathan@Sun.COM uint32_t ql_pci_config_get32(ql_adapter_state_t *, off_t);
21818311SSukumar.Swaminathan@Sun.COM void ql_pci_config_put8(ql_adapter_state_t *, off_t, uint8_t);
21828311SSukumar.Swaminathan@Sun.COM void ql_pci_config_put16(ql_adapter_state_t *, off_t, uint16_t);
21838311SSukumar.Swaminathan@Sun.COM void ql_delay(ql_adapter_state_t *, clock_t);
21848311SSukumar.Swaminathan@Sun.COM void ql_awaken_task_daemon(ql_adapter_state_t *, ql_srb_t *, uint32_t,
21858311SSukumar.Swaminathan@Sun.COM     uint32_t);
21868311SSukumar.Swaminathan@Sun.COM int ql_abort_device(ql_adapter_state_t *, ql_tgt_t *, int);
21878311SSukumar.Swaminathan@Sun.COM int ql_binary_fw_dump(ql_adapter_state_t *, int);
21888311SSukumar.Swaminathan@Sun.COM void ql_done(ql_link_t *);
21898311SSukumar.Swaminathan@Sun.COM int ql_24xx_flash_id(ql_adapter_state_t *);
21908311SSukumar.Swaminathan@Sun.COM int ql_24xx_load_flash(ql_adapter_state_t *, uint8_t *, uint32_t, uint32_t);
21918311SSukumar.Swaminathan@Sun.COM int ql_poll_flash(ql_adapter_state_t *, uint32_t, uint8_t);
21928311SSukumar.Swaminathan@Sun.COM void ql_flash_disable(ql_adapter_state_t *);
21938311SSukumar.Swaminathan@Sun.COM void ql_flash_enable(ql_adapter_state_t *);
21948311SSukumar.Swaminathan@Sun.COM int ql_erase_flash(ql_adapter_state_t *, int);
21958311SSukumar.Swaminathan@Sun.COM void ql_write_flash_byte(ql_adapter_state_t *, uint32_t, uint8_t);
21968311SSukumar.Swaminathan@Sun.COM uint8_t ql_read_flash_byte(ql_adapter_state_t *, uint32_t);
21978311SSukumar.Swaminathan@Sun.COM int ql_24xx_read_flash(ql_adapter_state_t *, uint32_t, uint32_t *);
21988311SSukumar.Swaminathan@Sun.COM int ql_24xx_write_flash(ql_adapter_state_t *, uint32_t, uint32_t);
21998311SSukumar.Swaminathan@Sun.COM fc_unsol_buf_t *ql_get_unsolicited_buffer(ql_adapter_state_t *, uint32_t);
22008311SSukumar.Swaminathan@Sun.COM size_t ql_ascii_fw_dump(ql_adapter_state_t *, caddr_t);
22018311SSukumar.Swaminathan@Sun.COM void ql_add_link_b(ql_head_t *, ql_link_t *);
22028311SSukumar.Swaminathan@Sun.COM void ql_add_link_t(ql_head_t *, ql_link_t *);
22038311SSukumar.Swaminathan@Sun.COM void ql_remove_link(ql_head_t *, ql_link_t *);
22048311SSukumar.Swaminathan@Sun.COM void ql_next(ql_adapter_state_t *, ql_lun_t *);
22058311SSukumar.Swaminathan@Sun.COM void ql_send_logo(ql_adapter_state_t *, ql_tgt_t *, ql_head_t *);
22068311SSukumar.Swaminathan@Sun.COM void ql_cthdr_endian(ddi_acc_handle_t, caddr_t, boolean_t);
22078311SSukumar.Swaminathan@Sun.COM ql_tgt_t *ql_d_id_to_queue(ql_adapter_state_t *, port_id_t);
22088311SSukumar.Swaminathan@Sun.COM ql_tgt_t *ql_loop_id_to_queue(ql_adapter_state_t *, uint16_t);
22098311SSukumar.Swaminathan@Sun.COM void ql_cmd_wait(ql_adapter_state_t *);
22108311SSukumar.Swaminathan@Sun.COM void ql_loop_online(ql_adapter_state_t *);
22118311SSukumar.Swaminathan@Sun.COM ql_tgt_t *ql_dev_init(ql_adapter_state_t *, port_id_t, uint16_t);
22128311SSukumar.Swaminathan@Sun.COM int ql_ub_frame_hdr(ql_adapter_state_t *, ql_tgt_t *, uint16_t, ql_head_t *);
22138311SSukumar.Swaminathan@Sun.COM void ql_rcv_rscn_els(ql_adapter_state_t *, uint16_t *, ql_head_t *);
22148311SSukumar.Swaminathan@Sun.COM int ql_stall_driver(ql_adapter_state_t *, uint32_t);
22158311SSukumar.Swaminathan@Sun.COM void ql_restart_driver(ql_adapter_state_t *);
22168311SSukumar.Swaminathan@Sun.COM int ql_load_flash(ql_adapter_state_t *, uint8_t *, uint32_t);
22178311SSukumar.Swaminathan@Sun.COM int ql_get_dma_mem(ql_adapter_state_t *, dma_mem_t *, uint32_t,
22188311SSukumar.Swaminathan@Sun.COM     mem_alloc_type_t, mem_alignment_t);
22198311SSukumar.Swaminathan@Sun.COM int ql_alloc_phys(ql_adapter_state_t *, dma_mem_t *, int);
22208311SSukumar.Swaminathan@Sun.COM void ql_free_phys(ql_adapter_state_t *, dma_mem_t *);
22218311SSukumar.Swaminathan@Sun.COM void ql_24xx_protect_flash(ql_adapter_state_t *);
22228311SSukumar.Swaminathan@Sun.COM void ql_free_dma_resource(ql_adapter_state_t *, dma_mem_t *);
22238311SSukumar.Swaminathan@Sun.COM uint8_t ql_pci_config_get8(ql_adapter_state_t *, off_t);
22248311SSukumar.Swaminathan@Sun.COM void ql_pci_config_put32(ql_adapter_state_t *, off_t, uint32_t);
22259446SDaniel.Beauregard@Sun.COM int ql_24xx_unprotect_flash(ql_adapter_state_t *);
22269156SDaniel.Beauregard@Sun.COM char *els_cmd_text(int);
22279156SDaniel.Beauregard@Sun.COM char *mbx_cmd_text(int);
22289156SDaniel.Beauregard@Sun.COM char *cmd_text(cmd_table_t *, int);
22298311SSukumar.Swaminathan@Sun.COM uint32_t ql_fwmodule_resolve(ql_adapter_state_t *);
22308311SSukumar.Swaminathan@Sun.COM void ql_port_state(ql_adapter_state_t *, uint32_t, uint32_t);
22319446SDaniel.Beauregard@Sun.COM void ql_isp_els_handle_cmd_endian(ql_adapter_state_t *ha, ql_srb_t *srb);
22329446SDaniel.Beauregard@Sun.COM void ql_isp_els_handle_rsp_endian(ql_adapter_state_t *ha, ql_srb_t *srb);
22339446SDaniel.Beauregard@Sun.COM void ql_isp_els_handle_endian(ql_adapter_state_t *ha, uint8_t *ptr,
22349446SDaniel.Beauregard@Sun.COM     uint8_t ls_code);
223511924SDaniel.Beauregard@Sun.COM int ql_el_trace_desc_ctor(ql_adapter_state_t *);
223611924SDaniel.Beauregard@Sun.COM int ql_el_trace_desc_dtor(ql_adapter_state_t *);
223711924SDaniel.Beauregard@Sun.COM int ql_nvram_cache_desc_ctor(ql_adapter_state_t *);
223811924SDaniel.Beauregard@Sun.COM int ql_nvram_cache_desc_dtor(ql_adapter_state_t *);
22399446SDaniel.Beauregard@Sun.COM int ql_wwn_cmp(ql_adapter_state_t *, la_wwn_t *, la_wwn_t *);
22409446SDaniel.Beauregard@Sun.COM void ql_dev_free(ql_adapter_state_t *, ql_tgt_t *);
22418311SSukumar.Swaminathan@Sun.COM 
22428311SSukumar.Swaminathan@Sun.COM #ifdef	__cplusplus
22438311SSukumar.Swaminathan@Sun.COM }
22448311SSukumar.Swaminathan@Sun.COM #endif
22458311SSukumar.Swaminathan@Sun.COM 
22468311SSukumar.Swaminathan@Sun.COM #endif /* _QL_API_H */
2247