1718cf2ccSPedro F. Giffuni /*-
2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni *
4711bcba0SDavid C Somayajulu * Copyright (c) 2013-2014 Qlogic Corporation
5711bcba0SDavid C Somayajulu * All rights reserved.
6711bcba0SDavid C Somayajulu *
7711bcba0SDavid C Somayajulu * Redistribution and use in source and binary forms, with or without
8711bcba0SDavid C Somayajulu * modification, are permitted provided that the following conditions
9711bcba0SDavid C Somayajulu * are met:
10711bcba0SDavid C Somayajulu *
11711bcba0SDavid C Somayajulu * 1. Redistributions of source code must retain the above copyright
12711bcba0SDavid C Somayajulu * notice, this list of conditions and the following disclaimer.
13711bcba0SDavid C Somayajulu * 2. Redistributions in binary form must reproduce the above copyright
14711bcba0SDavid C Somayajulu * notice, this list of conditions and the following disclaimer in the
15711bcba0SDavid C Somayajulu * documentation and/or other materials provided with the distribution.
16711bcba0SDavid C Somayajulu *
17711bcba0SDavid C Somayajulu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18711bcba0SDavid C Somayajulu * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19711bcba0SDavid C Somayajulu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20711bcba0SDavid C Somayajulu * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21711bcba0SDavid C Somayajulu * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22711bcba0SDavid C Somayajulu * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23711bcba0SDavid C Somayajulu * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24711bcba0SDavid C Somayajulu * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25711bcba0SDavid C Somayajulu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26711bcba0SDavid C Somayajulu * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27711bcba0SDavid C Somayajulu * POSSIBILITY OF SUCH DAMAGE.
28711bcba0SDavid C Somayajulu */
29711bcba0SDavid C Somayajulu
30711bcba0SDavid C Somayajulu /*
31711bcba0SDavid C Somayajulu * File: qls_dump.c
32711bcba0SDavid C Somayajulu */
33711bcba0SDavid C Somayajulu #include <sys/cdefs.h>
34711bcba0SDavid C Somayajulu #include "qls_os.h"
35711bcba0SDavid C Somayajulu #include "qls_hw.h"
36711bcba0SDavid C Somayajulu #include "qls_def.h"
37711bcba0SDavid C Somayajulu #include "qls_glbl.h"
38711bcba0SDavid C Somayajulu #include "qls_dump.h"
39711bcba0SDavid C Somayajulu
40711bcba0SDavid C Somayajulu qls_mpi_coredump_t ql_mpi_coredump;
41711bcba0SDavid C Somayajulu
42711bcba0SDavid C Somayajulu #define Q81_CORE_SEG_NUM 1
43711bcba0SDavid C Somayajulu #define Q81_TEST_LOGIC_SEG_NUM 2
44711bcba0SDavid C Somayajulu #define Q81_RMII_SEG_NUM 3
45711bcba0SDavid C Somayajulu #define Q81_FCMAC1_SEG_NUM 4
46711bcba0SDavid C Somayajulu #define Q81_FCMAC2_SEG_NUM 5
47711bcba0SDavid C Somayajulu #define Q81_FC1_MBOX_SEG_NUM 6
48711bcba0SDavid C Somayajulu #define Q81_IDE_SEG_NUM 7
49711bcba0SDavid C Somayajulu #define Q81_NIC1_MBOX_SEG_NUM 8
50711bcba0SDavid C Somayajulu #define Q81_SMBUS_SEG_NUM 9
51711bcba0SDavid C Somayajulu #define Q81_FC2_MBOX_SEG_NUM 10
52711bcba0SDavid C Somayajulu #define Q81_NIC2_MBOX_SEG_NUM 11
53711bcba0SDavid C Somayajulu #define Q81_I2C_SEG_NUM 12
54711bcba0SDavid C Somayajulu #define Q81_MEMC_SEG_NUM 13
55711bcba0SDavid C Somayajulu #define Q81_PBUS_SEG_NUM 14
56711bcba0SDavid C Somayajulu #define Q81_MDE_SEG_NUM 15
57711bcba0SDavid C Somayajulu #define Q81_NIC1_CONTROL_SEG_NUM 16
58711bcba0SDavid C Somayajulu #define Q81_NIC2_CONTROL_SEG_NUM 17
59711bcba0SDavid C Somayajulu #define Q81_NIC1_XGMAC_SEG_NUM 18
60711bcba0SDavid C Somayajulu #define Q81_NIC2_XGMAC_SEG_NUM 19
61711bcba0SDavid C Somayajulu #define Q81_WCS_RAM_SEG_NUM 20
62711bcba0SDavid C Somayajulu #define Q81_MEMC_RAM_SEG_NUM 21
63711bcba0SDavid C Somayajulu #define Q81_XAUI1_AN_SEG_NUM 22
64711bcba0SDavid C Somayajulu #define Q81_XAUI1_HSS_PCS_SEG_NUM 23
65711bcba0SDavid C Somayajulu #define Q81_XFI1_AN_SEG_NUM 24
66711bcba0SDavid C Somayajulu #define Q81_XFI1_TRAIN_SEG_NUM 25
67711bcba0SDavid C Somayajulu #define Q81_XFI1_HSS_PCS_SEG_NUM 26
68711bcba0SDavid C Somayajulu #define Q81_XFI1_HSS_TX_SEG_NUM 27
69711bcba0SDavid C Somayajulu #define Q81_XFI1_HSS_RX_SEG_NUM 28
70711bcba0SDavid C Somayajulu #define Q81_XFI1_HSS_PLL_SEG_NUM 29
71711bcba0SDavid C Somayajulu #define Q81_INTR_STATES_SEG_NUM 31
72711bcba0SDavid C Somayajulu #define Q81_ETS_SEG_NUM 34
73711bcba0SDavid C Somayajulu #define Q81_PROBE_DUMP_SEG_NUM 35
74711bcba0SDavid C Somayajulu #define Q81_ROUTING_INDEX_SEG_NUM 36
75711bcba0SDavid C Somayajulu #define Q81_MAC_PROTOCOL_SEG_NUM 37
76711bcba0SDavid C Somayajulu #define Q81_XAUI2_AN_SEG_NUM 38
77711bcba0SDavid C Somayajulu #define Q81_XAUI2_HSS_PCS_SEG_NUM 39
78711bcba0SDavid C Somayajulu #define Q81_XFI2_AN_SEG_NUM 40
79711bcba0SDavid C Somayajulu #define Q81_XFI2_TRAIN_SEG_NUM 41
80711bcba0SDavid C Somayajulu #define Q81_XFI2_HSS_PCS_SEG_NUM 42
81711bcba0SDavid C Somayajulu #define Q81_XFI2_HSS_TX_SEG_NUM 43
82711bcba0SDavid C Somayajulu #define Q81_XFI2_HSS_RX_SEG_NUM 44
83711bcba0SDavid C Somayajulu #define Q81_XFI2_HSS_PLL_SEG_NUM 45
84711bcba0SDavid C Somayajulu #define Q81_WQC1_SEG_NUM 46
85711bcba0SDavid C Somayajulu #define Q81_CQC1_SEG_NUM 47
86711bcba0SDavid C Somayajulu #define Q81_WQC2_SEG_NUM 48
87711bcba0SDavid C Somayajulu #define Q81_CQC2_SEG_NUM 49
88711bcba0SDavid C Somayajulu #define Q81_SEM_REGS_SEG_NUM 50
89711bcba0SDavid C Somayajulu
90711bcba0SDavid C Somayajulu enum
91711bcba0SDavid C Somayajulu {
92711bcba0SDavid C Somayajulu Q81_PAUSE_SRC_LO = 0x00000100,
93711bcba0SDavid C Somayajulu Q81_PAUSE_SRC_HI = 0x00000104,
94711bcba0SDavid C Somayajulu Q81_GLOBAL_CFG = 0x00000108,
95711bcba0SDavid C Somayajulu Q81_GLOBAL_CFG_RESET = (1 << 0), /*Control*/
96711bcba0SDavid C Somayajulu Q81_GLOBAL_CFG_JUMBO = (1 << 6), /*Control*/
97711bcba0SDavid C Somayajulu Q81_GLOBAL_CFG_TX_STAT_EN = (1 << 10), /*Control*/
98711bcba0SDavid C Somayajulu Q81_GLOBAL_CFG_RX_STAT_EN = (1 << 11), /*Control*/
99711bcba0SDavid C Somayajulu Q81_TX_CFG = 0x0000010c,
100711bcba0SDavid C Somayajulu Q81_TX_CFG_RESET = (1 << 0), /*Control*/
101711bcba0SDavid C Somayajulu Q81_TX_CFG_EN = (1 << 1), /*Control*/
102711bcba0SDavid C Somayajulu Q81_TX_CFG_PREAM = (1 << 2), /*Control*/
103711bcba0SDavid C Somayajulu Q81_RX_CFG = 0x00000110,
104711bcba0SDavid C Somayajulu Q81_RX_CFG_RESET = (1 << 0), /*Control*/
105711bcba0SDavid C Somayajulu Q81_RX_CFG_EN = (1 << 1), /*Control*/
106711bcba0SDavid C Somayajulu Q81_RX_CFG_PREAM = (1 << 2), /*Control*/
107711bcba0SDavid C Somayajulu Q81_FLOW_CTL = 0x0000011c,
108711bcba0SDavid C Somayajulu Q81_PAUSE_OPCODE = 0x00000120,
109711bcba0SDavid C Somayajulu Q81_PAUSE_TIMER = 0x00000124,
110711bcba0SDavid C Somayajulu Q81_PAUSE_FRM_DEST_LO = 0x00000128,
111711bcba0SDavid C Somayajulu Q81_PAUSE_FRM_DEST_HI = 0x0000012c,
112711bcba0SDavid C Somayajulu Q81_MAC_TX_PARAMS = 0x00000134,
1137a22215cSEitan Adler Q81_MAC_TX_PARAMS_JUMBO = (1U << 31), /*Control*/
114711bcba0SDavid C Somayajulu Q81_MAC_TX_PARAMS_SIZE_SHIFT = 16, /*Control*/
115711bcba0SDavid C Somayajulu Q81_MAC_RX_PARAMS = 0x00000138,
116711bcba0SDavid C Somayajulu Q81_MAC_SYS_INT = 0x00000144,
117711bcba0SDavid C Somayajulu Q81_MAC_SYS_INT_MASK = 0x00000148,
118711bcba0SDavid C Somayajulu Q81_MAC_MGMT_INT = 0x0000014c,
119711bcba0SDavid C Somayajulu Q81_MAC_MGMT_IN_MASK = 0x00000150,
120711bcba0SDavid C Somayajulu Q81_EXT_ARB_MODE = 0x000001fc,
121711bcba0SDavid C Somayajulu Q81_TX_PKTS = 0x00000200,
122711bcba0SDavid C Somayajulu Q81_TX_PKTS_LO = 0x00000204,
123711bcba0SDavid C Somayajulu Q81_TX_BYTES = 0x00000208,
124711bcba0SDavid C Somayajulu Q81_TX_BYTES_LO = 0x0000020C,
125711bcba0SDavid C Somayajulu Q81_TX_MCAST_PKTS = 0x00000210,
126711bcba0SDavid C Somayajulu Q81_TX_MCAST_PKTS_LO = 0x00000214,
127711bcba0SDavid C Somayajulu Q81_TX_BCAST_PKTS = 0x00000218,
128711bcba0SDavid C Somayajulu Q81_TX_BCAST_PKTS_LO = 0x0000021C,
129711bcba0SDavid C Somayajulu Q81_TX_UCAST_PKTS = 0x00000220,
130711bcba0SDavid C Somayajulu Q81_TX_UCAST_PKTS_LO = 0x00000224,
131711bcba0SDavid C Somayajulu Q81_TX_CTL_PKTS = 0x00000228,
132711bcba0SDavid C Somayajulu Q81_TX_CTL_PKTS_LO = 0x0000022c,
133711bcba0SDavid C Somayajulu Q81_TX_PAUSE_PKTS = 0x00000230,
134711bcba0SDavid C Somayajulu Q81_TX_PAUSE_PKTS_LO = 0x00000234,
135711bcba0SDavid C Somayajulu Q81_TX_64_PKT = 0x00000238,
136711bcba0SDavid C Somayajulu Q81_TX_64_PKT_LO = 0x0000023c,
137711bcba0SDavid C Somayajulu Q81_TX_65_TO_127_PKT = 0x00000240,
138711bcba0SDavid C Somayajulu Q81_TX_65_TO_127_PKT_LO = 0x00000244,
139711bcba0SDavid C Somayajulu Q81_TX_128_TO_255_PKT = 0x00000248,
140711bcba0SDavid C Somayajulu Q81_TX_128_TO_255_PKT_LO = 0x0000024c,
141711bcba0SDavid C Somayajulu Q81_TX_256_511_PKT = 0x00000250,
142711bcba0SDavid C Somayajulu Q81_TX_256_511_PKT_LO = 0x00000254,
143711bcba0SDavid C Somayajulu Q81_TX_512_TO_1023_PKT = 0x00000258,
144711bcba0SDavid C Somayajulu Q81_TX_512_TO_1023_PKT_LO = 0x0000025c,
145711bcba0SDavid C Somayajulu Q81_TX_1024_TO_1518_PKT = 0x00000260,
146711bcba0SDavid C Somayajulu Q81_TX_1024_TO_1518_PKT_LO = 0x00000264,
147711bcba0SDavid C Somayajulu Q81_TX_1519_TO_MAX_PKT = 0x00000268,
148711bcba0SDavid C Somayajulu Q81_TX_1519_TO_MAX_PKT_LO = 0x0000026c,
149711bcba0SDavid C Somayajulu Q81_TX_UNDERSIZE_PKT = 0x00000270,
150711bcba0SDavid C Somayajulu Q81_TX_UNDERSIZE_PKT_LO = 0x00000274,
151711bcba0SDavid C Somayajulu Q81_TX_OVERSIZE_PKT = 0x00000278,
152711bcba0SDavid C Somayajulu Q81_TX_OVERSIZE_PKT_LO = 0x0000027c,
153711bcba0SDavid C Somayajulu Q81_RX_HALF_FULL_DET = 0x000002a0,
154711bcba0SDavid C Somayajulu Q81_TX_HALF_FULL_DET_LO = 0x000002a4,
155711bcba0SDavid C Somayajulu Q81_RX_OVERFLOW_DET = 0x000002a8,
156711bcba0SDavid C Somayajulu Q81_TX_OVERFLOW_DET_LO = 0x000002ac,
157711bcba0SDavid C Somayajulu Q81_RX_HALF_FULL_MASK = 0x000002b0,
158711bcba0SDavid C Somayajulu Q81_TX_HALF_FULL_MASK_LO = 0x000002b4,
159711bcba0SDavid C Somayajulu Q81_RX_OVERFLOW_MASK = 0x000002b8,
160711bcba0SDavid C Somayajulu Q81_TX_OVERFLOW_MASK_LO = 0x000002bc,
161711bcba0SDavid C Somayajulu Q81_STAT_CNT_CTL = 0x000002c0,
162711bcba0SDavid C Somayajulu Q81_STAT_CNT_CTL_CLEAR_TX = (1 << 0), /*Control*/
163711bcba0SDavid C Somayajulu Q81_STAT_CNT_CTL_CLEAR_RX = (1 << 1), /*Control*/
164711bcba0SDavid C Somayajulu Q81_AUX_RX_HALF_FULL_DET = 0x000002d0,
165711bcba0SDavid C Somayajulu Q81_AUX_TX_HALF_FULL_DET = 0x000002d4,
166711bcba0SDavid C Somayajulu Q81_AUX_RX_OVERFLOW_DET = 0x000002d8,
167711bcba0SDavid C Somayajulu Q81_AUX_TX_OVERFLOW_DET = 0x000002dc,
168711bcba0SDavid C Somayajulu Q81_AUX_RX_HALF_FULL_MASK = 0x000002f0,
169711bcba0SDavid C Somayajulu Q81_AUX_TX_HALF_FULL_MASK = 0x000002f4,
170711bcba0SDavid C Somayajulu Q81_AUX_RX_OVERFLOW_MASK = 0x000002f8,
171711bcba0SDavid C Somayajulu Q81_AUX_TX_OVERFLOW_MASK = 0x000002fc,
172711bcba0SDavid C Somayajulu Q81_RX_BYTES = 0x00000300,
173711bcba0SDavid C Somayajulu Q81_RX_BYTES_LO = 0x00000304,
174711bcba0SDavid C Somayajulu Q81_RX_BYTES_OK = 0x00000308,
175711bcba0SDavid C Somayajulu Q81_RX_BYTES_OK_LO = 0x0000030c,
176711bcba0SDavid C Somayajulu Q81_RX_PKTS = 0x00000310,
177711bcba0SDavid C Somayajulu Q81_RX_PKTS_LO = 0x00000314,
178711bcba0SDavid C Somayajulu Q81_RX_PKTS_OK = 0x00000318,
179711bcba0SDavid C Somayajulu Q81_RX_PKTS_OK_LO = 0x0000031c,
180711bcba0SDavid C Somayajulu Q81_RX_BCAST_PKTS = 0x00000320,
181711bcba0SDavid C Somayajulu Q81_RX_BCAST_PKTS_LO = 0x00000324,
182711bcba0SDavid C Somayajulu Q81_RX_MCAST_PKTS = 0x00000328,
183711bcba0SDavid C Somayajulu Q81_RX_MCAST_PKTS_LO = 0x0000032c,
184711bcba0SDavid C Somayajulu Q81_RX_UCAST_PKTS = 0x00000330,
185711bcba0SDavid C Somayajulu Q81_RX_UCAST_PKTS_LO = 0x00000334,
186711bcba0SDavid C Somayajulu Q81_RX_UNDERSIZE_PKTS = 0x00000338,
187711bcba0SDavid C Somayajulu Q81_RX_UNDERSIZE_PKTS_LO = 0x0000033c,
188711bcba0SDavid C Somayajulu Q81_RX_OVERSIZE_PKTS = 0x00000340,
189711bcba0SDavid C Somayajulu Q81_RX_OVERSIZE_PKTS_LO = 0x00000344,
190711bcba0SDavid C Somayajulu Q81_RX_JABBER_PKTS = 0x00000348,
191711bcba0SDavid C Somayajulu Q81_RX_JABBER_PKTS_LO = 0x0000034c,
192711bcba0SDavid C Somayajulu Q81_RX_UNDERSIZE_FCERR_PKTS = 0x00000350,
193711bcba0SDavid C Somayajulu Q81_RX_UNDERSIZE_FCERR_PKTS_LO = 0x00000354,
194711bcba0SDavid C Somayajulu Q81_RX_DROP_EVENTS = 0x00000358,
195711bcba0SDavid C Somayajulu Q81_RX_DROP_EVENTS_LO = 0x0000035c,
196711bcba0SDavid C Somayajulu Q81_RX_FCERR_PKTS = 0x00000360,
197711bcba0SDavid C Somayajulu Q81_RX_FCERR_PKTS_LO = 0x00000364,
198711bcba0SDavid C Somayajulu Q81_RX_ALIGN_ERR = 0x00000368,
199711bcba0SDavid C Somayajulu Q81_RX_ALIGN_ERR_LO = 0x0000036c,
200711bcba0SDavid C Somayajulu Q81_RX_SYMBOL_ERR = 0x00000370,
201711bcba0SDavid C Somayajulu Q81_RX_SYMBOL_ERR_LO = 0x00000374,
202711bcba0SDavid C Somayajulu Q81_RX_MAC_ERR = 0x00000378,
203711bcba0SDavid C Somayajulu Q81_RX_MAC_ERR_LO = 0x0000037c,
204711bcba0SDavid C Somayajulu Q81_RX_CTL_PKTS = 0x00000380,
205711bcba0SDavid C Somayajulu Q81_RX_CTL_PKTS_LO = 0x00000384,
206711bcba0SDavid C Somayajulu Q81_RX_PAUSE_PKTS = 0x00000388,
207711bcba0SDavid C Somayajulu Q81_RX_PAUSE_PKTS_LO = 0x0000038c,
208711bcba0SDavid C Somayajulu Q81_RX_64_PKTS = 0x00000390,
209711bcba0SDavid C Somayajulu Q81_RX_64_PKTS_LO = 0x00000394,
210711bcba0SDavid C Somayajulu Q81_RX_65_TO_127_PKTS = 0x00000398,
211711bcba0SDavid C Somayajulu Q81_RX_65_TO_127_PKTS_LO = 0x0000039c,
212711bcba0SDavid C Somayajulu Q81_RX_128_255_PKTS = 0x000003a0,
213711bcba0SDavid C Somayajulu Q81_RX_128_255_PKTS_LO = 0x000003a4,
214711bcba0SDavid C Somayajulu Q81_RX_256_511_PKTS = 0x000003a8,
215711bcba0SDavid C Somayajulu Q81_RX_256_511_PKTS_LO = 0x000003ac,
216711bcba0SDavid C Somayajulu Q81_RX_512_TO_1023_PKTS = 0x000003b0,
217711bcba0SDavid C Somayajulu Q81_RX_512_TO_1023_PKTS_LO = 0x000003b4,
218711bcba0SDavid C Somayajulu Q81_RX_1024_TO_1518_PKTS = 0x000003b8,
219711bcba0SDavid C Somayajulu Q81_RX_1024_TO_1518_PKTS_LO = 0x000003bc,
220711bcba0SDavid C Somayajulu Q81_RX_1519_TO_MAX_PKTS = 0x000003c0,
221711bcba0SDavid C Somayajulu Q81_RX_1519_TO_MAX_PKTS_LO = 0x000003c4,
222711bcba0SDavid C Somayajulu Q81_RX_LEN_ERR_PKTS = 0x000003c8,
223711bcba0SDavid C Somayajulu Q81_RX_LEN_ERR_PKTS_LO = 0x000003cc,
224711bcba0SDavid C Somayajulu Q81_MDIO_TX_DATA = 0x00000400,
225711bcba0SDavid C Somayajulu Q81_MDIO_RX_DATA = 0x00000410,
226711bcba0SDavid C Somayajulu Q81_MDIO_CMD = 0x00000420,
227711bcba0SDavid C Somayajulu Q81_MDIO_PHY_ADDR = 0x00000430,
228711bcba0SDavid C Somayajulu Q81_MDIO_PORT = 0x00000440,
229711bcba0SDavid C Somayajulu Q81_MDIO_STATUS = 0x00000450,
230711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES0 = 0x00000500,
231711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES0_LO = 0x00000504,
232711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES1 = 0x00000508,
233711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES1_LO = 0x0000050C,
234711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES2 = 0x00000510,
235711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES2_LO = 0x00000514,
236711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES3 = 0x00000518,
237711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES3_LO = 0x0000051C,
238711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES4 = 0x00000520,
239711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES4_LO = 0x00000524,
240711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES5 = 0x00000528,
241711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES5_LO = 0x0000052C,
242711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES6 = 0x00000530,
243711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES6_LO = 0x00000534,
244711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES7 = 0x00000538,
245711bcba0SDavid C Somayajulu Q81_TX_CBFC_PAUSE_FRAMES7_LO = 0x0000053C,
246711bcba0SDavid C Somayajulu Q81_TX_FCOE_PKTS = 0x00000540,
247711bcba0SDavid C Somayajulu Q81_TX_FCOE_PKTS_LO = 0x00000544,
248711bcba0SDavid C Somayajulu Q81_TX_MGMT_PKTS = 0x00000548,
249711bcba0SDavid C Somayajulu Q81_TX_MGMT_PKTS_LO = 0x0000054C,
250711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES0 = 0x00000568,
251711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES0_LO = 0x0000056C,
252711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES1 = 0x00000570,
253711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES1_LO = 0x00000574,
254711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES2 = 0x00000578,
255711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES2_LO = 0x0000057C,
256711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES3 = 0x00000580,
257711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES3_LO = 0x00000584,
258711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES4 = 0x00000588,
259711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES4_LO = 0x0000058C,
260711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES5 = 0x00000590,
261711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES5_LO = 0x00000594,
262711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES6 = 0x00000598,
263711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES6_LO = 0x0000059C,
264711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES7 = 0x000005A0,
265711bcba0SDavid C Somayajulu Q81_RX_CBFC_PAUSE_FRAMES7_LO = 0x000005A4,
266711bcba0SDavid C Somayajulu Q81_RX_FCOE_PKTS = 0x000005A8,
267711bcba0SDavid C Somayajulu Q81_RX_FCOE_PKTS_LO = 0x000005AC,
268711bcba0SDavid C Somayajulu Q81_RX_MGMT_PKTS = 0x000005B0,
269711bcba0SDavid C Somayajulu Q81_RX_MGMT_PKTS_LO = 0x000005B4,
270711bcba0SDavid C Somayajulu Q81_RX_NIC_FIFO_DROP = 0x000005B8,
271711bcba0SDavid C Somayajulu Q81_RX_NIC_FIFO_DROP_LO = 0x000005BC,
272711bcba0SDavid C Somayajulu Q81_RX_FCOE_FIFO_DROP = 0x000005C0,
273711bcba0SDavid C Somayajulu Q81_RX_FCOE_FIFO_DROP_LO = 0x000005C4,
274711bcba0SDavid C Somayajulu Q81_RX_MGMT_FIFO_DROP = 0x000005C8,
275711bcba0SDavid C Somayajulu Q81_RX_MGMT_FIFO_DROP_LO = 0x000005CC,
276711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY0 = 0x00000600,
277711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY0_LO = 0x00000604,
278711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY1 = 0x00000608,
279711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY1_LO = 0x0000060C,
280711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY2 = 0x00000610,
281711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY2_LO = 0x00000614,
282711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY3 = 0x00000618,
283711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY3_LO = 0x0000061C,
284711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY4 = 0x00000620,
285711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY4_LO = 0x00000624,
286711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY5 = 0x00000628,
287711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY5_LO = 0x0000062C,
288711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY6 = 0x00000630,
289711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY6_LO = 0x00000634,
290711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY7 = 0x00000638,
291711bcba0SDavid C Somayajulu Q81_RX_PKTS_PRIORITY7_LO = 0x0000063C,
292711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY0 = 0x00000640,
293711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY0_LO = 0x00000644,
294711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY1 = 0x00000648,
295711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY1_LO = 0x0000064C,
296711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY2 = 0x00000650,
297711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY2_LO = 0x00000654,
298711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY3 = 0x00000658,
299711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY3_LO = 0x0000065C,
300711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY4 = 0x00000660,
301711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY4_LO = 0x00000664,
302711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY5 = 0x00000668,
303711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY5_LO = 0x0000066C,
304711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY6 = 0x00000670,
305711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY6_LO = 0x00000674,
306711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY7 = 0x00000678,
307711bcba0SDavid C Somayajulu Q81_RX_OCTETS_PRIORITY7_LO = 0x0000067C,
308711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY0 = 0x00000680,
309711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY0_LO = 0x00000684,
310711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY1 = 0x00000688,
311711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY1_LO = 0x0000068C,
312711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY2 = 0x00000690,
313711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY2_LO = 0x00000694,
314711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY3 = 0x00000698,
315711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY3_LO = 0x0000069C,
316711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY4 = 0x000006A0,
317711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY4_LO = 0x000006A4,
318711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY5 = 0x000006A8,
319711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY5_LO = 0x000006AC,
320711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY6 = 0x000006B0,
321711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY6_LO = 0x000006B4,
322711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY7 = 0x000006B8,
323711bcba0SDavid C Somayajulu Q81_TX_PKTS_PRIORITY7_LO = 0x000006BC,
324711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY0 = 0x000006C0,
325711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY0_LO = 0x000006C4,
326711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY1 = 0x000006C8,
327711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY1_LO = 0x000006CC,
328711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY2 = 0x000006D0,
329711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY2_LO = 0x000006D4,
330711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY3 = 0x000006D8,
331711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY3_LO = 0x000006DC,
332711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY4 = 0x000006E0,
333711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY4_LO = 0x000006E4,
334711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY5 = 0x000006E8,
335711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY5_LO = 0x000006EC,
336711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY6 = 0x000006F0,
337711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY6_LO = 0x000006F4,
338711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY7 = 0x000006F8,
339711bcba0SDavid C Somayajulu Q81_TX_OCTETS_PRIORITY7_LO = 0x000006FC,
340711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY0 = 0x00000700,
341711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY0_LO = 0x00000704,
342711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY1 = 0x00000708,
343711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY1_LO = 0x0000070C,
344711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY2 = 0x00000710,
345711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY2_LO = 0x00000714,
346711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY3 = 0x00000718,
347711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY3_LO = 0x0000071C,
348711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY4 = 0x00000720,
349711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY4_LO = 0x00000724,
350711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY5 = 0x00000728,
351711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY5_LO = 0x0000072C,
352711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY6 = 0x00000730,
353711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY6_LO = 0x00000734,
354711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY7 = 0x00000738,
355711bcba0SDavid C Somayajulu Q81_RX_DISCARD_PRIORITY7_LO = 0x0000073C
356711bcba0SDavid C Somayajulu };
357711bcba0SDavid C Somayajulu
358711bcba0SDavid C Somayajulu static void
qls_mpid_seg_hdr(qls_mpid_seg_hdr_t * seg_hdr,uint32_t seg_num,uint32_t seg_size,unsigned char * desc)359711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(qls_mpid_seg_hdr_t *seg_hdr, uint32_t seg_num,
360711bcba0SDavid C Somayajulu uint32_t seg_size, unsigned char *desc)
361711bcba0SDavid C Somayajulu {
362711bcba0SDavid C Somayajulu memset(seg_hdr, 0, sizeof(qls_mpid_seg_hdr_t));
363711bcba0SDavid C Somayajulu
364711bcba0SDavid C Somayajulu seg_hdr->cookie = Q81_MPID_COOKIE;
365711bcba0SDavid C Somayajulu seg_hdr->seg_num = seg_num;
366711bcba0SDavid C Somayajulu seg_hdr->seg_size = seg_size;
367711bcba0SDavid C Somayajulu
368711bcba0SDavid C Somayajulu memcpy(seg_hdr->desc, desc, (sizeof(seg_hdr->desc))-1);
369711bcba0SDavid C Somayajulu
370711bcba0SDavid C Somayajulu return;
371711bcba0SDavid C Somayajulu }
372711bcba0SDavid C Somayajulu
373711bcba0SDavid C Somayajulu static int
qls_wait_reg_rdy(qla_host_t * ha,uint32_t reg,uint32_t bit,uint32_t err_bit)374711bcba0SDavid C Somayajulu qls_wait_reg_rdy(qla_host_t *ha , uint32_t reg, uint32_t bit, uint32_t err_bit)
375711bcba0SDavid C Somayajulu {
376711bcba0SDavid C Somayajulu uint32_t data;
377711bcba0SDavid C Somayajulu int count = 10;
378711bcba0SDavid C Somayajulu
379711bcba0SDavid C Somayajulu while (count) {
380711bcba0SDavid C Somayajulu data = READ_REG32(ha, reg);
381711bcba0SDavid C Somayajulu
382711bcba0SDavid C Somayajulu if (data & err_bit)
383711bcba0SDavid C Somayajulu return (-1);
384711bcba0SDavid C Somayajulu else if (data & bit)
385711bcba0SDavid C Somayajulu return (0);
386711bcba0SDavid C Somayajulu
387711bcba0SDavid C Somayajulu qls_mdelay(__func__, 10);
388711bcba0SDavid C Somayajulu count--;
389711bcba0SDavid C Somayajulu }
390711bcba0SDavid C Somayajulu return (-1);
391711bcba0SDavid C Somayajulu }
392711bcba0SDavid C Somayajulu
393711bcba0SDavid C Somayajulu static int
qls_rd_mpi_reg(qla_host_t * ha,uint32_t reg,uint32_t * data)394711bcba0SDavid C Somayajulu qls_rd_mpi_reg(qla_host_t *ha, uint32_t reg, uint32_t *data)
395711bcba0SDavid C Somayajulu {
396711bcba0SDavid C Somayajulu int ret;
397711bcba0SDavid C Somayajulu
398711bcba0SDavid C Somayajulu ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY,
399711bcba0SDavid C Somayajulu Q81_CTL_PROC_ADDR_ERR);
400711bcba0SDavid C Somayajulu
401711bcba0SDavid C Somayajulu if (ret)
402711bcba0SDavid C Somayajulu goto exit_qls_rd_mpi_reg;
403711bcba0SDavid C Somayajulu
404711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_PROC_ADDR, reg | Q81_CTL_PROC_ADDR_READ);
405711bcba0SDavid C Somayajulu
406711bcba0SDavid C Somayajulu ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY,
407711bcba0SDavid C Somayajulu Q81_CTL_PROC_ADDR_ERR);
408711bcba0SDavid C Somayajulu
409711bcba0SDavid C Somayajulu if (ret)
410711bcba0SDavid C Somayajulu goto exit_qls_rd_mpi_reg;
411711bcba0SDavid C Somayajulu
412711bcba0SDavid C Somayajulu *data = READ_REG32(ha, Q81_CTL_PROC_DATA);
413711bcba0SDavid C Somayajulu
414711bcba0SDavid C Somayajulu exit_qls_rd_mpi_reg:
415711bcba0SDavid C Somayajulu return (ret);
416711bcba0SDavid C Somayajulu }
417711bcba0SDavid C Somayajulu
418711bcba0SDavid C Somayajulu static int
qls_wr_mpi_reg(qla_host_t * ha,uint32_t reg,uint32_t data)419711bcba0SDavid C Somayajulu qls_wr_mpi_reg(qla_host_t *ha, uint32_t reg, uint32_t data)
420711bcba0SDavid C Somayajulu {
421711bcba0SDavid C Somayajulu int ret = 0;
422711bcba0SDavid C Somayajulu
423711bcba0SDavid C Somayajulu ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY,
424711bcba0SDavid C Somayajulu Q81_CTL_PROC_ADDR_ERR);
425711bcba0SDavid C Somayajulu if (ret)
426711bcba0SDavid C Somayajulu goto exit_qls_wr_mpi_reg;
427711bcba0SDavid C Somayajulu
428711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_PROC_DATA, data);
429711bcba0SDavid C Somayajulu
430711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_PROC_ADDR, reg);
431711bcba0SDavid C Somayajulu
432711bcba0SDavid C Somayajulu ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY,
433711bcba0SDavid C Somayajulu Q81_CTL_PROC_ADDR_ERR);
434711bcba0SDavid C Somayajulu exit_qls_wr_mpi_reg:
435711bcba0SDavid C Somayajulu return (ret);
436711bcba0SDavid C Somayajulu }
437711bcba0SDavid C Somayajulu
438711bcba0SDavid C Somayajulu #define Q81_TEST_LOGIC_FUNC_PORT_CONFIG 0x1002
439711bcba0SDavid C Somayajulu #define Q81_INVALID_NUM 0xFFFFFFFF
440711bcba0SDavid C Somayajulu
441711bcba0SDavid C Somayajulu #define Q81_NIC1_FUNC_ENABLE 0x00000001
442711bcba0SDavid C Somayajulu #define Q81_NIC1_FUNC_MASK 0x0000000e
443711bcba0SDavid C Somayajulu #define Q81_NIC1_FUNC_SHIFT 1
444711bcba0SDavid C Somayajulu #define Q81_NIC2_FUNC_ENABLE 0x00000010
445711bcba0SDavid C Somayajulu #define Q81_NIC2_FUNC_MASK 0x000000e0
446711bcba0SDavid C Somayajulu #define Q81_NIC2_FUNC_SHIFT 5
447711bcba0SDavid C Somayajulu #define Q81_FUNCTION_SHIFT 6
448711bcba0SDavid C Somayajulu
449711bcba0SDavid C Somayajulu static uint32_t
qls_get_other_fnum(qla_host_t * ha)450711bcba0SDavid C Somayajulu qls_get_other_fnum(qla_host_t *ha)
451711bcba0SDavid C Somayajulu {
452711bcba0SDavid C Somayajulu int ret;
453711bcba0SDavid C Somayajulu uint32_t o_func;
454711bcba0SDavid C Somayajulu uint32_t test_logic;
455711bcba0SDavid C Somayajulu uint32_t nic1_fnum = Q81_INVALID_NUM;
456711bcba0SDavid C Somayajulu uint32_t nic2_fnum = Q81_INVALID_NUM;
457711bcba0SDavid C Somayajulu
458711bcba0SDavid C Somayajulu ret = qls_rd_mpi_reg(ha, Q81_TEST_LOGIC_FUNC_PORT_CONFIG, &test_logic);
459711bcba0SDavid C Somayajulu if (ret)
460711bcba0SDavid C Somayajulu return(Q81_INVALID_NUM);
461711bcba0SDavid C Somayajulu
462711bcba0SDavid C Somayajulu if (test_logic & Q81_NIC1_FUNC_ENABLE)
463711bcba0SDavid C Somayajulu nic1_fnum = (test_logic & Q81_NIC1_FUNC_MASK) >>
464711bcba0SDavid C Somayajulu Q81_NIC1_FUNC_SHIFT;
465711bcba0SDavid C Somayajulu
466711bcba0SDavid C Somayajulu if (test_logic & Q81_NIC2_FUNC_ENABLE)
467711bcba0SDavid C Somayajulu nic2_fnum = (test_logic & Q81_NIC2_FUNC_MASK) >>
468711bcba0SDavid C Somayajulu Q81_NIC2_FUNC_SHIFT;
469711bcba0SDavid C Somayajulu
470711bcba0SDavid C Somayajulu if (ha->pci_func == 0)
471711bcba0SDavid C Somayajulu o_func = nic2_fnum;
472711bcba0SDavid C Somayajulu else
473711bcba0SDavid C Somayajulu o_func = nic1_fnum;
474711bcba0SDavid C Somayajulu
475711bcba0SDavid C Somayajulu return(o_func);
476711bcba0SDavid C Somayajulu }
477711bcba0SDavid C Somayajulu
478711bcba0SDavid C Somayajulu static uint32_t
qls_rd_ofunc_reg(qla_host_t * ha,uint32_t reg)479711bcba0SDavid C Somayajulu qls_rd_ofunc_reg(qla_host_t *ha, uint32_t reg)
480711bcba0SDavid C Somayajulu {
481711bcba0SDavid C Somayajulu uint32_t ofunc;
482711bcba0SDavid C Somayajulu uint32_t data;
483711bcba0SDavid C Somayajulu int ret = 0;
484711bcba0SDavid C Somayajulu
485711bcba0SDavid C Somayajulu ofunc = qls_get_other_fnum(ha);
486711bcba0SDavid C Somayajulu
487711bcba0SDavid C Somayajulu if (ofunc == Q81_INVALID_NUM)
488711bcba0SDavid C Somayajulu return(Q81_INVALID_NUM);
489711bcba0SDavid C Somayajulu
490711bcba0SDavid C Somayajulu reg = Q81_CTL_PROC_ADDR_REG_BLOCK | (ofunc << Q81_FUNCTION_SHIFT) | reg;
491711bcba0SDavid C Somayajulu
492711bcba0SDavid C Somayajulu ret = qls_rd_mpi_reg(ha, reg, &data);
493711bcba0SDavid C Somayajulu
494711bcba0SDavid C Somayajulu if (ret != 0)
495711bcba0SDavid C Somayajulu return(Q81_INVALID_NUM);
496711bcba0SDavid C Somayajulu
497711bcba0SDavid C Somayajulu return(data);
498711bcba0SDavid C Somayajulu }
499711bcba0SDavid C Somayajulu
500711bcba0SDavid C Somayajulu static void
qls_wr_ofunc_reg(qla_host_t * ha,uint32_t reg,uint32_t value)501711bcba0SDavid C Somayajulu qls_wr_ofunc_reg(qla_host_t *ha, uint32_t reg, uint32_t value)
502711bcba0SDavid C Somayajulu {
503711bcba0SDavid C Somayajulu uint32_t ofunc;
504711bcba0SDavid C Somayajulu
505711bcba0SDavid C Somayajulu ofunc = qls_get_other_fnum(ha);
506711bcba0SDavid C Somayajulu
507711bcba0SDavid C Somayajulu if (ofunc == Q81_INVALID_NUM)
508711bcba0SDavid C Somayajulu return;
509711bcba0SDavid C Somayajulu
510711bcba0SDavid C Somayajulu reg = Q81_CTL_PROC_ADDR_REG_BLOCK | (ofunc << Q81_FUNCTION_SHIFT) | reg;
511711bcba0SDavid C Somayajulu
5125bf982c1SJohn Baldwin qls_wr_mpi_reg(ha, reg, value);
513711bcba0SDavid C Somayajulu
514711bcba0SDavid C Somayajulu return;
515711bcba0SDavid C Somayajulu }
516711bcba0SDavid C Somayajulu
517711bcba0SDavid C Somayajulu static int
qls_wait_ofunc_reg_rdy(qla_host_t * ha,uint32_t reg,uint32_t bit,uint32_t err_bit)518711bcba0SDavid C Somayajulu qls_wait_ofunc_reg_rdy(qla_host_t *ha , uint32_t reg, uint32_t bit,
519711bcba0SDavid C Somayajulu uint32_t err_bit)
520711bcba0SDavid C Somayajulu {
521711bcba0SDavid C Somayajulu uint32_t data;
522711bcba0SDavid C Somayajulu int count = 10;
523711bcba0SDavid C Somayajulu
524711bcba0SDavid C Somayajulu while (count) {
525711bcba0SDavid C Somayajulu data = qls_rd_ofunc_reg(ha, reg);
526711bcba0SDavid C Somayajulu
527711bcba0SDavid C Somayajulu if (data & err_bit)
528711bcba0SDavid C Somayajulu return (-1);
529711bcba0SDavid C Somayajulu else if (data & bit)
530711bcba0SDavid C Somayajulu return (0);
531711bcba0SDavid C Somayajulu
532711bcba0SDavid C Somayajulu qls_mdelay(__func__, 10);
533711bcba0SDavid C Somayajulu count--;
534711bcba0SDavid C Somayajulu }
535711bcba0SDavid C Somayajulu return (-1);
536711bcba0SDavid C Somayajulu }
537711bcba0SDavid C Somayajulu
538711bcba0SDavid C Somayajulu #define Q81_XG_SERDES_ADDR_RDY BIT_31
539711bcba0SDavid C Somayajulu #define Q81_XG_SERDES_ADDR_READ BIT_30
540711bcba0SDavid C Somayajulu
541711bcba0SDavid C Somayajulu static int
qls_rd_ofunc_serdes_reg(qla_host_t * ha,uint32_t reg,uint32_t * data)542711bcba0SDavid C Somayajulu qls_rd_ofunc_serdes_reg(qla_host_t *ha, uint32_t reg, uint32_t *data)
543711bcba0SDavid C Somayajulu {
544711bcba0SDavid C Somayajulu int ret;
545711bcba0SDavid C Somayajulu
546711bcba0SDavid C Somayajulu /* wait for reg to come ready */
547711bcba0SDavid C Somayajulu ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XG_SERDES_ADDR >> 2),
548711bcba0SDavid C Somayajulu Q81_XG_SERDES_ADDR_RDY, 0);
549711bcba0SDavid C Somayajulu if (ret)
550711bcba0SDavid C Somayajulu goto exit_qls_rd_ofunc_serdes_reg;
551711bcba0SDavid C Somayajulu
552711bcba0SDavid C Somayajulu /* set up for reg read */
553711bcba0SDavid C Somayajulu qls_wr_ofunc_reg(ha, (Q81_CTL_XG_SERDES_ADDR >> 2),
554711bcba0SDavid C Somayajulu (reg | Q81_XG_SERDES_ADDR_READ));
555711bcba0SDavid C Somayajulu
556711bcba0SDavid C Somayajulu /* wait for reg to come ready */
557711bcba0SDavid C Somayajulu ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XG_SERDES_ADDR >> 2),
558711bcba0SDavid C Somayajulu Q81_XG_SERDES_ADDR_RDY, 0);
559711bcba0SDavid C Somayajulu if (ret)
560711bcba0SDavid C Somayajulu goto exit_qls_rd_ofunc_serdes_reg;
561711bcba0SDavid C Somayajulu
562711bcba0SDavid C Somayajulu /* get the data */
563711bcba0SDavid C Somayajulu *data = qls_rd_ofunc_reg(ha, (Q81_CTL_XG_SERDES_DATA >> 2));
564711bcba0SDavid C Somayajulu
565711bcba0SDavid C Somayajulu exit_qls_rd_ofunc_serdes_reg:
566711bcba0SDavid C Somayajulu return ret;
567711bcba0SDavid C Somayajulu }
568711bcba0SDavid C Somayajulu
569711bcba0SDavid C Somayajulu #define Q81_XGMAC_ADDR_RDY BIT_31
570711bcba0SDavid C Somayajulu #define Q81_XGMAC_ADDR_R BIT_30
571711bcba0SDavid C Somayajulu #define Q81_XGMAC_ADDR_XME BIT_29
572711bcba0SDavid C Somayajulu
573711bcba0SDavid C Somayajulu static int
qls_rd_ofunc_xgmac_reg(qla_host_t * ha,uint32_t reg,uint32_t * data)574711bcba0SDavid C Somayajulu qls_rd_ofunc_xgmac_reg(qla_host_t *ha, uint32_t reg, uint32_t *data)
575711bcba0SDavid C Somayajulu {
576711bcba0SDavid C Somayajulu int ret = 0;
577711bcba0SDavid C Somayajulu
578711bcba0SDavid C Somayajulu ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XGMAC_ADDR >> 2),
579711bcba0SDavid C Somayajulu Q81_XGMAC_ADDR_RDY, Q81_XGMAC_ADDR_XME);
580711bcba0SDavid C Somayajulu
581711bcba0SDavid C Somayajulu if (ret)
582711bcba0SDavid C Somayajulu goto exit_qls_rd_ofunc_xgmac_reg;
583711bcba0SDavid C Somayajulu
584711bcba0SDavid C Somayajulu qls_wr_ofunc_reg(ha, (Q81_XGMAC_ADDR_RDY >> 2),
585711bcba0SDavid C Somayajulu (reg | Q81_XGMAC_ADDR_R));
586711bcba0SDavid C Somayajulu
587711bcba0SDavid C Somayajulu ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XGMAC_ADDR >> 2),
588711bcba0SDavid C Somayajulu Q81_XGMAC_ADDR_RDY, Q81_XGMAC_ADDR_XME);
589711bcba0SDavid C Somayajulu if (ret)
590711bcba0SDavid C Somayajulu goto exit_qls_rd_ofunc_xgmac_reg;
591711bcba0SDavid C Somayajulu
592711bcba0SDavid C Somayajulu *data = qls_rd_ofunc_reg(ha, Q81_CTL_XGMAC_DATA);
593711bcba0SDavid C Somayajulu
594711bcba0SDavid C Somayajulu exit_qls_rd_ofunc_xgmac_reg:
595711bcba0SDavid C Somayajulu return ret;
596711bcba0SDavid C Somayajulu }
597711bcba0SDavid C Somayajulu
598711bcba0SDavid C Somayajulu static int
qls_rd_serdes_reg(qla_host_t * ha,uint32_t reg,uint32_t * data)599711bcba0SDavid C Somayajulu qls_rd_serdes_reg(qla_host_t *ha, uint32_t reg, uint32_t *data)
600711bcba0SDavid C Somayajulu {
601711bcba0SDavid C Somayajulu int ret;
602711bcba0SDavid C Somayajulu
603711bcba0SDavid C Somayajulu ret = qls_wait_reg_rdy(ha, Q81_CTL_XG_SERDES_ADDR,
604711bcba0SDavid C Somayajulu Q81_XG_SERDES_ADDR_RDY, 0);
605711bcba0SDavid C Somayajulu
606711bcba0SDavid C Somayajulu if (ret)
607711bcba0SDavid C Somayajulu goto exit_qls_rd_serdes_reg;
608711bcba0SDavid C Somayajulu
609711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_XG_SERDES_ADDR, \
610711bcba0SDavid C Somayajulu (reg | Q81_XG_SERDES_ADDR_READ));
611711bcba0SDavid C Somayajulu
612711bcba0SDavid C Somayajulu ret = qls_wait_reg_rdy(ha, Q81_CTL_XG_SERDES_ADDR,
613711bcba0SDavid C Somayajulu Q81_XG_SERDES_ADDR_RDY, 0);
614711bcba0SDavid C Somayajulu
615711bcba0SDavid C Somayajulu if (ret)
616711bcba0SDavid C Somayajulu goto exit_qls_rd_serdes_reg;
617711bcba0SDavid C Somayajulu
618711bcba0SDavid C Somayajulu *data = READ_REG32(ha, Q81_CTL_XG_SERDES_DATA);
619711bcba0SDavid C Somayajulu
620711bcba0SDavid C Somayajulu exit_qls_rd_serdes_reg:
621711bcba0SDavid C Somayajulu
622711bcba0SDavid C Somayajulu return ret;
623711bcba0SDavid C Somayajulu }
624711bcba0SDavid C Somayajulu
625711bcba0SDavid C Somayajulu static void
qls_get_both_serdes(qla_host_t * ha,uint32_t addr,uint32_t * dptr,uint32_t * ind_ptr,uint32_t dvalid,uint32_t ind_valid)626711bcba0SDavid C Somayajulu qls_get_both_serdes(qla_host_t *ha, uint32_t addr, uint32_t *dptr,
627711bcba0SDavid C Somayajulu uint32_t *ind_ptr, uint32_t dvalid, uint32_t ind_valid)
628711bcba0SDavid C Somayajulu {
629711bcba0SDavid C Somayajulu int ret = -1;
630711bcba0SDavid C Somayajulu
631711bcba0SDavid C Somayajulu if (dvalid)
632711bcba0SDavid C Somayajulu ret = qls_rd_serdes_reg(ha, addr, dptr);
633711bcba0SDavid C Somayajulu
634711bcba0SDavid C Somayajulu if (ret)
635711bcba0SDavid C Somayajulu *dptr = Q81_BAD_DATA;
636711bcba0SDavid C Somayajulu
637711bcba0SDavid C Somayajulu ret = -1;
638711bcba0SDavid C Somayajulu
639711bcba0SDavid C Somayajulu if(ind_valid)
640711bcba0SDavid C Somayajulu ret = qls_rd_ofunc_serdes_reg(ha, addr, ind_ptr);
641711bcba0SDavid C Somayajulu
642711bcba0SDavid C Somayajulu if (ret)
643711bcba0SDavid C Somayajulu *ind_ptr = Q81_BAD_DATA;
644711bcba0SDavid C Somayajulu }
645711bcba0SDavid C Somayajulu
646711bcba0SDavid C Somayajulu #define Q81_XFI1_POWERED_UP 0x00000005
647711bcba0SDavid C Somayajulu #define Q81_XFI2_POWERED_UP 0x0000000A
648711bcba0SDavid C Somayajulu #define Q81_XAUI_POWERED_UP 0x00000001
649711bcba0SDavid C Somayajulu
650711bcba0SDavid C Somayajulu static int
qls_rd_serdes_regs(qla_host_t * ha,qls_mpi_coredump_t * mpi_dump)651711bcba0SDavid C Somayajulu qls_rd_serdes_regs(qla_host_t *ha, qls_mpi_coredump_t *mpi_dump)
652711bcba0SDavid C Somayajulu {
653711bcba0SDavid C Somayajulu int ret;
654711bcba0SDavid C Somayajulu uint32_t xfi_d_valid, xfi_ind_valid, xaui_d_valid, xaui_ind_valid;
655711bcba0SDavid C Somayajulu uint32_t temp, xaui_reg, i;
656711bcba0SDavid C Somayajulu uint32_t *dptr, *indptr;
657711bcba0SDavid C Somayajulu
658711bcba0SDavid C Somayajulu xfi_d_valid = xfi_ind_valid = xaui_d_valid = xaui_ind_valid = 0;
659711bcba0SDavid C Somayajulu
660711bcba0SDavid C Somayajulu xaui_reg = 0x800;
661711bcba0SDavid C Somayajulu
662711bcba0SDavid C Somayajulu ret = qls_rd_ofunc_serdes_reg(ha, xaui_reg, &temp);
663711bcba0SDavid C Somayajulu if (ret)
664711bcba0SDavid C Somayajulu temp = 0;
665711bcba0SDavid C Somayajulu
666711bcba0SDavid C Somayajulu if ((temp & Q81_XAUI_POWERED_UP) == Q81_XAUI_POWERED_UP)
667711bcba0SDavid C Somayajulu xaui_ind_valid = 1;
668711bcba0SDavid C Somayajulu
669711bcba0SDavid C Somayajulu ret = qls_rd_serdes_reg(ha, xaui_reg, &temp);
670711bcba0SDavid C Somayajulu if (ret)
671711bcba0SDavid C Somayajulu temp = 0;
672711bcba0SDavid C Somayajulu
673711bcba0SDavid C Somayajulu if ((temp & Q81_XAUI_POWERED_UP) == Q81_XAUI_POWERED_UP)
674711bcba0SDavid C Somayajulu xaui_d_valid = 1;
675711bcba0SDavid C Somayajulu
676711bcba0SDavid C Somayajulu ret = qls_rd_serdes_reg(ha, 0x1E06, &temp);
677711bcba0SDavid C Somayajulu if (ret)
678711bcba0SDavid C Somayajulu temp = 0;
679711bcba0SDavid C Somayajulu
680711bcba0SDavid C Somayajulu if ((temp & Q81_XFI1_POWERED_UP) == Q81_XFI1_POWERED_UP) {
681711bcba0SDavid C Somayajulu if (ha->pci_func & 1)
682711bcba0SDavid C Somayajulu xfi_ind_valid = 1; /* NIC 2, so the indirect
683711bcba0SDavid C Somayajulu (NIC1) xfi is up*/
684711bcba0SDavid C Somayajulu else
685711bcba0SDavid C Somayajulu xfi_d_valid = 1;
686711bcba0SDavid C Somayajulu }
687711bcba0SDavid C Somayajulu
688711bcba0SDavid C Somayajulu if((temp & Q81_XFI2_POWERED_UP) == Q81_XFI2_POWERED_UP) {
689711bcba0SDavid C Somayajulu if(ha->pci_func & 1)
690711bcba0SDavid C Somayajulu xfi_d_valid = 1; /* NIC 2, so the indirect (NIC1)
691711bcba0SDavid C Somayajulu xfi is up */
692711bcba0SDavid C Somayajulu else
693711bcba0SDavid C Somayajulu xfi_ind_valid = 1;
694711bcba0SDavid C Somayajulu }
695711bcba0SDavid C Somayajulu
696711bcba0SDavid C Somayajulu if (ha->pci_func & 1) {
697711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes2_xaui_an);
698711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes1_xaui_an);
699711bcba0SDavid C Somayajulu } else {
700711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes1_xaui_an);
701711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes2_xaui_an);
702711bcba0SDavid C Somayajulu }
703711bcba0SDavid C Somayajulu
704711bcba0SDavid C Somayajulu for (i = 0; i <= 0x000000034; i += 4, dptr ++, indptr ++) {
705711bcba0SDavid C Somayajulu qls_get_both_serdes(ha, i, dptr, indptr,
706711bcba0SDavid C Somayajulu xaui_d_valid, xaui_ind_valid);
707711bcba0SDavid C Somayajulu }
708711bcba0SDavid C Somayajulu
709711bcba0SDavid C Somayajulu if (ha->pci_func & 1) {
710711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes2_xaui_hss_pcs);
711711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes1_xaui_hss_pcs);
712711bcba0SDavid C Somayajulu } else {
713711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes1_xaui_hss_pcs);
714711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes2_xaui_hss_pcs);
715711bcba0SDavid C Somayajulu }
716711bcba0SDavid C Somayajulu
717711bcba0SDavid C Somayajulu for (i = 0x800; i <= 0x880; i += 4, dptr ++, indptr ++) {
718711bcba0SDavid C Somayajulu qls_get_both_serdes(ha, i, dptr, indptr,
719711bcba0SDavid C Somayajulu xaui_d_valid, xaui_ind_valid);
720711bcba0SDavid C Somayajulu }
721711bcba0SDavid C Somayajulu
722711bcba0SDavid C Somayajulu if (ha->pci_func & 1) {
723711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_an);
724711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_an);
725711bcba0SDavid C Somayajulu } else {
726711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_an);
727711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_an);
728711bcba0SDavid C Somayajulu }
729711bcba0SDavid C Somayajulu
730711bcba0SDavid C Somayajulu for (i = 0x1000; i <= 0x1034; i += 4, dptr ++, indptr ++) {
731711bcba0SDavid C Somayajulu qls_get_both_serdes(ha, i, dptr, indptr,
732711bcba0SDavid C Somayajulu xfi_d_valid, xfi_ind_valid);
733711bcba0SDavid C Somayajulu }
734711bcba0SDavid C Somayajulu
735711bcba0SDavid C Somayajulu if (ha->pci_func & 1) {
736711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_train);
737711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_train);
738711bcba0SDavid C Somayajulu } else {
739711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_train);
740711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_train);
741711bcba0SDavid C Somayajulu }
742711bcba0SDavid C Somayajulu
743711bcba0SDavid C Somayajulu for (i = 0x1050; i <= 0x107c; i += 4, dptr ++, indptr ++) {
744711bcba0SDavid C Somayajulu qls_get_both_serdes(ha, i, dptr, indptr,
745711bcba0SDavid C Somayajulu xfi_d_valid, xfi_ind_valid);
746711bcba0SDavid C Somayajulu }
747711bcba0SDavid C Somayajulu
748711bcba0SDavid C Somayajulu if (ha->pci_func & 1) {
749711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pcs);
750711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pcs);
751711bcba0SDavid C Somayajulu } else {
752711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pcs);
753711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pcs);
754711bcba0SDavid C Somayajulu }
755711bcba0SDavid C Somayajulu
756711bcba0SDavid C Somayajulu for (i = 0x1800; i <= 0x1838; i += 4, dptr++, indptr ++) {
757711bcba0SDavid C Somayajulu qls_get_both_serdes(ha, i, dptr, indptr,
758711bcba0SDavid C Somayajulu xfi_d_valid, xfi_ind_valid);
759711bcba0SDavid C Somayajulu }
760711bcba0SDavid C Somayajulu
761711bcba0SDavid C Somayajulu if (ha->pci_func & 1) {
762711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_tx);
763711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_tx);
764711bcba0SDavid C Somayajulu } else {
765711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_tx);
766711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_tx);
767711bcba0SDavid C Somayajulu }
768711bcba0SDavid C Somayajulu
769711bcba0SDavid C Somayajulu for (i = 0x1c00; i <= 0x1c1f; i++, dptr ++, indptr ++) {
770711bcba0SDavid C Somayajulu qls_get_both_serdes(ha, i, dptr, indptr,
771711bcba0SDavid C Somayajulu xfi_d_valid, xfi_ind_valid);
772711bcba0SDavid C Somayajulu }
773711bcba0SDavid C Somayajulu
774711bcba0SDavid C Somayajulu if (ha->pci_func & 1) {
775711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_rx);
776711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_rx);
777711bcba0SDavid C Somayajulu } else {
778711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_rx);
779711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_rx);
780711bcba0SDavid C Somayajulu }
781711bcba0SDavid C Somayajulu
782711bcba0SDavid C Somayajulu for (i = 0x1c40; i <= 0x1c5f; i++, dptr ++, indptr ++) {
783711bcba0SDavid C Somayajulu qls_get_both_serdes(ha, i, dptr, indptr,
784711bcba0SDavid C Somayajulu xfi_d_valid, xfi_ind_valid);
785711bcba0SDavid C Somayajulu }
786711bcba0SDavid C Somayajulu
787711bcba0SDavid C Somayajulu if (ha->pci_func & 1) {
788711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pll);
789711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pll);
790711bcba0SDavid C Somayajulu } else {
791711bcba0SDavid C Somayajulu dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pll);
792711bcba0SDavid C Somayajulu indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pll);
793711bcba0SDavid C Somayajulu }
794711bcba0SDavid C Somayajulu
795711bcba0SDavid C Somayajulu for (i = 0x1e00; i <= 0x1e1f; i++, dptr ++, indptr ++) {
796711bcba0SDavid C Somayajulu qls_get_both_serdes(ha, i, dptr, indptr,
797711bcba0SDavid C Somayajulu xfi_d_valid, xfi_ind_valid);
798711bcba0SDavid C Somayajulu }
799711bcba0SDavid C Somayajulu
800711bcba0SDavid C Somayajulu return(0);
801711bcba0SDavid C Somayajulu }
802711bcba0SDavid C Somayajulu
803711bcba0SDavid C Somayajulu static int
qls_unpause_mpi_risc(qla_host_t * ha)804711bcba0SDavid C Somayajulu qls_unpause_mpi_risc(qla_host_t *ha)
805711bcba0SDavid C Somayajulu {
806711bcba0SDavid C Somayajulu uint32_t data;
807711bcba0SDavid C Somayajulu
808711bcba0SDavid C Somayajulu data = READ_REG32(ha, Q81_CTL_HOST_CMD_STATUS);
809711bcba0SDavid C Somayajulu
810711bcba0SDavid C Somayajulu if (!(data & Q81_CTL_HCS_RISC_PAUSED))
811711bcba0SDavid C Somayajulu return -1;
812711bcba0SDavid C Somayajulu
813711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_HOST_CMD_STATUS, \
814711bcba0SDavid C Somayajulu Q81_CTL_HCS_CMD_CLR_RISC_PAUSE);
815711bcba0SDavid C Somayajulu
816711bcba0SDavid C Somayajulu return 0;
817711bcba0SDavid C Somayajulu }
818711bcba0SDavid C Somayajulu
819711bcba0SDavid C Somayajulu static int
qls_pause_mpi_risc(qla_host_t * ha)820711bcba0SDavid C Somayajulu qls_pause_mpi_risc(qla_host_t *ha)
821711bcba0SDavid C Somayajulu {
822711bcba0SDavid C Somayajulu uint32_t data;
823711bcba0SDavid C Somayajulu int count = 10;
824711bcba0SDavid C Somayajulu
825711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_HOST_CMD_STATUS, \
826711bcba0SDavid C Somayajulu Q81_CTL_HCS_CMD_SET_RISC_PAUSE);
827711bcba0SDavid C Somayajulu
828711bcba0SDavid C Somayajulu do {
829711bcba0SDavid C Somayajulu data = READ_REG32(ha, Q81_CTL_HOST_CMD_STATUS);
830711bcba0SDavid C Somayajulu
831711bcba0SDavid C Somayajulu if (data & Q81_CTL_HCS_RISC_PAUSED)
832711bcba0SDavid C Somayajulu break;
833711bcba0SDavid C Somayajulu
834711bcba0SDavid C Somayajulu qls_mdelay(__func__, 10);
835711bcba0SDavid C Somayajulu
836711bcba0SDavid C Somayajulu count--;
837711bcba0SDavid C Somayajulu
838711bcba0SDavid C Somayajulu } while (count);
839711bcba0SDavid C Somayajulu
840711bcba0SDavid C Somayajulu return ((count == 0) ? -1 : 0);
841711bcba0SDavid C Somayajulu }
842711bcba0SDavid C Somayajulu
843711bcba0SDavid C Somayajulu static void
qls_get_intr_states(qla_host_t * ha,uint32_t * buf)844711bcba0SDavid C Somayajulu qls_get_intr_states(qla_host_t *ha, uint32_t *buf)
845711bcba0SDavid C Somayajulu {
846711bcba0SDavid C Somayajulu int i;
847711bcba0SDavid C Somayajulu
848711bcba0SDavid C Somayajulu for (i = 0; i < MAX_RX_RINGS; i++, buf++) {
849711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_INTR_ENABLE, (0x037f0300 + i));
850711bcba0SDavid C Somayajulu
851711bcba0SDavid C Somayajulu *buf = READ_REG32(ha, Q81_CTL_INTR_ENABLE);
852711bcba0SDavid C Somayajulu }
853711bcba0SDavid C Somayajulu }
854711bcba0SDavid C Somayajulu
855711bcba0SDavid C Somayajulu static int
qls_rd_xgmac_reg(qla_host_t * ha,uint32_t reg,uint32_t * data)856711bcba0SDavid C Somayajulu qls_rd_xgmac_reg(qla_host_t *ha, uint32_t reg, uint32_t*data)
857711bcba0SDavid C Somayajulu {
858711bcba0SDavid C Somayajulu int ret = 0;
859711bcba0SDavid C Somayajulu
860711bcba0SDavid C Somayajulu ret = qls_wait_reg_rdy(ha, Q81_CTL_XGMAC_ADDR, Q81_XGMAC_ADDR_RDY,
861711bcba0SDavid C Somayajulu Q81_XGMAC_ADDR_XME);
862711bcba0SDavid C Somayajulu if (ret)
863711bcba0SDavid C Somayajulu goto exit_qls_rd_xgmac_reg;
864711bcba0SDavid C Somayajulu
865711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_XGMAC_ADDR, (reg | Q81_XGMAC_ADDR_R));
866711bcba0SDavid C Somayajulu
867711bcba0SDavid C Somayajulu ret = qls_wait_reg_rdy(ha, Q81_CTL_XGMAC_ADDR, Q81_XGMAC_ADDR_RDY,
868711bcba0SDavid C Somayajulu Q81_XGMAC_ADDR_XME);
869711bcba0SDavid C Somayajulu if (ret)
870711bcba0SDavid C Somayajulu goto exit_qls_rd_xgmac_reg;
871711bcba0SDavid C Somayajulu
872711bcba0SDavid C Somayajulu *data = READ_REG32(ha, Q81_CTL_XGMAC_DATA);
873711bcba0SDavid C Somayajulu
874711bcba0SDavid C Somayajulu exit_qls_rd_xgmac_reg:
875711bcba0SDavid C Somayajulu return ret;
876711bcba0SDavid C Somayajulu }
877711bcba0SDavid C Somayajulu
878711bcba0SDavid C Somayajulu static int
qls_rd_xgmac_regs(qla_host_t * ha,uint32_t * buf,uint32_t o_func)879711bcba0SDavid C Somayajulu qls_rd_xgmac_regs(qla_host_t *ha, uint32_t *buf, uint32_t o_func)
880711bcba0SDavid C Somayajulu {
881711bcba0SDavid C Somayajulu int ret = 0;
882711bcba0SDavid C Somayajulu int i;
883711bcba0SDavid C Somayajulu
884711bcba0SDavid C Somayajulu for (i = 0; i < Q81_XGMAC_REGISTER_END; i += 4, buf ++) {
885711bcba0SDavid C Somayajulu switch (i) {
886711bcba0SDavid C Somayajulu case Q81_PAUSE_SRC_LO :
887711bcba0SDavid C Somayajulu case Q81_PAUSE_SRC_HI :
888711bcba0SDavid C Somayajulu case Q81_GLOBAL_CFG :
889711bcba0SDavid C Somayajulu case Q81_TX_CFG :
890711bcba0SDavid C Somayajulu case Q81_RX_CFG :
891711bcba0SDavid C Somayajulu case Q81_FLOW_CTL :
892711bcba0SDavid C Somayajulu case Q81_PAUSE_OPCODE :
893711bcba0SDavid C Somayajulu case Q81_PAUSE_TIMER :
894711bcba0SDavid C Somayajulu case Q81_PAUSE_FRM_DEST_LO :
895711bcba0SDavid C Somayajulu case Q81_PAUSE_FRM_DEST_HI :
896711bcba0SDavid C Somayajulu case Q81_MAC_TX_PARAMS :
897711bcba0SDavid C Somayajulu case Q81_MAC_RX_PARAMS :
898711bcba0SDavid C Somayajulu case Q81_MAC_SYS_INT :
899711bcba0SDavid C Somayajulu case Q81_MAC_SYS_INT_MASK :
900711bcba0SDavid C Somayajulu case Q81_MAC_MGMT_INT :
901711bcba0SDavid C Somayajulu case Q81_MAC_MGMT_IN_MASK :
902711bcba0SDavid C Somayajulu case Q81_EXT_ARB_MODE :
903711bcba0SDavid C Somayajulu case Q81_TX_PKTS :
904711bcba0SDavid C Somayajulu case Q81_TX_PKTS_LO :
905711bcba0SDavid C Somayajulu case Q81_TX_BYTES :
906711bcba0SDavid C Somayajulu case Q81_TX_BYTES_LO :
907711bcba0SDavid C Somayajulu case Q81_TX_MCAST_PKTS :
908711bcba0SDavid C Somayajulu case Q81_TX_MCAST_PKTS_LO :
909711bcba0SDavid C Somayajulu case Q81_TX_BCAST_PKTS :
910711bcba0SDavid C Somayajulu case Q81_TX_BCAST_PKTS_LO :
911711bcba0SDavid C Somayajulu case Q81_TX_UCAST_PKTS :
912711bcba0SDavid C Somayajulu case Q81_TX_UCAST_PKTS_LO :
913711bcba0SDavid C Somayajulu case Q81_TX_CTL_PKTS :
914711bcba0SDavid C Somayajulu case Q81_TX_CTL_PKTS_LO :
915711bcba0SDavid C Somayajulu case Q81_TX_PAUSE_PKTS :
916711bcba0SDavid C Somayajulu case Q81_TX_PAUSE_PKTS_LO :
917711bcba0SDavid C Somayajulu case Q81_TX_64_PKT :
918711bcba0SDavid C Somayajulu case Q81_TX_64_PKT_LO :
919711bcba0SDavid C Somayajulu case Q81_TX_65_TO_127_PKT :
920711bcba0SDavid C Somayajulu case Q81_TX_65_TO_127_PKT_LO :
921711bcba0SDavid C Somayajulu case Q81_TX_128_TO_255_PKT :
922711bcba0SDavid C Somayajulu case Q81_TX_128_TO_255_PKT_LO :
923711bcba0SDavid C Somayajulu case Q81_TX_256_511_PKT :
924711bcba0SDavid C Somayajulu case Q81_TX_256_511_PKT_LO :
925711bcba0SDavid C Somayajulu case Q81_TX_512_TO_1023_PKT :
926711bcba0SDavid C Somayajulu case Q81_TX_512_TO_1023_PKT_LO :
927711bcba0SDavid C Somayajulu case Q81_TX_1024_TO_1518_PKT :
928711bcba0SDavid C Somayajulu case Q81_TX_1024_TO_1518_PKT_LO :
929711bcba0SDavid C Somayajulu case Q81_TX_1519_TO_MAX_PKT :
930711bcba0SDavid C Somayajulu case Q81_TX_1519_TO_MAX_PKT_LO :
931711bcba0SDavid C Somayajulu case Q81_TX_UNDERSIZE_PKT :
932711bcba0SDavid C Somayajulu case Q81_TX_UNDERSIZE_PKT_LO :
933711bcba0SDavid C Somayajulu case Q81_TX_OVERSIZE_PKT :
934711bcba0SDavid C Somayajulu case Q81_TX_OVERSIZE_PKT_LO :
935711bcba0SDavid C Somayajulu case Q81_RX_HALF_FULL_DET :
936711bcba0SDavid C Somayajulu case Q81_TX_HALF_FULL_DET_LO :
937711bcba0SDavid C Somayajulu case Q81_RX_OVERFLOW_DET :
938711bcba0SDavid C Somayajulu case Q81_TX_OVERFLOW_DET_LO :
939711bcba0SDavid C Somayajulu case Q81_RX_HALF_FULL_MASK :
940711bcba0SDavid C Somayajulu case Q81_TX_HALF_FULL_MASK_LO :
941711bcba0SDavid C Somayajulu case Q81_RX_OVERFLOW_MASK :
942711bcba0SDavid C Somayajulu case Q81_TX_OVERFLOW_MASK_LO :
943711bcba0SDavid C Somayajulu case Q81_STAT_CNT_CTL :
944711bcba0SDavid C Somayajulu case Q81_AUX_RX_HALF_FULL_DET :
945711bcba0SDavid C Somayajulu case Q81_AUX_TX_HALF_FULL_DET :
946711bcba0SDavid C Somayajulu case Q81_AUX_RX_OVERFLOW_DET :
947711bcba0SDavid C Somayajulu case Q81_AUX_TX_OVERFLOW_DET :
948711bcba0SDavid C Somayajulu case Q81_AUX_RX_HALF_FULL_MASK :
949711bcba0SDavid C Somayajulu case Q81_AUX_TX_HALF_FULL_MASK :
950711bcba0SDavid C Somayajulu case Q81_AUX_RX_OVERFLOW_MASK :
951711bcba0SDavid C Somayajulu case Q81_AUX_TX_OVERFLOW_MASK :
952711bcba0SDavid C Somayajulu case Q81_RX_BYTES :
953711bcba0SDavid C Somayajulu case Q81_RX_BYTES_LO :
954711bcba0SDavid C Somayajulu case Q81_RX_BYTES_OK :
955711bcba0SDavid C Somayajulu case Q81_RX_BYTES_OK_LO :
956711bcba0SDavid C Somayajulu case Q81_RX_PKTS :
957711bcba0SDavid C Somayajulu case Q81_RX_PKTS_LO :
958711bcba0SDavid C Somayajulu case Q81_RX_PKTS_OK :
959711bcba0SDavid C Somayajulu case Q81_RX_PKTS_OK_LO :
960711bcba0SDavid C Somayajulu case Q81_RX_BCAST_PKTS :
961711bcba0SDavid C Somayajulu case Q81_RX_BCAST_PKTS_LO :
962711bcba0SDavid C Somayajulu case Q81_RX_MCAST_PKTS :
963711bcba0SDavid C Somayajulu case Q81_RX_MCAST_PKTS_LO :
964711bcba0SDavid C Somayajulu case Q81_RX_UCAST_PKTS :
965711bcba0SDavid C Somayajulu case Q81_RX_UCAST_PKTS_LO :
966711bcba0SDavid C Somayajulu case Q81_RX_UNDERSIZE_PKTS :
967711bcba0SDavid C Somayajulu case Q81_RX_UNDERSIZE_PKTS_LO :
968711bcba0SDavid C Somayajulu case Q81_RX_OVERSIZE_PKTS :
969711bcba0SDavid C Somayajulu case Q81_RX_OVERSIZE_PKTS_LO :
970711bcba0SDavid C Somayajulu case Q81_RX_JABBER_PKTS :
971711bcba0SDavid C Somayajulu case Q81_RX_JABBER_PKTS_LO :
972711bcba0SDavid C Somayajulu case Q81_RX_UNDERSIZE_FCERR_PKTS :
973711bcba0SDavid C Somayajulu case Q81_RX_UNDERSIZE_FCERR_PKTS_LO :
974711bcba0SDavid C Somayajulu case Q81_RX_DROP_EVENTS :
975711bcba0SDavid C Somayajulu case Q81_RX_DROP_EVENTS_LO :
976711bcba0SDavid C Somayajulu case Q81_RX_FCERR_PKTS :
977711bcba0SDavid C Somayajulu case Q81_RX_FCERR_PKTS_LO :
978711bcba0SDavid C Somayajulu case Q81_RX_ALIGN_ERR :
979711bcba0SDavid C Somayajulu case Q81_RX_ALIGN_ERR_LO :
980711bcba0SDavid C Somayajulu case Q81_RX_SYMBOL_ERR :
981711bcba0SDavid C Somayajulu case Q81_RX_SYMBOL_ERR_LO :
982711bcba0SDavid C Somayajulu case Q81_RX_MAC_ERR :
983711bcba0SDavid C Somayajulu case Q81_RX_MAC_ERR_LO :
984711bcba0SDavid C Somayajulu case Q81_RX_CTL_PKTS :
985711bcba0SDavid C Somayajulu case Q81_RX_CTL_PKTS_LO :
986711bcba0SDavid C Somayajulu case Q81_RX_PAUSE_PKTS :
987711bcba0SDavid C Somayajulu case Q81_RX_PAUSE_PKTS_LO :
988711bcba0SDavid C Somayajulu case Q81_RX_64_PKTS :
989711bcba0SDavid C Somayajulu case Q81_RX_64_PKTS_LO :
990711bcba0SDavid C Somayajulu case Q81_RX_65_TO_127_PKTS :
991711bcba0SDavid C Somayajulu case Q81_RX_65_TO_127_PKTS_LO :
992711bcba0SDavid C Somayajulu case Q81_RX_128_255_PKTS :
993711bcba0SDavid C Somayajulu case Q81_RX_128_255_PKTS_LO :
994711bcba0SDavid C Somayajulu case Q81_RX_256_511_PKTS :
995711bcba0SDavid C Somayajulu case Q81_RX_256_511_PKTS_LO :
996711bcba0SDavid C Somayajulu case Q81_RX_512_TO_1023_PKTS :
997711bcba0SDavid C Somayajulu case Q81_RX_512_TO_1023_PKTS_LO :
998711bcba0SDavid C Somayajulu case Q81_RX_1024_TO_1518_PKTS :
999711bcba0SDavid C Somayajulu case Q81_RX_1024_TO_1518_PKTS_LO :
1000711bcba0SDavid C Somayajulu case Q81_RX_1519_TO_MAX_PKTS :
1001711bcba0SDavid C Somayajulu case Q81_RX_1519_TO_MAX_PKTS_LO :
1002711bcba0SDavid C Somayajulu case Q81_RX_LEN_ERR_PKTS :
1003711bcba0SDavid C Somayajulu case Q81_RX_LEN_ERR_PKTS_LO :
1004711bcba0SDavid C Somayajulu case Q81_MDIO_TX_DATA :
1005711bcba0SDavid C Somayajulu case Q81_MDIO_RX_DATA :
1006711bcba0SDavid C Somayajulu case Q81_MDIO_CMD :
1007711bcba0SDavid C Somayajulu case Q81_MDIO_PHY_ADDR :
1008711bcba0SDavid C Somayajulu case Q81_MDIO_PORT :
1009711bcba0SDavid C Somayajulu case Q81_MDIO_STATUS :
1010711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES0 :
1011711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES0_LO :
1012711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES1 :
1013711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES1_LO :
1014711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES2 :
1015711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES2_LO :
1016711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES3 :
1017711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES3_LO :
1018711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES4 :
1019711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES4_LO :
1020711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES5 :
1021711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES5_LO :
1022711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES6 :
1023711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES6_LO :
1024711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES7 :
1025711bcba0SDavid C Somayajulu case Q81_TX_CBFC_PAUSE_FRAMES7_LO :
1026711bcba0SDavid C Somayajulu case Q81_TX_FCOE_PKTS :
1027711bcba0SDavid C Somayajulu case Q81_TX_FCOE_PKTS_LO :
1028711bcba0SDavid C Somayajulu case Q81_TX_MGMT_PKTS :
1029711bcba0SDavid C Somayajulu case Q81_TX_MGMT_PKTS_LO :
1030711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES0 :
1031711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES0_LO :
1032711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES1 :
1033711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES1_LO :
1034711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES2 :
1035711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES2_LO :
1036711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES3 :
1037711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES3_LO :
1038711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES4 :
1039711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES4_LO :
1040711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES5 :
1041711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES5_LO :
1042711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES6 :
1043711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES6_LO :
1044711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES7 :
1045711bcba0SDavid C Somayajulu case Q81_RX_CBFC_PAUSE_FRAMES7_LO :
1046711bcba0SDavid C Somayajulu case Q81_RX_FCOE_PKTS :
1047711bcba0SDavid C Somayajulu case Q81_RX_FCOE_PKTS_LO :
1048711bcba0SDavid C Somayajulu case Q81_RX_MGMT_PKTS :
1049711bcba0SDavid C Somayajulu case Q81_RX_MGMT_PKTS_LO :
1050711bcba0SDavid C Somayajulu case Q81_RX_NIC_FIFO_DROP :
1051711bcba0SDavid C Somayajulu case Q81_RX_NIC_FIFO_DROP_LO :
1052711bcba0SDavid C Somayajulu case Q81_RX_FCOE_FIFO_DROP :
1053711bcba0SDavid C Somayajulu case Q81_RX_FCOE_FIFO_DROP_LO :
1054711bcba0SDavid C Somayajulu case Q81_RX_MGMT_FIFO_DROP :
1055711bcba0SDavid C Somayajulu case Q81_RX_MGMT_FIFO_DROP_LO :
1056711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY0 :
1057711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY0_LO :
1058711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY1 :
1059711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY1_LO :
1060711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY2 :
1061711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY2_LO :
1062711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY3 :
1063711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY3_LO :
1064711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY4 :
1065711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY4_LO :
1066711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY5 :
1067711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY5_LO :
1068711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY6 :
1069711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY6_LO :
1070711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY7 :
1071711bcba0SDavid C Somayajulu case Q81_RX_PKTS_PRIORITY7_LO :
1072711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY0 :
1073711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY0_LO :
1074711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY1 :
1075711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY1_LO :
1076711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY2 :
1077711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY2_LO :
1078711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY3 :
1079711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY3_LO :
1080711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY4 :
1081711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY4_LO :
1082711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY5 :
1083711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY5_LO :
1084711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY6 :
1085711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY6_LO :
1086711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY7 :
1087711bcba0SDavid C Somayajulu case Q81_RX_OCTETS_PRIORITY7_LO :
1088711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY0 :
1089711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY0_LO :
1090711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY1 :
1091711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY1_LO :
1092711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY2 :
1093711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY2_LO :
1094711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY3 :
1095711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY3_LO :
1096711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY4 :
1097711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY4_LO :
1098711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY5 :
1099711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY5_LO :
1100711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY6 :
1101711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY6_LO :
1102711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY7 :
1103711bcba0SDavid C Somayajulu case Q81_TX_PKTS_PRIORITY7_LO :
1104711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY0 :
1105711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY0_LO :
1106711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY1 :
1107711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY1_LO :
1108711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY2 :
1109711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY2_LO :
1110711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY3 :
1111711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY3_LO :
1112711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY4 :
1113711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY4_LO :
1114711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY5 :
1115711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY5_LO :
1116711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY6 :
1117711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY6_LO :
1118711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY7 :
1119711bcba0SDavid C Somayajulu case Q81_TX_OCTETS_PRIORITY7_LO :
1120711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY0 :
1121711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY0_LO :
1122711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY1 :
1123711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY1_LO :
1124711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY2 :
1125711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY2_LO :
1126711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY3 :
1127711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY3_LO :
1128711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY4 :
1129711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY4_LO :
1130711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY5 :
1131711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY5_LO :
1132711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY6 :
1133711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY6_LO :
1134711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY7 :
1135711bcba0SDavid C Somayajulu case Q81_RX_DISCARD_PRIORITY7_LO :
1136711bcba0SDavid C Somayajulu
1137711bcba0SDavid C Somayajulu if (o_func)
1138711bcba0SDavid C Somayajulu ret = qls_rd_ofunc_xgmac_reg(ha,
1139711bcba0SDavid C Somayajulu i, buf);
1140711bcba0SDavid C Somayajulu else
1141711bcba0SDavid C Somayajulu ret = qls_rd_xgmac_reg(ha, i, buf);
1142711bcba0SDavid C Somayajulu
1143711bcba0SDavid C Somayajulu if (ret)
1144711bcba0SDavid C Somayajulu *buf = Q81_BAD_DATA;
1145711bcba0SDavid C Somayajulu
1146711bcba0SDavid C Somayajulu break;
1147711bcba0SDavid C Somayajulu
1148711bcba0SDavid C Somayajulu default:
1149711bcba0SDavid C Somayajulu break;
1150711bcba0SDavid C Somayajulu }
1151711bcba0SDavid C Somayajulu }
1152711bcba0SDavid C Somayajulu return 0;
1153711bcba0SDavid C Somayajulu }
1154711bcba0SDavid C Somayajulu
1155711bcba0SDavid C Somayajulu static int
qls_get_mpi_regs(qla_host_t * ha,uint32_t * buf,uint32_t offset,uint32_t count)1156711bcba0SDavid C Somayajulu qls_get_mpi_regs(qla_host_t *ha, uint32_t *buf, uint32_t offset, uint32_t count)
1157711bcba0SDavid C Somayajulu {
1158711bcba0SDavid C Somayajulu int i, ret = 0;
1159711bcba0SDavid C Somayajulu
1160711bcba0SDavid C Somayajulu for (i = 0; i < count; i++, buf++) {
1161711bcba0SDavid C Somayajulu ret = qls_rd_mpi_reg(ha, (offset + i), buf);
1162711bcba0SDavid C Somayajulu
1163711bcba0SDavid C Somayajulu if (ret)
1164711bcba0SDavid C Somayajulu return ret;
1165711bcba0SDavid C Somayajulu }
1166711bcba0SDavid C Somayajulu
1167711bcba0SDavid C Somayajulu return (ret);
1168711bcba0SDavid C Somayajulu }
1169711bcba0SDavid C Somayajulu
1170711bcba0SDavid C Somayajulu static int
qls_get_mpi_shadow_regs(qla_host_t * ha,uint32_t * buf)1171711bcba0SDavid C Somayajulu qls_get_mpi_shadow_regs(qla_host_t *ha, uint32_t *buf)
1172711bcba0SDavid C Somayajulu {
1173711bcba0SDavid C Somayajulu uint32_t i;
1174711bcba0SDavid C Somayajulu int ret;
1175711bcba0SDavid C Somayajulu
1176711bcba0SDavid C Somayajulu #define Q81_RISC_124 0x0000007c
1177711bcba0SDavid C Somayajulu #define Q81_RISC_127 0x0000007f
1178711bcba0SDavid C Somayajulu #define Q81_SHADOW_OFFSET 0xb0000000
1179711bcba0SDavid C Somayajulu
1180711bcba0SDavid C Somayajulu for (i = 0; i < Q81_MPI_CORE_SH_REGS_CNT; i++, buf++) {
1181711bcba0SDavid C Somayajulu ret = qls_wr_mpi_reg(ha,
1182711bcba0SDavid C Somayajulu (Q81_CTL_PROC_ADDR_RISC_INT_REG | Q81_RISC_124),
1183711bcba0SDavid C Somayajulu (Q81_SHADOW_OFFSET | i << 20));
1184711bcba0SDavid C Somayajulu if (ret)
1185711bcba0SDavid C Somayajulu goto exit_qls_get_mpi_shadow_regs;
1186711bcba0SDavid C Somayajulu
1187711bcba0SDavid C Somayajulu ret = qls_mpi_risc_rd_reg(ha,
1188711bcba0SDavid C Somayajulu (Q81_CTL_PROC_ADDR_RISC_INT_REG | Q81_RISC_127),
1189711bcba0SDavid C Somayajulu buf);
1190711bcba0SDavid C Somayajulu if (ret)
1191711bcba0SDavid C Somayajulu goto exit_qls_get_mpi_shadow_regs;
1192711bcba0SDavid C Somayajulu }
1193711bcba0SDavid C Somayajulu
1194711bcba0SDavid C Somayajulu exit_qls_get_mpi_shadow_regs:
1195711bcba0SDavid C Somayajulu return ret;
1196711bcba0SDavid C Somayajulu }
1197711bcba0SDavid C Somayajulu
1198711bcba0SDavid C Somayajulu #define SYS_CLOCK (0x00)
1199711bcba0SDavid C Somayajulu #define PCI_CLOCK (0x80)
1200711bcba0SDavid C Somayajulu #define FC_CLOCK (0x140)
1201711bcba0SDavid C Somayajulu #define XGM_CLOCK (0x180)
1202711bcba0SDavid C Somayajulu
1203711bcba0SDavid C Somayajulu #define Q81_ADDRESS_REGISTER_ENABLE 0x00010000
1204711bcba0SDavid C Somayajulu #define Q81_UP 0x00008000
1205711bcba0SDavid C Somayajulu #define Q81_MAX_MUX 0x40
1206711bcba0SDavid C Somayajulu #define Q81_MAX_MODULES 0x1F
1207711bcba0SDavid C Somayajulu
1208711bcba0SDavid C Somayajulu static uint32_t *
qls_get_probe(qla_host_t * ha,uint32_t clock,uint8_t * valid,uint32_t * buf)1209711bcba0SDavid C Somayajulu qls_get_probe(qla_host_t *ha, uint32_t clock, uint8_t *valid, uint32_t *buf)
1210711bcba0SDavid C Somayajulu {
1211711bcba0SDavid C Somayajulu uint32_t module, mux_sel, probe, lo_val, hi_val;
1212711bcba0SDavid C Somayajulu
1213711bcba0SDavid C Somayajulu for (module = 0; module < Q81_MAX_MODULES; module ++) {
1214711bcba0SDavid C Somayajulu if (valid[module]) {
1215711bcba0SDavid C Somayajulu for (mux_sel = 0; mux_sel < Q81_MAX_MUX; mux_sel++) {
1216711bcba0SDavid C Somayajulu probe = clock | Q81_ADDRESS_REGISTER_ENABLE |
1217711bcba0SDavid C Somayajulu mux_sel | (module << 9);
1218711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_XG_PROBE_MUX_ADDR,\
1219711bcba0SDavid C Somayajulu probe);
1220711bcba0SDavid C Somayajulu
1221711bcba0SDavid C Somayajulu lo_val = READ_REG32(ha,\
1222711bcba0SDavid C Somayajulu Q81_CTL_XG_PROBE_MUX_DATA);
1223711bcba0SDavid C Somayajulu
1224711bcba0SDavid C Somayajulu if (mux_sel == 0) {
1225711bcba0SDavid C Somayajulu *buf = probe;
1226711bcba0SDavid C Somayajulu buf ++;
1227711bcba0SDavid C Somayajulu }
1228711bcba0SDavid C Somayajulu
1229711bcba0SDavid C Somayajulu probe |= Q81_UP;
1230711bcba0SDavid C Somayajulu
1231711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_XG_PROBE_MUX_ADDR,\
1232711bcba0SDavid C Somayajulu probe);
1233711bcba0SDavid C Somayajulu hi_val = READ_REG32(ha,\
1234711bcba0SDavid C Somayajulu Q81_CTL_XG_PROBE_MUX_DATA);
1235711bcba0SDavid C Somayajulu
1236711bcba0SDavid C Somayajulu *buf = lo_val;
1237711bcba0SDavid C Somayajulu buf++;
1238711bcba0SDavid C Somayajulu *buf = hi_val;
1239711bcba0SDavid C Somayajulu buf++;
1240711bcba0SDavid C Somayajulu }
1241711bcba0SDavid C Somayajulu }
1242711bcba0SDavid C Somayajulu }
1243711bcba0SDavid C Somayajulu
1244711bcba0SDavid C Somayajulu return(buf);
1245711bcba0SDavid C Somayajulu }
1246711bcba0SDavid C Somayajulu
1247711bcba0SDavid C Somayajulu static int
qls_get_probe_dump(qla_host_t * ha,uint32_t * buf)1248711bcba0SDavid C Somayajulu qls_get_probe_dump(qla_host_t *ha, uint32_t *buf)
1249711bcba0SDavid C Somayajulu {
1250711bcba0SDavid C Somayajulu
1251711bcba0SDavid C Somayajulu uint8_t sys_clock_valid_modules[0x20] = {
1252711bcba0SDavid C Somayajulu 1, // 0x00
1253711bcba0SDavid C Somayajulu 1, // 0x01
1254711bcba0SDavid C Somayajulu 1, // 0x02
1255711bcba0SDavid C Somayajulu 0, // 0x03
1256711bcba0SDavid C Somayajulu 1, // 0x04
1257711bcba0SDavid C Somayajulu 1, // 0x05
1258711bcba0SDavid C Somayajulu 1, // 0x06
1259711bcba0SDavid C Somayajulu 1, // 0x07
1260711bcba0SDavid C Somayajulu 1, // 0x08
1261711bcba0SDavid C Somayajulu 1, // 0x09
1262711bcba0SDavid C Somayajulu 1, // 0x0A
1263711bcba0SDavid C Somayajulu 1, // 0x0B
1264711bcba0SDavid C Somayajulu 1, // 0x0C
1265711bcba0SDavid C Somayajulu 1, // 0x0D
1266711bcba0SDavid C Somayajulu 1, // 0x0E
1267711bcba0SDavid C Somayajulu 0, // 0x0F
1268711bcba0SDavid C Somayajulu 1, // 0x10
1269711bcba0SDavid C Somayajulu 1, // 0x11
1270711bcba0SDavid C Somayajulu 1, // 0x12
1271711bcba0SDavid C Somayajulu 1, // 0x13
1272711bcba0SDavid C Somayajulu 0, // 0x14
1273711bcba0SDavid C Somayajulu 0, // 0x15
1274711bcba0SDavid C Somayajulu 0, // 0x16
1275711bcba0SDavid C Somayajulu 0, // 0x17
1276711bcba0SDavid C Somayajulu 0, // 0x18
1277711bcba0SDavid C Somayajulu 0, // 0x19
1278711bcba0SDavid C Somayajulu 0, // 0x1A
1279711bcba0SDavid C Somayajulu 0, // 0x1B
1280711bcba0SDavid C Somayajulu 0, // 0x1C
1281711bcba0SDavid C Somayajulu 0, // 0x1D
1282711bcba0SDavid C Somayajulu 0, // 0x1E
1283711bcba0SDavid C Somayajulu 0 // 0x1F
1284711bcba0SDavid C Somayajulu };
1285711bcba0SDavid C Somayajulu
1286711bcba0SDavid C Somayajulu uint8_t pci_clock_valid_modules[0x20] = {
1287711bcba0SDavid C Somayajulu 1, // 0x00
1288711bcba0SDavid C Somayajulu 0, // 0x01
1289711bcba0SDavid C Somayajulu 0, // 0x02
1290711bcba0SDavid C Somayajulu 0, // 0x03
1291711bcba0SDavid C Somayajulu 0, // 0x04
1292711bcba0SDavid C Somayajulu 0, // 0x05
1293711bcba0SDavid C Somayajulu 1, // 0x06
1294711bcba0SDavid C Somayajulu 1, // 0x07
1295711bcba0SDavid C Somayajulu 0, // 0x08
1296711bcba0SDavid C Somayajulu 0, // 0x09
1297711bcba0SDavid C Somayajulu 0, // 0x0A
1298711bcba0SDavid C Somayajulu 0, // 0x0B
1299711bcba0SDavid C Somayajulu 0, // 0x0C
1300711bcba0SDavid C Somayajulu 0, // 0x0D
1301711bcba0SDavid C Somayajulu 1, // 0x0E
1302711bcba0SDavid C Somayajulu 0, // 0x0F
1303711bcba0SDavid C Somayajulu 0, // 0x10
1304711bcba0SDavid C Somayajulu 0, // 0x11
1305711bcba0SDavid C Somayajulu 0, // 0x12
1306711bcba0SDavid C Somayajulu 0, // 0x13
1307711bcba0SDavid C Somayajulu 0, // 0x14
1308711bcba0SDavid C Somayajulu 0, // 0x15
1309711bcba0SDavid C Somayajulu 0, // 0x16
1310711bcba0SDavid C Somayajulu 0, // 0x17
1311711bcba0SDavid C Somayajulu 0, // 0x18
1312711bcba0SDavid C Somayajulu 0, // 0x19
1313711bcba0SDavid C Somayajulu 0, // 0x1A
1314711bcba0SDavid C Somayajulu 0, // 0x1B
1315711bcba0SDavid C Somayajulu 0, // 0x1C
1316711bcba0SDavid C Somayajulu 0, // 0x1D
1317711bcba0SDavid C Somayajulu 0, // 0x1E
1318711bcba0SDavid C Somayajulu 0 // 0x1F
1319711bcba0SDavid C Somayajulu };
1320711bcba0SDavid C Somayajulu
1321711bcba0SDavid C Somayajulu uint8_t xgm_clock_valid_modules[0x20] = {
1322711bcba0SDavid C Somayajulu 1, // 0x00
1323711bcba0SDavid C Somayajulu 0, // 0x01
1324711bcba0SDavid C Somayajulu 0, // 0x02
1325711bcba0SDavid C Somayajulu 1, // 0x03
1326711bcba0SDavid C Somayajulu 0, // 0x04
1327711bcba0SDavid C Somayajulu 0, // 0x05
1328711bcba0SDavid C Somayajulu 0, // 0x06
1329711bcba0SDavid C Somayajulu 0, // 0x07
1330711bcba0SDavid C Somayajulu 1, // 0x08
1331711bcba0SDavid C Somayajulu 1, // 0x09
1332711bcba0SDavid C Somayajulu 0, // 0x0A
1333711bcba0SDavid C Somayajulu 0, // 0x0B
1334711bcba0SDavid C Somayajulu 1, // 0x0C
1335711bcba0SDavid C Somayajulu 1, // 0x0D
1336711bcba0SDavid C Somayajulu 1, // 0x0E
1337711bcba0SDavid C Somayajulu 0, // 0x0F
1338711bcba0SDavid C Somayajulu 1, // 0x10
1339711bcba0SDavid C Somayajulu 1, // 0x11
1340711bcba0SDavid C Somayajulu 0, // 0x12
1341711bcba0SDavid C Somayajulu 0, // 0x13
1342711bcba0SDavid C Somayajulu 0, // 0x14
1343711bcba0SDavid C Somayajulu 0, // 0x15
1344711bcba0SDavid C Somayajulu 0, // 0x16
1345711bcba0SDavid C Somayajulu 0, // 0x17
1346711bcba0SDavid C Somayajulu 0, // 0x18
1347711bcba0SDavid C Somayajulu 0, // 0x19
1348711bcba0SDavid C Somayajulu 0, // 0x1A
1349711bcba0SDavid C Somayajulu 0, // 0x1B
1350711bcba0SDavid C Somayajulu 0, // 0x1C
1351711bcba0SDavid C Somayajulu 0, // 0x1D
1352711bcba0SDavid C Somayajulu 0, // 0x1E
1353711bcba0SDavid C Somayajulu 0 // 0x1F
1354711bcba0SDavid C Somayajulu };
1355711bcba0SDavid C Somayajulu
1356711bcba0SDavid C Somayajulu uint8_t fc_clock_valid_modules[0x20] = {
1357711bcba0SDavid C Somayajulu 1, // 0x00
1358711bcba0SDavid C Somayajulu 0, // 0x01
1359711bcba0SDavid C Somayajulu 0, // 0x02
1360711bcba0SDavid C Somayajulu 0, // 0x03
1361711bcba0SDavid C Somayajulu 0, // 0x04
1362711bcba0SDavid C Somayajulu 0, // 0x05
1363711bcba0SDavid C Somayajulu 0, // 0x06
1364711bcba0SDavid C Somayajulu 0, // 0x07
1365711bcba0SDavid C Somayajulu 0, // 0x08
1366711bcba0SDavid C Somayajulu 0, // 0x09
1367711bcba0SDavid C Somayajulu 0, // 0x0A
1368711bcba0SDavid C Somayajulu 0, // 0x0B
1369711bcba0SDavid C Somayajulu 1, // 0x0C
1370711bcba0SDavid C Somayajulu 1, // 0x0D
1371711bcba0SDavid C Somayajulu 0, // 0x0E
1372711bcba0SDavid C Somayajulu 0, // 0x0F
1373711bcba0SDavid C Somayajulu 0, // 0x10
1374711bcba0SDavid C Somayajulu 0, // 0x11
1375711bcba0SDavid C Somayajulu 0, // 0x12
1376711bcba0SDavid C Somayajulu 0, // 0x13
1377711bcba0SDavid C Somayajulu 0, // 0x14
1378711bcba0SDavid C Somayajulu 0, // 0x15
1379711bcba0SDavid C Somayajulu 0, // 0x16
1380711bcba0SDavid C Somayajulu 0, // 0x17
1381711bcba0SDavid C Somayajulu 0, // 0x18
1382711bcba0SDavid C Somayajulu 0, // 0x19
1383711bcba0SDavid C Somayajulu 0, // 0x1A
1384711bcba0SDavid C Somayajulu 0, // 0x1B
1385711bcba0SDavid C Somayajulu 0, // 0x1C
1386711bcba0SDavid C Somayajulu 0, // 0x1D
1387711bcba0SDavid C Somayajulu 0, // 0x1E
1388711bcba0SDavid C Somayajulu 0 // 0x1F
1389711bcba0SDavid C Somayajulu };
1390711bcba0SDavid C Somayajulu
1391711bcba0SDavid C Somayajulu qls_wr_mpi_reg(ha, 0x100e, 0x18a20000);
1392711bcba0SDavid C Somayajulu
1393711bcba0SDavid C Somayajulu buf = qls_get_probe(ha, SYS_CLOCK, sys_clock_valid_modules, buf);
1394711bcba0SDavid C Somayajulu
1395711bcba0SDavid C Somayajulu buf = qls_get_probe(ha, PCI_CLOCK, pci_clock_valid_modules, buf);
1396711bcba0SDavid C Somayajulu
1397711bcba0SDavid C Somayajulu buf = qls_get_probe(ha, XGM_CLOCK, xgm_clock_valid_modules, buf);
1398711bcba0SDavid C Somayajulu
1399711bcba0SDavid C Somayajulu buf = qls_get_probe(ha, FC_CLOCK, fc_clock_valid_modules, buf);
1400711bcba0SDavid C Somayajulu
1401711bcba0SDavid C Somayajulu return(0);
1402711bcba0SDavid C Somayajulu }
1403711bcba0SDavid C Somayajulu
1404711bcba0SDavid C Somayajulu static void
qls_get_ridx_registers(qla_host_t * ha,uint32_t * buf)1405711bcba0SDavid C Somayajulu qls_get_ridx_registers(qla_host_t *ha, uint32_t *buf)
1406711bcba0SDavid C Somayajulu {
1407711bcba0SDavid C Somayajulu uint32_t type, idx, idx_max;
1408711bcba0SDavid C Somayajulu uint32_t r_idx;
1409711bcba0SDavid C Somayajulu uint32_t r_data;
1410711bcba0SDavid C Somayajulu uint32_t val;
1411711bcba0SDavid C Somayajulu
1412711bcba0SDavid C Somayajulu for (type = 0; type < 4; type ++) {
1413711bcba0SDavid C Somayajulu if (type < 2)
1414711bcba0SDavid C Somayajulu idx_max = 8;
1415711bcba0SDavid C Somayajulu else
1416711bcba0SDavid C Somayajulu idx_max = 16;
1417711bcba0SDavid C Somayajulu
1418711bcba0SDavid C Somayajulu for (idx = 0; idx < idx_max; idx ++) {
1419711bcba0SDavid C Somayajulu val = 0x04000000 | (type << 16) | (idx << 8);
1420711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_ROUTING_INDEX, val);
1421711bcba0SDavid C Somayajulu
1422711bcba0SDavid C Somayajulu r_idx = 0;
1423711bcba0SDavid C Somayajulu while ((r_idx & 0x40000000) == 0)
1424711bcba0SDavid C Somayajulu r_idx = READ_REG32(ha, Q81_CTL_ROUTING_INDEX);
1425711bcba0SDavid C Somayajulu
1426711bcba0SDavid C Somayajulu r_data = READ_REG32(ha, Q81_CTL_ROUTING_DATA);
1427711bcba0SDavid C Somayajulu
1428711bcba0SDavid C Somayajulu *buf = type;
1429711bcba0SDavid C Somayajulu buf ++;
1430711bcba0SDavid C Somayajulu *buf = idx;
1431711bcba0SDavid C Somayajulu buf ++;
1432711bcba0SDavid C Somayajulu *buf = r_idx;
1433711bcba0SDavid C Somayajulu buf ++;
1434711bcba0SDavid C Somayajulu *buf = r_data;
1435711bcba0SDavid C Somayajulu buf ++;
1436711bcba0SDavid C Somayajulu }
1437711bcba0SDavid C Somayajulu }
1438711bcba0SDavid C Somayajulu }
1439711bcba0SDavid C Somayajulu
1440711bcba0SDavid C Somayajulu static void
qls_get_mac_proto_regs(qla_host_t * ha,uint32_t * buf)1441711bcba0SDavid C Somayajulu qls_get_mac_proto_regs(qla_host_t *ha, uint32_t* buf)
1442711bcba0SDavid C Somayajulu {
1443711bcba0SDavid C Somayajulu
1444711bcba0SDavid C Somayajulu #define Q81_RS_AND_ADR 0x06000000
1445711bcba0SDavid C Somayajulu #define Q81_RS_ONLY 0x04000000
1446711bcba0SDavid C Somayajulu #define Q81_NUM_TYPES 10
1447711bcba0SDavid C Somayajulu
1448711bcba0SDavid C Somayajulu uint32_t result_index, result_data;
1449711bcba0SDavid C Somayajulu uint32_t type;
1450711bcba0SDavid C Somayajulu uint32_t index;
1451711bcba0SDavid C Somayajulu uint32_t offset;
1452711bcba0SDavid C Somayajulu uint32_t val;
1453711bcba0SDavid C Somayajulu uint32_t initial_val;
1454711bcba0SDavid C Somayajulu uint32_t max_index;
1455711bcba0SDavid C Somayajulu uint32_t max_offset;
1456711bcba0SDavid C Somayajulu
1457711bcba0SDavid C Somayajulu for (type = 0; type < Q81_NUM_TYPES; type ++) {
1458711bcba0SDavid C Somayajulu switch (type) {
1459711bcba0SDavid C Somayajulu case 0: // CAM
1460711bcba0SDavid C Somayajulu initial_val = Q81_RS_AND_ADR;
1461711bcba0SDavid C Somayajulu max_index = 512;
1462711bcba0SDavid C Somayajulu max_offset = 3;
1463711bcba0SDavid C Somayajulu break;
1464711bcba0SDavid C Somayajulu
1465711bcba0SDavid C Somayajulu case 1: // Multicast MAC Address
1466711bcba0SDavid C Somayajulu initial_val = Q81_RS_ONLY;
1467711bcba0SDavid C Somayajulu max_index = 32;
1468711bcba0SDavid C Somayajulu max_offset = 2;
1469711bcba0SDavid C Somayajulu break;
1470711bcba0SDavid C Somayajulu
1471711bcba0SDavid C Somayajulu case 2: // VLAN filter mask
1472711bcba0SDavid C Somayajulu case 3: // MC filter mask
1473711bcba0SDavid C Somayajulu initial_val = Q81_RS_ONLY;
1474711bcba0SDavid C Somayajulu max_index = 4096;
1475711bcba0SDavid C Somayajulu max_offset = 1;
1476711bcba0SDavid C Somayajulu break;
1477711bcba0SDavid C Somayajulu
1478711bcba0SDavid C Somayajulu case 4: // FC MAC addresses
1479711bcba0SDavid C Somayajulu initial_val = Q81_RS_ONLY;
1480711bcba0SDavid C Somayajulu max_index = 4;
1481711bcba0SDavid C Somayajulu max_offset = 2;
1482711bcba0SDavid C Somayajulu break;
1483711bcba0SDavid C Somayajulu
1484711bcba0SDavid C Somayajulu case 5: // Mgmt MAC addresses
1485711bcba0SDavid C Somayajulu initial_val = Q81_RS_ONLY;
1486711bcba0SDavid C Somayajulu max_index = 8;
1487711bcba0SDavid C Somayajulu max_offset = 2;
1488711bcba0SDavid C Somayajulu break;
1489711bcba0SDavid C Somayajulu
1490711bcba0SDavid C Somayajulu case 6: // Mgmt VLAN addresses
1491711bcba0SDavid C Somayajulu initial_val = Q81_RS_ONLY;
1492711bcba0SDavid C Somayajulu max_index = 16;
1493711bcba0SDavid C Somayajulu max_offset = 1;
1494711bcba0SDavid C Somayajulu break;
1495711bcba0SDavid C Somayajulu
1496711bcba0SDavid C Somayajulu case 7: // Mgmt IPv4 address
1497711bcba0SDavid C Somayajulu initial_val = Q81_RS_ONLY;
1498711bcba0SDavid C Somayajulu max_index = 4;
1499711bcba0SDavid C Somayajulu max_offset = 1;
1500711bcba0SDavid C Somayajulu break;
1501711bcba0SDavid C Somayajulu
1502711bcba0SDavid C Somayajulu case 8: // Mgmt IPv6 address
1503711bcba0SDavid C Somayajulu initial_val = Q81_RS_ONLY;
1504711bcba0SDavid C Somayajulu max_index = 4;
1505711bcba0SDavid C Somayajulu max_offset = 4;
1506711bcba0SDavid C Somayajulu break;
1507711bcba0SDavid C Somayajulu
1508711bcba0SDavid C Somayajulu case 9: // Mgmt TCP/UDP Dest port
1509711bcba0SDavid C Somayajulu initial_val = Q81_RS_ONLY;
1510711bcba0SDavid C Somayajulu max_index = 4;
1511711bcba0SDavid C Somayajulu max_offset = 1;
1512711bcba0SDavid C Somayajulu break;
1513711bcba0SDavid C Somayajulu
1514711bcba0SDavid C Somayajulu default:
1515711bcba0SDavid C Somayajulu printf("Bad type!!! 0x%08x\n", type);
1516711bcba0SDavid C Somayajulu max_index = 0;
1517711bcba0SDavid C Somayajulu max_offset = 0;
1518711bcba0SDavid C Somayajulu break;
1519711bcba0SDavid C Somayajulu }
1520711bcba0SDavid C Somayajulu
1521711bcba0SDavid C Somayajulu for (index = 0; index < max_index; index ++) {
1522711bcba0SDavid C Somayajulu for (offset = 0; offset < max_offset; offset ++) {
1523711bcba0SDavid C Somayajulu val = initial_val | (type << 16) |
1524711bcba0SDavid C Somayajulu (index << 4) | (offset);
1525711bcba0SDavid C Somayajulu
1526711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_MAC_PROTO_ADDR_INDEX,\
1527711bcba0SDavid C Somayajulu val);
1528711bcba0SDavid C Somayajulu
1529711bcba0SDavid C Somayajulu result_index = 0;
1530711bcba0SDavid C Somayajulu
1531711bcba0SDavid C Somayajulu while ((result_index & 0x40000000) == 0)
1532711bcba0SDavid C Somayajulu result_index =
1533711bcba0SDavid C Somayajulu READ_REG32(ha, \
1534711bcba0SDavid C Somayajulu Q81_CTL_MAC_PROTO_ADDR_INDEX);
1535711bcba0SDavid C Somayajulu
1536711bcba0SDavid C Somayajulu result_data = READ_REG32(ha,\
1537711bcba0SDavid C Somayajulu Q81_CTL_MAC_PROTO_ADDR_DATA);
1538711bcba0SDavid C Somayajulu
1539711bcba0SDavid C Somayajulu *buf = result_index;
1540711bcba0SDavid C Somayajulu buf ++;
1541711bcba0SDavid C Somayajulu
1542711bcba0SDavid C Somayajulu *buf = result_data;
1543711bcba0SDavid C Somayajulu buf ++;
1544711bcba0SDavid C Somayajulu }
1545711bcba0SDavid C Somayajulu }
1546711bcba0SDavid C Somayajulu }
1547711bcba0SDavid C Somayajulu }
1548711bcba0SDavid C Somayajulu
1549711bcba0SDavid C Somayajulu static int
qls_get_ets_regs(qla_host_t * ha,uint32_t * buf)1550711bcba0SDavid C Somayajulu qls_get_ets_regs(qla_host_t *ha, uint32_t *buf)
1551711bcba0SDavid C Somayajulu {
1552711bcba0SDavid C Somayajulu int ret = 0;
1553711bcba0SDavid C Somayajulu int i;
1554711bcba0SDavid C Somayajulu
1555711bcba0SDavid C Somayajulu for(i = 0; i < 8; i ++, buf ++) {
1556711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_NIC_ENH_TX_SCHD, \
1557711bcba0SDavid C Somayajulu ((i << 29) | 0x08000000));
1558711bcba0SDavid C Somayajulu *buf = READ_REG32(ha, Q81_CTL_NIC_ENH_TX_SCHD);
1559711bcba0SDavid C Somayajulu }
1560711bcba0SDavid C Somayajulu
1561711bcba0SDavid C Somayajulu for(i = 0; i < 2; i ++, buf ++) {
1562711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_CNA_ENH_TX_SCHD, \
1563711bcba0SDavid C Somayajulu ((i << 29) | 0x08000000));
1564711bcba0SDavid C Somayajulu *buf = READ_REG32(ha, Q81_CTL_CNA_ENH_TX_SCHD);
1565711bcba0SDavid C Somayajulu }
1566711bcba0SDavid C Somayajulu
1567711bcba0SDavid C Somayajulu return ret;
1568711bcba0SDavid C Somayajulu }
1569711bcba0SDavid C Somayajulu
1570711bcba0SDavid C Somayajulu int
qls_mpi_core_dump(qla_host_t * ha)1571711bcba0SDavid C Somayajulu qls_mpi_core_dump(qla_host_t *ha)
1572711bcba0SDavid C Somayajulu {
1573711bcba0SDavid C Somayajulu int ret;
1574711bcba0SDavid C Somayajulu int i;
1575711bcba0SDavid C Somayajulu uint32_t reg, reg_val;
1576711bcba0SDavid C Somayajulu
1577711bcba0SDavid C Somayajulu qls_mpi_coredump_t *mpi_dump = &ql_mpi_coredump;
1578711bcba0SDavid C Somayajulu
1579711bcba0SDavid C Somayajulu ret = qls_pause_mpi_risc(ha);
1580711bcba0SDavid C Somayajulu if (ret) {
1581711bcba0SDavid C Somayajulu printf("Failed RISC pause. Status = 0x%.08x\n",ret);
1582711bcba0SDavid C Somayajulu return(-1);
1583711bcba0SDavid C Somayajulu }
1584711bcba0SDavid C Somayajulu
1585711bcba0SDavid C Somayajulu memset(&(mpi_dump->mpi_global_header), 0,
1586711bcba0SDavid C Somayajulu sizeof(qls_mpid_glbl_hdr_t));
1587711bcba0SDavid C Somayajulu
1588711bcba0SDavid C Somayajulu mpi_dump->mpi_global_header.cookie = Q81_MPID_COOKIE;
1589711bcba0SDavid C Somayajulu mpi_dump->mpi_global_header.hdr_size =
1590711bcba0SDavid C Somayajulu sizeof(qls_mpid_glbl_hdr_t);
1591711bcba0SDavid C Somayajulu mpi_dump->mpi_global_header.img_size =
1592711bcba0SDavid C Somayajulu sizeof(qls_mpi_coredump_t);
1593711bcba0SDavid C Somayajulu
1594711bcba0SDavid C Somayajulu memcpy(mpi_dump->mpi_global_header.id, "MPI Coredump",
1595711bcba0SDavid C Somayajulu sizeof(mpi_dump->mpi_global_header.id));
1596711bcba0SDavid C Somayajulu
1597711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->nic1_regs_seg_hdr,
1598711bcba0SDavid C Somayajulu Q81_NIC1_CONTROL_SEG_NUM,
1599711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic1_regs)),
1600711bcba0SDavid C Somayajulu "NIC1 Registers");
1601711bcba0SDavid C Somayajulu
1602711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->nic2_regs_seg_hdr,
1603711bcba0SDavid C Somayajulu Q81_NIC2_CONTROL_SEG_NUM,
1604711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic2_regs)),
1605711bcba0SDavid C Somayajulu "NIC2 Registers");
1606711bcba0SDavid C Somayajulu
1607711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xgmac1_seg_hdr,
1608711bcba0SDavid C Somayajulu Q81_NIC1_XGMAC_SEG_NUM,
1609711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->xgmac1)),
1610711bcba0SDavid C Somayajulu "NIC1 XGMac Registers");
1611711bcba0SDavid C Somayajulu
1612711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xgmac2_seg_hdr,
1613711bcba0SDavid C Somayajulu Q81_NIC2_XGMAC_SEG_NUM,
1614711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->xgmac2)),
1615711bcba0SDavid C Somayajulu "NIC2 XGMac Registers");
1616711bcba0SDavid C Somayajulu
1617711bcba0SDavid C Somayajulu if (ha->pci_func & 1) {
1618711bcba0SDavid C Somayajulu for (i = 0; i < 64; i++)
1619711bcba0SDavid C Somayajulu mpi_dump->nic2_regs[i] =
1620711bcba0SDavid C Somayajulu READ_REG32(ha, i * sizeof(uint32_t));
1621711bcba0SDavid C Somayajulu
1622711bcba0SDavid C Somayajulu for (i = 0; i < 64; i++)
1623711bcba0SDavid C Somayajulu mpi_dump->nic1_regs[i] =
1624711bcba0SDavid C Somayajulu qls_rd_ofunc_reg(ha,
1625711bcba0SDavid C Somayajulu (i * sizeof(uint32_t)) / 4);
1626711bcba0SDavid C Somayajulu
1627711bcba0SDavid C Somayajulu qls_rd_xgmac_regs(ha, &mpi_dump->xgmac2[0], 0);
1628711bcba0SDavid C Somayajulu qls_rd_xgmac_regs(ha, &mpi_dump->xgmac1[0], 1);
1629711bcba0SDavid C Somayajulu } else {
1630711bcba0SDavid C Somayajulu for (i = 0; i < 64; i++)
1631711bcba0SDavid C Somayajulu mpi_dump->nic1_regs[i] =
1632711bcba0SDavid C Somayajulu READ_REG32(ha, i * sizeof(uint32_t));
1633711bcba0SDavid C Somayajulu
1634711bcba0SDavid C Somayajulu for (i = 0; i < 64; i++)
1635711bcba0SDavid C Somayajulu mpi_dump->nic2_regs[i] =
1636711bcba0SDavid C Somayajulu qls_rd_ofunc_reg(ha,
1637711bcba0SDavid C Somayajulu (i * sizeof(uint32_t)) / 4);
1638711bcba0SDavid C Somayajulu
1639711bcba0SDavid C Somayajulu qls_rd_xgmac_regs(ha, &mpi_dump->xgmac1[0], 0);
1640711bcba0SDavid C Somayajulu qls_rd_xgmac_regs(ha, &mpi_dump->xgmac2[0], 1);
1641711bcba0SDavid C Somayajulu }
1642711bcba0SDavid C Somayajulu
1643711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xaui1_an_hdr,
1644711bcba0SDavid C Somayajulu Q81_XAUI1_AN_SEG_NUM,
1645711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1646711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes1_xaui_an)),
1647711bcba0SDavid C Somayajulu "XAUI1 AN Registers");
1648711bcba0SDavid C Somayajulu
1649711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xaui1_hss_pcs_hdr,
1650711bcba0SDavid C Somayajulu Q81_XAUI1_HSS_PCS_SEG_NUM,
1651711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1652711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes1_xaui_hss_pcs)),
1653711bcba0SDavid C Somayajulu "XAUI1 HSS PCS Registers");
1654711bcba0SDavid C Somayajulu
1655711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi1_an_hdr,
1656711bcba0SDavid C Somayajulu Q81_XFI1_AN_SEG_NUM,
1657711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->serdes1_xfi_an)),
1658711bcba0SDavid C Somayajulu "XFI1 AN Registers");
1659711bcba0SDavid C Somayajulu
1660711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi1_train_hdr,
1661711bcba0SDavid C Somayajulu Q81_XFI1_TRAIN_SEG_NUM,
1662711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1663711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes1_xfi_train)),
1664711bcba0SDavid C Somayajulu "XFI1 TRAIN Registers");
1665711bcba0SDavid C Somayajulu
1666711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_pcs_hdr,
1667711bcba0SDavid C Somayajulu Q81_XFI1_HSS_PCS_SEG_NUM,
1668711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1669711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes1_xfi_hss_pcs)),
1670711bcba0SDavid C Somayajulu "XFI1 HSS PCS Registers");
1671711bcba0SDavid C Somayajulu
1672711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_tx_hdr,
1673711bcba0SDavid C Somayajulu Q81_XFI1_HSS_TX_SEG_NUM,
1674711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1675711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes1_xfi_hss_tx)),
1676711bcba0SDavid C Somayajulu "XFI1 HSS TX Registers");
1677711bcba0SDavid C Somayajulu
1678711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_rx_hdr,
1679711bcba0SDavid C Somayajulu Q81_XFI1_HSS_RX_SEG_NUM,
1680711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1681711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes1_xfi_hss_rx)),
1682711bcba0SDavid C Somayajulu "XFI1 HSS RX Registers");
1683711bcba0SDavid C Somayajulu
1684711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_pll_hdr,
1685711bcba0SDavid C Somayajulu Q81_XFI1_HSS_PLL_SEG_NUM,
1686711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1687711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes1_xfi_hss_pll)),
1688711bcba0SDavid C Somayajulu "XFI1 HSS PLL Registers");
1689711bcba0SDavid C Somayajulu
1690711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xaui2_an_hdr,
1691711bcba0SDavid C Somayajulu Q81_XAUI2_AN_SEG_NUM,
1692711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1693711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes2_xaui_an)),
1694711bcba0SDavid C Somayajulu "XAUI2 AN Registers");
1695711bcba0SDavid C Somayajulu
1696711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xaui2_hss_pcs_hdr,
1697711bcba0SDavid C Somayajulu Q81_XAUI2_HSS_PCS_SEG_NUM,
1698711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1699711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes2_xaui_hss_pcs)),
1700711bcba0SDavid C Somayajulu "XAUI2 HSS PCS Registers");
1701711bcba0SDavid C Somayajulu
1702711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi2_an_hdr,
1703711bcba0SDavid C Somayajulu Q81_XFI2_AN_SEG_NUM,
1704711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->serdes2_xfi_an)),
1705711bcba0SDavid C Somayajulu "XFI2 AN Registers");
1706711bcba0SDavid C Somayajulu
1707711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi2_train_hdr,
1708711bcba0SDavid C Somayajulu Q81_XFI2_TRAIN_SEG_NUM,
1709711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1710711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes2_xfi_train)),
1711711bcba0SDavid C Somayajulu "XFI2 TRAIN Registers");
1712711bcba0SDavid C Somayajulu
1713711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_pcs_hdr,
1714711bcba0SDavid C Somayajulu Q81_XFI2_HSS_PCS_SEG_NUM,
1715711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1716711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes2_xfi_hss_pcs)),
1717711bcba0SDavid C Somayajulu "XFI2 HSS PCS Registers");
1718711bcba0SDavid C Somayajulu
1719711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_tx_hdr,
1720711bcba0SDavid C Somayajulu Q81_XFI2_HSS_TX_SEG_NUM,
1721711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1722711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes2_xfi_hss_tx)),
1723711bcba0SDavid C Somayajulu "XFI2 HSS TX Registers");
1724711bcba0SDavid C Somayajulu
1725711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_rx_hdr,
1726711bcba0SDavid C Somayajulu Q81_XFI2_HSS_RX_SEG_NUM,
1727711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1728711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes2_xfi_hss_rx)),
1729711bcba0SDavid C Somayajulu "XFI2 HSS RX Registers");
1730711bcba0SDavid C Somayajulu
1731711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_pll_hdr,
1732711bcba0SDavid C Somayajulu Q81_XFI2_HSS_PLL_SEG_NUM,
1733711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1734711bcba0SDavid C Somayajulu sizeof(mpi_dump->serdes2_xfi_hss_pll)),
1735711bcba0SDavid C Somayajulu "XFI2 HSS PLL Registers");
1736711bcba0SDavid C Somayajulu
1737711bcba0SDavid C Somayajulu qls_rd_serdes_regs(ha, mpi_dump);
1738711bcba0SDavid C Somayajulu
1739711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->core_regs_seg_hdr,
1740711bcba0SDavid C Somayajulu Q81_CORE_SEG_NUM,
1741711bcba0SDavid C Somayajulu (sizeof(mpi_dump->core_regs_seg_hdr) +
1742711bcba0SDavid C Somayajulu sizeof(mpi_dump->mpi_core_regs) +
1743711bcba0SDavid C Somayajulu sizeof(mpi_dump->mpi_core_sh_regs)),
1744711bcba0SDavid C Somayajulu "Core Registers");
1745711bcba0SDavid C Somayajulu
1746711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->mpi_core_regs[0],
1747711bcba0SDavid C Somayajulu Q81_MPI_CORE_REGS_ADDR, Q81_MPI_CORE_REGS_CNT);
1748711bcba0SDavid C Somayajulu
1749711bcba0SDavid C Somayajulu ret = qls_get_mpi_shadow_regs(ha,
1750711bcba0SDavid C Somayajulu &mpi_dump->mpi_core_sh_regs[0]);
1751711bcba0SDavid C Somayajulu
1752711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->test_logic_regs_seg_hdr,
1753711bcba0SDavid C Somayajulu Q81_TEST_LOGIC_SEG_NUM,
1754711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1755711bcba0SDavid C Somayajulu sizeof(mpi_dump->test_logic_regs)),
1756711bcba0SDavid C Somayajulu "Test Logic Regs");
1757711bcba0SDavid C Somayajulu
1758711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->test_logic_regs[0],
1759711bcba0SDavid C Somayajulu Q81_TEST_REGS_ADDR, Q81_TEST_REGS_CNT);
1760711bcba0SDavid C Somayajulu
1761711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->rmii_regs_seg_hdr,
1762711bcba0SDavid C Somayajulu Q81_RMII_SEG_NUM,
1763711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->rmii_regs)),
1764711bcba0SDavid C Somayajulu "RMII Registers");
1765711bcba0SDavid C Somayajulu
1766711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->rmii_regs[0],
1767711bcba0SDavid C Somayajulu Q81_RMII_REGS_ADDR, Q81_RMII_REGS_CNT);
1768711bcba0SDavid C Somayajulu
1769711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->fcmac1_regs_seg_hdr,
1770711bcba0SDavid C Somayajulu Q81_FCMAC1_SEG_NUM,
1771711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fcmac1_regs)),
1772711bcba0SDavid C Somayajulu "FCMAC1 Registers");
1773711bcba0SDavid C Somayajulu
1774711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->fcmac1_regs[0],
1775711bcba0SDavid C Somayajulu Q81_FCMAC1_REGS_ADDR, Q81_FCMAC_REGS_CNT);
1776711bcba0SDavid C Somayajulu
1777711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->fcmac2_regs_seg_hdr,
1778711bcba0SDavid C Somayajulu Q81_FCMAC2_SEG_NUM,
1779711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fcmac2_regs)),
1780711bcba0SDavid C Somayajulu "FCMAC2 Registers");
1781711bcba0SDavid C Somayajulu
1782711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->fcmac2_regs[0],
1783711bcba0SDavid C Somayajulu Q81_FCMAC2_REGS_ADDR, Q81_FCMAC_REGS_CNT);
1784711bcba0SDavid C Somayajulu
1785711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->fc1_mbx_regs_seg_hdr,
1786711bcba0SDavid C Somayajulu Q81_FC1_MBOX_SEG_NUM,
1787711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fc1_mbx_regs)),
1788711bcba0SDavid C Somayajulu "FC1 MBox Regs");
1789711bcba0SDavid C Somayajulu
1790711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->fc1_mbx_regs[0],
1791711bcba0SDavid C Somayajulu Q81_FC1_MBX_REGS_ADDR, Q81_FC_MBX_REGS_CNT);
1792711bcba0SDavid C Somayajulu
1793711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->ide_regs_seg_hdr,
1794711bcba0SDavid C Somayajulu Q81_IDE_SEG_NUM,
1795711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->ide_regs)),
1796711bcba0SDavid C Somayajulu "IDE Registers");
1797711bcba0SDavid C Somayajulu
1798711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->ide_regs[0],
1799711bcba0SDavid C Somayajulu Q81_IDE_REGS_ADDR, Q81_IDE_REGS_CNT);
1800711bcba0SDavid C Somayajulu
1801711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->nic1_mbx_regs_seg_hdr,
1802711bcba0SDavid C Somayajulu Q81_NIC1_MBOX_SEG_NUM,
1803711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic1_mbx_regs)),
1804711bcba0SDavid C Somayajulu "NIC1 MBox Regs");
1805711bcba0SDavid C Somayajulu
1806711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->nic1_mbx_regs[0],
1807711bcba0SDavid C Somayajulu Q81_NIC1_MBX_REGS_ADDR, Q81_NIC_MBX_REGS_CNT);
1808711bcba0SDavid C Somayajulu
1809711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->smbus_regs_seg_hdr,
1810711bcba0SDavid C Somayajulu Q81_SMBUS_SEG_NUM,
1811711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->smbus_regs)),
1812711bcba0SDavid C Somayajulu "SMBus Registers");
1813711bcba0SDavid C Somayajulu
1814711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->smbus_regs[0],
1815711bcba0SDavid C Somayajulu Q81_SMBUS_REGS_ADDR, Q81_SMBUS_REGS_CNT);
1816711bcba0SDavid C Somayajulu
1817711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->fc2_mbx_regs_seg_hdr,
1818711bcba0SDavid C Somayajulu Q81_FC2_MBOX_SEG_NUM,
1819711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fc2_mbx_regs)),
1820711bcba0SDavid C Somayajulu "FC2 MBox Regs");
1821711bcba0SDavid C Somayajulu
1822711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->fc2_mbx_regs[0],
1823711bcba0SDavid C Somayajulu Q81_FC2_MBX_REGS_ADDR, Q81_FC_MBX_REGS_CNT);
1824711bcba0SDavid C Somayajulu
1825711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->nic2_mbx_regs_seg_hdr,
1826711bcba0SDavid C Somayajulu Q81_NIC2_MBOX_SEG_NUM,
1827711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic2_mbx_regs)),
1828711bcba0SDavid C Somayajulu "NIC2 MBox Regs");
1829711bcba0SDavid C Somayajulu
1830711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->nic2_mbx_regs[0],
1831711bcba0SDavid C Somayajulu Q81_NIC2_MBX_REGS_ADDR, Q81_NIC_MBX_REGS_CNT);
1832711bcba0SDavid C Somayajulu
1833711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->i2c_regs_seg_hdr,
1834711bcba0SDavid C Somayajulu Q81_I2C_SEG_NUM,
1835711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) +
1836711bcba0SDavid C Somayajulu sizeof(mpi_dump->i2c_regs)),
1837711bcba0SDavid C Somayajulu "I2C Registers");
1838711bcba0SDavid C Somayajulu
1839711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->i2c_regs[0],
1840711bcba0SDavid C Somayajulu Q81_I2C_REGS_ADDR, Q81_I2C_REGS_CNT);
1841711bcba0SDavid C Somayajulu
1842711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->memc_regs_seg_hdr,
1843711bcba0SDavid C Somayajulu Q81_MEMC_SEG_NUM,
1844711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->memc_regs)),
1845711bcba0SDavid C Somayajulu "MEMC Registers");
1846711bcba0SDavid C Somayajulu
1847711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->memc_regs[0],
1848711bcba0SDavid C Somayajulu Q81_MEMC_REGS_ADDR, Q81_MEMC_REGS_CNT);
1849711bcba0SDavid C Somayajulu
1850711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->pbus_regs_seg_hdr,
1851711bcba0SDavid C Somayajulu Q81_PBUS_SEG_NUM,
1852711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->pbus_regs)),
1853711bcba0SDavid C Somayajulu "PBUS Registers");
1854711bcba0SDavid C Somayajulu
1855711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->pbus_regs[0],
1856711bcba0SDavid C Somayajulu Q81_PBUS_REGS_ADDR, Q81_PBUS_REGS_CNT);
1857711bcba0SDavid C Somayajulu
1858711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->mde_regs_seg_hdr,
1859711bcba0SDavid C Somayajulu Q81_MDE_SEG_NUM,
1860711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->mde_regs)),
1861711bcba0SDavid C Somayajulu "MDE Registers");
1862711bcba0SDavid C Somayajulu
1863711bcba0SDavid C Somayajulu ret = qls_get_mpi_regs(ha, &mpi_dump->mde_regs[0],
1864711bcba0SDavid C Somayajulu Q81_MDE_REGS_ADDR, Q81_MDE_REGS_CNT);
1865711bcba0SDavid C Somayajulu
1866711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->intr_states_seg_hdr,
1867711bcba0SDavid C Somayajulu Q81_INTR_STATES_SEG_NUM,
1868711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->intr_states)),
1869711bcba0SDavid C Somayajulu "INTR States");
1870711bcba0SDavid C Somayajulu
1871711bcba0SDavid C Somayajulu qls_get_intr_states(ha, &mpi_dump->intr_states[0]);
1872711bcba0SDavid C Somayajulu
1873711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->probe_dump_seg_hdr,
1874711bcba0SDavid C Somayajulu Q81_PROBE_DUMP_SEG_NUM,
1875711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->probe_dump)),
1876711bcba0SDavid C Somayajulu "Probe Dump");
1877711bcba0SDavid C Somayajulu
1878711bcba0SDavid C Somayajulu qls_get_probe_dump(ha, &mpi_dump->probe_dump[0]);
1879711bcba0SDavid C Somayajulu
1880711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->routing_reg_seg_hdr,
1881711bcba0SDavid C Somayajulu Q81_ROUTING_INDEX_SEG_NUM,
1882711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->routing_regs)),
1883711bcba0SDavid C Somayajulu "Routing Regs");
1884711bcba0SDavid C Somayajulu
1885711bcba0SDavid C Somayajulu qls_get_ridx_registers(ha, &mpi_dump->routing_regs[0]);
1886711bcba0SDavid C Somayajulu
1887711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->mac_prot_reg_seg_hdr,
1888711bcba0SDavid C Somayajulu Q81_MAC_PROTOCOL_SEG_NUM,
1889711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->mac_prot_regs)),
1890711bcba0SDavid C Somayajulu "MAC Prot Regs");
1891711bcba0SDavid C Somayajulu
1892711bcba0SDavid C Somayajulu qls_get_mac_proto_regs(ha, &mpi_dump->mac_prot_regs[0]);
1893711bcba0SDavid C Somayajulu
1894711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->ets_seg_hdr,
1895711bcba0SDavid C Somayajulu Q81_ETS_SEG_NUM,
1896711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->ets)),
1897711bcba0SDavid C Somayajulu "ETS Registers");
1898711bcba0SDavid C Somayajulu
1899711bcba0SDavid C Somayajulu ret = qls_get_ets_regs(ha, &mpi_dump->ets[0]);
1900711bcba0SDavid C Somayajulu
1901711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->sem_regs_seg_hdr,
1902711bcba0SDavid C Somayajulu Q81_SEM_REGS_SEG_NUM,
1903711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->sem_regs)),
1904711bcba0SDavid C Somayajulu "Sem Registers");
1905711bcba0SDavid C Somayajulu
1906711bcba0SDavid C Somayajulu for(i = 0; i < Q81_MAX_SEMAPHORE_FUNCTIONS ; i ++) {
1907711bcba0SDavid C Somayajulu reg = Q81_CTL_PROC_ADDR_REG_BLOCK | (i << Q81_FUNCTION_SHIFT) |
1908711bcba0SDavid C Somayajulu (Q81_CTL_SEMAPHORE >> 2);
1909711bcba0SDavid C Somayajulu
1910711bcba0SDavid C Somayajulu ret = qls_mpi_risc_rd_reg(ha, reg, ®_val);
1911711bcba0SDavid C Somayajulu mpi_dump->sem_regs[i] = reg_val;
1912711bcba0SDavid C Somayajulu
1913711bcba0SDavid C Somayajulu if (ret != 0)
1914711bcba0SDavid C Somayajulu mpi_dump->sem_regs[i] = Q81_BAD_DATA;
1915711bcba0SDavid C Somayajulu }
1916711bcba0SDavid C Somayajulu
1917711bcba0SDavid C Somayajulu ret = qls_unpause_mpi_risc(ha);
1918711bcba0SDavid C Somayajulu if (ret)
1919711bcba0SDavid C Somayajulu printf("Failed RISC unpause. Status = 0x%.08x\n",ret);
1920711bcba0SDavid C Somayajulu
1921711bcba0SDavid C Somayajulu ret = qls_mpi_reset(ha);
1922711bcba0SDavid C Somayajulu if (ret)
1923711bcba0SDavid C Somayajulu printf("Failed RISC reset. Status = 0x%.08x\n",ret);
1924711bcba0SDavid C Somayajulu
1925711bcba0SDavid C Somayajulu WRITE_REG32(ha, Q81_CTL_FUNC_SPECIFIC, 0x80008000);
1926711bcba0SDavid C Somayajulu
1927711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->memc_ram_seg_hdr,
1928711bcba0SDavid C Somayajulu Q81_MEMC_RAM_SEG_NUM,
1929711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->memc_ram)),
1930711bcba0SDavid C Somayajulu "MEMC RAM");
1931711bcba0SDavid C Somayajulu
1932711bcba0SDavid C Somayajulu ret = qls_mbx_dump_risc_ram(ha, &mpi_dump->memc_ram[0],
1933711bcba0SDavid C Somayajulu Q81_MEMC_RAM_ADDR, Q81_MEMC_RAM_CNT);
1934711bcba0SDavid C Somayajulu if (ret)
1935711bcba0SDavid C Somayajulu printf("Failed Dump of MEMC RAM. Status = 0x%.08x\n",ret);
1936711bcba0SDavid C Somayajulu
1937711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->code_ram_seg_hdr,
1938711bcba0SDavid C Somayajulu Q81_WCS_RAM_SEG_NUM,
1939711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->code_ram)),
1940711bcba0SDavid C Somayajulu "WCS RAM");
1941711bcba0SDavid C Somayajulu
1942711bcba0SDavid C Somayajulu ret = qls_mbx_dump_risc_ram(ha, &mpi_dump->memc_ram[0],
1943711bcba0SDavid C Somayajulu Q81_CODE_RAM_ADDR, Q81_CODE_RAM_CNT);
1944711bcba0SDavid C Somayajulu if (ret)
1945711bcba0SDavid C Somayajulu printf("Failed Dump of CODE RAM. Status = 0x%.08x\n",ret);
1946711bcba0SDavid C Somayajulu
1947711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->wqc1_seg_hdr,
1948711bcba0SDavid C Somayajulu Q81_WQC1_SEG_NUM,
1949711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->wqc1)),
1950711bcba0SDavid C Somayajulu "WQC 1");
1951711bcba0SDavid C Somayajulu
1952711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->wqc2_seg_hdr,
1953711bcba0SDavid C Somayajulu Q81_WQC2_SEG_NUM,
1954711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->wqc2)),
1955711bcba0SDavid C Somayajulu "WQC 2");
1956711bcba0SDavid C Somayajulu
1957711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->cqc1_seg_hdr,
1958711bcba0SDavid C Somayajulu Q81_CQC1_SEG_NUM,
1959711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->cqc1)),
1960711bcba0SDavid C Somayajulu "CQC 1");
1961711bcba0SDavid C Somayajulu
1962711bcba0SDavid C Somayajulu qls_mpid_seg_hdr(&mpi_dump->cqc2_seg_hdr,
1963711bcba0SDavid C Somayajulu Q81_CQC2_SEG_NUM,
1964711bcba0SDavid C Somayajulu (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->cqc2)),
1965711bcba0SDavid C Somayajulu "CQC 2");
1966711bcba0SDavid C Somayajulu
1967711bcba0SDavid C Somayajulu return 0;
1968711bcba0SDavid C Somayajulu }
1969