1*d14abf15SRobert Mustacchi /*
2*d14abf15SRobert Mustacchi  * CDDL HEADER START
3*d14abf15SRobert Mustacchi  *
4*d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
5*d14abf15SRobert Mustacchi  * Common Development and Distribution License (the "License").
6*d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
7*d14abf15SRobert Mustacchi  *
8*d14abf15SRobert Mustacchi  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*d14abf15SRobert Mustacchi  * or http://www.opensolaris.org/os/licensing.
10*d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
11*d14abf15SRobert Mustacchi  * and limitations under the License.
12*d14abf15SRobert Mustacchi  *
13*d14abf15SRobert Mustacchi  * When distributing Covered Code, include this CDDL HEADER in each
14*d14abf15SRobert Mustacchi  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*d14abf15SRobert Mustacchi  * If applicable, add the following below this CDDL HEADER, with the
16*d14abf15SRobert Mustacchi  * fields enclosed by brackets "[]" replaced with your own identifying
17*d14abf15SRobert Mustacchi  * information: Portions Copyright [yyyy] [name of copyright owner]
18*d14abf15SRobert Mustacchi  *
19*d14abf15SRobert Mustacchi  * CDDL HEADER END
20*d14abf15SRobert Mustacchi  *
21*d14abf15SRobert Mustacchi  * Copyright 2014 QLogic Corporation
22*d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
23*d14abf15SRobert Mustacchi  * QLogic End User License (the "License").
24*d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
25*d14abf15SRobert Mustacchi  *
26*d14abf15SRobert Mustacchi  * You can obtain a copy of the License at
27*d14abf15SRobert Mustacchi  * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
28*d14abf15SRobert Mustacchi  * QLogic_End_User_Software_License.txt
29*d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
30*d14abf15SRobert Mustacchi  * and limitations under the License.
31*d14abf15SRobert Mustacchi  *
32*d14abf15SRobert Mustacchi */
33*d14abf15SRobert Mustacchi 
34*d14abf15SRobert Mustacchi /* Init operation types and structures */
35*d14abf15SRobert Mustacchi enum {
36*d14abf15SRobert Mustacchi 	OP_RD = 0x1,	/* read a single register */
37*d14abf15SRobert Mustacchi 	OP_WR,		/* write a single register */
38*d14abf15SRobert Mustacchi 	OP_SW,		/* copy a string to the device */
39*d14abf15SRobert Mustacchi 	OP_ZR,		/* clear memory */
40*d14abf15SRobert Mustacchi 	OP_ZP,		/* unzip then copy with DMAE */
41*d14abf15SRobert Mustacchi 	OP_WR_64,	/* write 64 bit pattern */
42*d14abf15SRobert Mustacchi 	OP_WB,		/* copy a string using DMAE */
43*d14abf15SRobert Mustacchi #ifndef FW_ZIP_SUPPORT /* ! BNX2X_UPSTREAM */
44*d14abf15SRobert Mustacchi 	OP_FW,		/* copy an array from fw data (only used with unzipped FW) */
45*d14abf15SRobert Mustacchi #endif
46*d14abf15SRobert Mustacchi 	OP_WB_ZR,	/* Clear a string using DMAE or indirect-wr */
47*d14abf15SRobert Mustacchi 	OP_IF_MODE_OR,  /* Skip the following ops if all init modes don't match */
48*d14abf15SRobert Mustacchi 	OP_IF_MODE_AND, /* Skip the following ops if any init modes don't match */
49*d14abf15SRobert Mustacchi #ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */
50*d14abf15SRobert Mustacchi 	OP_IF_PHASE,
51*d14abf15SRobert Mustacchi 	OP_RT,
52*d14abf15SRobert Mustacchi 	OP_DELAY,
53*d14abf15SRobert Mustacchi 	OP_VERIFY,
54*d14abf15SRobert Mustacchi #endif
55*d14abf15SRobert Mustacchi 	OP_MAX
56*d14abf15SRobert Mustacchi };
57*d14abf15SRobert Mustacchi 
58*d14abf15SRobert Mustacchi enum {
59*d14abf15SRobert Mustacchi 	STAGE_START,
60*d14abf15SRobert Mustacchi 	STAGE_END,
61*d14abf15SRobert Mustacchi };
62*d14abf15SRobert Mustacchi 
63*d14abf15SRobert Mustacchi /* Returns the index of start or end of a specific block stage in ops array*/
64*d14abf15SRobert Mustacchi #define BLOCK_OPS_IDX(block, stage, end) \
65*d14abf15SRobert Mustacchi 	(2*(((block)*NUM_OF_INIT_PHASES) + (stage)) + (end))
66*d14abf15SRobert Mustacchi 
67*d14abf15SRobert Mustacchi 
68*d14abf15SRobert Mustacchi /* structs for the various opcodes */
69*d14abf15SRobert Mustacchi struct raw_op {
70*d14abf15SRobert Mustacchi 	u32 op:8;
71*d14abf15SRobert Mustacchi 	u32 offset:24;
72*d14abf15SRobert Mustacchi 	u32 raw_data;
73*d14abf15SRobert Mustacchi };
74*d14abf15SRobert Mustacchi 
75*d14abf15SRobert Mustacchi struct op_read {
76*d14abf15SRobert Mustacchi 	u32 op:8;
77*d14abf15SRobert Mustacchi 	u32 offset:24;
78*d14abf15SRobert Mustacchi 	u32 val;
79*d14abf15SRobert Mustacchi };
80*d14abf15SRobert Mustacchi 
81*d14abf15SRobert Mustacchi struct op_write {
82*d14abf15SRobert Mustacchi 	u32 op:8;
83*d14abf15SRobert Mustacchi 	u32 offset:24;
84*d14abf15SRobert Mustacchi 	u32 val;
85*d14abf15SRobert Mustacchi };
86*d14abf15SRobert Mustacchi 
87*d14abf15SRobert Mustacchi struct op_arr_write {
88*d14abf15SRobert Mustacchi 	u32 op:8;
89*d14abf15SRobert Mustacchi 	u32 offset:24;
90*d14abf15SRobert Mustacchi #ifdef __BIG_ENDIAN
91*d14abf15SRobert Mustacchi 	u16 data_len;
92*d14abf15SRobert Mustacchi 	u16 data_off;
93*d14abf15SRobert Mustacchi #else /* __LITTLE_ENDIAN */
94*d14abf15SRobert Mustacchi 	u16 data_off;
95*d14abf15SRobert Mustacchi 	u16 data_len;
96*d14abf15SRobert Mustacchi #endif
97*d14abf15SRobert Mustacchi };
98*d14abf15SRobert Mustacchi 
99*d14abf15SRobert Mustacchi struct op_zero {
100*d14abf15SRobert Mustacchi 	u32 op:8;
101*d14abf15SRobert Mustacchi 	u32 offset:24;
102*d14abf15SRobert Mustacchi 	u32 len;
103*d14abf15SRobert Mustacchi };
104*d14abf15SRobert Mustacchi 
105*d14abf15SRobert Mustacchi struct op_if_mode {
106*d14abf15SRobert Mustacchi 	u32 op:8;
107*d14abf15SRobert Mustacchi 	u32 cmd_offset:24;
108*d14abf15SRobert Mustacchi 	u32 mode_bit_map;
109*d14abf15SRobert Mustacchi };
110*d14abf15SRobert Mustacchi 
111*d14abf15SRobert Mustacchi #ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */
112*d14abf15SRobert Mustacchi struct op_if_phase {
113*d14abf15SRobert Mustacchi 	u32 op:8;
114*d14abf15SRobert Mustacchi 	u32 cmd_offset:24;
115*d14abf15SRobert Mustacchi 	u32 phase_bit_map;
116*d14abf15SRobert Mustacchi };
117*d14abf15SRobert Mustacchi 
118*d14abf15SRobert Mustacchi struct op_delay {
119*d14abf15SRobert Mustacchi 	u32 op:8;
120*d14abf15SRobert Mustacchi 	u32 reserved:24;
121*d14abf15SRobert Mustacchi 	u32 delay;
122*d14abf15SRobert Mustacchi };
123*d14abf15SRobert Mustacchi #endif
124*d14abf15SRobert Mustacchi 
125*d14abf15SRobert Mustacchi union init_op {
126*d14abf15SRobert Mustacchi 	struct op_read		read;
127*d14abf15SRobert Mustacchi 	struct op_write		write;
128*d14abf15SRobert Mustacchi 	struct op_arr_write	arr_wr;
129*d14abf15SRobert Mustacchi 	struct op_zero		zero;
130*d14abf15SRobert Mustacchi 	struct raw_op		raw;
131*d14abf15SRobert Mustacchi 	struct op_if_mode	if_mode;
132*d14abf15SRobert Mustacchi #ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */
133*d14abf15SRobert Mustacchi 	struct op_if_phase	if_phase;
134*d14abf15SRobert Mustacchi 	struct op_delay		delay;
135*d14abf15SRobert Mustacchi #endif
136*d14abf15SRobert Mustacchi };
137*d14abf15SRobert Mustacchi 
138*d14abf15SRobert Mustacchi 
139*d14abf15SRobert Mustacchi /* Init Phases */
140*d14abf15SRobert Mustacchi enum {
141*d14abf15SRobert Mustacchi 	PHASE_COMMON,
142*d14abf15SRobert Mustacchi 	PHASE_PORT0,
143*d14abf15SRobert Mustacchi 	PHASE_PORT1,
144*d14abf15SRobert Mustacchi 	PHASE_PF0,
145*d14abf15SRobert Mustacchi 	PHASE_PF1,
146*d14abf15SRobert Mustacchi 	PHASE_PF2,
147*d14abf15SRobert Mustacchi 	PHASE_PF3,
148*d14abf15SRobert Mustacchi 	PHASE_PF4,
149*d14abf15SRobert Mustacchi 	PHASE_PF5,
150*d14abf15SRobert Mustacchi 	PHASE_PF6,
151*d14abf15SRobert Mustacchi 	PHASE_PF7,
152*d14abf15SRobert Mustacchi 	NUM_OF_INIT_PHASES
153*d14abf15SRobert Mustacchi };
154*d14abf15SRobert Mustacchi 
155*d14abf15SRobert Mustacchi /* Init Modes */
156*d14abf15SRobert Mustacchi enum {
157*d14abf15SRobert Mustacchi 	MODE_ASIC                      = 0x00000001,
158*d14abf15SRobert Mustacchi 	MODE_FPGA                      = 0x00000002,
159*d14abf15SRobert Mustacchi 	MODE_EMUL                      = 0x00000004,
160*d14abf15SRobert Mustacchi 	MODE_E2                        = 0x00000008,
161*d14abf15SRobert Mustacchi 	MODE_E3                        = 0x00000010,
162*d14abf15SRobert Mustacchi 	MODE_PORT2                     = 0x00000020,
163*d14abf15SRobert Mustacchi 	MODE_PORT4                     = 0x00000040,
164*d14abf15SRobert Mustacchi 	MODE_SF                        = 0x00000080,
165*d14abf15SRobert Mustacchi 	MODE_MF                        = 0x00000100,
166*d14abf15SRobert Mustacchi 	MODE_MF_SD                     = 0x00000200,
167*d14abf15SRobert Mustacchi 	MODE_MF_SI                     = 0x00000400,
168*d14abf15SRobert Mustacchi 	MODE_MF_AFEX                   = 0x00000800,
169*d14abf15SRobert Mustacchi 	MODE_E3_A0                     = 0x00001000,
170*d14abf15SRobert Mustacchi 	MODE_E3_B0                     = 0x00002000,
171*d14abf15SRobert Mustacchi 	MODE_COS3                      = 0x00004000,
172*d14abf15SRobert Mustacchi 	MODE_COS6                      = 0x00008000,
173*d14abf15SRobert Mustacchi 	MODE_LITTLE_ENDIAN             = 0x00010000,
174*d14abf15SRobert Mustacchi 	MODE_BIG_ENDIAN                = 0x00020000,
175*d14abf15SRobert Mustacchi };
176*d14abf15SRobert Mustacchi 
177*d14abf15SRobert Mustacchi /* Init Blocks */
178*d14abf15SRobert Mustacchi enum {
179*d14abf15SRobert Mustacchi 	BLOCK_ATC,
180*d14abf15SRobert Mustacchi 	BLOCK_BRB1,
181*d14abf15SRobert Mustacchi 	BLOCK_CCM,
182*d14abf15SRobert Mustacchi 	BLOCK_CDU,
183*d14abf15SRobert Mustacchi 	BLOCK_CFC,
184*d14abf15SRobert Mustacchi 	BLOCK_CSDM,
185*d14abf15SRobert Mustacchi 	BLOCK_CSEM,
186*d14abf15SRobert Mustacchi 	BLOCK_DBG,
187*d14abf15SRobert Mustacchi 	BLOCK_DMAE,
188*d14abf15SRobert Mustacchi 	BLOCK_DORQ,
189*d14abf15SRobert Mustacchi 	BLOCK_HC,
190*d14abf15SRobert Mustacchi 	BLOCK_IGU,
191*d14abf15SRobert Mustacchi 	BLOCK_MISC,
192*d14abf15SRobert Mustacchi 	BLOCK_NIG,
193*d14abf15SRobert Mustacchi 	BLOCK_PBF,
194*d14abf15SRobert Mustacchi 	BLOCK_PGLUE_B,
195*d14abf15SRobert Mustacchi 	BLOCK_PRS,
196*d14abf15SRobert Mustacchi 	BLOCK_PXP2,
197*d14abf15SRobert Mustacchi 	BLOCK_PXP,
198*d14abf15SRobert Mustacchi 	BLOCK_QM,
199*d14abf15SRobert Mustacchi 	BLOCK_SRC,
200*d14abf15SRobert Mustacchi 	BLOCK_TCM,
201*d14abf15SRobert Mustacchi 	BLOCK_TM,
202*d14abf15SRobert Mustacchi 	BLOCK_TSDM,
203*d14abf15SRobert Mustacchi 	BLOCK_TSEM,
204*d14abf15SRobert Mustacchi 	BLOCK_UCM,
205*d14abf15SRobert Mustacchi 	BLOCK_UPB,
206*d14abf15SRobert Mustacchi 	BLOCK_USDM,
207*d14abf15SRobert Mustacchi 	BLOCK_USEM,
208*d14abf15SRobert Mustacchi 	BLOCK_XCM,
209*d14abf15SRobert Mustacchi 	BLOCK_XPB,
210*d14abf15SRobert Mustacchi 	BLOCK_XSDM,
211*d14abf15SRobert Mustacchi 	BLOCK_XSEM,
212*d14abf15SRobert Mustacchi 	BLOCK_MISC_AEU,
213*d14abf15SRobert Mustacchi 	NUM_OF_INIT_BLOCKS
214*d14abf15SRobert Mustacchi };
215*d14abf15SRobert Mustacchi 
216