xref: /titanic_44/usr/src/uts/common/io/mr_sas/fusion.h (revision 2ffc8bca2d4d633ffdea78ed925cd1ca63584844)
1*2ffc8bcaSDan McDonald /*
2*2ffc8bcaSDan McDonald  * fusion.h
3*2ffc8bcaSDan McDonald  *
4*2ffc8bcaSDan McDonald  * Solaris MegaRAID device driver for SAS2.0 controllers
5*2ffc8bcaSDan McDonald  * Copyright (c) 2008-2012, LSI Logic Corporation.
6*2ffc8bcaSDan McDonald  * All rights reserved.
7*2ffc8bcaSDan McDonald  *
8*2ffc8bcaSDan McDonald  * Version:
9*2ffc8bcaSDan McDonald  * Author:
10*2ffc8bcaSDan McDonald  *		Swaminathan K S
11*2ffc8bcaSDan McDonald  *		Arun Chandrashekhar
12*2ffc8bcaSDan McDonald  *		Manju R
13*2ffc8bcaSDan McDonald  *		Rasheed
14*2ffc8bcaSDan McDonald  *		Shakeel Bukhari
15*2ffc8bcaSDan McDonald  */
16*2ffc8bcaSDan McDonald 
17*2ffc8bcaSDan McDonald 
18*2ffc8bcaSDan McDonald #ifndef	_FUSION_H_
19*2ffc8bcaSDan McDonald #define	_FUSION_H_
20*2ffc8bcaSDan McDonald 
21*2ffc8bcaSDan McDonald #define	U64	uint64_t
22*2ffc8bcaSDan McDonald #define	U32	uint32_t
23*2ffc8bcaSDan McDonald #define	U16	uint16_t
24*2ffc8bcaSDan McDonald #define	U8	uint8_t
25*2ffc8bcaSDan McDonald #define	S8	char
26*2ffc8bcaSDan McDonald #define	S16	short
27*2ffc8bcaSDan McDonald #define	S32	int
28*2ffc8bcaSDan McDonald 
29*2ffc8bcaSDan McDonald /* MPI2 defines */
30*2ffc8bcaSDan McDonald #define	MPI2_REPLY_POST_HOST_INDEX_OFFSET	(0x6C)
31*2ffc8bcaSDan McDonald #define	MPI2_FUNCTION_IOC_INIT			(0x02) /* IOC Init */
32*2ffc8bcaSDan McDonald #define	MPI2_WHOINIT_HOST_DRIVER		(0x04)
33*2ffc8bcaSDan McDonald #define	MPI2_VERSION_MAJOR			(0x02)
34*2ffc8bcaSDan McDonald #define	MPI2_VERSION_MINOR			(0x00)
35*2ffc8bcaSDan McDonald #define	MPI2_VERSION_MAJOR_MASK			(0xFF00)
36*2ffc8bcaSDan McDonald #define	MPI2_VERSION_MAJOR_SHIFT		(8)
37*2ffc8bcaSDan McDonald #define	MPI2_VERSION_MINOR_MASK			(0x00FF)
38*2ffc8bcaSDan McDonald #define	MPI2_VERSION_MINOR_SHIFT		(0)
39*2ffc8bcaSDan McDonald #define	MPI2_VERSION	((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \
40*2ffc8bcaSDan McDonald 			MPI2_VERSION_MINOR)
41*2ffc8bcaSDan McDonald #define	MPI2_HEADER_VERSION_UNIT		(0x10)
42*2ffc8bcaSDan McDonald #define	MPI2_HEADER_VERSION_DEV			(0x00)
43*2ffc8bcaSDan McDonald #define	MPI2_HEADER_VERSION_UNIT_MASK		(0xFF00)
44*2ffc8bcaSDan McDonald #define	MPI2_HEADER_VERSION_UNIT_SHIFT		(8)
45*2ffc8bcaSDan McDonald #define	MPI2_HEADER_VERSION_DEV_MASK		(0x00FF)
46*2ffc8bcaSDan McDonald #define	MPI2_HEADER_VERSION_DEV_SHIFT		(0)
47*2ffc8bcaSDan McDonald #define	MPI2_HEADER_VERSION			((MPI2_HEADER_VERSION_UNIT \
48*2ffc8bcaSDan McDonald 						<< 8) | \
49*2ffc8bcaSDan McDonald 						MPI2_HEADER_VERSION_DEV)
50*2ffc8bcaSDan McDonald #define	MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR	(0x03)
51*2ffc8bcaSDan McDonald #define	MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG	(0x8000)
52*2ffc8bcaSDan McDonald #define	MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG	(0x0400)
53*2ffc8bcaSDan McDonald #define	MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP	(0x0003)
54*2ffc8bcaSDan McDonald #define	MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG	(0x0200)
55*2ffc8bcaSDan McDonald #define	MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD	(0x0100)
56*2ffc8bcaSDan McDonald #define	MPI2_SCSIIO_EEDPFLAGS_INSERT_OP		(0x0004)
57*2ffc8bcaSDan McDonald #define	MPI2_FUNCTION_SCSI_IO_REQUEST		(0x00) /* SCSI IO */
58*2ffc8bcaSDan McDonald #define	MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY	(0x06)
59*2ffc8bcaSDan McDonald #define	MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO		(0x00)
60*2ffc8bcaSDan McDonald #define	MPI2_SGE_FLAGS_64_BIT_ADDRESSING	(0x02)
61*2ffc8bcaSDan McDonald #define	MPI2_SCSIIO_CONTROL_WRITE		(0x01000000)
62*2ffc8bcaSDan McDonald #define	MPI2_SCSIIO_CONTROL_READ		(0x02000000)
63*2ffc8bcaSDan McDonald #define	MPI2_REQ_DESCRIPT_FLAGS_TYPE_MASK	(0x0E)
64*2ffc8bcaSDan McDonald #define	MPI2_RPY_DESCRIPT_FLAGS_UNUSED		(0x0F)
65*2ffc8bcaSDan McDonald #define	MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS	(0x00)
66*2ffc8bcaSDan McDonald #define	MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK	(0x0F)
67*2ffc8bcaSDan McDonald #define	MPI2_WRSEQ_FLUSH_KEY_VALUE		(0x0)
68*2ffc8bcaSDan McDonald #define	MPI2_WRITE_SEQUENCE_OFFSET		(0x00000004)
69*2ffc8bcaSDan McDonald #define	MPI2_WRSEQ_1ST_KEY_VALUE		(0xF)
70*2ffc8bcaSDan McDonald #define	MPI2_WRSEQ_2ND_KEY_VALUE		(0x4)
71*2ffc8bcaSDan McDonald #define	MPI2_WRSEQ_3RD_KEY_VALUE		(0xB)
72*2ffc8bcaSDan McDonald #define	MPI2_WRSEQ_4TH_KEY_VALUE		(0x2)
73*2ffc8bcaSDan McDonald #define	MPI2_WRSEQ_5TH_KEY_VALUE		(0x7)
74*2ffc8bcaSDan McDonald #define	MPI2_WRSEQ_6TH_KEY_VALUE		(0xD)
75*2ffc8bcaSDan McDonald 
76*2ffc8bcaSDan McDonald /* Invader defines */
77*2ffc8bcaSDan McDonald #define	MPI2_TYPE_CUDA					0x2
78*2ffc8bcaSDan McDonald #define	MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH	0x4000
79*2ffc8bcaSDan McDonald #define	MR_RL_FLAGS_GRANT_DESTINATION_CPU0			0x00
80*2ffc8bcaSDan McDonald #define	MR_RL_FLAGS_GRANT_DESTINATION_CPU1			0x10
81*2ffc8bcaSDan McDonald #define	MR_RL_FLAGS_GRANT_DESTINATION_CUDA			0x80
82*2ffc8bcaSDan McDonald #define	MR_RL_FLAGS_SEQ_NUM_ENABLE					0x8
83*2ffc8bcaSDan McDonald #define	MPI2_NSEG_FLAGS_SHIFT						4
84*2ffc8bcaSDan McDonald 
85*2ffc8bcaSDan McDonald 
86*2ffc8bcaSDan McDonald #define	MR_PD_INVALID				0xFFFF
87*2ffc8bcaSDan McDonald #define	MAX_SPAN_DEPTH				8
88*2ffc8bcaSDan McDonald #define	MAX_RAIDMAP_SPAN_DEPTH			(MAX_SPAN_DEPTH)
89*2ffc8bcaSDan McDonald #define	MAX_ROW_SIZE				32
90*2ffc8bcaSDan McDonald #define	MAX_RAIDMAP_ROW_SIZE			(MAX_ROW_SIZE)
91*2ffc8bcaSDan McDonald #define	MAX_LOGICAL_DRIVES			64
92*2ffc8bcaSDan McDonald #define	MAX_RAIDMAP_LOGICAL_DRIVES		(MAX_LOGICAL_DRIVES)
93*2ffc8bcaSDan McDonald #define	MAX_RAIDMAP_VIEWS			(MAX_LOGICAL_DRIVES)
94*2ffc8bcaSDan McDonald #define	MAX_ARRAYS				128
95*2ffc8bcaSDan McDonald #define	MAX_RAIDMAP_ARRAYS			(MAX_ARRAYS)
96*2ffc8bcaSDan McDonald #define	MAX_PHYSICAL_DEVICES			256
97*2ffc8bcaSDan McDonald #define	MAX_RAIDMAP_PHYSICAL_DEVICES		(MAX_PHYSICAL_DEVICES)
98*2ffc8bcaSDan McDonald 
99*2ffc8bcaSDan McDonald /* get the mapping information of LD */
100*2ffc8bcaSDan McDonald #define	MR_DCMD_LD_MAP_GET_INFO			0x0300e101
101*2ffc8bcaSDan McDonald 
102*2ffc8bcaSDan McDonald #ifndef	MPI2_POINTER
103*2ffc8bcaSDan McDonald #define	MPI2_POINTER	*
104*2ffc8bcaSDan McDonald #endif
105*2ffc8bcaSDan McDonald 
106*2ffc8bcaSDan McDonald #pragma pack(1)
107*2ffc8bcaSDan McDonald 
108*2ffc8bcaSDan McDonald typedef struct _MPI25_IEEE_SGE_CHAIN64
109*2ffc8bcaSDan McDonald {
110*2ffc8bcaSDan McDonald 	U64	Address;
111*2ffc8bcaSDan McDonald 	U32	Length;
112*2ffc8bcaSDan McDonald 	U16	Reserved1;
113*2ffc8bcaSDan McDonald 	U8	NextChainOffset;
114*2ffc8bcaSDan McDonald 	U8	Flags;
115*2ffc8bcaSDan McDonald } MPI25_IEEE_SGE_CHAIN64, MPI2_POINTER PTR_MPI25_IEEE_SGE_CHAIN64,
116*2ffc8bcaSDan McDonald     Mpi25IeeeSgeChain64_t, MPI2_POINTER pMpi25IeeeSgeChain64_t;
117*2ffc8bcaSDan McDonald 
118*2ffc8bcaSDan McDonald typedef struct _MPI2_SGE_SIMPLE_UNION
119*2ffc8bcaSDan McDonald {
120*2ffc8bcaSDan McDonald 	U32	FlagsLength;
121*2ffc8bcaSDan McDonald 	union
122*2ffc8bcaSDan McDonald 	{
123*2ffc8bcaSDan McDonald 		U32	Address32;
124*2ffc8bcaSDan McDonald 		U64	Address64;
125*2ffc8bcaSDan McDonald 	} u1;
126*2ffc8bcaSDan McDonald } MPI2_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_SGE_SIMPLE_UNION,
127*2ffc8bcaSDan McDonald     Mpi2SGESimpleUnion_t, MPI2_POINTER pMpi2SGESimpleUnion_t;
128*2ffc8bcaSDan McDonald 
129*2ffc8bcaSDan McDonald typedef struct
130*2ffc8bcaSDan McDonald {
131*2ffc8bcaSDan McDonald 	U8	CDB[20];			/* 0x00 */
132*2ffc8bcaSDan McDonald 	U32	PrimaryReferenceTag;		/* 0x14 */
133*2ffc8bcaSDan McDonald 	U16	PrimaryApplicationTag;		/* 0x18 */
134*2ffc8bcaSDan McDonald 	U16	PrimaryApplicationTagMask;	/* 0x1A */
135*2ffc8bcaSDan McDonald 	U32	TransferLength;			/* 0x1C */
136*2ffc8bcaSDan McDonald } MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32,
137*2ffc8bcaSDan McDonald     Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t;
138*2ffc8bcaSDan McDonald 
139*2ffc8bcaSDan McDonald typedef struct _MPI2_SGE_CHAIN_UNION
140*2ffc8bcaSDan McDonald {
141*2ffc8bcaSDan McDonald 	U16	Length;
142*2ffc8bcaSDan McDonald 	U8	NextChainOffset;
143*2ffc8bcaSDan McDonald 	U8	Flags;
144*2ffc8bcaSDan McDonald 	union
145*2ffc8bcaSDan McDonald 	{
146*2ffc8bcaSDan McDonald 		U32	Address32;
147*2ffc8bcaSDan McDonald 		U64	Address64;
148*2ffc8bcaSDan McDonald 	} u1;
149*2ffc8bcaSDan McDonald } MPI2_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_SGE_CHAIN_UNION,
150*2ffc8bcaSDan McDonald     Mpi2SGEChainUnion_t, MPI2_POINTER pMpi2SGEChainUnion_t;
151*2ffc8bcaSDan McDonald 
152*2ffc8bcaSDan McDonald typedef struct _MPI2_IEEE_SGE_SIMPLE32
153*2ffc8bcaSDan McDonald {
154*2ffc8bcaSDan McDonald 	U32	Address;
155*2ffc8bcaSDan McDonald 	U32	FlagsLength;
156*2ffc8bcaSDan McDonald } MPI2_IEEE_SGE_SIMPLE32, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE32,
157*2ffc8bcaSDan McDonald     Mpi2IeeeSgeSimple32_t, MPI2_POINTER pMpi2IeeeSgeSimple32_t;
158*2ffc8bcaSDan McDonald 
159*2ffc8bcaSDan McDonald typedef struct _MPI2_IEEE_SGE_SIMPLE64
160*2ffc8bcaSDan McDonald {
161*2ffc8bcaSDan McDonald 	U64	Address;
162*2ffc8bcaSDan McDonald 	U32	Length;
163*2ffc8bcaSDan McDonald 	U16	Reserved1;
164*2ffc8bcaSDan McDonald 	U8	Reserved2;
165*2ffc8bcaSDan McDonald 	U8	Flags;
166*2ffc8bcaSDan McDonald } MPI2_IEEE_SGE_SIMPLE64, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE64,
167*2ffc8bcaSDan McDonald     Mpi2IeeeSgeSimple64_t, MPI2_POINTER pMpi2IeeeSgeSimple64_t;
168*2ffc8bcaSDan McDonald 
169*2ffc8bcaSDan McDonald typedef union _MPI2_IEEE_SGE_SIMPLE_UNION
170*2ffc8bcaSDan McDonald {
171*2ffc8bcaSDan McDonald 	MPI2_IEEE_SGE_SIMPLE32	Simple32;
172*2ffc8bcaSDan McDonald 	MPI2_IEEE_SGE_SIMPLE64	Simple64;
173*2ffc8bcaSDan McDonald } MPI2_IEEE_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE_UNION,
174*2ffc8bcaSDan McDonald     Mpi2IeeeSgeSimpleUnion_t, MPI2_POINTER pMpi2IeeeSgeSimpleUnion_t;
175*2ffc8bcaSDan McDonald 
176*2ffc8bcaSDan McDonald typedef	MPI2_IEEE_SGE_SIMPLE32	MPI2_IEEE_SGE_CHAIN32;
177*2ffc8bcaSDan McDonald typedef	MPI2_IEEE_SGE_SIMPLE64	MPI2_IEEE_SGE_CHAIN64;
178*2ffc8bcaSDan McDonald 
179*2ffc8bcaSDan McDonald typedef union _MPI2_IEEE_SGE_CHAIN_UNION
180*2ffc8bcaSDan McDonald {
181*2ffc8bcaSDan McDonald 	MPI2_IEEE_SGE_CHAIN32	Chain32;
182*2ffc8bcaSDan McDonald 	MPI2_IEEE_SGE_CHAIN64	Chain64;
183*2ffc8bcaSDan McDonald } MPI2_IEEE_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_CHAIN_UNION,
184*2ffc8bcaSDan McDonald     Mpi2IeeeSgeChainUnion_t, MPI2_POINTER pMpi2IeeeSgeChainUnion_t;
185*2ffc8bcaSDan McDonald 
186*2ffc8bcaSDan McDonald typedef union _MPI2_SGE_IO_UNION
187*2ffc8bcaSDan McDonald {
188*2ffc8bcaSDan McDonald 	MPI2_SGE_SIMPLE_UNION		MpiSimple;
189*2ffc8bcaSDan McDonald 	MPI2_SGE_CHAIN_UNION		MpiChain;
190*2ffc8bcaSDan McDonald 	MPI2_IEEE_SGE_SIMPLE_UNION	IeeeSimple;
191*2ffc8bcaSDan McDonald 	MPI2_IEEE_SGE_CHAIN_UNION	IeeeChain;
192*2ffc8bcaSDan McDonald } MPI2_SGE_IO_UNION, MPI2_POINTER PTR_MPI2_SGE_IO_UNION,
193*2ffc8bcaSDan McDonald     Mpi2SGEIOUnion_t, MPI2_POINTER pMpi2SGEIOUnion_t;
194*2ffc8bcaSDan McDonald 
195*2ffc8bcaSDan McDonald typedef union
196*2ffc8bcaSDan McDonald {
197*2ffc8bcaSDan McDonald 	U8				CDB32[32];
198*2ffc8bcaSDan McDonald 	MPI2_SCSI_IO_CDB_EEDP32		EEDP32;
199*2ffc8bcaSDan McDonald 	MPI2_SGE_SIMPLE_UNION		SGE;
200*2ffc8bcaSDan McDonald } MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION,
201*2ffc8bcaSDan McDonald     Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t;
202*2ffc8bcaSDan McDonald 
203*2ffc8bcaSDan McDonald /* Default Request Descriptor */
204*2ffc8bcaSDan McDonald typedef struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR
205*2ffc8bcaSDan McDonald {
206*2ffc8bcaSDan McDonald 	U8		RequestFlags;			/* 0x00 */
207*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
208*2ffc8bcaSDan McDonald 	U16		SMID;				/* 0x02 */
209*2ffc8bcaSDan McDonald 	U16		LMID;				/* 0x04 */
210*2ffc8bcaSDan McDonald 	U16		DescriptorTypeDependent;	/* 0x06 */
211*2ffc8bcaSDan McDonald } MPI2_DEFAULT_REQUEST_DESCRIPTOR,
212*2ffc8bcaSDan McDonald     MPI2_POINTER PTR_MPI2_DEFAULT_REQUEST_DESCRIPTOR,
213*2ffc8bcaSDan McDonald     Mpi2DefaultRequestDescriptor_t,
214*2ffc8bcaSDan McDonald     MPI2_POINTER pMpi2DefaultRequestDescriptor_t;
215*2ffc8bcaSDan McDonald 
216*2ffc8bcaSDan McDonald /* High Priority Request Descriptor */
217*2ffc8bcaSDan McDonald typedef struct _MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR
218*2ffc8bcaSDan McDonald {
219*2ffc8bcaSDan McDonald 	U8		RequestFlags;			/* 0x00 */
220*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
221*2ffc8bcaSDan McDonald 	U16		SMID;				/* 0x02 */
222*2ffc8bcaSDan McDonald 	U16		LMID;				/* 0x04 */
223*2ffc8bcaSDan McDonald 	U16		Reserved1;			/* 0x06 */
224*2ffc8bcaSDan McDonald } MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR,
225*2ffc8bcaSDan McDonald     MPI2_POINTER PTR_MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR,
226*2ffc8bcaSDan McDonald     Mpi2HighPriorityRequestDescriptor_t,
227*2ffc8bcaSDan McDonald     MPI2_POINTER pMpi2HighPriorityRequestDescriptor_t;
228*2ffc8bcaSDan McDonald 
229*2ffc8bcaSDan McDonald /* SCSI IO Request Descriptor */
230*2ffc8bcaSDan McDonald typedef struct _MPI2_SCSI_IO_REQUEST_DESCRIPTOR
231*2ffc8bcaSDan McDonald {
232*2ffc8bcaSDan McDonald 	U8		RequestFlags;			/* 0x00 */
233*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
234*2ffc8bcaSDan McDonald 	U16		SMID;				/* 0x02 */
235*2ffc8bcaSDan McDonald 	U16		LMID;				/* 0x04 */
236*2ffc8bcaSDan McDonald 	U16		DevHandle;			/* 0x06 */
237*2ffc8bcaSDan McDonald } MPI2_SCSI_IO_REQUEST_DESCRIPTOR,
238*2ffc8bcaSDan McDonald     MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST_DESCRIPTOR,
239*2ffc8bcaSDan McDonald     Mpi2SCSIIORequestDescriptor_t,
240*2ffc8bcaSDan McDonald     MPI2_POINTER pMpi2SCSIIORequestDescriptor_t;
241*2ffc8bcaSDan McDonald 
242*2ffc8bcaSDan McDonald /* SCSI Target Request Descriptor */
243*2ffc8bcaSDan McDonald typedef struct _MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR
244*2ffc8bcaSDan McDonald {
245*2ffc8bcaSDan McDonald 	U8		RequestFlags;			/* 0x00 */
246*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
247*2ffc8bcaSDan McDonald 	U16		SMID;				/* 0x02 */
248*2ffc8bcaSDan McDonald 	U16		LMID;				/* 0x04 */
249*2ffc8bcaSDan McDonald 	U16		IoIndex;			/* 0x06 */
250*2ffc8bcaSDan McDonald } MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR,
251*2ffc8bcaSDan McDonald     MPI2_POINTER PTR_MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR,
252*2ffc8bcaSDan McDonald     Mpi2SCSITargetRequestDescriptor_t,
253*2ffc8bcaSDan McDonald     MPI2_POINTER pMpi2SCSITargetRequestDescriptor_t;
254*2ffc8bcaSDan McDonald 
255*2ffc8bcaSDan McDonald /* RAID Accelerator Request Descriptor */
256*2ffc8bcaSDan McDonald typedef struct _MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR
257*2ffc8bcaSDan McDonald {
258*2ffc8bcaSDan McDonald 	U8		RequestFlags;			/* 0x00 */
259*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
260*2ffc8bcaSDan McDonald 	U16		SMID;				/* 0x02 */
261*2ffc8bcaSDan McDonald 	U16		LMID;				/* 0x04 */
262*2ffc8bcaSDan McDonald 	U16		Reserved;			/* 0x06 */
263*2ffc8bcaSDan McDonald } MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR,
264*2ffc8bcaSDan McDonald     MPI2_POINTER PTR_MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR,
265*2ffc8bcaSDan McDonald     Mpi2RAIDAcceleratorRequestDescriptor_t,
266*2ffc8bcaSDan McDonald     MPI2_POINTER pMpi2RAIDAcceleratorRequestDescriptor_t;
267*2ffc8bcaSDan McDonald 
268*2ffc8bcaSDan McDonald /* Default Reply Descriptor */
269*2ffc8bcaSDan McDonald typedef struct _MPI2_DEFAULT_REPLY_DESCRIPTOR
270*2ffc8bcaSDan McDonald {
271*2ffc8bcaSDan McDonald 	U8		ReplyFlags;			/* 0x00 */
272*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
273*2ffc8bcaSDan McDonald 	U16		DescriptorTypeDependent1;	/* 0x02 */
274*2ffc8bcaSDan McDonald 	U32		DescriptorTypeDependent2;	/* 0x04 */
275*2ffc8bcaSDan McDonald } MPI2_DEFAULT_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_DEFAULT_REPLY_DESCRIPTOR,
276*2ffc8bcaSDan McDonald     Mpi2DefaultReplyDescriptor_t, MPI2_POINTER pMpi2DefaultReplyDescriptor_t;
277*2ffc8bcaSDan McDonald 
278*2ffc8bcaSDan McDonald /* Address Reply Descriptor */
279*2ffc8bcaSDan McDonald typedef struct _MPI2_ADDRESS_REPLY_DESCRIPTOR
280*2ffc8bcaSDan McDonald {
281*2ffc8bcaSDan McDonald 	U8		ReplyFlags;			/* 0x00 */
282*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
283*2ffc8bcaSDan McDonald 	U16		SMID;				/* 0x02 */
284*2ffc8bcaSDan McDonald 	U32		ReplyFrameAddress;		/* 0x04 */
285*2ffc8bcaSDan McDonald } MPI2_ADDRESS_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_ADDRESS_REPLY_DESCRIPTOR,
286*2ffc8bcaSDan McDonald     Mpi2AddressReplyDescriptor_t, MPI2_POINTER pMpi2AddressReplyDescriptor_t;
287*2ffc8bcaSDan McDonald 
288*2ffc8bcaSDan McDonald /* SCSI IO Success Reply Descriptor */
289*2ffc8bcaSDan McDonald typedef struct _MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR
290*2ffc8bcaSDan McDonald {
291*2ffc8bcaSDan McDonald 	U8		ReplyFlags;			/* 0x00 */
292*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
293*2ffc8bcaSDan McDonald 	U16		SMID;				/* 0x02 */
294*2ffc8bcaSDan McDonald 	U16		TaskTag;			/* 0x04 */
295*2ffc8bcaSDan McDonald 	U16		Reserved1;			/* 0x06 */
296*2ffc8bcaSDan McDonald } MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR,
297*2ffc8bcaSDan McDonald     MPI2_POINTER PTR_MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR,
298*2ffc8bcaSDan McDonald     Mpi2SCSIIOSuccessReplyDescriptor_t,
299*2ffc8bcaSDan McDonald     MPI2_POINTER pMpi2SCSIIOSuccessReplyDescriptor_t;
300*2ffc8bcaSDan McDonald 
301*2ffc8bcaSDan McDonald /* TargetAssist Success Reply Descriptor */
302*2ffc8bcaSDan McDonald typedef struct _MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR
303*2ffc8bcaSDan McDonald {
304*2ffc8bcaSDan McDonald 	U8		ReplyFlags;			/* 0x00 */
305*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
306*2ffc8bcaSDan McDonald 	U16		SMID;				/* 0x02 */
307*2ffc8bcaSDan McDonald 	U8		SequenceNumber;			/* 0x04 */
308*2ffc8bcaSDan McDonald 	U8		Reserved1;			/* 0x05 */
309*2ffc8bcaSDan McDonald 	U16		IoIndex;			/* 0x06 */
310*2ffc8bcaSDan McDonald } MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR,
311*2ffc8bcaSDan McDonald     MPI2_POINTER PTR_MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR,
312*2ffc8bcaSDan McDonald     Mpi2TargetAssistSuccessReplyDescriptor_t,
313*2ffc8bcaSDan McDonald     MPI2_POINTER pMpi2TargetAssistSuccessReplyDescriptor_t;
314*2ffc8bcaSDan McDonald 
315*2ffc8bcaSDan McDonald /* Target Command Buffer Reply Descriptor */
316*2ffc8bcaSDan McDonald typedef struct _MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR
317*2ffc8bcaSDan McDonald {
318*2ffc8bcaSDan McDonald 	U8		ReplyFlags;			/* 0x00 */
319*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
320*2ffc8bcaSDan McDonald 	U8		VP_ID;				/* 0x02 */
321*2ffc8bcaSDan McDonald 	U8		Flags;				/* 0x03 */
322*2ffc8bcaSDan McDonald 	U16		InitiatorDevHandle;		/* 0x04 */
323*2ffc8bcaSDan McDonald 	U16		IoIndex;			/* 0x06 */
324*2ffc8bcaSDan McDonald } MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR,
325*2ffc8bcaSDan McDonald     MPI2_POINTER PTR_MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR,
326*2ffc8bcaSDan McDonald     Mpi2TargetCommandBufferReplyDescriptor_t,
327*2ffc8bcaSDan McDonald     MPI2_POINTER pMpi2TargetCommandBufferReplyDescriptor_t;
328*2ffc8bcaSDan McDonald 
329*2ffc8bcaSDan McDonald /* RAID Accelerator Success Reply Descriptor */
330*2ffc8bcaSDan McDonald typedef struct _MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR
331*2ffc8bcaSDan McDonald {
332*2ffc8bcaSDan McDonald 	U8		ReplyFlags;			/* 0x00 */
333*2ffc8bcaSDan McDonald 	U8		MSIxIndex;			/* 0x01 */
334*2ffc8bcaSDan McDonald 	U16		SMID;				/* 0x02 */
335*2ffc8bcaSDan McDonald 	U32		Reserved;			/* 0x04 */
336*2ffc8bcaSDan McDonald } MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR,
337*2ffc8bcaSDan McDonald     MPI2_POINTER PTR_MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR,
338*2ffc8bcaSDan McDonald     Mpi2RAIDAcceleratorSuccessReplyDescriptor_t,
339*2ffc8bcaSDan McDonald     MPI2_POINTER pMpi2RAIDAcceleratorSuccessReplyDescriptor_t;
340*2ffc8bcaSDan McDonald 
341*2ffc8bcaSDan McDonald /* union of Reply Descriptors */
342*2ffc8bcaSDan McDonald typedef union _MPI2_REPLY_DESCRIPTORS_UNION
343*2ffc8bcaSDan McDonald {
344*2ffc8bcaSDan McDonald 	MPI2_DEFAULT_REPLY_DESCRIPTOR			Default;
345*2ffc8bcaSDan McDonald 	MPI2_ADDRESS_REPLY_DESCRIPTOR			AddressReply;
346*2ffc8bcaSDan McDonald 	MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR		SCSIIOSuccess;
347*2ffc8bcaSDan McDonald 	MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR	TargetAssistSuccess;
348*2ffc8bcaSDan McDonald 	MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR	TargetCommandBuffer;
349*2ffc8bcaSDan McDonald 	MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR	RAIDAcceleratorSuccess;
350*2ffc8bcaSDan McDonald 	U64						Words;
351*2ffc8bcaSDan McDonald } MPI2_REPLY_DESCRIPTORS_UNION, MPI2_POINTER PTR_MPI2_REPLY_DESCRIPTORS_UNION,
352*2ffc8bcaSDan McDonald     Mpi2ReplyDescriptorsUnion_t, MPI2_POINTER pMpi2ReplyDescriptorsUnion_t;
353*2ffc8bcaSDan McDonald 
354*2ffc8bcaSDan McDonald /* IOCInit Request message */
355*2ffc8bcaSDan McDonald typedef struct _MPI2_IOC_INIT_REQUEST
356*2ffc8bcaSDan McDonald {
357*2ffc8bcaSDan McDonald 	U8		WhoInit;				/* 0x00 */
358*2ffc8bcaSDan McDonald 	U8		Reserved1;				/* 0x01 */
359*2ffc8bcaSDan McDonald 	U8		ChainOffset;				/* 0x02 */
360*2ffc8bcaSDan McDonald 	U8		Function;				/* 0x03 */
361*2ffc8bcaSDan McDonald 	U16		Reserved2;				/* 0x04 */
362*2ffc8bcaSDan McDonald 	U8		Reserved3;				/* 0x06 */
363*2ffc8bcaSDan McDonald 	U8		MsgFlags;				/* 0x07 */
364*2ffc8bcaSDan McDonald 	U8		VP_ID;					/* 0x08 */
365*2ffc8bcaSDan McDonald 	U8		VF_ID;					/* 0x09 */
366*2ffc8bcaSDan McDonald 	U16		Reserved4;				/* 0x0A */
367*2ffc8bcaSDan McDonald 	U16		MsgVersion;				/* 0x0C */
368*2ffc8bcaSDan McDonald 	U16		HeaderVersion;				/* 0x0E */
369*2ffc8bcaSDan McDonald 	U32		Reserved5;				/* 0x10 */
370*2ffc8bcaSDan McDonald 	U16		Reserved6;				/* 0x14 */
371*2ffc8bcaSDan McDonald 	U8		Reserved7;				/* 0x16 */
372*2ffc8bcaSDan McDonald 	U8		HostMSIxVectors;			/* 0x17 */
373*2ffc8bcaSDan McDonald 	U16		Reserved8;				/* 0x18 */
374*2ffc8bcaSDan McDonald 	U16		SystemRequestFrameSize;			/* 0x1A */
375*2ffc8bcaSDan McDonald 	U16		ReplyDescriptorPostQueueDepth;		/* 0x1C */
376*2ffc8bcaSDan McDonald 	U16		ReplyFreeQueueDepth;			/* 0x1E */
377*2ffc8bcaSDan McDonald 	U32		SenseBufferAddressHigh;			/* 0x20 */
378*2ffc8bcaSDan McDonald 	U32		SystemReplyAddressHigh;			/* 0x24 */
379*2ffc8bcaSDan McDonald 	U64		SystemRequestFrameBaseAddress;		/* 0x28 */
380*2ffc8bcaSDan McDonald 	U64		ReplyDescriptorPostQueueAddress;	/* 0x30 */
381*2ffc8bcaSDan McDonald 	U64		ReplyFreeQueueAddress;			/* 0x38 */
382*2ffc8bcaSDan McDonald 	U64		TimeStamp;				/* 0x40 */
383*2ffc8bcaSDan McDonald } MPI2_IOC_INIT_REQUEST, MPI2_POINTER PTR_MPI2_IOC_INIT_REQUEST,
384*2ffc8bcaSDan McDonald     Mpi2IOCInitRequest_t, MPI2_POINTER pMpi2IOCInitRequest_t;
385*2ffc8bcaSDan McDonald 
386*2ffc8bcaSDan McDonald 
387*2ffc8bcaSDan McDonald typedef struct _MR_DEV_HANDLE_INFO {
388*2ffc8bcaSDan McDonald 
389*2ffc8bcaSDan McDonald 	/* Send bitmap of LDs that are idle with respect to FP */
390*2ffc8bcaSDan McDonald 	U16		curDevHdl;
391*2ffc8bcaSDan McDonald 
392*2ffc8bcaSDan McDonald 	/* bitmap of valid device handles. */
393*2ffc8bcaSDan McDonald 	U8		validHandles;
394*2ffc8bcaSDan McDonald 	U8		reserved;
395*2ffc8bcaSDan McDonald 	/* 0x04 dev handles for all the paths. */
396*2ffc8bcaSDan McDonald 	U16		devHandle[2];
397*2ffc8bcaSDan McDonald } MR_DEV_HANDLE_INFO;				/* 0x08, Total Size */
398*2ffc8bcaSDan McDonald 
399*2ffc8bcaSDan McDonald typedef struct _MR_ARRAY_INFO {
400*2ffc8bcaSDan McDonald 	U16	pd[MAX_RAIDMAP_ROW_SIZE];
401*2ffc8bcaSDan McDonald } MR_ARRAY_INFO;			/* 0x40, Total Size */
402*2ffc8bcaSDan McDonald 
403*2ffc8bcaSDan McDonald typedef struct _MR_QUAD_ELEMENT {
404*2ffc8bcaSDan McDonald 	U64		logStart;			/* 0x00 */
405*2ffc8bcaSDan McDonald 	U64		logEnd;				/* 0x08 */
406*2ffc8bcaSDan McDonald 	U64		offsetInSpan;			/* 0x10 */
407*2ffc8bcaSDan McDonald 	U32		diff;				/* 0x18 */
408*2ffc8bcaSDan McDonald 	U32		reserved1;			/* 0x1C */
409*2ffc8bcaSDan McDonald } MR_QUAD_ELEMENT;					/* 0x20, Total size */
410*2ffc8bcaSDan McDonald 
411*2ffc8bcaSDan McDonald typedef struct _MR_SPAN_INFO {
412*2ffc8bcaSDan McDonald 	U32		noElements;			/* 0x00 */
413*2ffc8bcaSDan McDonald 	U32		reserved1;			/* 0x04 */
414*2ffc8bcaSDan McDonald 	MR_QUAD_ELEMENT	quads[MAX_RAIDMAP_SPAN_DEPTH];	/* 0x08 */
415*2ffc8bcaSDan McDonald } MR_SPAN_INFO;						/* 0x108, Total size */
416*2ffc8bcaSDan McDonald 
417*2ffc8bcaSDan McDonald typedef struct _MR_LD_SPAN_ {				/* SPAN structure */
418*2ffc8bcaSDan McDonald 	/* 0x00, starting block number in array */
419*2ffc8bcaSDan McDonald 	U64		startBlk;
420*2ffc8bcaSDan McDonald 
421*2ffc8bcaSDan McDonald 	/* 0x08, number of blocks */
422*2ffc8bcaSDan McDonald 	U64		numBlks;
423*2ffc8bcaSDan McDonald 
424*2ffc8bcaSDan McDonald 	/* 0x10, array reference */
425*2ffc8bcaSDan McDonald 	U16		arrayRef;
426*2ffc8bcaSDan McDonald 
427*2ffc8bcaSDan McDonald 	U8		reserved[6];	/* 0x12 */
428*2ffc8bcaSDan McDonald } MR_LD_SPAN;				/* 0x18, Total Size */
429*2ffc8bcaSDan McDonald 
430*2ffc8bcaSDan McDonald typedef struct _MR_SPAN_BLOCK_INFO {
431*2ffc8bcaSDan McDonald 	/* number of rows/span */
432*2ffc8bcaSDan McDonald 	U64		num_rows;
433*2ffc8bcaSDan McDonald 
434*2ffc8bcaSDan McDonald 	MR_LD_SPAN	span;				/* 0x08 */
435*2ffc8bcaSDan McDonald 	MR_SPAN_INFO	block_span_info;		/* 0x20 */
436*2ffc8bcaSDan McDonald } MR_SPAN_BLOCK_INFO;					/* 0x128, Total Size */
437*2ffc8bcaSDan McDonald 
438*2ffc8bcaSDan McDonald typedef struct _MR_LD_RAID {
439*2ffc8bcaSDan McDonald 	struct {
440*2ffc8bcaSDan McDonald 		U32	fpCapable	:1;
441*2ffc8bcaSDan McDonald 		U32	reserved5	:3;
442*2ffc8bcaSDan McDonald 		U32	ldPiMode	:4;
443*2ffc8bcaSDan McDonald 		U32	pdPiMode	:4;
444*2ffc8bcaSDan McDonald 
445*2ffc8bcaSDan McDonald 		/* FDE or controller encryption (MR_LD_ENCRYPTION_TYPE) */
446*2ffc8bcaSDan McDonald 		U32	encryptionType	:8;
447*2ffc8bcaSDan McDonald 
448*2ffc8bcaSDan McDonald 		U32	fpWriteCapable	:1;
449*2ffc8bcaSDan McDonald 		U32	fpReadCapable	:1;
450*2ffc8bcaSDan McDonald 		U32	fpWriteAcrossStripe:1;
451*2ffc8bcaSDan McDonald 		U32	fpReadAcrossStripe:1;
452*2ffc8bcaSDan McDonald 		U32	reserved4	:8;
453*2ffc8bcaSDan McDonald 	} capability;			/* 0x00 */
454*2ffc8bcaSDan McDonald 	U32	reserved6;
455*2ffc8bcaSDan McDonald 	U64	size;			/* 0x08, LD size in blocks */
456*2ffc8bcaSDan McDonald 	U8	spanDepth;		/* 0x10, Total Number of Spans */
457*2ffc8bcaSDan McDonald 	U8	level;			/* 0x11, RAID level */
458*2ffc8bcaSDan McDonald 	/* 0x12, shift-count to get stripe size (0=512, 1=1K, 7=64K, etc.) */
459*2ffc8bcaSDan McDonald 	U8	stripeShift;
460*2ffc8bcaSDan McDonald 	U8	rowSize;		/* 0x13, number of disks in a row */
461*2ffc8bcaSDan McDonald 	/* 0x14, number of data disks in a row */
462*2ffc8bcaSDan McDonald 	U8	rowDataSize;
463*2ffc8bcaSDan McDonald 	U8	writeMode;		/* 0x15, WRITE_THROUGH or WRITE_BACK */
464*2ffc8bcaSDan McDonald 
465*2ffc8bcaSDan McDonald 	/* 0x16, To differentiate between RAID1 and RAID1E */
466*2ffc8bcaSDan McDonald 	U8	PRL;
467*2ffc8bcaSDan McDonald 
468*2ffc8bcaSDan McDonald 	U8	SRL;			/* 0x17 */
469*2ffc8bcaSDan McDonald 	U16	targetId;		/* 0x18, ld Target Id. */
470*2ffc8bcaSDan McDonald 
471*2ffc8bcaSDan McDonald 	/* 0x1a, state of ld, state corresponds to MR_LD_STATE */
472*2ffc8bcaSDan McDonald 	U8	ldState;
473*2ffc8bcaSDan McDonald 
474*2ffc8bcaSDan McDonald 	/* 0x1b, Pre calculate region type requests based on MFC etc.. */
475*2ffc8bcaSDan McDonald 	U8	regTypeReqOnWrite;
476*2ffc8bcaSDan McDonald 
477*2ffc8bcaSDan McDonald 	U8	modFactor;		/* 0x1c, same as rowSize */
478*2ffc8bcaSDan McDonald 	/*
479*2ffc8bcaSDan McDonald 	 * 0x1d, region lock type used for read, valid only if
480*2ffc8bcaSDan McDonald 	 * regTypeOnReadIsValid=1
481*2ffc8bcaSDan McDonald 	 */
482*2ffc8bcaSDan McDonald 	U8	regTypeReqOnRead;
483*2ffc8bcaSDan McDonald 	U16	seqNum;			/* 0x1e, LD sequence number */
484*2ffc8bcaSDan McDonald 
485*2ffc8bcaSDan McDonald 	struct {
486*2ffc8bcaSDan McDonald 		/* This LD requires sync command before completing */
487*2ffc8bcaSDan McDonald 		U32	ldSyncRequired:1;
488*2ffc8bcaSDan McDonald 		U32	reserved:31;
489*2ffc8bcaSDan McDonald 	} flags;			/* 0x20 */
490*2ffc8bcaSDan McDonald 
491*2ffc8bcaSDan McDonald 	U8	reserved3[0x5C];	/* 0x24 */
492*2ffc8bcaSDan McDonald } MR_LD_RAID;				/* 0x80, Total Size */
493*2ffc8bcaSDan McDonald 
494*2ffc8bcaSDan McDonald typedef struct _MR_LD_SPAN_MAP {
495*2ffc8bcaSDan McDonald 	MR_LD_RAID		ldRaid;	/* 0x00 */
496*2ffc8bcaSDan McDonald 
497*2ffc8bcaSDan McDonald 	/* 0x80, needed for GET_ARM() - R0/1/5 only. */
498*2ffc8bcaSDan McDonald 	U8			dataArmMap[MAX_RAIDMAP_ROW_SIZE];
499*2ffc8bcaSDan McDonald 
500*2ffc8bcaSDan McDonald 	MR_SPAN_BLOCK_INFO	spanBlock[MAX_RAIDMAP_SPAN_DEPTH]; /* 0xA0 */
501*2ffc8bcaSDan McDonald } MR_LD_SPAN_MAP;	/* 0x9E0 */
502*2ffc8bcaSDan McDonald 
503*2ffc8bcaSDan McDonald typedef struct _MR_FW_RAID_MAP {
504*2ffc8bcaSDan McDonald 	/* total size of this structure, including this field */
505*2ffc8bcaSDan McDonald 	U32			totalSize;
506*2ffc8bcaSDan McDonald 	union {
507*2ffc8bcaSDan McDonald 		/* Simple method of version checking variables */
508*2ffc8bcaSDan McDonald 		struct {
509*2ffc8bcaSDan McDonald 			U32	maxLd;
510*2ffc8bcaSDan McDonald 			U32	maxSpanDepth;
511*2ffc8bcaSDan McDonald 			U32	maxRowSize;
512*2ffc8bcaSDan McDonald 			U32	maxPdCount;
513*2ffc8bcaSDan McDonald 			U32	maxArrays;
514*2ffc8bcaSDan McDonald 		} validationInfo;
515*2ffc8bcaSDan McDonald 		U32	version[5];
516*2ffc8bcaSDan McDonald 		U32	reserved1[5];
517*2ffc8bcaSDan McDonald 	} u1;
518*2ffc8bcaSDan McDonald 
519*2ffc8bcaSDan McDonald 	U32			ldCount;		/* count of lds */
520*2ffc8bcaSDan McDonald 	U32			Reserved1;
521*2ffc8bcaSDan McDonald 
522*2ffc8bcaSDan McDonald 	/*
523*2ffc8bcaSDan McDonald 	 * 0x20 This doesn't correspond to
524*2ffc8bcaSDan McDonald 	 * FW Ld Tgt Id to LD, but will purge. For example: if tgt Id is 4
525*2ffc8bcaSDan McDonald 	 * and FW LD is 2, and there is only one LD, FW will populate the
526*2ffc8bcaSDan McDonald 	 * array like this. [0xFF, 0xFF, 0xFF, 0xFF, 0x0.....]. This is to
527*2ffc8bcaSDan McDonald 	 * help reduce the entire structure size if there are few LDs or
528*2ffc8bcaSDan McDonald 	 * driver is looking info for 1 LD only.
529*2ffc8bcaSDan McDonald 	 */
530*2ffc8bcaSDan McDonald 	U8			ldTgtIdToLd[MAX_RAIDMAP_LOGICAL_DRIVES+ \
531*2ffc8bcaSDan McDonald 				MAX_RAIDMAP_VIEWS]; /* 0x20 */
532*2ffc8bcaSDan McDonald 	/* timeout value used by driver in FP IOs */
533*2ffc8bcaSDan McDonald 	U8			fpPdIoTimeoutSec;
534*2ffc8bcaSDan McDonald 	U8			reserved2[7];
535*2ffc8bcaSDan McDonald 	MR_ARRAY_INFO		arMapInfo[MAX_RAIDMAP_ARRAYS];	/* 0x00a8 */
536*2ffc8bcaSDan McDonald 	MR_DEV_HANDLE_INFO	devHndlInfo[MAX_RAIDMAP_PHYSICAL_DEVICES];
537*2ffc8bcaSDan McDonald 
538*2ffc8bcaSDan McDonald 	/* 0x28a8-[0 -MAX_RAIDMAP_LOGICAL_DRIVES+MAX_RAIDMAP_VIEWS+1]; */
539*2ffc8bcaSDan McDonald 	MR_LD_SPAN_MAP		ldSpanMap[1];
540*2ffc8bcaSDan McDonald }MR_FW_RAID_MAP;					/* 0x3288, Total Size */
541*2ffc8bcaSDan McDonald 
542*2ffc8bcaSDan McDonald typedef struct _LD_TARGET_SYNC {
543*2ffc8bcaSDan McDonald 	U8	ldTargetId;
544*2ffc8bcaSDan McDonald 	U8	reserved;
545*2ffc8bcaSDan McDonald 	U16	seqNum;
546*2ffc8bcaSDan McDonald } LD_TARGET_SYNC;
547*2ffc8bcaSDan McDonald 
548*2ffc8bcaSDan McDonald #pragma pack()
549*2ffc8bcaSDan McDonald 
550*2ffc8bcaSDan McDonald struct IO_REQUEST_INFO {
551*2ffc8bcaSDan McDonald 	U64	ldStartBlock;
552*2ffc8bcaSDan McDonald 	U32	numBlocks;
553*2ffc8bcaSDan McDonald 	U16	ldTgtId;
554*2ffc8bcaSDan McDonald 	U8	isRead;
555*2ffc8bcaSDan McDonald 	U16	devHandle;
556*2ffc8bcaSDan McDonald 	U64	pdBlock;
557*2ffc8bcaSDan McDonald 	U8	fpOkForIo;
558*2ffc8bcaSDan McDonald 	U8	ldPI;
559*2ffc8bcaSDan McDonald };
560*2ffc8bcaSDan McDonald 
561*2ffc8bcaSDan McDonald #endif /* _FUSION_H_ */
562