xref: /onnv-gate/usr/src/uts/intel/io/scsi/adapters/arcmsr/arcmsr.h (revision 8520:5526cd528f67)
17606SJames.McPherson@Sun.COM /*
27606SJames.McPherson@Sun.COM  *
37606SJames.McPherson@Sun.COM  *	  O.S	: Solaris
47606SJames.McPherson@Sun.COM  *	FILE NAME  : arcmsr.h
57606SJames.McPherson@Sun.COM  *	  BY	: Erich Chen
67606SJames.McPherson@Sun.COM  *	Description: SCSI RAID Device Driver for
77606SJames.McPherson@Sun.COM  *			ARECA RAID Host adapter
87606SJames.McPherson@Sun.COM  * ***************************************************************************
97606SJames.McPherson@Sun.COM  * Copyright (C) 2002,2007 Areca Technology Corporation All rights reserved.
107606SJames.McPherson@Sun.COM  * Copyright (C) 2002,2007 Erich Chen
117606SJames.McPherson@Sun.COM  *		Web site: www.areca.com.tw
127606SJames.McPherson@Sun.COM  *		E-mail: erich@areca.com.tw
137606SJames.McPherson@Sun.COM  * ***********************************************************************
147606SJames.McPherson@Sun.COM  *	Redistribution and use in source and binary forms, with or without
157606SJames.McPherson@Sun.COM  *	modification, are permitted provided that the following conditions
167606SJames.McPherson@Sun.COM  *	are met:
177606SJames.McPherson@Sun.COM  *	1. Redistributions of source code must retain the above copyright
187606SJames.McPherson@Sun.COM  *	 notice, this list of conditions and the following disclaimer.
197606SJames.McPherson@Sun.COM  *	2. Redistributions in binary form must reproduce the above copyright
207606SJames.McPherson@Sun.COM  *	 notice, this list of conditions and the following disclaimer in the
217606SJames.McPherson@Sun.COM  *	 documentation and/or other materials provided with the distribution.
227606SJames.McPherson@Sun.COM  *	3. The party using or redistributing the source code and binary forms
237606SJames.McPherson@Sun.COM  *	 agrees to the disclaimer below and the terms and conditions set forth
247606SJames.McPherson@Sun.COM  *	 herein.
257606SJames.McPherson@Sun.COM  *
267606SJames.McPherson@Sun.COM  *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
277606SJames.McPherson@Sun.COM  *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
287606SJames.McPherson@Sun.COM  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
297606SJames.McPherson@Sun.COM  *  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
307606SJames.McPherson@Sun.COM  *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
317606SJames.McPherson@Sun.COM  *  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
327606SJames.McPherson@Sun.COM  *  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
337606SJames.McPherson@Sun.COM  *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
347606SJames.McPherson@Sun.COM  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
357606SJames.McPherson@Sun.COM  *  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
367606SJames.McPherson@Sun.COM  *  SUCH DAMAGE.
377606SJames.McPherson@Sun.COM  * *************************************************************************
387606SJames.McPherson@Sun.COM  */
397606SJames.McPherson@Sun.COM /*
407606SJames.McPherson@Sun.COM  * CDDL HEADER START
417606SJames.McPherson@Sun.COM  *
427606SJames.McPherson@Sun.COM  * The contents of this file are subject to the terms of the
437606SJames.McPherson@Sun.COM  * Common Development and Distribution License (the "License").
447606SJames.McPherson@Sun.COM  * You may not use this file except in compliance with the License.
457606SJames.McPherson@Sun.COM  *
467606SJames.McPherson@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
477606SJames.McPherson@Sun.COM  * or http://www.opensolaris.org/os/licensing.
487606SJames.McPherson@Sun.COM  * See the License for the specific language governing permissions
497606SJames.McPherson@Sun.COM  * and limitations under the License.
507606SJames.McPherson@Sun.COM  *
517606SJames.McPherson@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
527606SJames.McPherson@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
537606SJames.McPherson@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
547606SJames.McPherson@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
557606SJames.McPherson@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
567606SJames.McPherson@Sun.COM  *
577606SJames.McPherson@Sun.COM  * CDDL HEADER END
587606SJames.McPherson@Sun.COM  */
597606SJames.McPherson@Sun.COM /*
60*8520SColin.Yi@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
617606SJames.McPherson@Sun.COM  * Use is subject to license terms.
627606SJames.McPherson@Sun.COM  */
637606SJames.McPherson@Sun.COM 
647606SJames.McPherson@Sun.COM #ifndef _SYS_SCSI_ADAPTERS_ARCMSR_H
657606SJames.McPherson@Sun.COM #define	_SYS_SCSI_ADAPTERS_ARCMSR_H
667606SJames.McPherson@Sun.COM 
677606SJames.McPherson@Sun.COM #ifdef	__cplusplus
687606SJames.McPherson@Sun.COM 	extern "C" {
697606SJames.McPherson@Sun.COM #endif
707606SJames.McPherson@Sun.COM 
717606SJames.McPherson@Sun.COM #include <sys/sysmacros.h>
727606SJames.McPherson@Sun.COM 
737606SJames.McPherson@Sun.COM #ifndef	TRUE
747606SJames.McPherson@Sun.COM #define	TRUE	1
757606SJames.McPherson@Sun.COM #define	FALSE	0
767606SJames.McPherson@Sun.COM #endif
777606SJames.McPherson@Sun.COM 
787606SJames.McPherson@Sun.COM 
797606SJames.McPherson@Sun.COM #ifdef DEBUG
807606SJames.McPherson@Sun.COM #define	ARCMSR_DEBUG	1
817606SJames.McPherson@Sun.COM #endif /* DEBUG */
827606SJames.McPherson@Sun.COM 
837606SJames.McPherson@Sun.COM 
84*8520SColin.Yi@Sun.COM #define	ARCMSR_DRIVER_VERSION		"1.20.00.17Sun"
857606SJames.McPherson@Sun.COM #define	ARCMSR_SCSI_INITIATOR_ID	255
867606SJames.McPherson@Sun.COM #define	ARCMSR_DEV_SECTOR_SIZE		512
877606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_XFER_SECTORS		256
887606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_SG_ENTRIES		38 /* max 38 */
897606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_XFER_LEN		0x00200000 /* 2M */
907606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_TARGETID		17 /* 0-16 */
917606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_TARGETLUN		8 /* 0-7 */
927606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_DPC			16 /* defer procedure call */
937606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_QBUFFER		4096 /* ioctl QBUFFER */
947606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_ADAPTER		4 /* limitation due to pci-e slots */
957606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_HBB_POSTQUEUE	264 /* ARCMSR_MAX_OUTSTANDING_CMD+8 */
967606SJames.McPherson@Sun.COM 
977606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_OUTSTANDING_CMD	256
987606SJames.McPherson@Sun.COM #define	ARCMSR_MAX_FREECCB_NUM		320
997606SJames.McPherson@Sun.COM 
1007606SJames.McPherson@Sun.COM #define	CHIP_REG_READ8(handle, a)	\
1017606SJames.McPherson@Sun.COM 	(ddi_get8(handle, (uint8_t *)(a)))
1027606SJames.McPherson@Sun.COM #define	CHIP_REG_READ16(handle, a)	\
1037606SJames.McPherson@Sun.COM 	(ddi_get16(handle, (uint16_t *)(a)))
1047606SJames.McPherson@Sun.COM #define	CHIP_REG_READ32(handle, a)	\
1057606SJames.McPherson@Sun.COM 	(ddi_get32(handle, (uint32_t *)(a)))
1067606SJames.McPherson@Sun.COM #define	CHIP_REG_READ64(handle, a)	\
1077606SJames.McPherson@Sun.COM 	(ddi_get64(handle, (uint64_t *)(a)))
1087606SJames.McPherson@Sun.COM #define	CHIP_REG_WRITE8(handle, a, d)	\
1097606SJames.McPherson@Sun.COM 	ddi_put8(handle, (uint8_t *)(a), (uint8_t)(d))
1107606SJames.McPherson@Sun.COM #define	CHIP_REG_WRITE16(handle, a, d)	\
1117606SJames.McPherson@Sun.COM 	ddi_put16(handle, (uint16_t *)(a), (uint16_t)(d))
1127606SJames.McPherson@Sun.COM #define	CHIP_REG_WRITE32(handle, a, d)	\
1137606SJames.McPherson@Sun.COM 	ddi_put32(handle, (uint32_t *)(a), (uint32_t)(d))
1147606SJames.McPherson@Sun.COM #define	CHIP_REG_WRITE64(handle, a, d)	\
1157606SJames.McPherson@Sun.COM 	ddi_put64(handle, (uint64_t *)(a), (uint64_t)(d))
1167606SJames.McPherson@Sun.COM 
1177606SJames.McPherson@Sun.COM 
1187606SJames.McPherson@Sun.COM #define	ARCOFFSET(type, member) \
1197606SJames.McPherson@Sun.COM 	((size_t)(&((type *)0)->member))
1207606SJames.McPherson@Sun.COM 
1217606SJames.McPherson@Sun.COM 
1227606SJames.McPherson@Sun.COM #define	PCI_VENDOR_ID_ARECA	 0x17D3	/* Vendor ID	*/
1237606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1110 0x1110	/* Device ID	*/
1247606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1120 0x1120 /* Device ID	*/
1257606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1130 0x1130 /* Device ID	*/
1267606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1160 0x1160 /* Device ID	*/
1277606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1170 0x1170 /* Device ID	*/
1287606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1210 0x1210	/* Device ID	*/
1297606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1220 0x1220 /* Device ID	*/
1307606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1230 0x1230 /* Device ID	*/
1317606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1260 0x1260 /* Device ID	*/
1327606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1270 0x1270 /* Device ID	*/
1337606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1280 0x1280 /* Device ID	*/
1347606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1380 0x1380 /* Device ID	*/
1357606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1381 0x1381 /* Device ID	*/
1367606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1680 0x1680 /* Device ID	*/
1377606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1681 0x1681 /* Device ID	*/
1387606SJames.McPherson@Sun.COM #define	PCI_DEVICE_ID_ARECA_1201 0x1201 /* Device ID	*/
1397606SJames.McPherson@Sun.COM 
1407606SJames.McPherson@Sun.COM 
1417606SJames.McPherson@Sun.COM #define	dma_addr_hi32(addr)	(uint32_t)((addr>>16)>>16)
1427606SJames.McPherson@Sun.COM #define	dma_addr_lo32(addr)	(uint32_t)(addr & 0xffffffff)
1437606SJames.McPherson@Sun.COM 
1447606SJames.McPherson@Sun.COM /*
1457606SJames.McPherson@Sun.COM  *	  IOCTL CONTROL CODE
1467606SJames.McPherson@Sun.COM  */
1477606SJames.McPherson@Sun.COM struct CMD_MESSAGE {
1487606SJames.McPherson@Sun.COM 	uint32_t HeaderLength;
1497606SJames.McPherson@Sun.COM 	uint8_t  Signature[8];
1507606SJames.McPherson@Sun.COM 	uint32_t Timeout;
1517606SJames.McPherson@Sun.COM 	uint32_t ControlCode;
1527606SJames.McPherson@Sun.COM 	uint32_t ReturnCode;
1537606SJames.McPherson@Sun.COM 	uint32_t Length;
1547606SJames.McPherson@Sun.COM };
1557606SJames.McPherson@Sun.COM 
1567606SJames.McPherson@Sun.COM 
1577606SJames.McPherson@Sun.COM #define	MSGDATABUFLEN	224
1587606SJames.McPherson@Sun.COM struct CMD_MESSAGE_FIELD {
1597606SJames.McPherson@Sun.COM 	struct CMD_MESSAGE cmdmessage;	/* 28 byte ioctl header */
1607606SJames.McPherson@Sun.COM 	uint8_t messagedatabuffer[224];	/* 1032 */
1617606SJames.McPherson@Sun.COM 	/* areca gui program does not accept more than 1031 byte */
1627606SJames.McPherson@Sun.COM };
1637606SJames.McPherson@Sun.COM 
1647606SJames.McPherson@Sun.COM /* IOP message transfer */
1657606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_FAIL			0x0001
1667606SJames.McPherson@Sun.COM 
1677606SJames.McPherson@Sun.COM /* error code for StorPortLogError,ScsiPortLogError */
1687606SJames.McPherson@Sun.COM #define	ARCMSR_IOP_ERROR_ILLEGALPCI		0x0001
1697606SJames.McPherson@Sun.COM #define	ARCMSR_IOP_ERROR_VENDORID		0x0002
1707606SJames.McPherson@Sun.COM #define	ARCMSR_IOP_ERROR_DEVICEID		0x0002
1717606SJames.McPherson@Sun.COM #define	ARCMSR_IOP_ERROR_ILLEGALCDB		0x0003
1727606SJames.McPherson@Sun.COM #define	ARCMSR_IOP_ERROR_UNKNOW_CDBERR		0x0004
1737606SJames.McPherson@Sun.COM #define	ARCMSR_SYS_ERROR_MEMORY_ALLOCATE	0x0005
1747606SJames.McPherson@Sun.COM #define	ARCMSR_SYS_ERROR_MEMORY_CROSS4G		0x0006
1757606SJames.McPherson@Sun.COM #define	ARCMSR_SYS_ERROR_MEMORY_LACK		0x0007
1767606SJames.McPherson@Sun.COM #define	ARCMSR_SYS_ERROR_MEMORY_RANGE		0x0008
1777606SJames.McPherson@Sun.COM #define	ARCMSR_SYS_ERROR_DEVICE_BASE		0x0009
1787606SJames.McPherson@Sun.COM #define	ARCMSR_SYS_ERROR_PORT_VALIDATE		0x000A
1797606SJames.McPherson@Sun.COM /* DeviceType */
1808239SColin.Yi@Sun.COM #define	ARECA_SATA_RAID				0x90000000
1817606SJames.McPherson@Sun.COM /* FunctionCode */
1827606SJames.McPherson@Sun.COM #define	FUNCTION_READ_RQBUFFER			0x0801
1837606SJames.McPherson@Sun.COM #define	FUNCTION_WRITE_WQBUFFER			0x0802
1847606SJames.McPherson@Sun.COM #define	FUNCTION_CLEAR_RQBUFFER			0x0803
1857606SJames.McPherson@Sun.COM #define	FUNCTION_CLEAR_WQBUFFER			0x0804
1867606SJames.McPherson@Sun.COM #define	FUNCTION_CLEAR_ALLQBUFFER		0x0805
1877606SJames.McPherson@Sun.COM #define	FUNCTION_REQUEST_RETURN_CODE_3F		0x0806
1887606SJames.McPherson@Sun.COM #define	FUNCTION_SAY_HELLO			0x0807
1897606SJames.McPherson@Sun.COM #define	FUNCTION_SAY_GOODBYE			0x0808
1907606SJames.McPherson@Sun.COM #define	FUNCTION_FLUSH_ADAPTER_CACHE		0x0809
1917606SJames.McPherson@Sun.COM 
1927606SJames.McPherson@Sun.COM /* ARECA IO CONTROL CODE */
1937606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_READ_RQBUFFER		 	\
1947606SJames.McPherson@Sun.COM 	ARECA_SATA_RAID | FUNCTION_READ_RQBUFFER
1957606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_WRITE_WQBUFFER			\
1967606SJames.McPherson@Sun.COM 	ARECA_SATA_RAID | FUNCTION_WRITE_WQBUFFER
1977606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_CLEAR_RQBUFFER			\
1987606SJames.McPherson@Sun.COM 	ARECA_SATA_RAID | FUNCTION_CLEAR_RQBUFFER
1997606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_CLEAR_WQBUFFER			\
2007606SJames.McPherson@Sun.COM 	ARECA_SATA_RAID | FUNCTION_CLEAR_WQBUFFER
2017606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_CLEAR_ALLQBUFFER	  	\
2027606SJames.McPherson@Sun.COM 	ARECA_SATA_RAID | FUNCTION_CLEAR_ALLQBUFFER
2037606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_REQUEST_RETURN_CODE_3F	\
2047606SJames.McPherson@Sun.COM 	ARECA_SATA_RAID | FUNCTION_REQUEST_RETURN_CODE_3F
2057606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_SAY_HELLO				\
2067606SJames.McPherson@Sun.COM 	ARECA_SATA_RAID | FUNCTION_SAY_HELLO
2077606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_SAY_GOODBYE		  \
2087606SJames.McPherson@Sun.COM 	ARECA_SATA_RAID | FUNCTION_SAY_GOODBYE
2097606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_FLUSH_ADAPTER_CACHE	\
2107606SJames.McPherson@Sun.COM 	ARECA_SATA_RAID | FUNCTION_FLUSH_ADAPTER_CACHE
2117606SJames.McPherson@Sun.COM 
2127606SJames.McPherson@Sun.COM /* ARECA IOCTL ReturnCode */
2137606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_RETURNCODE_OK		0x00000001
2147606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_RETURNCODE_ERROR		0x00000006
2157606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_RETURNCODE_3F		0x0000003F
2167606SJames.McPherson@Sun.COM 
2177606SJames.McPherson@Sun.COM /*
2187606SJames.McPherson@Sun.COM  *  SPEC. for Areca HBB adapter
2197606SJames.McPherson@Sun.COM  */
2207606SJames.McPherson@Sun.COM /* ARECA HBB COMMAND for its FIRMWARE */
2217606SJames.McPherson@Sun.COM /* window of "instruction flags" from driver to iop */
2227606SJames.McPherson@Sun.COM #define	ARCMSR_DRV2IOP_DOORBELL			0x00020400
2237606SJames.McPherson@Sun.COM #define	ARCMSR_DRV2IOP_DOORBELL_MASK		0x00020404
2247606SJames.McPherson@Sun.COM /* window of "instruction flags" from iop to driver */
2257606SJames.McPherson@Sun.COM #define	ARCMSR_IOP2DRV_DOORBELL			0x00020408
2267606SJames.McPherson@Sun.COM #define	ARCMSR_IOP2DRV_DOORBELL_MASK		0x0002040C
2277606SJames.McPherson@Sun.COM 
2287606SJames.McPherson@Sun.COM 
2297606SJames.McPherson@Sun.COM /* ARECA FLAG LANGUAGE */
2307606SJames.McPherson@Sun.COM #define	ARCMSR_IOP2DRV_DATA_WRITE_OK		0x00000001 /* ioctl xfer */
2317606SJames.McPherson@Sun.COM #define	ARCMSR_IOP2DRV_DATA_READ_OK		0x00000002 /* ioctl xfer */
2327606SJames.McPherson@Sun.COM #define	ARCMSR_IOP2DRV_CDB_DONE			0x00000004
2337606SJames.McPherson@Sun.COM #define	ARCMSR_IOP2DRV_MESSAGE_CMD_DONE		0x00000008
2347606SJames.McPherson@Sun.COM 
2357606SJames.McPherson@Sun.COM #define	ARCMSR_DOORBELL_HANDLE_INT		0x0000000F
2367606SJames.McPherson@Sun.COM #define	ARCMSR_DOORBELL_INT_CLEAR_PATTERN	0xFF00FFF0
2377606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_INT_CLEAR_PATTERN	0xFF00FFF7
2387606SJames.McPherson@Sun.COM 
2397606SJames.McPherson@Sun.COM /* (ARCMSR_INBOUND_MESG0_GET_CONFIG<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */
2407606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_GET_CONFIG		0x00010008
2417606SJames.McPherson@Sun.COM /* (ARCMSR_INBOUND_MESG0_SET_CONFIG<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */
2427606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_SET_CONFIG		0x00020008
2437606SJames.McPherson@Sun.COM /* (ARCMSR_INBOUND_MESG0_ABORT_CMD<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */
2447606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_ABORT_CMD		0x00030008
2457606SJames.McPherson@Sun.COM /* (ARCMSR_INBOUND_MESG0_STOP_BGRB<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */
2467606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_STOP_BGRB		0x00040008
2477606SJames.McPherson@Sun.COM /* (ARCMSR_INBOUND_MESG0_FLUSH_CACHE<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */
2487606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_FLUSH_CACHE		0x00050008
2497606SJames.McPherson@Sun.COM /* (ARCMSR_INBOUND_MESG0_START_BGRB<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */
2507606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_START_BGRB		0x00060008
2517606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_START_DRIVER_MODE	0x000E0008
2527606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_SET_POST_WINDOW		0x000F0008
2537606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_ACTIVE_EOI_MODE		0x00100008
2547606SJames.McPherson@Sun.COM /* ARCMSR_OUTBOUND_MESG1_FIRMWARE_OK */
2557606SJames.McPherson@Sun.COM #define	ARCMSR_MESSAGE_FIRMWARE_OK		0x80000000
2567606SJames.McPherson@Sun.COM 
2577606SJames.McPherson@Sun.COM #define	ARCMSR_DRV2IOP_DATA_WRITE_OK		0x00000001 /* ioctl xfer */
2587606SJames.McPherson@Sun.COM #define	ARCMSR_DRV2IOP_DATA_READ_OK		0x00000002 /* ioctl xfer */
2597606SJames.McPherson@Sun.COM #define	ARCMSR_DRV2IOP_CDB_POSTED		0x00000004
2607606SJames.McPherson@Sun.COM #define	ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED	0x00000008
2617606SJames.McPherson@Sun.COM #define	ARCMSR_DRV2IOP_END_OF_INTERRUPT		0x00000010
2627606SJames.McPherson@Sun.COM 
2637606SJames.McPherson@Sun.COM /* data tunnel buffer between user space program and its firmware */
2647606SJames.McPherson@Sun.COM /* iop msgcode_rwbuffer for message command */
2657606SJames.McPherson@Sun.COM #define	ARCMSR_MSGCODE_RWBUFFER			0x0000fa00
2667606SJames.McPherson@Sun.COM /* user space data to iop 128bytes */
2677606SJames.McPherson@Sun.COM #define	ARCMSR_IOCTL_WBUFFER			0x0000fe00
2687606SJames.McPherson@Sun.COM /* iop data to user space 128bytes */
2697606SJames.McPherson@Sun.COM #define	ARCMSR_IOCTL_RBUFFER			0x0000ff00
2707606SJames.McPherson@Sun.COM #define	ARCMSR_HBB_BASE0_OFFSET			0x00000010
2717606SJames.McPherson@Sun.COM #define	ARCMSR_HBB_BASE1_OFFSET			0x00000018
2727606SJames.McPherson@Sun.COM #define	ARCMSR_HBB_BASE0_LEN			0x00021000
2737606SJames.McPherson@Sun.COM #define	ARCMSR_HBB_BASE1_LEN			0x00010000
2747606SJames.McPherson@Sun.COM 
2757606SJames.McPherson@Sun.COM /*
2767606SJames.McPherson@Sun.COM  *	structure for holding DMA address data
2777606SJames.McPherson@Sun.COM  */
2787606SJames.McPherson@Sun.COM #define	IS_SG64_ADDR				0x01000000 /* bit24 */
2797606SJames.McPherson@Sun.COM 
2807606SJames.McPherson@Sun.COM /* 32bit Scatter-Gather list */
2817606SJames.McPherson@Sun.COM struct  SG32ENTRY {
2827606SJames.McPherson@Sun.COM 	/* bit 24 = 0, high 8 bit = flag, low 24 bit = length */
2837606SJames.McPherson@Sun.COM 	uint32_t	length;
2847606SJames.McPherson@Sun.COM 	uint32_t	address;
2857606SJames.McPherson@Sun.COM };
2867606SJames.McPherson@Sun.COM 
2877606SJames.McPherson@Sun.COM /* 64bit Scatter-Gather list */
2887606SJames.McPherson@Sun.COM struct  SG64ENTRY {
2897606SJames.McPherson@Sun.COM 	/* bit 24 = 1, high 8 bit = flag, low 24 bit = length */
2907606SJames.McPherson@Sun.COM 	uint32_t	length;
2917606SJames.McPherson@Sun.COM 	uint32_t	address;
2927606SJames.McPherson@Sun.COM 	uint32_t	addresshigh;
2937606SJames.McPherson@Sun.COM };
2947606SJames.McPherson@Sun.COM 
2957606SJames.McPherson@Sun.COM 
2967606SJames.McPherson@Sun.COM struct QBUFFER {
2977606SJames.McPherson@Sun.COM 	uint32_t	data_len;
2987606SJames.McPherson@Sun.COM 	uint8_t		data[124];
2997606SJames.McPherson@Sun.COM };
3007606SJames.McPherson@Sun.COM 
3017606SJames.McPherson@Sun.COM /*
3027606SJames.McPherson@Sun.COM  *	FIRMWARE INFO
3037606SJames.McPherson@Sun.COM  */
3047606SJames.McPherson@Sun.COM #define	ARCMSR_FW_MODEL_OFFSET	0x0f
3057606SJames.McPherson@Sun.COM #define	ARCMSR_FW_VERS_OFFSET	0x11
306*8520SColin.Yi@Sun.COM #define	ARCMSR_FW_MAP_OFFSET	0x15
3077606SJames.McPherson@Sun.COM 
3087606SJames.McPherson@Sun.COM struct FIRMWARE_INFO {
3097606SJames.McPherson@Sun.COM 	uint32_t	signature;
3107606SJames.McPherson@Sun.COM 	uint32_t	request_len;
3117606SJames.McPherson@Sun.COM 	uint32_t	numbers_queue;
3127606SJames.McPherson@Sun.COM 	uint32_t	sdram_size;
3137606SJames.McPherson@Sun.COM 	uint32_t	ide_channels;
3147606SJames.McPherson@Sun.COM 	char		vendor[40];
3157606SJames.McPherson@Sun.COM 	char		model[8];
3167606SJames.McPherson@Sun.COM 	char		firmware_ver[16];
3177606SJames.McPherson@Sun.COM 	char		device_map[16];
3187606SJames.McPherson@Sun.COM };
3197606SJames.McPherson@Sun.COM 
3207606SJames.McPherson@Sun.COM /*
3217606SJames.McPherson@Sun.COM  * ARECA FIRMWARE SPEC
3227606SJames.McPherson@Sun.COM  *
3237606SJames.McPherson@Sun.COM  * Usage of IOP331 adapter
3247606SJames.McPherson@Sun.COM  *
3257606SJames.McPherson@Sun.COM  * (All In/Out is in IOP331's view)
3267606SJames.McPherson@Sun.COM  *	1. Message 0 --> InitThread message and retrun code
3277606SJames.McPherson@Sun.COM  *	2. Doorbell is used for RS-232 emulation
3287606SJames.McPherson@Sun.COM  *		InDoorBell :
3297606SJames.McPherson@Sun.COM  *			bit0 -- data in ready (DRIVER DATA WRITE OK)
3307606SJames.McPherson@Sun.COM  *			bit1 -- data out has been read
3317606SJames.McPherson@Sun.COM  *						(DRIVER DATA READ OK)
3327606SJames.McPherson@Sun.COM  *		outDoorBell:
3337606SJames.McPherson@Sun.COM  *			bit0 -- data out ready (IOP331 DATA WRITE OK)
3347606SJames.McPherson@Sun.COM  *			bit1 -- data in has been read
3357606SJames.McPherson@Sun.COM  * 						(IOP331 DATA READ OK)
3367606SJames.McPherson@Sun.COM  *	3. Index Memory Usage
3377606SJames.McPherson@Sun.COM  *		offset 0xf00 : for RS232 out (request buffer)
3387606SJames.McPherson@Sun.COM  *		offset 0xe00 : for RS232 in  (scratch buffer)
3397606SJames.McPherson@Sun.COM  *		offset 0xa00 : for inbound message code msgcode_rwbuffer
3407606SJames.McPherson@Sun.COM  *				(driver send to IOP331)
3417606SJames.McPherson@Sun.COM  *		offset 0xa00 : for outbound message code msgcode_rwbuffer
3427606SJames.McPherson@Sun.COM  * 				(IOP331 send to driver)
3437606SJames.McPherson@Sun.COM  *	4. RS-232 emulation
3447606SJames.McPherson@Sun.COM  *		Currently 128 byte buffer is used:
3457606SJames.McPherson@Sun.COM  *		1st uint32_t : Data length (1--124)
3467606SJames.McPherson@Sun.COM  *			Byte 4--127 : Max 124 bytes of data
3477606SJames.McPherson@Sun.COM  *	5. PostQ
3487606SJames.McPherson@Sun.COM  *		All SCSI Command must be sent through postQ:
3497606SJames.McPherson@Sun.COM  *		(inbound queue port) Request frame must be 32 bytes aligned
3507606SJames.McPherson@Sun.COM  *			# bits 31:27 => flag for post ccb
3517606SJames.McPherson@Sun.COM  *		# bits 26:00 => real address (bit 31:27) of post arcmsr_cdb
3527606SJames.McPherson@Sun.COM  *		bit31 : 0 : 256 bytes frame
3537606SJames.McPherson@Sun.COM  *		1 : 512 bytes frame
3547606SJames.McPherson@Sun.COM  *		bit30 : 0 : normal request
3557606SJames.McPherson@Sun.COM  *		1 : BIOS request
3567606SJames.McPherson@Sun.COM  *		bit29 : reserved
3577606SJames.McPherson@Sun.COM  *		bit28 : reserved
3587606SJames.McPherson@Sun.COM  *		bit27 : reserved
3597606SJames.McPherson@Sun.COM  *  -----------------------------------------------------------------------
3607606SJames.McPherson@Sun.COM  * 		(outbount queue port)	Request reply
3617606SJames.McPherson@Sun.COM  *				# bits 31:27 => flag for reply
3627606SJames.McPherson@Sun.COM  *		# bits 26:00 => real address (bits 31:27) of reply arcmsr_cdb
3637606SJames.McPherson@Sun.COM  *		# bit31 : must be 0 (for this type of reply)
3647606SJames.McPherson@Sun.COM  *		# bit30 : reserved for BIOS handshake
3657606SJames.McPherson@Sun.COM  *		# bit29 : reserved
3667606SJames.McPherson@Sun.COM  *		# bit28 : 0 : no error, ignore AdapStatus/DevStatus/SenseData
3677606SJames.McPherson@Sun.COM  *			  1 : Error, see in AdapStatus/DevStatus/SenseData
3687606SJames.McPherson@Sun.COM  *		# bit27 : reserved
3697606SJames.McPherson@Sun.COM  *	6. BIOS request
3707606SJames.McPherson@Sun.COM  *		All BIOS request is the same with request from PostQ
3717606SJames.McPherson@Sun.COM  *		Except :
3727606SJames.McPherson@Sun.COM  *		Request frame is sent from configuration space
3737606SJames.McPherson@Sun.COM  *			offset: 0x78 : Request Frame (bit30 == 1)
3747606SJames.McPherson@Sun.COM  *			offset: 0x18 : writeonly to generate IRQ to IOP331
3757606SJames.McPherson@Sun.COM  *		Completion of request:
3767606SJames.McPherson@Sun.COM  *				(bit30 == 0, bit28==err flag)
3777606SJames.McPherson@Sun.COM  *	7. Definition of SGL entry (structure)
3787606SJames.McPherson@Sun.COM  *	8. Message1 Out - Diag Status Code (????)
3797606SJames.McPherson@Sun.COM  *	9. Message0 message code :
3807606SJames.McPherson@Sun.COM  *		0x00 : NOP
3817606SJames.McPherson@Sun.COM  *		0x01 : Get Config ->offset 0xa00
3827606SJames.McPherson@Sun.COM  *			 : for outbound message code msgcode_rwbuffer
3837606SJames.McPherson@Sun.COM  *			(IOP331 send to driver)
3847606SJames.McPherson@Sun.COM  * 		Signature 0x87974060(4)
3857606SJames.McPherson@Sun.COM  *		Request len		0x00000200(4)
3867606SJames.McPherson@Sun.COM  *		numbers of queue	0x00000100(4)
3877606SJames.McPherson@Sun.COM  *		SDRAM Size		0x00000100(4)-->256 MB
3887606SJames.McPherson@Sun.COM  *		IDE Channels	  0x00000008(4)
3897606SJames.McPherson@Sun.COM  *		vendor		40 bytes char
3907606SJames.McPherson@Sun.COM  *		model		  8 bytes char
3917606SJames.McPherson@Sun.COM  *		FirmVer		 16 bytes char
3927606SJames.McPherson@Sun.COM  *		Device Map		16 bytes char
3937606SJames.McPherson@Sun.COM  *
3947606SJames.McPherson@Sun.COM  *		FirmwareVersion DWORD
3957606SJames.McPherson@Sun.COM  *			<== Added for checking of new firmware capability
3967606SJames.McPherson@Sun.COM  *		0x02 : Set Config ->offset 0xa00
3977606SJames.McPherson@Sun.COM  *			:for inbound message code msgcode_rwbuffer
3987606SJames.McPherson@Sun.COM  *				(driver send to IOP331)
3997606SJames.McPherson@Sun.COM  *		Signature		 0x87974063(4)
4007606SJames.McPherson@Sun.COM  *		UPPER32 of Request Frame  (4)-->Driver Only
4017606SJames.McPherson@Sun.COM  *		0x03 : Reset (Abort all queued Command)
4027606SJames.McPherson@Sun.COM  *		0x04 : Stop Background Activity
4037606SJames.McPherson@Sun.COM  *		0x05 : Flush Cache
4047606SJames.McPherson@Sun.COM  *		0x06 : Start Background Activity
4057606SJames.McPherson@Sun.COM  *			(re-start if background is halted)
4067606SJames.McPherson@Sun.COM  *		0x07 : Check If Host Command Pending
4077606SJames.McPherson@Sun.COM  *			(Novell May Need This Function)
4087606SJames.McPherson@Sun.COM  *		0x08 : Set controller time ->offset 0xa00 (driver to IOP331)
4097606SJames.McPherson@Sun.COM  *			: for inbound message code msgcode_rwbuffer
4107606SJames.McPherson@Sun.COM  *		byte 0 : 0xaa <-- signature
4117606SJames.McPherson@Sun.COM  *		byte 1 : 0x55 <-- signature
4127606SJames.McPherson@Sun.COM  *		byte 2 : year (04)
4137606SJames.McPherson@Sun.COM  *		byte 3 : month (1..12)
4147606SJames.McPherson@Sun.COM  *		byte 4 : date (1..31)
4157606SJames.McPherson@Sun.COM  *		byte 5 : hour (0..23)
4167606SJames.McPherson@Sun.COM  *		byte 6 : minute (0..59)
4177606SJames.McPherson@Sun.COM  *		byte 7 : second (0..59)
4187606SJames.McPherson@Sun.COM  *
4197606SJames.McPherson@Sun.COM  */
4207606SJames.McPherson@Sun.COM 
4217606SJames.McPherson@Sun.COM 
4227606SJames.McPherson@Sun.COM /* signature of set and get firmware config */
4237606SJames.McPherson@Sun.COM #define	ARCMSR_SIGNATURE_GET_CONFIG			0x87974060
4247606SJames.McPherson@Sun.COM #define	ARCMSR_SIGNATURE_SET_CONFIG			0x87974063
4257606SJames.McPherson@Sun.COM 
4267606SJames.McPherson@Sun.COM 
4277606SJames.McPherson@Sun.COM /* message code of inbound message register */
4287606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_MESG0_NOP			0x00000000
4297606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_MESG0_GET_CONFIG			0x00000001
4307606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_MESG0_SET_CONFIG			0x00000002
4317606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_MESG0_ABORT_CMD			0x00000003
4327606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_MESG0_STOP_BGRB			0x00000004
4337606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_MESG0_FLUSH_CACHE		0x00000005
4347606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_MESG0_START_BGRB			0x00000006
4357606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_MESG0_CHK331PENDING		0x00000007
4367606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_MESG0_SYNC_TIMER			0x00000008
4377606SJames.McPherson@Sun.COM /* doorbell interrupt generator */
4387606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_DRIVER_DATA_WRITE_OK		0x00000001
4397606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_DRIVER_DATA_READ_OK		0x00000002
4407606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_IOP331_DATA_WRITE_OK		0x00000001
4417606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_IOP331_DATA_READ_OK		0x00000002
4427606SJames.McPherson@Sun.COM /* ccb areca cdb flag */
4437606SJames.McPherson@Sun.COM #define	ARCMSR_CCBPOST_FLAG_SGL_BSIZE			0x80000000
4447606SJames.McPherson@Sun.COM #define	ARCMSR_CCBPOST_FLAG_IAM_BIOS			0x40000000
4457606SJames.McPherson@Sun.COM #define	ARCMSR_CCBREPLY_FLAG_IAM_BIOS			0x40000000
4467606SJames.McPherson@Sun.COM #define	ARCMSR_CCBREPLY_FLAG_ERROR			0x10000000
4477606SJames.McPherson@Sun.COM /* outbound firmware ok */
4487606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_MESG1_FIRMWARE_OK		0x80000000
4497606SJames.McPherson@Sun.COM 
4507606SJames.McPherson@Sun.COM /* SBus dma burst sizes */
4517606SJames.McPherson@Sun.COM #ifndef BURSTSIZE
4527606SJames.McPherson@Sun.COM #define	BURSTSIZE
4537606SJames.McPherson@Sun.COM #define	BURST1			0x01
4547606SJames.McPherson@Sun.COM #define	BURST2			0x02
4557606SJames.McPherson@Sun.COM #define	BURST4			0x04
4567606SJames.McPherson@Sun.COM #define	BURST8			0x08
4577606SJames.McPherson@Sun.COM #define	BURST16			0x10
4587606SJames.McPherson@Sun.COM #define	BURST32			0x20
4597606SJames.McPherson@Sun.COM #define	BURST64			0x40
4607606SJames.McPherson@Sun.COM #define	BURSTSIZE_MASK		0x7f
4617606SJames.McPherson@Sun.COM #define	DEFAULT_BURSTSIZE	BURST16|BURST8|BURST4|BURST2|BURST1
4627606SJames.McPherson@Sun.COM #endif  /* BURSTSIZE */
4637606SJames.McPherson@Sun.COM 
4647606SJames.McPherson@Sun.COM 
4657606SJames.McPherson@Sun.COM /*
4667606SJames.McPherson@Sun.COM  *
4677606SJames.McPherson@Sun.COM  */
4687606SJames.McPherson@Sun.COM struct ARCMSR_CDB {
4697606SJames.McPherson@Sun.COM 	uint8_t	Bus;		/* should be 0 */
4707606SJames.McPherson@Sun.COM 	uint8_t	TargetID;	/* should be 0..15 */
4717606SJames.McPherson@Sun.COM 	uint8_t	LUN;		/* should be 0..7 */
4727606SJames.McPherson@Sun.COM 	uint8_t	Function;	/* should be 1 */
4737606SJames.McPherson@Sun.COM 
4747606SJames.McPherson@Sun.COM 	uint8_t	CdbLength;	/* set in arcmsr_tran_init_pkt */
4757606SJames.McPherson@Sun.COM 	uint8_t	sgcount;
4767606SJames.McPherson@Sun.COM 	uint8_t	Flags;
4777606SJames.McPherson@Sun.COM 
4787606SJames.McPherson@Sun.COM 	/* bit 0: 0(256) / 1(512) bytes	 */
4797606SJames.McPherson@Sun.COM #define	ARCMSR_CDB_FLAG_SGL_BSIZE		0x01
4807606SJames.McPherson@Sun.COM 	/* bit 1: 0(from driver) / 1(from BIOS) */
4817606SJames.McPherson@Sun.COM #define	ARCMSR_CDB_FLAG_BIOS			0x02
4827606SJames.McPherson@Sun.COM 	/* bit 2: 0(Data in) / 1(Data out)	*/
4837606SJames.McPherson@Sun.COM #define	ARCMSR_CDB_FLAG_WRITE			0x04
4847606SJames.McPherson@Sun.COM 	/* bit 4/3 ,00 : simple Q,01 : head of Q,10 : ordered Q */
4857606SJames.McPherson@Sun.COM #define	ARCMSR_CDB_FLAG_SIMPLEQ			0x00
4867606SJames.McPherson@Sun.COM #define	ARCMSR_CDB_FLAG_HEADQ			0x08
4877606SJames.McPherson@Sun.COM #define	ARCMSR_CDB_FLAG_ORDEREDQ		0x10
4887606SJames.McPherson@Sun.COM 
4897606SJames.McPherson@Sun.COM 	uint8_t	Reserved1;
4907606SJames.McPherson@Sun.COM 
4917606SJames.McPherson@Sun.COM 	uint32_t	Context;	/* Address of this request */
4927606SJames.McPherson@Sun.COM 	uint32_t	DataLength;	/* currently unused */
4937606SJames.McPherson@Sun.COM 
4947606SJames.McPherson@Sun.COM 	uint8_t		Cdb[16];	/* SCSI CDB */
4957606SJames.McPherson@Sun.COM 	/*
4967606SJames.McPherson@Sun.COM 	 * Device Status : the same from SCSI bus if error occur
4977606SJames.McPherson@Sun.COM 	 * SCSI bus status codes.
4987606SJames.McPherson@Sun.COM 	 */
4997606SJames.McPherson@Sun.COM 	uint8_t		DeviceStatus;
5007606SJames.McPherson@Sun.COM 
5017606SJames.McPherson@Sun.COM #define	SCSISTAT_GOOD				0x00
5027606SJames.McPherson@Sun.COM #define	SCSISTAT_CHECK_CONDITION		0x02
5037606SJames.McPherson@Sun.COM #define	SCSISTAT_CONDITION_MET			0x04
5047606SJames.McPherson@Sun.COM #define	SCSISTAT_BUSY				0x08
5057606SJames.McPherson@Sun.COM #define	SCSISTAT_INTERMEDIATE			0x10
5067606SJames.McPherson@Sun.COM #define	SCSISTAT_INTERMEDIATE_COND_MET		0x14
5077606SJames.McPherson@Sun.COM #define	SCSISTAT_RESERVATION_CONFLICT		0x18
5087606SJames.McPherson@Sun.COM #define	SCSISTAT_COMMAND_TERMINATED		0x22
5097606SJames.McPherson@Sun.COM #define	SCSISTAT_QUEUE_FULL			0x28
5107606SJames.McPherson@Sun.COM #define	ARCMSR_DEV_SELECT_TIMEOUT		0xF0
5117606SJames.McPherson@Sun.COM #define	ARCMSR_DEV_ABORTED			0xF1
5127606SJames.McPherson@Sun.COM #define	ARCMSR_DEV_INIT_FAIL			0xF2
5137606SJames.McPherson@Sun.COM 
5147606SJames.McPherson@Sun.COM 	uint8_t		SenseData[15];
5157606SJames.McPherson@Sun.COM 
5167606SJames.McPherson@Sun.COM 	/* Scatter gather address */
5177606SJames.McPherson@Sun.COM 	union {
5187606SJames.McPherson@Sun.COM 		struct SG32ENTRY	sg32entry[ARCMSR_MAX_SG_ENTRIES];
5197606SJames.McPherson@Sun.COM 		struct SG64ENTRY	sg64entry[ARCMSR_MAX_SG_ENTRIES];
5207606SJames.McPherson@Sun.COM 	} sgu;
5217606SJames.McPherson@Sun.COM };
5227606SJames.McPherson@Sun.COM 
5237606SJames.McPherson@Sun.COM 
5247606SJames.McPherson@Sun.COM struct HBA_msgUnit {
5257606SJames.McPherson@Sun.COM 	uint32_t	resrved0[4];
5267606SJames.McPherson@Sun.COM 	uint32_t	inbound_msgaddr0;
5277606SJames.McPherson@Sun.COM 	uint32_t	inbound_msgaddr1;
5287606SJames.McPherson@Sun.COM 	uint32_t	outbound_msgaddr0;
5297606SJames.McPherson@Sun.COM 	uint32_t	outbound_msgaddr1;
5307606SJames.McPherson@Sun.COM 	uint32_t	inbound_doorbell;
5317606SJames.McPherson@Sun.COM 	uint32_t	inbound_intstatus;
5327606SJames.McPherson@Sun.COM 	uint32_t	inbound_intmask;
5337606SJames.McPherson@Sun.COM 	uint32_t	outbound_doorbell;
5347606SJames.McPherson@Sun.COM 	uint32_t	outbound_intstatus;
5357606SJames.McPherson@Sun.COM 	uint32_t	outbound_intmask;
5367606SJames.McPherson@Sun.COM 	uint32_t	reserved1[2];
5377606SJames.McPherson@Sun.COM 	uint32_t	inbound_queueport;
5387606SJames.McPherson@Sun.COM 	uint32_t	outbound_queueport;
5397606SJames.McPherson@Sun.COM 	uint32_t	reserved2[2];
5407606SJames.McPherson@Sun.COM 	/* ......local_buffer */
5417606SJames.McPherson@Sun.COM 	uint32_t	reserved3[492];
5427606SJames.McPherson@Sun.COM 	uint32_t	reserved4[128];
5437606SJames.McPherson@Sun.COM 	uint32_t	msgcode_rwbuffer[256];
5447606SJames.McPherson@Sun.COM 	uint32_t	message_wbuffer[32];
5457606SJames.McPherson@Sun.COM 	uint32_t	reserved5[32];
5467606SJames.McPherson@Sun.COM 	uint32_t	message_rbuffer[32];
5477606SJames.McPherson@Sun.COM 	uint32_t	reserved6[32];
5487606SJames.McPherson@Sun.COM };
5497606SJames.McPherson@Sun.COM 
5507606SJames.McPherson@Sun.COM 
5517606SJames.McPherson@Sun.COM struct HBB_DOORBELL {
5527606SJames.McPherson@Sun.COM 	uint8_t		doorbell_reserved[132096];
5537606SJames.McPherson@Sun.COM 	/*
5547606SJames.McPherson@Sun.COM 	 * offset 0x00020400:00,01,02,03: window of "instruction flags"
5557606SJames.McPherson@Sun.COM 	 * from driver to iop
5567606SJames.McPherson@Sun.COM 	 */
5577606SJames.McPherson@Sun.COM 	uint32_t	drv2iop_doorbell;
5587606SJames.McPherson@Sun.COM 	/* 04,05,06,07: doorbell mask */
5597606SJames.McPherson@Sun.COM 	uint32_t	drv2iop_doorbell_mask;
5607606SJames.McPherson@Sun.COM 	/* 08,09,10,11: window of "instruction flags" from iop to driver */
5617606SJames.McPherson@Sun.COM 	uint32_t	iop2drv_doorbell;
5627606SJames.McPherson@Sun.COM 	/* 12,13,14,15: doorbell mask */
5637606SJames.McPherson@Sun.COM 	uint32_t	iop2drv_doorbell_mask;
5647606SJames.McPherson@Sun.COM };
5657606SJames.McPherson@Sun.COM 
5667606SJames.McPherson@Sun.COM 
5677606SJames.McPherson@Sun.COM struct HBB_RWBUFFER {
5687606SJames.McPherson@Sun.COM 	uint8_t		message_reserved0[64000];
5697606SJames.McPherson@Sun.COM 	/* offset 0x0000fa00:	0..1023: message code read write 1024bytes */
5707606SJames.McPherson@Sun.COM 	uint32_t	msgcode_rwbuffer[256];
5717606SJames.McPherson@Sun.COM 	/* offset 0x0000fe00:1024...1151: user space data to iop 128bytes */
5727606SJames.McPherson@Sun.COM 	uint32_t	message_wbuffer[32];
5737606SJames.McPherson@Sun.COM 	/* 1152...1279: message reserved */
5747606SJames.McPherson@Sun.COM 	uint32_t	message_reserved1[32];
5757606SJames.McPherson@Sun.COM 	/* offset 0x0000ff00:1280...1407: iop data to user space 128bytes */
5767606SJames.McPherson@Sun.COM 	uint32_t	message_rbuffer[32];
5777606SJames.McPherson@Sun.COM };
5787606SJames.McPherson@Sun.COM 
5797606SJames.McPherson@Sun.COM struct HBB_msgUnit {
5807606SJames.McPherson@Sun.COM 	/* post queue buffer for iop */
5817606SJames.McPherson@Sun.COM 	uint32_t	post_qbuffer[ARCMSR_MAX_HBB_POSTQUEUE];
5827606SJames.McPherson@Sun.COM 	/* done queue buffer for iop */
5837606SJames.McPherson@Sun.COM 	uint32_t	done_qbuffer[ARCMSR_MAX_HBB_POSTQUEUE];
5847606SJames.McPherson@Sun.COM 
5857606SJames.McPherson@Sun.COM 	int32_t		postq_index;	/* post queue index */
5867606SJames.McPherson@Sun.COM 	int32_t		doneq_index;	/* done queue index */
5877606SJames.McPherson@Sun.COM 	struct HBB_DOORBELL	*hbb_doorbell;
5887606SJames.McPherson@Sun.COM 	struct HBB_RWBUFFER	*hbb_rwbuffer;
5897606SJames.McPherson@Sun.COM };
5907606SJames.McPherson@Sun.COM 
5917606SJames.McPherson@Sun.COM struct msgUnit {
5927606SJames.McPherson@Sun.COM 	union	{
5937606SJames.McPherson@Sun.COM 		struct HBA_msgUnit	hbamu;
5947606SJames.McPherson@Sun.COM 		struct HBB_msgUnit	hbbmu;
5957606SJames.McPherson@Sun.COM 	} muu;
5967606SJames.McPherson@Sun.COM };
5977606SJames.McPherson@Sun.COM 
5987606SJames.McPherson@Sun.COM 
5997606SJames.McPherson@Sun.COM /*
6007606SJames.McPherson@Sun.COM  * Adapter Control Block
6017606SJames.McPherson@Sun.COM  */
6027606SJames.McPherson@Sun.COM struct ACB {
6037606SJames.McPherson@Sun.COM 	uint32_t		adapter_type; /* A/B/C/D */
6047606SJames.McPherson@Sun.COM 
6057606SJames.McPherson@Sun.COM #define	ACB_ADAPTER_TYPE_A	0x00000001	/* hba (Intel) IOP */
6067606SJames.McPherson@Sun.COM #define	ACB_ADAPTER_TYPE_B	0x00000002	/* hbb (Marvell) IOP */
6077606SJames.McPherson@Sun.COM #define	ACB_ADAPTER_TYPE_C	0x00000004	/* hbc P IOP */
6087606SJames.McPherson@Sun.COM #define	ACB_ADAPTER_TYPE_D	0x00000008	/* hbd A IOP */
6097606SJames.McPherson@Sun.COM 
6107606SJames.McPherson@Sun.COM 	int32_t			dma_sync_size;
6117606SJames.McPherson@Sun.COM 	scsi_hba_tran_t		*scsi_hba_transport;
6127606SJames.McPherson@Sun.COM 	dev_info_t		*dev_info;
6137606SJames.McPherson@Sun.COM 	ddi_acc_handle_t	reg_mu_acc_handle0;
6147606SJames.McPherson@Sun.COM 	ddi_acc_handle_t	reg_mu_acc_handle1;
6157606SJames.McPherson@Sun.COM 	ddi_acc_handle_t	ccbs_acc_handle;
6167606SJames.McPherson@Sun.COM 	ddi_dma_handle_t	ccbs_pool_handle;
6177606SJames.McPherson@Sun.COM 	ddi_dma_cookie_t	ccb_cookie;
6187606SJames.McPherson@Sun.COM 	ddi_device_acc_attr_t	dev_acc_attr;
6197606SJames.McPherson@Sun.COM 	kmutex_t		acb_mutex;
6207606SJames.McPherson@Sun.COM 	kmutex_t		postq_mutex;
6217606SJames.McPherson@Sun.COM 	kmutex_t		workingQ_mutex;
6227606SJames.McPherson@Sun.COM 	kmutex_t		ioctl_mutex;
6237606SJames.McPherson@Sun.COM 	timeout_id_t		timeout_id;
624*8520SColin.Yi@Sun.COM 	timeout_id_t		timeout_sc_id;
625*8520SColin.Yi@Sun.COM 	ddi_taskq_t		*taskq;
6267606SJames.McPherson@Sun.COM 	ddi_iblock_cookie_t	 iblock_cookie;
6277606SJames.McPherson@Sun.COM 	/* Offset for arc cdb physical to virtual calculations */
6287606SJames.McPherson@Sun.COM 	unsigned long		vir2phy_offset;
6297606SJames.McPherson@Sun.COM 	uint32_t		outbound_int_enable;
6307606SJames.McPherson@Sun.COM 
6317606SJames.McPherson@Sun.COM 	/* message unit ATU inbound base address0 virtual */
6327606SJames.McPherson@Sun.COM 	struct msgUnit 	*pmu;
6337606SJames.McPherson@Sun.COM 
6347606SJames.McPherson@Sun.COM 	uint8_t			adapter_index;
6357606SJames.McPherson@Sun.COM 	uint8_t			irq;
6367606SJames.McPherson@Sun.COM 	uint16_t		acb_flags;
6377606SJames.McPherson@Sun.COM 
6387606SJames.McPherson@Sun.COM #define	ACB_F_SCSISTOPADAPTER		0x0001
6397606SJames.McPherson@Sun.COM /* stop RAID background rebuild */
6407606SJames.McPherson@Sun.COM #define	ACB_F_MSG_STOP_BGRB		0x0002
6417606SJames.McPherson@Sun.COM /* stop RAID background rebuild */
6427606SJames.McPherson@Sun.COM #define	ACB_F_MSG_START_BGRB		0x0004
6437606SJames.McPherson@Sun.COM /* iop ioctl data rqbuffer overflow */
6447606SJames.McPherson@Sun.COM #define	ACB_F_IOPDATA_OVERFLOW		0x0008
6457606SJames.McPherson@Sun.COM /* ioctl clear wqbuffer */
6467606SJames.McPherson@Sun.COM #define	ACB_F_MESSAGE_WQBUFFER_CLEARED  0x0010
6477606SJames.McPherson@Sun.COM /* ioctl clear rqbuffer */
6487606SJames.McPherson@Sun.COM #define	ACB_F_MESSAGE_RQBUFFER_CLEARED  0x0020
6497606SJames.McPherson@Sun.COM /* ioctl iop wqbuffer data readed */
6507606SJames.McPherson@Sun.COM #define	ACB_F_MESSAGE_WQBUFFER_READ	0x0040
6517606SJames.McPherson@Sun.COM #define	ACB_F_BUS_RESET			0x0080
6527606SJames.McPherson@Sun.COM /* iop init */
6537606SJames.McPherson@Sun.COM #define	ACB_F_IOP_INITED		0x0100
6547606SJames.McPherson@Sun.COM 
6557606SJames.McPherson@Sun.COM 	/* serial ccb pointer array */
6567606SJames.McPherson@Sun.COM 	struct CCB *pccb_pool[ARCMSR_MAX_FREECCB_NUM];
6577606SJames.McPherson@Sun.COM 	/* working ccb pointer array */
6587606SJames.McPherson@Sun.COM 	struct CCB *ccbworkingQ[ARCMSR_MAX_FREECCB_NUM];
6597606SJames.McPherson@Sun.COM 	/* done ccb array index */
6607606SJames.McPherson@Sun.COM 	int32_t			workingccb_doneindex;
6617606SJames.McPherson@Sun.COM 	/* start ccb array index  */
6627606SJames.McPherson@Sun.COM 	int32_t			workingccb_startindex;
6637606SJames.McPherson@Sun.COM 	int32_t			ccboutstandingcount;
6647606SJames.McPherson@Sun.COM 
6657606SJames.McPherson@Sun.COM 	/* data collection buffer for read from 80331 */
6667606SJames.McPherson@Sun.COM 	uint8_t			rqbuffer[ARCMSR_MAX_QBUFFER];
6677606SJames.McPherson@Sun.COM 	/* first of read buffer  */
6687606SJames.McPherson@Sun.COM 	int32_t			rqbuf_firstidx;
6697606SJames.McPherson@Sun.COM 	/* last of read buffer	*/
6707606SJames.McPherson@Sun.COM 	int32_t			rqbuf_lastidx;
6717606SJames.McPherson@Sun.COM 
6727606SJames.McPherson@Sun.COM 	/* data collection buffer for write to 80331  */
6737606SJames.McPherson@Sun.COM 	uint8_t			wqbuffer[ARCMSR_MAX_QBUFFER];
6747606SJames.McPherson@Sun.COM 	/* first of write buffer */
6757606SJames.McPherson@Sun.COM 	int32_t			wqbuf_firstidx;
6767606SJames.McPherson@Sun.COM 	/* last of write buffer  */
6777606SJames.McPherson@Sun.COM 	int32_t			wqbuf_lastidx;
6787606SJames.McPherson@Sun.COM 	/* id0 ..... id15,lun0...lun7 */
6797606SJames.McPherson@Sun.COM 	uint8_t		devstate[ARCMSR_MAX_TARGETID][ARCMSR_MAX_TARGETLUN];
6807606SJames.McPherson@Sun.COM #define	ARECA_RAID_GONE		0x55
6817606SJames.McPherson@Sun.COM #define	ARECA_RAID_GOOD		0xaa
6827606SJames.McPherson@Sun.COM 
683*8520SColin.Yi@Sun.COM 	uint32_t		timeout_count;
6847606SJames.McPherson@Sun.COM 	uint32_t		num_resets;
6857606SJames.McPherson@Sun.COM 	uint32_t		num_aborts;
6867606SJames.McPherson@Sun.COM 	uint32_t		firm_request_len;
6877606SJames.McPherson@Sun.COM 	uint32_t		firm_numbers_queue;
6887606SJames.McPherson@Sun.COM 	uint32_t		firm_sdram_size;
6897606SJames.McPherson@Sun.COM 	uint32_t		firm_ide_channels;
6907606SJames.McPherson@Sun.COM 	char			firm_model[12];
6917606SJames.McPherson@Sun.COM 	char			firm_version[20];
692*8520SColin.Yi@Sun.COM 	char			device_map[20];	/* 21,84-99 */
6937606SJames.McPherson@Sun.COM 	ddi_acc_handle_t	pci_acc_handle;
6947606SJames.McPherson@Sun.COM 	int			tgt_scsi_opts[ARCMSR_MAX_TARGETID];
695*8520SColin.Yi@Sun.COM 	dev_info_t	*ld[ARCMSR_MAX_TARGETID-1][ARCMSR_MAX_TARGETLUN];
6967606SJames.McPherson@Sun.COM };
6977606SJames.McPherson@Sun.COM 
6987606SJames.McPherson@Sun.COM 
6997606SJames.McPherson@Sun.COM /*
7007606SJames.McPherson@Sun.COM  * Command Control Block (SrbExtension)
7017606SJames.McPherson@Sun.COM  *
7027606SJames.McPherson@Sun.COM  * CCB must be not cross page boundary,and the order from offset 0
7037606SJames.McPherson@Sun.COM  * structure describing an ATA disk request this CCB length must be
7047606SJames.McPherson@Sun.COM  * 32 bytes boundary
7057606SJames.McPherson@Sun.COM  *
7067606SJames.McPherson@Sun.COM  */
7077606SJames.McPherson@Sun.COM struct CCB
7087606SJames.McPherson@Sun.COM {
7097606SJames.McPherson@Sun.COM 	struct  ARCMSR_CDB	arcmsr_cdb;
7107606SJames.McPherson@Sun.COM 	uint32_t		cdb_shifted_phyaddr;
7117606SJames.McPherson@Sun.COM 	uint16_t		ccb_flags;
7127606SJames.McPherson@Sun.COM #define	CCB_FLAG_READ		0x0000
7137606SJames.McPherson@Sun.COM #define	CCB_FLAG_WRITE		0x0001
7147606SJames.McPherson@Sun.COM #define	CCB_FLAG_ERROR		0x0002
7157606SJames.McPherson@Sun.COM #define	CCB_FLAG_FLUSHCACHE	0x0004
7167606SJames.McPherson@Sun.COM #define	CCB_FLAG_MASTER_ABORTED 0x0008
7177606SJames.McPherson@Sun.COM #define	CCB_FLAG_DMAVALID	0x0010
7187606SJames.McPherson@Sun.COM #define	CCB_FLAG_DMACONSISTENT  0x0020
7197606SJames.McPherson@Sun.COM #define	CCB_FLAG_DMAWRITE	0x0040
7207606SJames.McPherson@Sun.COM #define	CCB_FLAG_PKTBIND	0x0080
7217606SJames.McPherson@Sun.COM 	uint16_t		startdone;
7227606SJames.McPherson@Sun.COM #define	ARCMSR_CCB_DONE		0x0000
7237606SJames.McPherson@Sun.COM #define	ARCMSR_CCB_UNBUILD 	0x0000
7247606SJames.McPherson@Sun.COM #define	ARCMSR_CCB_START	0x55AA
7257606SJames.McPherson@Sun.COM #define	ARCMSR_CCB_PENDING	0xAA55
7267606SJames.McPherson@Sun.COM #define	ARCMSR_CCB_RESET	0xA5A5
7277606SJames.McPherson@Sun.COM #define	ARCMSR_CCB_ABORTED	0x5A5A
7287606SJames.McPherson@Sun.COM #define	ARCMSR_CCB_ILLEGAL	0xFFFF
7297606SJames.McPherson@Sun.COM 	struct scsi_pkt			*pkt;
7307606SJames.McPherson@Sun.COM 	struct ACB	*acb;
7317606SJames.McPherson@Sun.COM 	ddi_dma_cookie_t	pkt_dmacookies[ARCMSR_MAX_SG_ENTRIES];
7327606SJames.McPherson@Sun.COM 	ddi_dma_handle_t	pkt_dma_handle;
7337606SJames.McPherson@Sun.COM 	uint_t			pkt_cookie;
7347606SJames.McPherson@Sun.COM 	uint_t			pkt_ncookies;
7357606SJames.McPherson@Sun.COM 	uint_t			pkt_nwin;
7367606SJames.McPherson@Sun.COM 	uint_t			pkt_curwin;
7377606SJames.McPherson@Sun.COM 	off_t			pkt_dma_offset;
7387606SJames.McPherson@Sun.COM 	size_t			pkt_dma_len;
7397606SJames.McPherson@Sun.COM 	size_t			total_dmac_size;
7407606SJames.McPherson@Sun.COM 	time_t			ccb_time;
7417606SJames.McPherson@Sun.COM 	struct buf		*bp;
7427606SJames.McPherson@Sun.COM 	ddi_dma_cookie_t	resid_dmacookie;
7437606SJames.McPherson@Sun.COM #ifdef _LP64
7447606SJames.McPherson@Sun.COM 	uint32_t		reserved;
7457606SJames.McPherson@Sun.COM #endif
7467606SJames.McPherson@Sun.COM };
7477606SJames.McPherson@Sun.COM 
7487606SJames.McPherson@Sun.COM 
7497606SJames.McPherson@Sun.COM /* SenseData[15] */
7507606SJames.McPherson@Sun.COM struct SENSE_DATA {
7517606SJames.McPherson@Sun.COM 	DECL_BITFIELD3(
7527606SJames.McPherson@Sun.COM 	    ErrorCode		:4,	/* Vendor Unique error code */
7537606SJames.McPherson@Sun.COM 	    ErrorClass		:3,	/* Error Class- fixed at 0x7 */
7547606SJames.McPherson@Sun.COM 	    Valid		:1);	/* sense data is valid */
7557606SJames.McPherson@Sun.COM 
7567606SJames.McPherson@Sun.COM 	uint8_t SegmentNumber;	/* segment number: for COPY cmd */
7577606SJames.McPherson@Sun.COM 
7587606SJames.McPherson@Sun.COM 	DECL_BITFIELD5(
7597606SJames.McPherson@Sun.COM 	    SenseKey		:4,	/* Sense key (see below) */
7607606SJames.McPherson@Sun.COM 	    Reserved		:1,	/* reserved */
7617606SJames.McPherson@Sun.COM 	    IncorrectLength	:1,	/* Incorrect Length Indicator */
7627606SJames.McPherson@Sun.COM 	    EndOfMedia		:1,	/* End of Media */
7637606SJames.McPherson@Sun.COM 	    FileMark		:1);	/* File Mark Detected */
7647606SJames.McPherson@Sun.COM 
7657606SJames.McPherson@Sun.COM 	uint8_t Information[4];
7667606SJames.McPherson@Sun.COM 	uint8_t AdditionalSenseLength;
7677606SJames.McPherson@Sun.COM 	uint8_t CommandSpecificInformation[4];
7687606SJames.McPherson@Sun.COM 	uint8_t AdditionalSenseCode;
7697606SJames.McPherson@Sun.COM 	uint8_t AdditionalSenseCodeQualifier;
7707606SJames.McPherson@Sun.COM 	uint8_t FieldReplaceableUnitCode;
7717606SJames.McPherson@Sun.COM };
7727606SJames.McPherson@Sun.COM 
7737606SJames.McPherson@Sun.COM #define	VIDLEN	8
7747606SJames.McPherson@Sun.COM #define	PIDLEN	16
7757606SJames.McPherson@Sun.COM #define	REVLEN	4
7767606SJames.McPherson@Sun.COM struct	SCSIInqData {
7777606SJames.McPherson@Sun.COM 	uint8_t	DevType;	/* Periph Qualifier & Periph Dev Type */
7787606SJames.McPherson@Sun.COM 	uint8_t	RMB_TypeMod;	/* rem media bit & Dev Type Modifier */
7797606SJames.McPherson@Sun.COM 	uint8_t	Vers;		/* ISO, ECMA, & ANSI versions */
7807606SJames.McPherson@Sun.COM 	uint8_t	RDF;		/* AEN, TRMIOP, & response data format */
7817606SJames.McPherson@Sun.COM 	uint8_t	AddLen;		/* length of additional data */
7827606SJames.McPherson@Sun.COM 	uint8_t	Res1;		/* reserved */
7837606SJames.McPherson@Sun.COM 	uint8_t	Res2;		/* reserved */
7847606SJames.McPherson@Sun.COM 	uint8_t	Flags; 		/* RelADr, Wbus32, Wbus16, Sync etc */
7857606SJames.McPherson@Sun.COM 	uint8_t	VendorID[8];	/* Vendor Identification */
7867606SJames.McPherson@Sun.COM 	uint8_t	ProductID[16]; 	/* Product Identification */
7877606SJames.McPherson@Sun.COM 	uint8_t	ProductRev[4]; 	/* Product Revision */
7887606SJames.McPherson@Sun.COM };
7897606SJames.McPherson@Sun.COM 
7907606SJames.McPherson@Sun.COM 
7917606SJames.McPherson@Sun.COM 
7927606SJames.McPherson@Sun.COM /*
7937606SJames.McPherson@Sun.COM  * These definitions are the register offsets as defined in the Intel
7947606SJames.McPherson@Sun.COM  * IOP manuals. See (correct as of 18 January 2008)
7957606SJames.McPherson@Sun.COM  * http://developer.intel.com/design/iio/index.htm?iid=ncdcnav2+stor_ioproc
7967606SJames.McPherson@Sun.COM  * for more details
7977606SJames.McPherson@Sun.COM  */
7987606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_VENDORID_REG		0x00
7997606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_DEVICEID_REG		0x02
8007606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PRIMARY_COMMAND_REG	0x04
8017606SJames.McPherson@Sun.COM #define	PCI_DISABLE_INTERRUPT			0x0400
8027606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PRIMARY_STATUS_REG	0x06
8037606SJames.McPherson@Sun.COM #define	ARCMSR_ADAP_66MHZ			0x20
8047606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_REVISIONID_REG		0x08
8057606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_CLASSCODE_REG		0x09
8067606SJames.McPherson@Sun.COM 
8077606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PRIMARY_CACHELINESIZE_REG	0x0C
8087606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PRIMARY_LATENCYTIMER_REG		0x0D
8097606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_HEADERTYPE_REG			0x0E
8107606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PRIMARY_BUSNUMBER_REG		0x18
8117606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_SECONDARY_BUSNUMBER_REG		0x19
8127606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_SUBORDINATE_BUSNUMBER_REG	0x1A
8137606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_SECONDARY_LATENCYTIMER_REG	0x1B
8147606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_IO_BASE_REG			0x1C
8157606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_IO_LIMIT_REG			0x1D
8167606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_SECONDARY_STATUS_REG		0x1E
8177606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_NONPREFETCHABLE_MEMORY_BASE_REG  0x20
8187606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_NONPREFETCHABLE_MEMORY_LIMIT_REG 0x22
8197606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PREFETCHABLE_MEMORY_BASE_REG	0x24
8207606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PREFETCHABLE_MEMORY_LIMIT_REG	0x26
8217606SJames.McPherson@Sun.COM 
8227606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PREFETCHABLE_MEMORY_BASE_UPPER32_REG	0x28
8237606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PREFETCHABLE_MEMORY_LIMIT_UPPER32_REG	0x2C
8247606SJames.McPherson@Sun.COM 
8257606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_CAPABILITIES_POINTER_REG		0x34
8267606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PRIMARY_INTERRUPT_LINE_REG	0x3C
8277606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_PRIMARY_INTERRUPT_PIN_REG	0x3D
8287606SJames.McPherson@Sun.COM #define	ARCMSR_PCI2PCI_BRIDGE_CONTROL_REG		0x3E
8297606SJames.McPherson@Sun.COM 
8307606SJames.McPherson@Sun.COM 
8317606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_VENDOR_ID_REG		0x00
8327606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_DEVICE_ID_REG		0x02
8337606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_COMMAND_REG			0x04
8347606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_STATUS_REG			0x06
8357606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_REVISION_REG			0x08
8367606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_CLASS_CODE_REG		0x09
8377606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_CACHELINE_SIZE_REG		0x0C
8387606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_LATENCY_TIMER_REG		0x0D
8397606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_HEADER_TYPE_REG		0x0E
8407606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_BIST_REG			0x0F
8417606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_BASE_ADDRESS0_REG	0x10
8427606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_MEMORY_PREFETCHABLE	0x08
8437606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_MEMORY_WINDOW64	0x04
8447606SJames.McPherson@Sun.COM 
8457606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_UPPER_BASE_ADDRESS0_REG	0x14
8467606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_BASE_ADDRESS1_REG		0x18
8477606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_UPPER_BASE_ADDRESS1_REG	0x1C
8487606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_BASE_ADDRESS2_REG		0x20
8497606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_UPPER_BASE_ADDRESS2_REG	0x24
8507606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_SUBSYSTEM_VENDOR_ID_REG		0x2C
8517606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_SUBSYSTEM_ID_REG			0x2E
8527606SJames.McPherson@Sun.COM #define	ARCMSR_EXPANSION_ROM_BASE_ADDRESS_REG		0x30
8537606SJames.McPherson@Sun.COM 
8547606SJames.McPherson@Sun.COM #define	ARCMSR_EXPANSION_ROM_ADDRESS_DECODE_ENABLE	0x01
8557606SJames.McPherson@Sun.COM 
8567606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_CAPABILITY_PTR_REG		0x34
8577606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_INTERRUPT_LINE_REG		0x3C
8587606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_INTERRUPT_PIN_REG		0x3D
8597606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_MINIMUM_GRANT_REG		0x3E
8607606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_MAXIMUM_LATENCY_REG		0x3F
8617606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_LIMIT0_REG		0x40
8627606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_TRANSLATE_VALUE0_REG	0x44
8637606SJames.McPherson@Sun.COM #define	ARCMSR_EXPANSION_ROM_LIMIT_REG		0x48
8647606SJames.McPherson@Sun.COM #define	ARCMSR_EXPANSION_ROM_TRANSLATE_VALUE_REG	0x4C
8657606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_LIMIT1_REG			0x50
8667606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_LIMIT2_REG			0x54
8677606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_TRANSLATE_VALUE2_REG		0x58
8687606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_IO_WINDOW_TRANSLATE_VALUE_REG	0x5C
8697606SJames.McPherson@Sun.COM 
8707606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_MEMORY_WINDOW_TRANSLATE_VALUE0_REG		0x60
8717606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_UPPER32_MEMORY_WINDOW_TRANSLATE_VALUE0_REG	0x64
8727606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_MEMORY_WINDOW_TRANSLATE_VALUE1_REG		0x68
8737606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_UPPER32_MEMORY_WINDOW_TRANSLATE_VALUE1_REG	0x6C
8747606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_UPPER32_DIRECT_WINDOW_TRANSLATE_VALUE_REG	0x78
8757606SJames.McPherson@Sun.COM 
8767606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_CONFIGURATION_REG			0x80
8777606SJames.McPherson@Sun.COM #define	ARCMSR_PCI_CONFIGURATION_STATUS_REG		0x84
8787606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_INTERRUPT_STATUS_REG			0x88
8797606SJames.McPherson@Sun.COM #define	ARCMSR_ATU_INTERRUPT_MASK_REG			0x8C
8807606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_BASE_ADDRESS3_REG		0x90
8817606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_UPPER_BASE_ADDRESS3_REG	0x94
8827606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_LIMIT3_REG			0x98
8837606SJames.McPherson@Sun.COM #define	ARCMSR_INBOUND_ATU_TRANSLATE_VALUE3_REG		0x9C
8847606SJames.McPherson@Sun.COM 
8857606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_CONFIGURATION_CYCLE_ADDRESS_REG		0xA4
8867606SJames.McPherson@Sun.COM #define	ARCMSR_OUTBOUND_CONFIGURATION_CYCLE_DATA_REG		0xAC
8877606SJames.McPherson@Sun.COM #define	ARCMSR_VPD_CAPABILITY_IDENTIFIER_REG			0xB8
8887606SJames.McPherson@Sun.COM #define	ARCMSR_VPD_NEXT_ITEM_PTR_REG				0xB9
8897606SJames.McPherson@Sun.COM #define	ARCMSR_VPD_ADDRESS_REG					0xBA
8907606SJames.McPherson@Sun.COM #define	ARCMSR_VPD_DATA_REG					0xBC
8917606SJames.McPherson@Sun.COM #define	ARCMSR_POWER_MANAGEMENT_CAPABILITY_IDENTIFIER_REG	0xC0
8927606SJames.McPherson@Sun.COM #define	ARCMSR_POWER_NEXT_ITEM_PTR_REG				0xC1
8937606SJames.McPherson@Sun.COM #define	ARCMSR_POWER_MANAGEMENT_CAPABILITY_REG			0xC2
8947606SJames.McPherson@Sun.COM #define	ARCMSR_POWER_MANAGEMENT_CONTROL_STATUS_REG		0xC4
8957606SJames.McPherson@Sun.COM #define	ARCMSR_PCIX_CAPABILITY_IDENTIFIER_REG			0xE0
8967606SJames.McPherson@Sun.COM #define	ARCMSR_PCIX_NEXT_ITEM_PTR_REG				0xE1
8977606SJames.McPherson@Sun.COM #define	ARCMSR_PCIX_COMMAND_REG					0xE2
8987606SJames.McPherson@Sun.COM #define	ARCMSR_PCIX_STATUS_REG					0xE4
8997606SJames.McPherson@Sun.COM 
9007606SJames.McPherson@Sun.COM 
9017606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_MESSAGE_REG0				0x10
9027606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_MESSAGE_REG1				0x14
9037606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_MESSAGE_REG0				0x18
9047606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_MESSAGE_REG1				0x1C
9057606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_DOORBELL_REG				0x20
9067606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_INTERRUPT_STATUS_REG			0x24
9077606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_INTERRUPT_MASK_REG			0x28
9087606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_DOORBELL_REG				0x2C
9097606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_INTERRUPT_STATUS_REG			0x30
9107606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_INTERRUPT_MASK_REG			0x34
9117606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_QUEUE_PORT_REG			0x40
9127606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_QUEUE_PORT_REG			0x44
9137606SJames.McPherson@Sun.COM 
9147606SJames.McPherson@Sun.COM 
9157606SJames.McPherson@Sun.COM 
9167606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_MESSAGE0_INT				0x01
9177606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_MESSAGE1_INT				0x02
9187606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_DOORBELL_INT				0x04
9197606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_ERROR_DOORBELL_INT			0x08
9207606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_POSTQUEUE_INT				0x10
9217606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_QUEUEFULL_INT				0x20
9227606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_INDEX_INT				0x40
9237606SJames.McPherson@Sun.COM 
9247606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_MESSAGE0_INTMASKENABLE		0x01
9257606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_MESSAGE1_INTMASKENABLE		0x02
9267606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_DOORBELL_INTMASKENABLE		0x04
9277606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_DOORBELL_ERROR_INTMASKENABLE		0x08
9287606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_POSTQUEUE_INTMASKENABLE		0x10
9297606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_QUEUEFULL_INTMASKENABLE		0x20
9307606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_INDEX_INTMASKENABLE			0x40
9317606SJames.McPherson@Sun.COM 
9327606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_MESSAGE0_INT 			0x01
9337606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_MESSAGE1_INT 			0x02
9347606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_DOORBELL_INT 			0x04
9357606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_POSTQUEUE_INT			0x08
9367606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_PCI_INT				0x10
9377606SJames.McPherson@Sun.COM 
9387606SJames.McPherson@Sun.COM 
9397606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_HANDLE_INT \
9407606SJames.McPherson@Sun.COM 	(ARCMSR_MU_OUTBOUND_MESSAGE0_INT| \
9417606SJames.McPherson@Sun.COM 	ARCMSR_MU_OUTBOUND_MESSAGE1_INT| \
9427606SJames.McPherson@Sun.COM 	ARCMSR_MU_OUTBOUND_DOORBELL_INT| \
9437606SJames.McPherson@Sun.COM 	ARCMSR_MU_OUTBOUND_POSTQUEUE_INT| \
9447606SJames.McPherson@Sun.COM 		ARCMSR_MU_OUTBOUND_PCI_INT)
9457606SJames.McPherson@Sun.COM 
9467606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_MESSAGE0_INTMASKENABLE		0x01
9477606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_MESSAGE1_INTMASKENABLE		0x02
9487606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_DOORBELL_INTMASKENABLE		0x04
9497606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_POSTQUEUE_INTMASKENABLE		0x08
9507606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_PCI_INTMASKENABLE			0x10
9517606SJames.McPherson@Sun.COM 
9527606SJames.McPherson@Sun.COM #define	ARCMSR_MU_OUTBOUND_ALL_INTMASKENABLE			0x1F
9537606SJames.McPherson@Sun.COM 
9547606SJames.McPherson@Sun.COM #define	ARCMSR_MU_CONFIGURATION_REG				0xFFFFE350
9557606SJames.McPherson@Sun.COM #define	ARCMSR_MU_QUEUE_BASE_ADDRESS_REG			0xFFFFE354
9567606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_FREE_HEAD_PTR_REG			0xFFFFE360
9577606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_FREE_TAIL_PTR_REG			0xFFFFE364
9587606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_POST_HEAD_PTR_REG			0xFFFFE368
9597606SJames.McPherson@Sun.COM #define	ARCMSR_MU_INBOUND_POST_TAIL_PTR_REG			0xFFFFE36C
9607606SJames.McPherson@Sun.COM #define	ARCMSR_MU_LOCAL_MEMORY_INDEX_REG			0xFFFFE380
9617606SJames.McPherson@Sun.COM 
9627606SJames.McPherson@Sun.COM #define	ARCMSR_MU_CIRCULAR_QUEUE_ENABLE				0x0001
9637606SJames.McPherson@Sun.COM #define	ARCMSR_MU_CIRCULAR_QUEUE_SIZE4K				0x0002
9647606SJames.McPherson@Sun.COM #define	ARCMSR_MU_CIRCULAR_QUEUE_SIZE8K				0x0004
9657606SJames.McPherson@Sun.COM #define	ARCMSR_MU_CIRCULAR_QUEUE_SIZE16K			0x0008
9667606SJames.McPherson@Sun.COM #define	ARCMSR_MU_CIRCULAR_QUEUE_SIZE32K			0x0010
9677606SJames.McPherson@Sun.COM #define	ARCMSR_MU_CIRCULAR_QUEUE_SIZE64K			0x0020
9687606SJames.McPherson@Sun.COM 
9697606SJames.McPherson@Sun.COM 
9707606SJames.McPherson@Sun.COM 
9717606SJames.McPherson@Sun.COM #ifdef	__cplusplus
9727606SJames.McPherson@Sun.COM }
9737606SJames.McPherson@Sun.COM #endif
9747606SJames.McPherson@Sun.COM /* arcmsr.h */
9757606SJames.McPherson@Sun.COM #endif /* _SYS_SCSI_ADAPTERS_ARCMSR_H */
976