xref: /OK3568_Linux_fs/kernel/drivers/scsi/lpfc/lpfc_hw4.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*******************************************************************
2*4882a593Smuzhiyun  * This file is part of the Emulex Linux Device Driver for         *
3*4882a593Smuzhiyun  * Fibre Channel Host Bus Adapters.                                *
4*4882a593Smuzhiyun  * Copyright (C) 2017-2019 Broadcom. All Rights Reserved. The term *
5*4882a593Smuzhiyun  * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.  *
6*4882a593Smuzhiyun  * Copyright (C) 2009-2016 Emulex.  All rights reserved.           *
7*4882a593Smuzhiyun  * EMULEX and SLI are trademarks of Emulex.                        *
8*4882a593Smuzhiyun  * www.broadcom.com                                                *
9*4882a593Smuzhiyun  *                                                                 *
10*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or   *
11*4882a593Smuzhiyun  * modify it under the terms of version 2 of the GNU General       *
12*4882a593Smuzhiyun  * Public License as published by the Free Software Foundation.    *
13*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful. *
14*4882a593Smuzhiyun  * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND          *
15*4882a593Smuzhiyun  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  *
16*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE      *
17*4882a593Smuzhiyun  * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
18*4882a593Smuzhiyun  * TO BE LEGALLY INVALID.  See the GNU General Public License for  *
19*4882a593Smuzhiyun  * more details, a copy of which can be found in the file COPYING  *
20*4882a593Smuzhiyun  * included with this package.                                     *
21*4882a593Smuzhiyun  *******************************************************************/
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #include <uapi/scsi/fc/fc_els.h>
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /* Macros to deal with bit fields. Each bit field must have 3 #defines
26*4882a593Smuzhiyun  * associated with it (_SHIFT, _MASK, and _WORD).
27*4882a593Smuzhiyun  * EG. For a bit field that is in the 7th bit of the "field4" field of a
28*4882a593Smuzhiyun  * structure and is 2 bits in size the following #defines must exist:
29*4882a593Smuzhiyun  *	struct temp {
30*4882a593Smuzhiyun  *		uint32_t	field1;
31*4882a593Smuzhiyun  *		uint32_t	field2;
32*4882a593Smuzhiyun  *		uint32_t	field3;
33*4882a593Smuzhiyun  *		uint32_t	field4;
34*4882a593Smuzhiyun  *	#define example_bit_field_SHIFT		7
35*4882a593Smuzhiyun  *	#define example_bit_field_MASK		0x03
36*4882a593Smuzhiyun  *	#define example_bit_field_WORD		field4
37*4882a593Smuzhiyun  *		uint32_t	field5;
38*4882a593Smuzhiyun  *	};
39*4882a593Smuzhiyun  * Then the macros below may be used to get or set the value of that field.
40*4882a593Smuzhiyun  * EG. To get the value of the bit field from the above example:
41*4882a593Smuzhiyun  *	struct temp t1;
42*4882a593Smuzhiyun  *	value = bf_get(example_bit_field, &t1);
43*4882a593Smuzhiyun  * And then to set that bit field:
44*4882a593Smuzhiyun  *	bf_set(example_bit_field, &t1, 2);
45*4882a593Smuzhiyun  * Or clear that bit field:
46*4882a593Smuzhiyun  *	bf_set(example_bit_field, &t1, 0);
47*4882a593Smuzhiyun  */
48*4882a593Smuzhiyun #define bf_get_be32(name, ptr) \
49*4882a593Smuzhiyun 	((be32_to_cpu((ptr)->name##_WORD) >> name##_SHIFT) & name##_MASK)
50*4882a593Smuzhiyun #define bf_get_le32(name, ptr) \
51*4882a593Smuzhiyun 	((le32_to_cpu((ptr)->name##_WORD) >> name##_SHIFT) & name##_MASK)
52*4882a593Smuzhiyun #define bf_get(name, ptr) \
53*4882a593Smuzhiyun 	(((ptr)->name##_WORD >> name##_SHIFT) & name##_MASK)
54*4882a593Smuzhiyun #define bf_set_le32(name, ptr, value) \
55*4882a593Smuzhiyun 	((ptr)->name##_WORD = cpu_to_le32(((((value) & \
56*4882a593Smuzhiyun 	name##_MASK) << name##_SHIFT) | (le32_to_cpu((ptr)->name##_WORD) & \
57*4882a593Smuzhiyun 	~(name##_MASK << name##_SHIFT)))))
58*4882a593Smuzhiyun #define bf_set(name, ptr, value) \
59*4882a593Smuzhiyun 	((ptr)->name##_WORD = ((((value) & name##_MASK) << name##_SHIFT) | \
60*4882a593Smuzhiyun 		 ((ptr)->name##_WORD & ~(name##_MASK << name##_SHIFT))))
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun struct dma_address {
63*4882a593Smuzhiyun 	uint32_t addr_lo;
64*4882a593Smuzhiyun 	uint32_t addr_hi;
65*4882a593Smuzhiyun };
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun struct lpfc_sli_intf {
68*4882a593Smuzhiyun 	uint32_t word0;
69*4882a593Smuzhiyun #define lpfc_sli_intf_valid_SHIFT		29
70*4882a593Smuzhiyun #define lpfc_sli_intf_valid_MASK		0x00000007
71*4882a593Smuzhiyun #define lpfc_sli_intf_valid_WORD		word0
72*4882a593Smuzhiyun #define LPFC_SLI_INTF_VALID		6
73*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint2_SHIFT		24
74*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint2_MASK		0x0000001F
75*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint2_WORD		word0
76*4882a593Smuzhiyun #define LPFC_SLI_INTF_SLI_HINT2_NONE	0
77*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint1_SHIFT		16
78*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint1_MASK		0x000000FF
79*4882a593Smuzhiyun #define lpfc_sli_intf_sli_hint1_WORD		word0
80*4882a593Smuzhiyun #define LPFC_SLI_INTF_SLI_HINT1_NONE	0
81*4882a593Smuzhiyun #define LPFC_SLI_INTF_SLI_HINT1_1	1
82*4882a593Smuzhiyun #define LPFC_SLI_INTF_SLI_HINT1_2	2
83*4882a593Smuzhiyun #define lpfc_sli_intf_if_type_SHIFT		12
84*4882a593Smuzhiyun #define lpfc_sli_intf_if_type_MASK		0x0000000F
85*4882a593Smuzhiyun #define lpfc_sli_intf_if_type_WORD		word0
86*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_0		0
87*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_1		1
88*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_2		2
89*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_6		6
90*4882a593Smuzhiyun #define lpfc_sli_intf_sli_family_SHIFT		8
91*4882a593Smuzhiyun #define lpfc_sli_intf_sli_family_MASK		0x0000000F
92*4882a593Smuzhiyun #define lpfc_sli_intf_sli_family_WORD		word0
93*4882a593Smuzhiyun #define LPFC_SLI_INTF_FAMILY_BE2	0x0
94*4882a593Smuzhiyun #define LPFC_SLI_INTF_FAMILY_BE3	0x1
95*4882a593Smuzhiyun #define LPFC_SLI_INTF_FAMILY_LNCR_A0	0xa
96*4882a593Smuzhiyun #define LPFC_SLI_INTF_FAMILY_LNCR_B0	0xb
97*4882a593Smuzhiyun #define lpfc_sli_intf_slirev_SHIFT		4
98*4882a593Smuzhiyun #define lpfc_sli_intf_slirev_MASK		0x0000000F
99*4882a593Smuzhiyun #define lpfc_sli_intf_slirev_WORD		word0
100*4882a593Smuzhiyun #define LPFC_SLI_INTF_REV_SLI3		3
101*4882a593Smuzhiyun #define LPFC_SLI_INTF_REV_SLI4		4
102*4882a593Smuzhiyun #define lpfc_sli_intf_func_type_SHIFT		0
103*4882a593Smuzhiyun #define lpfc_sli_intf_func_type_MASK		0x00000001
104*4882a593Smuzhiyun #define lpfc_sli_intf_func_type_WORD		word0
105*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_PHYS	0
106*4882a593Smuzhiyun #define LPFC_SLI_INTF_IF_TYPE_VIRT	1
107*4882a593Smuzhiyun };
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun #define LPFC_SLI4_MBX_EMBED	true
110*4882a593Smuzhiyun #define LPFC_SLI4_MBX_NEMBED	false
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #define LPFC_SLI4_MB_WORD_COUNT		64
113*4882a593Smuzhiyun #define LPFC_MAX_MQ_PAGE		8
114*4882a593Smuzhiyun #define LPFC_MAX_WQ_PAGE_V0		4
115*4882a593Smuzhiyun #define LPFC_MAX_WQ_PAGE		8
116*4882a593Smuzhiyun #define LPFC_MAX_RQ_PAGE		8
117*4882a593Smuzhiyun #define LPFC_MAX_CQ_PAGE		4
118*4882a593Smuzhiyun #define LPFC_MAX_EQ_PAGE		8
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun #define LPFC_VIR_FUNC_MAX       32 /* Maximum number of virtual functions */
121*4882a593Smuzhiyun #define LPFC_PCI_FUNC_MAX        5 /* Maximum number of PCI functions */
122*4882a593Smuzhiyun #define LPFC_VFR_PAGE_SIZE	0x1000 /* 4KB BAR2 per-VF register page size */
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun /* Define SLI4 Alignment requirements. */
125*4882a593Smuzhiyun #define LPFC_ALIGN_16_BYTE	16
126*4882a593Smuzhiyun #define LPFC_ALIGN_64_BYTE	64
127*4882a593Smuzhiyun #define SLI4_PAGE_SIZE		4096
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun /* Define SLI4 specific definitions. */
130*4882a593Smuzhiyun #define LPFC_MQ_CQE_BYTE_OFFSET	256
131*4882a593Smuzhiyun #define LPFC_MBX_CMD_HDR_LENGTH 16
132*4882a593Smuzhiyun #define LPFC_MBX_ERROR_RANGE	0x4000
133*4882a593Smuzhiyun #define LPFC_BMBX_BIT1_ADDR_HI	0x2
134*4882a593Smuzhiyun #define LPFC_BMBX_BIT1_ADDR_LO	0
135*4882a593Smuzhiyun #define LPFC_RPI_HDR_COUNT	64
136*4882a593Smuzhiyun #define LPFC_HDR_TEMPLATE_SIZE	4096
137*4882a593Smuzhiyun #define LPFC_RPI_ALLOC_ERROR 	0xFFFF
138*4882a593Smuzhiyun #define LPFC_FCF_RECORD_WD_CNT	132
139*4882a593Smuzhiyun #define LPFC_ENTIRE_FCF_DATABASE 0
140*4882a593Smuzhiyun #define LPFC_DFLT_FCF_INDEX	 0
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun /* Virtual function numbers */
143*4882a593Smuzhiyun #define LPFC_VF0		0
144*4882a593Smuzhiyun #define LPFC_VF1		1
145*4882a593Smuzhiyun #define LPFC_VF2		2
146*4882a593Smuzhiyun #define LPFC_VF3		3
147*4882a593Smuzhiyun #define LPFC_VF4		4
148*4882a593Smuzhiyun #define LPFC_VF5		5
149*4882a593Smuzhiyun #define LPFC_VF6		6
150*4882a593Smuzhiyun #define LPFC_VF7		7
151*4882a593Smuzhiyun #define LPFC_VF8		8
152*4882a593Smuzhiyun #define LPFC_VF9		9
153*4882a593Smuzhiyun #define LPFC_VF10		10
154*4882a593Smuzhiyun #define LPFC_VF11		11
155*4882a593Smuzhiyun #define LPFC_VF12		12
156*4882a593Smuzhiyun #define LPFC_VF13		13
157*4882a593Smuzhiyun #define LPFC_VF14		14
158*4882a593Smuzhiyun #define LPFC_VF15		15
159*4882a593Smuzhiyun #define LPFC_VF16		16
160*4882a593Smuzhiyun #define LPFC_VF17		17
161*4882a593Smuzhiyun #define LPFC_VF18		18
162*4882a593Smuzhiyun #define LPFC_VF19		19
163*4882a593Smuzhiyun #define LPFC_VF20		20
164*4882a593Smuzhiyun #define LPFC_VF21		21
165*4882a593Smuzhiyun #define LPFC_VF22		22
166*4882a593Smuzhiyun #define LPFC_VF23		23
167*4882a593Smuzhiyun #define LPFC_VF24		24
168*4882a593Smuzhiyun #define LPFC_VF25		25
169*4882a593Smuzhiyun #define LPFC_VF26		26
170*4882a593Smuzhiyun #define LPFC_VF27		27
171*4882a593Smuzhiyun #define LPFC_VF28		28
172*4882a593Smuzhiyun #define LPFC_VF29		29
173*4882a593Smuzhiyun #define LPFC_VF30		30
174*4882a593Smuzhiyun #define LPFC_VF31		31
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun /* PCI function numbers */
177*4882a593Smuzhiyun #define LPFC_PCI_FUNC0		0
178*4882a593Smuzhiyun #define LPFC_PCI_FUNC1		1
179*4882a593Smuzhiyun #define LPFC_PCI_FUNC2		2
180*4882a593Smuzhiyun #define LPFC_PCI_FUNC3		3
181*4882a593Smuzhiyun #define LPFC_PCI_FUNC4		4
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun /* SLI4 interface type-2 PDEV_CTL register */
184*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_OFFSET	0x414
185*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_DRST		0x00000001
186*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_FRST		0x00000002
187*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_DD		0x00000004
188*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_LC		0x00000008
189*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_FRL_ALL	0x00
190*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_FRL_FC_FCOE	0x10
191*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_FRL_NIC	0x20
192*4882a593Smuzhiyun #define LPFC_CTL_PDEV_CTL_DDL_RAS	0x1000000
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun #define LPFC_FW_DUMP_REQUEST    (LPFC_CTL_PDEV_CTL_DD | LPFC_CTL_PDEV_CTL_FRST)
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun /* Active interrupt test count */
197*4882a593Smuzhiyun #define LPFC_ACT_INTR_CNT	4
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun /* Algrithmns for scheduling FCP commands to WQs */
200*4882a593Smuzhiyun #define	LPFC_FCP_SCHED_BY_HDWQ		0
201*4882a593Smuzhiyun #define	LPFC_FCP_SCHED_BY_CPU		1
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun /* Algrithmns for NameServer Query after RSCN */
204*4882a593Smuzhiyun #define LPFC_NS_QUERY_GID_FT	0
205*4882a593Smuzhiyun #define LPFC_NS_QUERY_GID_PT	1
206*4882a593Smuzhiyun 
207*4882a593Smuzhiyun /* Delay Multiplier constant */
208*4882a593Smuzhiyun #define LPFC_DMULT_CONST       651042
209*4882a593Smuzhiyun #define LPFC_DMULT_MAX         1023
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun /* Configuration of Interrupts / sec for entire HBA port */
212*4882a593Smuzhiyun #define LPFC_MIN_IMAX          5000
213*4882a593Smuzhiyun #define LPFC_MAX_IMAX          5000000
214*4882a593Smuzhiyun #define LPFC_DEF_IMAX          0
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun #define LPFC_MAX_AUTO_EQ_DELAY 120
217*4882a593Smuzhiyun #define LPFC_EQ_DELAY_STEP     15
218*4882a593Smuzhiyun #define LPFC_EQD_ISR_TRIGGER   20000
219*4882a593Smuzhiyun /* 1s intervals */
220*4882a593Smuzhiyun #define LPFC_EQ_DELAY_MSECS    1000
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun #define LPFC_MIN_CPU_MAP       0
223*4882a593Smuzhiyun #define LPFC_MAX_CPU_MAP       1
224*4882a593Smuzhiyun #define LPFC_HBA_CPU_MAP       1
225*4882a593Smuzhiyun 
226*4882a593Smuzhiyun /* PORT_CAPABILITIES constants. */
227*4882a593Smuzhiyun #define LPFC_MAX_SUPPORTED_PAGES	8
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun struct ulp_bde64 {
230*4882a593Smuzhiyun 	union ULP_BDE_TUS {
231*4882a593Smuzhiyun 		uint32_t w;
232*4882a593Smuzhiyun 		struct {
233*4882a593Smuzhiyun #ifdef __BIG_ENDIAN_BITFIELD
234*4882a593Smuzhiyun 			uint32_t bdeFlags:8;	/* BDE Flags 0 IS A SUPPORTED
235*4882a593Smuzhiyun 						   VALUE !! */
236*4882a593Smuzhiyun 			uint32_t bdeSize:24;	/* Size of buffer (in bytes) */
237*4882a593Smuzhiyun #else	/*  __LITTLE_ENDIAN_BITFIELD */
238*4882a593Smuzhiyun 			uint32_t bdeSize:24;	/* Size of buffer (in bytes) */
239*4882a593Smuzhiyun 			uint32_t bdeFlags:8;	/* BDE Flags 0 IS A SUPPORTED
240*4882a593Smuzhiyun 						   VALUE !! */
241*4882a593Smuzhiyun #endif
242*4882a593Smuzhiyun #define BUFF_TYPE_BDE_64    0x00	/* BDE (Host_resident) */
243*4882a593Smuzhiyun #define BUFF_TYPE_BDE_IMMED 0x01	/* Immediate Data BDE */
244*4882a593Smuzhiyun #define BUFF_TYPE_BDE_64P   0x02	/* BDE (Port-resident) */
245*4882a593Smuzhiyun #define BUFF_TYPE_BDE_64I   0x08	/* Input BDE (Host-resident) */
246*4882a593Smuzhiyun #define BUFF_TYPE_BDE_64IP  0x0A	/* Input BDE (Port-resident) */
247*4882a593Smuzhiyun #define BUFF_TYPE_BLP_64    0x40	/* BLP (Host-resident) */
248*4882a593Smuzhiyun #define BUFF_TYPE_BLP_64P   0x42	/* BLP (Port-resident) */
249*4882a593Smuzhiyun 		} f;
250*4882a593Smuzhiyun 	} tus;
251*4882a593Smuzhiyun 	uint32_t addrLow;
252*4882a593Smuzhiyun 	uint32_t addrHigh;
253*4882a593Smuzhiyun };
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun /* Maximun size of immediate data that can fit into a 128 byte WQE */
256*4882a593Smuzhiyun #define LPFC_MAX_BDE_IMM_SIZE	64
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun struct lpfc_sli4_flags {
259*4882a593Smuzhiyun 	uint32_t word0;
260*4882a593Smuzhiyun #define lpfc_idx_rsrc_rdy_SHIFT		0
261*4882a593Smuzhiyun #define lpfc_idx_rsrc_rdy_MASK		0x00000001
262*4882a593Smuzhiyun #define lpfc_idx_rsrc_rdy_WORD		word0
263*4882a593Smuzhiyun #define LPFC_IDX_RSRC_RDY		1
264*4882a593Smuzhiyun #define lpfc_rpi_rsrc_rdy_SHIFT		1
265*4882a593Smuzhiyun #define lpfc_rpi_rsrc_rdy_MASK		0x00000001
266*4882a593Smuzhiyun #define lpfc_rpi_rsrc_rdy_WORD		word0
267*4882a593Smuzhiyun #define LPFC_RPI_RSRC_RDY		1
268*4882a593Smuzhiyun #define lpfc_vpi_rsrc_rdy_SHIFT		2
269*4882a593Smuzhiyun #define lpfc_vpi_rsrc_rdy_MASK		0x00000001
270*4882a593Smuzhiyun #define lpfc_vpi_rsrc_rdy_WORD		word0
271*4882a593Smuzhiyun #define LPFC_VPI_RSRC_RDY		1
272*4882a593Smuzhiyun #define lpfc_vfi_rsrc_rdy_SHIFT		3
273*4882a593Smuzhiyun #define lpfc_vfi_rsrc_rdy_MASK		0x00000001
274*4882a593Smuzhiyun #define lpfc_vfi_rsrc_rdy_WORD		word0
275*4882a593Smuzhiyun #define LPFC_VFI_RSRC_RDY		1
276*4882a593Smuzhiyun };
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun struct sli4_bls_rsp {
279*4882a593Smuzhiyun 	uint32_t word0_rsvd;      /* Word0 must be reserved */
280*4882a593Smuzhiyun 	uint32_t word1;
281*4882a593Smuzhiyun #define lpfc_abts_orig_SHIFT      0
282*4882a593Smuzhiyun #define lpfc_abts_orig_MASK       0x00000001
283*4882a593Smuzhiyun #define lpfc_abts_orig_WORD       word1
284*4882a593Smuzhiyun #define LPFC_ABTS_UNSOL_RSP       1
285*4882a593Smuzhiyun #define LPFC_ABTS_UNSOL_INT       0
286*4882a593Smuzhiyun 	uint32_t word2;
287*4882a593Smuzhiyun #define lpfc_abts_rxid_SHIFT      0
288*4882a593Smuzhiyun #define lpfc_abts_rxid_MASK       0x0000FFFF
289*4882a593Smuzhiyun #define lpfc_abts_rxid_WORD       word2
290*4882a593Smuzhiyun #define lpfc_abts_oxid_SHIFT      16
291*4882a593Smuzhiyun #define lpfc_abts_oxid_MASK       0x0000FFFF
292*4882a593Smuzhiyun #define lpfc_abts_oxid_WORD       word2
293*4882a593Smuzhiyun 	uint32_t word3;
294*4882a593Smuzhiyun #define lpfc_vndr_code_SHIFT	0
295*4882a593Smuzhiyun #define lpfc_vndr_code_MASK	0x000000FF
296*4882a593Smuzhiyun #define lpfc_vndr_code_WORD	word3
297*4882a593Smuzhiyun #define lpfc_rsn_expln_SHIFT	8
298*4882a593Smuzhiyun #define lpfc_rsn_expln_MASK	0x000000FF
299*4882a593Smuzhiyun #define lpfc_rsn_expln_WORD	word3
300*4882a593Smuzhiyun #define lpfc_rsn_code_SHIFT	16
301*4882a593Smuzhiyun #define lpfc_rsn_code_MASK	0x000000FF
302*4882a593Smuzhiyun #define lpfc_rsn_code_WORD	word3
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun 	uint32_t word4;
305*4882a593Smuzhiyun 	uint32_t word5_rsvd;	/* Word5 must be reserved */
306*4882a593Smuzhiyun };
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun /* event queue entry structure */
309*4882a593Smuzhiyun struct lpfc_eqe {
310*4882a593Smuzhiyun 	uint32_t word0;
311*4882a593Smuzhiyun #define lpfc_eqe_resource_id_SHIFT	16
312*4882a593Smuzhiyun #define lpfc_eqe_resource_id_MASK	0x0000FFFF
313*4882a593Smuzhiyun #define lpfc_eqe_resource_id_WORD	word0
314*4882a593Smuzhiyun #define lpfc_eqe_minor_code_SHIFT	4
315*4882a593Smuzhiyun #define lpfc_eqe_minor_code_MASK	0x00000FFF
316*4882a593Smuzhiyun #define lpfc_eqe_minor_code_WORD	word0
317*4882a593Smuzhiyun #define lpfc_eqe_major_code_SHIFT	1
318*4882a593Smuzhiyun #define lpfc_eqe_major_code_MASK	0x00000007
319*4882a593Smuzhiyun #define lpfc_eqe_major_code_WORD	word0
320*4882a593Smuzhiyun #define lpfc_eqe_valid_SHIFT		0
321*4882a593Smuzhiyun #define lpfc_eqe_valid_MASK		0x00000001
322*4882a593Smuzhiyun #define lpfc_eqe_valid_WORD		word0
323*4882a593Smuzhiyun };
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun /* completion queue entry structure (common fields for all cqe types) */
326*4882a593Smuzhiyun struct lpfc_cqe {
327*4882a593Smuzhiyun 	uint32_t reserved0;
328*4882a593Smuzhiyun 	uint32_t reserved1;
329*4882a593Smuzhiyun 	uint32_t reserved2;
330*4882a593Smuzhiyun 	uint32_t word3;
331*4882a593Smuzhiyun #define lpfc_cqe_valid_SHIFT		31
332*4882a593Smuzhiyun #define lpfc_cqe_valid_MASK		0x00000001
333*4882a593Smuzhiyun #define lpfc_cqe_valid_WORD		word3
334*4882a593Smuzhiyun #define lpfc_cqe_code_SHIFT		16
335*4882a593Smuzhiyun #define lpfc_cqe_code_MASK		0x000000FF
336*4882a593Smuzhiyun #define lpfc_cqe_code_WORD		word3
337*4882a593Smuzhiyun };
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun /* Completion Queue Entry Status Codes */
340*4882a593Smuzhiyun #define CQE_STATUS_SUCCESS		0x0
341*4882a593Smuzhiyun #define CQE_STATUS_FCP_RSP_FAILURE	0x1
342*4882a593Smuzhiyun #define CQE_STATUS_REMOTE_STOP		0x2
343*4882a593Smuzhiyun #define CQE_STATUS_LOCAL_REJECT		0x3
344*4882a593Smuzhiyun #define CQE_STATUS_NPORT_RJT		0x4
345*4882a593Smuzhiyun #define CQE_STATUS_FABRIC_RJT		0x5
346*4882a593Smuzhiyun #define CQE_STATUS_NPORT_BSY		0x6
347*4882a593Smuzhiyun #define CQE_STATUS_FABRIC_BSY		0x7
348*4882a593Smuzhiyun #define CQE_STATUS_INTERMED_RSP		0x8
349*4882a593Smuzhiyun #define CQE_STATUS_LS_RJT		0x9
350*4882a593Smuzhiyun #define CQE_STATUS_CMD_REJECT		0xb
351*4882a593Smuzhiyun #define CQE_STATUS_FCP_TGT_LENCHECK	0xc
352*4882a593Smuzhiyun #define CQE_STATUS_NEED_BUFF_ENTRY	0xf
353*4882a593Smuzhiyun #define CQE_STATUS_DI_ERROR		0x16
354*4882a593Smuzhiyun 
355*4882a593Smuzhiyun /* Used when mapping CQE status to IOCB */
356*4882a593Smuzhiyun #define LPFC_IOCB_STATUS_MASK		0xf
357*4882a593Smuzhiyun 
358*4882a593Smuzhiyun /* Status returned by hardware (valid only if status = CQE_STATUS_SUCCESS). */
359*4882a593Smuzhiyun #define CQE_HW_STATUS_NO_ERR		0x0
360*4882a593Smuzhiyun #define CQE_HW_STATUS_UNDERRUN		0x1
361*4882a593Smuzhiyun #define CQE_HW_STATUS_OVERRUN		0x2
362*4882a593Smuzhiyun 
363*4882a593Smuzhiyun /* Completion Queue Entry Codes */
364*4882a593Smuzhiyun #define CQE_CODE_COMPL_WQE		0x1
365*4882a593Smuzhiyun #define CQE_CODE_RELEASE_WQE		0x2
366*4882a593Smuzhiyun #define CQE_CODE_RECEIVE		0x4
367*4882a593Smuzhiyun #define CQE_CODE_XRI_ABORTED		0x5
368*4882a593Smuzhiyun #define CQE_CODE_RECEIVE_V1		0x9
369*4882a593Smuzhiyun #define CQE_CODE_NVME_ERSP		0xd
370*4882a593Smuzhiyun 
371*4882a593Smuzhiyun /*
372*4882a593Smuzhiyun  * Define mask value for xri_aborted and wcqe completed CQE extended status.
373*4882a593Smuzhiyun  * Currently, extended status is limited to 9 bits (0x0 -> 0x103) .
374*4882a593Smuzhiyun  */
375*4882a593Smuzhiyun #define WCQE_PARAM_MASK		0x1FF
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun /* completion queue entry for wqe completions */
378*4882a593Smuzhiyun struct lpfc_wcqe_complete {
379*4882a593Smuzhiyun 	uint32_t word0;
380*4882a593Smuzhiyun #define lpfc_wcqe_c_request_tag_SHIFT	16
381*4882a593Smuzhiyun #define lpfc_wcqe_c_request_tag_MASK	0x0000FFFF
382*4882a593Smuzhiyun #define lpfc_wcqe_c_request_tag_WORD	word0
383*4882a593Smuzhiyun #define lpfc_wcqe_c_status_SHIFT	8
384*4882a593Smuzhiyun #define lpfc_wcqe_c_status_MASK		0x000000FF
385*4882a593Smuzhiyun #define lpfc_wcqe_c_status_WORD		word0
386*4882a593Smuzhiyun #define lpfc_wcqe_c_hw_status_SHIFT	0
387*4882a593Smuzhiyun #define lpfc_wcqe_c_hw_status_MASK	0x000000FF
388*4882a593Smuzhiyun #define lpfc_wcqe_c_hw_status_WORD	word0
389*4882a593Smuzhiyun #define lpfc_wcqe_c_ersp0_SHIFT		0
390*4882a593Smuzhiyun #define lpfc_wcqe_c_ersp0_MASK		0x0000FFFF
391*4882a593Smuzhiyun #define lpfc_wcqe_c_ersp0_WORD		word0
392*4882a593Smuzhiyun 	uint32_t total_data_placed;
393*4882a593Smuzhiyun 	uint32_t parameter;
394*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_edir_SHIFT	5
395*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_edir_MASK	0x00000001
396*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_edir_WORD	parameter
397*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_tdpv_SHIFT	3
398*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_tdpv_MASK	0x00000001
399*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_tdpv_WORD	parameter
400*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_re_SHIFT		2
401*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_re_MASK		0x00000001
402*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_re_WORD		parameter
403*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ae_SHIFT		1
404*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ae_MASK		0x00000001
405*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ae_WORD		parameter
406*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ge_SHIFT		0
407*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ge_MASK		0x00000001
408*4882a593Smuzhiyun #define lpfc_wcqe_c_bg_ge_WORD		parameter
409*4882a593Smuzhiyun 	uint32_t word3;
410*4882a593Smuzhiyun #define lpfc_wcqe_c_valid_SHIFT		lpfc_cqe_valid_SHIFT
411*4882a593Smuzhiyun #define lpfc_wcqe_c_valid_MASK		lpfc_cqe_valid_MASK
412*4882a593Smuzhiyun #define lpfc_wcqe_c_valid_WORD		lpfc_cqe_valid_WORD
413*4882a593Smuzhiyun #define lpfc_wcqe_c_xb_SHIFT		28
414*4882a593Smuzhiyun #define lpfc_wcqe_c_xb_MASK		0x00000001
415*4882a593Smuzhiyun #define lpfc_wcqe_c_xb_WORD		word3
416*4882a593Smuzhiyun #define lpfc_wcqe_c_pv_SHIFT		27
417*4882a593Smuzhiyun #define lpfc_wcqe_c_pv_MASK		0x00000001
418*4882a593Smuzhiyun #define lpfc_wcqe_c_pv_WORD		word3
419*4882a593Smuzhiyun #define lpfc_wcqe_c_priority_SHIFT	24
420*4882a593Smuzhiyun #define lpfc_wcqe_c_priority_MASK	0x00000007
421*4882a593Smuzhiyun #define lpfc_wcqe_c_priority_WORD	word3
422*4882a593Smuzhiyun #define lpfc_wcqe_c_code_SHIFT		lpfc_cqe_code_SHIFT
423*4882a593Smuzhiyun #define lpfc_wcqe_c_code_MASK		lpfc_cqe_code_MASK
424*4882a593Smuzhiyun #define lpfc_wcqe_c_code_WORD		lpfc_cqe_code_WORD
425*4882a593Smuzhiyun #define lpfc_wcqe_c_sqhead_SHIFT	0
426*4882a593Smuzhiyun #define lpfc_wcqe_c_sqhead_MASK		0x0000FFFF
427*4882a593Smuzhiyun #define lpfc_wcqe_c_sqhead_WORD		word3
428*4882a593Smuzhiyun };
429*4882a593Smuzhiyun 
430*4882a593Smuzhiyun /* completion queue entry for wqe release */
431*4882a593Smuzhiyun struct lpfc_wcqe_release {
432*4882a593Smuzhiyun 	uint32_t reserved0;
433*4882a593Smuzhiyun 	uint32_t reserved1;
434*4882a593Smuzhiyun 	uint32_t word2;
435*4882a593Smuzhiyun #define lpfc_wcqe_r_wq_id_SHIFT		16
436*4882a593Smuzhiyun #define lpfc_wcqe_r_wq_id_MASK		0x0000FFFF
437*4882a593Smuzhiyun #define lpfc_wcqe_r_wq_id_WORD		word2
438*4882a593Smuzhiyun #define lpfc_wcqe_r_wqe_index_SHIFT	0
439*4882a593Smuzhiyun #define lpfc_wcqe_r_wqe_index_MASK	0x0000FFFF
440*4882a593Smuzhiyun #define lpfc_wcqe_r_wqe_index_WORD	word2
441*4882a593Smuzhiyun 	uint32_t word3;
442*4882a593Smuzhiyun #define lpfc_wcqe_r_valid_SHIFT		lpfc_cqe_valid_SHIFT
443*4882a593Smuzhiyun #define lpfc_wcqe_r_valid_MASK		lpfc_cqe_valid_MASK
444*4882a593Smuzhiyun #define lpfc_wcqe_r_valid_WORD		lpfc_cqe_valid_WORD
445*4882a593Smuzhiyun #define lpfc_wcqe_r_code_SHIFT		lpfc_cqe_code_SHIFT
446*4882a593Smuzhiyun #define lpfc_wcqe_r_code_MASK		lpfc_cqe_code_MASK
447*4882a593Smuzhiyun #define lpfc_wcqe_r_code_WORD		lpfc_cqe_code_WORD
448*4882a593Smuzhiyun };
449*4882a593Smuzhiyun 
450*4882a593Smuzhiyun struct sli4_wcqe_xri_aborted {
451*4882a593Smuzhiyun 	uint32_t word0;
452*4882a593Smuzhiyun #define lpfc_wcqe_xa_status_SHIFT		8
453*4882a593Smuzhiyun #define lpfc_wcqe_xa_status_MASK		0x000000FF
454*4882a593Smuzhiyun #define lpfc_wcqe_xa_status_WORD		word0
455*4882a593Smuzhiyun 	uint32_t parameter;
456*4882a593Smuzhiyun 	uint32_t word2;
457*4882a593Smuzhiyun #define lpfc_wcqe_xa_remote_xid_SHIFT	16
458*4882a593Smuzhiyun #define lpfc_wcqe_xa_remote_xid_MASK	0x0000FFFF
459*4882a593Smuzhiyun #define lpfc_wcqe_xa_remote_xid_WORD	word2
460*4882a593Smuzhiyun #define lpfc_wcqe_xa_xri_SHIFT		0
461*4882a593Smuzhiyun #define lpfc_wcqe_xa_xri_MASK		0x0000FFFF
462*4882a593Smuzhiyun #define lpfc_wcqe_xa_xri_WORD		word2
463*4882a593Smuzhiyun 	uint32_t word3;
464*4882a593Smuzhiyun #define lpfc_wcqe_xa_valid_SHIFT	lpfc_cqe_valid_SHIFT
465*4882a593Smuzhiyun #define lpfc_wcqe_xa_valid_MASK		lpfc_cqe_valid_MASK
466*4882a593Smuzhiyun #define lpfc_wcqe_xa_valid_WORD		lpfc_cqe_valid_WORD
467*4882a593Smuzhiyun #define lpfc_wcqe_xa_ia_SHIFT		30
468*4882a593Smuzhiyun #define lpfc_wcqe_xa_ia_MASK		0x00000001
469*4882a593Smuzhiyun #define lpfc_wcqe_xa_ia_WORD		word3
470*4882a593Smuzhiyun #define CQE_XRI_ABORTED_IA_REMOTE	0
471*4882a593Smuzhiyun #define CQE_XRI_ABORTED_IA_LOCAL	1
472*4882a593Smuzhiyun #define lpfc_wcqe_xa_br_SHIFT		29
473*4882a593Smuzhiyun #define lpfc_wcqe_xa_br_MASK		0x00000001
474*4882a593Smuzhiyun #define lpfc_wcqe_xa_br_WORD		word3
475*4882a593Smuzhiyun #define CQE_XRI_ABORTED_BR_BA_ACC	0
476*4882a593Smuzhiyun #define CQE_XRI_ABORTED_BR_BA_RJT	1
477*4882a593Smuzhiyun #define lpfc_wcqe_xa_eo_SHIFT		28
478*4882a593Smuzhiyun #define lpfc_wcqe_xa_eo_MASK		0x00000001
479*4882a593Smuzhiyun #define lpfc_wcqe_xa_eo_WORD		word3
480*4882a593Smuzhiyun #define CQE_XRI_ABORTED_EO_REMOTE	0
481*4882a593Smuzhiyun #define CQE_XRI_ABORTED_EO_LOCAL	1
482*4882a593Smuzhiyun #define lpfc_wcqe_xa_code_SHIFT		lpfc_cqe_code_SHIFT
483*4882a593Smuzhiyun #define lpfc_wcqe_xa_code_MASK		lpfc_cqe_code_MASK
484*4882a593Smuzhiyun #define lpfc_wcqe_xa_code_WORD		lpfc_cqe_code_WORD
485*4882a593Smuzhiyun };
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun /* completion queue entry structure for rqe completion */
488*4882a593Smuzhiyun struct lpfc_rcqe {
489*4882a593Smuzhiyun 	uint32_t word0;
490*4882a593Smuzhiyun #define lpfc_rcqe_bindex_SHIFT		16
491*4882a593Smuzhiyun #define lpfc_rcqe_bindex_MASK		0x0000FFF
492*4882a593Smuzhiyun #define lpfc_rcqe_bindex_WORD		word0
493*4882a593Smuzhiyun #define lpfc_rcqe_status_SHIFT		8
494*4882a593Smuzhiyun #define lpfc_rcqe_status_MASK		0x000000FF
495*4882a593Smuzhiyun #define lpfc_rcqe_status_WORD		word0
496*4882a593Smuzhiyun #define FC_STATUS_RQ_SUCCESS		0x10 /* Async receive successful */
497*4882a593Smuzhiyun #define FC_STATUS_RQ_BUF_LEN_EXCEEDED 	0x11 /* payload truncated */
498*4882a593Smuzhiyun #define FC_STATUS_INSUFF_BUF_NEED_BUF 	0x12 /* Insufficient buffers */
499*4882a593Smuzhiyun #define FC_STATUS_INSUFF_BUF_FRM_DISC 	0x13 /* Frame Discard */
500*4882a593Smuzhiyun 	uint32_t word1;
501*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_v1_SHIFT	0
502*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_v1_MASK	0x0000003F
503*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_v1_WORD	word1
504*4882a593Smuzhiyun 	uint32_t word2;
505*4882a593Smuzhiyun #define lpfc_rcqe_length_SHIFT		16
506*4882a593Smuzhiyun #define lpfc_rcqe_length_MASK		0x0000FFFF
507*4882a593Smuzhiyun #define lpfc_rcqe_length_WORD		word2
508*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_SHIFT		6
509*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_MASK		0x000003FF
510*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_WORD		word2
511*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_SHIFT		0
512*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_MASK		0x0000003F
513*4882a593Smuzhiyun #define lpfc_rcqe_fcf_id_WORD		word2
514*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_v1_SHIFT	0
515*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_v1_MASK		0x0000FFFF
516*4882a593Smuzhiyun #define lpfc_rcqe_rq_id_v1_WORD		word2
517*4882a593Smuzhiyun 	uint32_t word3;
518*4882a593Smuzhiyun #define lpfc_rcqe_valid_SHIFT		lpfc_cqe_valid_SHIFT
519*4882a593Smuzhiyun #define lpfc_rcqe_valid_MASK		lpfc_cqe_valid_MASK
520*4882a593Smuzhiyun #define lpfc_rcqe_valid_WORD		lpfc_cqe_valid_WORD
521*4882a593Smuzhiyun #define lpfc_rcqe_port_SHIFT		30
522*4882a593Smuzhiyun #define lpfc_rcqe_port_MASK		0x00000001
523*4882a593Smuzhiyun #define lpfc_rcqe_port_WORD		word3
524*4882a593Smuzhiyun #define lpfc_rcqe_hdr_length_SHIFT	24
525*4882a593Smuzhiyun #define lpfc_rcqe_hdr_length_MASK	0x0000001F
526*4882a593Smuzhiyun #define lpfc_rcqe_hdr_length_WORD	word3
527*4882a593Smuzhiyun #define lpfc_rcqe_code_SHIFT		lpfc_cqe_code_SHIFT
528*4882a593Smuzhiyun #define lpfc_rcqe_code_MASK		lpfc_cqe_code_MASK
529*4882a593Smuzhiyun #define lpfc_rcqe_code_WORD		lpfc_cqe_code_WORD
530*4882a593Smuzhiyun #define lpfc_rcqe_eof_SHIFT		8
531*4882a593Smuzhiyun #define lpfc_rcqe_eof_MASK		0x000000FF
532*4882a593Smuzhiyun #define lpfc_rcqe_eof_WORD		word3
533*4882a593Smuzhiyun #define FCOE_EOFn	0x41
534*4882a593Smuzhiyun #define FCOE_EOFt	0x42
535*4882a593Smuzhiyun #define FCOE_EOFni	0x49
536*4882a593Smuzhiyun #define FCOE_EOFa	0x50
537*4882a593Smuzhiyun #define lpfc_rcqe_sof_SHIFT		0
538*4882a593Smuzhiyun #define lpfc_rcqe_sof_MASK		0x000000FF
539*4882a593Smuzhiyun #define lpfc_rcqe_sof_WORD		word3
540*4882a593Smuzhiyun #define FCOE_SOFi2	0x2d
541*4882a593Smuzhiyun #define FCOE_SOFi3	0x2e
542*4882a593Smuzhiyun #define FCOE_SOFn2	0x35
543*4882a593Smuzhiyun #define FCOE_SOFn3	0x36
544*4882a593Smuzhiyun };
545*4882a593Smuzhiyun 
546*4882a593Smuzhiyun struct lpfc_rqe {
547*4882a593Smuzhiyun 	uint32_t address_hi;
548*4882a593Smuzhiyun 	uint32_t address_lo;
549*4882a593Smuzhiyun };
550*4882a593Smuzhiyun 
551*4882a593Smuzhiyun /* buffer descriptors */
552*4882a593Smuzhiyun struct lpfc_bde4 {
553*4882a593Smuzhiyun 	uint32_t addr_hi;
554*4882a593Smuzhiyun 	uint32_t addr_lo;
555*4882a593Smuzhiyun 	uint32_t word2;
556*4882a593Smuzhiyun #define lpfc_bde4_last_SHIFT		31
557*4882a593Smuzhiyun #define lpfc_bde4_last_MASK		0x00000001
558*4882a593Smuzhiyun #define lpfc_bde4_last_WORD		word2
559*4882a593Smuzhiyun #define lpfc_bde4_sge_offset_SHIFT	0
560*4882a593Smuzhiyun #define lpfc_bde4_sge_offset_MASK	0x000003FF
561*4882a593Smuzhiyun #define lpfc_bde4_sge_offset_WORD	word2
562*4882a593Smuzhiyun 	uint32_t word3;
563*4882a593Smuzhiyun #define lpfc_bde4_length_SHIFT		0
564*4882a593Smuzhiyun #define lpfc_bde4_length_MASK		0x000000FF
565*4882a593Smuzhiyun #define lpfc_bde4_length_WORD		word3
566*4882a593Smuzhiyun };
567*4882a593Smuzhiyun 
568*4882a593Smuzhiyun struct lpfc_register {
569*4882a593Smuzhiyun 	uint32_t word0;
570*4882a593Smuzhiyun };
571*4882a593Smuzhiyun 
572*4882a593Smuzhiyun #define LPFC_PORT_SEM_UE_RECOVERABLE    0xE000
573*4882a593Smuzhiyun #define LPFC_PORT_SEM_MASK		0xF000
574*4882a593Smuzhiyun /* The following BAR0 Registers apply to SLI4 if_type 0 UCNAs. */
575*4882a593Smuzhiyun #define LPFC_UERR_STATUS_HI		0x00A4
576*4882a593Smuzhiyun #define LPFC_UERR_STATUS_LO		0x00A0
577*4882a593Smuzhiyun #define LPFC_UE_MASK_HI			0x00AC
578*4882a593Smuzhiyun #define LPFC_UE_MASK_LO			0x00A8
579*4882a593Smuzhiyun 
580*4882a593Smuzhiyun /* The following BAR0 register sets are defined for if_type 0 and 2 UCNAs. */
581*4882a593Smuzhiyun #define LPFC_SLI_INTF			0x0058
582*4882a593Smuzhiyun #define LPFC_SLI_ASIC_VER		0x009C
583*4882a593Smuzhiyun 
584*4882a593Smuzhiyun #define LPFC_CTL_PORT_SEM_OFFSET	0x400
585*4882a593Smuzhiyun #define lpfc_port_smphr_perr_SHIFT	31
586*4882a593Smuzhiyun #define lpfc_port_smphr_perr_MASK	0x1
587*4882a593Smuzhiyun #define lpfc_port_smphr_perr_WORD	word0
588*4882a593Smuzhiyun #define lpfc_port_smphr_sfi_SHIFT	30
589*4882a593Smuzhiyun #define lpfc_port_smphr_sfi_MASK	0x1
590*4882a593Smuzhiyun #define lpfc_port_smphr_sfi_WORD	word0
591*4882a593Smuzhiyun #define lpfc_port_smphr_nip_SHIFT	29
592*4882a593Smuzhiyun #define lpfc_port_smphr_nip_MASK	0x1
593*4882a593Smuzhiyun #define lpfc_port_smphr_nip_WORD	word0
594*4882a593Smuzhiyun #define lpfc_port_smphr_ipc_SHIFT	28
595*4882a593Smuzhiyun #define lpfc_port_smphr_ipc_MASK	0x1
596*4882a593Smuzhiyun #define lpfc_port_smphr_ipc_WORD	word0
597*4882a593Smuzhiyun #define lpfc_port_smphr_scr1_SHIFT	27
598*4882a593Smuzhiyun #define lpfc_port_smphr_scr1_MASK	0x1
599*4882a593Smuzhiyun #define lpfc_port_smphr_scr1_WORD	word0
600*4882a593Smuzhiyun #define lpfc_port_smphr_scr2_SHIFT	26
601*4882a593Smuzhiyun #define lpfc_port_smphr_scr2_MASK	0x1
602*4882a593Smuzhiyun #define lpfc_port_smphr_scr2_WORD	word0
603*4882a593Smuzhiyun #define lpfc_port_smphr_host_scratch_SHIFT	16
604*4882a593Smuzhiyun #define lpfc_port_smphr_host_scratch_MASK	0xFF
605*4882a593Smuzhiyun #define lpfc_port_smphr_host_scratch_WORD	word0
606*4882a593Smuzhiyun #define lpfc_port_smphr_port_status_SHIFT	0
607*4882a593Smuzhiyun #define lpfc_port_smphr_port_status_MASK	0xFFFF
608*4882a593Smuzhiyun #define lpfc_port_smphr_port_status_WORD	word0
609*4882a593Smuzhiyun 
610*4882a593Smuzhiyun #define LPFC_POST_STAGE_POWER_ON_RESET			0x0000
611*4882a593Smuzhiyun #define LPFC_POST_STAGE_AWAITING_HOST_RDY		0x0001
612*4882a593Smuzhiyun #define LPFC_POST_STAGE_HOST_RDY			0x0002
613*4882a593Smuzhiyun #define LPFC_POST_STAGE_BE_RESET			0x0003
614*4882a593Smuzhiyun #define LPFC_POST_STAGE_SEEPROM_CS_START		0x0100
615*4882a593Smuzhiyun #define LPFC_POST_STAGE_SEEPROM_CS_DONE			0x0101
616*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_CONFIG_START		0x0200
617*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_CONFIG_DONE			0x0201
618*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_CALIBRATE_START		0x0300
619*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_CALIBRATE_DONE		0x0301
620*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_TEST_START			0x0400
621*4882a593Smuzhiyun #define LPFC_POST_STAGE_DDR_TEST_DONE			0x0401
622*4882a593Smuzhiyun #define LPFC_POST_STAGE_REDBOOT_INIT_START		0x0600
623*4882a593Smuzhiyun #define LPFC_POST_STAGE_REDBOOT_INIT_DONE		0x0601
624*4882a593Smuzhiyun #define LPFC_POST_STAGE_FW_IMAGE_LOAD_START		0x0700
625*4882a593Smuzhiyun #define LPFC_POST_STAGE_FW_IMAGE_LOAD_DONE		0x0701
626*4882a593Smuzhiyun #define LPFC_POST_STAGE_ARMFW_START			0x0800
627*4882a593Smuzhiyun #define LPFC_POST_STAGE_DHCP_QUERY_START		0x0900
628*4882a593Smuzhiyun #define LPFC_POST_STAGE_DHCP_QUERY_DONE			0x0901
629*4882a593Smuzhiyun #define LPFC_POST_STAGE_BOOT_TARGET_DISCOVERY_START	0x0A00
630*4882a593Smuzhiyun #define LPFC_POST_STAGE_BOOT_TARGET_DISCOVERY_DONE	0x0A01
631*4882a593Smuzhiyun #define LPFC_POST_STAGE_RC_OPTION_SET			0x0B00
632*4882a593Smuzhiyun #define LPFC_POST_STAGE_SWITCH_LINK			0x0B01
633*4882a593Smuzhiyun #define LPFC_POST_STAGE_SEND_ICDS_MESSAGE		0x0B02
634*4882a593Smuzhiyun #define LPFC_POST_STAGE_PERFROM_TFTP			0x0B03
635*4882a593Smuzhiyun #define LPFC_POST_STAGE_PARSE_XML			0x0B04
636*4882a593Smuzhiyun #define LPFC_POST_STAGE_DOWNLOAD_IMAGE			0x0B05
637*4882a593Smuzhiyun #define LPFC_POST_STAGE_FLASH_IMAGE			0x0B06
638*4882a593Smuzhiyun #define LPFC_POST_STAGE_RC_DONE				0x0B07
639*4882a593Smuzhiyun #define LPFC_POST_STAGE_REBOOT_SYSTEM			0x0B08
640*4882a593Smuzhiyun #define LPFC_POST_STAGE_MAC_ADDRESS			0x0C00
641*4882a593Smuzhiyun #define LPFC_POST_STAGE_PORT_READY			0xC000
642*4882a593Smuzhiyun #define LPFC_POST_STAGE_PORT_UE 			0xF000
643*4882a593Smuzhiyun 
644*4882a593Smuzhiyun #define LPFC_CTL_PORT_STA_OFFSET	0x404
645*4882a593Smuzhiyun #define lpfc_sliport_status_err_SHIFT	31
646*4882a593Smuzhiyun #define lpfc_sliport_status_err_MASK	0x1
647*4882a593Smuzhiyun #define lpfc_sliport_status_err_WORD	word0
648*4882a593Smuzhiyun #define lpfc_sliport_status_end_SHIFT	30
649*4882a593Smuzhiyun #define lpfc_sliport_status_end_MASK	0x1
650*4882a593Smuzhiyun #define lpfc_sliport_status_end_WORD	word0
651*4882a593Smuzhiyun #define lpfc_sliport_status_oti_SHIFT	29
652*4882a593Smuzhiyun #define lpfc_sliport_status_oti_MASK	0x1
653*4882a593Smuzhiyun #define lpfc_sliport_status_oti_WORD	word0
654*4882a593Smuzhiyun #define lpfc_sliport_status_dip_SHIFT	25
655*4882a593Smuzhiyun #define lpfc_sliport_status_dip_MASK	0x1
656*4882a593Smuzhiyun #define lpfc_sliport_status_dip_WORD	word0
657*4882a593Smuzhiyun #define lpfc_sliport_status_rn_SHIFT	24
658*4882a593Smuzhiyun #define lpfc_sliport_status_rn_MASK	0x1
659*4882a593Smuzhiyun #define lpfc_sliport_status_rn_WORD	word0
660*4882a593Smuzhiyun #define lpfc_sliport_status_rdy_SHIFT	23
661*4882a593Smuzhiyun #define lpfc_sliport_status_rdy_MASK	0x1
662*4882a593Smuzhiyun #define lpfc_sliport_status_rdy_WORD	word0
663*4882a593Smuzhiyun #define MAX_IF_TYPE_2_RESETS		6
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun #define LPFC_CTL_PORT_CTL_OFFSET	0x408
666*4882a593Smuzhiyun #define lpfc_sliport_ctrl_end_SHIFT	30
667*4882a593Smuzhiyun #define lpfc_sliport_ctrl_end_MASK	0x1
668*4882a593Smuzhiyun #define lpfc_sliport_ctrl_end_WORD	word0
669*4882a593Smuzhiyun #define LPFC_SLIPORT_LITTLE_ENDIAN 0
670*4882a593Smuzhiyun #define LPFC_SLIPORT_BIG_ENDIAN	   1
671*4882a593Smuzhiyun #define lpfc_sliport_ctrl_ip_SHIFT	27
672*4882a593Smuzhiyun #define lpfc_sliport_ctrl_ip_MASK	0x1
673*4882a593Smuzhiyun #define lpfc_sliport_ctrl_ip_WORD	word0
674*4882a593Smuzhiyun #define LPFC_SLIPORT_INIT_PORT	1
675*4882a593Smuzhiyun 
676*4882a593Smuzhiyun #define LPFC_CTL_PORT_ER1_OFFSET	0x40C
677*4882a593Smuzhiyun #define LPFC_CTL_PORT_ER2_OFFSET	0x410
678*4882a593Smuzhiyun 
679*4882a593Smuzhiyun #define LPFC_CTL_PORT_EQ_DELAY_OFFSET	0x418
680*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_delay_SHIFT 16
681*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_delay_MASK	0xffff
682*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_delay_WORD	word0
683*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_id_SHIFT	0
684*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_id_MASK	0xfff
685*4882a593Smuzhiyun #define lpfc_sliport_eqdelay_id_WORD	word0
686*4882a593Smuzhiyun #define LPFC_SEC_TO_USEC		1000000
687*4882a593Smuzhiyun 
688*4882a593Smuzhiyun /* The following Registers apply to SLI4 if_type 0 UCNAs. They typically
689*4882a593Smuzhiyun  * reside in BAR 2.
690*4882a593Smuzhiyun  */
691*4882a593Smuzhiyun #define LPFC_SLIPORT_IF0_SMPHR	0x00AC
692*4882a593Smuzhiyun 
693*4882a593Smuzhiyun #define LPFC_IMR_MASK_ALL	0xFFFFFFFF
694*4882a593Smuzhiyun #define LPFC_ISCR_CLEAR_ALL	0xFFFFFFFF
695*4882a593Smuzhiyun 
696*4882a593Smuzhiyun #define LPFC_HST_ISR0		0x0C18
697*4882a593Smuzhiyun #define LPFC_HST_ISR1		0x0C1C
698*4882a593Smuzhiyun #define LPFC_HST_ISR2		0x0C20
699*4882a593Smuzhiyun #define LPFC_HST_ISR3		0x0C24
700*4882a593Smuzhiyun #define LPFC_HST_ISR4		0x0C28
701*4882a593Smuzhiyun 
702*4882a593Smuzhiyun #define LPFC_HST_IMR0		0x0C48
703*4882a593Smuzhiyun #define LPFC_HST_IMR1		0x0C4C
704*4882a593Smuzhiyun #define LPFC_HST_IMR2		0x0C50
705*4882a593Smuzhiyun #define LPFC_HST_IMR3		0x0C54
706*4882a593Smuzhiyun #define LPFC_HST_IMR4		0x0C58
707*4882a593Smuzhiyun 
708*4882a593Smuzhiyun #define LPFC_HST_ISCR0		0x0C78
709*4882a593Smuzhiyun #define LPFC_HST_ISCR1		0x0C7C
710*4882a593Smuzhiyun #define LPFC_HST_ISCR2		0x0C80
711*4882a593Smuzhiyun #define LPFC_HST_ISCR3		0x0C84
712*4882a593Smuzhiyun #define LPFC_HST_ISCR4		0x0C88
713*4882a593Smuzhiyun 
714*4882a593Smuzhiyun #define LPFC_SLI4_INTR0			BIT0
715*4882a593Smuzhiyun #define LPFC_SLI4_INTR1			BIT1
716*4882a593Smuzhiyun #define LPFC_SLI4_INTR2			BIT2
717*4882a593Smuzhiyun #define LPFC_SLI4_INTR3			BIT3
718*4882a593Smuzhiyun #define LPFC_SLI4_INTR4			BIT4
719*4882a593Smuzhiyun #define LPFC_SLI4_INTR5			BIT5
720*4882a593Smuzhiyun #define LPFC_SLI4_INTR6			BIT6
721*4882a593Smuzhiyun #define LPFC_SLI4_INTR7			BIT7
722*4882a593Smuzhiyun #define LPFC_SLI4_INTR8			BIT8
723*4882a593Smuzhiyun #define LPFC_SLI4_INTR9			BIT9
724*4882a593Smuzhiyun #define LPFC_SLI4_INTR10		BIT10
725*4882a593Smuzhiyun #define LPFC_SLI4_INTR11		BIT11
726*4882a593Smuzhiyun #define LPFC_SLI4_INTR12		BIT12
727*4882a593Smuzhiyun #define LPFC_SLI4_INTR13		BIT13
728*4882a593Smuzhiyun #define LPFC_SLI4_INTR14		BIT14
729*4882a593Smuzhiyun #define LPFC_SLI4_INTR15		BIT15
730*4882a593Smuzhiyun #define LPFC_SLI4_INTR16		BIT16
731*4882a593Smuzhiyun #define LPFC_SLI4_INTR17		BIT17
732*4882a593Smuzhiyun #define LPFC_SLI4_INTR18		BIT18
733*4882a593Smuzhiyun #define LPFC_SLI4_INTR19		BIT19
734*4882a593Smuzhiyun #define LPFC_SLI4_INTR20		BIT20
735*4882a593Smuzhiyun #define LPFC_SLI4_INTR21		BIT21
736*4882a593Smuzhiyun #define LPFC_SLI4_INTR22		BIT22
737*4882a593Smuzhiyun #define LPFC_SLI4_INTR23		BIT23
738*4882a593Smuzhiyun #define LPFC_SLI4_INTR24		BIT24
739*4882a593Smuzhiyun #define LPFC_SLI4_INTR25		BIT25
740*4882a593Smuzhiyun #define LPFC_SLI4_INTR26		BIT26
741*4882a593Smuzhiyun #define LPFC_SLI4_INTR27		BIT27
742*4882a593Smuzhiyun #define LPFC_SLI4_INTR28		BIT28
743*4882a593Smuzhiyun #define LPFC_SLI4_INTR29		BIT29
744*4882a593Smuzhiyun #define LPFC_SLI4_INTR30		BIT30
745*4882a593Smuzhiyun #define LPFC_SLI4_INTR31		BIT31
746*4882a593Smuzhiyun 
747*4882a593Smuzhiyun /*
748*4882a593Smuzhiyun  * The Doorbell registers defined here exist in different BAR
749*4882a593Smuzhiyun  * register sets depending on the UCNA Port's reported if_type
750*4882a593Smuzhiyun  * value.  For UCNA ports running SLI4 and if_type 0, they reside in
751*4882a593Smuzhiyun  * BAR4.  For UCNA ports running SLI4 and if_type 2, they reside in
752*4882a593Smuzhiyun  * BAR0.  For FC ports running SLI4 and if_type 6, they reside in
753*4882a593Smuzhiyun  * BAR2. The offsets and base address are different,  so the driver
754*4882a593Smuzhiyun  * has to compute the register addresses accordingly
755*4882a593Smuzhiyun  */
756*4882a593Smuzhiyun #define LPFC_ULP0_RQ_DOORBELL		0x00A0
757*4882a593Smuzhiyun #define LPFC_ULP1_RQ_DOORBELL		0x00C0
758*4882a593Smuzhiyun #define LPFC_IF6_RQ_DOORBELL		0x0080
759*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_num_posted_SHIFT	24
760*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_num_posted_MASK	0x00FF
761*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_num_posted_WORD	word0
762*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_index_SHIFT		16
763*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_index_MASK		0x00FF
764*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_index_WORD		word0
765*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_id_SHIFT		0
766*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_id_MASK		0xFFFF
767*4882a593Smuzhiyun #define lpfc_rq_db_list_fm_id_WORD		word0
768*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_num_posted_SHIFT	16
769*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_num_posted_MASK	0x3FFF
770*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_num_posted_WORD	word0
771*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_id_SHIFT		0
772*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_id_MASK		0xFFFF
773*4882a593Smuzhiyun #define lpfc_rq_db_ring_fm_id_WORD		word0
774*4882a593Smuzhiyun 
775*4882a593Smuzhiyun #define LPFC_ULP0_WQ_DOORBELL		0x0040
776*4882a593Smuzhiyun #define LPFC_ULP1_WQ_DOORBELL		0x0060
777*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_num_posted_SHIFT	24
778*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_num_posted_MASK	0x00FF
779*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_num_posted_WORD	word0
780*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_index_SHIFT		16
781*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_index_MASK		0x00FF
782*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_index_WORD		word0
783*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_id_SHIFT		0
784*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_id_MASK		0xFFFF
785*4882a593Smuzhiyun #define lpfc_wq_db_list_fm_id_WORD		word0
786*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_num_posted_SHIFT     16
787*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_num_posted_MASK      0x3FFF
788*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_num_posted_WORD      word0
789*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_id_SHIFT             0
790*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_id_MASK              0xFFFF
791*4882a593Smuzhiyun #define lpfc_wq_db_ring_fm_id_WORD              word0
792*4882a593Smuzhiyun 
793*4882a593Smuzhiyun #define LPFC_IF6_WQ_DOORBELL		0x0040
794*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_num_posted_SHIFT	24
795*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_num_posted_MASK	0x00FF
796*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_num_posted_WORD	word0
797*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_SHIFT	23
798*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_MASK		0x0001
799*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_WORD		word0
800*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_id_SHIFT	16
801*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_id_MASK	0x001F
802*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_dpp_id_WORD	word0
803*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_id_SHIFT		0
804*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_id_MASK		0xFFFF
805*4882a593Smuzhiyun #define lpfc_if6_wq_db_list_fm_id_WORD		word0
806*4882a593Smuzhiyun 
807*4882a593Smuzhiyun #define LPFC_EQCQ_DOORBELL		0x0120
808*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_se_SHIFT		31
809*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_se_MASK		0x0001
810*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_se_WORD		word0
811*4882a593Smuzhiyun #define LPFC_EQCQ_SOLICIT_ENABLE_OFF	0
812*4882a593Smuzhiyun #define LPFC_EQCQ_SOLICIT_ENABLE_ON	1
813*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_arm_SHIFT		29
814*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_arm_MASK		0x0001
815*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_arm_WORD		word0
816*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_num_released_SHIFT	16
817*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_num_released_MASK	0x1FFF
818*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_num_released_WORD	word0
819*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_qt_SHIFT		10
820*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_qt_MASK		0x0001
821*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_qt_WORD		word0
822*4882a593Smuzhiyun #define LPFC_QUEUE_TYPE_COMPLETION	0
823*4882a593Smuzhiyun #define LPFC_QUEUE_TYPE_EVENT		1
824*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqci_SHIFT		9
825*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqci_MASK		0x0001
826*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqci_WORD		word0
827*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_lo_SHIFT	0
828*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_lo_MASK		0x03FF
829*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_lo_WORD		word0
830*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_hi_SHIFT	11
831*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_hi_MASK		0x001F
832*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_cqid_hi_WORD		word0
833*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_lo_SHIFT	0
834*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_lo_MASK		0x01FF
835*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_lo_WORD		word0
836*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_hi_SHIFT	11
837*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_hi_MASK		0x001F
838*4882a593Smuzhiyun #define lpfc_eqcq_doorbell_eqid_hi_WORD		word0
839*4882a593Smuzhiyun #define LPFC_CQID_HI_FIELD_SHIFT		10
840*4882a593Smuzhiyun #define LPFC_EQID_HI_FIELD_SHIFT		9
841*4882a593Smuzhiyun 
842*4882a593Smuzhiyun #define LPFC_IF6_CQ_DOORBELL			0x00C0
843*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_se_SHIFT		31
844*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_se_MASK		0x0001
845*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_se_WORD		word0
846*4882a593Smuzhiyun #define LPFC_IF6_CQ_SOLICIT_ENABLE_OFF		0
847*4882a593Smuzhiyun #define LPFC_IF6_CQ_SOLICIT_ENABLE_ON		1
848*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_arm_SHIFT		29
849*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_arm_MASK		0x0001
850*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_arm_WORD		word0
851*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_num_released_SHIFT	16
852*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_num_released_MASK	0x1FFF
853*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_num_released_WORD	word0
854*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_cqid_SHIFT		0
855*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_cqid_MASK		0xFFFF
856*4882a593Smuzhiyun #define lpfc_if6_cq_doorbell_cqid_WORD		word0
857*4882a593Smuzhiyun 
858*4882a593Smuzhiyun #define LPFC_IF6_EQ_DOORBELL			0x0120
859*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_io_SHIFT		31
860*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_io_MASK		0x0001
861*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_io_WORD		word0
862*4882a593Smuzhiyun #define LPFC_IF6_EQ_INTR_OVERRIDE_OFF		0
863*4882a593Smuzhiyun #define LPFC_IF6_EQ_INTR_OVERRIDE_ON		1
864*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_arm_SHIFT		29
865*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_arm_MASK		0x0001
866*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_arm_WORD		word0
867*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_num_released_SHIFT	16
868*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_num_released_MASK	0x1FFF
869*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_num_released_WORD	word0
870*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_eqid_SHIFT		0
871*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_eqid_MASK		0x0FFF
872*4882a593Smuzhiyun #define lpfc_if6_eq_doorbell_eqid_WORD		word0
873*4882a593Smuzhiyun 
874*4882a593Smuzhiyun #define LPFC_BMBX			0x0160
875*4882a593Smuzhiyun #define lpfc_bmbx_addr_SHIFT		2
876*4882a593Smuzhiyun #define lpfc_bmbx_addr_MASK		0x3FFFFFFF
877*4882a593Smuzhiyun #define lpfc_bmbx_addr_WORD		word0
878*4882a593Smuzhiyun #define lpfc_bmbx_hi_SHIFT		1
879*4882a593Smuzhiyun #define lpfc_bmbx_hi_MASK		0x0001
880*4882a593Smuzhiyun #define lpfc_bmbx_hi_WORD		word0
881*4882a593Smuzhiyun #define lpfc_bmbx_rdy_SHIFT		0
882*4882a593Smuzhiyun #define lpfc_bmbx_rdy_MASK		0x0001
883*4882a593Smuzhiyun #define lpfc_bmbx_rdy_WORD		word0
884*4882a593Smuzhiyun 
885*4882a593Smuzhiyun #define LPFC_MQ_DOORBELL			0x0140
886*4882a593Smuzhiyun #define LPFC_IF6_MQ_DOORBELL			0x0160
887*4882a593Smuzhiyun #define lpfc_mq_doorbell_num_posted_SHIFT	16
888*4882a593Smuzhiyun #define lpfc_mq_doorbell_num_posted_MASK	0x3FFF
889*4882a593Smuzhiyun #define lpfc_mq_doorbell_num_posted_WORD	word0
890*4882a593Smuzhiyun #define lpfc_mq_doorbell_id_SHIFT		0
891*4882a593Smuzhiyun #define lpfc_mq_doorbell_id_MASK		0xFFFF
892*4882a593Smuzhiyun #define lpfc_mq_doorbell_id_WORD		word0
893*4882a593Smuzhiyun 
894*4882a593Smuzhiyun struct lpfc_sli4_cfg_mhdr {
895*4882a593Smuzhiyun 	uint32_t word1;
896*4882a593Smuzhiyun #define lpfc_mbox_hdr_emb_SHIFT		0
897*4882a593Smuzhiyun #define lpfc_mbox_hdr_emb_MASK		0x00000001
898*4882a593Smuzhiyun #define lpfc_mbox_hdr_emb_WORD		word1
899*4882a593Smuzhiyun #define lpfc_mbox_hdr_sge_cnt_SHIFT	3
900*4882a593Smuzhiyun #define lpfc_mbox_hdr_sge_cnt_MASK	0x0000001F
901*4882a593Smuzhiyun #define lpfc_mbox_hdr_sge_cnt_WORD	word1
902*4882a593Smuzhiyun 	uint32_t payload_length;
903*4882a593Smuzhiyun 	uint32_t tag_lo;
904*4882a593Smuzhiyun 	uint32_t tag_hi;
905*4882a593Smuzhiyun 	uint32_t reserved5;
906*4882a593Smuzhiyun };
907*4882a593Smuzhiyun 
908*4882a593Smuzhiyun union lpfc_sli4_cfg_shdr {
909*4882a593Smuzhiyun 	struct {
910*4882a593Smuzhiyun 		uint32_t word6;
911*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_SHIFT	0
912*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_MASK	0x000000FF
913*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_WORD	word6
914*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_SHIFT	8
915*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_MASK	0x000000FF
916*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_WORD	word6
917*4882a593Smuzhiyun #define lpfc_mbox_hdr_port_number_SHIFT	16
918*4882a593Smuzhiyun #define lpfc_mbox_hdr_port_number_MASK	0x000000FF
919*4882a593Smuzhiyun #define lpfc_mbox_hdr_port_number_WORD	word6
920*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_SHIFT	24
921*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_MASK	0x000000FF
922*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_WORD	word6
923*4882a593Smuzhiyun 		uint32_t timeout;
924*4882a593Smuzhiyun 		uint32_t request_length;
925*4882a593Smuzhiyun 		uint32_t word9;
926*4882a593Smuzhiyun #define lpfc_mbox_hdr_version_SHIFT	0
927*4882a593Smuzhiyun #define lpfc_mbox_hdr_version_MASK	0x000000FF
928*4882a593Smuzhiyun #define lpfc_mbox_hdr_version_WORD	word9
929*4882a593Smuzhiyun #define lpfc_mbox_hdr_pf_num_SHIFT	16
930*4882a593Smuzhiyun #define lpfc_mbox_hdr_pf_num_MASK	0x000000FF
931*4882a593Smuzhiyun #define lpfc_mbox_hdr_pf_num_WORD	word9
932*4882a593Smuzhiyun #define lpfc_mbox_hdr_vh_num_SHIFT	24
933*4882a593Smuzhiyun #define lpfc_mbox_hdr_vh_num_MASK	0x000000FF
934*4882a593Smuzhiyun #define lpfc_mbox_hdr_vh_num_WORD	word9
935*4882a593Smuzhiyun #define LPFC_Q_CREATE_VERSION_2	2
936*4882a593Smuzhiyun #define LPFC_Q_CREATE_VERSION_1	1
937*4882a593Smuzhiyun #define LPFC_Q_CREATE_VERSION_0	0
938*4882a593Smuzhiyun #define LPFC_OPCODE_VERSION_0	0
939*4882a593Smuzhiyun #define LPFC_OPCODE_VERSION_1	1
940*4882a593Smuzhiyun 	} request;
941*4882a593Smuzhiyun 	struct {
942*4882a593Smuzhiyun 		uint32_t word6;
943*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_SHIFT		0
944*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_MASK		0x000000FF
945*4882a593Smuzhiyun #define lpfc_mbox_hdr_opcode_WORD		word6
946*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_SHIFT		8
947*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_MASK		0x000000FF
948*4882a593Smuzhiyun #define lpfc_mbox_hdr_subsystem_WORD		word6
949*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_SHIFT		24
950*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_MASK		0x000000FF
951*4882a593Smuzhiyun #define lpfc_mbox_hdr_domain_WORD		word6
952*4882a593Smuzhiyun 		uint32_t word7;
953*4882a593Smuzhiyun #define lpfc_mbox_hdr_status_SHIFT		0
954*4882a593Smuzhiyun #define lpfc_mbox_hdr_status_MASK		0x000000FF
955*4882a593Smuzhiyun #define lpfc_mbox_hdr_status_WORD		word7
956*4882a593Smuzhiyun #define lpfc_mbox_hdr_add_status_SHIFT		8
957*4882a593Smuzhiyun #define lpfc_mbox_hdr_add_status_MASK		0x000000FF
958*4882a593Smuzhiyun #define lpfc_mbox_hdr_add_status_WORD		word7
959*4882a593Smuzhiyun 		uint32_t response_length;
960*4882a593Smuzhiyun 		uint32_t actual_response_length;
961*4882a593Smuzhiyun 	} response;
962*4882a593Smuzhiyun };
963*4882a593Smuzhiyun 
964*4882a593Smuzhiyun /* Mailbox Header structures.
965*4882a593Smuzhiyun  * struct mbox_header is defined for first generation SLI4_CFG mailbox
966*4882a593Smuzhiyun  * calls deployed for BE-based ports.
967*4882a593Smuzhiyun  *
968*4882a593Smuzhiyun  * struct sli4_mbox_header is defined for second generation SLI4
969*4882a593Smuzhiyun  * ports that don't deploy the SLI4_CFG mechanism.
970*4882a593Smuzhiyun  */
971*4882a593Smuzhiyun struct mbox_header {
972*4882a593Smuzhiyun 	struct lpfc_sli4_cfg_mhdr cfg_mhdr;
973*4882a593Smuzhiyun 	union  lpfc_sli4_cfg_shdr cfg_shdr;
974*4882a593Smuzhiyun };
975*4882a593Smuzhiyun 
976*4882a593Smuzhiyun #define LPFC_EXTENT_LOCAL		0
977*4882a593Smuzhiyun #define LPFC_TIMEOUT_DEFAULT		0
978*4882a593Smuzhiyun #define LPFC_EXTENT_VERSION_DEFAULT	0
979*4882a593Smuzhiyun 
980*4882a593Smuzhiyun /* Subsystem Definitions */
981*4882a593Smuzhiyun #define LPFC_MBOX_SUBSYSTEM_NA		0x0
982*4882a593Smuzhiyun #define LPFC_MBOX_SUBSYSTEM_COMMON	0x1
983*4882a593Smuzhiyun #define LPFC_MBOX_SUBSYSTEM_LOWLEVEL	0xB
984*4882a593Smuzhiyun #define LPFC_MBOX_SUBSYSTEM_FCOE	0xC
985*4882a593Smuzhiyun 
986*4882a593Smuzhiyun /* Device Specific Definitions */
987*4882a593Smuzhiyun 
988*4882a593Smuzhiyun /* The HOST ENDIAN defines are in Big Endian format. */
989*4882a593Smuzhiyun #define HOST_ENDIAN_LOW_WORD0   0xFF3412FF
990*4882a593Smuzhiyun #define HOST_ENDIAN_HIGH_WORD1	0xFF7856FF
991*4882a593Smuzhiyun 
992*4882a593Smuzhiyun /* Common Opcodes */
993*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_NA				0x00
994*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_CQ_CREATE			0x0C
995*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_EQ_CREATE			0x0D
996*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_MQ_CREATE			0x15
997*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_CNTL_ATTRIBUTES		0x20
998*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_NOP				0x21
999*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_MODIFY_EQ_DELAY		0x29
1000*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_MQ_DESTROY			0x35
1001*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_CQ_DESTROY			0x36
1002*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_EQ_DESTROY			0x37
1003*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_QUERY_FW_CFG			0x3A
1004*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FUNCTION_RESET			0x3D
1005*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_PHYSICAL_LINK_CONFIG	0x3E
1006*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_BOOT_CONFIG		0x43
1007*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_BEACON_CONFIG              0x45
1008*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_BEACON_CONFIG              0x46
1009*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_PORT_NAME			0x4D
1010*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_MQ_CREATE_EXT			0x5A
1011*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_VPD_DATA			0x5B
1012*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_HOST_DATA			0x5D
1013*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SEND_ACTIVATION		0x73
1014*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_RESET_LICENSES			0x74
1015*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_RSRC_EXTENT_INFO		0x9A
1016*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_ALLOC_RSRC_EXTENT		0x9B
1017*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_ALLOC_RSRC_EXTENT		0x9C
1018*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_DEALLOC_RSRC_EXTENT		0x9D
1019*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_FUNCTION_CONFIG		0xA0
1020*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_PROFILE_CAPACITIES		0xA1
1021*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_PROFILE_CONFIG		0xA4
1022*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_PROFILE_CONFIG		0xA5
1023*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_PROFILE_LIST		0xA6
1024*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_ACT_PROFILE		0xA8
1025*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_FACTORY_PROFILE_CONFIG	0xA9
1026*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_READ_OBJECT			0xAB
1027*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_WRITE_OBJECT			0xAC
1028*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_READ_OBJECT_LIST		0xAD
1029*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_DELETE_OBJECT			0xAE
1030*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_GET_SLI4_PARAMETERS		0xB5
1031*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_FEATURES                   0xBF
1032*4882a593Smuzhiyun 
1033*4882a593Smuzhiyun /* FCoE Opcodes */
1034*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_WQ_CREATE			0x01
1035*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_WQ_DESTROY		0x02
1036*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_POST_SGL_PAGES		0x03
1037*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_REMOVE_SGL_PAGES		0x04
1038*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_RQ_CREATE			0x05
1039*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_RQ_DESTROY		0x06
1040*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_READ_FCF_TABLE		0x08
1041*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_ADD_FCF			0x09
1042*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_DELETE_FCF		0x0A
1043*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_POST_HDR_TEMPLATE		0x0B
1044*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_REDISCOVER_FCF		0x10
1045*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_CQ_CREATE_SET		0x1D
1046*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_SET_FCLINK_SETTINGS	0x21
1047*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_LINK_DIAG_STATE		0x22
1048*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_LINK_DIAG_LOOPBACK	0x23
1049*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_FCOE_FC_SET_TRUNK_MODE		0x42
1050*4882a593Smuzhiyun 
1051*4882a593Smuzhiyun /* Low level Opcodes */
1052*4882a593Smuzhiyun #define LPFC_MBOX_OPCODE_SET_DIAG_LOG_OPTION		0x37
1053*4882a593Smuzhiyun 
1054*4882a593Smuzhiyun /* Mailbox command structures */
1055*4882a593Smuzhiyun struct eq_context {
1056*4882a593Smuzhiyun 	uint32_t word0;
1057*4882a593Smuzhiyun #define lpfc_eq_context_size_SHIFT	31
1058*4882a593Smuzhiyun #define lpfc_eq_context_size_MASK	0x00000001
1059*4882a593Smuzhiyun #define lpfc_eq_context_size_WORD	word0
1060*4882a593Smuzhiyun #define LPFC_EQE_SIZE_4			0x0
1061*4882a593Smuzhiyun #define LPFC_EQE_SIZE_16		0x1
1062*4882a593Smuzhiyun #define lpfc_eq_context_valid_SHIFT	29
1063*4882a593Smuzhiyun #define lpfc_eq_context_valid_MASK	0x00000001
1064*4882a593Smuzhiyun #define lpfc_eq_context_valid_WORD	word0
1065*4882a593Smuzhiyun #define lpfc_eq_context_autovalid_SHIFT 28
1066*4882a593Smuzhiyun #define lpfc_eq_context_autovalid_MASK  0x00000001
1067*4882a593Smuzhiyun #define lpfc_eq_context_autovalid_WORD  word0
1068*4882a593Smuzhiyun 	uint32_t word1;
1069*4882a593Smuzhiyun #define lpfc_eq_context_count_SHIFT	26
1070*4882a593Smuzhiyun #define lpfc_eq_context_count_MASK	0x00000003
1071*4882a593Smuzhiyun #define lpfc_eq_context_count_WORD	word1
1072*4882a593Smuzhiyun #define LPFC_EQ_CNT_256		0x0
1073*4882a593Smuzhiyun #define LPFC_EQ_CNT_512		0x1
1074*4882a593Smuzhiyun #define LPFC_EQ_CNT_1024	0x2
1075*4882a593Smuzhiyun #define LPFC_EQ_CNT_2048	0x3
1076*4882a593Smuzhiyun #define LPFC_EQ_CNT_4096	0x4
1077*4882a593Smuzhiyun 	uint32_t word2;
1078*4882a593Smuzhiyun #define lpfc_eq_context_delay_multi_SHIFT	13
1079*4882a593Smuzhiyun #define lpfc_eq_context_delay_multi_MASK	0x000003FF
1080*4882a593Smuzhiyun #define lpfc_eq_context_delay_multi_WORD	word2
1081*4882a593Smuzhiyun 	uint32_t reserved3;
1082*4882a593Smuzhiyun };
1083*4882a593Smuzhiyun 
1084*4882a593Smuzhiyun struct eq_delay_info {
1085*4882a593Smuzhiyun 	uint32_t eq_id;
1086*4882a593Smuzhiyun 	uint32_t phase;
1087*4882a593Smuzhiyun 	uint32_t delay_multi;
1088*4882a593Smuzhiyun };
1089*4882a593Smuzhiyun #define	LPFC_MAX_EQ_DELAY_EQID_CNT	8
1090*4882a593Smuzhiyun 
1091*4882a593Smuzhiyun struct sgl_page_pairs {
1092*4882a593Smuzhiyun 	uint32_t sgl_pg0_addr_lo;
1093*4882a593Smuzhiyun 	uint32_t sgl_pg0_addr_hi;
1094*4882a593Smuzhiyun 	uint32_t sgl_pg1_addr_lo;
1095*4882a593Smuzhiyun 	uint32_t sgl_pg1_addr_hi;
1096*4882a593Smuzhiyun };
1097*4882a593Smuzhiyun 
1098*4882a593Smuzhiyun struct lpfc_mbx_post_sgl_pages {
1099*4882a593Smuzhiyun 	struct mbox_header header;
1100*4882a593Smuzhiyun 	uint32_t word0;
1101*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xri_SHIFT	0
1102*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xri_MASK	0x0000FFFF
1103*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xri_WORD	word0
1104*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xricnt_SHIFT	16
1105*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xricnt_MASK	0x0000FFFF
1106*4882a593Smuzhiyun #define lpfc_post_sgl_pages_xricnt_WORD	word0
1107*4882a593Smuzhiyun 	struct sgl_page_pairs  sgl_pg_pairs[1];
1108*4882a593Smuzhiyun };
1109*4882a593Smuzhiyun 
1110*4882a593Smuzhiyun /* word0 of page-1 struct shares the same SHIFT/MASK/WORD defines as above */
1111*4882a593Smuzhiyun struct lpfc_mbx_post_uembed_sgl_page1 {
1112*4882a593Smuzhiyun 	union  lpfc_sli4_cfg_shdr cfg_shdr;
1113*4882a593Smuzhiyun 	uint32_t word0;
1114*4882a593Smuzhiyun 	struct sgl_page_pairs sgl_pg_pairs;
1115*4882a593Smuzhiyun };
1116*4882a593Smuzhiyun 
1117*4882a593Smuzhiyun struct lpfc_mbx_sge {
1118*4882a593Smuzhiyun 	uint32_t pa_lo;
1119*4882a593Smuzhiyun 	uint32_t pa_hi;
1120*4882a593Smuzhiyun 	uint32_t length;
1121*4882a593Smuzhiyun };
1122*4882a593Smuzhiyun 
1123*4882a593Smuzhiyun struct lpfc_mbx_nembed_cmd {
1124*4882a593Smuzhiyun 	struct lpfc_sli4_cfg_mhdr cfg_mhdr;
1125*4882a593Smuzhiyun #define LPFC_SLI4_MBX_SGE_MAX_PAGES	19
1126*4882a593Smuzhiyun 	struct lpfc_mbx_sge sge[LPFC_SLI4_MBX_SGE_MAX_PAGES];
1127*4882a593Smuzhiyun };
1128*4882a593Smuzhiyun 
1129*4882a593Smuzhiyun struct lpfc_mbx_nembed_sge_virt {
1130*4882a593Smuzhiyun 	void *addr[LPFC_SLI4_MBX_SGE_MAX_PAGES];
1131*4882a593Smuzhiyun };
1132*4882a593Smuzhiyun 
1133*4882a593Smuzhiyun struct lpfc_mbx_eq_create {
1134*4882a593Smuzhiyun 	struct mbox_header header;
1135*4882a593Smuzhiyun 	union {
1136*4882a593Smuzhiyun 		struct {
1137*4882a593Smuzhiyun 			uint32_t word0;
1138*4882a593Smuzhiyun #define lpfc_mbx_eq_create_num_pages_SHIFT	0
1139*4882a593Smuzhiyun #define lpfc_mbx_eq_create_num_pages_MASK	0x0000FFFF
1140*4882a593Smuzhiyun #define lpfc_mbx_eq_create_num_pages_WORD	word0
1141*4882a593Smuzhiyun 			struct eq_context context;
1142*4882a593Smuzhiyun 			struct dma_address page[LPFC_MAX_EQ_PAGE];
1143*4882a593Smuzhiyun 		} request;
1144*4882a593Smuzhiyun 		struct {
1145*4882a593Smuzhiyun 			uint32_t word0;
1146*4882a593Smuzhiyun #define lpfc_mbx_eq_create_q_id_SHIFT	0
1147*4882a593Smuzhiyun #define lpfc_mbx_eq_create_q_id_MASK	0x0000FFFF
1148*4882a593Smuzhiyun #define lpfc_mbx_eq_create_q_id_WORD	word0
1149*4882a593Smuzhiyun 		} response;
1150*4882a593Smuzhiyun 	} u;
1151*4882a593Smuzhiyun };
1152*4882a593Smuzhiyun 
1153*4882a593Smuzhiyun struct lpfc_mbx_modify_eq_delay {
1154*4882a593Smuzhiyun 	struct mbox_header header;
1155*4882a593Smuzhiyun 	union {
1156*4882a593Smuzhiyun 		struct {
1157*4882a593Smuzhiyun 			uint32_t num_eq;
1158*4882a593Smuzhiyun 			struct eq_delay_info eq[LPFC_MAX_EQ_DELAY_EQID_CNT];
1159*4882a593Smuzhiyun 		} request;
1160*4882a593Smuzhiyun 		struct {
1161*4882a593Smuzhiyun 			uint32_t word0;
1162*4882a593Smuzhiyun 		} response;
1163*4882a593Smuzhiyun 	} u;
1164*4882a593Smuzhiyun };
1165*4882a593Smuzhiyun 
1166*4882a593Smuzhiyun struct lpfc_mbx_eq_destroy {
1167*4882a593Smuzhiyun 	struct mbox_header header;
1168*4882a593Smuzhiyun 	union {
1169*4882a593Smuzhiyun 		struct {
1170*4882a593Smuzhiyun 			uint32_t word0;
1171*4882a593Smuzhiyun #define lpfc_mbx_eq_destroy_q_id_SHIFT	0
1172*4882a593Smuzhiyun #define lpfc_mbx_eq_destroy_q_id_MASK	0x0000FFFF
1173*4882a593Smuzhiyun #define lpfc_mbx_eq_destroy_q_id_WORD	word0
1174*4882a593Smuzhiyun 		} request;
1175*4882a593Smuzhiyun 		struct {
1176*4882a593Smuzhiyun 			uint32_t word0;
1177*4882a593Smuzhiyun 		} response;
1178*4882a593Smuzhiyun 	} u;
1179*4882a593Smuzhiyun };
1180*4882a593Smuzhiyun 
1181*4882a593Smuzhiyun struct lpfc_mbx_nop {
1182*4882a593Smuzhiyun 	struct mbox_header header;
1183*4882a593Smuzhiyun 	uint32_t context[2];
1184*4882a593Smuzhiyun };
1185*4882a593Smuzhiyun 
1186*4882a593Smuzhiyun 
1187*4882a593Smuzhiyun 
1188*4882a593Smuzhiyun struct lpfc_mbx_set_ras_fwlog {
1189*4882a593Smuzhiyun 	struct mbox_header header;
1190*4882a593Smuzhiyun 	union {
1191*4882a593Smuzhiyun 		struct {
1192*4882a593Smuzhiyun 			uint32_t word4;
1193*4882a593Smuzhiyun #define lpfc_fwlog_enable_SHIFT		0
1194*4882a593Smuzhiyun #define lpfc_fwlog_enable_MASK		0x00000001
1195*4882a593Smuzhiyun #define lpfc_fwlog_enable_WORD		word4
1196*4882a593Smuzhiyun #define lpfc_fwlog_loglvl_SHIFT		8
1197*4882a593Smuzhiyun #define lpfc_fwlog_loglvl_MASK		0x0000000F
1198*4882a593Smuzhiyun #define lpfc_fwlog_loglvl_WORD		word4
1199*4882a593Smuzhiyun #define lpfc_fwlog_ra_SHIFT		15
1200*4882a593Smuzhiyun #define lpfc_fwlog_ra_WORD		0x00000008
1201*4882a593Smuzhiyun #define lpfc_fwlog_buffcnt_SHIFT	16
1202*4882a593Smuzhiyun #define lpfc_fwlog_buffcnt_MASK		0x000000FF
1203*4882a593Smuzhiyun #define lpfc_fwlog_buffcnt_WORD		word4
1204*4882a593Smuzhiyun #define lpfc_fwlog_buffsz_SHIFT		24
1205*4882a593Smuzhiyun #define lpfc_fwlog_buffsz_MASK		0x000000FF
1206*4882a593Smuzhiyun #define lpfc_fwlog_buffsz_WORD		word4
1207*4882a593Smuzhiyun 			uint32_t word5;
1208*4882a593Smuzhiyun #define lpfc_fwlog_acqe_SHIFT		0
1209*4882a593Smuzhiyun #define lpfc_fwlog_acqe_MASK		0x0000FFFF
1210*4882a593Smuzhiyun #define lpfc_fwlog_acqe_WORD		word5
1211*4882a593Smuzhiyun #define lpfc_fwlog_cqid_SHIFT		16
1212*4882a593Smuzhiyun #define lpfc_fwlog_cqid_MASK		0x0000FFFF
1213*4882a593Smuzhiyun #define lpfc_fwlog_cqid_WORD		word5
1214*4882a593Smuzhiyun #define LPFC_MAX_FWLOG_PAGE	16
1215*4882a593Smuzhiyun 			struct dma_address lwpd;
1216*4882a593Smuzhiyun 			struct dma_address buff_fwlog[LPFC_MAX_FWLOG_PAGE];
1217*4882a593Smuzhiyun 		} request;
1218*4882a593Smuzhiyun 		struct {
1219*4882a593Smuzhiyun 			uint32_t word0;
1220*4882a593Smuzhiyun 		} response;
1221*4882a593Smuzhiyun 	} u;
1222*4882a593Smuzhiyun };
1223*4882a593Smuzhiyun 
1224*4882a593Smuzhiyun 
1225*4882a593Smuzhiyun struct cq_context {
1226*4882a593Smuzhiyun 	uint32_t word0;
1227*4882a593Smuzhiyun #define lpfc_cq_context_event_SHIFT	31
1228*4882a593Smuzhiyun #define lpfc_cq_context_event_MASK	0x00000001
1229*4882a593Smuzhiyun #define lpfc_cq_context_event_WORD	word0
1230*4882a593Smuzhiyun #define lpfc_cq_context_valid_SHIFT	29
1231*4882a593Smuzhiyun #define lpfc_cq_context_valid_MASK	0x00000001
1232*4882a593Smuzhiyun #define lpfc_cq_context_valid_WORD	word0
1233*4882a593Smuzhiyun #define lpfc_cq_context_count_SHIFT	27
1234*4882a593Smuzhiyun #define lpfc_cq_context_count_MASK	0x00000003
1235*4882a593Smuzhiyun #define lpfc_cq_context_count_WORD	word0
1236*4882a593Smuzhiyun #define LPFC_CQ_CNT_256		0x0
1237*4882a593Smuzhiyun #define LPFC_CQ_CNT_512		0x1
1238*4882a593Smuzhiyun #define LPFC_CQ_CNT_1024	0x2
1239*4882a593Smuzhiyun #define LPFC_CQ_CNT_WORD7	0x3
1240*4882a593Smuzhiyun #define lpfc_cq_context_autovalid_SHIFT 15
1241*4882a593Smuzhiyun #define lpfc_cq_context_autovalid_MASK  0x00000001
1242*4882a593Smuzhiyun #define lpfc_cq_context_autovalid_WORD  word0
1243*4882a593Smuzhiyun 	uint32_t word1;
1244*4882a593Smuzhiyun #define lpfc_cq_eq_id_SHIFT		22	/* Version 0 Only */
1245*4882a593Smuzhiyun #define lpfc_cq_eq_id_MASK		0x000000FF
1246*4882a593Smuzhiyun #define lpfc_cq_eq_id_WORD		word1
1247*4882a593Smuzhiyun #define lpfc_cq_eq_id_2_SHIFT		0 	/* Version 2 Only */
1248*4882a593Smuzhiyun #define lpfc_cq_eq_id_2_MASK		0x0000FFFF
1249*4882a593Smuzhiyun #define lpfc_cq_eq_id_2_WORD		word1
1250*4882a593Smuzhiyun 	uint32_t lpfc_cq_context_count;		/* Version 2 Only */
1251*4882a593Smuzhiyun 	uint32_t reserved1;
1252*4882a593Smuzhiyun };
1253*4882a593Smuzhiyun 
1254*4882a593Smuzhiyun struct lpfc_mbx_cq_create {
1255*4882a593Smuzhiyun 	struct mbox_header header;
1256*4882a593Smuzhiyun 	union {
1257*4882a593Smuzhiyun 		struct {
1258*4882a593Smuzhiyun 			uint32_t word0;
1259*4882a593Smuzhiyun #define lpfc_mbx_cq_create_page_size_SHIFT	16	/* Version 2 Only */
1260*4882a593Smuzhiyun #define lpfc_mbx_cq_create_page_size_MASK	0x000000FF
1261*4882a593Smuzhiyun #define lpfc_mbx_cq_create_page_size_WORD	word0
1262*4882a593Smuzhiyun #define lpfc_mbx_cq_create_num_pages_SHIFT	0
1263*4882a593Smuzhiyun #define lpfc_mbx_cq_create_num_pages_MASK	0x0000FFFF
1264*4882a593Smuzhiyun #define lpfc_mbx_cq_create_num_pages_WORD	word0
1265*4882a593Smuzhiyun 			struct cq_context context;
1266*4882a593Smuzhiyun 			struct dma_address page[LPFC_MAX_CQ_PAGE];
1267*4882a593Smuzhiyun 		} request;
1268*4882a593Smuzhiyun 		struct {
1269*4882a593Smuzhiyun 			uint32_t word0;
1270*4882a593Smuzhiyun #define lpfc_mbx_cq_create_q_id_SHIFT	0
1271*4882a593Smuzhiyun #define lpfc_mbx_cq_create_q_id_MASK	0x0000FFFF
1272*4882a593Smuzhiyun #define lpfc_mbx_cq_create_q_id_WORD	word0
1273*4882a593Smuzhiyun 		} response;
1274*4882a593Smuzhiyun 	} u;
1275*4882a593Smuzhiyun };
1276*4882a593Smuzhiyun 
1277*4882a593Smuzhiyun struct lpfc_mbx_cq_create_set {
1278*4882a593Smuzhiyun 	union  lpfc_sli4_cfg_shdr cfg_shdr;
1279*4882a593Smuzhiyun 	union {
1280*4882a593Smuzhiyun 		struct {
1281*4882a593Smuzhiyun 			uint32_t word0;
1282*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_page_size_SHIFT	16	/* Version 2 Only */
1283*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_page_size_MASK	0x000000FF
1284*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_page_size_WORD	word0
1285*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_pages_SHIFT	0
1286*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_pages_MASK	0x0000FFFF
1287*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_pages_WORD	word0
1288*4882a593Smuzhiyun 			uint32_t word1;
1289*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_evt_SHIFT	31
1290*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_evt_MASK		0x00000001
1291*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_evt_WORD		word1
1292*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_valid_SHIFT	29
1293*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_valid_MASK	0x00000001
1294*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_valid_WORD	word1
1295*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_cnt_SHIFT	27
1296*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_cnt_MASK	0x00000003
1297*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_cnt_WORD	word1
1298*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_size_SHIFT	25
1299*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_size_MASK	0x00000003
1300*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cqe_size_WORD	word1
1301*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_autovalid_SHIFT	15
1302*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_autovalid_MASK	0x0000001
1303*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_autovalid_WORD	word1
1304*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_nodelay_SHIFT	14
1305*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_nodelay_MASK	0x00000001
1306*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_nodelay_WORD	word1
1307*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_clswm_SHIFT	12
1308*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_clswm_MASK	0x00000003
1309*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_clswm_WORD	word1
1310*4882a593Smuzhiyun 			uint32_t word2;
1311*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_arm_SHIFT	31
1312*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_arm_MASK		0x00000001
1313*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_arm_WORD		word2
1314*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cq_cnt_SHIFT	16
1315*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cq_cnt_MASK	0x00007FFF
1316*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_cq_cnt_WORD	word2
1317*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_cq_SHIFT	0
1318*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_cq_MASK	0x0000FFFF
1319*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_cq_WORD	word2
1320*4882a593Smuzhiyun 			uint32_t word3;
1321*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id1_SHIFT	16
1322*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id1_MASK	0x0000FFFF
1323*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id1_WORD	word3
1324*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id0_SHIFT	0
1325*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id0_MASK	0x0000FFFF
1326*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id0_WORD	word3
1327*4882a593Smuzhiyun 			uint32_t word4;
1328*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id3_SHIFT	16
1329*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id3_MASK	0x0000FFFF
1330*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id3_WORD	word4
1331*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id2_SHIFT	0
1332*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id2_MASK	0x0000FFFF
1333*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id2_WORD	word4
1334*4882a593Smuzhiyun 			uint32_t word5;
1335*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id5_SHIFT	16
1336*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id5_MASK	0x0000FFFF
1337*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id5_WORD	word5
1338*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id4_SHIFT	0
1339*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id4_MASK	0x0000FFFF
1340*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id4_WORD	word5
1341*4882a593Smuzhiyun 			uint32_t word6;
1342*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id7_SHIFT	16
1343*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id7_MASK	0x0000FFFF
1344*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id7_WORD	word6
1345*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id6_SHIFT	0
1346*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id6_MASK	0x0000FFFF
1347*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id6_WORD	word6
1348*4882a593Smuzhiyun 			uint32_t word7;
1349*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id9_SHIFT	16
1350*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id9_MASK	0x0000FFFF
1351*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id9_WORD	word7
1352*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id8_SHIFT	0
1353*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id8_MASK	0x0000FFFF
1354*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id8_WORD	word7
1355*4882a593Smuzhiyun 			uint32_t word8;
1356*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id11_SHIFT	16
1357*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id11_MASK	0x0000FFFF
1358*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id11_WORD	word8
1359*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id10_SHIFT	0
1360*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id10_MASK	0x0000FFFF
1361*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id10_WORD	word8
1362*4882a593Smuzhiyun 			uint32_t word9;
1363*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id13_SHIFT	16
1364*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id13_MASK	0x0000FFFF
1365*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id13_WORD	word9
1366*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id12_SHIFT	0
1367*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id12_MASK	0x0000FFFF
1368*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id12_WORD	word9
1369*4882a593Smuzhiyun 			uint32_t word10;
1370*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id15_SHIFT	16
1371*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id15_MASK	0x0000FFFF
1372*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id15_WORD	word10
1373*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id14_SHIFT	0
1374*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id14_MASK	0x0000FFFF
1375*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_eq_id14_WORD	word10
1376*4882a593Smuzhiyun 			struct dma_address page[1];
1377*4882a593Smuzhiyun 		} request;
1378*4882a593Smuzhiyun 		struct {
1379*4882a593Smuzhiyun 			uint32_t word0;
1380*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_alloc_SHIFT	16
1381*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_alloc_MASK	0x0000FFFF
1382*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_num_alloc_WORD	word0
1383*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_base_id_SHIFT	0
1384*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_base_id_MASK	0x0000FFFF
1385*4882a593Smuzhiyun #define lpfc_mbx_cq_create_set_base_id_WORD	word0
1386*4882a593Smuzhiyun 		} response;
1387*4882a593Smuzhiyun 	} u;
1388*4882a593Smuzhiyun };
1389*4882a593Smuzhiyun 
1390*4882a593Smuzhiyun struct lpfc_mbx_cq_destroy {
1391*4882a593Smuzhiyun 	struct mbox_header header;
1392*4882a593Smuzhiyun 	union {
1393*4882a593Smuzhiyun 		struct {
1394*4882a593Smuzhiyun 			uint32_t word0;
1395*4882a593Smuzhiyun #define lpfc_mbx_cq_destroy_q_id_SHIFT	0
1396*4882a593Smuzhiyun #define lpfc_mbx_cq_destroy_q_id_MASK	0x0000FFFF
1397*4882a593Smuzhiyun #define lpfc_mbx_cq_destroy_q_id_WORD	word0
1398*4882a593Smuzhiyun 		} request;
1399*4882a593Smuzhiyun 		struct {
1400*4882a593Smuzhiyun 			uint32_t word0;
1401*4882a593Smuzhiyun 		} response;
1402*4882a593Smuzhiyun 	} u;
1403*4882a593Smuzhiyun };
1404*4882a593Smuzhiyun 
1405*4882a593Smuzhiyun struct wq_context {
1406*4882a593Smuzhiyun 	uint32_t reserved0;
1407*4882a593Smuzhiyun 	uint32_t reserved1;
1408*4882a593Smuzhiyun 	uint32_t reserved2;
1409*4882a593Smuzhiyun 	uint32_t reserved3;
1410*4882a593Smuzhiyun };
1411*4882a593Smuzhiyun 
1412*4882a593Smuzhiyun struct lpfc_mbx_wq_create {
1413*4882a593Smuzhiyun 	struct mbox_header header;
1414*4882a593Smuzhiyun 	union {
1415*4882a593Smuzhiyun 		struct {	/* Version 0 Request */
1416*4882a593Smuzhiyun 			uint32_t word0;
1417*4882a593Smuzhiyun #define lpfc_mbx_wq_create_num_pages_SHIFT	0
1418*4882a593Smuzhiyun #define lpfc_mbx_wq_create_num_pages_MASK	0x000000FF
1419*4882a593Smuzhiyun #define lpfc_mbx_wq_create_num_pages_WORD	word0
1420*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dua_SHIFT		8
1421*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dua_MASK		0x00000001
1422*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dua_WORD		word0
1423*4882a593Smuzhiyun #define lpfc_mbx_wq_create_cq_id_SHIFT		16
1424*4882a593Smuzhiyun #define lpfc_mbx_wq_create_cq_id_MASK		0x0000FFFF
1425*4882a593Smuzhiyun #define lpfc_mbx_wq_create_cq_id_WORD		word0
1426*4882a593Smuzhiyun 			struct dma_address page[LPFC_MAX_WQ_PAGE_V0];
1427*4882a593Smuzhiyun 			uint32_t word9;
1428*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bua_SHIFT		0
1429*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bua_MASK		0x00000001
1430*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bua_WORD		word9
1431*4882a593Smuzhiyun #define lpfc_mbx_wq_create_ulp_num_SHIFT	8
1432*4882a593Smuzhiyun #define lpfc_mbx_wq_create_ulp_num_MASK		0x000000FF
1433*4882a593Smuzhiyun #define lpfc_mbx_wq_create_ulp_num_WORD		word9
1434*4882a593Smuzhiyun 		} request;
1435*4882a593Smuzhiyun 		struct {	/* Version 1 Request */
1436*4882a593Smuzhiyun 			uint32_t word0;	/* Word 0 is the same as in v0 */
1437*4882a593Smuzhiyun 			uint32_t word1;
1438*4882a593Smuzhiyun #define lpfc_mbx_wq_create_page_size_SHIFT	0
1439*4882a593Smuzhiyun #define lpfc_mbx_wq_create_page_size_MASK	0x000000FF
1440*4882a593Smuzhiyun #define lpfc_mbx_wq_create_page_size_WORD	word1
1441*4882a593Smuzhiyun #define LPFC_WQ_PAGE_SIZE_4096	0x1
1442*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_req_SHIFT	15
1443*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_req_MASK		0x00000001
1444*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_req_WORD		word1
1445*4882a593Smuzhiyun #define lpfc_mbx_wq_create_doe_SHIFT		14
1446*4882a593Smuzhiyun #define lpfc_mbx_wq_create_doe_MASK		0x00000001
1447*4882a593Smuzhiyun #define lpfc_mbx_wq_create_doe_WORD		word1
1448*4882a593Smuzhiyun #define lpfc_mbx_wq_create_toe_SHIFT		13
1449*4882a593Smuzhiyun #define lpfc_mbx_wq_create_toe_MASK		0x00000001
1450*4882a593Smuzhiyun #define lpfc_mbx_wq_create_toe_WORD		word1
1451*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_size_SHIFT	8
1452*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_size_MASK	0x0000000F
1453*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_size_WORD	word1
1454*4882a593Smuzhiyun #define LPFC_WQ_WQE_SIZE_64	0x5
1455*4882a593Smuzhiyun #define LPFC_WQ_WQE_SIZE_128	0x6
1456*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_count_SHIFT	16
1457*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_count_MASK	0x0000FFFF
1458*4882a593Smuzhiyun #define lpfc_mbx_wq_create_wqe_count_WORD	word1
1459*4882a593Smuzhiyun 			uint32_t word2;
1460*4882a593Smuzhiyun 			struct dma_address page[LPFC_MAX_WQ_PAGE-1];
1461*4882a593Smuzhiyun 		} request_1;
1462*4882a593Smuzhiyun 		struct {
1463*4882a593Smuzhiyun 			uint32_t word0;
1464*4882a593Smuzhiyun #define lpfc_mbx_wq_create_q_id_SHIFT	0
1465*4882a593Smuzhiyun #define lpfc_mbx_wq_create_q_id_MASK	0x0000FFFF
1466*4882a593Smuzhiyun #define lpfc_mbx_wq_create_q_id_WORD	word0
1467*4882a593Smuzhiyun 			uint32_t doorbell_offset;
1468*4882a593Smuzhiyun 			uint32_t word2;
1469*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bar_set_SHIFT	0
1470*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bar_set_MASK		0x0000FFFF
1471*4882a593Smuzhiyun #define lpfc_mbx_wq_create_bar_set_WORD		word2
1472*4882a593Smuzhiyun #define WQ_PCI_BAR_0_AND_1	0x00
1473*4882a593Smuzhiyun #define WQ_PCI_BAR_2_AND_3	0x01
1474*4882a593Smuzhiyun #define WQ_PCI_BAR_4_AND_5	0x02
1475*4882a593Smuzhiyun #define lpfc_mbx_wq_create_db_format_SHIFT	16
1476*4882a593Smuzhiyun #define lpfc_mbx_wq_create_db_format_MASK	0x0000FFFF
1477*4882a593Smuzhiyun #define lpfc_mbx_wq_create_db_format_WORD	word2
1478*4882a593Smuzhiyun 		} response;
1479*4882a593Smuzhiyun 		struct {
1480*4882a593Smuzhiyun 			uint32_t word0;
1481*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_rsp_SHIFT	31
1482*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_rsp_MASK		0x00000001
1483*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_rsp_WORD		word0
1484*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_q_id_SHIFT	0
1485*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_q_id_MASK		0x0000FFFF
1486*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_q_id_WORD		word0
1487*4882a593Smuzhiyun 			uint32_t word1;
1488*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_bar_set_SHIFT	0
1489*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_bar_set_MASK	0x0000000F
1490*4882a593Smuzhiyun #define lpfc_mbx_wq_create_v1_bar_set_WORD	word1
1491*4882a593Smuzhiyun 			uint32_t doorbell_offset;
1492*4882a593Smuzhiyun 			uint32_t word3;
1493*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_id_SHIFT		16
1494*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_id_MASK		0x0000001F
1495*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_id_WORD		word3
1496*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_bar_SHIFT	0
1497*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_bar_MASK		0x0000000F
1498*4882a593Smuzhiyun #define lpfc_mbx_wq_create_dpp_bar_WORD		word3
1499*4882a593Smuzhiyun 			uint32_t dpp_offset;
1500*4882a593Smuzhiyun 		} response_1;
1501*4882a593Smuzhiyun 	} u;
1502*4882a593Smuzhiyun };
1503*4882a593Smuzhiyun 
1504*4882a593Smuzhiyun struct lpfc_mbx_wq_destroy {
1505*4882a593Smuzhiyun 	struct mbox_header header;
1506*4882a593Smuzhiyun 	union {
1507*4882a593Smuzhiyun 		struct {
1508*4882a593Smuzhiyun 			uint32_t word0;
1509*4882a593Smuzhiyun #define lpfc_mbx_wq_destroy_q_id_SHIFT	0
1510*4882a593Smuzhiyun #define lpfc_mbx_wq_destroy_q_id_MASK	0x0000FFFF
1511*4882a593Smuzhiyun #define lpfc_mbx_wq_destroy_q_id_WORD	word0
1512*4882a593Smuzhiyun 		} request;
1513*4882a593Smuzhiyun 		struct {
1514*4882a593Smuzhiyun 			uint32_t word0;
1515*4882a593Smuzhiyun 		} response;
1516*4882a593Smuzhiyun 	} u;
1517*4882a593Smuzhiyun };
1518*4882a593Smuzhiyun 
1519*4882a593Smuzhiyun #define LPFC_HDR_BUF_SIZE 128
1520*4882a593Smuzhiyun #define LPFC_DATA_BUF_SIZE 2048
1521*4882a593Smuzhiyun #define LPFC_NVMET_DATA_BUF_SIZE 128
1522*4882a593Smuzhiyun struct rq_context {
1523*4882a593Smuzhiyun 	uint32_t word0;
1524*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_SHIFT	16	/* Version 0 Only */
1525*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_MASK	0x0000000F
1526*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_WORD	word0
1527*4882a593Smuzhiyun #define LPFC_RQ_RING_SIZE_512		9	/* 512 entries */
1528*4882a593Smuzhiyun #define LPFC_RQ_RING_SIZE_1024		10	/* 1024 entries */
1529*4882a593Smuzhiyun #define LPFC_RQ_RING_SIZE_2048		11	/* 2048 entries */
1530*4882a593Smuzhiyun #define LPFC_RQ_RING_SIZE_4096		12	/* 4096 entries */
1531*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_1_SHIFT	16	/* Version 1-2 Only */
1532*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_1_MASK	0x0000FFFF
1533*4882a593Smuzhiyun #define lpfc_rq_context_rqe_count_1_WORD	word0
1534*4882a593Smuzhiyun #define lpfc_rq_context_rqe_size_SHIFT	8		/* Version 1-2 Only */
1535*4882a593Smuzhiyun #define lpfc_rq_context_rqe_size_MASK	0x0000000F
1536*4882a593Smuzhiyun #define lpfc_rq_context_rqe_size_WORD	word0
1537*4882a593Smuzhiyun #define LPFC_RQE_SIZE_8		2
1538*4882a593Smuzhiyun #define LPFC_RQE_SIZE_16	3
1539*4882a593Smuzhiyun #define LPFC_RQE_SIZE_32	4
1540*4882a593Smuzhiyun #define LPFC_RQE_SIZE_64	5
1541*4882a593Smuzhiyun #define LPFC_RQE_SIZE_128	6
1542*4882a593Smuzhiyun #define lpfc_rq_context_page_size_SHIFT	0		/* Version 1 Only */
1543*4882a593Smuzhiyun #define lpfc_rq_context_page_size_MASK	0x000000FF
1544*4882a593Smuzhiyun #define lpfc_rq_context_page_size_WORD	word0
1545*4882a593Smuzhiyun #define	LPFC_RQ_PAGE_SIZE_4096	0x1
1546*4882a593Smuzhiyun 	uint32_t word1;
1547*4882a593Smuzhiyun #define lpfc_rq_context_data_size_SHIFT	16		/* Version 2 Only */
1548*4882a593Smuzhiyun #define lpfc_rq_context_data_size_MASK	0x0000FFFF
1549*4882a593Smuzhiyun #define lpfc_rq_context_data_size_WORD	word1
1550*4882a593Smuzhiyun #define lpfc_rq_context_hdr_size_SHIFT	0		/* Version 2 Only */
1551*4882a593Smuzhiyun #define lpfc_rq_context_hdr_size_MASK	0x0000FFFF
1552*4882a593Smuzhiyun #define lpfc_rq_context_hdr_size_WORD	word1
1553*4882a593Smuzhiyun 	uint32_t word2;
1554*4882a593Smuzhiyun #define lpfc_rq_context_cq_id_SHIFT	16
1555*4882a593Smuzhiyun #define lpfc_rq_context_cq_id_MASK	0x000003FF
1556*4882a593Smuzhiyun #define lpfc_rq_context_cq_id_WORD	word2
1557*4882a593Smuzhiyun #define lpfc_rq_context_buf_size_SHIFT	0
1558*4882a593Smuzhiyun #define lpfc_rq_context_buf_size_MASK	0x0000FFFF
1559*4882a593Smuzhiyun #define lpfc_rq_context_buf_size_WORD	word2
1560*4882a593Smuzhiyun #define lpfc_rq_context_base_cq_SHIFT	0		/* Version 2 Only */
1561*4882a593Smuzhiyun #define lpfc_rq_context_base_cq_MASK	0x0000FFFF
1562*4882a593Smuzhiyun #define lpfc_rq_context_base_cq_WORD	word2
1563*4882a593Smuzhiyun 	uint32_t buffer_size;				/* Version 1 Only */
1564*4882a593Smuzhiyun };
1565*4882a593Smuzhiyun 
1566*4882a593Smuzhiyun struct lpfc_mbx_rq_create {
1567*4882a593Smuzhiyun 	struct mbox_header header;
1568*4882a593Smuzhiyun 	union {
1569*4882a593Smuzhiyun 		struct {
1570*4882a593Smuzhiyun 			uint32_t word0;
1571*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_SHIFT	0
1572*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_MASK	0x0000FFFF
1573*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_WORD	word0
1574*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_SHIFT		16
1575*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_MASK		0x00000001
1576*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_WORD		word0
1577*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_SHIFT		17
1578*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_MASK		0x00000001
1579*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_WORD		word0
1580*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_SHIFT	24
1581*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_MASK		0x000000FF
1582*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_WORD		word0
1583*4882a593Smuzhiyun 			struct rq_context context;
1584*4882a593Smuzhiyun 			struct dma_address page[LPFC_MAX_RQ_PAGE];
1585*4882a593Smuzhiyun 		} request;
1586*4882a593Smuzhiyun 		struct {
1587*4882a593Smuzhiyun 			uint32_t word0;
1588*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_SHIFT	16
1589*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_MASK	0x0000FFFF
1590*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_WORD	word0
1591*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_SHIFT		0
1592*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_MASK		0x0000FFFF
1593*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_WORD		word0
1594*4882a593Smuzhiyun 			uint32_t doorbell_offset;
1595*4882a593Smuzhiyun 			uint32_t word2;
1596*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_SHIFT	0
1597*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_MASK		0x0000FFFF
1598*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_WORD		word2
1599*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_SHIFT	16
1600*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_MASK	0x0000FFFF
1601*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_WORD	word2
1602*4882a593Smuzhiyun 		} response;
1603*4882a593Smuzhiyun 	} u;
1604*4882a593Smuzhiyun };
1605*4882a593Smuzhiyun 
1606*4882a593Smuzhiyun struct lpfc_mbx_rq_create_v2 {
1607*4882a593Smuzhiyun 	union  lpfc_sli4_cfg_shdr cfg_shdr;
1608*4882a593Smuzhiyun 	union {
1609*4882a593Smuzhiyun 		struct {
1610*4882a593Smuzhiyun 			uint32_t word0;
1611*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_SHIFT	0
1612*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_MASK	0x0000FFFF
1613*4882a593Smuzhiyun #define lpfc_mbx_rq_create_num_pages_WORD	word0
1614*4882a593Smuzhiyun #define lpfc_mbx_rq_create_rq_cnt_SHIFT		16
1615*4882a593Smuzhiyun #define lpfc_mbx_rq_create_rq_cnt_MASK		0x000000FF
1616*4882a593Smuzhiyun #define lpfc_mbx_rq_create_rq_cnt_WORD		word0
1617*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_SHIFT		16
1618*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_MASK		0x00000001
1619*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dua_WORD		word0
1620*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_SHIFT		17
1621*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_MASK		0x00000001
1622*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bqu_WORD		word0
1623*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_SHIFT	24
1624*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_MASK		0x000000FF
1625*4882a593Smuzhiyun #define lpfc_mbx_rq_create_ulp_num_WORD		word0
1626*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dim_SHIFT		29
1627*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dim_MASK		0x00000001
1628*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dim_WORD		word0
1629*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dfd_SHIFT		30
1630*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dfd_MASK		0x00000001
1631*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dfd_WORD		word0
1632*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dnb_SHIFT		31
1633*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dnb_MASK		0x00000001
1634*4882a593Smuzhiyun #define lpfc_mbx_rq_create_dnb_WORD		word0
1635*4882a593Smuzhiyun 			struct rq_context context;
1636*4882a593Smuzhiyun 			struct dma_address page[1];
1637*4882a593Smuzhiyun 		} request;
1638*4882a593Smuzhiyun 		struct {
1639*4882a593Smuzhiyun 			uint32_t word0;
1640*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_SHIFT	16
1641*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_MASK	0x0000FFFF
1642*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_cnt_v2_WORD	word0
1643*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_SHIFT		0
1644*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_MASK		0x0000FFFF
1645*4882a593Smuzhiyun #define lpfc_mbx_rq_create_q_id_WORD		word0
1646*4882a593Smuzhiyun 			uint32_t doorbell_offset;
1647*4882a593Smuzhiyun 			uint32_t word2;
1648*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_SHIFT	0
1649*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_MASK		0x0000FFFF
1650*4882a593Smuzhiyun #define lpfc_mbx_rq_create_bar_set_WORD		word2
1651*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_SHIFT	16
1652*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_MASK	0x0000FFFF
1653*4882a593Smuzhiyun #define lpfc_mbx_rq_create_db_format_WORD	word2
1654*4882a593Smuzhiyun 		} response;
1655*4882a593Smuzhiyun 	} u;
1656*4882a593Smuzhiyun };
1657*4882a593Smuzhiyun 
1658*4882a593Smuzhiyun struct lpfc_mbx_rq_destroy {
1659*4882a593Smuzhiyun 	struct mbox_header header;
1660*4882a593Smuzhiyun 	union {
1661*4882a593Smuzhiyun 		struct {
1662*4882a593Smuzhiyun 			uint32_t word0;
1663*4882a593Smuzhiyun #define lpfc_mbx_rq_destroy_q_id_SHIFT	0
1664*4882a593Smuzhiyun #define lpfc_mbx_rq_destroy_q_id_MASK	0x0000FFFF
1665*4882a593Smuzhiyun #define lpfc_mbx_rq_destroy_q_id_WORD	word0
1666*4882a593Smuzhiyun 		} request;
1667*4882a593Smuzhiyun 		struct {
1668*4882a593Smuzhiyun 			uint32_t word0;
1669*4882a593Smuzhiyun 		} response;
1670*4882a593Smuzhiyun 	} u;
1671*4882a593Smuzhiyun };
1672*4882a593Smuzhiyun 
1673*4882a593Smuzhiyun struct mq_context {
1674*4882a593Smuzhiyun 	uint32_t word0;
1675*4882a593Smuzhiyun #define lpfc_mq_context_cq_id_SHIFT	22 	/* Version 0 Only */
1676*4882a593Smuzhiyun #define lpfc_mq_context_cq_id_MASK	0x000003FF
1677*4882a593Smuzhiyun #define lpfc_mq_context_cq_id_WORD	word0
1678*4882a593Smuzhiyun #define lpfc_mq_context_ring_size_SHIFT	16
1679*4882a593Smuzhiyun #define lpfc_mq_context_ring_size_MASK	0x0000000F
1680*4882a593Smuzhiyun #define lpfc_mq_context_ring_size_WORD	word0
1681*4882a593Smuzhiyun #define LPFC_MQ_RING_SIZE_16		0x5
1682*4882a593Smuzhiyun #define LPFC_MQ_RING_SIZE_32		0x6
1683*4882a593Smuzhiyun #define LPFC_MQ_RING_SIZE_64		0x7
1684*4882a593Smuzhiyun #define LPFC_MQ_RING_SIZE_128		0x8
1685*4882a593Smuzhiyun 	uint32_t word1;
1686*4882a593Smuzhiyun #define lpfc_mq_context_valid_SHIFT	31
1687*4882a593Smuzhiyun #define lpfc_mq_context_valid_MASK	0x00000001
1688*4882a593Smuzhiyun #define lpfc_mq_context_valid_WORD	word1
1689*4882a593Smuzhiyun 	uint32_t reserved2;
1690*4882a593Smuzhiyun 	uint32_t reserved3;
1691*4882a593Smuzhiyun };
1692*4882a593Smuzhiyun 
1693*4882a593Smuzhiyun struct lpfc_mbx_mq_create {
1694*4882a593Smuzhiyun 	struct mbox_header header;
1695*4882a593Smuzhiyun 	union {
1696*4882a593Smuzhiyun 		struct {
1697*4882a593Smuzhiyun 			uint32_t word0;
1698*4882a593Smuzhiyun #define lpfc_mbx_mq_create_num_pages_SHIFT	0
1699*4882a593Smuzhiyun #define lpfc_mbx_mq_create_num_pages_MASK	0x0000FFFF
1700*4882a593Smuzhiyun #define lpfc_mbx_mq_create_num_pages_WORD	word0
1701*4882a593Smuzhiyun 			struct mq_context context;
1702*4882a593Smuzhiyun 			struct dma_address page[LPFC_MAX_MQ_PAGE];
1703*4882a593Smuzhiyun 		} request;
1704*4882a593Smuzhiyun 		struct {
1705*4882a593Smuzhiyun 			uint32_t word0;
1706*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_SHIFT	0
1707*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_MASK	0x0000FFFF
1708*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_WORD	word0
1709*4882a593Smuzhiyun 		} response;
1710*4882a593Smuzhiyun 	} u;
1711*4882a593Smuzhiyun };
1712*4882a593Smuzhiyun 
1713*4882a593Smuzhiyun struct lpfc_mbx_mq_create_ext {
1714*4882a593Smuzhiyun 	struct mbox_header header;
1715*4882a593Smuzhiyun 	union {
1716*4882a593Smuzhiyun 		struct {
1717*4882a593Smuzhiyun 			uint32_t word0;
1718*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_num_pages_SHIFT	0
1719*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_num_pages_MASK	0x0000FFFF
1720*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_num_pages_WORD	word0
1721*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_cq_id_SHIFT	16	/* Version 1 Only */
1722*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_cq_id_MASK	0x0000FFFF
1723*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_cq_id_WORD	word0
1724*4882a593Smuzhiyun 			uint32_t async_evt_bmap;
1725*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_link_SHIFT	LPFC_TRAILER_CODE_LINK
1726*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_link_MASK	0x00000001
1727*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_link_WORD	async_evt_bmap
1728*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_NO_LINK	0x0
1729*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_10_MBIT	0x1
1730*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_100_MBIT	0x2
1731*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_1_GBIT	0x3
1732*4882a593Smuzhiyun #define LPFC_EVT_CODE_LINK_10_GBIT	0x4
1733*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fip_SHIFT	LPFC_TRAILER_CODE_FCOE
1734*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fip_MASK	0x00000001
1735*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fip_WORD	async_evt_bmap
1736*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_group5_SHIFT	LPFC_TRAILER_CODE_GRP5
1737*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_group5_MASK	0x00000001
1738*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_group5_WORD	async_evt_bmap
1739*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fc_SHIFT	LPFC_TRAILER_CODE_FC
1740*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fc_MASK	0x00000001
1741*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_fc_WORD	async_evt_bmap
1742*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_NO_LINK	0x0
1743*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_1_GBAUD	0x1
1744*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_2_GBAUD	0x2
1745*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_4_GBAUD	0x4
1746*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_8_GBAUD	0x8
1747*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_10_GBAUD	0xA
1748*4882a593Smuzhiyun #define LPFC_EVT_CODE_FC_16_GBAUD	0x10
1749*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_sli_SHIFT	LPFC_TRAILER_CODE_SLI
1750*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_sli_MASK	0x00000001
1751*4882a593Smuzhiyun #define lpfc_mbx_mq_create_ext_async_evt_sli_WORD	async_evt_bmap
1752*4882a593Smuzhiyun 			struct mq_context context;
1753*4882a593Smuzhiyun 			struct dma_address page[LPFC_MAX_MQ_PAGE];
1754*4882a593Smuzhiyun 		} request;
1755*4882a593Smuzhiyun 		struct {
1756*4882a593Smuzhiyun 			uint32_t word0;
1757*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_SHIFT	0
1758*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_MASK	0x0000FFFF
1759*4882a593Smuzhiyun #define lpfc_mbx_mq_create_q_id_WORD	word0
1760*4882a593Smuzhiyun 		} response;
1761*4882a593Smuzhiyun 	} u;
1762*4882a593Smuzhiyun #define LPFC_ASYNC_EVENT_LINK_STATE	0x2
1763*4882a593Smuzhiyun #define LPFC_ASYNC_EVENT_FCF_STATE	0x4
1764*4882a593Smuzhiyun #define LPFC_ASYNC_EVENT_GROUP5		0x20
1765*4882a593Smuzhiyun };
1766*4882a593Smuzhiyun 
1767*4882a593Smuzhiyun struct lpfc_mbx_mq_destroy {
1768*4882a593Smuzhiyun 	struct mbox_header header;
1769*4882a593Smuzhiyun 	union {
1770*4882a593Smuzhiyun 		struct {
1771*4882a593Smuzhiyun 			uint32_t word0;
1772*4882a593Smuzhiyun #define lpfc_mbx_mq_destroy_q_id_SHIFT	0
1773*4882a593Smuzhiyun #define lpfc_mbx_mq_destroy_q_id_MASK	0x0000FFFF
1774*4882a593Smuzhiyun #define lpfc_mbx_mq_destroy_q_id_WORD	word0
1775*4882a593Smuzhiyun 		} request;
1776*4882a593Smuzhiyun 		struct {
1777*4882a593Smuzhiyun 			uint32_t word0;
1778*4882a593Smuzhiyun 		} response;
1779*4882a593Smuzhiyun 	} u;
1780*4882a593Smuzhiyun };
1781*4882a593Smuzhiyun 
1782*4882a593Smuzhiyun /* Start Gen 2 SLI4 Mailbox definitions: */
1783*4882a593Smuzhiyun 
1784*4882a593Smuzhiyun /* Define allocate-ready Gen 2 SLI4 FCoE Resource Extent Types. */
1785*4882a593Smuzhiyun #define LPFC_RSC_TYPE_FCOE_VFI	0x20
1786*4882a593Smuzhiyun #define LPFC_RSC_TYPE_FCOE_VPI	0x21
1787*4882a593Smuzhiyun #define LPFC_RSC_TYPE_FCOE_RPI	0x22
1788*4882a593Smuzhiyun #define LPFC_RSC_TYPE_FCOE_XRI	0x23
1789*4882a593Smuzhiyun 
1790*4882a593Smuzhiyun struct lpfc_mbx_get_rsrc_extent_info {
1791*4882a593Smuzhiyun 	struct mbox_header header;
1792*4882a593Smuzhiyun 	union {
1793*4882a593Smuzhiyun 		struct {
1794*4882a593Smuzhiyun 			uint32_t word4;
1795*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_type_SHIFT	0
1796*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_type_MASK		0x0000FFFF
1797*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_type_WORD		word4
1798*4882a593Smuzhiyun 		} req;
1799*4882a593Smuzhiyun 		struct {
1800*4882a593Smuzhiyun 			uint32_t word4;
1801*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_cnt_SHIFT		0
1802*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_cnt_MASK		0x0000FFFF
1803*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_cnt_WORD		word4
1804*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_size_SHIFT	16
1805*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_size_MASK		0x0000FFFF
1806*4882a593Smuzhiyun #define lpfc_mbx_get_rsrc_extent_info_size_WORD		word4
1807*4882a593Smuzhiyun 		} rsp;
1808*4882a593Smuzhiyun 	} u;
1809*4882a593Smuzhiyun };
1810*4882a593Smuzhiyun 
1811*4882a593Smuzhiyun struct lpfc_mbx_query_fw_config {
1812*4882a593Smuzhiyun 	struct mbox_header header;
1813*4882a593Smuzhiyun 	struct {
1814*4882a593Smuzhiyun 		uint32_t config_number;
1815*4882a593Smuzhiyun #define	LPFC_FC_FCOE		0x00000007
1816*4882a593Smuzhiyun 		uint32_t asic_revision;
1817*4882a593Smuzhiyun 		uint32_t physical_port;
1818*4882a593Smuzhiyun 		uint32_t function_mode;
1819*4882a593Smuzhiyun #define LPFC_FCOE_INI_MODE	0x00000040
1820*4882a593Smuzhiyun #define LPFC_FCOE_TGT_MODE	0x00000080
1821*4882a593Smuzhiyun #define LPFC_DUA_MODE		0x00000800
1822*4882a593Smuzhiyun 		uint32_t ulp0_mode;
1823*4882a593Smuzhiyun #define LPFC_ULP_FCOE_INIT_MODE	0x00000040
1824*4882a593Smuzhiyun #define LPFC_ULP_FCOE_TGT_MODE	0x00000080
1825*4882a593Smuzhiyun 		uint32_t ulp0_nap_words[12];
1826*4882a593Smuzhiyun 		uint32_t ulp1_mode;
1827*4882a593Smuzhiyun 		uint32_t ulp1_nap_words[12];
1828*4882a593Smuzhiyun 		uint32_t function_capabilities;
1829*4882a593Smuzhiyun 		uint32_t cqid_base;
1830*4882a593Smuzhiyun 		uint32_t cqid_tot;
1831*4882a593Smuzhiyun 		uint32_t eqid_base;
1832*4882a593Smuzhiyun 		uint32_t eqid_tot;
1833*4882a593Smuzhiyun 		uint32_t ulp0_nap2_words[2];
1834*4882a593Smuzhiyun 		uint32_t ulp1_nap2_words[2];
1835*4882a593Smuzhiyun 	} rsp;
1836*4882a593Smuzhiyun };
1837*4882a593Smuzhiyun 
1838*4882a593Smuzhiyun struct lpfc_mbx_set_beacon_config {
1839*4882a593Smuzhiyun 	struct mbox_header header;
1840*4882a593Smuzhiyun 	uint32_t word4;
1841*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_num_SHIFT		0
1842*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_num_MASK		0x0000003F
1843*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_num_WORD		word4
1844*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_type_SHIFT		6
1845*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_type_MASK		0x00000003
1846*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_port_type_WORD		word4
1847*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_state_SHIFT			8
1848*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_state_MASK			0x000000FF
1849*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_state_WORD			word4
1850*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_SHIFT		16
1851*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_MASK		0x000000FF
1852*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_WORD		word4
1853*4882a593Smuzhiyun 
1854*4882a593Smuzhiyun /* COMMON_SET_BEACON_CONFIG_V1 */
1855*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_v1_SHIFT		16
1856*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_v1_MASK		0x0000FFFF
1857*4882a593Smuzhiyun #define lpfc_mbx_set_beacon_duration_v1_WORD		word4
1858*4882a593Smuzhiyun 	uint32_t word5;  /* RESERVED  */
1859*4882a593Smuzhiyun };
1860*4882a593Smuzhiyun 
1861*4882a593Smuzhiyun struct lpfc_id_range {
1862*4882a593Smuzhiyun 	uint32_t word5;
1863*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_0_SHIFT	0
1864*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_0_MASK	0x0000FFFF
1865*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_0_WORD	word5
1866*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_1_SHIFT	16
1867*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_1_MASK	0x0000FFFF
1868*4882a593Smuzhiyun #define lpfc_mbx_rsrc_id_word4_1_WORD	word5
1869*4882a593Smuzhiyun };
1870*4882a593Smuzhiyun 
1871*4882a593Smuzhiyun struct lpfc_mbx_set_link_diag_state {
1872*4882a593Smuzhiyun 	struct mbox_header header;
1873*4882a593Smuzhiyun 	union {
1874*4882a593Smuzhiyun 		struct {
1875*4882a593Smuzhiyun 			uint32_t word0;
1876*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_SHIFT	0
1877*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_MASK	0x00000001
1878*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_WORD	word0
1879*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_bit_valid_SHIFT	2
1880*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_bit_valid_MASK	0x00000001
1881*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_diag_bit_valid_WORD	word0
1882*4882a593Smuzhiyun #define LPFC_DIAG_STATE_DIAG_BIT_VALID_NO_CHANGE	0
1883*4882a593Smuzhiyun #define LPFC_DIAG_STATE_DIAG_BIT_VALID_CHANGE		1
1884*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_num_SHIFT	16
1885*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_num_MASK	0x0000003F
1886*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_num_WORD	word0
1887*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_type_SHIFT 22
1888*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_type_MASK	0x00000003
1889*4882a593Smuzhiyun #define lpfc_mbx_set_diag_state_link_type_WORD	word0
1890*4882a593Smuzhiyun 		} req;
1891*4882a593Smuzhiyun 		struct {
1892*4882a593Smuzhiyun 			uint32_t word0;
1893*4882a593Smuzhiyun 		} rsp;
1894*4882a593Smuzhiyun 	} u;
1895*4882a593Smuzhiyun };
1896*4882a593Smuzhiyun 
1897*4882a593Smuzhiyun struct lpfc_mbx_set_link_diag_loopback {
1898*4882a593Smuzhiyun 	struct mbox_header header;
1899*4882a593Smuzhiyun 	union {
1900*4882a593Smuzhiyun 		struct {
1901*4882a593Smuzhiyun 			uint32_t word0;
1902*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_type_SHIFT		0
1903*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_type_MASK		0x00000003
1904*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_type_WORD		word0
1905*4882a593Smuzhiyun #define LPFC_DIAG_LOOPBACK_TYPE_DISABLE			0x0
1906*4882a593Smuzhiyun #define LPFC_DIAG_LOOPBACK_TYPE_INTERNAL		0x1
1907*4882a593Smuzhiyun #define LPFC_DIAG_LOOPBACK_TYPE_SERDES			0x2
1908*4882a593Smuzhiyun #define LPFC_DIAG_LOOPBACK_TYPE_EXTERNAL_TRUNKED	0x3
1909*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_num_SHIFT		16
1910*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_num_MASK		0x0000003F
1911*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_num_WORD		word0
1912*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_type_SHIFT		22
1913*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_type_MASK		0x00000003
1914*4882a593Smuzhiyun #define lpfc_mbx_set_diag_lpbk_link_type_WORD		word0
1915*4882a593Smuzhiyun 		} req;
1916*4882a593Smuzhiyun 		struct {
1917*4882a593Smuzhiyun 			uint32_t word0;
1918*4882a593Smuzhiyun 		} rsp;
1919*4882a593Smuzhiyun 	} u;
1920*4882a593Smuzhiyun };
1921*4882a593Smuzhiyun 
1922*4882a593Smuzhiyun struct lpfc_mbx_run_link_diag_test {
1923*4882a593Smuzhiyun 	struct mbox_header header;
1924*4882a593Smuzhiyun 	union {
1925*4882a593Smuzhiyun 		struct {
1926*4882a593Smuzhiyun 			uint32_t word0;
1927*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_num_SHIFT	16
1928*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_num_MASK	0x0000003F
1929*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_num_WORD	word0
1930*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_type_SHIFT	22
1931*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_type_MASK	0x00000003
1932*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_link_type_WORD	word0
1933*4882a593Smuzhiyun 			uint32_t word1;
1934*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_id_SHIFT	0
1935*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_id_MASK	0x0000FFFF
1936*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_id_WORD	word1
1937*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_loops_SHIFT	16
1938*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_loops_MASK	0x0000FFFF
1939*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_loops_WORD	word1
1940*4882a593Smuzhiyun 			uint32_t word2;
1941*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_ver_SHIFT	0
1942*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_ver_MASK	0x0000FFFF
1943*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_test_ver_WORD	word2
1944*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_err_act_SHIFT	16
1945*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_err_act_MASK	0x000000FF
1946*4882a593Smuzhiyun #define lpfc_mbx_run_diag_test_err_act_WORD	word2
1947*4882a593Smuzhiyun 		} req;
1948*4882a593Smuzhiyun 		struct {
1949*4882a593Smuzhiyun 			uint32_t word0;
1950*4882a593Smuzhiyun 		} rsp;
1951*4882a593Smuzhiyun 	} u;
1952*4882a593Smuzhiyun };
1953*4882a593Smuzhiyun 
1954*4882a593Smuzhiyun /*
1955*4882a593Smuzhiyun  * struct lpfc_mbx_alloc_rsrc_extents:
1956*4882a593Smuzhiyun  * A mbox is generically 256 bytes long. An SLI4_CONFIG mailbox requires
1957*4882a593Smuzhiyun  * 6 words of header + 4 words of shared subcommand header +
1958*4882a593Smuzhiyun  * 1 words of Extent-Opcode-specific header = 11 words or 44 bytes total.
1959*4882a593Smuzhiyun  *
1960*4882a593Smuzhiyun  * An embedded version of SLI4_CONFIG therefore has 256 - 44 = 212 bytes
1961*4882a593Smuzhiyun  * for extents payload.
1962*4882a593Smuzhiyun  *
1963*4882a593Smuzhiyun  * 212/2 (bytes per extent) = 106 extents.
1964*4882a593Smuzhiyun  * 106/2 (extents per word) = 53 words.
1965*4882a593Smuzhiyun  * lpfc_id_range id is statically size to 53.
1966*4882a593Smuzhiyun  *
1967*4882a593Smuzhiyun  * This mailbox definition is used for ALLOC or GET_ALLOCATED
1968*4882a593Smuzhiyun  * extent ranges.  For ALLOC, the type and cnt are required.
1969*4882a593Smuzhiyun  * For GET_ALLOCATED, only the type is required.
1970*4882a593Smuzhiyun  */
1971*4882a593Smuzhiyun struct lpfc_mbx_alloc_rsrc_extents {
1972*4882a593Smuzhiyun 	struct mbox_header header;
1973*4882a593Smuzhiyun 	union {
1974*4882a593Smuzhiyun 		struct {
1975*4882a593Smuzhiyun 			uint32_t word4;
1976*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_type_SHIFT	0
1977*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_type_MASK	0x0000FFFF
1978*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_type_WORD	word4
1979*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_cnt_SHIFT	16
1980*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_cnt_MASK	0x0000FFFF
1981*4882a593Smuzhiyun #define lpfc_mbx_alloc_rsrc_extents_cnt_WORD	word4
1982*4882a593Smuzhiyun 		} req;
1983*4882a593Smuzhiyun 		struct {
1984*4882a593Smuzhiyun 			uint32_t word4;
1985*4882a593Smuzhiyun #define lpfc_mbx_rsrc_cnt_SHIFT	0
1986*4882a593Smuzhiyun #define lpfc_mbx_rsrc_cnt_MASK	0x0000FFFF
1987*4882a593Smuzhiyun #define lpfc_mbx_rsrc_cnt_WORD	word4
1988*4882a593Smuzhiyun 			struct lpfc_id_range id[53];
1989*4882a593Smuzhiyun 		} rsp;
1990*4882a593Smuzhiyun 	} u;
1991*4882a593Smuzhiyun };
1992*4882a593Smuzhiyun 
1993*4882a593Smuzhiyun /*
1994*4882a593Smuzhiyun  * This is the non-embedded version of ALLOC or GET RSRC_EXTENTS. Word4 in this
1995*4882a593Smuzhiyun  * structure shares the same SHIFT/MASK/WORD defines provided in the
1996*4882a593Smuzhiyun  * mbx_alloc_rsrc_extents and mbx_get_alloc_rsrc_extents, word4, provided in
1997*4882a593Smuzhiyun  * the structures defined above.  This non-embedded structure provides for the
1998*4882a593Smuzhiyun  * maximum number of extents supported by the port.
1999*4882a593Smuzhiyun  */
2000*4882a593Smuzhiyun struct lpfc_mbx_nembed_rsrc_extent {
2001*4882a593Smuzhiyun 	union  lpfc_sli4_cfg_shdr cfg_shdr;
2002*4882a593Smuzhiyun 	uint32_t word4;
2003*4882a593Smuzhiyun 	struct lpfc_id_range id;
2004*4882a593Smuzhiyun };
2005*4882a593Smuzhiyun 
2006*4882a593Smuzhiyun struct lpfc_mbx_dealloc_rsrc_extents {
2007*4882a593Smuzhiyun 	struct mbox_header header;
2008*4882a593Smuzhiyun 	struct {
2009*4882a593Smuzhiyun 		uint32_t word4;
2010*4882a593Smuzhiyun #define lpfc_mbx_dealloc_rsrc_extents_type_SHIFT	0
2011*4882a593Smuzhiyun #define lpfc_mbx_dealloc_rsrc_extents_type_MASK		0x0000FFFF
2012*4882a593Smuzhiyun #define lpfc_mbx_dealloc_rsrc_extents_type_WORD		word4
2013*4882a593Smuzhiyun 	} req;
2014*4882a593Smuzhiyun 
2015*4882a593Smuzhiyun };
2016*4882a593Smuzhiyun 
2017*4882a593Smuzhiyun /* Start SLI4 FCoE specific mbox structures. */
2018*4882a593Smuzhiyun 
2019*4882a593Smuzhiyun struct lpfc_mbx_post_hdr_tmpl {
2020*4882a593Smuzhiyun 	struct mbox_header header;
2021*4882a593Smuzhiyun 	uint32_t word10;
2022*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_rpi_offset_SHIFT  0
2023*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_rpi_offset_MASK   0x0000FFFF
2024*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_rpi_offset_WORD   word10
2025*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_page_cnt_SHIFT   16
2026*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_page_cnt_MASK    0x0000FFFF
2027*4882a593Smuzhiyun #define lpfc_mbx_post_hdr_tmpl_page_cnt_WORD    word10
2028*4882a593Smuzhiyun 	uint32_t rpi_paddr_lo;
2029*4882a593Smuzhiyun 	uint32_t rpi_paddr_hi;
2030*4882a593Smuzhiyun };
2031*4882a593Smuzhiyun 
2032*4882a593Smuzhiyun struct sli4_sge {	/* SLI-4 */
2033*4882a593Smuzhiyun 	uint32_t addr_hi;
2034*4882a593Smuzhiyun 	uint32_t addr_lo;
2035*4882a593Smuzhiyun 
2036*4882a593Smuzhiyun 	uint32_t word2;
2037*4882a593Smuzhiyun #define lpfc_sli4_sge_offset_SHIFT	0
2038*4882a593Smuzhiyun #define lpfc_sli4_sge_offset_MASK	0x07FFFFFF
2039*4882a593Smuzhiyun #define lpfc_sli4_sge_offset_WORD	word2
2040*4882a593Smuzhiyun #define lpfc_sli4_sge_type_SHIFT	27
2041*4882a593Smuzhiyun #define lpfc_sli4_sge_type_MASK		0x0000000F
2042*4882a593Smuzhiyun #define lpfc_sli4_sge_type_WORD		word2
2043*4882a593Smuzhiyun #define LPFC_SGE_TYPE_DATA		0x0
2044*4882a593Smuzhiyun #define LPFC_SGE_TYPE_DIF		0x4
2045*4882a593Smuzhiyun #define LPFC_SGE_TYPE_LSP		0x5
2046*4882a593Smuzhiyun #define LPFC_SGE_TYPE_PEDIF		0x6
2047*4882a593Smuzhiyun #define LPFC_SGE_TYPE_PESEED		0x7
2048*4882a593Smuzhiyun #define LPFC_SGE_TYPE_DISEED		0x8
2049*4882a593Smuzhiyun #define LPFC_SGE_TYPE_ENC		0x9
2050*4882a593Smuzhiyun #define LPFC_SGE_TYPE_ATM		0xA
2051*4882a593Smuzhiyun #define LPFC_SGE_TYPE_SKIP		0xC
2052*4882a593Smuzhiyun #define lpfc_sli4_sge_last_SHIFT	31 /* Last SEG in the SGL sets it */
2053*4882a593Smuzhiyun #define lpfc_sli4_sge_last_MASK		0x00000001
2054*4882a593Smuzhiyun #define lpfc_sli4_sge_last_WORD		word2
2055*4882a593Smuzhiyun 	uint32_t sge_len;
2056*4882a593Smuzhiyun };
2057*4882a593Smuzhiyun 
2058*4882a593Smuzhiyun struct sli4_hybrid_sgl {
2059*4882a593Smuzhiyun 	struct list_head list_node;
2060*4882a593Smuzhiyun 	struct sli4_sge *dma_sgl;
2061*4882a593Smuzhiyun 	dma_addr_t dma_phys_sgl;
2062*4882a593Smuzhiyun };
2063*4882a593Smuzhiyun 
2064*4882a593Smuzhiyun struct fcp_cmd_rsp_buf {
2065*4882a593Smuzhiyun 	struct list_head list_node;
2066*4882a593Smuzhiyun 
2067*4882a593Smuzhiyun 	/* for storing cmd/rsp dma alloc'ed virt_addr */
2068*4882a593Smuzhiyun 	struct fcp_cmnd *fcp_cmnd;
2069*4882a593Smuzhiyun 	struct fcp_rsp *fcp_rsp;
2070*4882a593Smuzhiyun 
2071*4882a593Smuzhiyun 	/* for storing this cmd/rsp's dma mapped phys addr from per CPU pool */
2072*4882a593Smuzhiyun 	dma_addr_t fcp_cmd_rsp_dma_handle;
2073*4882a593Smuzhiyun };
2074*4882a593Smuzhiyun 
2075*4882a593Smuzhiyun struct sli4_sge_diseed {	/* SLI-4 */
2076*4882a593Smuzhiyun 	uint32_t ref_tag;
2077*4882a593Smuzhiyun 	uint32_t ref_tag_tran;
2078*4882a593Smuzhiyun 
2079*4882a593Smuzhiyun 	uint32_t word2;
2080*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptran_SHIFT	0
2081*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptran_MASK	0x0000FFFF
2082*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptran_WORD	word2
2083*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_af_SHIFT	24
2084*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_af_MASK	0x00000001
2085*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_af_WORD	word2
2086*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_na_SHIFT	25
2087*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_na_MASK	0x00000001
2088*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_na_WORD	word2
2089*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_hi_SHIFT	26
2090*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_hi_MASK	0x00000001
2091*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_hi_WORD	word2
2092*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_type_SHIFT	27
2093*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_type_MASK	0x0000000F
2094*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_type_WORD	word2
2095*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_last_SHIFT	31 /* Last SEG in the SGL sets it */
2096*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_last_MASK	0x00000001
2097*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_last_WORD	word2
2098*4882a593Smuzhiyun 	uint32_t word3;
2099*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptag_SHIFT	0
2100*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptag_MASK	0x0000FFFF
2101*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_apptag_WORD	word3
2102*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_bs_SHIFT	16
2103*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_bs_MASK	0x00000007
2104*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_bs_WORD	word3
2105*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ai_SHIFT	19
2106*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ai_MASK	0x00000001
2107*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ai_WORD	word3
2108*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_me_SHIFT	20
2109*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_me_MASK	0x00000001
2110*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_me_WORD	word3
2111*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_re_SHIFT	21
2112*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_re_MASK	0x00000001
2113*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_re_WORD	word3
2114*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ce_SHIFT	22
2115*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ce_MASK	0x00000001
2116*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_ce_WORD	word3
2117*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_nr_SHIFT	23
2118*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_nr_MASK	0x00000001
2119*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_nr_WORD	word3
2120*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_oprx_SHIFT	24
2121*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_oprx_MASK	0x0000000F
2122*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_oprx_WORD	word3
2123*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_optx_SHIFT	28
2124*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_optx_MASK	0x0000000F
2125*4882a593Smuzhiyun #define lpfc_sli4_sge_dif_optx_WORD	word3
2126*4882a593Smuzhiyun /* optx and oprx use BG_OP_IN defines in lpfc_hw.h */
2127*4882a593Smuzhiyun };
2128*4882a593Smuzhiyun 
2129*4882a593Smuzhiyun struct fcf_record {
2130*4882a593Smuzhiyun 	uint32_t max_rcv_size;
2131*4882a593Smuzhiyun 	uint32_t fka_adv_period;
2132*4882a593Smuzhiyun 	uint32_t fip_priority;
2133*4882a593Smuzhiyun 	uint32_t word3;
2134*4882a593Smuzhiyun #define lpfc_fcf_record_mac_0_SHIFT		0
2135*4882a593Smuzhiyun #define lpfc_fcf_record_mac_0_MASK		0x000000FF
2136*4882a593Smuzhiyun #define lpfc_fcf_record_mac_0_WORD		word3
2137*4882a593Smuzhiyun #define lpfc_fcf_record_mac_1_SHIFT		8
2138*4882a593Smuzhiyun #define lpfc_fcf_record_mac_1_MASK		0x000000FF
2139*4882a593Smuzhiyun #define lpfc_fcf_record_mac_1_WORD		word3
2140*4882a593Smuzhiyun #define lpfc_fcf_record_mac_2_SHIFT		16
2141*4882a593Smuzhiyun #define lpfc_fcf_record_mac_2_MASK		0x000000FF
2142*4882a593Smuzhiyun #define lpfc_fcf_record_mac_2_WORD		word3
2143*4882a593Smuzhiyun #define lpfc_fcf_record_mac_3_SHIFT		24
2144*4882a593Smuzhiyun #define lpfc_fcf_record_mac_3_MASK		0x000000FF
2145*4882a593Smuzhiyun #define lpfc_fcf_record_mac_3_WORD		word3
2146*4882a593Smuzhiyun 	uint32_t word4;
2147*4882a593Smuzhiyun #define lpfc_fcf_record_mac_4_SHIFT		0
2148*4882a593Smuzhiyun #define lpfc_fcf_record_mac_4_MASK		0x000000FF
2149*4882a593Smuzhiyun #define lpfc_fcf_record_mac_4_WORD		word4
2150*4882a593Smuzhiyun #define lpfc_fcf_record_mac_5_SHIFT		8
2151*4882a593Smuzhiyun #define lpfc_fcf_record_mac_5_MASK		0x000000FF
2152*4882a593Smuzhiyun #define lpfc_fcf_record_mac_5_WORD		word4
2153*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_avail_SHIFT		16
2154*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_avail_MASK		0x000000FF
2155*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_avail_WORD		word4
2156*4882a593Smuzhiyun #define lpfc_fcf_record_mac_addr_prov_SHIFT	24
2157*4882a593Smuzhiyun #define lpfc_fcf_record_mac_addr_prov_MASK	0x000000FF
2158*4882a593Smuzhiyun #define lpfc_fcf_record_mac_addr_prov_WORD	word4
2159*4882a593Smuzhiyun #define LPFC_FCF_FPMA           1 	/* Fabric Provided MAC Address */
2160*4882a593Smuzhiyun #define LPFC_FCF_SPMA           2       /* Server Provided MAC Address */
2161*4882a593Smuzhiyun 	uint32_t word5;
2162*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_0_SHIFT	0
2163*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_0_MASK		0x000000FF
2164*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_0_WORD		word5
2165*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_1_SHIFT	8
2166*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_1_MASK		0x000000FF
2167*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_1_WORD		word5
2168*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_2_SHIFT	16
2169*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_2_MASK		0x000000FF
2170*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_2_WORD		word5
2171*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_3_SHIFT	24
2172*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_3_MASK		0x000000FF
2173*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_3_WORD		word5
2174*4882a593Smuzhiyun 	uint32_t word6;
2175*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_4_SHIFT	0
2176*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_4_MASK		0x000000FF
2177*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_4_WORD		word6
2178*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_5_SHIFT	8
2179*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_5_MASK		0x000000FF
2180*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_5_WORD		word6
2181*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_6_SHIFT	16
2182*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_6_MASK		0x000000FF
2183*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_6_WORD		word6
2184*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_7_SHIFT	24
2185*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_7_MASK		0x000000FF
2186*4882a593Smuzhiyun #define lpfc_fcf_record_fab_name_7_WORD		word6
2187*4882a593Smuzhiyun 	uint32_t word7;
2188*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_0_SHIFT		0
2189*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_0_MASK		0x000000FF
2190*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_0_WORD		word7
2191*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_1_SHIFT		8
2192*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_1_MASK		0x000000FF
2193*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_1_WORD		word7
2194*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_2_SHIFT		16
2195*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_2_MASK		0x000000FF
2196*4882a593Smuzhiyun #define lpfc_fcf_record_fc_map_2_WORD		word7
2197*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_valid_SHIFT		24
2198*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_valid_MASK		0x00000001
2199*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_valid_WORD		word7
2200*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_fc_SHIFT		25
2201*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_fc_MASK		0x00000001
2202*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_fc_WORD		word7
2203*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_sol_SHIFT		31
2204*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_sol_MASK		0x00000001
2205*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_sol_WORD		word7
2206*4882a593Smuzhiyun 	uint32_t word8;
2207*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_index_SHIFT		0
2208*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_index_MASK		0x0000FFFF
2209*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_index_WORD		word8
2210*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_state_SHIFT		16
2211*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_state_MASK		0x0000FFFF
2212*4882a593Smuzhiyun #define lpfc_fcf_record_fcf_state_WORD		word8
2213*4882a593Smuzhiyun 	uint8_t vlan_bitmap[512];
2214*4882a593Smuzhiyun 	uint32_t word137;
2215*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_0_SHIFT	0
2216*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_0_MASK	0x000000FF
2217*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_0_WORD	word137
2218*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_1_SHIFT	8
2219*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_1_MASK	0x000000FF
2220*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_1_WORD	word137
2221*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_2_SHIFT	16
2222*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_2_MASK	0x000000FF
2223*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_2_WORD	word137
2224*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_3_SHIFT	24
2225*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_3_MASK	0x000000FF
2226*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_3_WORD	word137
2227*4882a593Smuzhiyun 	uint32_t word138;
2228*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_4_SHIFT	0
2229*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_4_MASK	0x000000FF
2230*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_4_WORD	word138
2231*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_5_SHIFT	8
2232*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_5_MASK	0x000000FF
2233*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_5_WORD	word138
2234*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_6_SHIFT	16
2235*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_6_MASK	0x000000FF
2236*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_6_WORD	word138
2237*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_7_SHIFT	24
2238*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_7_MASK	0x000000FF
2239*4882a593Smuzhiyun #define lpfc_fcf_record_switch_name_7_WORD	word138
2240*4882a593Smuzhiyun };
2241*4882a593Smuzhiyun 
2242*4882a593Smuzhiyun struct lpfc_mbx_read_fcf_tbl {
2243*4882a593Smuzhiyun 	union lpfc_sli4_cfg_shdr cfg_shdr;
2244*4882a593Smuzhiyun 	union {
2245*4882a593Smuzhiyun 		struct {
2246*4882a593Smuzhiyun 			uint32_t word10;
2247*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_indx_SHIFT	0
2248*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_indx_MASK		0x0000FFFF
2249*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_indx_WORD		word10
2250*4882a593Smuzhiyun 		} request;
2251*4882a593Smuzhiyun 		struct {
2252*4882a593Smuzhiyun 			uint32_t eventag;
2253*4882a593Smuzhiyun 		} response;
2254*4882a593Smuzhiyun 	} u;
2255*4882a593Smuzhiyun 	uint32_t word11;
2256*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_nxt_vindx_SHIFT	0
2257*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_nxt_vindx_MASK	0x0000FFFF
2258*4882a593Smuzhiyun #define lpfc_mbx_read_fcf_tbl_nxt_vindx_WORD	word11
2259*4882a593Smuzhiyun };
2260*4882a593Smuzhiyun 
2261*4882a593Smuzhiyun struct lpfc_mbx_add_fcf_tbl_entry {
2262*4882a593Smuzhiyun 	union lpfc_sli4_cfg_shdr cfg_shdr;
2263*4882a593Smuzhiyun 	uint32_t word10;
2264*4882a593Smuzhiyun #define lpfc_mbx_add_fcf_tbl_fcfi_SHIFT        0
2265*4882a593Smuzhiyun #define lpfc_mbx_add_fcf_tbl_fcfi_MASK         0x0000FFFF
2266*4882a593Smuzhiyun #define lpfc_mbx_add_fcf_tbl_fcfi_WORD         word10
2267*4882a593Smuzhiyun 	struct lpfc_mbx_sge fcf_sge;
2268*4882a593Smuzhiyun };
2269*4882a593Smuzhiyun 
2270*4882a593Smuzhiyun struct lpfc_mbx_del_fcf_tbl_entry {
2271*4882a593Smuzhiyun 	struct mbox_header header;
2272*4882a593Smuzhiyun 	uint32_t word10;
2273*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_count_SHIFT	0
2274*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_count_MASK		0x0000FFFF
2275*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_count_WORD		word10
2276*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_index_SHIFT	16
2277*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_index_MASK		0x0000FFFF
2278*4882a593Smuzhiyun #define lpfc_mbx_del_fcf_tbl_index_WORD		word10
2279*4882a593Smuzhiyun };
2280*4882a593Smuzhiyun 
2281*4882a593Smuzhiyun struct lpfc_mbx_redisc_fcf_tbl {
2282*4882a593Smuzhiyun 	struct mbox_header header;
2283*4882a593Smuzhiyun 	uint32_t word10;
2284*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_count_SHIFT		0
2285*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_count_MASK		0x0000FFFF
2286*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_count_WORD		word10
2287*4882a593Smuzhiyun 	uint32_t resvd;
2288*4882a593Smuzhiyun 	uint32_t word12;
2289*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_index_SHIFT		0
2290*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_index_MASK		0x0000FFFF
2291*4882a593Smuzhiyun #define lpfc_mbx_redisc_fcf_index_WORD		word12
2292*4882a593Smuzhiyun };
2293*4882a593Smuzhiyun 
2294*4882a593Smuzhiyun /* Status field for embedded SLI_CONFIG mailbox command */
2295*4882a593Smuzhiyun #define STATUS_SUCCESS					0x0
2296*4882a593Smuzhiyun #define STATUS_FAILED 					0x1
2297*4882a593Smuzhiyun #define STATUS_ILLEGAL_REQUEST				0x2
2298*4882a593Smuzhiyun #define STATUS_ILLEGAL_FIELD				0x3
2299*4882a593Smuzhiyun #define STATUS_INSUFFICIENT_BUFFER 			0x4
2300*4882a593Smuzhiyun #define STATUS_UNAUTHORIZED_REQUEST			0x5
2301*4882a593Smuzhiyun #define STATUS_FLASHROM_SAVE_FAILED			0x17
2302*4882a593Smuzhiyun #define STATUS_FLASHROM_RESTORE_FAILED			0x18
2303*4882a593Smuzhiyun #define STATUS_ICCBINDEX_ALLOC_FAILED			0x1a
2304*4882a593Smuzhiyun #define STATUS_IOCTLHANDLE_ALLOC_FAILED 		0x1b
2305*4882a593Smuzhiyun #define STATUS_INVALID_PHY_ADDR_FROM_OSM		0x1c
2306*4882a593Smuzhiyun #define STATUS_INVALID_PHY_ADDR_LEN_FROM_OSM		0x1d
2307*4882a593Smuzhiyun #define STATUS_ASSERT_FAILED				0x1e
2308*4882a593Smuzhiyun #define STATUS_INVALID_SESSION				0x1f
2309*4882a593Smuzhiyun #define STATUS_INVALID_CONNECTION			0x20
2310*4882a593Smuzhiyun #define STATUS_BTL_PATH_EXCEEDS_OSM_LIMIT		0x21
2311*4882a593Smuzhiyun #define STATUS_BTL_NO_FREE_SLOT_PATH			0x24
2312*4882a593Smuzhiyun #define STATUS_BTL_NO_FREE_SLOT_TGTID			0x25
2313*4882a593Smuzhiyun #define STATUS_OSM_DEVSLOT_NOT_FOUND			0x26
2314*4882a593Smuzhiyun #define STATUS_FLASHROM_READ_FAILED			0x27
2315*4882a593Smuzhiyun #define STATUS_POLL_IOCTL_TIMEOUT			0x28
2316*4882a593Smuzhiyun #define STATUS_ERROR_ACITMAIN				0x2a
2317*4882a593Smuzhiyun #define STATUS_REBOOT_REQUIRED				0x2c
2318*4882a593Smuzhiyun #define STATUS_FCF_IN_USE				0x3a
2319*4882a593Smuzhiyun #define STATUS_FCF_TABLE_EMPTY				0x43
2320*4882a593Smuzhiyun 
2321*4882a593Smuzhiyun /*
2322*4882a593Smuzhiyun  * Additional status field for embedded SLI_CONFIG mailbox
2323*4882a593Smuzhiyun  * command.
2324*4882a593Smuzhiyun  */
2325*4882a593Smuzhiyun #define ADD_STATUS_OPERATION_ALREADY_ACTIVE		0x67
2326*4882a593Smuzhiyun #define ADD_STATUS_FW_NOT_SUPPORTED			0xEB
2327*4882a593Smuzhiyun #define ADD_STATUS_INVALID_REQUEST			0x4B
2328*4882a593Smuzhiyun #define ADD_STATUS_FW_DOWNLOAD_HW_DISABLED              0x58
2329*4882a593Smuzhiyun 
2330*4882a593Smuzhiyun struct lpfc_mbx_sli4_config {
2331*4882a593Smuzhiyun 	struct mbox_header header;
2332*4882a593Smuzhiyun };
2333*4882a593Smuzhiyun 
2334*4882a593Smuzhiyun struct lpfc_mbx_init_vfi {
2335*4882a593Smuzhiyun 	uint32_t word1;
2336*4882a593Smuzhiyun #define lpfc_init_vfi_vr_SHIFT		31
2337*4882a593Smuzhiyun #define lpfc_init_vfi_vr_MASK		0x00000001
2338*4882a593Smuzhiyun #define lpfc_init_vfi_vr_WORD		word1
2339*4882a593Smuzhiyun #define lpfc_init_vfi_vt_SHIFT		30
2340*4882a593Smuzhiyun #define lpfc_init_vfi_vt_MASK		0x00000001
2341*4882a593Smuzhiyun #define lpfc_init_vfi_vt_WORD		word1
2342*4882a593Smuzhiyun #define lpfc_init_vfi_vf_SHIFT		29
2343*4882a593Smuzhiyun #define lpfc_init_vfi_vf_MASK		0x00000001
2344*4882a593Smuzhiyun #define lpfc_init_vfi_vf_WORD		word1
2345*4882a593Smuzhiyun #define lpfc_init_vfi_vp_SHIFT		28
2346*4882a593Smuzhiyun #define lpfc_init_vfi_vp_MASK		0x00000001
2347*4882a593Smuzhiyun #define lpfc_init_vfi_vp_WORD		word1
2348*4882a593Smuzhiyun #define lpfc_init_vfi_vfi_SHIFT		0
2349*4882a593Smuzhiyun #define lpfc_init_vfi_vfi_MASK		0x0000FFFF
2350*4882a593Smuzhiyun #define lpfc_init_vfi_vfi_WORD		word1
2351*4882a593Smuzhiyun 	uint32_t word2;
2352*4882a593Smuzhiyun #define lpfc_init_vfi_vpi_SHIFT		16
2353*4882a593Smuzhiyun #define lpfc_init_vfi_vpi_MASK		0x0000FFFF
2354*4882a593Smuzhiyun #define lpfc_init_vfi_vpi_WORD		word2
2355*4882a593Smuzhiyun #define lpfc_init_vfi_fcfi_SHIFT	0
2356*4882a593Smuzhiyun #define lpfc_init_vfi_fcfi_MASK		0x0000FFFF
2357*4882a593Smuzhiyun #define lpfc_init_vfi_fcfi_WORD		word2
2358*4882a593Smuzhiyun 	uint32_t word3;
2359*4882a593Smuzhiyun #define lpfc_init_vfi_pri_SHIFT		13
2360*4882a593Smuzhiyun #define lpfc_init_vfi_pri_MASK		0x00000007
2361*4882a593Smuzhiyun #define lpfc_init_vfi_pri_WORD		word3
2362*4882a593Smuzhiyun #define lpfc_init_vfi_vf_id_SHIFT	1
2363*4882a593Smuzhiyun #define lpfc_init_vfi_vf_id_MASK	0x00000FFF
2364*4882a593Smuzhiyun #define lpfc_init_vfi_vf_id_WORD	word3
2365*4882a593Smuzhiyun 	uint32_t word4;
2366*4882a593Smuzhiyun #define lpfc_init_vfi_hop_count_SHIFT	24
2367*4882a593Smuzhiyun #define lpfc_init_vfi_hop_count_MASK	0x000000FF
2368*4882a593Smuzhiyun #define lpfc_init_vfi_hop_count_WORD	word4
2369*4882a593Smuzhiyun };
2370*4882a593Smuzhiyun #define MBX_VFI_IN_USE			0x9F02
2371*4882a593Smuzhiyun 
2372*4882a593Smuzhiyun 
2373*4882a593Smuzhiyun struct lpfc_mbx_reg_vfi {
2374*4882a593Smuzhiyun 	uint32_t word1;
2375*4882a593Smuzhiyun #define lpfc_reg_vfi_upd_SHIFT		29
2376*4882a593Smuzhiyun #define lpfc_reg_vfi_upd_MASK		0x00000001
2377*4882a593Smuzhiyun #define lpfc_reg_vfi_upd_WORD		word1
2378*4882a593Smuzhiyun #define lpfc_reg_vfi_vp_SHIFT		28
2379*4882a593Smuzhiyun #define lpfc_reg_vfi_vp_MASK		0x00000001
2380*4882a593Smuzhiyun #define lpfc_reg_vfi_vp_WORD		word1
2381*4882a593Smuzhiyun #define lpfc_reg_vfi_vfi_SHIFT		0
2382*4882a593Smuzhiyun #define lpfc_reg_vfi_vfi_MASK		0x0000FFFF
2383*4882a593Smuzhiyun #define lpfc_reg_vfi_vfi_WORD		word1
2384*4882a593Smuzhiyun 	uint32_t word2;
2385*4882a593Smuzhiyun #define lpfc_reg_vfi_vpi_SHIFT		16
2386*4882a593Smuzhiyun #define lpfc_reg_vfi_vpi_MASK		0x0000FFFF
2387*4882a593Smuzhiyun #define lpfc_reg_vfi_vpi_WORD		word2
2388*4882a593Smuzhiyun #define lpfc_reg_vfi_fcfi_SHIFT		0
2389*4882a593Smuzhiyun #define lpfc_reg_vfi_fcfi_MASK		0x0000FFFF
2390*4882a593Smuzhiyun #define lpfc_reg_vfi_fcfi_WORD		word2
2391*4882a593Smuzhiyun 	uint32_t wwn[2];
2392*4882a593Smuzhiyun 	struct ulp_bde64 bde;
2393*4882a593Smuzhiyun 	uint32_t e_d_tov;
2394*4882a593Smuzhiyun 	uint32_t r_a_tov;
2395*4882a593Smuzhiyun 	uint32_t word10;
2396*4882a593Smuzhiyun #define lpfc_reg_vfi_nport_id_SHIFT	0
2397*4882a593Smuzhiyun #define lpfc_reg_vfi_nport_id_MASK	0x00FFFFFF
2398*4882a593Smuzhiyun #define lpfc_reg_vfi_nport_id_WORD	word10
2399*4882a593Smuzhiyun #define lpfc_reg_vfi_bbcr_SHIFT		27
2400*4882a593Smuzhiyun #define lpfc_reg_vfi_bbcr_MASK		0x00000001
2401*4882a593Smuzhiyun #define lpfc_reg_vfi_bbcr_WORD		word10
2402*4882a593Smuzhiyun #define lpfc_reg_vfi_bbscn_SHIFT	28
2403*4882a593Smuzhiyun #define lpfc_reg_vfi_bbscn_MASK		0x0000000F
2404*4882a593Smuzhiyun #define lpfc_reg_vfi_bbscn_WORD		word10
2405*4882a593Smuzhiyun };
2406*4882a593Smuzhiyun 
2407*4882a593Smuzhiyun struct lpfc_mbx_init_vpi {
2408*4882a593Smuzhiyun 	uint32_t word1;
2409*4882a593Smuzhiyun #define lpfc_init_vpi_vfi_SHIFT		16
2410*4882a593Smuzhiyun #define lpfc_init_vpi_vfi_MASK		0x0000FFFF
2411*4882a593Smuzhiyun #define lpfc_init_vpi_vfi_WORD		word1
2412*4882a593Smuzhiyun #define lpfc_init_vpi_vpi_SHIFT		0
2413*4882a593Smuzhiyun #define lpfc_init_vpi_vpi_MASK		0x0000FFFF
2414*4882a593Smuzhiyun #define lpfc_init_vpi_vpi_WORD		word1
2415*4882a593Smuzhiyun };
2416*4882a593Smuzhiyun 
2417*4882a593Smuzhiyun struct lpfc_mbx_read_vpi {
2418*4882a593Smuzhiyun 	uint32_t word1_rsvd;
2419*4882a593Smuzhiyun 	uint32_t word2;
2420*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vnportid_SHIFT	0
2421*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vnportid_MASK		0x00FFFFFF
2422*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vnportid_WORD		word2
2423*4882a593Smuzhiyun 	uint32_t word3_rsvd;
2424*4882a593Smuzhiyun 	uint32_t word4;
2425*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_acq_alpa_SHIFT	0
2426*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_acq_alpa_MASK		0x000000FF
2427*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_acq_alpa_WORD		word4
2428*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_pb_SHIFT		15
2429*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_pb_MASK		0x00000001
2430*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_pb_WORD		word4
2431*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_spec_alpa_SHIFT	16
2432*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_spec_alpa_MASK	0x000000FF
2433*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_spec_alpa_WORD	word4
2434*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_ns_SHIFT		30
2435*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_ns_MASK		0x00000001
2436*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_ns_WORD		word4
2437*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_hl_SHIFT		31
2438*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_hl_MASK		0x00000001
2439*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_hl_WORD		word4
2440*4882a593Smuzhiyun 	uint32_t word5_rsvd;
2441*4882a593Smuzhiyun 	uint32_t word6;
2442*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vpi_SHIFT		0
2443*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vpi_MASK		0x0000FFFF
2444*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vpi_WORD		word6
2445*4882a593Smuzhiyun 	uint32_t word7;
2446*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_0_SHIFT		0
2447*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_0_MASK		0x000000FF
2448*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_0_WORD		word7
2449*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_1_SHIFT		8
2450*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_1_MASK		0x000000FF
2451*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_1_WORD		word7
2452*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_2_SHIFT		16
2453*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_2_MASK		0x000000FF
2454*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_2_WORD		word7
2455*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_3_SHIFT		24
2456*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_3_MASK		0x000000FF
2457*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_3_WORD		word7
2458*4882a593Smuzhiyun 	uint32_t word8;
2459*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_4_SHIFT		0
2460*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_4_MASK		0x000000FF
2461*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_4_WORD		word8
2462*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_5_SHIFT		8
2463*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_5_MASK		0x000000FF
2464*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_mac_5_WORD		word8
2465*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vlan_tag_SHIFT	16
2466*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vlan_tag_MASK		0x00000FFF
2467*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vlan_tag_WORD		word8
2468*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vv_SHIFT		28
2469*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vv_MASK		0x0000001
2470*4882a593Smuzhiyun #define lpfc_mbx_read_vpi_vv_WORD		word8
2471*4882a593Smuzhiyun };
2472*4882a593Smuzhiyun 
2473*4882a593Smuzhiyun struct lpfc_mbx_unreg_vfi {
2474*4882a593Smuzhiyun 	uint32_t word1_rsvd;
2475*4882a593Smuzhiyun 	uint32_t word2;
2476*4882a593Smuzhiyun #define lpfc_unreg_vfi_vfi_SHIFT	0
2477*4882a593Smuzhiyun #define lpfc_unreg_vfi_vfi_MASK		0x0000FFFF
2478*4882a593Smuzhiyun #define lpfc_unreg_vfi_vfi_WORD		word2
2479*4882a593Smuzhiyun };
2480*4882a593Smuzhiyun 
2481*4882a593Smuzhiyun struct lpfc_mbx_resume_rpi {
2482*4882a593Smuzhiyun 	uint32_t word1;
2483*4882a593Smuzhiyun #define lpfc_resume_rpi_index_SHIFT	0
2484*4882a593Smuzhiyun #define lpfc_resume_rpi_index_MASK	0x0000FFFF
2485*4882a593Smuzhiyun #define lpfc_resume_rpi_index_WORD	word1
2486*4882a593Smuzhiyun #define lpfc_resume_rpi_ii_SHIFT	30
2487*4882a593Smuzhiyun #define lpfc_resume_rpi_ii_MASK		0x00000003
2488*4882a593Smuzhiyun #define lpfc_resume_rpi_ii_WORD		word1
2489*4882a593Smuzhiyun #define RESUME_INDEX_RPI		0
2490*4882a593Smuzhiyun #define RESUME_INDEX_VPI		1
2491*4882a593Smuzhiyun #define RESUME_INDEX_VFI		2
2492*4882a593Smuzhiyun #define RESUME_INDEX_FCFI		3
2493*4882a593Smuzhiyun 	uint32_t event_tag;
2494*4882a593Smuzhiyun };
2495*4882a593Smuzhiyun 
2496*4882a593Smuzhiyun #define REG_FCF_INVALID_QID	0xFFFF
2497*4882a593Smuzhiyun struct lpfc_mbx_reg_fcfi {
2498*4882a593Smuzhiyun 	uint32_t word1;
2499*4882a593Smuzhiyun #define lpfc_reg_fcfi_info_index_SHIFT	0
2500*4882a593Smuzhiyun #define lpfc_reg_fcfi_info_index_MASK	0x0000FFFF
2501*4882a593Smuzhiyun #define lpfc_reg_fcfi_info_index_WORD	word1
2502*4882a593Smuzhiyun #define lpfc_reg_fcfi_fcfi_SHIFT	16
2503*4882a593Smuzhiyun #define lpfc_reg_fcfi_fcfi_MASK		0x0000FFFF
2504*4882a593Smuzhiyun #define lpfc_reg_fcfi_fcfi_WORD		word1
2505*4882a593Smuzhiyun 	uint32_t word2;
2506*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id1_SHIFT	0
2507*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id1_MASK	0x0000FFFF
2508*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id1_WORD	word2
2509*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id0_SHIFT	16
2510*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id0_MASK	0x0000FFFF
2511*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id0_WORD	word2
2512*4882a593Smuzhiyun 	uint32_t word3;
2513*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id3_SHIFT	0
2514*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id3_MASK	0x0000FFFF
2515*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id3_WORD	word3
2516*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id2_SHIFT	16
2517*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id2_MASK	0x0000FFFF
2518*4882a593Smuzhiyun #define lpfc_reg_fcfi_rq_id2_WORD	word3
2519*4882a593Smuzhiyun 	uint32_t word4;
2520*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match0_SHIFT	24
2521*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match0_MASK	0x000000FF
2522*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match0_WORD	word4
2523*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask0_SHIFT	16
2524*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask0_MASK	0x000000FF
2525*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask0_WORD	word4
2526*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match0_SHIFT	8
2527*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match0_MASK	0x000000FF
2528*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match0_WORD	word4
2529*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask0_SHIFT	0
2530*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask0_MASK	0x000000FF
2531*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask0_WORD	word4
2532*4882a593Smuzhiyun 	uint32_t word5;
2533*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match1_SHIFT	24
2534*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match1_MASK	0x000000FF
2535*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match1_WORD	word5
2536*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask1_SHIFT	16
2537*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask1_MASK	0x000000FF
2538*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask1_WORD	word5
2539*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match1_SHIFT	8
2540*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match1_MASK	0x000000FF
2541*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match1_WORD	word5
2542*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask1_SHIFT	0
2543*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask1_MASK	0x000000FF
2544*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask1_WORD	word5
2545*4882a593Smuzhiyun 	uint32_t word6;
2546*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match2_SHIFT	24
2547*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match2_MASK	0x000000FF
2548*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match2_WORD	word6
2549*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask2_SHIFT	16
2550*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask2_MASK	0x000000FF
2551*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask2_WORD	word6
2552*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match2_SHIFT	8
2553*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match2_MASK	0x000000FF
2554*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match2_WORD	word6
2555*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask2_SHIFT	0
2556*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask2_MASK	0x000000FF
2557*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask2_WORD	word6
2558*4882a593Smuzhiyun 	uint32_t word7;
2559*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match3_SHIFT	24
2560*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match3_MASK	0x000000FF
2561*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_match3_WORD	word7
2562*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask3_SHIFT	16
2563*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask3_MASK	0x000000FF
2564*4882a593Smuzhiyun #define lpfc_reg_fcfi_type_mask3_WORD	word7
2565*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match3_SHIFT	8
2566*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match3_MASK	0x000000FF
2567*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_match3_WORD	word7
2568*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask3_SHIFT	0
2569*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask3_MASK	0x000000FF
2570*4882a593Smuzhiyun #define lpfc_reg_fcfi_rctl_mask3_WORD	word7
2571*4882a593Smuzhiyun 	uint32_t word8;
2572*4882a593Smuzhiyun #define lpfc_reg_fcfi_mam_SHIFT		13
2573*4882a593Smuzhiyun #define lpfc_reg_fcfi_mam_MASK		0x00000003
2574*4882a593Smuzhiyun #define lpfc_reg_fcfi_mam_WORD		word8
2575*4882a593Smuzhiyun #define LPFC_MAM_BOTH		0	/* Both SPMA and FPMA */
2576*4882a593Smuzhiyun #define LPFC_MAM_SPMA		1	/* Server Provided MAC Address */
2577*4882a593Smuzhiyun #define LPFC_MAM_FPMA		2	/* Fabric Provided MAC Address */
2578*4882a593Smuzhiyun #define lpfc_reg_fcfi_vv_SHIFT		12
2579*4882a593Smuzhiyun #define lpfc_reg_fcfi_vv_MASK		0x00000001
2580*4882a593Smuzhiyun #define lpfc_reg_fcfi_vv_WORD		word8
2581*4882a593Smuzhiyun #define lpfc_reg_fcfi_vlan_tag_SHIFT	0
2582*4882a593Smuzhiyun #define lpfc_reg_fcfi_vlan_tag_MASK	0x00000FFF
2583*4882a593Smuzhiyun #define lpfc_reg_fcfi_vlan_tag_WORD	word8
2584*4882a593Smuzhiyun };
2585*4882a593Smuzhiyun 
2586*4882a593Smuzhiyun struct lpfc_mbx_reg_fcfi_mrq {
2587*4882a593Smuzhiyun 	uint32_t word1;
2588*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_info_index_SHIFT	0
2589*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_info_index_MASK	0x0000FFFF
2590*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_info_index_WORD	word1
2591*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_fcfi_SHIFT		16
2592*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_fcfi_MASK		0x0000FFFF
2593*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_fcfi_WORD		word1
2594*4882a593Smuzhiyun 	uint32_t word2;
2595*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id1_SHIFT		0
2596*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id1_MASK		0x0000FFFF
2597*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id1_WORD		word2
2598*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id0_SHIFT		16
2599*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id0_MASK		0x0000FFFF
2600*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id0_WORD		word2
2601*4882a593Smuzhiyun 	uint32_t word3;
2602*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id3_SHIFT		0
2603*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id3_MASK		0x0000FFFF
2604*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id3_WORD		word3
2605*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id2_SHIFT		16
2606*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id2_MASK		0x0000FFFF
2607*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rq_id2_WORD		word3
2608*4882a593Smuzhiyun 	uint32_t word4;
2609*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match0_SHIFT	24
2610*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match0_MASK	0x000000FF
2611*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match0_WORD	word4
2612*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask0_SHIFT	16
2613*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask0_MASK	0x000000FF
2614*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask0_WORD	word4
2615*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match0_SHIFT	8
2616*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match0_MASK	0x000000FF
2617*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match0_WORD	word4
2618*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask0_SHIFT	0
2619*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask0_MASK	0x000000FF
2620*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask0_WORD	word4
2621*4882a593Smuzhiyun 	uint32_t word5;
2622*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match1_SHIFT	24
2623*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match1_MASK	0x000000FF
2624*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match1_WORD	word5
2625*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask1_SHIFT	16
2626*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask1_MASK	0x000000FF
2627*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask1_WORD	word5
2628*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match1_SHIFT	8
2629*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match1_MASK	0x000000FF
2630*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match1_WORD	word5
2631*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask1_SHIFT	0
2632*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask1_MASK	0x000000FF
2633*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask1_WORD	word5
2634*4882a593Smuzhiyun 	uint32_t word6;
2635*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match2_SHIFT	24
2636*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match2_MASK	0x000000FF
2637*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match2_WORD	word6
2638*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask2_SHIFT	16
2639*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask2_MASK	0x000000FF
2640*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask2_WORD	word6
2641*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match2_SHIFT	8
2642*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match2_MASK	0x000000FF
2643*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match2_WORD	word6
2644*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask2_SHIFT	0
2645*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask2_MASK	0x000000FF
2646*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask2_WORD	word6
2647*4882a593Smuzhiyun 	uint32_t word7;
2648*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match3_SHIFT	24
2649*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match3_MASK	0x000000FF
2650*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_match3_WORD	word7
2651*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask3_SHIFT	16
2652*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask3_MASK	0x000000FF
2653*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_type_mask3_WORD	word7
2654*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match3_SHIFT	8
2655*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match3_MASK	0x000000FF
2656*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_match3_WORD	word7
2657*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask3_SHIFT	0
2658*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask3_MASK	0x000000FF
2659*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_rctl_mask3_WORD	word7
2660*4882a593Smuzhiyun 	uint32_t word8;
2661*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc7_SHIFT		31
2662*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc7_MASK		0x00000001
2663*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc7_WORD		word8
2664*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc6_SHIFT		30
2665*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc6_MASK		0x00000001
2666*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc6_WORD		word8
2667*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc5_SHIFT		29
2668*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc5_MASK		0x00000001
2669*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc5_WORD		word8
2670*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc4_SHIFT		28
2671*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc4_MASK		0x00000001
2672*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc4_WORD		word8
2673*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc3_SHIFT		27
2674*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc3_MASK		0x00000001
2675*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc3_WORD		word8
2676*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc2_SHIFT		26
2677*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc2_MASK		0x00000001
2678*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc2_WORD		word8
2679*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc1_SHIFT		25
2680*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc1_MASK		0x00000001
2681*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc1_WORD		word8
2682*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc0_SHIFT		24
2683*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc0_MASK		0x00000001
2684*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_ptc0_WORD		word8
2685*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt7_SHIFT		23
2686*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt7_MASK		0x00000001
2687*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt7_WORD		word8
2688*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt6_SHIFT		22
2689*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt6_MASK		0x00000001
2690*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt6_WORD		word8
2691*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt5_SHIFT		21
2692*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt5_MASK		0x00000001
2693*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt5_WORD		word8
2694*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt4_SHIFT		20
2695*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt4_MASK		0x00000001
2696*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt4_WORD		word8
2697*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt3_SHIFT		19
2698*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt3_MASK		0x00000001
2699*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt3_WORD		word8
2700*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt2_SHIFT		18
2701*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt2_MASK		0x00000001
2702*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt2_WORD		word8
2703*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt1_SHIFT		17
2704*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt1_MASK		0x00000001
2705*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt1_WORD		word8
2706*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt0_SHIFT		16
2707*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt0_MASK		0x00000001
2708*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_pt0_WORD		word8
2709*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_xmv_SHIFT		15
2710*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_xmv_MASK		0x00000001
2711*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_xmv_WORD		word8
2712*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_mode_SHIFT		13
2713*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_mode_MASK		0x00000001
2714*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_mode_WORD		word8
2715*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vv_SHIFT		12
2716*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vv_MASK		0x00000001
2717*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vv_WORD		word8
2718*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vlan_tag_SHIFT	0
2719*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vlan_tag_MASK		0x00000FFF
2720*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_vlan_tag_WORD		word8
2721*4882a593Smuzhiyun 	uint32_t word9;
2722*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_policy_SHIFT		12
2723*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_policy_MASK		0x0000000F
2724*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_policy_WORD		word9
2725*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_filter_SHIFT		8
2726*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_filter_MASK		0x0000000F
2727*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_filter_WORD		word9
2728*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_npairs_SHIFT		0
2729*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_npairs_MASK		0x000000FF
2730*4882a593Smuzhiyun #define lpfc_reg_fcfi_mrq_npairs_WORD		word9
2731*4882a593Smuzhiyun 	uint32_t word10;
2732*4882a593Smuzhiyun 	uint32_t word11;
2733*4882a593Smuzhiyun 	uint32_t word12;
2734*4882a593Smuzhiyun 	uint32_t word13;
2735*4882a593Smuzhiyun 	uint32_t word14;
2736*4882a593Smuzhiyun 	uint32_t word15;
2737*4882a593Smuzhiyun 	uint32_t word16;
2738*4882a593Smuzhiyun };
2739*4882a593Smuzhiyun 
2740*4882a593Smuzhiyun struct lpfc_mbx_unreg_fcfi {
2741*4882a593Smuzhiyun 	uint32_t word1_rsv;
2742*4882a593Smuzhiyun 	uint32_t word2;
2743*4882a593Smuzhiyun #define lpfc_unreg_fcfi_SHIFT		0
2744*4882a593Smuzhiyun #define lpfc_unreg_fcfi_MASK		0x0000FFFF
2745*4882a593Smuzhiyun #define lpfc_unreg_fcfi_WORD		word2
2746*4882a593Smuzhiyun };
2747*4882a593Smuzhiyun 
2748*4882a593Smuzhiyun struct lpfc_mbx_read_rev {
2749*4882a593Smuzhiyun 	uint32_t word1;
2750*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_sli_lvl_SHIFT  		16
2751*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_sli_lvl_MASK   		0x0000000F
2752*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_sli_lvl_WORD   		word1
2753*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcoe_SHIFT		20
2754*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcoe_MASK		0x00000001
2755*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcoe_WORD		word1
2756*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_cee_ver_SHIFT		21
2757*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_cee_ver_MASK		0x00000003
2758*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_cee_ver_WORD		word1
2759*4882a593Smuzhiyun #define LPFC_PREDCBX_CEE_MODE	0
2760*4882a593Smuzhiyun #define LPFC_DCBX_CEE_MODE	1
2761*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_vpd_SHIFT		29
2762*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_vpd_MASK		0x00000001
2763*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_vpd_WORD		word1
2764*4882a593Smuzhiyun 	uint32_t first_hw_rev;
2765*4882a593Smuzhiyun #define LPFC_G7_ASIC_1				0xd
2766*4882a593Smuzhiyun 	uint32_t second_hw_rev;
2767*4882a593Smuzhiyun 	uint32_t word4_rsvd;
2768*4882a593Smuzhiyun 	uint32_t third_hw_rev;
2769*4882a593Smuzhiyun 	uint32_t word6;
2770*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_low_SHIFT		0
2771*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_low_MASK		0x000000FF
2772*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_low_WORD		word6
2773*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_high_SHIFT		8
2774*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_high_MASK		0x000000FF
2775*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_fcph_high_WORD		word6
2776*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_low_SHIFT	16
2777*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_low_MASK	0x000000FF
2778*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_low_WORD	word6
2779*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_high_SHIFT	24
2780*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_high_MASK	0x000000FF
2781*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_ftr_lvl_high_WORD	word6
2782*4882a593Smuzhiyun 	uint32_t word7_rsvd;
2783*4882a593Smuzhiyun 	uint32_t fw_id_rev;
2784*4882a593Smuzhiyun 	uint8_t  fw_name[16];
2785*4882a593Smuzhiyun 	uint32_t ulp_fw_id_rev;
2786*4882a593Smuzhiyun 	uint8_t  ulp_fw_name[16];
2787*4882a593Smuzhiyun 	uint32_t word18_47_rsvd[30];
2788*4882a593Smuzhiyun 	uint32_t word48;
2789*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_avail_len_SHIFT		0
2790*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_avail_len_MASK		0x00FFFFFF
2791*4882a593Smuzhiyun #define lpfc_mbx_rd_rev_avail_len_WORD		word48
2792*4882a593Smuzhiyun 	uint32_t vpd_paddr_low;
2793*4882a593Smuzhiyun 	uint32_t vpd_paddr_high;
2794*4882a593Smuzhiyun 	uint32_t avail_vpd_len;
2795*4882a593Smuzhiyun 	uint32_t rsvd_52_63[12];
2796*4882a593Smuzhiyun };
2797*4882a593Smuzhiyun 
2798*4882a593Smuzhiyun struct lpfc_mbx_read_config {
2799*4882a593Smuzhiyun 	uint32_t word1;
2800*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_extnts_inuse_SHIFT	31
2801*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_extnts_inuse_MASK	0x00000001
2802*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_extnts_inuse_WORD	word1
2803*4882a593Smuzhiyun 	uint32_t word2;
2804*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_numb_SHIFT		0
2805*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_numb_MASK		0x0000003F
2806*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_numb_WORD		word2
2807*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_type_SHIFT		6
2808*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_type_MASK		0x00000003
2809*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_type_WORD		word2
2810*4882a593Smuzhiyun #define LPFC_LNK_TYPE_GE	0
2811*4882a593Smuzhiyun #define LPFC_LNK_TYPE_FC	1
2812*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_ldv_SHIFT		8
2813*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_ldv_MASK		0x00000001
2814*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lnk_ldv_WORD		word2
2815*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_trunk_SHIFT		12
2816*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_trunk_MASK		0x0000000F
2817*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_trunk_WORD		word2
2818*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_pt_SHIFT		20
2819*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_pt_MASK		0x00000003
2820*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_pt_WORD		word2
2821*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_tf_SHIFT		22
2822*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_tf_MASK		0x00000001
2823*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_tf_WORD		word2
2824*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_ptv_SHIFT		23
2825*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_ptv_MASK		0x00000001
2826*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_ptv_WORD		word2
2827*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_topology_SHIFT		24
2828*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_topology_MASK		0x000000FF
2829*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_topology_WORD		word2
2830*4882a593Smuzhiyun 	uint32_t rsvd_3;
2831*4882a593Smuzhiyun 	uint32_t word4;
2832*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_e_d_tov_SHIFT		0
2833*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_e_d_tov_MASK		0x0000FFFF
2834*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_e_d_tov_WORD		word4
2835*4882a593Smuzhiyun 	uint32_t rsvd_5;
2836*4882a593Smuzhiyun 	uint32_t word6;
2837*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_r_a_tov_SHIFT		0
2838*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_r_a_tov_MASK		0x0000FFFF
2839*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_r_a_tov_WORD		word6
2840*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_link_speed_SHIFT	16
2841*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_link_speed_MASK	0x0000FFFF
2842*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_link_speed_WORD	word6
2843*4882a593Smuzhiyun 	uint32_t rsvd_7;
2844*4882a593Smuzhiyun 	uint32_t word8;
2845*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_min_SHIFT	0
2846*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_min_MASK		0x0000000F
2847*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_min_WORD		word8
2848*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_max_SHIFT	4
2849*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_max_MASK		0x0000000F
2850*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_max_WORD		word8
2851*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_def_SHIFT	8
2852*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_def_MASK		0x0000000F
2853*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_bbscn_def_WORD		word8
2854*4882a593Smuzhiyun 	uint32_t word9;
2855*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lmt_SHIFT		0
2856*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lmt_MASK		0x0000FFFF
2857*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_lmt_WORD		word9
2858*4882a593Smuzhiyun 	uint32_t rsvd_10;
2859*4882a593Smuzhiyun 	uint32_t rsvd_11;
2860*4882a593Smuzhiyun 	uint32_t word12;
2861*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_base_SHIFT		0
2862*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_base_MASK		0x0000FFFF
2863*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_base_WORD		word12
2864*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_count_SHIFT	16
2865*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_count_MASK		0x0000FFFF
2866*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_xri_count_WORD		word12
2867*4882a593Smuzhiyun 	uint32_t word13;
2868*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_base_SHIFT		0
2869*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_base_MASK		0x0000FFFF
2870*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_base_WORD		word13
2871*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_count_SHIFT	16
2872*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_count_MASK		0x0000FFFF
2873*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rpi_count_WORD		word13
2874*4882a593Smuzhiyun 	uint32_t word14;
2875*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_base_SHIFT		0
2876*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_base_MASK		0x0000FFFF
2877*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_base_WORD		word14
2878*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_count_SHIFT	16
2879*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_count_MASK		0x0000FFFF
2880*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vpi_count_WORD		word14
2881*4882a593Smuzhiyun 	uint32_t word15;
2882*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_base_SHIFT         0
2883*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_base_MASK          0x0000FFFF
2884*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_base_WORD          word15
2885*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_count_SHIFT        16
2886*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_count_MASK         0x0000FFFF
2887*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_vfi_count_WORD         word15
2888*4882a593Smuzhiyun 	uint32_t word16;
2889*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_fcfi_count_SHIFT	16
2890*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_fcfi_count_MASK	0x0000FFFF
2891*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_fcfi_count_WORD	word16
2892*4882a593Smuzhiyun 	uint32_t word17;
2893*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rq_count_SHIFT		0
2894*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rq_count_MASK		0x0000FFFF
2895*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_rq_count_WORD		word17
2896*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_eq_count_SHIFT		16
2897*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_eq_count_MASK		0x0000FFFF
2898*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_eq_count_WORD		word17
2899*4882a593Smuzhiyun 	uint32_t word18;
2900*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_wq_count_SHIFT		0
2901*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_wq_count_MASK		0x0000FFFF
2902*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_wq_count_WORD		word18
2903*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_cq_count_SHIFT		16
2904*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_cq_count_MASK		0x0000FFFF
2905*4882a593Smuzhiyun #define lpfc_mbx_rd_conf_cq_count_WORD		word18
2906*4882a593Smuzhiyun };
2907*4882a593Smuzhiyun 
2908*4882a593Smuzhiyun struct lpfc_mbx_request_features {
2909*4882a593Smuzhiyun 	uint32_t word1;
2910*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_qry_SHIFT		0
2911*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_qry_MASK		0x00000001
2912*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_qry_WORD		word1
2913*4882a593Smuzhiyun 	uint32_t word2;
2914*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaab_SHIFT		0
2915*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaab_MASK		0x00000001
2916*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaab_WORD		word2
2917*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_npiv_SHIFT		1
2918*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_npiv_MASK		0x00000001
2919*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_npiv_WORD		word2
2920*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_dif_SHIFT		2
2921*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_dif_MASK		0x00000001
2922*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_dif_WORD		word2
2923*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_vf_SHIFT		3
2924*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_vf_MASK		0x00000001
2925*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_vf_WORD		word2
2926*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpi_SHIFT		4
2927*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpi_MASK		0x00000001
2928*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpi_WORD		word2
2929*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpt_SHIFT		5
2930*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpt_MASK		0x00000001
2931*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpt_WORD		word2
2932*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpc_SHIFT		6
2933*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpc_MASK		0x00000001
2934*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_fcpc_WORD		word2
2935*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_ifip_SHIFT		7
2936*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_ifip_MASK		0x00000001
2937*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_ifip_WORD		word2
2938*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaar_SHIFT		9
2939*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaar_MASK		0x00000001
2940*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_iaar_WORD		word2
2941*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_perfh_SHIFT		11
2942*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_perfh_MASK		0x00000001
2943*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_perfh_WORD		word2
2944*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_mrqp_SHIFT		16
2945*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_mrqp_MASK		0x00000001
2946*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rq_mrqp_WORD		word2
2947*4882a593Smuzhiyun 	uint32_t word3;
2948*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_iaab_SHIFT		0
2949*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_iaab_MASK		0x00000001
2950*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_iaab_WORD		word3
2951*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_npiv_SHIFT		1
2952*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_npiv_MASK		0x00000001
2953*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_npiv_WORD		word3
2954*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_dif_SHIFT		2
2955*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_dif_MASK		0x00000001
2956*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_dif_WORD		word3
2957*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_vf_SHIFT		3
2958*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_vf__MASK		0x00000001
2959*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_vf_WORD		word3
2960*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpi_SHIFT		4
2961*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpi_MASK		0x00000001
2962*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpi_WORD		word3
2963*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpt_SHIFT		5
2964*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpt_MASK		0x00000001
2965*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpt_WORD		word3
2966*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpc_SHIFT		6
2967*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpc_MASK		0x00000001
2968*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_fcpc_WORD		word3
2969*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_ifip_SHIFT		7
2970*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_ifip_MASK		0x00000001
2971*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_ifip_WORD		word3
2972*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_perfh_SHIFT		11
2973*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_perfh_MASK		0x00000001
2974*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_perfh_WORD		word3
2975*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_mrqp_SHIFT		16
2976*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_mrqp_MASK		0x00000001
2977*4882a593Smuzhiyun #define lpfc_mbx_rq_ftr_rsp_mrqp_WORD		word3
2978*4882a593Smuzhiyun };
2979*4882a593Smuzhiyun 
2980*4882a593Smuzhiyun struct lpfc_mbx_memory_dump_type3 {
2981*4882a593Smuzhiyun 	uint32_t word1;
2982*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_type_SHIFT    0
2983*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_type_MASK     0x0000000f
2984*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_type_WORD     word1
2985*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_link_SHIFT    24
2986*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_link_MASK     0x000000ff
2987*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_link_WORD     word1
2988*4882a593Smuzhiyun 	uint32_t word2;
2989*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_page_no_SHIFT  0
2990*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_page_no_MASK   0x0000ffff
2991*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_page_no_WORD   word2
2992*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_offset_SHIFT   16
2993*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_offset_MASK    0x0000ffff
2994*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_offset_WORD    word2
2995*4882a593Smuzhiyun 	uint32_t word3;
2996*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_length_SHIFT  0
2997*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_length_MASK   0x00ffffff
2998*4882a593Smuzhiyun #define lpfc_mbx_memory_dump_type3_length_WORD   word3
2999*4882a593Smuzhiyun 	uint32_t addr_lo;
3000*4882a593Smuzhiyun 	uint32_t addr_hi;
3001*4882a593Smuzhiyun 	uint32_t return_len;
3002*4882a593Smuzhiyun };
3003*4882a593Smuzhiyun 
3004*4882a593Smuzhiyun #define DMP_PAGE_A0             0xa0
3005*4882a593Smuzhiyun #define DMP_PAGE_A2             0xa2
3006*4882a593Smuzhiyun #define DMP_SFF_PAGE_A0_SIZE	256
3007*4882a593Smuzhiyun #define DMP_SFF_PAGE_A2_SIZE	256
3008*4882a593Smuzhiyun 
3009*4882a593Smuzhiyun #define SFP_WAVELENGTH_LC1310	1310
3010*4882a593Smuzhiyun #define SFP_WAVELENGTH_LL1550	1550
3011*4882a593Smuzhiyun 
3012*4882a593Smuzhiyun 
3013*4882a593Smuzhiyun /*
3014*4882a593Smuzhiyun  *  * SFF-8472 TABLE 3.4
3015*4882a593Smuzhiyun  *   */
3016*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_UNKNOWN    0x00   /* Unknown  */
3017*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_SC         0x01   /* SC       */
3018*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_FC_COPPER1 0x02   /* FC style 1 copper connector */
3019*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_FC_COPPER2 0x03   /* FC style 2 copper connector */
3020*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_BNC        0x04   /* BNC / TNC */
3021*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR__FC_COAX   0x05   /* FC coaxial headers */
3022*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_FIBERJACK  0x06   /* FiberJack */
3023*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_LC         0x07   /* LC        */
3024*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_MT         0x08   /* MT - RJ   */
3025*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_MU         0x09   /* MU        */
3026*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_SF         0x0A   /* SG        */
3027*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_OPTICAL_PIGTAIL 0x0B /* Optical pigtail */
3028*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_OPTICAL_PARALLEL 0x0C /* MPO Parallel Optic */
3029*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_HSSDC_II   0x20   /* HSSDC II */
3030*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_COPPER_PIGTAIL 0x21 /* Copper pigtail */
3031*4882a593Smuzhiyun #define  SFF_PG0_CONNECTOR_RJ45       0x22  /* RJ45 */
3032*4882a593Smuzhiyun 
3033*4882a593Smuzhiyun /* SFF-8472 Table 3.1 Diagnostics: Data Fields Address/Page A0 */
3034*4882a593Smuzhiyun 
3035*4882a593Smuzhiyun #define SSF_IDENTIFIER			0
3036*4882a593Smuzhiyun #define SSF_EXT_IDENTIFIER		1
3037*4882a593Smuzhiyun #define SSF_CONNECTOR			2
3038*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B0		3
3039*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B1		4
3040*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B2		5
3041*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B3		6
3042*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B4		7
3043*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B5		8
3044*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B6		9
3045*4882a593Smuzhiyun #define SSF_TRANSCEIVER_CODE_B7		10
3046*4882a593Smuzhiyun #define SSF_ENCODING			11
3047*4882a593Smuzhiyun #define SSF_BR_NOMINAL			12
3048*4882a593Smuzhiyun #define SSF_RATE_IDENTIFIER		13
3049*4882a593Smuzhiyun #define SSF_LENGTH_9UM_KM		14
3050*4882a593Smuzhiyun #define SSF_LENGTH_9UM			15
3051*4882a593Smuzhiyun #define SSF_LENGTH_50UM_OM2		16
3052*4882a593Smuzhiyun #define SSF_LENGTH_62UM_OM1		17
3053*4882a593Smuzhiyun #define SFF_LENGTH_COPPER		18
3054*4882a593Smuzhiyun #define SSF_LENGTH_50UM_OM3		19
3055*4882a593Smuzhiyun #define SSF_VENDOR_NAME			20
3056*4882a593Smuzhiyun #define SSF_VENDOR_OUI			36
3057*4882a593Smuzhiyun #define SSF_VENDOR_PN			40
3058*4882a593Smuzhiyun #define SSF_VENDOR_REV			56
3059*4882a593Smuzhiyun #define SSF_WAVELENGTH_B1		60
3060*4882a593Smuzhiyun #define SSF_WAVELENGTH_B0		61
3061*4882a593Smuzhiyun #define SSF_CC_BASE			63
3062*4882a593Smuzhiyun #define SSF_OPTIONS_B1			64
3063*4882a593Smuzhiyun #define SSF_OPTIONS_B0			65
3064*4882a593Smuzhiyun #define SSF_BR_MAX			66
3065*4882a593Smuzhiyun #define SSF_BR_MIN			67
3066*4882a593Smuzhiyun #define SSF_VENDOR_SN			68
3067*4882a593Smuzhiyun #define SSF_DATE_CODE			84
3068*4882a593Smuzhiyun #define SSF_MONITORING_TYPEDIAGNOSTIC	92
3069*4882a593Smuzhiyun #define SSF_ENHANCED_OPTIONS		93
3070*4882a593Smuzhiyun #define SFF_8472_COMPLIANCE		94
3071*4882a593Smuzhiyun #define SSF_CC_EXT			95
3072*4882a593Smuzhiyun #define SSF_A0_VENDOR_SPECIFIC		96
3073*4882a593Smuzhiyun 
3074*4882a593Smuzhiyun /* SFF-8472 Table 3.1a Diagnostics: Data Fields Address/Page A2 */
3075*4882a593Smuzhiyun 
3076*4882a593Smuzhiyun #define SSF_TEMP_HIGH_ALARM		0
3077*4882a593Smuzhiyun #define SSF_TEMP_LOW_ALARM		2
3078*4882a593Smuzhiyun #define SSF_TEMP_HIGH_WARNING		4
3079*4882a593Smuzhiyun #define SSF_TEMP_LOW_WARNING		6
3080*4882a593Smuzhiyun #define SSF_VOLTAGE_HIGH_ALARM		8
3081*4882a593Smuzhiyun #define SSF_VOLTAGE_LOW_ALARM		10
3082*4882a593Smuzhiyun #define SSF_VOLTAGE_HIGH_WARNING	12
3083*4882a593Smuzhiyun #define SSF_VOLTAGE_LOW_WARNING		14
3084*4882a593Smuzhiyun #define SSF_BIAS_HIGH_ALARM		16
3085*4882a593Smuzhiyun #define SSF_BIAS_LOW_ALARM		18
3086*4882a593Smuzhiyun #define SSF_BIAS_HIGH_WARNING		20
3087*4882a593Smuzhiyun #define SSF_BIAS_LOW_WARNING		22
3088*4882a593Smuzhiyun #define SSF_TXPOWER_HIGH_ALARM		24
3089*4882a593Smuzhiyun #define SSF_TXPOWER_LOW_ALARM		26
3090*4882a593Smuzhiyun #define SSF_TXPOWER_HIGH_WARNING	28
3091*4882a593Smuzhiyun #define SSF_TXPOWER_LOW_WARNING		30
3092*4882a593Smuzhiyun #define SSF_RXPOWER_HIGH_ALARM		32
3093*4882a593Smuzhiyun #define SSF_RXPOWER_LOW_ALARM		34
3094*4882a593Smuzhiyun #define SSF_RXPOWER_HIGH_WARNING	36
3095*4882a593Smuzhiyun #define SSF_RXPOWER_LOW_WARNING		38
3096*4882a593Smuzhiyun #define SSF_EXT_CAL_CONSTANTS		56
3097*4882a593Smuzhiyun #define SSF_CC_DMI			95
3098*4882a593Smuzhiyun #define SFF_TEMPERATURE_B1		96
3099*4882a593Smuzhiyun #define SFF_TEMPERATURE_B0		97
3100*4882a593Smuzhiyun #define SFF_VCC_B1			98
3101*4882a593Smuzhiyun #define SFF_VCC_B0			99
3102*4882a593Smuzhiyun #define SFF_TX_BIAS_CURRENT_B1		100
3103*4882a593Smuzhiyun #define SFF_TX_BIAS_CURRENT_B0		101
3104*4882a593Smuzhiyun #define SFF_TXPOWER_B1			102
3105*4882a593Smuzhiyun #define SFF_TXPOWER_B0			103
3106*4882a593Smuzhiyun #define SFF_RXPOWER_B1			104
3107*4882a593Smuzhiyun #define SFF_RXPOWER_B0			105
3108*4882a593Smuzhiyun #define SSF_STATUS_CONTROL		110
3109*4882a593Smuzhiyun #define SSF_ALARM_FLAGS			112
3110*4882a593Smuzhiyun #define SSF_WARNING_FLAGS		116
3111*4882a593Smuzhiyun #define SSF_EXT_TATUS_CONTROL_B1	118
3112*4882a593Smuzhiyun #define SSF_EXT_TATUS_CONTROL_B0	119
3113*4882a593Smuzhiyun #define SSF_A2_VENDOR_SPECIFIC		120
3114*4882a593Smuzhiyun #define SSF_USER_EEPROM			128
3115*4882a593Smuzhiyun #define SSF_VENDOR_CONTROL		148
3116*4882a593Smuzhiyun 
3117*4882a593Smuzhiyun 
3118*4882a593Smuzhiyun /*
3119*4882a593Smuzhiyun  * Tranceiver codes Fibre Channel SFF-8472
3120*4882a593Smuzhiyun  * Table 3.5.
3121*4882a593Smuzhiyun  */
3122*4882a593Smuzhiyun 
3123*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte0 {
3124*4882a593Smuzhiyun 	uint8_t inifiband:4;
3125*4882a593Smuzhiyun 	uint8_t teng_ethernet:4;
3126*4882a593Smuzhiyun };
3127*4882a593Smuzhiyun 
3128*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte1 {
3129*4882a593Smuzhiyun 	uint8_t  sonet:6;
3130*4882a593Smuzhiyun 	uint8_t  escon:2;
3131*4882a593Smuzhiyun };
3132*4882a593Smuzhiyun 
3133*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte2 {
3134*4882a593Smuzhiyun 	uint8_t  soNet:8;
3135*4882a593Smuzhiyun };
3136*4882a593Smuzhiyun 
3137*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte3 {
3138*4882a593Smuzhiyun 	uint8_t ethernet:8;
3139*4882a593Smuzhiyun };
3140*4882a593Smuzhiyun 
3141*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte4 {
3142*4882a593Smuzhiyun 	uint8_t fc_el_lo:1;
3143*4882a593Smuzhiyun 	uint8_t fc_lw_laser:1;
3144*4882a593Smuzhiyun 	uint8_t fc_sw_laser:1;
3145*4882a593Smuzhiyun 	uint8_t fc_md_distance:1;
3146*4882a593Smuzhiyun 	uint8_t fc_lg_distance:1;
3147*4882a593Smuzhiyun 	uint8_t fc_int_distance:1;
3148*4882a593Smuzhiyun 	uint8_t fc_short_distance:1;
3149*4882a593Smuzhiyun 	uint8_t fc_vld_distance:1;
3150*4882a593Smuzhiyun };
3151*4882a593Smuzhiyun 
3152*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte5 {
3153*4882a593Smuzhiyun 	uint8_t reserved1:1;
3154*4882a593Smuzhiyun 	uint8_t reserved2:1;
3155*4882a593Smuzhiyun 	uint8_t fc_sfp_active:1;  /* Active cable   */
3156*4882a593Smuzhiyun 	uint8_t fc_sfp_passive:1; /* Passive cable  */
3157*4882a593Smuzhiyun 	uint8_t fc_lw_laser:1;     /* Longwave laser */
3158*4882a593Smuzhiyun 	uint8_t fc_sw_laser_sl:1;
3159*4882a593Smuzhiyun 	uint8_t fc_sw_laser_sn:1;
3160*4882a593Smuzhiyun 	uint8_t fc_el_hi:1;        /* Electrical enclosure high bit */
3161*4882a593Smuzhiyun };
3162*4882a593Smuzhiyun 
3163*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte6 {
3164*4882a593Smuzhiyun 	uint8_t fc_tm_sm:1;      /* Single Mode */
3165*4882a593Smuzhiyun 	uint8_t reserved:1;
3166*4882a593Smuzhiyun 	uint8_t fc_tm_m6:1;       /* Multimode, 62.5um (M6) */
3167*4882a593Smuzhiyun 	uint8_t fc_tm_tv:1;      /* Video Coax (TV) */
3168*4882a593Smuzhiyun 	uint8_t fc_tm_mi:1;      /* Miniature Coax (MI) */
3169*4882a593Smuzhiyun 	uint8_t fc_tm_tp:1;      /* Twisted Pair (TP) */
3170*4882a593Smuzhiyun 	uint8_t fc_tm_tw:1;      /* Twin Axial Pair  */
3171*4882a593Smuzhiyun };
3172*4882a593Smuzhiyun 
3173*4882a593Smuzhiyun struct sff_trasnceiver_codes_byte7 {
3174*4882a593Smuzhiyun 	uint8_t fc_sp_100MB:1;   /*  100 MB/sec */
3175*4882a593Smuzhiyun 	uint8_t reserve:1;
3176*4882a593Smuzhiyun 	uint8_t fc_sp_200mb:1;   /*  200 MB/sec */
3177*4882a593Smuzhiyun 	uint8_t fc_sp_3200MB:1;  /* 3200 MB/sec */
3178*4882a593Smuzhiyun 	uint8_t fc_sp_400MB:1;   /*  400 MB/sec */
3179*4882a593Smuzhiyun 	uint8_t fc_sp_1600MB:1;  /* 1600 MB/sec */
3180*4882a593Smuzhiyun 	uint8_t fc_sp_800MB:1;   /*  800 MB/sec */
3181*4882a593Smuzhiyun 	uint8_t fc_sp_1200MB:1;  /* 1200 MB/sec */
3182*4882a593Smuzhiyun };
3183*4882a593Smuzhiyun 
3184*4882a593Smuzhiyun /* User writable non-volatile memory, SFF-8472 Table 3.20 */
3185*4882a593Smuzhiyun struct user_eeprom {
3186*4882a593Smuzhiyun 	uint8_t vendor_name[16];
3187*4882a593Smuzhiyun 	uint8_t vendor_oui[3];
3188*4882a593Smuzhiyun 	uint8_t vendor_pn[816];
3189*4882a593Smuzhiyun 	uint8_t vendor_rev[4];
3190*4882a593Smuzhiyun 	uint8_t vendor_sn[16];
3191*4882a593Smuzhiyun 	uint8_t datecode[6];
3192*4882a593Smuzhiyun 	uint8_t lot_code[2];
3193*4882a593Smuzhiyun 	uint8_t reserved191[57];
3194*4882a593Smuzhiyun };
3195*4882a593Smuzhiyun 
3196*4882a593Smuzhiyun #define SLI4_PAGE_ALIGN(addr) (((addr)+((SLI4_PAGE_SIZE)-1)) \
3197*4882a593Smuzhiyun 			       &(~((SLI4_PAGE_SIZE)-1)))
3198*4882a593Smuzhiyun 
3199*4882a593Smuzhiyun struct lpfc_sli4_parameters {
3200*4882a593Smuzhiyun 	uint32_t word0;
3201*4882a593Smuzhiyun #define cfg_prot_type_SHIFT			0
3202*4882a593Smuzhiyun #define cfg_prot_type_MASK			0x000000FF
3203*4882a593Smuzhiyun #define cfg_prot_type_WORD			word0
3204*4882a593Smuzhiyun 	uint32_t word1;
3205*4882a593Smuzhiyun #define cfg_ft_SHIFT				0
3206*4882a593Smuzhiyun #define cfg_ft_MASK				0x00000001
3207*4882a593Smuzhiyun #define cfg_ft_WORD				word1
3208*4882a593Smuzhiyun #define cfg_sli_rev_SHIFT			4
3209*4882a593Smuzhiyun #define cfg_sli_rev_MASK			0x0000000f
3210*4882a593Smuzhiyun #define cfg_sli_rev_WORD			word1
3211*4882a593Smuzhiyun #define cfg_sli_family_SHIFT			8
3212*4882a593Smuzhiyun #define cfg_sli_family_MASK			0x0000000f
3213*4882a593Smuzhiyun #define cfg_sli_family_WORD			word1
3214*4882a593Smuzhiyun #define cfg_if_type_SHIFT			12
3215*4882a593Smuzhiyun #define cfg_if_type_MASK			0x0000000f
3216*4882a593Smuzhiyun #define cfg_if_type_WORD			word1
3217*4882a593Smuzhiyun #define cfg_sli_hint_1_SHIFT			16
3218*4882a593Smuzhiyun #define cfg_sli_hint_1_MASK			0x000000ff
3219*4882a593Smuzhiyun #define cfg_sli_hint_1_WORD			word1
3220*4882a593Smuzhiyun #define cfg_sli_hint_2_SHIFT			24
3221*4882a593Smuzhiyun #define cfg_sli_hint_2_MASK			0x0000001f
3222*4882a593Smuzhiyun #define cfg_sli_hint_2_WORD			word1
3223*4882a593Smuzhiyun 	uint32_t word2;
3224*4882a593Smuzhiyun #define cfg_eqav_SHIFT				31
3225*4882a593Smuzhiyun #define cfg_eqav_MASK				0x00000001
3226*4882a593Smuzhiyun #define cfg_eqav_WORD				word2
3227*4882a593Smuzhiyun 	uint32_t word3;
3228*4882a593Smuzhiyun 	uint32_t word4;
3229*4882a593Smuzhiyun #define cfg_cqv_SHIFT				14
3230*4882a593Smuzhiyun #define cfg_cqv_MASK				0x00000003
3231*4882a593Smuzhiyun #define cfg_cqv_WORD				word4
3232*4882a593Smuzhiyun #define cfg_cqpsize_SHIFT			16
3233*4882a593Smuzhiyun #define cfg_cqpsize_MASK			0x000000ff
3234*4882a593Smuzhiyun #define cfg_cqpsize_WORD			word4
3235*4882a593Smuzhiyun #define cfg_cqav_SHIFT				31
3236*4882a593Smuzhiyun #define cfg_cqav_MASK				0x00000001
3237*4882a593Smuzhiyun #define cfg_cqav_WORD				word4
3238*4882a593Smuzhiyun 	uint32_t word5;
3239*4882a593Smuzhiyun 	uint32_t word6;
3240*4882a593Smuzhiyun #define cfg_mqv_SHIFT				14
3241*4882a593Smuzhiyun #define cfg_mqv_MASK				0x00000003
3242*4882a593Smuzhiyun #define cfg_mqv_WORD				word6
3243*4882a593Smuzhiyun 	uint32_t word7;
3244*4882a593Smuzhiyun 	uint32_t word8;
3245*4882a593Smuzhiyun #define cfg_wqpcnt_SHIFT			0
3246*4882a593Smuzhiyun #define cfg_wqpcnt_MASK				0x0000000f
3247*4882a593Smuzhiyun #define cfg_wqpcnt_WORD				word8
3248*4882a593Smuzhiyun #define cfg_wqsize_SHIFT			8
3249*4882a593Smuzhiyun #define cfg_wqsize_MASK				0x0000000f
3250*4882a593Smuzhiyun #define cfg_wqsize_WORD				word8
3251*4882a593Smuzhiyun #define cfg_wqv_SHIFT				14
3252*4882a593Smuzhiyun #define cfg_wqv_MASK				0x00000003
3253*4882a593Smuzhiyun #define cfg_wqv_WORD				word8
3254*4882a593Smuzhiyun #define cfg_wqpsize_SHIFT			16
3255*4882a593Smuzhiyun #define cfg_wqpsize_MASK			0x000000ff
3256*4882a593Smuzhiyun #define cfg_wqpsize_WORD			word8
3257*4882a593Smuzhiyun 	uint32_t word9;
3258*4882a593Smuzhiyun 	uint32_t word10;
3259*4882a593Smuzhiyun #define cfg_rqv_SHIFT				14
3260*4882a593Smuzhiyun #define cfg_rqv_MASK				0x00000003
3261*4882a593Smuzhiyun #define cfg_rqv_WORD				word10
3262*4882a593Smuzhiyun 	uint32_t word11;
3263*4882a593Smuzhiyun #define cfg_rq_db_window_SHIFT			28
3264*4882a593Smuzhiyun #define cfg_rq_db_window_MASK			0x0000000f
3265*4882a593Smuzhiyun #define cfg_rq_db_window_WORD			word11
3266*4882a593Smuzhiyun 	uint32_t word12;
3267*4882a593Smuzhiyun #define cfg_fcoe_SHIFT				0
3268*4882a593Smuzhiyun #define cfg_fcoe_MASK				0x00000001
3269*4882a593Smuzhiyun #define cfg_fcoe_WORD				word12
3270*4882a593Smuzhiyun #define cfg_ext_SHIFT				1
3271*4882a593Smuzhiyun #define cfg_ext_MASK				0x00000001
3272*4882a593Smuzhiyun #define cfg_ext_WORD				word12
3273*4882a593Smuzhiyun #define cfg_hdrr_SHIFT				2
3274*4882a593Smuzhiyun #define cfg_hdrr_MASK				0x00000001
3275*4882a593Smuzhiyun #define cfg_hdrr_WORD				word12
3276*4882a593Smuzhiyun #define cfg_phwq_SHIFT				15
3277*4882a593Smuzhiyun #define cfg_phwq_MASK				0x00000001
3278*4882a593Smuzhiyun #define cfg_phwq_WORD				word12
3279*4882a593Smuzhiyun #define cfg_oas_SHIFT				25
3280*4882a593Smuzhiyun #define cfg_oas_MASK				0x00000001
3281*4882a593Smuzhiyun #define cfg_oas_WORD				word12
3282*4882a593Smuzhiyun #define cfg_loopbk_scope_SHIFT			28
3283*4882a593Smuzhiyun #define cfg_loopbk_scope_MASK			0x0000000f
3284*4882a593Smuzhiyun #define cfg_loopbk_scope_WORD			word12
3285*4882a593Smuzhiyun 	uint32_t sge_supp_len;
3286*4882a593Smuzhiyun 	uint32_t word14;
3287*4882a593Smuzhiyun #define cfg_sgl_page_cnt_SHIFT			0
3288*4882a593Smuzhiyun #define cfg_sgl_page_cnt_MASK			0x0000000f
3289*4882a593Smuzhiyun #define cfg_sgl_page_cnt_WORD			word14
3290*4882a593Smuzhiyun #define cfg_sgl_page_size_SHIFT			8
3291*4882a593Smuzhiyun #define cfg_sgl_page_size_MASK			0x000000ff
3292*4882a593Smuzhiyun #define cfg_sgl_page_size_WORD			word14
3293*4882a593Smuzhiyun #define cfg_sgl_pp_align_SHIFT			16
3294*4882a593Smuzhiyun #define cfg_sgl_pp_align_MASK			0x000000ff
3295*4882a593Smuzhiyun #define cfg_sgl_pp_align_WORD			word14
3296*4882a593Smuzhiyun 	uint32_t word15;
3297*4882a593Smuzhiyun 	uint32_t word16;
3298*4882a593Smuzhiyun 	uint32_t word17;
3299*4882a593Smuzhiyun 	uint32_t word18;
3300*4882a593Smuzhiyun 	uint32_t word19;
3301*4882a593Smuzhiyun #define cfg_ext_embed_cb_SHIFT			0
3302*4882a593Smuzhiyun #define cfg_ext_embed_cb_MASK			0x00000001
3303*4882a593Smuzhiyun #define cfg_ext_embed_cb_WORD			word19
3304*4882a593Smuzhiyun #define cfg_mds_diags_SHIFT			1
3305*4882a593Smuzhiyun #define cfg_mds_diags_MASK			0x00000001
3306*4882a593Smuzhiyun #define cfg_mds_diags_WORD			word19
3307*4882a593Smuzhiyun #define cfg_nvme_SHIFT				3
3308*4882a593Smuzhiyun #define cfg_nvme_MASK				0x00000001
3309*4882a593Smuzhiyun #define cfg_nvme_WORD				word19
3310*4882a593Smuzhiyun #define cfg_xib_SHIFT				4
3311*4882a593Smuzhiyun #define cfg_xib_MASK				0x00000001
3312*4882a593Smuzhiyun #define cfg_xib_WORD				word19
3313*4882a593Smuzhiyun #define cfg_xpsgl_SHIFT				6
3314*4882a593Smuzhiyun #define cfg_xpsgl_MASK				0x00000001
3315*4882a593Smuzhiyun #define cfg_xpsgl_WORD				word19
3316*4882a593Smuzhiyun #define cfg_eqdr_SHIFT				8
3317*4882a593Smuzhiyun #define cfg_eqdr_MASK				0x00000001
3318*4882a593Smuzhiyun #define cfg_eqdr_WORD				word19
3319*4882a593Smuzhiyun #define cfg_nosr_SHIFT				9
3320*4882a593Smuzhiyun #define cfg_nosr_MASK				0x00000001
3321*4882a593Smuzhiyun #define cfg_nosr_WORD				word19
3322*4882a593Smuzhiyun 
3323*4882a593Smuzhiyun #define cfg_bv1s_SHIFT                          10
3324*4882a593Smuzhiyun #define cfg_bv1s_MASK                           0x00000001
3325*4882a593Smuzhiyun #define cfg_bv1s_WORD                           word19
3326*4882a593Smuzhiyun #define cfg_pvl_SHIFT				13
3327*4882a593Smuzhiyun #define cfg_pvl_MASK				0x00000001
3328*4882a593Smuzhiyun #define cfg_pvl_WORD				word19
3329*4882a593Smuzhiyun 
3330*4882a593Smuzhiyun #define cfg_nsler_SHIFT                         12
3331*4882a593Smuzhiyun #define cfg_nsler_MASK                          0x00000001
3332*4882a593Smuzhiyun #define cfg_nsler_WORD                          word19
3333*4882a593Smuzhiyun 
3334*4882a593Smuzhiyun 	uint32_t word20;
3335*4882a593Smuzhiyun #define cfg_max_tow_xri_SHIFT			0
3336*4882a593Smuzhiyun #define cfg_max_tow_xri_MASK			0x0000ffff
3337*4882a593Smuzhiyun #define cfg_max_tow_xri_WORD			word20
3338*4882a593Smuzhiyun 
3339*4882a593Smuzhiyun 	uint32_t word21;                        /* RESERVED */
3340*4882a593Smuzhiyun 	uint32_t word22;                        /* RESERVED */
3341*4882a593Smuzhiyun 	uint32_t word23;                        /* RESERVED */
3342*4882a593Smuzhiyun 
3343*4882a593Smuzhiyun 	uint32_t word24;
3344*4882a593Smuzhiyun #define cfg_frag_field_offset_SHIFT		0
3345*4882a593Smuzhiyun #define cfg_frag_field_offset_MASK		0x0000ffff
3346*4882a593Smuzhiyun #define cfg_frag_field_offset_WORD		word24
3347*4882a593Smuzhiyun 
3348*4882a593Smuzhiyun #define cfg_frag_field_size_SHIFT		16
3349*4882a593Smuzhiyun #define cfg_frag_field_size_MASK		0x0000ffff
3350*4882a593Smuzhiyun #define cfg_frag_field_size_WORD		word24
3351*4882a593Smuzhiyun 
3352*4882a593Smuzhiyun 	uint32_t word25;
3353*4882a593Smuzhiyun #define cfg_sgl_field_offset_SHIFT		0
3354*4882a593Smuzhiyun #define cfg_sgl_field_offset_MASK		0x0000ffff
3355*4882a593Smuzhiyun #define cfg_sgl_field_offset_WORD		word25
3356*4882a593Smuzhiyun 
3357*4882a593Smuzhiyun #define cfg_sgl_field_size_SHIFT		16
3358*4882a593Smuzhiyun #define cfg_sgl_field_size_MASK			0x0000ffff
3359*4882a593Smuzhiyun #define cfg_sgl_field_size_WORD			word25
3360*4882a593Smuzhiyun 
3361*4882a593Smuzhiyun 	uint32_t word26;	/* Chain SGE initial value LOW  */
3362*4882a593Smuzhiyun 	uint32_t word27;	/* Chain SGE initial value HIGH */
3363*4882a593Smuzhiyun #define LPFC_NODELAY_MAX_IO			32
3364*4882a593Smuzhiyun };
3365*4882a593Smuzhiyun 
3366*4882a593Smuzhiyun #define LPFC_SET_UE_RECOVERY		0x10
3367*4882a593Smuzhiyun #define LPFC_SET_MDS_DIAGS		0x12
3368*4882a593Smuzhiyun #define LPFC_SET_DUAL_DUMP		0x1e
3369*4882a593Smuzhiyun struct lpfc_mbx_set_feature {
3370*4882a593Smuzhiyun 	struct mbox_header header;
3371*4882a593Smuzhiyun 	uint32_t feature;
3372*4882a593Smuzhiyun 	uint32_t param_len;
3373*4882a593Smuzhiyun 	uint32_t word6;
3374*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UER_SHIFT  0
3375*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UER_MASK   0x00000001
3376*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UER_WORD   word6
3377*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_SHIFT  2
3378*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_MASK   0x00000001
3379*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_WORD   word6
3380*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_deep_loopbk_SHIFT  1
3381*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_deep_loopbk_MASK   0x00000001
3382*4882a593Smuzhiyun #define lpfc_mbx_set_feature_mds_deep_loopbk_WORD   word6
3383*4882a593Smuzhiyun #define lpfc_mbx_set_feature_dd_SHIFT		0
3384*4882a593Smuzhiyun #define lpfc_mbx_set_feature_dd_MASK		0x00000001
3385*4882a593Smuzhiyun #define lpfc_mbx_set_feature_dd_WORD		word6
3386*4882a593Smuzhiyun #define lpfc_mbx_set_feature_ddquery_SHIFT	1
3387*4882a593Smuzhiyun #define lpfc_mbx_set_feature_ddquery_MASK	0x00000001
3388*4882a593Smuzhiyun #define lpfc_mbx_set_feature_ddquery_WORD	word6
3389*4882a593Smuzhiyun #define LPFC_DISABLE_DUAL_DUMP		0
3390*4882a593Smuzhiyun #define LPFC_ENABLE_DUAL_DUMP		1
3391*4882a593Smuzhiyun #define LPFC_QUERY_OP_DUAL_DUMP		2
3392*4882a593Smuzhiyun 	uint32_t word7;
3393*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UERP_SHIFT 0
3394*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UERP_MASK  0x0000ffff
3395*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UERP_WORD  word7
3396*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UESR_SHIFT 16
3397*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UESR_MASK  0x0000ffff
3398*4882a593Smuzhiyun #define lpfc_mbx_set_feature_UESR_WORD  word7
3399*4882a593Smuzhiyun };
3400*4882a593Smuzhiyun 
3401*4882a593Smuzhiyun 
3402*4882a593Smuzhiyun #define LPFC_SET_HOST_OS_DRIVER_VERSION    0x2
3403*4882a593Smuzhiyun struct lpfc_mbx_set_host_data {
3404*4882a593Smuzhiyun #define LPFC_HOST_OS_DRIVER_VERSION_SIZE   48
3405*4882a593Smuzhiyun 	struct mbox_header header;
3406*4882a593Smuzhiyun 	uint32_t param_id;
3407*4882a593Smuzhiyun 	uint32_t param_len;
3408*4882a593Smuzhiyun 	uint8_t  data[LPFC_HOST_OS_DRIVER_VERSION_SIZE];
3409*4882a593Smuzhiyun };
3410*4882a593Smuzhiyun 
3411*4882a593Smuzhiyun struct lpfc_mbx_set_trunk_mode {
3412*4882a593Smuzhiyun 	struct mbox_header header;
3413*4882a593Smuzhiyun 	uint32_t word0;
3414*4882a593Smuzhiyun #define lpfc_mbx_set_trunk_mode_WORD      word0
3415*4882a593Smuzhiyun #define lpfc_mbx_set_trunk_mode_SHIFT     0
3416*4882a593Smuzhiyun #define lpfc_mbx_set_trunk_mode_MASK      0xFF
3417*4882a593Smuzhiyun 	uint32_t word1;
3418*4882a593Smuzhiyun 	uint32_t word2;
3419*4882a593Smuzhiyun };
3420*4882a593Smuzhiyun 
3421*4882a593Smuzhiyun struct lpfc_mbx_get_sli4_parameters {
3422*4882a593Smuzhiyun 	struct mbox_header header;
3423*4882a593Smuzhiyun 	struct lpfc_sli4_parameters sli4_parameters;
3424*4882a593Smuzhiyun };
3425*4882a593Smuzhiyun 
3426*4882a593Smuzhiyun struct lpfc_rscr_desc_generic {
3427*4882a593Smuzhiyun #define LPFC_RSRC_DESC_WSIZE			22
3428*4882a593Smuzhiyun 	uint32_t desc[LPFC_RSRC_DESC_WSIZE];
3429*4882a593Smuzhiyun };
3430*4882a593Smuzhiyun 
3431*4882a593Smuzhiyun struct lpfc_rsrc_desc_pcie {
3432*4882a593Smuzhiyun 	uint32_t word0;
3433*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_type_SHIFT		0
3434*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_type_MASK		0x000000ff
3435*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_type_WORD		word0
3436*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_PCIE		0x40
3437*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_length_SHIFT	8
3438*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_length_MASK		0x000000ff
3439*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_length_WORD		word0
3440*4882a593Smuzhiyun 	uint32_t word1;
3441*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pfnum_SHIFT		0
3442*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pfnum_MASK		0x000000ff
3443*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pfnum_WORD		word1
3444*4882a593Smuzhiyun 	uint32_t reserved;
3445*4882a593Smuzhiyun 	uint32_t word3;
3446*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_sriov_sta_SHIFT	0
3447*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_sriov_sta_MASK	0x000000ff
3448*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_sriov_sta_WORD	word3
3449*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_sta_SHIFT	8
3450*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_sta_MASK		0x000000ff
3451*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_sta_WORD		word3
3452*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_type_SHIFT	16
3453*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_type_MASK	0x000000ff
3454*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_pf_type_WORD	word3
3455*4882a593Smuzhiyun 	uint32_t word4;
3456*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_nr_virtfn_SHIFT	0
3457*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_nr_virtfn_MASK	0x0000ffff
3458*4882a593Smuzhiyun #define lpfc_rsrc_desc_pcie_nr_virtfn_WORD	word4
3459*4882a593Smuzhiyun };
3460*4882a593Smuzhiyun 
3461*4882a593Smuzhiyun struct lpfc_rsrc_desc_fcfcoe {
3462*4882a593Smuzhiyun 	uint32_t word0;
3463*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_type_SHIFT	0
3464*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_type_MASK		0x000000ff
3465*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_type_WORD		word0
3466*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_FCFCOE		0x43
3467*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_length_SHIFT	8
3468*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_length_MASK	0x000000ff
3469*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_length_WORD	word0
3470*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_FCFCOE_V0_RSVD	0
3471*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_FCFCOE_V0_LENGTH	72
3472*4882a593Smuzhiyun #define LPFC_RSRC_DESC_TYPE_FCFCOE_V1_LENGTH	88
3473*4882a593Smuzhiyun 	uint32_t word1;
3474*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfnum_SHIFT	0
3475*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfnum_MASK	0x000000ff
3476*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfnum_WORD	word1
3477*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_pfnum_SHIFT	16
3478*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_pfnum_MASK        0x000007ff
3479*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_pfnum_WORD        word1
3480*4882a593Smuzhiyun 	uint32_t word2;
3481*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rpi_cnt_SHIFT	0
3482*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rpi_cnt_MASK	0x0000ffff
3483*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rpi_cnt_WORD	word2
3484*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_xri_cnt_SHIFT	16
3485*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_xri_cnt_MASK	0x0000ffff
3486*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_xri_cnt_WORD	word2
3487*4882a593Smuzhiyun 	uint32_t word3;
3488*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_wq_cnt_SHIFT	0
3489*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_wq_cnt_MASK	0x0000ffff
3490*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_wq_cnt_WORD	word3
3491*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rq_cnt_SHIFT	16
3492*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rq_cnt_MASK	0x0000ffff
3493*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_rq_cnt_WORD	word3
3494*4882a593Smuzhiyun 	uint32_t word4;
3495*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_cq_cnt_SHIFT	0
3496*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_cq_cnt_MASK	0x0000ffff
3497*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_cq_cnt_WORD	word4
3498*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vpi_cnt_SHIFT	16
3499*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vpi_cnt_MASK	0x0000ffff
3500*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vpi_cnt_WORD	word4
3501*4882a593Smuzhiyun 	uint32_t word5;
3502*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_fcfi_cnt_SHIFT	0
3503*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_fcfi_cnt_MASK	0x0000ffff
3504*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_fcfi_cnt_WORD	word5
3505*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfi_cnt_SHIFT	16
3506*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfi_cnt_MASK	0x0000ffff
3507*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_vfi_cnt_WORD	word5
3508*4882a593Smuzhiyun 	uint32_t word6;
3509*4882a593Smuzhiyun 	uint32_t word7;
3510*4882a593Smuzhiyun 	uint32_t word8;
3511*4882a593Smuzhiyun 	uint32_t word9;
3512*4882a593Smuzhiyun 	uint32_t word10;
3513*4882a593Smuzhiyun 	uint32_t word11;
3514*4882a593Smuzhiyun 	uint32_t word12;
3515*4882a593Smuzhiyun 	uint32_t word13;
3516*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_nr_SHIFT	0
3517*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_nr_MASK	0x0000003f
3518*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_nr_WORD	word13
3519*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_tp_SHIFT      6
3520*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_tp_MASK	0x00000003
3521*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lnk_tp_WORD	word13
3522*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lmc_SHIFT		8
3523*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lmc_MASK		0x00000001
3524*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lmc_WORD		word13
3525*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lld_SHIFT		9
3526*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lld_MASK		0x00000001
3527*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_lld_WORD		word13
3528*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_eq_cnt_SHIFT	16
3529*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_eq_cnt_MASK	0x0000ffff
3530*4882a593Smuzhiyun #define lpfc_rsrc_desc_fcfcoe_eq_cnt_WORD	word13
3531*4882a593Smuzhiyun /* extended FC/FCoE Resource Descriptor when length = 88 bytes */
3532*4882a593Smuzhiyun 	uint32_t bw_min;
3533*4882a593Smuzhiyun 	uint32_t bw_max;
3534*4882a593Smuzhiyun 	uint32_t iops_min;
3535*4882a593Smuzhiyun 	uint32_t iops_max;
3536*4882a593Smuzhiyun 	uint32_t reserved[4];
3537*4882a593Smuzhiyun };
3538*4882a593Smuzhiyun 
3539*4882a593Smuzhiyun struct lpfc_func_cfg {
3540*4882a593Smuzhiyun #define LPFC_RSRC_DESC_MAX_NUM			2
3541*4882a593Smuzhiyun 	uint32_t rsrc_desc_count;
3542*4882a593Smuzhiyun 	struct lpfc_rscr_desc_generic desc[LPFC_RSRC_DESC_MAX_NUM];
3543*4882a593Smuzhiyun };
3544*4882a593Smuzhiyun 
3545*4882a593Smuzhiyun struct lpfc_mbx_get_func_cfg {
3546*4882a593Smuzhiyun 	struct mbox_header header;
3547*4882a593Smuzhiyun #define LPFC_CFG_TYPE_PERSISTENT_OVERRIDE	0x0
3548*4882a593Smuzhiyun #define LPFC_CFG_TYPE_FACTURY_DEFAULT		0x1
3549*4882a593Smuzhiyun #define LPFC_CFG_TYPE_CURRENT_ACTIVE		0x2
3550*4882a593Smuzhiyun 	struct lpfc_func_cfg func_cfg;
3551*4882a593Smuzhiyun };
3552*4882a593Smuzhiyun 
3553*4882a593Smuzhiyun struct lpfc_prof_cfg {
3554*4882a593Smuzhiyun #define LPFC_RSRC_DESC_MAX_NUM			2
3555*4882a593Smuzhiyun 	uint32_t rsrc_desc_count;
3556*4882a593Smuzhiyun 	struct lpfc_rscr_desc_generic desc[LPFC_RSRC_DESC_MAX_NUM];
3557*4882a593Smuzhiyun };
3558*4882a593Smuzhiyun 
3559*4882a593Smuzhiyun struct lpfc_mbx_get_prof_cfg {
3560*4882a593Smuzhiyun 	struct mbox_header header;
3561*4882a593Smuzhiyun #define LPFC_CFG_TYPE_PERSISTENT_OVERRIDE	0x0
3562*4882a593Smuzhiyun #define LPFC_CFG_TYPE_FACTURY_DEFAULT		0x1
3563*4882a593Smuzhiyun #define LPFC_CFG_TYPE_CURRENT_ACTIVE		0x2
3564*4882a593Smuzhiyun 	union {
3565*4882a593Smuzhiyun 		struct {
3566*4882a593Smuzhiyun 			uint32_t word10;
3567*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_id_SHIFT	0
3568*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_id_MASK	0x000000ff
3569*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_id_WORD	word10
3570*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_tp_SHIFT	8
3571*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_tp_MASK	0x00000003
3572*4882a593Smuzhiyun #define lpfc_mbx_get_prof_cfg_prof_tp_WORD	word10
3573*4882a593Smuzhiyun 		} request;
3574*4882a593Smuzhiyun 		struct {
3575*4882a593Smuzhiyun 			struct lpfc_prof_cfg prof_cfg;
3576*4882a593Smuzhiyun 		} response;
3577*4882a593Smuzhiyun 	} u;
3578*4882a593Smuzhiyun };
3579*4882a593Smuzhiyun 
3580*4882a593Smuzhiyun struct lpfc_controller_attribute {
3581*4882a593Smuzhiyun 	uint32_t version_string[8];
3582*4882a593Smuzhiyun 	uint32_t manufacturer_name[8];
3583*4882a593Smuzhiyun 	uint32_t supported_modes;
3584*4882a593Smuzhiyun 	uint32_t word17;
3585*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_lo_SHIFT	0
3586*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_lo_MASK	0x000000ff
3587*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_lo_WORD	word17
3588*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_hi_SHIFT	8
3589*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_hi_MASK	0x000000ff
3590*4882a593Smuzhiyun #define lpfc_cntl_attr_eprom_ver_hi_WORD	word17
3591*4882a593Smuzhiyun 	uint32_t mbx_da_struct_ver;
3592*4882a593Smuzhiyun 	uint32_t ep_fw_da_struct_ver;
3593*4882a593Smuzhiyun 	uint32_t ncsi_ver_str[3];
3594*4882a593Smuzhiyun 	uint32_t dflt_ext_timeout;
3595*4882a593Smuzhiyun 	uint32_t model_number[8];
3596*4882a593Smuzhiyun 	uint32_t description[16];
3597*4882a593Smuzhiyun 	uint32_t serial_number[8];
3598*4882a593Smuzhiyun 	uint32_t ip_ver_str[8];
3599*4882a593Smuzhiyun 	uint32_t fw_ver_str[8];
3600*4882a593Smuzhiyun 	uint32_t bios_ver_str[8];
3601*4882a593Smuzhiyun 	uint32_t redboot_ver_str[8];
3602*4882a593Smuzhiyun 	uint32_t driver_ver_str[8];
3603*4882a593Smuzhiyun 	uint32_t flash_fw_ver_str[8];
3604*4882a593Smuzhiyun 	uint32_t functionality;
3605*4882a593Smuzhiyun 	uint32_t word105;
3606*4882a593Smuzhiyun #define lpfc_cntl_attr_max_cbd_len_SHIFT	0
3607*4882a593Smuzhiyun #define lpfc_cntl_attr_max_cbd_len_MASK		0x0000ffff
3608*4882a593Smuzhiyun #define lpfc_cntl_attr_max_cbd_len_WORD		word105
3609*4882a593Smuzhiyun #define lpfc_cntl_attr_asic_rev_SHIFT		16
3610*4882a593Smuzhiyun #define lpfc_cntl_attr_asic_rev_MASK		0x000000ff
3611*4882a593Smuzhiyun #define lpfc_cntl_attr_asic_rev_WORD		word105
3612*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid0_SHIFT		24
3613*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid0_MASK		0x000000ff
3614*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid0_WORD		word105
3615*4882a593Smuzhiyun 	uint32_t gen_guid1_12[3];
3616*4882a593Smuzhiyun 	uint32_t word109;
3617*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid13_14_SHIFT	0
3618*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid13_14_MASK	0x0000ffff
3619*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid13_14_WORD	word109
3620*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid15_SHIFT		16
3621*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid15_MASK		0x000000ff
3622*4882a593Smuzhiyun #define lpfc_cntl_attr_gen_guid15_WORD		word109
3623*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_port_cnt_SHIFT	24
3624*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_port_cnt_MASK	0x000000ff
3625*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_port_cnt_WORD	word109
3626*4882a593Smuzhiyun 	uint32_t word110;
3627*4882a593Smuzhiyun #define lpfc_cntl_attr_dflt_lnk_tmo_SHIFT	0
3628*4882a593Smuzhiyun #define lpfc_cntl_attr_dflt_lnk_tmo_MASK	0x0000ffff
3629*4882a593Smuzhiyun #define lpfc_cntl_attr_dflt_lnk_tmo_WORD	word110
3630*4882a593Smuzhiyun #define lpfc_cntl_attr_multi_func_dev_SHIFT	24
3631*4882a593Smuzhiyun #define lpfc_cntl_attr_multi_func_dev_MASK	0x000000ff
3632*4882a593Smuzhiyun #define lpfc_cntl_attr_multi_func_dev_WORD	word110
3633*4882a593Smuzhiyun 	uint32_t word111;
3634*4882a593Smuzhiyun #define lpfc_cntl_attr_cache_valid_SHIFT	0
3635*4882a593Smuzhiyun #define lpfc_cntl_attr_cache_valid_MASK		0x000000ff
3636*4882a593Smuzhiyun #define lpfc_cntl_attr_cache_valid_WORD		word111
3637*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_status_SHIFT		8
3638*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_status_MASK		0x000000ff
3639*4882a593Smuzhiyun #define lpfc_cntl_attr_hba_status_WORD		word111
3640*4882a593Smuzhiyun #define lpfc_cntl_attr_max_domain_SHIFT		16
3641*4882a593Smuzhiyun #define lpfc_cntl_attr_max_domain_MASK		0x000000ff
3642*4882a593Smuzhiyun #define lpfc_cntl_attr_max_domain_WORD		word111
3643*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_numb_SHIFT		24
3644*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_numb_MASK		0x0000003f
3645*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_numb_WORD		word111
3646*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_type_SHIFT		30
3647*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_type_MASK		0x00000003
3648*4882a593Smuzhiyun #define lpfc_cntl_attr_lnk_type_WORD		word111
3649*4882a593Smuzhiyun 	uint32_t fw_post_status;
3650*4882a593Smuzhiyun 	uint32_t hba_mtu[8];
3651*4882a593Smuzhiyun 	uint32_t word121;
3652*4882a593Smuzhiyun 	uint32_t reserved1[3];
3653*4882a593Smuzhiyun 	uint32_t word125;
3654*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_vendor_id_SHIFT	0
3655*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_vendor_id_MASK	0x0000ffff
3656*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_vendor_id_WORD	word125
3657*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_device_id_SHIFT	16
3658*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_device_id_MASK	0x0000ffff
3659*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_device_id_WORD	word125
3660*4882a593Smuzhiyun 	uint32_t word126;
3661*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subvdr_id_SHIFT	0
3662*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subvdr_id_MASK	0x0000ffff
3663*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subvdr_id_WORD	word126
3664*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subsys_id_SHIFT	16
3665*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subsys_id_MASK	0x0000ffff
3666*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_subsys_id_WORD	word126
3667*4882a593Smuzhiyun 	uint32_t word127;
3668*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_bus_num_SHIFT	0
3669*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_bus_num_MASK		0x000000ff
3670*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_bus_num_WORD		word127
3671*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_dev_num_SHIFT	8
3672*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_dev_num_MASK		0x000000ff
3673*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_dev_num_WORD		word127
3674*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_fnc_num_SHIFT	16
3675*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_fnc_num_MASK		0x000000ff
3676*4882a593Smuzhiyun #define lpfc_cntl_attr_pci_fnc_num_WORD		word127
3677*4882a593Smuzhiyun #define lpfc_cntl_attr_inf_type_SHIFT		24
3678*4882a593Smuzhiyun #define lpfc_cntl_attr_inf_type_MASK		0x000000ff
3679*4882a593Smuzhiyun #define lpfc_cntl_attr_inf_type_WORD		word127
3680*4882a593Smuzhiyun 	uint32_t unique_id[2];
3681*4882a593Smuzhiyun 	uint32_t word130;
3682*4882a593Smuzhiyun #define lpfc_cntl_attr_num_netfil_SHIFT		0
3683*4882a593Smuzhiyun #define lpfc_cntl_attr_num_netfil_MASK		0x000000ff
3684*4882a593Smuzhiyun #define lpfc_cntl_attr_num_netfil_WORD		word130
3685*4882a593Smuzhiyun 	uint32_t reserved2[4];
3686*4882a593Smuzhiyun };
3687*4882a593Smuzhiyun 
3688*4882a593Smuzhiyun struct lpfc_mbx_get_cntl_attributes {
3689*4882a593Smuzhiyun 	union  lpfc_sli4_cfg_shdr cfg_shdr;
3690*4882a593Smuzhiyun 	struct lpfc_controller_attribute cntl_attr;
3691*4882a593Smuzhiyun };
3692*4882a593Smuzhiyun 
3693*4882a593Smuzhiyun struct lpfc_mbx_get_port_name {
3694*4882a593Smuzhiyun 	struct mbox_header header;
3695*4882a593Smuzhiyun 	union {
3696*4882a593Smuzhiyun 		struct {
3697*4882a593Smuzhiyun 			uint32_t word4;
3698*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_lnk_type_SHIFT	0
3699*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_lnk_type_MASK	0x00000003
3700*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_lnk_type_WORD	word4
3701*4882a593Smuzhiyun 		} request;
3702*4882a593Smuzhiyun 		struct {
3703*4882a593Smuzhiyun 			uint32_t word4;
3704*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name0_SHIFT	0
3705*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name0_MASK	0x000000FF
3706*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name0_WORD	word4
3707*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name1_SHIFT	8
3708*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name1_MASK	0x000000FF
3709*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name1_WORD	word4
3710*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name2_SHIFT	16
3711*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name2_MASK	0x000000FF
3712*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name2_WORD	word4
3713*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name3_SHIFT	24
3714*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name3_MASK	0x000000FF
3715*4882a593Smuzhiyun #define lpfc_mbx_get_port_name_name3_WORD	word4
3716*4882a593Smuzhiyun #define LPFC_LINK_NUMBER_0			0
3717*4882a593Smuzhiyun #define LPFC_LINK_NUMBER_1			1
3718*4882a593Smuzhiyun #define LPFC_LINK_NUMBER_2			2
3719*4882a593Smuzhiyun #define LPFC_LINK_NUMBER_3			3
3720*4882a593Smuzhiyun 		} response;
3721*4882a593Smuzhiyun 	} u;
3722*4882a593Smuzhiyun };
3723*4882a593Smuzhiyun 
3724*4882a593Smuzhiyun /* Mailbox Completion Queue Error Messages */
3725*4882a593Smuzhiyun #define MB_CQE_STATUS_SUCCESS			0x0
3726*4882a593Smuzhiyun #define MB_CQE_STATUS_INSUFFICIENT_PRIVILEGES	0x1
3727*4882a593Smuzhiyun #define MB_CQE_STATUS_INVALID_PARAMETER		0x2
3728*4882a593Smuzhiyun #define MB_CQE_STATUS_INSUFFICIENT_RESOURCES	0x3
3729*4882a593Smuzhiyun #define MB_CEQ_STATUS_QUEUE_FLUSHING		0x4
3730*4882a593Smuzhiyun #define MB_CQE_STATUS_DMA_FAILED		0x5
3731*4882a593Smuzhiyun 
3732*4882a593Smuzhiyun #define LPFC_MBX_WR_CONFIG_MAX_BDE		1
3733*4882a593Smuzhiyun struct lpfc_mbx_wr_object {
3734*4882a593Smuzhiyun 	struct mbox_header header;
3735*4882a593Smuzhiyun 	union {
3736*4882a593Smuzhiyun 		struct {
3737*4882a593Smuzhiyun 			uint32_t word4;
3738*4882a593Smuzhiyun #define lpfc_wr_object_eof_SHIFT		31
3739*4882a593Smuzhiyun #define lpfc_wr_object_eof_MASK			0x00000001
3740*4882a593Smuzhiyun #define lpfc_wr_object_eof_WORD			word4
3741*4882a593Smuzhiyun #define lpfc_wr_object_eas_SHIFT		29
3742*4882a593Smuzhiyun #define lpfc_wr_object_eas_MASK			0x00000001
3743*4882a593Smuzhiyun #define lpfc_wr_object_eas_WORD			word4
3744*4882a593Smuzhiyun #define lpfc_wr_object_write_length_SHIFT	0
3745*4882a593Smuzhiyun #define lpfc_wr_object_write_length_MASK	0x00FFFFFF
3746*4882a593Smuzhiyun #define lpfc_wr_object_write_length_WORD	word4
3747*4882a593Smuzhiyun 			uint32_t write_offset;
3748*4882a593Smuzhiyun 			uint32_t object_name[26];
3749*4882a593Smuzhiyun 			uint32_t bde_count;
3750*4882a593Smuzhiyun 			struct ulp_bde64 bde[LPFC_MBX_WR_CONFIG_MAX_BDE];
3751*4882a593Smuzhiyun 		} request;
3752*4882a593Smuzhiyun 		struct {
3753*4882a593Smuzhiyun 			uint32_t actual_write_length;
3754*4882a593Smuzhiyun 			uint32_t word5;
3755*4882a593Smuzhiyun #define lpfc_wr_object_change_status_SHIFT	0
3756*4882a593Smuzhiyun #define lpfc_wr_object_change_status_MASK	0x000000FF
3757*4882a593Smuzhiyun #define lpfc_wr_object_change_status_WORD	word5
3758*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_NO_RESET_NEEDED	0x00
3759*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_PHYS_DEV_RESET	0x01
3760*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_FW_RESET		0x02
3761*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_PORT_MIGRATION	0x04
3762*4882a593Smuzhiyun #define LPFC_CHANGE_STATUS_PCI_RESET		0x05
3763*4882a593Smuzhiyun #define lpfc_wr_object_csf_SHIFT		8
3764*4882a593Smuzhiyun #define lpfc_wr_object_csf_MASK			0x00000001
3765*4882a593Smuzhiyun #define lpfc_wr_object_csf_WORD			word5
3766*4882a593Smuzhiyun 		} response;
3767*4882a593Smuzhiyun 	} u;
3768*4882a593Smuzhiyun };
3769*4882a593Smuzhiyun 
3770*4882a593Smuzhiyun /* mailbox queue entry structure */
3771*4882a593Smuzhiyun struct lpfc_mqe {
3772*4882a593Smuzhiyun 	uint32_t word0;
3773*4882a593Smuzhiyun #define lpfc_mqe_status_SHIFT		16
3774*4882a593Smuzhiyun #define lpfc_mqe_status_MASK		0x0000FFFF
3775*4882a593Smuzhiyun #define lpfc_mqe_status_WORD		word0
3776*4882a593Smuzhiyun #define lpfc_mqe_command_SHIFT		8
3777*4882a593Smuzhiyun #define lpfc_mqe_command_MASK		0x000000FF
3778*4882a593Smuzhiyun #define lpfc_mqe_command_WORD		word0
3779*4882a593Smuzhiyun 	union {
3780*4882a593Smuzhiyun 		uint32_t mb_words[LPFC_SLI4_MB_WORD_COUNT - 1];
3781*4882a593Smuzhiyun 		/* sli4 mailbox commands */
3782*4882a593Smuzhiyun 		struct lpfc_mbx_sli4_config sli4_config;
3783*4882a593Smuzhiyun 		struct lpfc_mbx_init_vfi init_vfi;
3784*4882a593Smuzhiyun 		struct lpfc_mbx_reg_vfi reg_vfi;
3785*4882a593Smuzhiyun 		struct lpfc_mbx_reg_vfi unreg_vfi;
3786*4882a593Smuzhiyun 		struct lpfc_mbx_init_vpi init_vpi;
3787*4882a593Smuzhiyun 		struct lpfc_mbx_resume_rpi resume_rpi;
3788*4882a593Smuzhiyun 		struct lpfc_mbx_read_fcf_tbl read_fcf_tbl;
3789*4882a593Smuzhiyun 		struct lpfc_mbx_add_fcf_tbl_entry add_fcf_entry;
3790*4882a593Smuzhiyun 		struct lpfc_mbx_del_fcf_tbl_entry del_fcf_entry;
3791*4882a593Smuzhiyun 		struct lpfc_mbx_redisc_fcf_tbl redisc_fcf_tbl;
3792*4882a593Smuzhiyun 		struct lpfc_mbx_reg_fcfi reg_fcfi;
3793*4882a593Smuzhiyun 		struct lpfc_mbx_reg_fcfi_mrq reg_fcfi_mrq;
3794*4882a593Smuzhiyun 		struct lpfc_mbx_unreg_fcfi unreg_fcfi;
3795*4882a593Smuzhiyun 		struct lpfc_mbx_mq_create mq_create;
3796*4882a593Smuzhiyun 		struct lpfc_mbx_mq_create_ext mq_create_ext;
3797*4882a593Smuzhiyun 		struct lpfc_mbx_eq_create eq_create;
3798*4882a593Smuzhiyun 		struct lpfc_mbx_modify_eq_delay eq_delay;
3799*4882a593Smuzhiyun 		struct lpfc_mbx_cq_create cq_create;
3800*4882a593Smuzhiyun 		struct lpfc_mbx_cq_create_set cq_create_set;
3801*4882a593Smuzhiyun 		struct lpfc_mbx_wq_create wq_create;
3802*4882a593Smuzhiyun 		struct lpfc_mbx_rq_create rq_create;
3803*4882a593Smuzhiyun 		struct lpfc_mbx_rq_create_v2 rq_create_v2;
3804*4882a593Smuzhiyun 		struct lpfc_mbx_mq_destroy mq_destroy;
3805*4882a593Smuzhiyun 		struct lpfc_mbx_eq_destroy eq_destroy;
3806*4882a593Smuzhiyun 		struct lpfc_mbx_cq_destroy cq_destroy;
3807*4882a593Smuzhiyun 		struct lpfc_mbx_wq_destroy wq_destroy;
3808*4882a593Smuzhiyun 		struct lpfc_mbx_rq_destroy rq_destroy;
3809*4882a593Smuzhiyun 		struct lpfc_mbx_get_rsrc_extent_info rsrc_extent_info;
3810*4882a593Smuzhiyun 		struct lpfc_mbx_alloc_rsrc_extents alloc_rsrc_extents;
3811*4882a593Smuzhiyun 		struct lpfc_mbx_dealloc_rsrc_extents dealloc_rsrc_extents;
3812*4882a593Smuzhiyun 		struct lpfc_mbx_post_sgl_pages post_sgl_pages;
3813*4882a593Smuzhiyun 		struct lpfc_mbx_nembed_cmd nembed_cmd;
3814*4882a593Smuzhiyun 		struct lpfc_mbx_read_rev read_rev;
3815*4882a593Smuzhiyun 		struct lpfc_mbx_read_vpi read_vpi;
3816*4882a593Smuzhiyun 		struct lpfc_mbx_read_config rd_config;
3817*4882a593Smuzhiyun 		struct lpfc_mbx_request_features req_ftrs;
3818*4882a593Smuzhiyun 		struct lpfc_mbx_post_hdr_tmpl hdr_tmpl;
3819*4882a593Smuzhiyun 		struct lpfc_mbx_query_fw_config query_fw_cfg;
3820*4882a593Smuzhiyun 		struct lpfc_mbx_set_beacon_config beacon_config;
3821*4882a593Smuzhiyun 		struct lpfc_mbx_get_sli4_parameters get_sli4_parameters;
3822*4882a593Smuzhiyun 		struct lpfc_mbx_set_link_diag_state link_diag_state;
3823*4882a593Smuzhiyun 		struct lpfc_mbx_set_link_diag_loopback link_diag_loopback;
3824*4882a593Smuzhiyun 		struct lpfc_mbx_run_link_diag_test link_diag_test;
3825*4882a593Smuzhiyun 		struct lpfc_mbx_get_func_cfg get_func_cfg;
3826*4882a593Smuzhiyun 		struct lpfc_mbx_get_prof_cfg get_prof_cfg;
3827*4882a593Smuzhiyun 		struct lpfc_mbx_wr_object wr_object;
3828*4882a593Smuzhiyun 		struct lpfc_mbx_get_port_name get_port_name;
3829*4882a593Smuzhiyun 		struct lpfc_mbx_set_feature  set_feature;
3830*4882a593Smuzhiyun 		struct lpfc_mbx_memory_dump_type3 mem_dump_type3;
3831*4882a593Smuzhiyun 		struct lpfc_mbx_set_host_data set_host_data;
3832*4882a593Smuzhiyun 		struct lpfc_mbx_set_trunk_mode set_trunk_mode;
3833*4882a593Smuzhiyun 		struct lpfc_mbx_nop nop;
3834*4882a593Smuzhiyun 		struct lpfc_mbx_set_ras_fwlog ras_fwlog;
3835*4882a593Smuzhiyun 	} un;
3836*4882a593Smuzhiyun };
3837*4882a593Smuzhiyun 
3838*4882a593Smuzhiyun struct lpfc_mcqe {
3839*4882a593Smuzhiyun 	uint32_t word0;
3840*4882a593Smuzhiyun #define lpfc_mcqe_status_SHIFT		0
3841*4882a593Smuzhiyun #define lpfc_mcqe_status_MASK		0x0000FFFF
3842*4882a593Smuzhiyun #define lpfc_mcqe_status_WORD		word0
3843*4882a593Smuzhiyun #define lpfc_mcqe_ext_status_SHIFT	16
3844*4882a593Smuzhiyun #define lpfc_mcqe_ext_status_MASK	0x0000FFFF
3845*4882a593Smuzhiyun #define lpfc_mcqe_ext_status_WORD	word0
3846*4882a593Smuzhiyun 	uint32_t mcqe_tag0;
3847*4882a593Smuzhiyun 	uint32_t mcqe_tag1;
3848*4882a593Smuzhiyun 	uint32_t trailer;
3849*4882a593Smuzhiyun #define lpfc_trailer_valid_SHIFT	31
3850*4882a593Smuzhiyun #define lpfc_trailer_valid_MASK		0x00000001
3851*4882a593Smuzhiyun #define lpfc_trailer_valid_WORD		trailer
3852*4882a593Smuzhiyun #define lpfc_trailer_async_SHIFT	30
3853*4882a593Smuzhiyun #define lpfc_trailer_async_MASK		0x00000001
3854*4882a593Smuzhiyun #define lpfc_trailer_async_WORD		trailer
3855*4882a593Smuzhiyun #define lpfc_trailer_hpi_SHIFT		29
3856*4882a593Smuzhiyun #define lpfc_trailer_hpi_MASK		0x00000001
3857*4882a593Smuzhiyun #define lpfc_trailer_hpi_WORD		trailer
3858*4882a593Smuzhiyun #define lpfc_trailer_completed_SHIFT	28
3859*4882a593Smuzhiyun #define lpfc_trailer_completed_MASK	0x00000001
3860*4882a593Smuzhiyun #define lpfc_trailer_completed_WORD	trailer
3861*4882a593Smuzhiyun #define lpfc_trailer_consumed_SHIFT	27
3862*4882a593Smuzhiyun #define lpfc_trailer_consumed_MASK	0x00000001
3863*4882a593Smuzhiyun #define lpfc_trailer_consumed_WORD	trailer
3864*4882a593Smuzhiyun #define lpfc_trailer_type_SHIFT		16
3865*4882a593Smuzhiyun #define lpfc_trailer_type_MASK		0x000000FF
3866*4882a593Smuzhiyun #define lpfc_trailer_type_WORD		trailer
3867*4882a593Smuzhiyun #define lpfc_trailer_code_SHIFT		8
3868*4882a593Smuzhiyun #define lpfc_trailer_code_MASK		0x000000FF
3869*4882a593Smuzhiyun #define lpfc_trailer_code_WORD		trailer
3870*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_LINK	0x1
3871*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_FCOE	0x2
3872*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_DCBX	0x3
3873*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_GRP5	0x5
3874*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_FC	0x10
3875*4882a593Smuzhiyun #define LPFC_TRAILER_CODE_SLI	0x11
3876*4882a593Smuzhiyun };
3877*4882a593Smuzhiyun 
3878*4882a593Smuzhiyun struct lpfc_acqe_link {
3879*4882a593Smuzhiyun 	uint32_t word0;
3880*4882a593Smuzhiyun #define lpfc_acqe_link_speed_SHIFT		24
3881*4882a593Smuzhiyun #define lpfc_acqe_link_speed_MASK		0x000000FF
3882*4882a593Smuzhiyun #define lpfc_acqe_link_speed_WORD		word0
3883*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_ZERO		0x0
3884*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_10MBPS		0x1
3885*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_100MBPS		0x2
3886*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_1GBPS		0x3
3887*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_10GBPS		0x4
3888*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_20GBPS		0x5
3889*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_25GBPS		0x6
3890*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_40GBPS		0x7
3891*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_SPEED_100GBPS		0x8
3892*4882a593Smuzhiyun #define lpfc_acqe_link_duplex_SHIFT		16
3893*4882a593Smuzhiyun #define lpfc_acqe_link_duplex_MASK		0x000000FF
3894*4882a593Smuzhiyun #define lpfc_acqe_link_duplex_WORD		word0
3895*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_DUPLEX_NONE		0x0
3896*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_DUPLEX_HALF		0x1
3897*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_DUPLEX_FULL		0x2
3898*4882a593Smuzhiyun #define lpfc_acqe_link_status_SHIFT		8
3899*4882a593Smuzhiyun #define lpfc_acqe_link_status_MASK		0x000000FF
3900*4882a593Smuzhiyun #define lpfc_acqe_link_status_WORD		word0
3901*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_STATUS_DOWN		0x0
3902*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_STATUS_UP		0x1
3903*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_STATUS_LOGICAL_DOWN	0x2
3904*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_STATUS_LOGICAL_UP	0x3
3905*4882a593Smuzhiyun #define lpfc_acqe_link_type_SHIFT		6
3906*4882a593Smuzhiyun #define lpfc_acqe_link_type_MASK		0x00000003
3907*4882a593Smuzhiyun #define lpfc_acqe_link_type_WORD		word0
3908*4882a593Smuzhiyun #define lpfc_acqe_link_number_SHIFT		0
3909*4882a593Smuzhiyun #define lpfc_acqe_link_number_MASK		0x0000003F
3910*4882a593Smuzhiyun #define lpfc_acqe_link_number_WORD		word0
3911*4882a593Smuzhiyun 	uint32_t word1;
3912*4882a593Smuzhiyun #define lpfc_acqe_link_fault_SHIFT	0
3913*4882a593Smuzhiyun #define lpfc_acqe_link_fault_MASK	0x000000FF
3914*4882a593Smuzhiyun #define lpfc_acqe_link_fault_WORD	word1
3915*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_FAULT_NONE	0x0
3916*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_FAULT_LOCAL	0x1
3917*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_FAULT_REMOTE	0x2
3918*4882a593Smuzhiyun #define LPFC_ASYNC_LINK_FAULT_LR_LRR	0x3
3919*4882a593Smuzhiyun #define lpfc_acqe_logical_link_speed_SHIFT	16
3920*4882a593Smuzhiyun #define lpfc_acqe_logical_link_speed_MASK	0x0000FFFF
3921*4882a593Smuzhiyun #define lpfc_acqe_logical_link_speed_WORD	word1
3922*4882a593Smuzhiyun 	uint32_t event_tag;
3923*4882a593Smuzhiyun 	uint32_t trailer;
3924*4882a593Smuzhiyun #define LPFC_LINK_EVENT_TYPE_PHYSICAL	0x0
3925*4882a593Smuzhiyun #define LPFC_LINK_EVENT_TYPE_VIRTUAL	0x1
3926*4882a593Smuzhiyun };
3927*4882a593Smuzhiyun 
3928*4882a593Smuzhiyun struct lpfc_acqe_fip {
3929*4882a593Smuzhiyun 	uint32_t index;
3930*4882a593Smuzhiyun 	uint32_t word1;
3931*4882a593Smuzhiyun #define lpfc_acqe_fip_fcf_count_SHIFT		0
3932*4882a593Smuzhiyun #define lpfc_acqe_fip_fcf_count_MASK		0x0000FFFF
3933*4882a593Smuzhiyun #define lpfc_acqe_fip_fcf_count_WORD		word1
3934*4882a593Smuzhiyun #define lpfc_acqe_fip_event_type_SHIFT		16
3935*4882a593Smuzhiyun #define lpfc_acqe_fip_event_type_MASK		0x0000FFFF
3936*4882a593Smuzhiyun #define lpfc_acqe_fip_event_type_WORD		word1
3937*4882a593Smuzhiyun 	uint32_t event_tag;
3938*4882a593Smuzhiyun 	uint32_t trailer;
3939*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_NEW_FCF		0x1
3940*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_FCF_TABLE_FULL	0x2
3941*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_FCF_DEAD		0x3
3942*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_CVL			0x4
3943*4882a593Smuzhiyun #define LPFC_FIP_EVENT_TYPE_FCF_PARAM_MOD	0x5
3944*4882a593Smuzhiyun };
3945*4882a593Smuzhiyun 
3946*4882a593Smuzhiyun struct lpfc_acqe_dcbx {
3947*4882a593Smuzhiyun 	uint32_t tlv_ttl;
3948*4882a593Smuzhiyun 	uint32_t reserved;
3949*4882a593Smuzhiyun 	uint32_t event_tag;
3950*4882a593Smuzhiyun 	uint32_t trailer;
3951*4882a593Smuzhiyun };
3952*4882a593Smuzhiyun 
3953*4882a593Smuzhiyun struct lpfc_acqe_grp5 {
3954*4882a593Smuzhiyun 	uint32_t word0;
3955*4882a593Smuzhiyun #define lpfc_acqe_grp5_type_SHIFT		6
3956*4882a593Smuzhiyun #define lpfc_acqe_grp5_type_MASK		0x00000003
3957*4882a593Smuzhiyun #define lpfc_acqe_grp5_type_WORD		word0
3958*4882a593Smuzhiyun #define lpfc_acqe_grp5_number_SHIFT		0
3959*4882a593Smuzhiyun #define lpfc_acqe_grp5_number_MASK		0x0000003F
3960*4882a593Smuzhiyun #define lpfc_acqe_grp5_number_WORD		word0
3961*4882a593Smuzhiyun 	uint32_t word1;
3962*4882a593Smuzhiyun #define lpfc_acqe_grp5_llink_spd_SHIFT	16
3963*4882a593Smuzhiyun #define lpfc_acqe_grp5_llink_spd_MASK	0x0000FFFF
3964*4882a593Smuzhiyun #define lpfc_acqe_grp5_llink_spd_WORD	word1
3965*4882a593Smuzhiyun 	uint32_t event_tag;
3966*4882a593Smuzhiyun 	uint32_t trailer;
3967*4882a593Smuzhiyun };
3968*4882a593Smuzhiyun 
3969*4882a593Smuzhiyun extern const char *const trunk_errmsg[];
3970*4882a593Smuzhiyun 
3971*4882a593Smuzhiyun struct lpfc_acqe_fc_la {
3972*4882a593Smuzhiyun 	uint32_t word0;
3973*4882a593Smuzhiyun #define lpfc_acqe_fc_la_speed_SHIFT		24
3974*4882a593Smuzhiyun #define lpfc_acqe_fc_la_speed_MASK		0x000000FF
3975*4882a593Smuzhiyun #define lpfc_acqe_fc_la_speed_WORD		word0
3976*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_UNKNOWN		0x0
3977*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_1G		0x1
3978*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_2G		0x2
3979*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_4G		0x4
3980*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_8G		0x8
3981*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_10G		0xA
3982*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_16G		0x10
3983*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_32G            0x20
3984*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_64G            0x21
3985*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_128G           0x22
3986*4882a593Smuzhiyun #define LPFC_FC_LA_SPEED_256G           0x23
3987*4882a593Smuzhiyun #define lpfc_acqe_fc_la_topology_SHIFT		16
3988*4882a593Smuzhiyun #define lpfc_acqe_fc_la_topology_MASK		0x000000FF
3989*4882a593Smuzhiyun #define lpfc_acqe_fc_la_topology_WORD		word0
3990*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_UNKOWN		0x0
3991*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_P2P		0x1
3992*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_FCAL		0x2
3993*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_INTERNAL_LOOP	0x3
3994*4882a593Smuzhiyun #define LPFC_FC_LA_TOP_SERDES_LOOP	0x4
3995*4882a593Smuzhiyun #define lpfc_acqe_fc_la_att_type_SHIFT		8
3996*4882a593Smuzhiyun #define lpfc_acqe_fc_la_att_type_MASK		0x000000FF
3997*4882a593Smuzhiyun #define lpfc_acqe_fc_la_att_type_WORD		word0
3998*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_LINK_UP		0x1
3999*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_LINK_DOWN	0x2
4000*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_NO_HARD_ALPA	0x3
4001*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_MDS_LINK_DOWN	0x4
4002*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_MDS_LOOPBACK	0x5
4003*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_UNEXP_WWPN	0x6
4004*4882a593Smuzhiyun #define LPFC_FC_LA_TYPE_TRUNKING_EVENT  0x7
4005*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_type_SHIFT		6
4006*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_type_MASK		0x00000003
4007*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_type_WORD		word0
4008*4882a593Smuzhiyun #define LPFC_LINK_TYPE_ETHERNET		0x0
4009*4882a593Smuzhiyun #define LPFC_LINK_TYPE_FC		0x1
4010*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_number_SHIFT	0
4011*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_number_MASK	0x0000003F
4012*4882a593Smuzhiyun #define lpfc_acqe_fc_la_port_number_WORD	word0
4013*4882a593Smuzhiyun 
4014*4882a593Smuzhiyun /* Attention Type is 0x07 (Trunking Event) word0 */
4015*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port0_SHIFT	16
4016*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port0_MASK	0x0000001
4017*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port0_WORD	word0
4018*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port1_SHIFT	17
4019*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port1_MASK	0x0000001
4020*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port1_WORD	word0
4021*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port2_SHIFT	18
4022*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port2_MASK	0x0000001
4023*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port2_WORD	word0
4024*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port3_SHIFT	19
4025*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port3_MASK	0x0000001
4026*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_link_status_port3_WORD	word0
4027*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port0_SHIFT	20
4028*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port0_MASK		0x0000001
4029*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port0_WORD		word0
4030*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port1_SHIFT	21
4031*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port1_MASK		0x0000001
4032*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port1_WORD		word0
4033*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port2_SHIFT	22
4034*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port2_MASK		0x0000001
4035*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port2_WORD		word0
4036*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port3_SHIFT	23
4037*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port3_MASK		0x0000001
4038*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_config_port3_WORD		word0
4039*4882a593Smuzhiyun 	uint32_t word1;
4040*4882a593Smuzhiyun #define lpfc_acqe_fc_la_llink_spd_SHIFT		16
4041*4882a593Smuzhiyun #define lpfc_acqe_fc_la_llink_spd_MASK		0x0000FFFF
4042*4882a593Smuzhiyun #define lpfc_acqe_fc_la_llink_spd_WORD		word1
4043*4882a593Smuzhiyun #define lpfc_acqe_fc_la_fault_SHIFT		0
4044*4882a593Smuzhiyun #define lpfc_acqe_fc_la_fault_MASK		0x000000FF
4045*4882a593Smuzhiyun #define lpfc_acqe_fc_la_fault_WORD		word1
4046*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_fault_SHIFT		0
4047*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_fault_MASK		0x0000000F
4048*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_fault_WORD		word1
4049*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_linkmask_SHIFT		4
4050*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_linkmask_MASK		0x000000F
4051*4882a593Smuzhiyun #define lpfc_acqe_fc_la_trunk_linkmask_WORD		word1
4052*4882a593Smuzhiyun #define LPFC_FC_LA_FAULT_NONE		0x0
4053*4882a593Smuzhiyun #define LPFC_FC_LA_FAULT_LOCAL		0x1
4054*4882a593Smuzhiyun #define LPFC_FC_LA_FAULT_REMOTE		0x2
4055*4882a593Smuzhiyun 	uint32_t event_tag;
4056*4882a593Smuzhiyun 	uint32_t trailer;
4057*4882a593Smuzhiyun #define LPFC_FC_LA_EVENT_TYPE_FC_LINK		0x1
4058*4882a593Smuzhiyun #define LPFC_FC_LA_EVENT_TYPE_SHARED_LINK	0x2
4059*4882a593Smuzhiyun };
4060*4882a593Smuzhiyun 
4061*4882a593Smuzhiyun struct lpfc_acqe_misconfigured_event {
4062*4882a593Smuzhiyun 	struct {
4063*4882a593Smuzhiyun 	uint32_t word0;
4064*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_state_SHIFT	0
4065*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_state_MASK		0x000000FF
4066*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_state_WORD		word0
4067*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_state_SHIFT	8
4068*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_state_MASK		0x000000FF
4069*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_state_WORD		word0
4070*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_state_SHIFT	16
4071*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_state_MASK		0x000000FF
4072*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_state_WORD		word0
4073*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_state_SHIFT	24
4074*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_state_MASK		0x000000FF
4075*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_state_WORD		word0
4076*4882a593Smuzhiyun 	uint32_t word1;
4077*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_op_SHIFT		0
4078*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_op_MASK		0x00000001
4079*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_op_WORD		word1
4080*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_severity_SHIFT	1
4081*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_severity_MASK	0x00000003
4082*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port0_severity_WORD	word1
4083*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_op_SHIFT		8
4084*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_op_MASK		0x00000001
4085*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_op_WORD		word1
4086*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_severity_SHIFT	9
4087*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_severity_MASK	0x00000003
4088*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port1_severity_WORD	word1
4089*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_op_SHIFT		16
4090*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_op_MASK		0x00000001
4091*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_op_WORD		word1
4092*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_severity_SHIFT	17
4093*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_severity_MASK	0x00000003
4094*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port2_severity_WORD	word1
4095*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_op_SHIFT		24
4096*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_op_MASK		0x00000001
4097*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_op_WORD		word1
4098*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_severity_SHIFT	25
4099*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_severity_MASK	0x00000003
4100*4882a593Smuzhiyun #define lpfc_sli_misconfigured_port3_severity_WORD	word1
4101*4882a593Smuzhiyun 	} theEvent;
4102*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_VALID			0x00
4103*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_NOT_PRESENT	0x01
4104*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_WRONG_TYPE	0x02
4105*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_UNSUPPORTED	0x03
4106*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_UNQUALIFIED	0x04
4107*4882a593Smuzhiyun #define LPFC_SLI_EVENT_STATUS_UNCERTIFIED	0x05
4108*4882a593Smuzhiyun };
4109*4882a593Smuzhiyun 
4110*4882a593Smuzhiyun struct lpfc_acqe_sli {
4111*4882a593Smuzhiyun 	uint32_t event_data1;
4112*4882a593Smuzhiyun 	uint32_t event_data2;
4113*4882a593Smuzhiyun 	uint32_t reserved;
4114*4882a593Smuzhiyun 	uint32_t trailer;
4115*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_PORT_ERROR		0x1
4116*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_OVER_TEMP		0x2
4117*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_NORM_TEMP		0x3
4118*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_NVLOG_POST		0x4
4119*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_DIAG_DUMP		0x5
4120*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_MISCONFIGURED	0x9
4121*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_REMOTE_DPORT	0xA
4122*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_MISCONF_FAWWN	0xF
4123*4882a593Smuzhiyun #define LPFC_SLI_EVENT_TYPE_EEPROM_FAILURE	0x10
4124*4882a593Smuzhiyun };
4125*4882a593Smuzhiyun 
4126*4882a593Smuzhiyun /*
4127*4882a593Smuzhiyun  * Define the bootstrap mailbox (bmbx) region used to communicate
4128*4882a593Smuzhiyun  * mailbox command between the host and port. The mailbox consists
4129*4882a593Smuzhiyun  * of a payload area of 256 bytes and a completion queue of length
4130*4882a593Smuzhiyun  * 16 bytes.
4131*4882a593Smuzhiyun  */
4132*4882a593Smuzhiyun struct lpfc_bmbx_create {
4133*4882a593Smuzhiyun 	struct lpfc_mqe mqe;
4134*4882a593Smuzhiyun 	struct lpfc_mcqe mcqe;
4135*4882a593Smuzhiyun };
4136*4882a593Smuzhiyun 
4137*4882a593Smuzhiyun #define SGL_ALIGN_SZ 64
4138*4882a593Smuzhiyun #define SGL_PAGE_SIZE 4096
4139*4882a593Smuzhiyun /* align SGL addr on a size boundary - adjust address up */
4140*4882a593Smuzhiyun #define NO_XRI  0xffff
4141*4882a593Smuzhiyun 
4142*4882a593Smuzhiyun struct wqe_common {
4143*4882a593Smuzhiyun 	uint32_t word6;
4144*4882a593Smuzhiyun #define wqe_xri_tag_SHIFT     0
4145*4882a593Smuzhiyun #define wqe_xri_tag_MASK      0x0000FFFF
4146*4882a593Smuzhiyun #define wqe_xri_tag_WORD      word6
4147*4882a593Smuzhiyun #define wqe_ctxt_tag_SHIFT    16
4148*4882a593Smuzhiyun #define wqe_ctxt_tag_MASK     0x0000FFFF
4149*4882a593Smuzhiyun #define wqe_ctxt_tag_WORD     word6
4150*4882a593Smuzhiyun 	uint32_t word7;
4151*4882a593Smuzhiyun #define wqe_dif_SHIFT         0
4152*4882a593Smuzhiyun #define wqe_dif_MASK          0x00000003
4153*4882a593Smuzhiyun #define wqe_dif_WORD          word7
4154*4882a593Smuzhiyun #define LPFC_WQE_DIF_PASSTHRU	1
4155*4882a593Smuzhiyun #define LPFC_WQE_DIF_STRIP	2
4156*4882a593Smuzhiyun #define LPFC_WQE_DIF_INSERT	3
4157*4882a593Smuzhiyun #define wqe_ct_SHIFT          2
4158*4882a593Smuzhiyun #define wqe_ct_MASK           0x00000003
4159*4882a593Smuzhiyun #define wqe_ct_WORD           word7
4160*4882a593Smuzhiyun #define wqe_status_SHIFT      4
4161*4882a593Smuzhiyun #define wqe_status_MASK       0x0000000f
4162*4882a593Smuzhiyun #define wqe_status_WORD       word7
4163*4882a593Smuzhiyun #define wqe_cmnd_SHIFT        8
4164*4882a593Smuzhiyun #define wqe_cmnd_MASK         0x000000ff
4165*4882a593Smuzhiyun #define wqe_cmnd_WORD         word7
4166*4882a593Smuzhiyun #define wqe_class_SHIFT       16
4167*4882a593Smuzhiyun #define wqe_class_MASK        0x00000007
4168*4882a593Smuzhiyun #define wqe_class_WORD        word7
4169*4882a593Smuzhiyun #define wqe_ar_SHIFT          19
4170*4882a593Smuzhiyun #define wqe_ar_MASK           0x00000001
4171*4882a593Smuzhiyun #define wqe_ar_WORD           word7
4172*4882a593Smuzhiyun #define wqe_ag_SHIFT          wqe_ar_SHIFT
4173*4882a593Smuzhiyun #define wqe_ag_MASK           wqe_ar_MASK
4174*4882a593Smuzhiyun #define wqe_ag_WORD           wqe_ar_WORD
4175*4882a593Smuzhiyun #define wqe_pu_SHIFT          20
4176*4882a593Smuzhiyun #define wqe_pu_MASK           0x00000003
4177*4882a593Smuzhiyun #define wqe_pu_WORD           word7
4178*4882a593Smuzhiyun #define wqe_erp_SHIFT         22
4179*4882a593Smuzhiyun #define wqe_erp_MASK          0x00000001
4180*4882a593Smuzhiyun #define wqe_erp_WORD          word7
4181*4882a593Smuzhiyun #define wqe_conf_SHIFT        wqe_erp_SHIFT
4182*4882a593Smuzhiyun #define wqe_conf_MASK         wqe_erp_MASK
4183*4882a593Smuzhiyun #define wqe_conf_WORD         wqe_erp_WORD
4184*4882a593Smuzhiyun #define wqe_lnk_SHIFT         23
4185*4882a593Smuzhiyun #define wqe_lnk_MASK          0x00000001
4186*4882a593Smuzhiyun #define wqe_lnk_WORD          word7
4187*4882a593Smuzhiyun #define wqe_tmo_SHIFT         24
4188*4882a593Smuzhiyun #define wqe_tmo_MASK          0x000000ff
4189*4882a593Smuzhiyun #define wqe_tmo_WORD          word7
4190*4882a593Smuzhiyun 	uint32_t abort_tag; /* word 8 in WQE */
4191*4882a593Smuzhiyun 	uint32_t word9;
4192*4882a593Smuzhiyun #define wqe_reqtag_SHIFT      0
4193*4882a593Smuzhiyun #define wqe_reqtag_MASK       0x0000FFFF
4194*4882a593Smuzhiyun #define wqe_reqtag_WORD       word9
4195*4882a593Smuzhiyun #define wqe_temp_rpi_SHIFT    16
4196*4882a593Smuzhiyun #define wqe_temp_rpi_MASK     0x0000FFFF
4197*4882a593Smuzhiyun #define wqe_temp_rpi_WORD     word9
4198*4882a593Smuzhiyun #define wqe_rcvoxid_SHIFT     16
4199*4882a593Smuzhiyun #define wqe_rcvoxid_MASK      0x0000FFFF
4200*4882a593Smuzhiyun #define wqe_rcvoxid_WORD      word9
4201*4882a593Smuzhiyun #define wqe_sof_SHIFT         24
4202*4882a593Smuzhiyun #define wqe_sof_MASK          0x000000FF
4203*4882a593Smuzhiyun #define wqe_sof_WORD          word9
4204*4882a593Smuzhiyun #define wqe_eof_SHIFT         16
4205*4882a593Smuzhiyun #define wqe_eof_MASK          0x000000FF
4206*4882a593Smuzhiyun #define wqe_eof_WORD          word9
4207*4882a593Smuzhiyun 	uint32_t word10;
4208*4882a593Smuzhiyun #define wqe_ebde_cnt_SHIFT    0
4209*4882a593Smuzhiyun #define wqe_ebde_cnt_MASK     0x0000000f
4210*4882a593Smuzhiyun #define wqe_ebde_cnt_WORD     word10
4211*4882a593Smuzhiyun #define wqe_nvme_SHIFT        4
4212*4882a593Smuzhiyun #define wqe_nvme_MASK         0x00000001
4213*4882a593Smuzhiyun #define wqe_nvme_WORD         word10
4214*4882a593Smuzhiyun #define wqe_oas_SHIFT         6
4215*4882a593Smuzhiyun #define wqe_oas_MASK          0x00000001
4216*4882a593Smuzhiyun #define wqe_oas_WORD          word10
4217*4882a593Smuzhiyun #define wqe_lenloc_SHIFT      7
4218*4882a593Smuzhiyun #define wqe_lenloc_MASK       0x00000003
4219*4882a593Smuzhiyun #define wqe_lenloc_WORD       word10
4220*4882a593Smuzhiyun #define LPFC_WQE_LENLOC_NONE		0
4221*4882a593Smuzhiyun #define LPFC_WQE_LENLOC_WORD3	1
4222*4882a593Smuzhiyun #define LPFC_WQE_LENLOC_WORD12	2
4223*4882a593Smuzhiyun #define LPFC_WQE_LENLOC_WORD4	3
4224*4882a593Smuzhiyun #define wqe_qosd_SHIFT        9
4225*4882a593Smuzhiyun #define wqe_qosd_MASK         0x00000001
4226*4882a593Smuzhiyun #define wqe_qosd_WORD         word10
4227*4882a593Smuzhiyun #define wqe_xbl_SHIFT         11
4228*4882a593Smuzhiyun #define wqe_xbl_MASK          0x00000001
4229*4882a593Smuzhiyun #define wqe_xbl_WORD          word10
4230*4882a593Smuzhiyun #define wqe_iod_SHIFT         13
4231*4882a593Smuzhiyun #define wqe_iod_MASK          0x00000001
4232*4882a593Smuzhiyun #define wqe_iod_WORD          word10
4233*4882a593Smuzhiyun #define LPFC_WQE_IOD_NONE	0
4234*4882a593Smuzhiyun #define LPFC_WQE_IOD_WRITE	0
4235*4882a593Smuzhiyun #define LPFC_WQE_IOD_READ	1
4236*4882a593Smuzhiyun #define wqe_dbde_SHIFT        14
4237*4882a593Smuzhiyun #define wqe_dbde_MASK         0x00000001
4238*4882a593Smuzhiyun #define wqe_dbde_WORD         word10
4239*4882a593Smuzhiyun #define wqe_wqes_SHIFT        15
4240*4882a593Smuzhiyun #define wqe_wqes_MASK         0x00000001
4241*4882a593Smuzhiyun #define wqe_wqes_WORD         word10
4242*4882a593Smuzhiyun /* Note that this field overlaps above fields */
4243*4882a593Smuzhiyun #define wqe_wqid_SHIFT        1
4244*4882a593Smuzhiyun #define wqe_wqid_MASK         0x00007fff
4245*4882a593Smuzhiyun #define wqe_wqid_WORD         word10
4246*4882a593Smuzhiyun #define wqe_pri_SHIFT         16
4247*4882a593Smuzhiyun #define wqe_pri_MASK          0x00000007
4248*4882a593Smuzhiyun #define wqe_pri_WORD          word10
4249*4882a593Smuzhiyun #define wqe_pv_SHIFT          19
4250*4882a593Smuzhiyun #define wqe_pv_MASK           0x00000001
4251*4882a593Smuzhiyun #define wqe_pv_WORD           word10
4252*4882a593Smuzhiyun #define wqe_xc_SHIFT          21
4253*4882a593Smuzhiyun #define wqe_xc_MASK           0x00000001
4254*4882a593Smuzhiyun #define wqe_xc_WORD           word10
4255*4882a593Smuzhiyun #define wqe_sr_SHIFT          22
4256*4882a593Smuzhiyun #define wqe_sr_MASK           0x00000001
4257*4882a593Smuzhiyun #define wqe_sr_WORD           word10
4258*4882a593Smuzhiyun #define wqe_ccpe_SHIFT        23
4259*4882a593Smuzhiyun #define wqe_ccpe_MASK         0x00000001
4260*4882a593Smuzhiyun #define wqe_ccpe_WORD         word10
4261*4882a593Smuzhiyun #define wqe_ccp_SHIFT         24
4262*4882a593Smuzhiyun #define wqe_ccp_MASK          0x000000ff
4263*4882a593Smuzhiyun #define wqe_ccp_WORD          word10
4264*4882a593Smuzhiyun 	uint32_t word11;
4265*4882a593Smuzhiyun #define wqe_cmd_type_SHIFT    0
4266*4882a593Smuzhiyun #define wqe_cmd_type_MASK     0x0000000f
4267*4882a593Smuzhiyun #define wqe_cmd_type_WORD     word11
4268*4882a593Smuzhiyun #define wqe_els_id_SHIFT      4
4269*4882a593Smuzhiyun #define wqe_els_id_MASK       0x00000003
4270*4882a593Smuzhiyun #define wqe_els_id_WORD       word11
4271*4882a593Smuzhiyun #define LPFC_ELS_ID_FLOGI	3
4272*4882a593Smuzhiyun #define LPFC_ELS_ID_FDISC	2
4273*4882a593Smuzhiyun #define LPFC_ELS_ID_LOGO	1
4274*4882a593Smuzhiyun #define LPFC_ELS_ID_DEFAULT	0
4275*4882a593Smuzhiyun #define wqe_irsp_SHIFT        4
4276*4882a593Smuzhiyun #define wqe_irsp_MASK         0x00000001
4277*4882a593Smuzhiyun #define wqe_irsp_WORD         word11
4278*4882a593Smuzhiyun #define wqe_pbde_SHIFT        5
4279*4882a593Smuzhiyun #define wqe_pbde_MASK         0x00000001
4280*4882a593Smuzhiyun #define wqe_pbde_WORD         word11
4281*4882a593Smuzhiyun #define wqe_sup_SHIFT         6
4282*4882a593Smuzhiyun #define wqe_sup_MASK          0x00000001
4283*4882a593Smuzhiyun #define wqe_sup_WORD          word11
4284*4882a593Smuzhiyun #define wqe_ffrq_SHIFT         6
4285*4882a593Smuzhiyun #define wqe_ffrq_MASK          0x00000001
4286*4882a593Smuzhiyun #define wqe_ffrq_WORD          word11
4287*4882a593Smuzhiyun #define wqe_wqec_SHIFT        7
4288*4882a593Smuzhiyun #define wqe_wqec_MASK         0x00000001
4289*4882a593Smuzhiyun #define wqe_wqec_WORD         word11
4290*4882a593Smuzhiyun #define wqe_irsplen_SHIFT     8
4291*4882a593Smuzhiyun #define wqe_irsplen_MASK      0x0000000f
4292*4882a593Smuzhiyun #define wqe_irsplen_WORD      word11
4293*4882a593Smuzhiyun #define wqe_cqid_SHIFT        16
4294*4882a593Smuzhiyun #define wqe_cqid_MASK         0x0000ffff
4295*4882a593Smuzhiyun #define wqe_cqid_WORD         word11
4296*4882a593Smuzhiyun #define LPFC_WQE_CQ_ID_DEFAULT	0xffff
4297*4882a593Smuzhiyun };
4298*4882a593Smuzhiyun 
4299*4882a593Smuzhiyun struct wqe_did {
4300*4882a593Smuzhiyun 	uint32_t word5;
4301*4882a593Smuzhiyun #define wqe_els_did_SHIFT         0
4302*4882a593Smuzhiyun #define wqe_els_did_MASK          0x00FFFFFF
4303*4882a593Smuzhiyun #define wqe_els_did_WORD          word5
4304*4882a593Smuzhiyun #define wqe_xmit_bls_pt_SHIFT         28
4305*4882a593Smuzhiyun #define wqe_xmit_bls_pt_MASK          0x00000003
4306*4882a593Smuzhiyun #define wqe_xmit_bls_pt_WORD          word5
4307*4882a593Smuzhiyun #define wqe_xmit_bls_ar_SHIFT         30
4308*4882a593Smuzhiyun #define wqe_xmit_bls_ar_MASK          0x00000001
4309*4882a593Smuzhiyun #define wqe_xmit_bls_ar_WORD          word5
4310*4882a593Smuzhiyun #define wqe_xmit_bls_xo_SHIFT         31
4311*4882a593Smuzhiyun #define wqe_xmit_bls_xo_MASK          0x00000001
4312*4882a593Smuzhiyun #define wqe_xmit_bls_xo_WORD          word5
4313*4882a593Smuzhiyun };
4314*4882a593Smuzhiyun 
4315*4882a593Smuzhiyun struct lpfc_wqe_generic{
4316*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4317*4882a593Smuzhiyun 	uint32_t word3;
4318*4882a593Smuzhiyun 	uint32_t word4;
4319*4882a593Smuzhiyun 	uint32_t word5;
4320*4882a593Smuzhiyun 	struct wqe_common wqe_com;
4321*4882a593Smuzhiyun 	uint32_t payload[4];
4322*4882a593Smuzhiyun };
4323*4882a593Smuzhiyun 
4324*4882a593Smuzhiyun struct els_request64_wqe {
4325*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4326*4882a593Smuzhiyun 	uint32_t payload_len;
4327*4882a593Smuzhiyun 	uint32_t word4;
4328*4882a593Smuzhiyun #define els_req64_sid_SHIFT         0
4329*4882a593Smuzhiyun #define els_req64_sid_MASK          0x00FFFFFF
4330*4882a593Smuzhiyun #define els_req64_sid_WORD          word4
4331*4882a593Smuzhiyun #define els_req64_sp_SHIFT          24
4332*4882a593Smuzhiyun #define els_req64_sp_MASK           0x00000001
4333*4882a593Smuzhiyun #define els_req64_sp_WORD           word4
4334*4882a593Smuzhiyun #define els_req64_vf_SHIFT          25
4335*4882a593Smuzhiyun #define els_req64_vf_MASK           0x00000001
4336*4882a593Smuzhiyun #define els_req64_vf_WORD           word4
4337*4882a593Smuzhiyun 	struct wqe_did	wqe_dest;
4338*4882a593Smuzhiyun 	struct wqe_common wqe_com; /* words 6-11 */
4339*4882a593Smuzhiyun 	uint32_t word12;
4340*4882a593Smuzhiyun #define els_req64_vfid_SHIFT        1
4341*4882a593Smuzhiyun #define els_req64_vfid_MASK         0x00000FFF
4342*4882a593Smuzhiyun #define els_req64_vfid_WORD         word12
4343*4882a593Smuzhiyun #define els_req64_pri_SHIFT         13
4344*4882a593Smuzhiyun #define els_req64_pri_MASK          0x00000007
4345*4882a593Smuzhiyun #define els_req64_pri_WORD          word12
4346*4882a593Smuzhiyun 	uint32_t word13;
4347*4882a593Smuzhiyun #define els_req64_hopcnt_SHIFT      24
4348*4882a593Smuzhiyun #define els_req64_hopcnt_MASK       0x000000ff
4349*4882a593Smuzhiyun #define els_req64_hopcnt_WORD       word13
4350*4882a593Smuzhiyun 	uint32_t word14;
4351*4882a593Smuzhiyun 	uint32_t max_response_payload_len;
4352*4882a593Smuzhiyun };
4353*4882a593Smuzhiyun 
4354*4882a593Smuzhiyun struct xmit_els_rsp64_wqe {
4355*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4356*4882a593Smuzhiyun 	uint32_t response_payload_len;
4357*4882a593Smuzhiyun 	uint32_t word4;
4358*4882a593Smuzhiyun #define els_rsp64_sid_SHIFT         0
4359*4882a593Smuzhiyun #define els_rsp64_sid_MASK          0x00FFFFFF
4360*4882a593Smuzhiyun #define els_rsp64_sid_WORD          word4
4361*4882a593Smuzhiyun #define els_rsp64_sp_SHIFT          24
4362*4882a593Smuzhiyun #define els_rsp64_sp_MASK           0x00000001
4363*4882a593Smuzhiyun #define els_rsp64_sp_WORD           word4
4364*4882a593Smuzhiyun 	struct wqe_did wqe_dest;
4365*4882a593Smuzhiyun 	struct wqe_common wqe_com; /* words 6-11 */
4366*4882a593Smuzhiyun 	uint32_t word12;
4367*4882a593Smuzhiyun #define wqe_rsp_temp_rpi_SHIFT    0
4368*4882a593Smuzhiyun #define wqe_rsp_temp_rpi_MASK     0x0000FFFF
4369*4882a593Smuzhiyun #define wqe_rsp_temp_rpi_WORD     word12
4370*4882a593Smuzhiyun 	uint32_t rsvd_13_15[3];
4371*4882a593Smuzhiyun };
4372*4882a593Smuzhiyun 
4373*4882a593Smuzhiyun struct xmit_bls_rsp64_wqe {
4374*4882a593Smuzhiyun 	uint32_t payload0;
4375*4882a593Smuzhiyun /* Payload0 for BA_ACC */
4376*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_SHIFT        16
4377*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_MASK         0x000000ff
4378*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_WORD         payload0
4379*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_vald_SHIFT   24
4380*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_vald_MASK    0x000000ff
4381*4882a593Smuzhiyun #define xmit_bls_rsp64_acc_seq_id_vald_WORD    payload0
4382*4882a593Smuzhiyun /* Payload0 for BA_RJT */
4383*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_vspec_SHIFT   0
4384*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_vspec_MASK    0x000000ff
4385*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_vspec_WORD    payload0
4386*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_expc_SHIFT    8
4387*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_expc_MASK     0x000000ff
4388*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_expc_WORD     payload0
4389*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_rsnc_SHIFT    16
4390*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_rsnc_MASK     0x000000ff
4391*4882a593Smuzhiyun #define xmit_bls_rsp64_rjt_rsnc_WORD     payload0
4392*4882a593Smuzhiyun 	uint32_t word1;
4393*4882a593Smuzhiyun #define xmit_bls_rsp64_rxid_SHIFT  0
4394*4882a593Smuzhiyun #define xmit_bls_rsp64_rxid_MASK   0x0000ffff
4395*4882a593Smuzhiyun #define xmit_bls_rsp64_rxid_WORD   word1
4396*4882a593Smuzhiyun #define xmit_bls_rsp64_oxid_SHIFT  16
4397*4882a593Smuzhiyun #define xmit_bls_rsp64_oxid_MASK   0x0000ffff
4398*4882a593Smuzhiyun #define xmit_bls_rsp64_oxid_WORD   word1
4399*4882a593Smuzhiyun 	uint32_t word2;
4400*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcnthi_SHIFT  0
4401*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcnthi_MASK   0x0000ffff
4402*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcnthi_WORD   word2
4403*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcntlo_SHIFT  16
4404*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcntlo_MASK   0x0000ffff
4405*4882a593Smuzhiyun #define xmit_bls_rsp64_seqcntlo_WORD   word2
4406*4882a593Smuzhiyun 	uint32_t rsrvd3;
4407*4882a593Smuzhiyun 	uint32_t rsrvd4;
4408*4882a593Smuzhiyun 	struct wqe_did	wqe_dest;
4409*4882a593Smuzhiyun 	struct wqe_common wqe_com; /* words 6-11 */
4410*4882a593Smuzhiyun 	uint32_t word12;
4411*4882a593Smuzhiyun #define xmit_bls_rsp64_temprpi_SHIFT  0
4412*4882a593Smuzhiyun #define xmit_bls_rsp64_temprpi_MASK   0x0000ffff
4413*4882a593Smuzhiyun #define xmit_bls_rsp64_temprpi_WORD   word12
4414*4882a593Smuzhiyun 	uint32_t rsvd_13_15[3];
4415*4882a593Smuzhiyun };
4416*4882a593Smuzhiyun 
4417*4882a593Smuzhiyun struct wqe_rctl_dfctl {
4418*4882a593Smuzhiyun 	uint32_t word5;
4419*4882a593Smuzhiyun #define wqe_si_SHIFT 2
4420*4882a593Smuzhiyun #define wqe_si_MASK  0x000000001
4421*4882a593Smuzhiyun #define wqe_si_WORD  word5
4422*4882a593Smuzhiyun #define wqe_la_SHIFT 3
4423*4882a593Smuzhiyun #define wqe_la_MASK  0x000000001
4424*4882a593Smuzhiyun #define wqe_la_WORD  word5
4425*4882a593Smuzhiyun #define wqe_xo_SHIFT	6
4426*4882a593Smuzhiyun #define wqe_xo_MASK	0x000000001
4427*4882a593Smuzhiyun #define wqe_xo_WORD	word5
4428*4882a593Smuzhiyun #define wqe_ls_SHIFT 7
4429*4882a593Smuzhiyun #define wqe_ls_MASK  0x000000001
4430*4882a593Smuzhiyun #define wqe_ls_WORD  word5
4431*4882a593Smuzhiyun #define wqe_dfctl_SHIFT 8
4432*4882a593Smuzhiyun #define wqe_dfctl_MASK  0x0000000ff
4433*4882a593Smuzhiyun #define wqe_dfctl_WORD  word5
4434*4882a593Smuzhiyun #define wqe_type_SHIFT 16
4435*4882a593Smuzhiyun #define wqe_type_MASK  0x0000000ff
4436*4882a593Smuzhiyun #define wqe_type_WORD  word5
4437*4882a593Smuzhiyun #define wqe_rctl_SHIFT 24
4438*4882a593Smuzhiyun #define wqe_rctl_MASK  0x0000000ff
4439*4882a593Smuzhiyun #define wqe_rctl_WORD  word5
4440*4882a593Smuzhiyun };
4441*4882a593Smuzhiyun 
4442*4882a593Smuzhiyun struct xmit_seq64_wqe {
4443*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4444*4882a593Smuzhiyun 	uint32_t rsvd3;
4445*4882a593Smuzhiyun 	uint32_t relative_offset;
4446*4882a593Smuzhiyun 	struct wqe_rctl_dfctl wge_ctl;
4447*4882a593Smuzhiyun 	struct wqe_common wqe_com; /* words 6-11 */
4448*4882a593Smuzhiyun 	uint32_t xmit_len;
4449*4882a593Smuzhiyun 	uint32_t rsvd_12_15[3];
4450*4882a593Smuzhiyun };
4451*4882a593Smuzhiyun struct xmit_bcast64_wqe {
4452*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4453*4882a593Smuzhiyun 	uint32_t seq_payload_len;
4454*4882a593Smuzhiyun 	uint32_t rsvd4;
4455*4882a593Smuzhiyun 	struct wqe_rctl_dfctl wge_ctl; /* word 5 */
4456*4882a593Smuzhiyun 	struct wqe_common wqe_com;     /* words 6-11 */
4457*4882a593Smuzhiyun 	uint32_t rsvd_12_15[4];
4458*4882a593Smuzhiyun };
4459*4882a593Smuzhiyun 
4460*4882a593Smuzhiyun struct gen_req64_wqe {
4461*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4462*4882a593Smuzhiyun 	uint32_t request_payload_len;
4463*4882a593Smuzhiyun 	uint32_t relative_offset;
4464*4882a593Smuzhiyun 	struct wqe_rctl_dfctl wge_ctl; /* word 5 */
4465*4882a593Smuzhiyun 	struct wqe_common wqe_com;     /* words 6-11 */
4466*4882a593Smuzhiyun 	uint32_t rsvd_12_14[3];
4467*4882a593Smuzhiyun 	uint32_t max_response_payload_len;
4468*4882a593Smuzhiyun };
4469*4882a593Smuzhiyun 
4470*4882a593Smuzhiyun /* Define NVME PRLI request to fabric. NVME is a
4471*4882a593Smuzhiyun  * fabric-only protocol.
4472*4882a593Smuzhiyun  * Updated to red-lined v1.08 on Sept 16, 2016
4473*4882a593Smuzhiyun  */
4474*4882a593Smuzhiyun struct lpfc_nvme_prli {
4475*4882a593Smuzhiyun 	uint32_t word1;
4476*4882a593Smuzhiyun 	/* The Response Code is defined in the FCP PRLI lpfc_hw.h */
4477*4882a593Smuzhiyun #define prli_acc_rsp_code_SHIFT         8
4478*4882a593Smuzhiyun #define prli_acc_rsp_code_MASK          0x0000000f
4479*4882a593Smuzhiyun #define prli_acc_rsp_code_WORD          word1
4480*4882a593Smuzhiyun #define prli_estabImagePair_SHIFT       13
4481*4882a593Smuzhiyun #define prli_estabImagePair_MASK        0x00000001
4482*4882a593Smuzhiyun #define prli_estabImagePair_WORD        word1
4483*4882a593Smuzhiyun #define prli_type_code_ext_SHIFT        16
4484*4882a593Smuzhiyun #define prli_type_code_ext_MASK         0x000000ff
4485*4882a593Smuzhiyun #define prli_type_code_ext_WORD         word1
4486*4882a593Smuzhiyun #define prli_type_code_SHIFT            24
4487*4882a593Smuzhiyun #define prli_type_code_MASK             0x000000ff
4488*4882a593Smuzhiyun #define prli_type_code_WORD             word1
4489*4882a593Smuzhiyun 	uint32_t word_rsvd2;
4490*4882a593Smuzhiyun 	uint32_t word_rsvd3;
4491*4882a593Smuzhiyun 
4492*4882a593Smuzhiyun 	uint32_t word4;
4493*4882a593Smuzhiyun #define prli_fba_SHIFT                  0
4494*4882a593Smuzhiyun #define prli_fba_MASK                   0x00000001
4495*4882a593Smuzhiyun #define prli_fba_WORD                   word4
4496*4882a593Smuzhiyun #define prli_disc_SHIFT                 3
4497*4882a593Smuzhiyun #define prli_disc_MASK                  0x00000001
4498*4882a593Smuzhiyun #define prli_disc_WORD                  word4
4499*4882a593Smuzhiyun #define prli_tgt_SHIFT                  4
4500*4882a593Smuzhiyun #define prli_tgt_MASK                   0x00000001
4501*4882a593Smuzhiyun #define prli_tgt_WORD                   word4
4502*4882a593Smuzhiyun #define prli_init_SHIFT                 5
4503*4882a593Smuzhiyun #define prli_init_MASK                  0x00000001
4504*4882a593Smuzhiyun #define prli_init_WORD                  word4
4505*4882a593Smuzhiyun #define prli_conf_SHIFT                 7
4506*4882a593Smuzhiyun #define prli_conf_MASK                  0x00000001
4507*4882a593Smuzhiyun #define prli_conf_WORD                  word4
4508*4882a593Smuzhiyun #define prli_nsler_SHIFT		8
4509*4882a593Smuzhiyun #define prli_nsler_MASK			0x00000001
4510*4882a593Smuzhiyun #define prli_nsler_WORD			word4
4511*4882a593Smuzhiyun 	uint32_t word5;
4512*4882a593Smuzhiyun #define prli_fb_sz_SHIFT                0
4513*4882a593Smuzhiyun #define prli_fb_sz_MASK                 0x0000ffff
4514*4882a593Smuzhiyun #define prli_fb_sz_WORD                 word5
4515*4882a593Smuzhiyun #define LPFC_NVMET_FB_SZ_MAX  65536   /* Driver target mode only. */
4516*4882a593Smuzhiyun };
4517*4882a593Smuzhiyun 
4518*4882a593Smuzhiyun struct create_xri_wqe {
4519*4882a593Smuzhiyun 	uint32_t rsrvd[5];           /* words 0-4 */
4520*4882a593Smuzhiyun 	struct wqe_did	wqe_dest;  /* word 5 */
4521*4882a593Smuzhiyun 	struct wqe_common wqe_com; /* words 6-11 */
4522*4882a593Smuzhiyun 	uint32_t rsvd_12_15[4];         /* word 12-15 */
4523*4882a593Smuzhiyun };
4524*4882a593Smuzhiyun 
4525*4882a593Smuzhiyun #define INHIBIT_ABORT 1
4526*4882a593Smuzhiyun #define T_REQUEST_TAG 3
4527*4882a593Smuzhiyun #define T_XRI_TAG 1
4528*4882a593Smuzhiyun 
4529*4882a593Smuzhiyun struct abort_cmd_wqe {
4530*4882a593Smuzhiyun 	uint32_t rsrvd[3];
4531*4882a593Smuzhiyun 	uint32_t word3;
4532*4882a593Smuzhiyun #define	abort_cmd_ia_SHIFT  0
4533*4882a593Smuzhiyun #define	abort_cmd_ia_MASK  0x000000001
4534*4882a593Smuzhiyun #define	abort_cmd_ia_WORD  word3
4535*4882a593Smuzhiyun #define	abort_cmd_criteria_SHIFT  8
4536*4882a593Smuzhiyun #define	abort_cmd_criteria_MASK  0x0000000ff
4537*4882a593Smuzhiyun #define	abort_cmd_criteria_WORD  word3
4538*4882a593Smuzhiyun 	uint32_t rsrvd4;
4539*4882a593Smuzhiyun 	uint32_t rsrvd5;
4540*4882a593Smuzhiyun 	struct wqe_common wqe_com;     /* words 6-11 */
4541*4882a593Smuzhiyun 	uint32_t rsvd_12_15[4];         /* word 12-15 */
4542*4882a593Smuzhiyun };
4543*4882a593Smuzhiyun 
4544*4882a593Smuzhiyun struct fcp_iwrite64_wqe {
4545*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4546*4882a593Smuzhiyun 	uint32_t word3;
4547*4882a593Smuzhiyun #define	cmd_buff_len_SHIFT  16
4548*4882a593Smuzhiyun #define	cmd_buff_len_MASK  0x00000ffff
4549*4882a593Smuzhiyun #define	cmd_buff_len_WORD  word3
4550*4882a593Smuzhiyun #define payload_offset_len_SHIFT 0
4551*4882a593Smuzhiyun #define payload_offset_len_MASK 0x0000ffff
4552*4882a593Smuzhiyun #define payload_offset_len_WORD word3
4553*4882a593Smuzhiyun 	uint32_t total_xfer_len;
4554*4882a593Smuzhiyun 	uint32_t initial_xfer_len;
4555*4882a593Smuzhiyun 	struct wqe_common wqe_com;     /* words 6-11 */
4556*4882a593Smuzhiyun 	uint32_t rsrvd12;
4557*4882a593Smuzhiyun 	struct ulp_bde64 ph_bde;       /* words 13-15 */
4558*4882a593Smuzhiyun };
4559*4882a593Smuzhiyun 
4560*4882a593Smuzhiyun struct fcp_iread64_wqe {
4561*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4562*4882a593Smuzhiyun 	uint32_t word3;
4563*4882a593Smuzhiyun #define	cmd_buff_len_SHIFT  16
4564*4882a593Smuzhiyun #define	cmd_buff_len_MASK  0x00000ffff
4565*4882a593Smuzhiyun #define	cmd_buff_len_WORD  word3
4566*4882a593Smuzhiyun #define payload_offset_len_SHIFT 0
4567*4882a593Smuzhiyun #define payload_offset_len_MASK 0x0000ffff
4568*4882a593Smuzhiyun #define payload_offset_len_WORD word3
4569*4882a593Smuzhiyun 	uint32_t total_xfer_len;       /* word 4 */
4570*4882a593Smuzhiyun 	uint32_t rsrvd5;               /* word 5 */
4571*4882a593Smuzhiyun 	struct wqe_common wqe_com;     /* words 6-11 */
4572*4882a593Smuzhiyun 	uint32_t rsrvd12;
4573*4882a593Smuzhiyun 	struct ulp_bde64 ph_bde;       /* words 13-15 */
4574*4882a593Smuzhiyun };
4575*4882a593Smuzhiyun 
4576*4882a593Smuzhiyun struct fcp_icmnd64_wqe {
4577*4882a593Smuzhiyun 	struct ulp_bde64 bde;          /* words 0-2 */
4578*4882a593Smuzhiyun 	uint32_t word3;
4579*4882a593Smuzhiyun #define	cmd_buff_len_SHIFT  16
4580*4882a593Smuzhiyun #define	cmd_buff_len_MASK  0x00000ffff
4581*4882a593Smuzhiyun #define	cmd_buff_len_WORD  word3
4582*4882a593Smuzhiyun #define payload_offset_len_SHIFT 0
4583*4882a593Smuzhiyun #define payload_offset_len_MASK 0x0000ffff
4584*4882a593Smuzhiyun #define payload_offset_len_WORD word3
4585*4882a593Smuzhiyun 	uint32_t rsrvd4;               /* word 4 */
4586*4882a593Smuzhiyun 	uint32_t rsrvd5;               /* word 5 */
4587*4882a593Smuzhiyun 	struct wqe_common wqe_com;     /* words 6-11 */
4588*4882a593Smuzhiyun 	uint32_t rsvd_12_15[4];        /* word 12-15 */
4589*4882a593Smuzhiyun };
4590*4882a593Smuzhiyun 
4591*4882a593Smuzhiyun struct fcp_trsp64_wqe {
4592*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4593*4882a593Smuzhiyun 	uint32_t response_len;
4594*4882a593Smuzhiyun 	uint32_t rsvd_4_5[2];
4595*4882a593Smuzhiyun 	struct wqe_common wqe_com;      /* words 6-11 */
4596*4882a593Smuzhiyun 	uint32_t rsvd_12_15[4];         /* word 12-15 */
4597*4882a593Smuzhiyun };
4598*4882a593Smuzhiyun 
4599*4882a593Smuzhiyun struct fcp_tsend64_wqe {
4600*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4601*4882a593Smuzhiyun 	uint32_t payload_offset_len;
4602*4882a593Smuzhiyun 	uint32_t relative_offset;
4603*4882a593Smuzhiyun 	uint32_t reserved;
4604*4882a593Smuzhiyun 	struct wqe_common wqe_com;     /* words 6-11 */
4605*4882a593Smuzhiyun 	uint32_t fcp_data_len;         /* word 12 */
4606*4882a593Smuzhiyun 	uint32_t rsvd_13_15[3];        /* word 13-15 */
4607*4882a593Smuzhiyun };
4608*4882a593Smuzhiyun 
4609*4882a593Smuzhiyun struct fcp_treceive64_wqe {
4610*4882a593Smuzhiyun 	struct ulp_bde64 bde;
4611*4882a593Smuzhiyun 	uint32_t payload_offset_len;
4612*4882a593Smuzhiyun 	uint32_t relative_offset;
4613*4882a593Smuzhiyun 	uint32_t reserved;
4614*4882a593Smuzhiyun 	struct wqe_common wqe_com;     /* words 6-11 */
4615*4882a593Smuzhiyun 	uint32_t fcp_data_len;         /* word 12 */
4616*4882a593Smuzhiyun 	uint32_t rsvd_13_15[3];        /* word 13-15 */
4617*4882a593Smuzhiyun };
4618*4882a593Smuzhiyun #define TXRDY_PAYLOAD_LEN      12
4619*4882a593Smuzhiyun 
4620*4882a593Smuzhiyun #define CMD_SEND_FRAME	0xE1
4621*4882a593Smuzhiyun 
4622*4882a593Smuzhiyun struct send_frame_wqe {
4623*4882a593Smuzhiyun 	struct ulp_bde64 bde;          /* words 0-2 */
4624*4882a593Smuzhiyun 	uint32_t frame_len;            /* word 3 */
4625*4882a593Smuzhiyun 	uint32_t fc_hdr_wd0;           /* word 4 */
4626*4882a593Smuzhiyun 	uint32_t fc_hdr_wd1;           /* word 5 */
4627*4882a593Smuzhiyun 	struct wqe_common wqe_com;     /* words 6-11 */
4628*4882a593Smuzhiyun 	uint32_t fc_hdr_wd2;           /* word 12 */
4629*4882a593Smuzhiyun 	uint32_t fc_hdr_wd3;           /* word 13 */
4630*4882a593Smuzhiyun 	uint32_t fc_hdr_wd4;           /* word 14 */
4631*4882a593Smuzhiyun 	uint32_t fc_hdr_wd5;           /* word 15 */
4632*4882a593Smuzhiyun };
4633*4882a593Smuzhiyun 
4634*4882a593Smuzhiyun #define ELS_RDF_REG_TAG_CNT		4
4635*4882a593Smuzhiyun struct lpfc_els_rdf_reg_desc {
4636*4882a593Smuzhiyun 	struct fc_df_desc_fpin_reg	reg_desc;	/* descriptor header */
4637*4882a593Smuzhiyun 	__be32				desc_tags[ELS_RDF_REG_TAG_CNT];
4638*4882a593Smuzhiyun 							/* tags in reg_desc */
4639*4882a593Smuzhiyun };
4640*4882a593Smuzhiyun 
4641*4882a593Smuzhiyun struct lpfc_els_rdf_req {
4642*4882a593Smuzhiyun 	struct fc_els_rdf		rdf;	   /* hdr up to descriptors */
4643*4882a593Smuzhiyun 	struct lpfc_els_rdf_reg_desc	reg_d1;	/* 1st descriptor */
4644*4882a593Smuzhiyun };
4645*4882a593Smuzhiyun 
4646*4882a593Smuzhiyun struct lpfc_els_rdf_rsp {
4647*4882a593Smuzhiyun 	struct fc_els_rdf_resp		rdf_resp;  /* hdr up to descriptors */
4648*4882a593Smuzhiyun 	struct lpfc_els_rdf_reg_desc	reg_d1;	/* 1st descriptor */
4649*4882a593Smuzhiyun };
4650*4882a593Smuzhiyun 
4651*4882a593Smuzhiyun union lpfc_wqe {
4652*4882a593Smuzhiyun 	uint32_t words[16];
4653*4882a593Smuzhiyun 	struct lpfc_wqe_generic generic;
4654*4882a593Smuzhiyun 	struct fcp_icmnd64_wqe fcp_icmd;
4655*4882a593Smuzhiyun 	struct fcp_iread64_wqe fcp_iread;
4656*4882a593Smuzhiyun 	struct fcp_iwrite64_wqe fcp_iwrite;
4657*4882a593Smuzhiyun 	struct abort_cmd_wqe abort_cmd;
4658*4882a593Smuzhiyun 	struct create_xri_wqe create_xri;
4659*4882a593Smuzhiyun 	struct xmit_bcast64_wqe xmit_bcast64;
4660*4882a593Smuzhiyun 	struct xmit_seq64_wqe xmit_sequence;
4661*4882a593Smuzhiyun 	struct xmit_bls_rsp64_wqe xmit_bls_rsp;
4662*4882a593Smuzhiyun 	struct xmit_els_rsp64_wqe xmit_els_rsp;
4663*4882a593Smuzhiyun 	struct els_request64_wqe els_req;
4664*4882a593Smuzhiyun 	struct gen_req64_wqe gen_req;
4665*4882a593Smuzhiyun 	struct fcp_trsp64_wqe fcp_trsp;
4666*4882a593Smuzhiyun 	struct fcp_tsend64_wqe fcp_tsend;
4667*4882a593Smuzhiyun 	struct fcp_treceive64_wqe fcp_treceive;
4668*4882a593Smuzhiyun 	struct send_frame_wqe send_frame;
4669*4882a593Smuzhiyun };
4670*4882a593Smuzhiyun 
4671*4882a593Smuzhiyun union lpfc_wqe128 {
4672*4882a593Smuzhiyun 	uint32_t words[32];
4673*4882a593Smuzhiyun 	struct lpfc_wqe_generic generic;
4674*4882a593Smuzhiyun 	struct fcp_icmnd64_wqe fcp_icmd;
4675*4882a593Smuzhiyun 	struct fcp_iread64_wqe fcp_iread;
4676*4882a593Smuzhiyun 	struct fcp_iwrite64_wqe fcp_iwrite;
4677*4882a593Smuzhiyun 	struct abort_cmd_wqe abort_cmd;
4678*4882a593Smuzhiyun 	struct create_xri_wqe create_xri;
4679*4882a593Smuzhiyun 	struct xmit_bcast64_wqe xmit_bcast64;
4680*4882a593Smuzhiyun 	struct xmit_seq64_wqe xmit_sequence;
4681*4882a593Smuzhiyun 	struct xmit_bls_rsp64_wqe xmit_bls_rsp;
4682*4882a593Smuzhiyun 	struct xmit_els_rsp64_wqe xmit_els_rsp;
4683*4882a593Smuzhiyun 	struct els_request64_wqe els_req;
4684*4882a593Smuzhiyun 	struct gen_req64_wqe gen_req;
4685*4882a593Smuzhiyun 	struct fcp_trsp64_wqe fcp_trsp;
4686*4882a593Smuzhiyun 	struct fcp_tsend64_wqe fcp_tsend;
4687*4882a593Smuzhiyun 	struct fcp_treceive64_wqe fcp_treceive;
4688*4882a593Smuzhiyun 	struct send_frame_wqe send_frame;
4689*4882a593Smuzhiyun };
4690*4882a593Smuzhiyun 
4691*4882a593Smuzhiyun #define MAGIC_NUMBER_G6 0xFEAA0003
4692*4882a593Smuzhiyun #define MAGIC_NUMBER_G7 0xFEAA0005
4693*4882a593Smuzhiyun 
4694*4882a593Smuzhiyun struct lpfc_grp_hdr {
4695*4882a593Smuzhiyun 	uint32_t size;
4696*4882a593Smuzhiyun 	uint32_t magic_number;
4697*4882a593Smuzhiyun 	uint32_t word2;
4698*4882a593Smuzhiyun #define lpfc_grp_hdr_file_type_SHIFT	24
4699*4882a593Smuzhiyun #define lpfc_grp_hdr_file_type_MASK	0x000000FF
4700*4882a593Smuzhiyun #define lpfc_grp_hdr_file_type_WORD	word2
4701*4882a593Smuzhiyun #define lpfc_grp_hdr_id_SHIFT		16
4702*4882a593Smuzhiyun #define lpfc_grp_hdr_id_MASK		0x000000FF
4703*4882a593Smuzhiyun #define lpfc_grp_hdr_id_WORD		word2
4704*4882a593Smuzhiyun 	uint8_t rev_name[128];
4705*4882a593Smuzhiyun 	uint8_t date[12];
4706*4882a593Smuzhiyun 	uint8_t revision[32];
4707*4882a593Smuzhiyun };
4708*4882a593Smuzhiyun 
4709*4882a593Smuzhiyun /* Defines for WQE command type */
4710*4882a593Smuzhiyun #define FCP_COMMAND		0x0
4711*4882a593Smuzhiyun #define NVME_READ_CMD		0x0
4712*4882a593Smuzhiyun #define FCP_COMMAND_DATA_OUT	0x1
4713*4882a593Smuzhiyun #define NVME_WRITE_CMD		0x1
4714*4882a593Smuzhiyun #define FCP_COMMAND_TRECEIVE	0x2
4715*4882a593Smuzhiyun #define FCP_COMMAND_TRSP	0x3
4716*4882a593Smuzhiyun #define FCP_COMMAND_TSEND	0x7
4717*4882a593Smuzhiyun #define OTHER_COMMAND		0x8
4718*4882a593Smuzhiyun #define ELS_COMMAND_NON_FIP	0xC
4719*4882a593Smuzhiyun #define ELS_COMMAND_FIP		0xD
4720*4882a593Smuzhiyun 
4721*4882a593Smuzhiyun #define LPFC_NVME_EMBED_CMD	0x0
4722*4882a593Smuzhiyun #define LPFC_NVME_EMBED_WRITE	0x1
4723*4882a593Smuzhiyun #define LPFC_NVME_EMBED_READ	0x2
4724*4882a593Smuzhiyun 
4725*4882a593Smuzhiyun /* WQE Commands */
4726*4882a593Smuzhiyun #define CMD_ABORT_XRI_WQE       0x0F
4727*4882a593Smuzhiyun #define CMD_XMIT_SEQUENCE64_WQE 0x82
4728*4882a593Smuzhiyun #define CMD_XMIT_BCAST64_WQE    0x84
4729*4882a593Smuzhiyun #define CMD_ELS_REQUEST64_WQE   0x8A
4730*4882a593Smuzhiyun #define CMD_XMIT_ELS_RSP64_WQE  0x95
4731*4882a593Smuzhiyun #define CMD_XMIT_BLS_RSP64_WQE  0x97
4732*4882a593Smuzhiyun #define CMD_FCP_IWRITE64_WQE    0x98
4733*4882a593Smuzhiyun #define CMD_FCP_IREAD64_WQE     0x9A
4734*4882a593Smuzhiyun #define CMD_FCP_ICMND64_WQE     0x9C
4735*4882a593Smuzhiyun #define CMD_FCP_TSEND64_WQE     0x9F
4736*4882a593Smuzhiyun #define CMD_FCP_TRECEIVE64_WQE  0xA1
4737*4882a593Smuzhiyun #define CMD_FCP_TRSP64_WQE      0xA3
4738*4882a593Smuzhiyun #define CMD_GEN_REQUEST64_WQE   0xC2
4739*4882a593Smuzhiyun 
4740*4882a593Smuzhiyun #define CMD_WQE_MASK            0xff
4741*4882a593Smuzhiyun 
4742*4882a593Smuzhiyun 
4743*4882a593Smuzhiyun #define LPFC_FW_DUMP	1
4744*4882a593Smuzhiyun #define LPFC_FW_RESET	2
4745*4882a593Smuzhiyun #define LPFC_DV_RESET	3
4746