15b504601Sjiang wu - Sun Microsystems - Beijing China /*
25b504601Sjiang wu - Sun Microsystems - Beijing China  * CDDL HEADER START
35b504601Sjiang wu - Sun Microsystems - Beijing China  *
45b504601Sjiang wu - Sun Microsystems - Beijing China  * The contents of this file are subject to the terms of the
55b504601Sjiang wu - Sun Microsystems - Beijing China  * Common Development and Distribution License (the "License").
65b504601Sjiang wu - Sun Microsystems - Beijing China  * You may not use this file except in compliance with the License.
75b504601Sjiang wu - Sun Microsystems - Beijing China  *
85b504601Sjiang wu - Sun Microsystems - Beijing China  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95b504601Sjiang wu - Sun Microsystems - Beijing China  * or http://www.opensolaris.org/os/licensing.
105b504601Sjiang wu - Sun Microsystems - Beijing China  * See the License for the specific language governing permissions
115b504601Sjiang wu - Sun Microsystems - Beijing China  * and limitations under the License.
125b504601Sjiang wu - Sun Microsystems - Beijing China  *
135b504601Sjiang wu - Sun Microsystems - Beijing China  * When distributing Covered Code, include this CDDL HEADER in each
145b504601Sjiang wu - Sun Microsystems - Beijing China  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
155b504601Sjiang wu - Sun Microsystems - Beijing China  * If applicable, add the following below this CDDL HEADER, with the
165b504601Sjiang wu - Sun Microsystems - Beijing China  * fields enclosed by brackets "[]" replaced with your own identifying
175b504601Sjiang wu - Sun Microsystems - Beijing China  * information: Portions Copyright [yyyy] [name of copyright owner]
185b504601Sjiang wu - Sun Microsystems - Beijing China  *
195b504601Sjiang wu - Sun Microsystems - Beijing China  * CDDL HEADER END
205b504601Sjiang wu - Sun Microsystems - Beijing China  */
215b504601Sjiang wu - Sun Microsystems - Beijing China 
225b504601Sjiang wu - Sun Microsystems - Beijing China /*
239814ff7fSYong-Feng Du  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
2439fd84a8SHans Rosenfeld  * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
25508a0e8cSRob Johnston  * Copyright 2019 Joyent, Inc.
26ed7418aeSAndy Giles  * Copyright (c) 2014, Tegile Systems Inc. All rights reserved.
27*72a2c484SHans Rosenfeld  * Copyright 2023 Racktop Systems, Inc.
285b504601Sjiang wu - Sun Microsystems - Beijing China  */
295b504601Sjiang wu - Sun Microsystems - Beijing China 
305b504601Sjiang wu - Sun Microsystems - Beijing China /*
31c8f74a56SAda  * Copyright (c) 2000 to 2010, LSI Corporation.
325b504601Sjiang wu - Sun Microsystems - Beijing China  * All rights reserved.
335b504601Sjiang wu - Sun Microsystems - Beijing China  *
345b504601Sjiang wu - Sun Microsystems - Beijing China  * Redistribution and use in source and binary forms of all code within
355b504601Sjiang wu - Sun Microsystems - Beijing China  * this file that is exclusively owned by LSI, with or without
365b504601Sjiang wu - Sun Microsystems - Beijing China  * modification, is permitted provided that, in addition to the CDDL 1.0
375b504601Sjiang wu - Sun Microsystems - Beijing China  * License requirements, the following conditions are met:
385b504601Sjiang wu - Sun Microsystems - Beijing China  *
395b504601Sjiang wu - Sun Microsystems - Beijing China  *    Neither the name of the author nor the names of its contributors may be
405b504601Sjiang wu - Sun Microsystems - Beijing China  *    used to endorse or promote products derived from this software without
415b504601Sjiang wu - Sun Microsystems - Beijing China  *    specific prior written permission.
425b504601Sjiang wu - Sun Microsystems - Beijing China  *
435b504601Sjiang wu - Sun Microsystems - Beijing China  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
445b504601Sjiang wu - Sun Microsystems - Beijing China  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
455b504601Sjiang wu - Sun Microsystems - Beijing China  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
465b504601Sjiang wu - Sun Microsystems - Beijing China  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
475b504601Sjiang wu - Sun Microsystems - Beijing China  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
485b504601Sjiang wu - Sun Microsystems - Beijing China  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
495b504601Sjiang wu - Sun Microsystems - Beijing China  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
505b504601Sjiang wu - Sun Microsystems - Beijing China  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
515b504601Sjiang wu - Sun Microsystems - Beijing China  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
525b504601Sjiang wu - Sun Microsystems - Beijing China  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
535b504601Sjiang wu - Sun Microsystems - Beijing China  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
545b504601Sjiang wu - Sun Microsystems - Beijing China  * DAMAGE.
555b504601Sjiang wu - Sun Microsystems - Beijing China  */
565b504601Sjiang wu - Sun Microsystems - Beijing China 
575b504601Sjiang wu - Sun Microsystems - Beijing China #ifndef _SYS_SCSI_ADAPTERS_MPTVAR_H
585b504601Sjiang wu - Sun Microsystems - Beijing China #define	_SYS_SCSI_ADAPTERS_MPTVAR_H
595b504601Sjiang wu - Sun Microsystems - Beijing China 
605b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/byteorder.h>
61cb3e7fb4SAlbert Lee #include <sys/queue.h>
62db2effc6SRobert Mustacchi #include <sys/refhash.h>
635b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/isa_defs.h>
645b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/sunmdi.h>
655b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/mdi_impldefs.h>
66508a0e8cSRob Johnston #include <sys/ddi_ufm.h>
675b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/scsi/adapters/mpt_sas/mptsas_ioctl.h>
68*72a2c484SHans Rosenfeld #include <sys/scsi/adapters/mpi/mpi2_tool.h>
69*72a2c484SHans Rosenfeld #include <sys/scsi/adapters/mpi/mpi2_cnfg.h>
705b504601Sjiang wu - Sun Microsystems - Beijing China 
715b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef	__cplusplus
725b504601Sjiang wu - Sun Microsystems - Beijing China extern "C" {
735b504601Sjiang wu - Sun Microsystems - Beijing China #endif
745b504601Sjiang wu - Sun Microsystems - Beijing China 
755b504601Sjiang wu - Sun Microsystems - Beijing China /*
765b504601Sjiang wu - Sun Microsystems - Beijing China  * Compile options
775b504601Sjiang wu - Sun Microsystems - Beijing China  */
785b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef DEBUG
795b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DEBUG		/* turn on debugging code */
805b504601Sjiang wu - Sun Microsystems - Beijing China #endif	/* DEBUG */
815b504601Sjiang wu - Sun Microsystems - Beijing China 
825b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_INITIAL_SOFT_SPACE	4
835b504601Sjiang wu - Sun Microsystems - Beijing China 
84cdc7c7feSAda /*
85cdc7c7feSAda  * Note below macro definition and data type definition
86cdc7c7feSAda  * are used for phy mask handling, it should be changed
87cdc7c7feSAda  * simultaneously.
88cdc7c7feSAda  */
895ee44debSRobert Mustacchi #define	MPTSAS_MAX_PHYS		24
905ee44debSRobert Mustacchi typedef uint32_t		mptsas_phymask_t;
915b504601Sjiang wu - Sun Microsystems - Beijing China 
925b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_INVALID_DEVHDL	0xffff
93f2e8686eSxun ni - Sun Microsystems - Beijing China #define	MPTSAS_SATA_GUID	"sata-guid"
945b504601Sjiang wu - Sun Microsystems - Beijing China 
95da5ab83fSKeith M Wesolowski /*
96da5ab83fSKeith M Wesolowski  * Hash table sizes for SMP targets (i.e., expanders) and ordinary SSP/STP
97da5ab83fSKeith M Wesolowski  * targets.  There's no need to go overboard here, as the ordinary paths for
98da5ab83fSKeith M Wesolowski  * I/O do not normally require hashed target lookups.  These should be good
99da5ab83fSKeith M Wesolowski  * enough and then some for any fabric within the hardware's capabilities.
100da5ab83fSKeith M Wesolowski  */
101da5ab83fSKeith M Wesolowski #define	MPTSAS_SMP_BUCKET_COUNT		23
102da5ab83fSKeith M Wesolowski #define	MPTSAS_TARGET_BUCKET_COUNT	97
10339fd84a8SHans Rosenfeld #define	MPTSAS_TMP_TARGET_BUCKET_COUNT	13
104da5ab83fSKeith M Wesolowski 
1055b504601Sjiang wu - Sun Microsystems - Beijing China /*
1065b504601Sjiang wu - Sun Microsystems - Beijing China  * MPT HW defines
1075b504601Sjiang wu - Sun Microsystems - Beijing China  */
1085b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_DISKS_IN_CONFIG	14
1095b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_DISKS_IN_VOL		10
1105b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_HOTSPARES		2
1115b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_RAIDVOLS		2
1125b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_RAIDCONFIGS		5
1135b504601Sjiang wu - Sun Microsystems - Beijing China 
1145b504601Sjiang wu - Sun Microsystems - Beijing China /*
1155b504601Sjiang wu - Sun Microsystems - Beijing China  * 64-bit SAS WWN is displayed as 16 characters as HEX characters,
116c6698ca1Sming li - Sun Microsystems - Beijing China  * plus two means the prefix 'w' and end of the string '\0'.
1175b504601Sjiang wu - Sun Microsystems - Beijing China  */
118c6698ca1Sming li - Sun Microsystems - Beijing China #define	MPTSAS_WWN_STRLEN	(16 + 2)
1195b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_GUID_LEN	64
1205b504601Sjiang wu - Sun Microsystems - Beijing China 
1215b504601Sjiang wu - Sun Microsystems - Beijing China /*
1225b504601Sjiang wu - Sun Microsystems - Beijing China  * DMA routine flags
1235b504601Sjiang wu - Sun Microsystems - Beijing China  */
1245b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DMA_HANDLE_ALLOCD	0x2
1255b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DMA_MEMORY_ALLOCD	0x4
1265b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DMA_HANDLE_BOUND	0x8
1275b504601Sjiang wu - Sun Microsystems - Beijing China 
1285b504601Sjiang wu - Sun Microsystems - Beijing China /*
1295b504601Sjiang wu - Sun Microsystems - Beijing China  * If the HBA supports DMA or bus-mastering, you may have your own
1305b504601Sjiang wu - Sun Microsystems - Beijing China  * scatter-gather list for physically non-contiguous memory in one
1315b504601Sjiang wu - Sun Microsystems - Beijing China  * I/O operation; if so, there's probably a size for that list.
1325b504601Sjiang wu - Sun Microsystems - Beijing China  * It must be placed in the ddi_dma_lim_t structure, so that the system
1335b504601Sjiang wu - Sun Microsystems - Beijing China  * DMA-support routines can use it to break up the I/O request, so we
1345b504601Sjiang wu - Sun Microsystems - Beijing China  * define it here.
1355b504601Sjiang wu - Sun Microsystems - Beijing China  */
1365b504601Sjiang wu - Sun Microsystems - Beijing China #if defined(__sparc)
1375b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_DMA_SEGS	1
1385b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_CMD_SEGS	1
1395b504601Sjiang wu - Sun Microsystems - Beijing China #else
1405b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_DMA_SEGS	256
1415b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_CMD_SEGS	257
1425b504601Sjiang wu - Sun Microsystems - Beijing China #endif
1435b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_FRAME_SGES(mpt) \
1445b504601Sjiang wu - Sun Microsystems - Beijing China 	(((mpt->m_req_frame_size - (sizeof (MPI2_SCSI_IO_REQUEST))) / 8) + 1)
1455b504601Sjiang wu - Sun Microsystems - Beijing China 
146ed7418aeSAndy Giles #define	MPTSAS_SGE_SIZE(mpt)					\
147ed7418aeSAndy Giles 	((mpt)->m_MPI25 ? sizeof (MPI2_IEEE_SGE_SIMPLE64) :	\
148ed7418aeSAndy Giles 	    sizeof (MPI2_SGE_SIMPLE64))
149ed7418aeSAndy Giles 
1505b504601Sjiang wu - Sun Microsystems - Beijing China /*
151ed7418aeSAndy Giles  * Calculating how many 64-bit DMA simple elements can be stored in the first
1525b504601Sjiang wu - Sun Microsystems - Beijing China  * frame. Note that msg_scsi_io_request contains 2 double-words (8 bytes) for
1535b504601Sjiang wu - Sun Microsystems - Beijing China  * element storage.  And 64-bit dma element is 3 double-words (12 bytes) in
154ed7418aeSAndy Giles  * size. IEEE 64-bit dma element used for SAS3 controllers is 4 double-words
155ed7418aeSAndy Giles  * (16 bytes).
1565b504601Sjiang wu - Sun Microsystems - Beijing China  */
1575b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_MAX_FRAME_SGES64(mpt) \
1585b504601Sjiang wu - Sun Microsystems - Beijing China 	((mpt->m_req_frame_size - \
159ed7418aeSAndy Giles 	sizeof (MPI2_SCSI_IO_REQUEST) + sizeof (MPI2_SGE_IO_UNION)) / \
160ed7418aeSAndy Giles 	MPTSAS_SGE_SIZE(mpt))
1615b504601Sjiang wu - Sun Microsystems - Beijing China 
1625b504601Sjiang wu - Sun Microsystems - Beijing China /*
1635b504601Sjiang wu - Sun Microsystems - Beijing China  * Scatter-gather list structure defined by HBA hardware
1645b504601Sjiang wu - Sun Microsystems - Beijing China  */
1655b504601Sjiang wu - Sun Microsystems - Beijing China typedef	struct NcrTableIndirect {	/* Table Indirect entries */
1665b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t count;		/* 24 bit count */
1675b504601Sjiang wu - Sun Microsystems - Beijing China 	union {
1685b504601Sjiang wu - Sun Microsystems - Beijing China 		uint32_t address32;	/* 32 bit address */
1695b504601Sjiang wu - Sun Microsystems - Beijing China 		struct {
1705b504601Sjiang wu - Sun Microsystems - Beijing China 			uint32_t Low;
1715b504601Sjiang wu - Sun Microsystems - Beijing China 			uint32_t High;
1725b504601Sjiang wu - Sun Microsystems - Beijing China 		} address64;		/* 64 bit address */
1735b504601Sjiang wu - Sun Microsystems - Beijing China 	} addr;
1745b504601Sjiang wu - Sun Microsystems - Beijing China } mptti_t;
1755b504601Sjiang wu - Sun Microsystems - Beijing China 
1765b504601Sjiang wu - Sun Microsystems - Beijing China /*
1775b504601Sjiang wu - Sun Microsystems - Beijing China  * preferred pkt_private length in 64-bit quantities
1785b504601Sjiang wu - Sun Microsystems - Beijing China  */
1795b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef	_LP64
1805b504601Sjiang wu - Sun Microsystems - Beijing China #define	PKT_PRIV_SIZE	2
1815b504601Sjiang wu - Sun Microsystems - Beijing China #define	PKT_PRIV_LEN	16	/* in bytes */
1825b504601Sjiang wu - Sun Microsystems - Beijing China #else /* _ILP32 */
1835b504601Sjiang wu - Sun Microsystems - Beijing China #define	PKT_PRIV_SIZE	1
1845b504601Sjiang wu - Sun Microsystems - Beijing China #define	PKT_PRIV_LEN	8	/* in bytes */
1855b504601Sjiang wu - Sun Microsystems - Beijing China #endif
1865b504601Sjiang wu - Sun Microsystems - Beijing China 
1875b504601Sjiang wu - Sun Microsystems - Beijing China #define	PKT2CMD(pkt)	((struct mptsas_cmd *)((pkt)->pkt_ha_private))
1885b504601Sjiang wu - Sun Microsystems - Beijing China #define	CMD2PKT(cmdp)	((struct scsi_pkt *)((cmdp)->cmd_pkt))
1895b504601Sjiang wu - Sun Microsystems - Beijing China #define	EXTCMDS_STATUS_SIZE (sizeof (struct scsi_arq_status))
1905b504601Sjiang wu - Sun Microsystems - Beijing China 
1915b504601Sjiang wu - Sun Microsystems - Beijing China /*
1925b504601Sjiang wu - Sun Microsystems - Beijing China  * get offset of item in structure
1935b504601Sjiang wu - Sun Microsystems - Beijing China  */
1945b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_GET_ITEM_OFF(type, member) ((size_t)(&((type *)0)->member))
1955b504601Sjiang wu - Sun Microsystems - Beijing China 
1965b504601Sjiang wu - Sun Microsystems - Beijing China /*
1975b504601Sjiang wu - Sun Microsystems - Beijing China  * WWID provided by LSI firmware is generated by firmware but the WWID is not
1985b504601Sjiang wu - Sun Microsystems - Beijing China  * IEEE NAA standard format, OBP has no chance to distinguish format of unit
1995b504601Sjiang wu - Sun Microsystems - Beijing China  * address. According LSI's confirmation, the top nibble of RAID WWID is
2005b504601Sjiang wu - Sun Microsystems - Beijing China  * meanless, so the consensus between Solaris and OBP is to replace top nibble
2015b504601Sjiang wu - Sun Microsystems - Beijing China  * of WWID provided by LSI to "3" always to hint OBP that this is a RAID WWID
2025b504601Sjiang wu - Sun Microsystems - Beijing China  * format unit address.
2035b504601Sjiang wu - Sun Microsystems - Beijing China  */
2045b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_RAID_WWID(wwid) \
2055b504601Sjiang wu - Sun Microsystems - Beijing China 	((wwid & 0x0FFFFFFFFFFFFFFF) | 0x3000000000000000)
2065b504601Sjiang wu - Sun Microsystems - Beijing China 
207da5ab83fSKeith M Wesolowski typedef struct mptsas_target_addr {
208da5ab83fSKeith M Wesolowski 	uint64_t mta_wwn;
209da5ab83fSKeith M Wesolowski 	mptsas_phymask_t mta_phymask;
210da5ab83fSKeith M Wesolowski } mptsas_target_addr_t;
211da5ab83fSKeith M Wesolowski 
212cb3e7fb4SAlbert Lee TAILQ_HEAD(mptsas_active_cmdq, mptsas_cmd);
213cb3e7fb4SAlbert Lee typedef struct mptsas_active_cmdq mptsas_active_cmdq_t;
214cb3e7fb4SAlbert Lee 
2155b504601Sjiang wu - Sun Microsystems - Beijing China typedef	struct mptsas_target {
216da5ab83fSKeith M Wesolowski 		mptsas_target_addr_t	m_addr;
217da5ab83fSKeith M Wesolowski 		refhash_link_t		m_link;
218da5ab83fSKeith M Wesolowski 		uint8_t			m_dr_flag;
2195b504601Sjiang wu - Sun Microsystems - Beijing China 		uint16_t		m_devhdl;
2205b504601Sjiang wu - Sun Microsystems - Beijing China 		uint32_t		m_deviceinfo;
2215b504601Sjiang wu - Sun Microsystems - Beijing China 		uint8_t			m_phynum;
2225b504601Sjiang wu - Sun Microsystems - Beijing China 		uint32_t		m_dups;
223cb3e7fb4SAlbert Lee 		mptsas_active_cmdq_t	m_active_cmdq;
2245b504601Sjiang wu - Sun Microsystems - Beijing China 		int32_t			m_t_throttle;
2255b504601Sjiang wu - Sun Microsystems - Beijing China 		int32_t			m_t_ncmds;
2265b504601Sjiang wu - Sun Microsystems - Beijing China 		int32_t			m_reset_delay;
2275b504601Sjiang wu - Sun Microsystems - Beijing China 		int32_t			m_t_nwait;
2285b504601Sjiang wu - Sun Microsystems - Beijing China 
2295b504601Sjiang wu - Sun Microsystems - Beijing China 		uint16_t		m_qfull_retry_interval;
2305b504601Sjiang wu - Sun Microsystems - Beijing China 		uint8_t			m_qfull_retries;
231ed7418aeSAndy Giles 		uint16_t		m_io_flags;
2329814ff7fSYong-Feng Du 		uint16_t		m_enclosure;
2339814ff7fSYong-Feng Du 		uint16_t		m_slot_num;
2349814ff7fSYong-Feng Du 		uint32_t		m_tgt_unconfigured;
2355b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_target_t;
2365b504601Sjiang wu - Sun Microsystems - Beijing China 
237a92ef4b0SKeith M Wesolowski /*
238a92ef4b0SKeith M Wesolowski  * If you change this structure, be sure that mptsas_smp_target_copy()
239a92ef4b0SKeith M Wesolowski  * does the right thing.
240a92ef4b0SKeith M Wesolowski  */
2415b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_smp {
242da5ab83fSKeith M Wesolowski 	mptsas_target_addr_t	m_addr;
243da5ab83fSKeith M Wesolowski 	refhash_link_t		m_link;
244da5ab83fSKeith M Wesolowski 	uint16_t		m_devhdl;
245da5ab83fSKeith M Wesolowski 	uint32_t		m_deviceinfo;
246da5ab83fSKeith M Wesolowski 	uint16_t		m_pdevhdl;
247da5ab83fSKeith M Wesolowski 	uint32_t		m_pdevinfo;
2485b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_smp_t;
2495b504601Sjiang wu - Sun Microsystems - Beijing China 
25015ada8fcSRobert Mustacchi /*
25115ada8fcSRobert Mustacchi  * This represents a single enclosure. Targets point to an enclosure through
25215ada8fcSRobert Mustacchi  * their m_enclosure member.
25315ada8fcSRobert Mustacchi  */
25415ada8fcSRobert Mustacchi typedef struct mptsas_enclosure {
25515ada8fcSRobert Mustacchi 	list_node_t	me_link;
25615ada8fcSRobert Mustacchi 	uint16_t	me_enchdl;
25715ada8fcSRobert Mustacchi 	uint16_t	me_flags;
258bf62a5c5SRobert Mustacchi 	uint16_t	me_nslots;
259bf62a5c5SRobert Mustacchi 	uint16_t	me_fslot;
260bf62a5c5SRobert Mustacchi 	uint8_t		*me_slotleds;
26115ada8fcSRobert Mustacchi } mptsas_enclosure_t;
26215ada8fcSRobert Mustacchi 
2635b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_cache_frames {
2645b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_handle_t m_dma_hdl;
2655b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_acc_handle_t m_acc_hdl;
2665b504601Sjiang wu - Sun Microsystems - Beijing China 	caddr_t m_frames_addr;
267940efceeSAndy Giles 	uint64_t m_phys_addr;
2685b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_cache_frames_t;
2695b504601Sjiang wu - Sun Microsystems - Beijing China 
2705b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct	mptsas_cmd {
2715b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t			cmd_flags;	/* flags from scsi_init_pkt */
2725b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_handle_t	cmd_dmahandle;	/* dma handle */
2735b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_cookie_t	cmd_cookie;
2745b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t			cmd_cookiec;
2755b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t			cmd_winindex;
2765b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t			cmd_nwin;
2775b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t			cmd_cur_cookie;
2785b504601Sjiang wu - Sun Microsystems - Beijing China 	off_t			cmd_dma_offset;
2795b504601Sjiang wu - Sun Microsystems - Beijing China 	size_t			cmd_dma_len;
2805b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		cmd_totaldmacount;
28160bf7f6fSAndy Giles 	caddr_t			cmd_arq_buf;
2825b504601Sjiang wu - Sun Microsystems - Beijing China 
2835b504601Sjiang wu - Sun Microsystems - Beijing China 	int			cmd_pkt_flags;
2845b504601Sjiang wu - Sun Microsystems - Beijing China 
285cb3e7fb4SAlbert Lee 	/* pending expiration time for command in active slot */
286cb3e7fb4SAlbert Lee 	hrtime_t		cmd_active_expiration;
287cb3e7fb4SAlbert Lee 	TAILQ_ENTRY(mptsas_cmd)	cmd_active_link;
2885b504601Sjiang wu - Sun Microsystems - Beijing China 
2895b504601Sjiang wu - Sun Microsystems - Beijing China 	struct scsi_pkt		*cmd_pkt;
2905b504601Sjiang wu - Sun Microsystems - Beijing China 	struct scsi_arq_status	cmd_scb;
2915b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t			cmd_cdblen;	/* length of cdb */
2925b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t			cmd_rqslen;	/* len of requested rqsense */
2935b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t			cmd_privlen;
29460bf7f6fSAndy Giles 	uint16_t		cmd_extrqslen;	/* len of extended rqsense */
29560bf7f6fSAndy Giles 	uint16_t		cmd_extrqschunks; /* len in map chunks */
29660bf7f6fSAndy Giles 	uint16_t		cmd_extrqsidx;	/* Index into map */
2975b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t			cmd_scblen;
2985b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		cmd_dmacount;
2995b504601Sjiang wu - Sun Microsystems - Beijing China 	uint64_t		cmd_dma_addr;
3005b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t			cmd_age;
3015b504601Sjiang wu - Sun Microsystems - Beijing China 	ushort_t		cmd_qfull_retries;
3025b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t			cmd_queued;	/* true if queued */
3035b504601Sjiang wu - Sun Microsystems - Beijing China 	struct mptsas_cmd	*cmd_linkp;
3045b504601Sjiang wu - Sun Microsystems - Beijing China 	mptti_t			*cmd_sg; /* Scatter/Gather structure */
3055b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t			cmd_cdb[SCSI_CDB_SIZE];
3065b504601Sjiang wu - Sun Microsystems - Beijing China 	uint64_t		cmd_pkt_private[PKT_PRIV_LEN];
3075b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		cmd_slot;
3085b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		ioc_cmd_slot;
3095b504601Sjiang wu - Sun Microsystems - Beijing China 
3105b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_cache_frames_t	*cmd_extra_frames;
3115b504601Sjiang wu - Sun Microsystems - Beijing China 
3125b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		cmd_rfm;
3135b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_target_t		*cmd_tgt_addr;
3145b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_cmd_t;
3155b504601Sjiang wu - Sun Microsystems - Beijing China 
3165b504601Sjiang wu - Sun Microsystems - Beijing China /*
3175b504601Sjiang wu - Sun Microsystems - Beijing China  * These are the defined cmd_flags for this structure.
3185b504601Sjiang wu - Sun Microsystems - Beijing China  */
3195b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_CMDDISC		0x000001 /* cmd currently disconnected */
3205b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_WATCH		0x000002 /* watchdog time for this command */
3215b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_FINISHED		0x000004 /* command completed */
3225b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_CHKSEG		0x000008 /* check cmd_data within seg */
3235b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_COMPLETED		0x000010 /* completion routine called */
3245b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_PREPARED		0x000020 /* pkt has been init'ed */
3255b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_IN_TRANSPORT	0x000040 /* in use by host adapter driver */
3265b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_RESTORE_PTRS	0x000080 /* implicit restore ptr on reconnect */
3275b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_ARQ_IN_PROGRESS	0x000100 /* auto request sense in progress */
3285b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_TRANFLAG		0x0001ff /* covers transport part of flags */
3295b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_TM_CMD		0x000200 /* cmd is a task management command */
3305b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_CMDARQ		0x000400 /* cmd is a 'rqsense' command */
3315b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_DMAVALID		0x000800 /* dma mapping valid */
3325b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_DMASEND		0x001000 /* data is going 'out' */
3335b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_CMDIOPB		0x002000 /* this is an 'iopb' packet */
3345b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_CDBEXTERN		0x004000 /* cdb kmem_alloc'd */
3355b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_SCBEXTERN		0x008000 /* scb kmem_alloc'd */
3365b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_FREE		0x010000 /* packet is on free list */
3375b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_PRIVEXTERN	0x020000 /* target private kmem_alloc'd */
3385b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_DMA_PARTIAL	0x040000 /* partial xfer OK */
3395b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_QFULL_STATUS	0x080000 /* pkt got qfull status */
3405b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_TIMEOUT		0x100000 /* passthru/config command timeout */
3415b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_PMM_RECEIVED	0x200000 /* use cmd_pmm* for saving pointers */
3425b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_RETRY		0x400000 /* cmd has been retried */
3435b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_CMDIOC		0x800000 /* cmd is just for for ioc, no io */
3445b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_PASSTHRU		0x2000000 /* cmd is a passthrough command */
3455b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_XARQ		0x4000000 /* cmd requests for extra sense */
3465b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_CMDACK		0x8000000 /* cmd for event ack */
3475b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_TXQ		0x10000000 /* cmd queued in the tx_waitq */
3485b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_FW_CMD		0x20000000 /* cmd is a fw up/down command */
3495b504601Sjiang wu - Sun Microsystems - Beijing China #define	CFLAG_CONFIG		0x40000000 /* cmd is for config header/page */
35076a4caf6SAda #define	CFLAG_FW_DIAG		0x80000000 /* cmd is for FW diag buffers */
3515b504601Sjiang wu - Sun Microsystems - Beijing China 
3525b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_SIZE			8
3535b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_MASK			0xC0
3545b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_PERIPHERAL			0x00
3555b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_FLAT_SPACE			0x40
3565b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT		0x80
3575b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_EXTENDED_UNIT		0xC0
3585b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_2B		0x00
3595b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_4B		0x01
3605b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_6B		0x10
3615b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_8B		0x20
3625b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_SIZE		0x30
3635b504601Sjiang wu - Sun Microsystems - Beijing China 
3645b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_HASH_ARRAY_SIZE	16
3655b504601Sjiang wu - Sun Microsystems - Beijing China /*
3665b504601Sjiang wu - Sun Microsystems - Beijing China  * hash table definition
3675b504601Sjiang wu - Sun Microsystems - Beijing China  */
3685b504601Sjiang wu - Sun Microsystems - Beijing China 
3695b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_HASH_FIRST	0xffff
3705b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_HASH_NEXT	0x0000
3715b504601Sjiang wu - Sun Microsystems - Beijing China 
37276a4caf6SAda typedef struct mptsas_dma_alloc_state
37376a4caf6SAda {
37476a4caf6SAda 	ddi_dma_handle_t	handle;
37576a4caf6SAda 	caddr_t			memp;
37676a4caf6SAda 	size_t			size;
37776a4caf6SAda 	ddi_acc_handle_t	accessp;
37876a4caf6SAda 	ddi_dma_cookie_t	cookie;
37976a4caf6SAda } mptsas_dma_alloc_state_t;
38076a4caf6SAda 
3815b504601Sjiang wu - Sun Microsystems - Beijing China /*
3825b504601Sjiang wu - Sun Microsystems - Beijing China  * passthrough request structure
3835b504601Sjiang wu - Sun Microsystems - Beijing China  */
3845b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_pt_request {
3855b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t *request;
3865b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t request_size;
3875b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t data_size;
3885b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t dataout_size;
3895b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t direction;
390ed7418aeSAndy Giles 	uint8_t simple;
391ed7418aeSAndy Giles 	uint16_t sgl_offset;
3925b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_cookie_t data_cookie;
3935b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_cookie_t dataout_cookie;
3945b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_pt_request_t;
3955b504601Sjiang wu - Sun Microsystems - Beijing China 
3965b504601Sjiang wu - Sun Microsystems - Beijing China /*
3975b504601Sjiang wu - Sun Microsystems - Beijing China  * config page request structure
3985b504601Sjiang wu - Sun Microsystems - Beijing China  */
3995b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_config_request {
4005b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t	page_address;
4015b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		action;
4025b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		page_type;
4035b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		page_number;
4045b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		page_length;
4055b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		page_version;
4065b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		ext_page_type;
4075b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	ext_page_length;
4085b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_config_request_t;
4095b504601Sjiang wu - Sun Microsystems - Beijing China 
41076a4caf6SAda typedef struct mptsas_fw_diagnostic_buffer {
41176a4caf6SAda 	mptsas_dma_alloc_state_t	buffer_data;
41276a4caf6SAda 	uint8_t				extended_type;
41376a4caf6SAda 	uint8_t				buffer_type;
41476a4caf6SAda 	uint8_t				force_release;
41576a4caf6SAda 	uint32_t			product_specific[23];
41676a4caf6SAda 	uint8_t				immediate;
41776a4caf6SAda 	uint8_t				enabled;
41876a4caf6SAda 	uint8_t				valid_data;
41976a4caf6SAda 	uint8_t				owned_by_firmware;
42076a4caf6SAda 	uint32_t			unique_id;
42176a4caf6SAda } mptsas_fw_diagnostic_buffer_t;
42276a4caf6SAda 
42376a4caf6SAda /*
42476a4caf6SAda  * FW diag request structure
42576a4caf6SAda  */
42676a4caf6SAda typedef struct mptsas_diag_request {
42776a4caf6SAda 	mptsas_fw_diagnostic_buffer_t	*pBuffer;
42876a4caf6SAda 	uint8_t				function;
42976a4caf6SAda } mptsas_diag_request_t;
43076a4caf6SAda 
4315b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_hash_node {
4325b504601Sjiang wu - Sun Microsystems - Beijing China 	void *data;
4335b504601Sjiang wu - Sun Microsystems - Beijing China 	struct mptsas_hash_node *next;
4345b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_hash_node_t;
4355b504601Sjiang wu - Sun Microsystems - Beijing China 
4365b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_hash_table {
4375b504601Sjiang wu - Sun Microsystems - Beijing China 	struct mptsas_hash_node *head[MPTSAS_HASH_ARRAY_SIZE];
4385b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
4395b504601Sjiang wu - Sun Microsystems - Beijing China 	 * last position in traverse
4405b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
4415b504601Sjiang wu - Sun Microsystems - Beijing China 	struct mptsas_hash_node *cur;
4425b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t line;
4435b504601Sjiang wu - Sun Microsystems - Beijing China 
4445b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_hash_table_t;
4455b504601Sjiang wu - Sun Microsystems - Beijing China 
4465b504601Sjiang wu - Sun Microsystems - Beijing China /*
4475b504601Sjiang wu - Sun Microsystems - Beijing China  * RAID volume information
4485b504601Sjiang wu - Sun Microsystems - Beijing China  */
4495b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_raidvol {
4505b504601Sjiang wu - Sun Microsystems - Beijing China 	ushort_t	m_israid;
4515b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_raidhandle;
4525b504601Sjiang wu - Sun Microsystems - Beijing China 	uint64_t	m_raidwwid;
4535b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		m_state;
4545b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t	m_statusflags;
4555b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t	m_settings;
4565b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_devhdl[MPTSAS_MAX_DISKS_IN_VOL];
4575b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		m_disknum[MPTSAS_MAX_DISKS_IN_VOL];
4585b504601Sjiang wu - Sun Microsystems - Beijing China 	ushort_t	m_diskstatus[MPTSAS_MAX_DISKS_IN_VOL];
4595b504601Sjiang wu - Sun Microsystems - Beijing China 	uint64_t	m_raidsize;
4605b504601Sjiang wu - Sun Microsystems - Beijing China 	int		m_raidlevel;
4615b504601Sjiang wu - Sun Microsystems - Beijing China 	int		m_ndisks;
4625b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_target_t	*m_raidtgt;
4635b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_raidvol_t;
4645b504601Sjiang wu - Sun Microsystems - Beijing China 
4655b504601Sjiang wu - Sun Microsystems - Beijing China /*
4665b504601Sjiang wu - Sun Microsystems - Beijing China  * RAID configurations
4675b504601Sjiang wu - Sun Microsystems - Beijing China  */
4685b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_raidconfig {
4695b504601Sjiang wu - Sun Microsystems - Beijing China 		mptsas_raidvol_t	m_raidvol[MPTSAS_MAX_RAIDVOLS];
4705b504601Sjiang wu - Sun Microsystems - Beijing China 		uint16_t		m_physdisk_devhdl[
4715b504601Sjiang wu - Sun Microsystems - Beijing China 					    MPTSAS_MAX_DISKS_IN_CONFIG];
4725b504601Sjiang wu - Sun Microsystems - Beijing China 		uint8_t			m_native;
4735b504601Sjiang wu - Sun Microsystems - Beijing China } m_raidconfig_t;
4745b504601Sjiang wu - Sun Microsystems - Beijing China 
4755b504601Sjiang wu - Sun Microsystems - Beijing China /*
476da5ab83fSKeith M Wesolowski  * Track outstanding commands.  The index into the m_slot array is the SMID
477da5ab83fSKeith M Wesolowski  * (system message ID) of the outstanding command.  SMID 0 is reserved by the
478da5ab83fSKeith M Wesolowski  * software/firmware protocol and is never used for any command we generate;
479da5ab83fSKeith M Wesolowski  * as such, the assertion m_slot[0] == NULL is universally true.  The last
480da5ab83fSKeith M Wesolowski  * entry in the array is slot number MPTSAS_TM_SLOT(mpt) and is used ONLY for
481da5ab83fSKeith M Wesolowski  * task management commands.  No normal SCSI or ATA command will ever occupy
482da5ab83fSKeith M Wesolowski  * that slot.  Finally, the relationship m_slot[X]->cmd_slot == X holds at any
483da5ab83fSKeith M Wesolowski  * time that a consistent view of the target array is obtainable.
484da5ab83fSKeith M Wesolowski  *
485da5ab83fSKeith M Wesolowski  * As such, m_n_normal is the maximum number of slots available to ordinary
486da5ab83fSKeith M Wesolowski  * commands, and the relationship:
487da5ab83fSKeith M Wesolowski  * mpt->m_active->m_n_normal == mpt->m_max_requests - 2
488da5ab83fSKeith M Wesolowski  * always holds after initialisation.
4895b504601Sjiang wu - Sun Microsystems - Beijing China  */
4905b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_slots {
491da5ab83fSKeith M Wesolowski 	size_t			m_size;		/* size of struct, bytes */
492da5ab83fSKeith M Wesolowski 	uint_t			m_n_normal;	/* see above */
493da5ab83fSKeith M Wesolowski 	uint_t			m_rotor;	/* next slot idx to consider */
4945b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_cmd_t		*m_slot[1];
4955b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_slots_t;
4965b504601Sjiang wu - Sun Microsystems - Beijing China 
4975b504601Sjiang wu - Sun Microsystems - Beijing China /*
4985b504601Sjiang wu - Sun Microsystems - Beijing China  * Structure to hold command and packets for event ack
4995b504601Sjiang wu - Sun Microsystems - Beijing China  * and task management commands.
5005b504601Sjiang wu - Sun Microsystems - Beijing China  */
5015b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct  m_event_struct {
5025b504601Sjiang wu - Sun Microsystems - Beijing China 	struct mptsas_cmd		m_event_cmd;
5035b504601Sjiang wu - Sun Microsystems - Beijing China 	struct m_event_struct	*m_event_linkp;
5045b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
5055b504601Sjiang wu - Sun Microsystems - Beijing China 	 * event member record the failure event and eventcntx
5065b504601Sjiang wu - Sun Microsystems - Beijing China 	 * event member would be used in send ack pending process
5075b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
5085b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		m_event;
5095b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		m_eventcntx;
5105b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t			in_use;
5115b504601Sjiang wu - Sun Microsystems - Beijing China 	struct scsi_pkt		m_event_pkt;	/* must be last */
5125b504601Sjiang wu - Sun Microsystems - Beijing China 						/* ... scsi_pkt_size() */
5135b504601Sjiang wu - Sun Microsystems - Beijing China } m_event_struct_t;
5145b504601Sjiang wu - Sun Microsystems - Beijing China #define	M_EVENT_STRUCT_SIZE	(sizeof (m_event_struct_t) - \
5155b504601Sjiang wu - Sun Microsystems - Beijing China 				sizeof (struct scsi_pkt) + scsi_pkt_size())
5165b504601Sjiang wu - Sun Microsystems - Beijing China 
5175b504601Sjiang wu - Sun Microsystems - Beijing China #define	MAX_IOC_COMMANDS	8
5185b504601Sjiang wu - Sun Microsystems - Beijing China 
5195b504601Sjiang wu - Sun Microsystems - Beijing China /*
5205b504601Sjiang wu - Sun Microsystems - Beijing China  * A pool of MAX_IOC_COMMANDS is maintained for event ack commands.
5215b504601Sjiang wu - Sun Microsystems - Beijing China  * A new event ack command requests mptsas_cmd and scsi_pkt structures
5225b504601Sjiang wu - Sun Microsystems - Beijing China  * from this pool, and returns it back when done.
5235b504601Sjiang wu - Sun Microsystems - Beijing China  */
5245b504601Sjiang wu - Sun Microsystems - Beijing China 
5255b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct m_replyh_arg {
5265b504601Sjiang wu - Sun Microsystems - Beijing China 	void *mpt;
5275b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t rfm;
5285b504601Sjiang wu - Sun Microsystems - Beijing China } m_replyh_arg_t;
5295b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(m_replyh_arg_t::mpt))
5305b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(m_replyh_arg_t::rfm))
5315b504601Sjiang wu - Sun Microsystems - Beijing China 
5325b504601Sjiang wu - Sun Microsystems - Beijing China /*
5335b504601Sjiang wu - Sun Microsystems - Beijing China  * Flags for DR handler topology change
5345b504601Sjiang wu - Sun Microsystems - Beijing China  */
5355b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_TOPO_FLAG_DIRECT_ATTACHED_DEVICE		0x0
5365b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_TOPO_FLAG_EXPANDER_ASSOCIATED		0x1
5375b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_TOPO_FLAG_LUN_ASSOCIATED			0x2
5385b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_TOPO_FLAG_RAID_ASSOCIATED		0x4
5395b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_TOPO_FLAG_RAID_PHYSDRV_ASSOCIATED	0x8
5405b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_TOPO_FLAG_EXPANDER_ATTACHED_DEVICE	0x10
5415b504601Sjiang wu - Sun Microsystems - Beijing China 
5425b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_topo_change_list {
5435b504601Sjiang wu - Sun Microsystems - Beijing China 	void *mpt;
5445b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t  event;
5455b504601Sjiang wu - Sun Microsystems - Beijing China 	union {
5465b504601Sjiang wu - Sun Microsystems - Beijing China 		uint8_t physport;
547cdc7c7feSAda 		mptsas_phymask_t phymask;
5485b504601Sjiang wu - Sun Microsystems - Beijing China 	} un;
5495b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t devhdl;
5505b504601Sjiang wu - Sun Microsystems - Beijing China 	void *object;
5515b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t flags;
5525b504601Sjiang wu - Sun Microsystems - Beijing China 	struct mptsas_topo_change_list *next;
5535b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_topo_change_list_t;
5545b504601Sjiang wu - Sun Microsystems - Beijing China 
5555b504601Sjiang wu - Sun Microsystems - Beijing China 
5565b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::mpt))
5575b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::event))
5585b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::physport))
5595b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::devhdl))
5605b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::object))
5615b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::flags))
5625b504601Sjiang wu - Sun Microsystems - Beijing China 
5635b504601Sjiang wu - Sun Microsystems - Beijing China /*
5645b504601Sjiang wu - Sun Microsystems - Beijing China  * Status types when calling mptsas_get_target_device_info
5655b504601Sjiang wu - Sun Microsystems - Beijing China  */
5665b504601Sjiang wu - Sun Microsystems - Beijing China #define	DEV_INFO_SUCCESS		0x0
5675b504601Sjiang wu - Sun Microsystems - Beijing China #define	DEV_INFO_FAIL_PAGE0		0x1
5685b504601Sjiang wu - Sun Microsystems - Beijing China #define	DEV_INFO_WRONG_DEVICE_TYPE	0x2
5695b504601Sjiang wu - Sun Microsystems - Beijing China #define	DEV_INFO_PHYS_DISK		0x3
5705b504601Sjiang wu - Sun Microsystems - Beijing China #define	DEV_INFO_FAIL_ALLOC		0x4
57139fd84a8SHans Rosenfeld #define	DEV_INFO_FAIL_GUID		0x5
5725b504601Sjiang wu - Sun Microsystems - Beijing China 
5735b504601Sjiang wu - Sun Microsystems - Beijing China /*
5745b504601Sjiang wu - Sun Microsystems - Beijing China  * mpt hotplug event defines
5755b504601Sjiang wu - Sun Microsystems - Beijing China  */
5765b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DR_EVENT_RECONFIG_TARGET	0x01
5775b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DR_EVENT_OFFLINE_TARGET	0x02
5785b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_TOPO_FLAG_REMOVE_HANDLE	0x04
5795b504601Sjiang wu - Sun Microsystems - Beijing China 
5805b504601Sjiang wu - Sun Microsystems - Beijing China /*
5815b504601Sjiang wu - Sun Microsystems - Beijing China  * SMP target hotplug events
5825b504601Sjiang wu - Sun Microsystems - Beijing China  */
5835b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DR_EVENT_RECONFIG_SMP	0x10
5845b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DR_EVENT_OFFLINE_SMP	0x20
5855b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DR_EVENT_MASK		0x3F
5865b504601Sjiang wu - Sun Microsystems - Beijing China 
5875b504601Sjiang wu - Sun Microsystems - Beijing China /*
5885b504601Sjiang wu - Sun Microsystems - Beijing China  * mpt hotplug status definition for m_dr_flag
5895b504601Sjiang wu - Sun Microsystems - Beijing China  */
5905b504601Sjiang wu - Sun Microsystems - Beijing China 
5915b504601Sjiang wu - Sun Microsystems - Beijing China /*
5925b504601Sjiang wu - Sun Microsystems - Beijing China  * MPTSAS_DR_INACTIVE
5935b504601Sjiang wu - Sun Microsystems - Beijing China  *
5945b504601Sjiang wu - Sun Microsystems - Beijing China  * The target is in a normal operating state.
5955b504601Sjiang wu - Sun Microsystems - Beijing China  * No dynamic reconfiguration operation is in progress.
5965b504601Sjiang wu - Sun Microsystems - Beijing China  */
5975b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DR_INACTIVE				0x0
5985b504601Sjiang wu - Sun Microsystems - Beijing China /*
5995b504601Sjiang wu - Sun Microsystems - Beijing China  * MPTSAS_DR_INTRANSITION
6005b504601Sjiang wu - Sun Microsystems - Beijing China  *
6015b504601Sjiang wu - Sun Microsystems - Beijing China  * The target is in a transition mode since
6025b504601Sjiang wu - Sun Microsystems - Beijing China  * hotplug event happens and offline procedure has not
6035b504601Sjiang wu - Sun Microsystems - Beijing China  * been finished
6045b504601Sjiang wu - Sun Microsystems - Beijing China  */
6055b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DR_INTRANSITION			0x1
6065b504601Sjiang wu - Sun Microsystems - Beijing China 
6075b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_tgt_private {
6085b504601Sjiang wu - Sun Microsystems - Beijing China 	int t_lun;
6095b504601Sjiang wu - Sun Microsystems - Beijing China 	struct mptsas_target *t_private;
6105b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_tgt_private_t;
6115b504601Sjiang wu - Sun Microsystems - Beijing China 
6125b504601Sjiang wu - Sun Microsystems - Beijing China /*
6135b504601Sjiang wu - Sun Microsystems - Beijing China  * The following defines are used in mptsas_set_init_mode to track the current
6145b504601Sjiang wu - Sun Microsystems - Beijing China  * state as we progress through reprogramming the HBA from target mode into
6155b504601Sjiang wu - Sun Microsystems - Beijing China  * initiator mode.
6165b504601Sjiang wu - Sun Microsystems - Beijing China  */
6175b504601Sjiang wu - Sun Microsystems - Beijing China 
6185b504601Sjiang wu - Sun Microsystems - Beijing China #define	IOUC_READ_PAGE0		0x00000100
6195b504601Sjiang wu - Sun Microsystems - Beijing China #define	IOUC_READ_PAGE1		0x00000200
6205b504601Sjiang wu - Sun Microsystems - Beijing China #define	IOUC_WRITE_PAGE1	0x00000400
6215b504601Sjiang wu - Sun Microsystems - Beijing China #define	IOUC_DONE		0x00000800
6225b504601Sjiang wu - Sun Microsystems - Beijing China #define	DISCOVERY_IN_PROGRESS	MPI2_SASIOUNIT0_PORTFLAGS_DISCOVERY_IN_PROGRESS
6235b504601Sjiang wu - Sun Microsystems - Beijing China #define	AUTO_PORT_CONFIGURATION	MPI2_SASIOUNIT0_PORTFLAGS_AUTO_PORT_CONFIG
6245b504601Sjiang wu - Sun Microsystems - Beijing China 
6255b504601Sjiang wu - Sun Microsystems - Beijing China /*
6265b504601Sjiang wu - Sun Microsystems - Beijing China  * Last allocated slot is used for TM requests.  Since only m_max_requests
6275b504601Sjiang wu - Sun Microsystems - Beijing China  * frames are allocated, the last SMID will be m_max_requests - 1.
6285b504601Sjiang wu - Sun Microsystems - Beijing China  */
6295b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SLOTS_SIZE(mpt) \
6305b504601Sjiang wu - Sun Microsystems - Beijing China 	(sizeof (struct mptsas_slots) + (sizeof (struct mptsas_cmd *) * \
6315b504601Sjiang wu - Sun Microsystems - Beijing China 		mpt->m_max_requests))
6325b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_TM_SLOT(mpt)	(mpt->m_max_requests - 1)
6335b504601Sjiang wu - Sun Microsystems - Beijing China 
6345b504601Sjiang wu - Sun Microsystems - Beijing China /*
6355b504601Sjiang wu - Sun Microsystems - Beijing China  * Macro for phy_flags
6365b504601Sjiang wu - Sun Microsystems - Beijing China  */
637f2e8686eSxun ni - Sun Microsystems - Beijing China 
638f2e8686eSxun ni - Sun Microsystems - Beijing China typedef struct smhba_info {
639f2e8686eSxun ni - Sun Microsystems - Beijing China 	kmutex_t	phy_mutex;
640f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint8_t		phy_id;
641f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint64_t	sas_addr;
642f2e8686eSxun ni - Sun Microsystems - Beijing China 	char		path[8];
643f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint16_t	owner_devhdl;
644f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint16_t	attached_devhdl;
645f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint8_t		attached_phy_identify;
646f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint32_t	attached_phy_info;
647f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint8_t		programmed_link_rate;
648f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint8_t		hw_link_rate;
649f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint8_t		change_count;
650f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint32_t	phy_info;
651f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint8_t		negotiated_link_rate;
652f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint8_t		port_num;
653f2e8686eSxun ni - Sun Microsystems - Beijing China 	kstat_t		*phy_stats;
654f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint32_t	invalid_dword_count;
655f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint32_t	running_disparity_error_count;
656f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint32_t	loss_of_dword_sync_count;
657f2e8686eSxun ni - Sun Microsystems - Beijing China 	uint32_t	phy_reset_problem_count;
658f2e8686eSxun ni - Sun Microsystems - Beijing China 	void		*mpt;
659f2e8686eSxun ni - Sun Microsystems - Beijing China } smhba_info_t;
660f2e8686eSxun ni - Sun Microsystems - Beijing China 
6615b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_phy_info {
6625b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t			port_num;
6635b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t			port_flags;
6645b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t		ctrl_devhdl;
6655b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		phy_device_type;
6665b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t		attached_devhdl;
667cdc7c7feSAda 	mptsas_phymask_t	phy_mask;
668f2e8686eSxun ni - Sun Microsystems - Beijing China 	smhba_info_t		smhba_info;
6695b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_phy_info_t;
6705b504601Sjiang wu - Sun Microsystems - Beijing China 
671f2e8686eSxun ni - Sun Microsystems - Beijing China 
6725b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_doneq_thread_arg {
6735b504601Sjiang wu - Sun Microsystems - Beijing China 	void		*mpt;
6745b504601Sjiang wu - Sun Microsystems - Beijing China 	uint64_t	t;
6755b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_doneq_thread_arg_t;
6765b504601Sjiang wu - Sun Microsystems - Beijing China 
6775b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DONEQ_THREAD_ACTIVE	0x1
6785b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_doneq_thread_list {
6795b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_cmd_t		*doneq;
6805b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_cmd_t		**donetail;
6815b504601Sjiang wu - Sun Microsystems - Beijing China 	kthread_t		*threadp;
6825b504601Sjiang wu - Sun Microsystems - Beijing China 	kcondvar_t		cv;
6835b504601Sjiang wu - Sun Microsystems - Beijing China 	ushort_t		reserv1;
6845b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		reserv2;
6855b504601Sjiang wu - Sun Microsystems - Beijing China 	kmutex_t		mutex;
6865b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		flag;
6875b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		len;
6885b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_doneq_thread_arg_t	arg;
6895b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_doneq_thread_list_t;
6905b504601Sjiang wu - Sun Microsystems - Beijing China 
6915b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas {
6925b504601Sjiang wu - Sun Microsystems - Beijing China 	int		m_instance;
6935b504601Sjiang wu - Sun Microsystems - Beijing China 
6945b504601Sjiang wu - Sun Microsystems - Beijing China 	struct mptsas *m_next;
6955b504601Sjiang wu - Sun Microsystems - Beijing China 
6965b504601Sjiang wu - Sun Microsystems - Beijing China 	scsi_hba_tran_t		*m_tran;
69796c4a178SChris Horne 	smp_hba_tran_t		*m_smptran;
6985b504601Sjiang wu - Sun Microsystems - Beijing China 	kmutex_t		m_mutex;
699da4badc0SKeith M Wesolowski 	kmutex_t		m_passthru_mutex;
7005b504601Sjiang wu - Sun Microsystems - Beijing China 	kcondvar_t		m_cv;
701da4badc0SKeith M Wesolowski 	kcondvar_t		m_passthru_cv;
7025b504601Sjiang wu - Sun Microsystems - Beijing China 	kcondvar_t		m_fw_cv;
7035b504601Sjiang wu - Sun Microsystems - Beijing China 	kcondvar_t		m_config_cv;
70476a4caf6SAda 	kcondvar_t		m_fw_diag_cv;
7055b504601Sjiang wu - Sun Microsystems - Beijing China 	dev_info_t		*m_dip;
7065b504601Sjiang wu - Sun Microsystems - Beijing China 
7075b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
7085b504601Sjiang wu - Sun Microsystems - Beijing China 	 * soft state flags
7095b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
7105b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t		m_softstate;
7115b504601Sjiang wu - Sun Microsystems - Beijing China 
712da5ab83fSKeith M Wesolowski 	refhash_t	*m_targets;
713da5ab83fSKeith M Wesolowski 	refhash_t	*m_smp_targets;
71415ada8fcSRobert Mustacchi 	list_t		m_enclosures;
71539fd84a8SHans Rosenfeld 	refhash_t	*m_tmp_targets;
716da5ab83fSKeith M Wesolowski 
717da5ab83fSKeith M Wesolowski 	m_raidconfig_t	m_raidconfig[MPTSAS_MAX_RAIDCONFIGS];
718da5ab83fSKeith M Wesolowski 	uint8_t		m_num_raid_configs;
719da5ab83fSKeith M Wesolowski 
7205b504601Sjiang wu - Sun Microsystems - Beijing China 	struct mptsas_slots *m_active;	/* outstanding cmds */
7215b504601Sjiang wu - Sun Microsystems - Beijing China 
7225b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_cmd_t	*m_waitq;	/* cmd queue for active request */
7235b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_cmd_t	**m_waitqtail;	/* wait queue tail ptr */
7245b504601Sjiang wu - Sun Microsystems - Beijing China 
725da4badc0SKeith M Wesolowski 	kmutex_t	m_tx_waitq_mutex;
726da4badc0SKeith M Wesolowski 	mptsas_cmd_t	*m_tx_waitq;	/* TX cmd queue for active request */
727da4badc0SKeith M Wesolowski 	mptsas_cmd_t	**m_tx_waitqtail;	/* tx_wait queue tail ptr */
728da4badc0SKeith M Wesolowski 	int		m_tx_draining;	/* TX queue draining flag */
729da4badc0SKeith M Wesolowski 
7305b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_cmd_t	*m_doneq;	/* queue of completed commands */
7315b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_cmd_t	**m_donetail;	/* queue tail ptr */
7325b504601Sjiang wu - Sun Microsystems - Beijing China 
7335b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
7345b504601Sjiang wu - Sun Microsystems - Beijing China 	 * variables for helper threads (fan-out interrupts)
7355b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
7365b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_doneq_thread_list_t	*m_doneq_thread_id;
7375b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		m_doneq_thread_n;
7385b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		m_doneq_thread_threshold;
7395b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		m_doneq_length_threshold;
7405b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		m_doneq_len;
7415b504601Sjiang wu - Sun Microsystems - Beijing China 	kcondvar_t		m_doneq_thread_cv;
7425b504601Sjiang wu - Sun Microsystems - Beijing China 	kmutex_t		m_doneq_mutex;
7435b504601Sjiang wu - Sun Microsystems - Beijing China 
7445b504601Sjiang wu - Sun Microsystems - Beijing China 	int		m_ncmds;	/* number of outstanding commands */
7455b504601Sjiang wu - Sun Microsystems - Beijing China 	m_event_struct_t *m_ioc_event_cmdq;	/* cmd queue for ioc event */
7465b504601Sjiang wu - Sun Microsystems - Beijing China 	m_event_struct_t **m_ioc_event_cmdtail;	/* ioc cmd queue tail */
7475b504601Sjiang wu - Sun Microsystems - Beijing China 
7485b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_acc_handle_t m_datap;	/* operating regs data access handle */
7495b504601Sjiang wu - Sun Microsystems - Beijing China 
7505b504601Sjiang wu - Sun Microsystems - Beijing China 	struct _MPI2_SYSTEM_INTERFACE_REGS	*m_reg;
7515b504601Sjiang wu - Sun Microsystems - Beijing China 
7525b504601Sjiang wu - Sun Microsystems - Beijing China 	ushort_t	m_devid;	/* device id of chip. */
7535b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t		m_revid;	/* revision of chip. */
7545b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_svid;		/* subsystem Vendor ID of chip */
7555b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_ssid;		/* subsystem Device ID of chip */
7565b504601Sjiang wu - Sun Microsystems - Beijing China 
7575b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t		m_sync_offset;	/* default offset for this chip. */
7585b504601Sjiang wu - Sun Microsystems - Beijing China 
7595b504601Sjiang wu - Sun Microsystems - Beijing China 	timeout_id_t	m_quiesce_timeid;
7605b504601Sjiang wu - Sun Microsystems - Beijing China 
7615b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_handle_t m_dma_req_frame_hdl;
7625b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_acc_handle_t m_acc_req_frame_hdl;
76360bf7f6fSAndy Giles 	ddi_dma_handle_t m_dma_req_sense_hdl;
76460bf7f6fSAndy Giles 	ddi_acc_handle_t m_acc_req_sense_hdl;
7655b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_handle_t m_dma_reply_frame_hdl;
7665b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_acc_handle_t m_acc_reply_frame_hdl;
7675b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_handle_t m_dma_free_queue_hdl;
7685b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_acc_handle_t m_acc_free_queue_hdl;
7695b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_handle_t m_dma_post_queue_hdl;
7705b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_acc_handle_t m_acc_post_queue_hdl;
7715b504601Sjiang wu - Sun Microsystems - Beijing China 
7725b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
7735b504601Sjiang wu - Sun Microsystems - Beijing China 	 * list of reset notification requests
7745b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
7755b504601Sjiang wu - Sun Microsystems - Beijing China 	struct scsi_reset_notify_entry	*m_reset_notify_listf;
7765b504601Sjiang wu - Sun Microsystems - Beijing China 
7775b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
7785b504601Sjiang wu - Sun Microsystems - Beijing China 	 * qfull handling
7795b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
7805b504601Sjiang wu - Sun Microsystems - Beijing China 	timeout_id_t	m_restart_cmd_timeid;
7815b504601Sjiang wu - Sun Microsystems - Beijing China 
7825b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
7835b504601Sjiang wu - Sun Microsystems - Beijing China 	 * scsi	reset delay per	bus
7845b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
7855b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t		m_scsi_reset_delay;
7865b504601Sjiang wu - Sun Microsystems - Beijing China 
7875b504601Sjiang wu - Sun Microsystems - Beijing China 	int		m_pm_idle_delay;
7885b504601Sjiang wu - Sun Microsystems - Beijing China 
7895b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t		m_polled_intr;	/* intr was polled. */
7905b504601Sjiang wu - Sun Microsystems - Beijing China 	uchar_t		m_suspended;	/* true	if driver is suspended */
7915b504601Sjiang wu - Sun Microsystems - Beijing China 
7925b504601Sjiang wu - Sun Microsystems - Beijing China 	struct kmem_cache *m_kmem_cache;
7935b504601Sjiang wu - Sun Microsystems - Beijing China 	struct kmem_cache *m_cache_frames;
7945b504601Sjiang wu - Sun Microsystems - Beijing China 
7955b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
7965b504601Sjiang wu - Sun Microsystems - Beijing China 	 * hba options.
7975b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
7985b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t		m_options;
7995b504601Sjiang wu - Sun Microsystems - Beijing China 
8005b504601Sjiang wu - Sun Microsystems - Beijing China 	int		m_in_callback;
8015b504601Sjiang wu - Sun Microsystems - Beijing China 
8025b504601Sjiang wu - Sun Microsystems - Beijing China 	int		m_power_level;	/* current power level */
8035b504601Sjiang wu - Sun Microsystems - Beijing China 
8045b504601Sjiang wu - Sun Microsystems - Beijing China 	int		m_busy;		/* power management busy state */
8055b504601Sjiang wu - Sun Microsystems - Beijing China 
8065b504601Sjiang wu - Sun Microsystems - Beijing China 	off_t		m_pmcsr_offset; /* PMCSR offset */
8075b504601Sjiang wu - Sun Microsystems - Beijing China 
8085b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_acc_handle_t m_config_handle;
8095b504601Sjiang wu - Sun Microsystems - Beijing China 
8105b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_attr_t		m_io_dma_attr;	/* Used for data I/O */
8115b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_attr_t		m_msg_dma_attr; /* Used for message frames */
8125b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_device_acc_attr_t	m_dev_acc_attr;
813837c1ac4SStephen Hanson 	ddi_device_acc_attr_t	m_reg_acc_attr;
8145b504601Sjiang wu - Sun Microsystems - Beijing China 
8155b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
8165b504601Sjiang wu - Sun Microsystems - Beijing China 	 * request/reply variables
8175b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
8185b504601Sjiang wu - Sun Microsystems - Beijing China 	caddr_t		m_req_frame;
8195b504601Sjiang wu - Sun Microsystems - Beijing China 	uint64_t	m_req_frame_dma_addr;
82060bf7f6fSAndy Giles 	caddr_t		m_req_sense;
82160bf7f6fSAndy Giles 	caddr_t		m_extreq_sense;
8222482ae1bSMarcel Telka 	uint_t		m_extreq_sense_refcount;
8232482ae1bSMarcel Telka 	kcondvar_t	m_extreq_sense_refcount_cv;
82460bf7f6fSAndy Giles 	uint64_t	m_req_sense_dma_addr;
8255b504601Sjiang wu - Sun Microsystems - Beijing China 	caddr_t		m_reply_frame;
8265b504601Sjiang wu - Sun Microsystems - Beijing China 	uint64_t	m_reply_frame_dma_addr;
8275b504601Sjiang wu - Sun Microsystems - Beijing China 	caddr_t		m_free_queue;
8285b504601Sjiang wu - Sun Microsystems - Beijing China 	uint64_t	m_free_queue_dma_addr;
8295b504601Sjiang wu - Sun Microsystems - Beijing China 	caddr_t		m_post_queue;
8305b504601Sjiang wu - Sun Microsystems - Beijing China 	uint64_t	m_post_queue_dma_addr;
83160bf7f6fSAndy Giles 	struct map	*m_erqsense_map;
8325b504601Sjiang wu - Sun Microsystems - Beijing China 
8335b504601Sjiang wu - Sun Microsystems - Beijing China 	m_replyh_arg_t *m_replyh_args;
8345b504601Sjiang wu - Sun Microsystems - Beijing China 
8355b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_max_requests;
8365b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_req_frame_size;
83760bf7f6fSAndy Giles 	uint16_t	m_req_sense_size;
8385b504601Sjiang wu - Sun Microsystems - Beijing China 
8395b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
8405b504601Sjiang wu - Sun Microsystems - Beijing China 	 * Max frames per request reprted in IOC Facts
8415b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
8425b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		m_max_chain_depth;
8435b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
8445b504601Sjiang wu - Sun Microsystems - Beijing China 	 * Max frames per request which is used in reality. It's adjusted
8455b504601Sjiang wu - Sun Microsystems - Beijing China 	 * according DMA SG length attribute, and shall not exceed the
8465b504601Sjiang wu - Sun Microsystems - Beijing China 	 * m_max_chain_depth.
8475b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
8485b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		m_max_request_frames;
8495b504601Sjiang wu - Sun Microsystems - Beijing China 
8505b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_free_queue_depth;
8515b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_post_queue_depth;
8525b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_max_replies;
8535b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t	m_free_index;
8545b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t	m_post_index;
8555b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t		m_reply_frame_size;
856af483cc8Sjianfei wang - Sun Microsystems - Beijing China 	uint32_t	m_ioc_capabilities;
8575b504601Sjiang wu - Sun Microsystems - Beijing China 
8585b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
8595b504601Sjiang wu - Sun Microsystems - Beijing China 	 * indicates if the firmware was upload by the driver
8605b504601Sjiang wu - Sun Microsystems - Beijing China 	 * at boot time
8615b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
8625b504601Sjiang wu - Sun Microsystems - Beijing China 	ushort_t	m_fwupload;
8635b504601Sjiang wu - Sun Microsystems - Beijing China 
8645b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t	m_productid;
8655b504601Sjiang wu - Sun Microsystems - Beijing China 
8665b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
8675b504601Sjiang wu - Sun Microsystems - Beijing China 	 * per instance data structures for dma memory resources for
8685b504601Sjiang wu - Sun Microsystems - Beijing China 	 * MPI handshake protocol. only one handshake cmd can run at a time.
8695b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
8705b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_dma_handle_t	m_hshk_dma_hdl;
8715b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_acc_handle_t	m_hshk_acc_hdl;
8725b504601Sjiang wu - Sun Microsystems - Beijing China 	caddr_t			m_hshk_memp;
8735b504601Sjiang wu - Sun Microsystems - Beijing China 	size_t			m_hshk_dma_size;
8745b504601Sjiang wu - Sun Microsystems - Beijing China 
8755b504601Sjiang wu - Sun Microsystems - Beijing China 	/* Firmware version on the card at boot time */
8765b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		m_fwversion;
8775b504601Sjiang wu - Sun Microsystems - Beijing China 
8785b504601Sjiang wu - Sun Microsystems - Beijing China 	/* MSI specific fields */
8795b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_intr_handle_t	*m_htable;	/* For array of interrupts */
8805b504601Sjiang wu - Sun Microsystems - Beijing China 	int			m_intr_type;	/* What type of interrupt */
8815b504601Sjiang wu - Sun Microsystems - Beijing China 	int			m_intr_cnt;	/* # of intrs count returned */
8825b504601Sjiang wu - Sun Microsystems - Beijing China 	size_t			m_intr_size;    /* Size of intr array */
8835b504601Sjiang wu - Sun Microsystems - Beijing China 	uint_t			m_intr_pri;	/* Interrupt priority   */
8845b504601Sjiang wu - Sun Microsystems - Beijing China 	int			m_intr_cap;	/* Interrupt capabilities */
8855b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_taskq_t		*m_event_taskq;
8865b504601Sjiang wu - Sun Microsystems - Beijing China 
8875b504601Sjiang wu - Sun Microsystems - Beijing China 	/* SAS specific information */
8885b504601Sjiang wu - Sun Microsystems - Beijing China 
8895b504601Sjiang wu - Sun Microsystems - Beijing China 	union {
8905b504601Sjiang wu - Sun Microsystems - Beijing China 		uint64_t	m_base_wwid;	/* Base WWID */
8915b504601Sjiang wu - Sun Microsystems - Beijing China 		struct {
8925b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef _BIG_ENDIAN
8935b504601Sjiang wu - Sun Microsystems - Beijing China 			uint32_t	m_base_wwid_hi;
8945b504601Sjiang wu - Sun Microsystems - Beijing China 			uint32_t	m_base_wwid_lo;
8955b504601Sjiang wu - Sun Microsystems - Beijing China #else
8965b504601Sjiang wu - Sun Microsystems - Beijing China 			uint32_t	m_base_wwid_lo;
8975b504601Sjiang wu - Sun Microsystems - Beijing China 			uint32_t	m_base_wwid_hi;
8985b504601Sjiang wu - Sun Microsystems - Beijing China #endif
8995b504601Sjiang wu - Sun Microsystems - Beijing China 		} sasaddr;
9005b504601Sjiang wu - Sun Microsystems - Beijing China 	} un;
9015b504601Sjiang wu - Sun Microsystems - Beijing China 
9025b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t			m_num_phys;		/* # of PHYs */
9035b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_phy_info_t	m_phy_info[MPTSAS_MAX_PHYS];
9045b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t			m_port_chng;	/* initiator port changes */
905f2e8686eSxun ni - Sun Microsystems - Beijing China 	MPI2_CONFIG_PAGE_MAN_0   m_MANU_page0;   /* Manufactor page 0 info */
906f2e8686eSxun ni - Sun Microsystems - Beijing China 	MPI2_CONFIG_PAGE_MAN_1   m_MANU_page1;   /* Manufactor page 1 info */
9075b504601Sjiang wu - Sun Microsystems - Beijing China 
9085b504601Sjiang wu - Sun Microsystems - Beijing China 	/* FMA Capabilities */
9095b504601Sjiang wu - Sun Microsystems - Beijing China 	int			m_fm_capabilities;
9105b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_taskq_t		*m_dr_taskq;
9115b504601Sjiang wu - Sun Microsystems - Beijing China 	int			m_mpxio_enable;
9125b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t			m_done_traverse_dev;
9135b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t			m_done_traverse_smp;
91415ada8fcSRobert Mustacchi 	uint8_t			m_done_traverse_enc;
91576a4caf6SAda 	int			m_diag_action_in_progress;
9165b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t		m_dev_handle;
9175b504601Sjiang wu - Sun Microsystems - Beijing China 	uint16_t		m_smp_devhdl;
9185b504601Sjiang wu - Sun Microsystems - Beijing China 
919508a0e8cSRob Johnston 	/* DDI UFM Handle */
920508a0e8cSRob Johnston 	ddi_ufm_handle_t	*m_ufmh;
921508a0e8cSRob Johnston 
9225b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
9235b504601Sjiang wu - Sun Microsystems - Beijing China 	 * Event recording
9245b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
92508eb0b82SYong-Feng Du 	uint8_t			m_event_index;
9265b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		m_event_number;
9275b504601Sjiang wu - Sun Microsystems - Beijing China 	uint32_t		m_event_mask[4];
9285b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_event_entry_t	m_events[MPTSAS_EVENT_QUEUE_SIZE];
9295b504601Sjiang wu - Sun Microsystems - Beijing China 
93076a4caf6SAda 	/*
93176a4caf6SAda 	 * FW diag Buffer List
93276a4caf6SAda 	 */
93376a4caf6SAda 	mptsas_fw_diagnostic_buffer_t
93476a4caf6SAda 		m_fw_diag_buffer_list[MPI2_DIAG_BUF_TYPE_COUNT];
93576a4caf6SAda 
936ed7418aeSAndy Giles 	/* GEN3 support */
937ed7418aeSAndy Giles 	uint8_t			m_MPI25;
938ed7418aeSAndy Giles 
93976a4caf6SAda 	/*
94076a4caf6SAda 	 * Event Replay flag (MUR support)
94176a4caf6SAda 	 */
94276a4caf6SAda 	uint8_t			m_event_replay;
94376a4caf6SAda 
94476a4caf6SAda 	/*
94576a4caf6SAda 	 * IR Capable flag
94676a4caf6SAda 	 */
94776a4caf6SAda 	uint8_t			m_ir_capable;
94876a4caf6SAda 
949c8f74a56SAda 	/*
950c8f74a56SAda 	 * Is HBA processing a diag reset?
951c8f74a56SAda 	 */
952c8f74a56SAda 	uint8_t			m_in_reset;
953c8f74a56SAda 
9545b504601Sjiang wu - Sun Microsystems - Beijing China 	/*
9555b504601Sjiang wu - Sun Microsystems - Beijing China 	 * per instance cmd data structures for task management cmds
9565b504601Sjiang wu - Sun Microsystems - Beijing China 	 */
9575b504601Sjiang wu - Sun Microsystems - Beijing China 	m_event_struct_t	m_event_task_mgmt;	/* must be last */
9585b504601Sjiang wu - Sun Microsystems - Beijing China 							/* ... scsi_pkt_size */
9595b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_t;
9605b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SIZE	(sizeof (struct mptsas) - \
9615b504601Sjiang wu - Sun Microsystems - Beijing China 			sizeof (struct scsi_pkt) + scsi_pkt_size())
9625b504601Sjiang wu - Sun Microsystems - Beijing China /*
9635b504601Sjiang wu - Sun Microsystems - Beijing China  * Only one of below two conditions is satisfied, we
9645b504601Sjiang wu - Sun Microsystems - Beijing China  * think the target is associated to the iport and
9655b504601Sjiang wu - Sun Microsystems - Beijing China  * allow call into mptsas_probe_lun().
9665b504601Sjiang wu - Sun Microsystems - Beijing China  * 1. physicalsport == physport
9675b504601Sjiang wu - Sun Microsystems - Beijing China  * 2. (phymask & (1 << physport)) == 0
9685b504601Sjiang wu - Sun Microsystems - Beijing China  * The condition #2 is because LSI uses lowest PHY
9695b504601Sjiang wu - Sun Microsystems - Beijing China  * number as the value of physical port when auto port
9705b504601Sjiang wu - Sun Microsystems - Beijing China  * configuration.
9715b504601Sjiang wu - Sun Microsystems - Beijing China  */
9725b504601Sjiang wu - Sun Microsystems - Beijing China #define	IS_SAME_PORT(physicalport, physport, phymask, dynamicport) \
9735b504601Sjiang wu - Sun Microsystems - Beijing China 	((physicalport == physport) || (dynamicport && (phymask & \
9745b504601Sjiang wu - Sun Microsystems - Beijing China 	(1 << physport))))
9755b504601Sjiang wu - Sun Microsystems - Beijing China 
9765b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(MUTEX_PROTECTS_DATA(mptsas::m_mutex, mptsas))
9775b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(SCHEME_PROTECTS_DATA("safe sharing", mptsas::m_next))
9785b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(SCHEME_PROTECTS_DATA("stable data", mptsas::m_dip mptsas::m_tran))
9795b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(SCHEME_PROTECTS_DATA("stable data", mptsas::m_kmem_cache))
9805b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_io_dma_attr.dma_attr_sgllen))
9815b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_devid))
9825b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_productid))
9835b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_mpxio_enable))
9845b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_instance))
9855b504601Sjiang wu - Sun Microsystems - Beijing China 
9865b504601Sjiang wu - Sun Microsystems - Beijing China /*
9875b504601Sjiang wu - Sun Microsystems - Beijing China  * These should eventually migrate into the mpt header files
9885b504601Sjiang wu - Sun Microsystems - Beijing China  * that may become the /kernel/misc/mpt module...
9895b504601Sjiang wu - Sun Microsystems - Beijing China  */
9905b504601Sjiang wu - Sun Microsystems - Beijing China #define	mptsas_init_std_hdr(hdl, mp, DevHandle, Lun, ChainOffset, Function) \
9915b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_put_msg_DevHandle(hdl, mp, DevHandle); \
9925b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_put_msg_ChainOffset(hdl, mp, ChainOffset); \
9935b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_put_msg_Function(hdl, mp, Function); \
9945b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_put_msg_Lun(hdl, mp, Lun)
9955b504601Sjiang wu - Sun Microsystems - Beijing China 
9965b504601Sjiang wu - Sun Microsystems - Beijing China #define	mptsas_put_msg_DevHandle(hdl, mp, val) \
9975b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put16(hdl, &(mp)->DevHandle, (val))
9985b504601Sjiang wu - Sun Microsystems - Beijing China #define	mptsas_put_msg_ChainOffset(hdl, mp, val) \
9995b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put8(hdl, &(mp)->ChainOffset, (val))
10005b504601Sjiang wu - Sun Microsystems - Beijing China #define	mptsas_put_msg_Function(hdl, mp, val) \
10015b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put8(hdl, &(mp)->Function, (val))
10025b504601Sjiang wu - Sun Microsystems - Beijing China #define	mptsas_put_msg_Lun(hdl, mp, val) \
10035b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put8(hdl, &(mp)->LUN[1], (val))
10045b504601Sjiang wu - Sun Microsystems - Beijing China 
10055b504601Sjiang wu - Sun Microsystems - Beijing China #define	mptsas_get_msg_Function(hdl, mp) \
10065b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_get8(hdl, &(mp)->Function)
10075b504601Sjiang wu - Sun Microsystems - Beijing China 
10085b504601Sjiang wu - Sun Microsystems - Beijing China #define	mptsas_get_msg_MsgFlags(hdl, mp) \
10095b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_get8(hdl, &(mp)->MsgFlags)
10105b504601Sjiang wu - Sun Microsystems - Beijing China 
10115b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_ENABLE_DRWE(hdl) \
10125b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \
10135b504601Sjiang wu - Sun Microsystems - Beijing China 		MPI2_WRSEQ_FLUSH_KEY_VALUE); \
10145b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \
10155b504601Sjiang wu - Sun Microsystems - Beijing China 		MPI2_WRSEQ_1ST_KEY_VALUE); \
10165b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \
10175b504601Sjiang wu - Sun Microsystems - Beijing China 		MPI2_WRSEQ_2ND_KEY_VALUE); \
10185b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \
10195b504601Sjiang wu - Sun Microsystems - Beijing China 		MPI2_WRSEQ_3RD_KEY_VALUE); \
10205b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \
10215b504601Sjiang wu - Sun Microsystems - Beijing China 		MPI2_WRSEQ_4TH_KEY_VALUE); \
10225b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \
10235b504601Sjiang wu - Sun Microsystems - Beijing China 		MPI2_WRSEQ_5TH_KEY_VALUE); \
10245b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \
10255b504601Sjiang wu - Sun Microsystems - Beijing China 		MPI2_WRSEQ_6TH_KEY_VALUE);
10265b504601Sjiang wu - Sun Microsystems - Beijing China 
10275b504601Sjiang wu - Sun Microsystems - Beijing China /*
10285b504601Sjiang wu - Sun Microsystems - Beijing China  * m_options flags
10295b504601Sjiang wu - Sun Microsystems - Beijing China  */
10305b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_OPT_PM		0x01	/* Power Management */
10315b504601Sjiang wu - Sun Microsystems - Beijing China 
10325b504601Sjiang wu - Sun Microsystems - Beijing China /*
10335b504601Sjiang wu - Sun Microsystems - Beijing China  * m_softstate flags
10345b504601Sjiang wu - Sun Microsystems - Beijing China  */
10355b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SS_DRAINING		0x02
10365b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SS_QUIESCED		0x04
10375b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SS_MSG_UNIT_RESET	0x08
1038a9b51062SAda #define	MPTSAS_DID_MSG_UNIT_RESET	0x10
10395b504601Sjiang wu - Sun Microsystems - Beijing China 
10405b504601Sjiang wu - Sun Microsystems - Beijing China /*
10415b504601Sjiang wu - Sun Microsystems - Beijing China  * regspec defines.
10425b504601Sjiang wu - Sun Microsystems - Beijing China  */
10435b504601Sjiang wu - Sun Microsystems - Beijing China #define	CONFIG_SPACE	0	/* regset[0] - configuration space */
10445b504601Sjiang wu - Sun Microsystems - Beijing China #define	IO_SPACE	1	/* regset[1] - used for i/o mapped device */
10455b504601Sjiang wu - Sun Microsystems - Beijing China #define	MEM_SPACE	2	/* regset[2] - used for memory mapped device */
10465b504601Sjiang wu - Sun Microsystems - Beijing China #define	BASE_REG2	3	/* regset[3] - used for 875 scripts ram */
10475b504601Sjiang wu - Sun Microsystems - Beijing China 
10485b504601Sjiang wu - Sun Microsystems - Beijing China /*
10495b504601Sjiang wu - Sun Microsystems - Beijing China  * Handy constants
10505b504601Sjiang wu - Sun Microsystems - Beijing China  */
10515b504601Sjiang wu - Sun Microsystems - Beijing China #define	FALSE		0
10525b504601Sjiang wu - Sun Microsystems - Beijing China #define	TRUE		1
10535b504601Sjiang wu - Sun Microsystems - Beijing China #define	UNDEFINED	-1
10545b504601Sjiang wu - Sun Microsystems - Beijing China #define	FAILED		-2
10555b504601Sjiang wu - Sun Microsystems - Beijing China 
10565b504601Sjiang wu - Sun Microsystems - Beijing China /*
10575b504601Sjiang wu - Sun Microsystems - Beijing China  * power management.
10585b504601Sjiang wu - Sun Microsystems - Beijing China  */
10595b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_POWER_ON(mpt) { \
10605b504601Sjiang wu - Sun Microsystems - Beijing China 	pci_config_put16(mpt->m_config_handle, mpt->m_pmcsr_offset, \
10615b504601Sjiang wu - Sun Microsystems - Beijing China 	    PCI_PMCSR_D0); \
10625b504601Sjiang wu - Sun Microsystems - Beijing China 	delay(drv_usectohz(10000)); \
10635b504601Sjiang wu - Sun Microsystems - Beijing China 	(void) pci_restore_config_regs(mpt->m_dip); \
10645b504601Sjiang wu - Sun Microsystems - Beijing China 	mptsas_setup_cmd_reg(mpt); \
10655b504601Sjiang wu - Sun Microsystems - Beijing China }
10665b504601Sjiang wu - Sun Microsystems - Beijing China 
10675b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_POWER_OFF(mpt) { \
10685b504601Sjiang wu - Sun Microsystems - Beijing China 	(void) pci_save_config_regs(mpt->m_dip); \
10695b504601Sjiang wu - Sun Microsystems - Beijing China 	pci_config_put16(mpt->m_config_handle, mpt->m_pmcsr_offset, \
10705b504601Sjiang wu - Sun Microsystems - Beijing China 	    PCI_PMCSR_D3HOT); \
10715b504601Sjiang wu - Sun Microsystems - Beijing China 	mpt->m_power_level = PM_LEVEL_D3; \
10725b504601Sjiang wu - Sun Microsystems - Beijing China }
10735b504601Sjiang wu - Sun Microsystems - Beijing China 
10745b504601Sjiang wu - Sun Microsystems - Beijing China /*
10755b504601Sjiang wu - Sun Microsystems - Beijing China  * inq_dtype:
10765b504601Sjiang wu - Sun Microsystems - Beijing China  * Bits 5 through 7 are the Peripheral Device Qualifier
10775b504601Sjiang wu - Sun Microsystems - Beijing China  * 001b: device not connected to the LUN
10785b504601Sjiang wu - Sun Microsystems - Beijing China  * Bits 0 through 4 are the Peripheral Device Type
10795b504601Sjiang wu - Sun Microsystems - Beijing China  * 1fh: Unknown or no device type
10805b504601Sjiang wu - Sun Microsystems - Beijing China  *
10815b504601Sjiang wu - Sun Microsystems - Beijing China  * Although the inquiry may return success, the following value
10825b504601Sjiang wu - Sun Microsystems - Beijing China  * means no valid LUN connected.
10835b504601Sjiang wu - Sun Microsystems - Beijing China  */
10845b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_VALID_LUN(sd_inq) \
10855b504601Sjiang wu - Sun Microsystems - Beijing China 	(((sd_inq->inq_dtype & 0xe0) != 0x20) && \
10865b504601Sjiang wu - Sun Microsystems - Beijing China 	((sd_inq->inq_dtype & 0x1f) != 0x1f))
10875b504601Sjiang wu - Sun Microsystems - Beijing China 
10885b504601Sjiang wu - Sun Microsystems - Beijing China /*
10895b504601Sjiang wu - Sun Microsystems - Beijing China  * Default is to have 10 retries on receiving QFULL status and
10905b504601Sjiang wu - Sun Microsystems - Beijing China  * each retry to be after 100 ms.
10915b504601Sjiang wu - Sun Microsystems - Beijing China  */
10925b504601Sjiang wu - Sun Microsystems - Beijing China #define	QFULL_RETRIES		10
10935b504601Sjiang wu - Sun Microsystems - Beijing China #define	QFULL_RETRY_INTERVAL	100
10945b504601Sjiang wu - Sun Microsystems - Beijing China 
10955b504601Sjiang wu - Sun Microsystems - Beijing China /*
10965b504601Sjiang wu - Sun Microsystems - Beijing China  * Handy macros
10975b504601Sjiang wu - Sun Microsystems - Beijing China  */
10985b504601Sjiang wu - Sun Microsystems - Beijing China #define	Tgt(sp)	((sp)->cmd_pkt->pkt_address.a_target)
10995b504601Sjiang wu - Sun Microsystems - Beijing China #define	Lun(sp)	((sp)->cmd_pkt->pkt_address.a_lun)
11005b504601Sjiang wu - Sun Microsystems - Beijing China 
11015b504601Sjiang wu - Sun Microsystems - Beijing China #define	IS_HEX_DIGIT(n)	(((n) >= '0' && (n) <= '9') || \
11025b504601Sjiang wu - Sun Microsystems - Beijing China 	((n) >= 'a' && (n) <= 'f') || ((n) >= 'A' && (n) <= 'F'))
11035b504601Sjiang wu - Sun Microsystems - Beijing China 
11045b504601Sjiang wu - Sun Microsystems - Beijing China /*
11055b504601Sjiang wu - Sun Microsystems - Beijing China  * poll time for mptsas_pollret() and mptsas_wait_intr()
11065b504601Sjiang wu - Sun Microsystems - Beijing China  */
11075b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_POLL_TIME	30000	/* 30 seconds */
11085b504601Sjiang wu - Sun Microsystems - Beijing China 
11095b504601Sjiang wu - Sun Microsystems - Beijing China /*
11105b504601Sjiang wu - Sun Microsystems - Beijing China  * default time for mptsas_do_passthru
11115b504601Sjiang wu - Sun Microsystems - Beijing China  */
11125b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_PASS_THRU_TIME_DEFAULT	60	/* 60 seconds */
11135b504601Sjiang wu - Sun Microsystems - Beijing China 
11145b504601Sjiang wu - Sun Microsystems - Beijing China /*
11155b504601Sjiang wu - Sun Microsystems - Beijing China  * macro to return the effective address of a given per-target field
11165b504601Sjiang wu - Sun Microsystems - Beijing China  */
11175b504601Sjiang wu - Sun Microsystems - Beijing China #define	EFF_ADDR(start, offset)		((start) + (offset))
11185b504601Sjiang wu - Sun Microsystems - Beijing China 
11195b504601Sjiang wu - Sun Microsystems - Beijing China #define	SDEV2ADDR(devp)		(&((devp)->sd_address))
11205b504601Sjiang wu - Sun Microsystems - Beijing China #define	SDEV2TRAN(devp)		((devp)->sd_address.a_hba_tran)
11215b504601Sjiang wu - Sun Microsystems - Beijing China #define	PKT2TRAN(pkt)		((pkt)->pkt_address.a_hba_tran)
11225b504601Sjiang wu - Sun Microsystems - Beijing China #define	ADDR2TRAN(ap)		((ap)->a_hba_tran)
11235b504601Sjiang wu - Sun Microsystems - Beijing China #define	DIP2TRAN(dip)		(ddi_get_driver_private(dip))
11245b504601Sjiang wu - Sun Microsystems - Beijing China 
11255b504601Sjiang wu - Sun Microsystems - Beijing China 
11265b504601Sjiang wu - Sun Microsystems - Beijing China #define	TRAN2MPT(hba)		((mptsas_t *)(hba)->tran_hba_private)
11275b504601Sjiang wu - Sun Microsystems - Beijing China #define	DIP2MPT(dip)		(TRAN2MPT((scsi_hba_tran_t *)DIP2TRAN(dip)))
11285b504601Sjiang wu - Sun Microsystems - Beijing China #define	SDEV2MPT(sd)		(TRAN2MPT(SDEV2TRAN(sd)))
11295b504601Sjiang wu - Sun Microsystems - Beijing China #define	PKT2MPT(pkt)		(TRAN2MPT(PKT2TRAN(pkt)))
11305b504601Sjiang wu - Sun Microsystems - Beijing China 
11315b504601Sjiang wu - Sun Microsystems - Beijing China #define	ADDR2MPT(ap)		(TRAN2MPT(ADDR2TRAN(ap)))
11325b504601Sjiang wu - Sun Microsystems - Beijing China 
11335b504601Sjiang wu - Sun Microsystems - Beijing China #define	POLL_TIMEOUT		(2 * SCSI_POLL_TIMEOUT * 1000000)
11345b504601Sjiang wu - Sun Microsystems - Beijing China #define	SHORT_POLL_TIMEOUT	(1000000)	/* in usec, about 1 secs */
11355b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_QUIESCE_TIMEOUT	1		/* 1 sec */
11365b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_PM_IDLE_TIMEOUT	60		/* 60 seconds */
11375b504601Sjiang wu - Sun Microsystems - Beijing China 
11385b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_GET_ISTAT(mpt)  (ddi_get32((mpt)->m_datap, \
11395b504601Sjiang wu - Sun Microsystems - Beijing China 			&(mpt)->m_reg->HostInterruptStatus))
11405b504601Sjiang wu - Sun Microsystems - Beijing China 
11415b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SET_SIGP(P) \
11425b504601Sjiang wu - Sun Microsystems - Beijing China 		ClrSetBits(mpt->m_devaddr + NREG_ISTAT, 0, NB_ISTAT_SIGP)
11435b504601Sjiang wu - Sun Microsystems - Beijing China 
11445b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_RESET_SIGP(P) (void) ddi_get8(mpt->m_datap, \
11455b504601Sjiang wu - Sun Microsystems - Beijing China 			(uint8_t *)(mpt->m_devaddr + NREG_CTEST2))
11465b504601Sjiang wu - Sun Microsystems - Beijing China 
11475b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_GET_INTCODE(P) (ddi_get32(mpt->m_datap, \
11485b504601Sjiang wu - Sun Microsystems - Beijing China 			(uint32_t *)(mpt->m_devaddr + NREG_DSPS)))
11495b504601Sjiang wu - Sun Microsystems - Beijing China 
11505b504601Sjiang wu - Sun Microsystems - Beijing China 
1151940efceeSAndy Giles #define	MPTSAS_START_CMD(mpt, req_desc) \
1152940efceeSAndy Giles 	ddi_put32(mpt->m_datap, &mpt->m_reg->RequestDescriptorPostLow,	\
1153940efceeSAndy Giles 	    req_desc & 0xffffffffu);					\
1154940efceeSAndy Giles 	ddi_put32(mpt->m_datap, &mpt->m_reg->RequestDescriptorPostHigh,	\
1155940efceeSAndy Giles 	    (req_desc >> 32) & 0xffffffffu);
11565b504601Sjiang wu - Sun Microsystems - Beijing China 
11575b504601Sjiang wu - Sun Microsystems - Beijing China #define	INTPENDING(mpt) \
11585b504601Sjiang wu - Sun Microsystems - Beijing China 	(MPTSAS_GET_ISTAT(mpt) & MPI2_HIS_REPLY_DESCRIPTOR_INTERRUPT)
11595b504601Sjiang wu - Sun Microsystems - Beijing China 
11605b504601Sjiang wu - Sun Microsystems - Beijing China /*
11615b504601Sjiang wu - Sun Microsystems - Beijing China  * Mask all interrupts to disable
11625b504601Sjiang wu - Sun Microsystems - Beijing China  */
11635b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DISABLE_INTR(mpt)	\
11645b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32((mpt)->m_datap, &(mpt)->m_reg->HostInterruptMask, \
11655b504601Sjiang wu - Sun Microsystems - Beijing China 	    (MPI2_HIM_RIM | MPI2_HIM_DIM | MPI2_HIM_RESET_IRQ_MASK))
11665b504601Sjiang wu - Sun Microsystems - Beijing China 
11675b504601Sjiang wu - Sun Microsystems - Beijing China /*
11685b504601Sjiang wu - Sun Microsystems - Beijing China  * Mask Doorbell and Reset interrupts to enable reply desc int.
11695b504601Sjiang wu - Sun Microsystems - Beijing China  */
11705b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_ENABLE_INTR(mpt)	\
11715b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32(mpt->m_datap, &mpt->m_reg->HostInterruptMask, \
11725b504601Sjiang wu - Sun Microsystems - Beijing China 	(MPI2_HIM_DIM | MPI2_HIM_RESET_IRQ_MASK))
11735b504601Sjiang wu - Sun Microsystems - Beijing China 
11745b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_GET_NEXT_REPLY(mpt, index)  \
11755b504601Sjiang wu - Sun Microsystems - Beijing China 	&((uint64_t *)(void *)mpt->m_post_queue)[index]
11765b504601Sjiang wu - Sun Microsystems - Beijing China 
11775b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_GET_NEXT_FRAME(mpt, SMID) \
11785b504601Sjiang wu - Sun Microsystems - Beijing China 	(mpt->m_req_frame + (mpt->m_req_frame_size * SMID))
11795b504601Sjiang wu - Sun Microsystems - Beijing China 
11805b504601Sjiang wu - Sun Microsystems - Beijing China #define	ClrSetBits32(hdl, reg, clr, set) \
11815b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put32(hdl, (reg), \
11825b504601Sjiang wu - Sun Microsystems - Beijing China 	    ((ddi_get32(mpt->m_datap, (reg)) & ~(clr)) | (set)))
11835b504601Sjiang wu - Sun Microsystems - Beijing China 
11845b504601Sjiang wu - Sun Microsystems - Beijing China #define	ClrSetBits(reg, clr, set) \
11855b504601Sjiang wu - Sun Microsystems - Beijing China 	ddi_put8(mpt->m_datap, (uint8_t *)(reg), \
11865b504601Sjiang wu - Sun Microsystems - Beijing China 		((ddi_get8(mpt->m_datap, (uint8_t *)(reg)) & ~(clr)) | (set)))
11875b504601Sjiang wu - Sun Microsystems - Beijing China 
11885b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_WAITQ_RM(mpt, cmdp)	\
11895b504601Sjiang wu - Sun Microsystems - Beijing China 	if ((cmdp = mpt->m_waitq) != NULL) { \
11905b504601Sjiang wu - Sun Microsystems - Beijing China 		/* If the queue is now empty fix the tail pointer */	\
11915b504601Sjiang wu - Sun Microsystems - Beijing China 		if ((mpt->m_waitq = cmdp->cmd_linkp) == NULL) \
11925b504601Sjiang wu - Sun Microsystems - Beijing China 			mpt->m_waitqtail = &mpt->m_waitq; \
11935b504601Sjiang wu - Sun Microsystems - Beijing China 		cmdp->cmd_linkp = NULL; \
11945b504601Sjiang wu - Sun Microsystems - Beijing China 		cmdp->cmd_queued = FALSE; \
11955b504601Sjiang wu - Sun Microsystems - Beijing China 	}
11965b504601Sjiang wu - Sun Microsystems - Beijing China 
11975b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_TX_WAITQ_RM(mpt, cmdp)	\
11985b504601Sjiang wu - Sun Microsystems - Beijing China 	if ((cmdp = mpt->m_tx_waitq) != NULL) { \
11995b504601Sjiang wu - Sun Microsystems - Beijing China 		/* If the queue is now empty fix the tail pointer */	\
12005b504601Sjiang wu - Sun Microsystems - Beijing China 		if ((mpt->m_tx_waitq = cmdp->cmd_linkp) == NULL) \
12015b504601Sjiang wu - Sun Microsystems - Beijing China 			mpt->m_tx_waitqtail = &mpt->m_tx_waitq; \
12025b504601Sjiang wu - Sun Microsystems - Beijing China 		cmdp->cmd_linkp = NULL; \
12035b504601Sjiang wu - Sun Microsystems - Beijing China 		cmdp->cmd_queued = FALSE; \
12045b504601Sjiang wu - Sun Microsystems - Beijing China 	}
12055b504601Sjiang wu - Sun Microsystems - Beijing China 
12065b504601Sjiang wu - Sun Microsystems - Beijing China /*
12075b504601Sjiang wu - Sun Microsystems - Beijing China  * defaults for	the global properties
12085b504601Sjiang wu - Sun Microsystems - Beijing China  */
12095b504601Sjiang wu - Sun Microsystems - Beijing China #define	DEFAULT_SCSI_OPTIONS	SCSI_OPTIONS_DR
12105b504601Sjiang wu - Sun Microsystems - Beijing China #define	DEFAULT_TAG_AGE_LIMIT	2
1211cb3e7fb4SAlbert Lee #define	DEFAULT_WD_TICK		1
12125b504601Sjiang wu - Sun Microsystems - Beijing China 
12135b504601Sjiang wu - Sun Microsystems - Beijing China /*
12145b504601Sjiang wu - Sun Microsystems - Beijing China  * invalid hostid.
12155b504601Sjiang wu - Sun Microsystems - Beijing China  */
12165b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_INVALID_HOSTID  -1
12175b504601Sjiang wu - Sun Microsystems - Beijing China 
12185b504601Sjiang wu - Sun Microsystems - Beijing China /*
12195b504601Sjiang wu - Sun Microsystems - Beijing China  * Get/Set hostid from SCSI port configuration page
12205b504601Sjiang wu - Sun Microsystems - Beijing China  */
12215b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_GET_HOST_ID(configuration) (configuration & 0xFF)
12225b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SET_HOST_ID(hostid) (hostid | ((1 << hostid) << 16))
12235b504601Sjiang wu - Sun Microsystems - Beijing China 
12245b504601Sjiang wu - Sun Microsystems - Beijing China /*
12255b504601Sjiang wu - Sun Microsystems - Beijing China  * Config space.
12265b504601Sjiang wu - Sun Microsystems - Beijing China  */
12275b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_LATENCY_TIMER	0x40
12285b504601Sjiang wu - Sun Microsystems - Beijing China 
12295b504601Sjiang wu - Sun Microsystems - Beijing China /*
12305b504601Sjiang wu - Sun Microsystems - Beijing China  * Offset to firmware version
12315b504601Sjiang wu - Sun Microsystems - Beijing China  */
12325b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_FW_VERSION_OFFSET	9
12335b504601Sjiang wu - Sun Microsystems - Beijing China 
12345b504601Sjiang wu - Sun Microsystems - Beijing China /*
12355b504601Sjiang wu - Sun Microsystems - Beijing China  * Offset and masks to get at the ProductId field
12365b504601Sjiang wu - Sun Microsystems - Beijing China  */
12375b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_FW_PRODUCTID_OFFSET	8
12385b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_FW_PRODUCTID_MASK	0xFFFF0000
12395b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_FW_PRODUCTID_SHIFT	16
12405b504601Sjiang wu - Sun Microsystems - Beijing China 
12415b504601Sjiang wu - Sun Microsystems - Beijing China /*
12425b504601Sjiang wu - Sun Microsystems - Beijing China  * Subsystem ID for HBAs.
12435b504601Sjiang wu - Sun Microsystems - Beijing China  */
12445b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_HBA_SUBSYSTEM_ID    0x10C0
12455b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_RHEA_SUBSYSTEM_ID	0x10B0
12465b504601Sjiang wu - Sun Microsystems - Beijing China 
12475b504601Sjiang wu - Sun Microsystems - Beijing China /*
12485b504601Sjiang wu - Sun Microsystems - Beijing China  * reset delay tick
12495b504601Sjiang wu - Sun Microsystems - Beijing China  */
12505b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_WATCH_RESET_DELAY_TICK 50	/* specified in milli seconds */
12515b504601Sjiang wu - Sun Microsystems - Beijing China 
12525b504601Sjiang wu - Sun Microsystems - Beijing China /*
12535b504601Sjiang wu - Sun Microsystems - Beijing China  * Ioc reset return values
12545b504601Sjiang wu - Sun Microsystems - Beijing China  */
12555b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_RESET_FAIL	-1
12565b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_NO_RESET		0
12575b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_SUCCESS_HARDRESET	1
1258a9b51062SAda #define	MPTSAS_SUCCESS_MUR	2
12595b504601Sjiang wu - Sun Microsystems - Beijing China 
12605b504601Sjiang wu - Sun Microsystems - Beijing China /*
12615b504601Sjiang wu - Sun Microsystems - Beijing China  * throttle support.
12625b504601Sjiang wu - Sun Microsystems - Beijing China  */
12635b504601Sjiang wu - Sun Microsystems - Beijing China #define	MAX_THROTTLE	32
12645b504601Sjiang wu - Sun Microsystems - Beijing China #define	HOLD_THROTTLE	0
12655b504601Sjiang wu - Sun Microsystems - Beijing China #define	DRAIN_THROTTLE	-1
12665b504601Sjiang wu - Sun Microsystems - Beijing China #define	QFULL_THROTTLE	-2
12675b504601Sjiang wu - Sun Microsystems - Beijing China 
12685b504601Sjiang wu - Sun Microsystems - Beijing China /*
12695b504601Sjiang wu - Sun Microsystems - Beijing China  * Passthrough/config request flags
12705b504601Sjiang wu - Sun Microsystems - Beijing China  */
12715b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DATA_ALLOCATED		0x0001
12725b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DATAOUT_ALLOCATED	0x0002
12735b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_REQUEST_POOL_CMD		0x0004
12745b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_ADDRESS_REPLY		0x0008
12755b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_CMD_TIMEOUT		0x0010
12765b504601Sjiang wu - Sun Microsystems - Beijing China 
1277af483cc8Sjianfei wang - Sun Microsystems - Beijing China /*
1278af483cc8Sjianfei wang - Sun Microsystems - Beijing China  * response code tlr flag
1279af483cc8Sjianfei wang - Sun Microsystems - Beijing China  */
1280af483cc8Sjianfei wang - Sun Microsystems - Beijing China #define	MPTSAS_SCSI_RESPONSE_CODE_TLR_OFF	0x02
1281af483cc8Sjianfei wang - Sun Microsystems - Beijing China 
12825b504601Sjiang wu - Sun Microsystems - Beijing China /*
12835b504601Sjiang wu - Sun Microsystems - Beijing China  * System Events
12845b504601Sjiang wu - Sun Microsystems - Beijing China  */
12855b504601Sjiang wu - Sun Microsystems - Beijing China #ifndef	DDI_VENDOR_LSI
12865b504601Sjiang wu - Sun Microsystems - Beijing China #define	DDI_VENDOR_LSI	"LSI"
12875b504601Sjiang wu - Sun Microsystems - Beijing China #endif	/* DDI_VENDOR_LSI */
12885b504601Sjiang wu - Sun Microsystems - Beijing China 
12895b504601Sjiang wu - Sun Microsystems - Beijing China /*
12905b504601Sjiang wu - Sun Microsystems - Beijing China  * Shared functions
12915b504601Sjiang wu - Sun Microsystems - Beijing China  */
12925b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_save_cmd(struct mptsas *mpt, struct mptsas_cmd *cmd);
12935b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_remove_cmd(mptsas_t *mpt, mptsas_cmd_t *cmd);
12945b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_waitq_add(mptsas_t *mpt, mptsas_cmd_t *cmd);
12955b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_log(struct mptsas *mpt, int level, char *fmt, ...);
12965b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_poll(mptsas_t *mpt, mptsas_cmd_t *poll_cmd, int polltime);
12975b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_do_dma(mptsas_t *mpt, uint32_t size, int var, int (*callback)());
12985b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_update_flash(mptsas_t *mpt, caddr_t ptrbuffer, uint32_t size,
12995b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t type, int mode);
13005b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_check_flash(mptsas_t *mpt, caddr_t origfile, uint32_t size,
13015b504601Sjiang wu - Sun Microsystems - Beijing China 	uint8_t type, int mode);
13025b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_download_firmware();
13035b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_can_download_firmware();
130476a4caf6SAda int mptsas_dma_alloc(mptsas_t *mpt, mptsas_dma_alloc_state_t *dma_statep);
130576a4caf6SAda void mptsas_dma_free(mptsas_dma_alloc_state_t *dma_statep);
1306cdc7c7feSAda mptsas_phymask_t mptsas_physport_to_phymask(mptsas_t *mpt, uint8_t physport);
13075b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_fma_check(mptsas_t *mpt, mptsas_cmd_t *cmd);
13085b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_check_acc_handle(ddi_acc_handle_t handle);
13095b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_check_dma_handle(ddi_dma_handle_t handle);
13105b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_fm_ereport(mptsas_t *mpt, char *detail);
1311a9b51062SAda int mptsas_dma_addr_create(mptsas_t *mpt, ddi_dma_attr_t dma_attr,
1312a9b51062SAda     ddi_dma_handle_t *dma_hdp, ddi_acc_handle_t *acc_hdp, caddr_t *dma_memp,
1313a9b51062SAda     uint32_t alloc_size, ddi_dma_cookie_t *cookiep);
1314a9b51062SAda void mptsas_dma_addr_destroy(ddi_dma_handle_t *, ddi_acc_handle_t *);
13155b504601Sjiang wu - Sun Microsystems - Beijing China 
13165b504601Sjiang wu - Sun Microsystems - Beijing China /*
13175b504601Sjiang wu - Sun Microsystems - Beijing China  * impl functions
13185b504601Sjiang wu - Sun Microsystems - Beijing China  */
13195b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_wait_for_response(mptsas_t *mpt);
13205b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_wait_for_doorbell(mptsas_t *mpt);
1321e18306b1SDan McDonald int mptsas_ioc_reset(mptsas_t *mpt, int);
13225b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_handshake_msg(mptsas_t *mpt, caddr_t memp, int numbytes,
13235b504601Sjiang wu - Sun Microsystems - Beijing China     ddi_acc_handle_t accessp);
13245b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_handshake_msg(mptsas_t *mpt, caddr_t memp, int numbytes,
13255b504601Sjiang wu - Sun Microsystems - Beijing China     ddi_acc_handle_t accessp);
13265b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_config_request_msg(mptsas_t *mpt, uint8_t action,
13275b504601Sjiang wu - Sun Microsystems - Beijing China     uint8_t pagetype, uint32_t pageaddress, uint8_t pagenumber,
13285b504601Sjiang wu - Sun Microsystems - Beijing China     uint8_t pageversion, uint8_t pagelength, uint32_t SGEflagslength,
1329940efceeSAndy Giles     uint64_t SGEaddress);
13305b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_extended_config_request_msg(mptsas_t *mpt, uint8_t action,
13315b504601Sjiang wu - Sun Microsystems - Beijing China     uint8_t extpagetype, uint32_t pageaddress, uint8_t pagenumber,
13325b504601Sjiang wu - Sun Microsystems - Beijing China     uint8_t pageversion, uint16_t extpagelength,
1333940efceeSAndy Giles     uint32_t SGEflagslength, uint64_t SGEaddress);
13345b504601Sjiang wu - Sun Microsystems - Beijing China 
13355b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_request_from_pool(mptsas_t *mpt, mptsas_cmd_t **cmd,
13365b504601Sjiang wu - Sun Microsystems - Beijing China     struct scsi_pkt **pkt);
13375b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_return_to_pool(mptsas_t *mpt, mptsas_cmd_t *cmd);
13385b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_destroy_ioc_event_cmd(mptsas_t *mpt);
13395b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_start_config_page_access(mptsas_t *mpt, mptsas_cmd_t *cmd);
13405b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_access_config_page(mptsas_t *mpt, uint8_t action, uint8_t page_type,
13415b504601Sjiang wu - Sun Microsystems - Beijing China     uint8_t page_number, uint32_t page_address, int (*callback) (mptsas_t *,
13425b504601Sjiang wu - Sun Microsystems - Beijing China     caddr_t, ddi_acc_handle_t, uint16_t, uint32_t, va_list), ...);
13435b504601Sjiang wu - Sun Microsystems - Beijing China 
13445b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_task_management(mptsas_t *mpt, int task_type,
1345c8f74a56SAda     uint16_t dev_handle, int lun, uint8_t *reply, uint32_t reply_size,
1346c8f74a56SAda     int mode);
13475b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_event_ack(mptsas_t *mpt, uint32_t event, uint32_t eventcntx);
13485b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_send_pending_event_ack(mptsas_t *mpt);
13495b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_set_throttle(struct mptsas *mpt, mptsas_target_t *ptgt, int what);
13505b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_restart_ioc(mptsas_t *mpt);
13515b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_update_driver_data(struct mptsas *mpt);
13525b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t mptsas_get_sata_guid(mptsas_t *mpt, mptsas_target_t *ptgt, int lun);
13535b504601Sjiang wu - Sun Microsystems - Beijing China 
13545b504601Sjiang wu - Sun Microsystems - Beijing China /*
13555b504601Sjiang wu - Sun Microsystems - Beijing China  * init functions
13565b504601Sjiang wu - Sun Microsystems - Beijing China  */
13575b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_get_facts(mptsas_t *mpt);
13585b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_get_port_facts(mptsas_t *mpt, int port);
13595b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_enable_port(mptsas_t *mpt);
13605b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_enable_event_notification(mptsas_t *mpt);
13615b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_init(mptsas_t *mpt);
13625b504601Sjiang wu - Sun Microsystems - Beijing China 
13635b504601Sjiang wu - Sun Microsystems - Beijing China /*
13645b504601Sjiang wu - Sun Microsystems - Beijing China  * configuration pages operation
13655b504601Sjiang wu - Sun Microsystems - Beijing China  */
13665b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_device_page0(mptsas_t *mpt, uint32_t page_address,
13675b504601Sjiang wu - Sun Microsystems - Beijing China     uint16_t *dev_handle, uint64_t *sas_wwn, uint32_t *dev_info,
1368f2e8686eSxun ni - Sun Microsystems - Beijing China     uint8_t *physport, uint8_t *phynum, uint16_t *pdevhandle,
1369ed7418aeSAndy Giles     uint16_t *slot_num, uint16_t *enclosure, uint16_t *io_flags);
13705b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_io_unit_page(mptsas_t *mpt);
13715b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_io_unit_page_hndshk(mptsas_t *mpt);
13725b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_expander_page0(mptsas_t *mpt, uint32_t page_address,
13735b504601Sjiang wu - Sun Microsystems - Beijing China     mptsas_smp_t *info);
13745b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_set_ioc_params(mptsas_t *mpt);
13755b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_manufacture_page5(mptsas_t *mpt);
13765b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_port_page0(mptsas_t *mpt, uint32_t page_address,
13775b504601Sjiang wu - Sun Microsystems - Beijing China     uint64_t *sas_wwn, uint8_t *portwidth);
137808eb0b82SYong-Feng Du int mptsas_get_bios_page3(mptsas_t *mpt,  uint32_t *bios_version);
137915ada8fcSRobert Mustacchi int mptsas_get_sas_phy_page0(mptsas_t *mpt, uint32_t page_address,
1380f2e8686eSxun ni - Sun Microsystems - Beijing China     smhba_info_t *info);
138115ada8fcSRobert Mustacchi int mptsas_get_sas_phy_page1(mptsas_t *mpt, uint32_t page_address,
1382f2e8686eSxun ni - Sun Microsystems - Beijing China     smhba_info_t *info);
138315ada8fcSRobert Mustacchi int mptsas_get_manufacture_page0(mptsas_t *mpt);
138415ada8fcSRobert Mustacchi int mptsas_get_enclosure_page0(mptsas_t *mpt, uint32_t page_address,
138515ada8fcSRobert Mustacchi     mptsas_enclosure_t *mpe);
138615ada8fcSRobert Mustacchi void mptsas_create_phy_stats(mptsas_t *mpt, char *iport, dev_info_t *dip);
1387f2e8686eSxun ni - Sun Microsystems - Beijing China void mptsas_destroy_phy_stats(mptsas_t *mpt);
1388f2e8686eSxun ni - Sun Microsystems - Beijing China int mptsas_smhba_phy_init(mptsas_t *mpt);
13895b504601Sjiang wu - Sun Microsystems - Beijing China /*
13905b504601Sjiang wu - Sun Microsystems - Beijing China  * RAID functions
13915b504601Sjiang wu - Sun Microsystems - Beijing China  */
13925b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_raid_settings(mptsas_t *mpt, mptsas_raidvol_t *raidvol);
13935b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_raid_info(mptsas_t *mpt);
13945b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_physdisk_settings(mptsas_t *mpt, mptsas_raidvol_t *raidvol,
13955b504601Sjiang wu - Sun Microsystems - Beijing China     uint8_t physdisknum);
13965b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_delete_volume(mptsas_t *mpt, uint16_t volid);
139776a4caf6SAda void mptsas_raid_action_system_shutdown(mptsas_t *mpt);
13985b504601Sjiang wu - Sun Microsystems - Beijing China 
13995b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_IOCSTATUS(status) (status & MPI2_IOCSTATUS_MASK)
14005b504601Sjiang wu - Sun Microsystems - Beijing China /*
14015b504601Sjiang wu - Sun Microsystems - Beijing China  * debugging.
140250c45111SAndy Giles  * MPTSAS_DBGLOG_LINECNT must be a power of 2.
14035b504601Sjiang wu - Sun Microsystems - Beijing China  */
140450c45111SAndy Giles #define	MPTSAS_DBGLOG_LINECNT	128
140550c45111SAndy Giles #define	MPTSAS_DBGLOG_LINELEN	256
140650c45111SAndy Giles #define	MPTSAS_DBGLOG_BUFSIZE	(MPTSAS_DBGLOG_LINECNT * MPTSAS_DBGLOG_LINELEN)
140750c45111SAndy Giles 
14085b504601Sjiang wu - Sun Microsystems - Beijing China #if defined(MPTSAS_DEBUG)
14095b504601Sjiang wu - Sun Microsystems - Beijing China 
141050c45111SAndy Giles extern uint32_t mptsas_debugprt_flags;
141150c45111SAndy Giles extern uint32_t mptsas_debuglog_flags;
141250c45111SAndy Giles 
14135b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_printf(char *fmt, ...);
141450c45111SAndy Giles void mptsas_debug_log(char *fmt, ...);
14155b504601Sjiang wu - Sun Microsystems - Beijing China 
14165b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DBGPR(m, args)	\
141750c45111SAndy Giles 	if (mptsas_debugprt_flags & (m)) \
141850c45111SAndy Giles 		mptsas_printf args;   \
141950c45111SAndy Giles 	if (mptsas_debuglog_flags & (m)) \
142050c45111SAndy Giles 		mptsas_debug_log args
14215b504601Sjiang wu - Sun Microsystems - Beijing China #else	/* ! defined(MPTSAS_DEBUG) */
14225b504601Sjiang wu - Sun Microsystems - Beijing China #define	MPTSAS_DBGPR(m, args)
14235b504601Sjiang wu - Sun Microsystems - Beijing China #endif	/* defined(MPTSAS_DEBUG) */
14245b504601Sjiang wu - Sun Microsystems - Beijing China 
14255b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG0(args)	MPTSAS_DBGPR(0x01, args)	/* init	*/
14265b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG1(args)	MPTSAS_DBGPR(0x02, args)	/* normal running */
14275b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG2(args)	MPTSAS_DBGPR(0x04, args)	/* property handling */
14285b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG3(args)	MPTSAS_DBGPR(0x08, args)	/* pkt handling */
14295b504601Sjiang wu - Sun Microsystems - Beijing China 
14305b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG4(args)	MPTSAS_DBGPR(0x10, args)	/* kmem alloc/free */
14315b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG5(args)	MPTSAS_DBGPR(0x20, args)	/* polled cmds */
14325b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG6(args)	MPTSAS_DBGPR(0x40, args)	/* interrupts */
14335b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG7(args)	MPTSAS_DBGPR(0x80, args)	/* queue handling */
14345b504601Sjiang wu - Sun Microsystems - Beijing China 
14355b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG8(args)	MPTSAS_DBGPR(0x0100, args)	/* arq */
14365b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG9(args)	MPTSAS_DBGPR(0x0200, args)	/* Tagged Q'ing */
14375b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG10(args)	MPTSAS_DBGPR(0x0400, args)	/* halting chip */
14385b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG11(args)	MPTSAS_DBGPR(0x0800, args)	/* power management */
14395b504601Sjiang wu - Sun Microsystems - Beijing China 
14405b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG12(args)	MPTSAS_DBGPR(0x1000, args)	/* enumeration */
14415b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG13(args)	MPTSAS_DBGPR(0x2000, args)	/* configuration page */
14429814ff7fSYong-Feng Du #define	NDBG14(args)	MPTSAS_DBGPR(0x4000, args)	/* LED control */
1443ed7418aeSAndy Giles #define	NDBG15(args)	MPTSAS_DBGPR(0x8000, args)	/* Passthrough */
14445b504601Sjiang wu - Sun Microsystems - Beijing China 
144550c45111SAndy Giles #define	NDBG16(args)	MPTSAS_DBGPR(0x010000, args)	/* SAS Broadcasts */
14465b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG17(args)	MPTSAS_DBGPR(0x020000, args)	/* scatter/gather */
14475b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG18(args)	MPTSAS_DBGPR(0x040000, args)
14485b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG19(args)	MPTSAS_DBGPR(0x080000, args)	/* handshaking */
14495b504601Sjiang wu - Sun Microsystems - Beijing China 
14505b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG20(args)	MPTSAS_DBGPR(0x100000, args)	/* events */
14515b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG21(args)	MPTSAS_DBGPR(0x200000, args)	/* dma */
14525b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG22(args)	MPTSAS_DBGPR(0x400000, args)	/* reset */
14535b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG23(args)	MPTSAS_DBGPR(0x800000, args)	/* abort */
14545b504601Sjiang wu - Sun Microsystems - Beijing China 
14555b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG24(args)	MPTSAS_DBGPR(0x1000000, args)	/* capabilities */
14565b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG25(args)	MPTSAS_DBGPR(0x2000000, args)	/* flushing */
14575b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG26(args)	MPTSAS_DBGPR(0x4000000, args)
145860bf7f6fSAndy Giles #define	NDBG27(args)	MPTSAS_DBGPR(0x8000000, args)	/* passthrough */
14595b504601Sjiang wu - Sun Microsystems - Beijing China 
14605b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG28(args)	MPTSAS_DBGPR(0x10000000, args)	/* hotplug */
14615b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG29(args)	MPTSAS_DBGPR(0x20000000, args)	/* timeouts */
14625b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG30(args)	MPTSAS_DBGPR(0x40000000, args)	/* mptsas_watch */
14635b504601Sjiang wu - Sun Microsystems - Beijing China #define	NDBG31(args)	MPTSAS_DBGPR(0x80000000, args)	/* negotations */
14645b504601Sjiang wu - Sun Microsystems - Beijing China 
14655b504601Sjiang wu - Sun Microsystems - Beijing China /*
14665b504601Sjiang wu - Sun Microsystems - Beijing China  * auto request sense
14675b504601Sjiang wu - Sun Microsystems - Beijing China  */
14685b504601Sjiang wu - Sun Microsystems - Beijing China #define	RQ_MAKECOM_COMMON(pkt, flag, cmd) \
14695b504601Sjiang wu - Sun Microsystems - Beijing China 	(pkt)->pkt_flags = (flag), \
14705b504601Sjiang wu - Sun Microsystems - Beijing China 	((union scsi_cdb *)(pkt)->pkt_cdbp)->scc_cmd = (cmd), \
14715b504601Sjiang wu - Sun Microsystems - Beijing China 	((union scsi_cdb *)(pkt)->pkt_cdbp)->scc_lun = \
14725b504601Sjiang wu - Sun Microsystems - Beijing China 	    (pkt)->pkt_address.a_lun
14735b504601Sjiang wu - Sun Microsystems - Beijing China 
14745b504601Sjiang wu - Sun Microsystems - Beijing China #define	RQ_MAKECOM_G0(pkt, flag, cmd, addr, cnt) \
14755b504601Sjiang wu - Sun Microsystems - Beijing China 	RQ_MAKECOM_COMMON((pkt), (flag), (cmd)), \
14765b504601Sjiang wu - Sun Microsystems - Beijing China 	FORMG0ADDR(((union scsi_cdb *)(pkt)->pkt_cdbp), (addr)), \
14775b504601Sjiang wu - Sun Microsystems - Beijing China 	FORMG0COUNT(((union scsi_cdb *)(pkt)->pkt_cdbp), (cnt))
14785b504601Sjiang wu - Sun Microsystems - Beijing China 
14795b504601Sjiang wu - Sun Microsystems - Beijing China 
14805b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef	__cplusplus
14815b504601Sjiang wu - Sun Microsystems - Beijing China }
14825b504601Sjiang wu - Sun Microsystems - Beijing China #endif
14835b504601Sjiang wu - Sun Microsystems - Beijing China 
14845b504601Sjiang wu - Sun Microsystems - Beijing China #endif	/* _SYS_SCSI_ADAPTERS_MPTVAR_H */
1485