1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3 * 4 * Copyright (c) 2013-2014 Qlogic Corporation 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 * POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 /* 31 * File: qls_dump.c 32 */ 33 #include <sys/cdefs.h> 34 __FBSDID("$FreeBSD$"); 35 36 37 #include "qls_os.h" 38 #include "qls_hw.h" 39 #include "qls_def.h" 40 #include "qls_glbl.h" 41 #include "qls_dump.h" 42 43 qls_mpi_coredump_t ql_mpi_coredump; 44 45 #define Q81_CORE_SEG_NUM 1 46 #define Q81_TEST_LOGIC_SEG_NUM 2 47 #define Q81_RMII_SEG_NUM 3 48 #define Q81_FCMAC1_SEG_NUM 4 49 #define Q81_FCMAC2_SEG_NUM 5 50 #define Q81_FC1_MBOX_SEG_NUM 6 51 #define Q81_IDE_SEG_NUM 7 52 #define Q81_NIC1_MBOX_SEG_NUM 8 53 #define Q81_SMBUS_SEG_NUM 9 54 #define Q81_FC2_MBOX_SEG_NUM 10 55 #define Q81_NIC2_MBOX_SEG_NUM 11 56 #define Q81_I2C_SEG_NUM 12 57 #define Q81_MEMC_SEG_NUM 13 58 #define Q81_PBUS_SEG_NUM 14 59 #define Q81_MDE_SEG_NUM 15 60 #define Q81_NIC1_CONTROL_SEG_NUM 16 61 #define Q81_NIC2_CONTROL_SEG_NUM 17 62 #define Q81_NIC1_XGMAC_SEG_NUM 18 63 #define Q81_NIC2_XGMAC_SEG_NUM 19 64 #define Q81_WCS_RAM_SEG_NUM 20 65 #define Q81_MEMC_RAM_SEG_NUM 21 66 #define Q81_XAUI1_AN_SEG_NUM 22 67 #define Q81_XAUI1_HSS_PCS_SEG_NUM 23 68 #define Q81_XFI1_AN_SEG_NUM 24 69 #define Q81_XFI1_TRAIN_SEG_NUM 25 70 #define Q81_XFI1_HSS_PCS_SEG_NUM 26 71 #define Q81_XFI1_HSS_TX_SEG_NUM 27 72 #define Q81_XFI1_HSS_RX_SEG_NUM 28 73 #define Q81_XFI1_HSS_PLL_SEG_NUM 29 74 #define Q81_INTR_STATES_SEG_NUM 31 75 #define Q81_ETS_SEG_NUM 34 76 #define Q81_PROBE_DUMP_SEG_NUM 35 77 #define Q81_ROUTING_INDEX_SEG_NUM 36 78 #define Q81_MAC_PROTOCOL_SEG_NUM 37 79 #define Q81_XAUI2_AN_SEG_NUM 38 80 #define Q81_XAUI2_HSS_PCS_SEG_NUM 39 81 #define Q81_XFI2_AN_SEG_NUM 40 82 #define Q81_XFI2_TRAIN_SEG_NUM 41 83 #define Q81_XFI2_HSS_PCS_SEG_NUM 42 84 #define Q81_XFI2_HSS_TX_SEG_NUM 43 85 #define Q81_XFI2_HSS_RX_SEG_NUM 44 86 #define Q81_XFI2_HSS_PLL_SEG_NUM 45 87 #define Q81_WQC1_SEG_NUM 46 88 #define Q81_CQC1_SEG_NUM 47 89 #define Q81_WQC2_SEG_NUM 48 90 #define Q81_CQC2_SEG_NUM 49 91 #define Q81_SEM_REGS_SEG_NUM 50 92 93 enum 94 { 95 Q81_PAUSE_SRC_LO = 0x00000100, 96 Q81_PAUSE_SRC_HI = 0x00000104, 97 Q81_GLOBAL_CFG = 0x00000108, 98 Q81_GLOBAL_CFG_RESET = (1 << 0), /*Control*/ 99 Q81_GLOBAL_CFG_JUMBO = (1 << 6), /*Control*/ 100 Q81_GLOBAL_CFG_TX_STAT_EN = (1 << 10), /*Control*/ 101 Q81_GLOBAL_CFG_RX_STAT_EN = (1 << 11), /*Control*/ 102 Q81_TX_CFG = 0x0000010c, 103 Q81_TX_CFG_RESET = (1 << 0), /*Control*/ 104 Q81_TX_CFG_EN = (1 << 1), /*Control*/ 105 Q81_TX_CFG_PREAM = (1 << 2), /*Control*/ 106 Q81_RX_CFG = 0x00000110, 107 Q81_RX_CFG_RESET = (1 << 0), /*Control*/ 108 Q81_RX_CFG_EN = (1 << 1), /*Control*/ 109 Q81_RX_CFG_PREAM = (1 << 2), /*Control*/ 110 Q81_FLOW_CTL = 0x0000011c, 111 Q81_PAUSE_OPCODE = 0x00000120, 112 Q81_PAUSE_TIMER = 0x00000124, 113 Q81_PAUSE_FRM_DEST_LO = 0x00000128, 114 Q81_PAUSE_FRM_DEST_HI = 0x0000012c, 115 Q81_MAC_TX_PARAMS = 0x00000134, 116 Q81_MAC_TX_PARAMS_JUMBO = (1U << 31), /*Control*/ 117 Q81_MAC_TX_PARAMS_SIZE_SHIFT = 16, /*Control*/ 118 Q81_MAC_RX_PARAMS = 0x00000138, 119 Q81_MAC_SYS_INT = 0x00000144, 120 Q81_MAC_SYS_INT_MASK = 0x00000148, 121 Q81_MAC_MGMT_INT = 0x0000014c, 122 Q81_MAC_MGMT_IN_MASK = 0x00000150, 123 Q81_EXT_ARB_MODE = 0x000001fc, 124 Q81_TX_PKTS = 0x00000200, 125 Q81_TX_PKTS_LO = 0x00000204, 126 Q81_TX_BYTES = 0x00000208, 127 Q81_TX_BYTES_LO = 0x0000020C, 128 Q81_TX_MCAST_PKTS = 0x00000210, 129 Q81_TX_MCAST_PKTS_LO = 0x00000214, 130 Q81_TX_BCAST_PKTS = 0x00000218, 131 Q81_TX_BCAST_PKTS_LO = 0x0000021C, 132 Q81_TX_UCAST_PKTS = 0x00000220, 133 Q81_TX_UCAST_PKTS_LO = 0x00000224, 134 Q81_TX_CTL_PKTS = 0x00000228, 135 Q81_TX_CTL_PKTS_LO = 0x0000022c, 136 Q81_TX_PAUSE_PKTS = 0x00000230, 137 Q81_TX_PAUSE_PKTS_LO = 0x00000234, 138 Q81_TX_64_PKT = 0x00000238, 139 Q81_TX_64_PKT_LO = 0x0000023c, 140 Q81_TX_65_TO_127_PKT = 0x00000240, 141 Q81_TX_65_TO_127_PKT_LO = 0x00000244, 142 Q81_TX_128_TO_255_PKT = 0x00000248, 143 Q81_TX_128_TO_255_PKT_LO = 0x0000024c, 144 Q81_TX_256_511_PKT = 0x00000250, 145 Q81_TX_256_511_PKT_LO = 0x00000254, 146 Q81_TX_512_TO_1023_PKT = 0x00000258, 147 Q81_TX_512_TO_1023_PKT_LO = 0x0000025c, 148 Q81_TX_1024_TO_1518_PKT = 0x00000260, 149 Q81_TX_1024_TO_1518_PKT_LO = 0x00000264, 150 Q81_TX_1519_TO_MAX_PKT = 0x00000268, 151 Q81_TX_1519_TO_MAX_PKT_LO = 0x0000026c, 152 Q81_TX_UNDERSIZE_PKT = 0x00000270, 153 Q81_TX_UNDERSIZE_PKT_LO = 0x00000274, 154 Q81_TX_OVERSIZE_PKT = 0x00000278, 155 Q81_TX_OVERSIZE_PKT_LO = 0x0000027c, 156 Q81_RX_HALF_FULL_DET = 0x000002a0, 157 Q81_TX_HALF_FULL_DET_LO = 0x000002a4, 158 Q81_RX_OVERFLOW_DET = 0x000002a8, 159 Q81_TX_OVERFLOW_DET_LO = 0x000002ac, 160 Q81_RX_HALF_FULL_MASK = 0x000002b0, 161 Q81_TX_HALF_FULL_MASK_LO = 0x000002b4, 162 Q81_RX_OVERFLOW_MASK = 0x000002b8, 163 Q81_TX_OVERFLOW_MASK_LO = 0x000002bc, 164 Q81_STAT_CNT_CTL = 0x000002c0, 165 Q81_STAT_CNT_CTL_CLEAR_TX = (1 << 0), /*Control*/ 166 Q81_STAT_CNT_CTL_CLEAR_RX = (1 << 1), /*Control*/ 167 Q81_AUX_RX_HALF_FULL_DET = 0x000002d0, 168 Q81_AUX_TX_HALF_FULL_DET = 0x000002d4, 169 Q81_AUX_RX_OVERFLOW_DET = 0x000002d8, 170 Q81_AUX_TX_OVERFLOW_DET = 0x000002dc, 171 Q81_AUX_RX_HALF_FULL_MASK = 0x000002f0, 172 Q81_AUX_TX_HALF_FULL_MASK = 0x000002f4, 173 Q81_AUX_RX_OVERFLOW_MASK = 0x000002f8, 174 Q81_AUX_TX_OVERFLOW_MASK = 0x000002fc, 175 Q81_RX_BYTES = 0x00000300, 176 Q81_RX_BYTES_LO = 0x00000304, 177 Q81_RX_BYTES_OK = 0x00000308, 178 Q81_RX_BYTES_OK_LO = 0x0000030c, 179 Q81_RX_PKTS = 0x00000310, 180 Q81_RX_PKTS_LO = 0x00000314, 181 Q81_RX_PKTS_OK = 0x00000318, 182 Q81_RX_PKTS_OK_LO = 0x0000031c, 183 Q81_RX_BCAST_PKTS = 0x00000320, 184 Q81_RX_BCAST_PKTS_LO = 0x00000324, 185 Q81_RX_MCAST_PKTS = 0x00000328, 186 Q81_RX_MCAST_PKTS_LO = 0x0000032c, 187 Q81_RX_UCAST_PKTS = 0x00000330, 188 Q81_RX_UCAST_PKTS_LO = 0x00000334, 189 Q81_RX_UNDERSIZE_PKTS = 0x00000338, 190 Q81_RX_UNDERSIZE_PKTS_LO = 0x0000033c, 191 Q81_RX_OVERSIZE_PKTS = 0x00000340, 192 Q81_RX_OVERSIZE_PKTS_LO = 0x00000344, 193 Q81_RX_JABBER_PKTS = 0x00000348, 194 Q81_RX_JABBER_PKTS_LO = 0x0000034c, 195 Q81_RX_UNDERSIZE_FCERR_PKTS = 0x00000350, 196 Q81_RX_UNDERSIZE_FCERR_PKTS_LO = 0x00000354, 197 Q81_RX_DROP_EVENTS = 0x00000358, 198 Q81_RX_DROP_EVENTS_LO = 0x0000035c, 199 Q81_RX_FCERR_PKTS = 0x00000360, 200 Q81_RX_FCERR_PKTS_LO = 0x00000364, 201 Q81_RX_ALIGN_ERR = 0x00000368, 202 Q81_RX_ALIGN_ERR_LO = 0x0000036c, 203 Q81_RX_SYMBOL_ERR = 0x00000370, 204 Q81_RX_SYMBOL_ERR_LO = 0x00000374, 205 Q81_RX_MAC_ERR = 0x00000378, 206 Q81_RX_MAC_ERR_LO = 0x0000037c, 207 Q81_RX_CTL_PKTS = 0x00000380, 208 Q81_RX_CTL_PKTS_LO = 0x00000384, 209 Q81_RX_PAUSE_PKTS = 0x00000388, 210 Q81_RX_PAUSE_PKTS_LO = 0x0000038c, 211 Q81_RX_64_PKTS = 0x00000390, 212 Q81_RX_64_PKTS_LO = 0x00000394, 213 Q81_RX_65_TO_127_PKTS = 0x00000398, 214 Q81_RX_65_TO_127_PKTS_LO = 0x0000039c, 215 Q81_RX_128_255_PKTS = 0x000003a0, 216 Q81_RX_128_255_PKTS_LO = 0x000003a4, 217 Q81_RX_256_511_PKTS = 0x000003a8, 218 Q81_RX_256_511_PKTS_LO = 0x000003ac, 219 Q81_RX_512_TO_1023_PKTS = 0x000003b0, 220 Q81_RX_512_TO_1023_PKTS_LO = 0x000003b4, 221 Q81_RX_1024_TO_1518_PKTS = 0x000003b8, 222 Q81_RX_1024_TO_1518_PKTS_LO = 0x000003bc, 223 Q81_RX_1519_TO_MAX_PKTS = 0x000003c0, 224 Q81_RX_1519_TO_MAX_PKTS_LO = 0x000003c4, 225 Q81_RX_LEN_ERR_PKTS = 0x000003c8, 226 Q81_RX_LEN_ERR_PKTS_LO = 0x000003cc, 227 Q81_MDIO_TX_DATA = 0x00000400, 228 Q81_MDIO_RX_DATA = 0x00000410, 229 Q81_MDIO_CMD = 0x00000420, 230 Q81_MDIO_PHY_ADDR = 0x00000430, 231 Q81_MDIO_PORT = 0x00000440, 232 Q81_MDIO_STATUS = 0x00000450, 233 Q81_TX_CBFC_PAUSE_FRAMES0 = 0x00000500, 234 Q81_TX_CBFC_PAUSE_FRAMES0_LO = 0x00000504, 235 Q81_TX_CBFC_PAUSE_FRAMES1 = 0x00000508, 236 Q81_TX_CBFC_PAUSE_FRAMES1_LO = 0x0000050C, 237 Q81_TX_CBFC_PAUSE_FRAMES2 = 0x00000510, 238 Q81_TX_CBFC_PAUSE_FRAMES2_LO = 0x00000514, 239 Q81_TX_CBFC_PAUSE_FRAMES3 = 0x00000518, 240 Q81_TX_CBFC_PAUSE_FRAMES3_LO = 0x0000051C, 241 Q81_TX_CBFC_PAUSE_FRAMES4 = 0x00000520, 242 Q81_TX_CBFC_PAUSE_FRAMES4_LO = 0x00000524, 243 Q81_TX_CBFC_PAUSE_FRAMES5 = 0x00000528, 244 Q81_TX_CBFC_PAUSE_FRAMES5_LO = 0x0000052C, 245 Q81_TX_CBFC_PAUSE_FRAMES6 = 0x00000530, 246 Q81_TX_CBFC_PAUSE_FRAMES6_LO = 0x00000534, 247 Q81_TX_CBFC_PAUSE_FRAMES7 = 0x00000538, 248 Q81_TX_CBFC_PAUSE_FRAMES7_LO = 0x0000053C, 249 Q81_TX_FCOE_PKTS = 0x00000540, 250 Q81_TX_FCOE_PKTS_LO = 0x00000544, 251 Q81_TX_MGMT_PKTS = 0x00000548, 252 Q81_TX_MGMT_PKTS_LO = 0x0000054C, 253 Q81_RX_CBFC_PAUSE_FRAMES0 = 0x00000568, 254 Q81_RX_CBFC_PAUSE_FRAMES0_LO = 0x0000056C, 255 Q81_RX_CBFC_PAUSE_FRAMES1 = 0x00000570, 256 Q81_RX_CBFC_PAUSE_FRAMES1_LO = 0x00000574, 257 Q81_RX_CBFC_PAUSE_FRAMES2 = 0x00000578, 258 Q81_RX_CBFC_PAUSE_FRAMES2_LO = 0x0000057C, 259 Q81_RX_CBFC_PAUSE_FRAMES3 = 0x00000580, 260 Q81_RX_CBFC_PAUSE_FRAMES3_LO = 0x00000584, 261 Q81_RX_CBFC_PAUSE_FRAMES4 = 0x00000588, 262 Q81_RX_CBFC_PAUSE_FRAMES4_LO = 0x0000058C, 263 Q81_RX_CBFC_PAUSE_FRAMES5 = 0x00000590, 264 Q81_RX_CBFC_PAUSE_FRAMES5_LO = 0x00000594, 265 Q81_RX_CBFC_PAUSE_FRAMES6 = 0x00000598, 266 Q81_RX_CBFC_PAUSE_FRAMES6_LO = 0x0000059C, 267 Q81_RX_CBFC_PAUSE_FRAMES7 = 0x000005A0, 268 Q81_RX_CBFC_PAUSE_FRAMES7_LO = 0x000005A4, 269 Q81_RX_FCOE_PKTS = 0x000005A8, 270 Q81_RX_FCOE_PKTS_LO = 0x000005AC, 271 Q81_RX_MGMT_PKTS = 0x000005B0, 272 Q81_RX_MGMT_PKTS_LO = 0x000005B4, 273 Q81_RX_NIC_FIFO_DROP = 0x000005B8, 274 Q81_RX_NIC_FIFO_DROP_LO = 0x000005BC, 275 Q81_RX_FCOE_FIFO_DROP = 0x000005C0, 276 Q81_RX_FCOE_FIFO_DROP_LO = 0x000005C4, 277 Q81_RX_MGMT_FIFO_DROP = 0x000005C8, 278 Q81_RX_MGMT_FIFO_DROP_LO = 0x000005CC, 279 Q81_RX_PKTS_PRIORITY0 = 0x00000600, 280 Q81_RX_PKTS_PRIORITY0_LO = 0x00000604, 281 Q81_RX_PKTS_PRIORITY1 = 0x00000608, 282 Q81_RX_PKTS_PRIORITY1_LO = 0x0000060C, 283 Q81_RX_PKTS_PRIORITY2 = 0x00000610, 284 Q81_RX_PKTS_PRIORITY2_LO = 0x00000614, 285 Q81_RX_PKTS_PRIORITY3 = 0x00000618, 286 Q81_RX_PKTS_PRIORITY3_LO = 0x0000061C, 287 Q81_RX_PKTS_PRIORITY4 = 0x00000620, 288 Q81_RX_PKTS_PRIORITY4_LO = 0x00000624, 289 Q81_RX_PKTS_PRIORITY5 = 0x00000628, 290 Q81_RX_PKTS_PRIORITY5_LO = 0x0000062C, 291 Q81_RX_PKTS_PRIORITY6 = 0x00000630, 292 Q81_RX_PKTS_PRIORITY6_LO = 0x00000634, 293 Q81_RX_PKTS_PRIORITY7 = 0x00000638, 294 Q81_RX_PKTS_PRIORITY7_LO = 0x0000063C, 295 Q81_RX_OCTETS_PRIORITY0 = 0x00000640, 296 Q81_RX_OCTETS_PRIORITY0_LO = 0x00000644, 297 Q81_RX_OCTETS_PRIORITY1 = 0x00000648, 298 Q81_RX_OCTETS_PRIORITY1_LO = 0x0000064C, 299 Q81_RX_OCTETS_PRIORITY2 = 0x00000650, 300 Q81_RX_OCTETS_PRIORITY2_LO = 0x00000654, 301 Q81_RX_OCTETS_PRIORITY3 = 0x00000658, 302 Q81_RX_OCTETS_PRIORITY3_LO = 0x0000065C, 303 Q81_RX_OCTETS_PRIORITY4 = 0x00000660, 304 Q81_RX_OCTETS_PRIORITY4_LO = 0x00000664, 305 Q81_RX_OCTETS_PRIORITY5 = 0x00000668, 306 Q81_RX_OCTETS_PRIORITY5_LO = 0x0000066C, 307 Q81_RX_OCTETS_PRIORITY6 = 0x00000670, 308 Q81_RX_OCTETS_PRIORITY6_LO = 0x00000674, 309 Q81_RX_OCTETS_PRIORITY7 = 0x00000678, 310 Q81_RX_OCTETS_PRIORITY7_LO = 0x0000067C, 311 Q81_TX_PKTS_PRIORITY0 = 0x00000680, 312 Q81_TX_PKTS_PRIORITY0_LO = 0x00000684, 313 Q81_TX_PKTS_PRIORITY1 = 0x00000688, 314 Q81_TX_PKTS_PRIORITY1_LO = 0x0000068C, 315 Q81_TX_PKTS_PRIORITY2 = 0x00000690, 316 Q81_TX_PKTS_PRIORITY2_LO = 0x00000694, 317 Q81_TX_PKTS_PRIORITY3 = 0x00000698, 318 Q81_TX_PKTS_PRIORITY3_LO = 0x0000069C, 319 Q81_TX_PKTS_PRIORITY4 = 0x000006A0, 320 Q81_TX_PKTS_PRIORITY4_LO = 0x000006A4, 321 Q81_TX_PKTS_PRIORITY5 = 0x000006A8, 322 Q81_TX_PKTS_PRIORITY5_LO = 0x000006AC, 323 Q81_TX_PKTS_PRIORITY6 = 0x000006B0, 324 Q81_TX_PKTS_PRIORITY6_LO = 0x000006B4, 325 Q81_TX_PKTS_PRIORITY7 = 0x000006B8, 326 Q81_TX_PKTS_PRIORITY7_LO = 0x000006BC, 327 Q81_TX_OCTETS_PRIORITY0 = 0x000006C0, 328 Q81_TX_OCTETS_PRIORITY0_LO = 0x000006C4, 329 Q81_TX_OCTETS_PRIORITY1 = 0x000006C8, 330 Q81_TX_OCTETS_PRIORITY1_LO = 0x000006CC, 331 Q81_TX_OCTETS_PRIORITY2 = 0x000006D0, 332 Q81_TX_OCTETS_PRIORITY2_LO = 0x000006D4, 333 Q81_TX_OCTETS_PRIORITY3 = 0x000006D8, 334 Q81_TX_OCTETS_PRIORITY3_LO = 0x000006DC, 335 Q81_TX_OCTETS_PRIORITY4 = 0x000006E0, 336 Q81_TX_OCTETS_PRIORITY4_LO = 0x000006E4, 337 Q81_TX_OCTETS_PRIORITY5 = 0x000006E8, 338 Q81_TX_OCTETS_PRIORITY5_LO = 0x000006EC, 339 Q81_TX_OCTETS_PRIORITY6 = 0x000006F0, 340 Q81_TX_OCTETS_PRIORITY6_LO = 0x000006F4, 341 Q81_TX_OCTETS_PRIORITY7 = 0x000006F8, 342 Q81_TX_OCTETS_PRIORITY7_LO = 0x000006FC, 343 Q81_RX_DISCARD_PRIORITY0 = 0x00000700, 344 Q81_RX_DISCARD_PRIORITY0_LO = 0x00000704, 345 Q81_RX_DISCARD_PRIORITY1 = 0x00000708, 346 Q81_RX_DISCARD_PRIORITY1_LO = 0x0000070C, 347 Q81_RX_DISCARD_PRIORITY2 = 0x00000710, 348 Q81_RX_DISCARD_PRIORITY2_LO = 0x00000714, 349 Q81_RX_DISCARD_PRIORITY3 = 0x00000718, 350 Q81_RX_DISCARD_PRIORITY3_LO = 0x0000071C, 351 Q81_RX_DISCARD_PRIORITY4 = 0x00000720, 352 Q81_RX_DISCARD_PRIORITY4_LO = 0x00000724, 353 Q81_RX_DISCARD_PRIORITY5 = 0x00000728, 354 Q81_RX_DISCARD_PRIORITY5_LO = 0x0000072C, 355 Q81_RX_DISCARD_PRIORITY6 = 0x00000730, 356 Q81_RX_DISCARD_PRIORITY6_LO = 0x00000734, 357 Q81_RX_DISCARD_PRIORITY7 = 0x00000738, 358 Q81_RX_DISCARD_PRIORITY7_LO = 0x0000073C 359 }; 360 361 static void 362 qls_mpid_seg_hdr(qls_mpid_seg_hdr_t *seg_hdr, uint32_t seg_num, 363 uint32_t seg_size, unsigned char *desc) 364 { 365 memset(seg_hdr, 0, sizeof(qls_mpid_seg_hdr_t)); 366 367 seg_hdr->cookie = Q81_MPID_COOKIE; 368 seg_hdr->seg_num = seg_num; 369 seg_hdr->seg_size = seg_size; 370 371 memcpy(seg_hdr->desc, desc, (sizeof(seg_hdr->desc))-1); 372 373 return; 374 } 375 376 static int 377 qls_wait_reg_rdy(qla_host_t *ha , uint32_t reg, uint32_t bit, uint32_t err_bit) 378 { 379 uint32_t data; 380 int count = 10; 381 382 while (count) { 383 384 data = READ_REG32(ha, reg); 385 386 if (data & err_bit) 387 return (-1); 388 else if (data & bit) 389 return (0); 390 391 qls_mdelay(__func__, 10); 392 count--; 393 } 394 return (-1); 395 } 396 397 static int 398 qls_rd_mpi_reg(qla_host_t *ha, uint32_t reg, uint32_t *data) 399 { 400 int ret; 401 402 ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY, 403 Q81_CTL_PROC_ADDR_ERR); 404 405 if (ret) 406 goto exit_qls_rd_mpi_reg; 407 408 WRITE_REG32(ha, Q81_CTL_PROC_ADDR, reg | Q81_CTL_PROC_ADDR_READ); 409 410 ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY, 411 Q81_CTL_PROC_ADDR_ERR); 412 413 if (ret) 414 goto exit_qls_rd_mpi_reg; 415 416 *data = READ_REG32(ha, Q81_CTL_PROC_DATA); 417 418 exit_qls_rd_mpi_reg: 419 return (ret); 420 } 421 422 static int 423 qls_wr_mpi_reg(qla_host_t *ha, uint32_t reg, uint32_t data) 424 { 425 int ret = 0; 426 427 ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY, 428 Q81_CTL_PROC_ADDR_ERR); 429 if (ret) 430 goto exit_qls_wr_mpi_reg; 431 432 WRITE_REG32(ha, Q81_CTL_PROC_DATA, data); 433 434 WRITE_REG32(ha, Q81_CTL_PROC_ADDR, reg); 435 436 ret = qls_wait_reg_rdy(ha, Q81_CTL_PROC_ADDR, Q81_CTL_PROC_ADDR_RDY, 437 Q81_CTL_PROC_ADDR_ERR); 438 exit_qls_wr_mpi_reg: 439 return (ret); 440 } 441 442 443 #define Q81_TEST_LOGIC_FUNC_PORT_CONFIG 0x1002 444 #define Q81_INVALID_NUM 0xFFFFFFFF 445 446 #define Q81_NIC1_FUNC_ENABLE 0x00000001 447 #define Q81_NIC1_FUNC_MASK 0x0000000e 448 #define Q81_NIC1_FUNC_SHIFT 1 449 #define Q81_NIC2_FUNC_ENABLE 0x00000010 450 #define Q81_NIC2_FUNC_MASK 0x000000e0 451 #define Q81_NIC2_FUNC_SHIFT 5 452 #define Q81_FUNCTION_SHIFT 6 453 454 static uint32_t 455 qls_get_other_fnum(qla_host_t *ha) 456 { 457 int ret; 458 uint32_t o_func; 459 uint32_t test_logic; 460 uint32_t nic1_fnum = Q81_INVALID_NUM; 461 uint32_t nic2_fnum = Q81_INVALID_NUM; 462 463 ret = qls_rd_mpi_reg(ha, Q81_TEST_LOGIC_FUNC_PORT_CONFIG, &test_logic); 464 if (ret) 465 return(Q81_INVALID_NUM); 466 467 if (test_logic & Q81_NIC1_FUNC_ENABLE) 468 nic1_fnum = (test_logic & Q81_NIC1_FUNC_MASK) >> 469 Q81_NIC1_FUNC_SHIFT; 470 471 if (test_logic & Q81_NIC2_FUNC_ENABLE) 472 nic2_fnum = (test_logic & Q81_NIC2_FUNC_MASK) >> 473 Q81_NIC2_FUNC_SHIFT; 474 475 if (ha->pci_func == 0) 476 o_func = nic2_fnum; 477 else 478 o_func = nic1_fnum; 479 480 return(o_func); 481 } 482 483 static uint32_t 484 qls_rd_ofunc_reg(qla_host_t *ha, uint32_t reg) 485 { 486 uint32_t ofunc; 487 uint32_t data; 488 int ret = 0; 489 490 ofunc = qls_get_other_fnum(ha); 491 492 if (ofunc == Q81_INVALID_NUM) 493 return(Q81_INVALID_NUM); 494 495 reg = Q81_CTL_PROC_ADDR_REG_BLOCK | (ofunc << Q81_FUNCTION_SHIFT) | reg; 496 497 ret = qls_rd_mpi_reg(ha, reg, &data); 498 499 if (ret != 0) 500 return(Q81_INVALID_NUM); 501 502 return(data); 503 } 504 505 static void 506 qls_wr_ofunc_reg(qla_host_t *ha, uint32_t reg, uint32_t value) 507 { 508 uint32_t ofunc; 509 int ret = 0; 510 511 ofunc = qls_get_other_fnum(ha); 512 513 if (ofunc == Q81_INVALID_NUM) 514 return; 515 516 reg = Q81_CTL_PROC_ADDR_REG_BLOCK | (ofunc << Q81_FUNCTION_SHIFT) | reg; 517 518 ret = qls_wr_mpi_reg(ha, reg, value); 519 520 return; 521 } 522 523 static int 524 qls_wait_ofunc_reg_rdy(qla_host_t *ha , uint32_t reg, uint32_t bit, 525 uint32_t err_bit) 526 { 527 uint32_t data; 528 int count = 10; 529 530 while (count) { 531 532 data = qls_rd_ofunc_reg(ha, reg); 533 534 if (data & err_bit) 535 return (-1); 536 else if (data & bit) 537 return (0); 538 539 qls_mdelay(__func__, 10); 540 count--; 541 } 542 return (-1); 543 } 544 545 #define Q81_XG_SERDES_ADDR_RDY BIT_31 546 #define Q81_XG_SERDES_ADDR_READ BIT_30 547 548 static int 549 qls_rd_ofunc_serdes_reg(qla_host_t *ha, uint32_t reg, uint32_t *data) 550 { 551 int ret; 552 553 /* wait for reg to come ready */ 554 ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XG_SERDES_ADDR >> 2), 555 Q81_XG_SERDES_ADDR_RDY, 0); 556 if (ret) 557 goto exit_qls_rd_ofunc_serdes_reg; 558 559 /* set up for reg read */ 560 qls_wr_ofunc_reg(ha, (Q81_CTL_XG_SERDES_ADDR >> 2), 561 (reg | Q81_XG_SERDES_ADDR_READ)); 562 563 /* wait for reg to come ready */ 564 ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XG_SERDES_ADDR >> 2), 565 Q81_XG_SERDES_ADDR_RDY, 0); 566 if (ret) 567 goto exit_qls_rd_ofunc_serdes_reg; 568 569 /* get the data */ 570 *data = qls_rd_ofunc_reg(ha, (Q81_CTL_XG_SERDES_DATA >> 2)); 571 572 exit_qls_rd_ofunc_serdes_reg: 573 return ret; 574 } 575 576 #define Q81_XGMAC_ADDR_RDY BIT_31 577 #define Q81_XGMAC_ADDR_R BIT_30 578 #define Q81_XGMAC_ADDR_XME BIT_29 579 580 static int 581 qls_rd_ofunc_xgmac_reg(qla_host_t *ha, uint32_t reg, uint32_t *data) 582 { 583 int ret = 0; 584 585 ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XGMAC_ADDR >> 2), 586 Q81_XGMAC_ADDR_RDY, Q81_XGMAC_ADDR_XME); 587 588 if (ret) 589 goto exit_qls_rd_ofunc_xgmac_reg; 590 591 qls_wr_ofunc_reg(ha, (Q81_XGMAC_ADDR_RDY >> 2), 592 (reg | Q81_XGMAC_ADDR_R)); 593 594 ret = qls_wait_ofunc_reg_rdy(ha, (Q81_CTL_XGMAC_ADDR >> 2), 595 Q81_XGMAC_ADDR_RDY, Q81_XGMAC_ADDR_XME); 596 if (ret) 597 goto exit_qls_rd_ofunc_xgmac_reg; 598 599 *data = qls_rd_ofunc_reg(ha, Q81_CTL_XGMAC_DATA); 600 601 exit_qls_rd_ofunc_xgmac_reg: 602 return ret; 603 } 604 605 static int 606 qls_rd_serdes_reg(qla_host_t *ha, uint32_t reg, uint32_t *data) 607 { 608 int ret; 609 610 ret = qls_wait_reg_rdy(ha, Q81_CTL_XG_SERDES_ADDR, 611 Q81_XG_SERDES_ADDR_RDY, 0); 612 613 if (ret) 614 goto exit_qls_rd_serdes_reg; 615 616 WRITE_REG32(ha, Q81_CTL_XG_SERDES_ADDR, \ 617 (reg | Q81_XG_SERDES_ADDR_READ)); 618 619 ret = qls_wait_reg_rdy(ha, Q81_CTL_XG_SERDES_ADDR, 620 Q81_XG_SERDES_ADDR_RDY, 0); 621 622 if (ret) 623 goto exit_qls_rd_serdes_reg; 624 625 *data = READ_REG32(ha, Q81_CTL_XG_SERDES_DATA); 626 627 exit_qls_rd_serdes_reg: 628 629 return ret; 630 } 631 632 static void 633 qls_get_both_serdes(qla_host_t *ha, uint32_t addr, uint32_t *dptr, 634 uint32_t *ind_ptr, uint32_t dvalid, uint32_t ind_valid) 635 { 636 int ret = -1; 637 638 if (dvalid) 639 ret = qls_rd_serdes_reg(ha, addr, dptr); 640 641 if (ret) 642 *dptr = Q81_BAD_DATA; 643 644 ret = -1; 645 646 if(ind_valid) 647 ret = qls_rd_ofunc_serdes_reg(ha, addr, ind_ptr); 648 649 if (ret) 650 *ind_ptr = Q81_BAD_DATA; 651 } 652 653 #define Q81_XFI1_POWERED_UP 0x00000005 654 #define Q81_XFI2_POWERED_UP 0x0000000A 655 #define Q81_XAUI_POWERED_UP 0x00000001 656 657 static int 658 qls_rd_serdes_regs(qla_host_t *ha, qls_mpi_coredump_t *mpi_dump) 659 { 660 int ret; 661 uint32_t xfi_d_valid, xfi_ind_valid, xaui_d_valid, xaui_ind_valid; 662 uint32_t temp, xaui_reg, i; 663 uint32_t *dptr, *indptr; 664 665 xfi_d_valid = xfi_ind_valid = xaui_d_valid = xaui_ind_valid = 0; 666 667 xaui_reg = 0x800; 668 669 ret = qls_rd_ofunc_serdes_reg(ha, xaui_reg, &temp); 670 if (ret) 671 temp = 0; 672 673 if ((temp & Q81_XAUI_POWERED_UP) == Q81_XAUI_POWERED_UP) 674 xaui_ind_valid = 1; 675 676 ret = qls_rd_serdes_reg(ha, xaui_reg, &temp); 677 if (ret) 678 temp = 0; 679 680 if ((temp & Q81_XAUI_POWERED_UP) == Q81_XAUI_POWERED_UP) 681 xaui_d_valid = 1; 682 683 ret = qls_rd_serdes_reg(ha, 0x1E06, &temp); 684 if (ret) 685 temp = 0; 686 687 if ((temp & Q81_XFI1_POWERED_UP) == Q81_XFI1_POWERED_UP) { 688 689 if (ha->pci_func & 1) 690 xfi_ind_valid = 1; /* NIC 2, so the indirect 691 (NIC1) xfi is up*/ 692 else 693 xfi_d_valid = 1; 694 } 695 696 if((temp & Q81_XFI2_POWERED_UP) == Q81_XFI2_POWERED_UP) { 697 698 if(ha->pci_func & 1) 699 xfi_d_valid = 1; /* NIC 2, so the indirect (NIC1) 700 xfi is up */ 701 else 702 xfi_ind_valid = 1; 703 } 704 705 if (ha->pci_func & 1) { 706 dptr = (uint32_t *)(&mpi_dump->serdes2_xaui_an); 707 indptr = (uint32_t *)(&mpi_dump->serdes1_xaui_an); 708 } else { 709 dptr = (uint32_t *)(&mpi_dump->serdes1_xaui_an); 710 indptr = (uint32_t *)(&mpi_dump->serdes2_xaui_an); 711 } 712 713 for (i = 0; i <= 0x000000034; i += 4, dptr ++, indptr ++) { 714 qls_get_both_serdes(ha, i, dptr, indptr, 715 xaui_d_valid, xaui_ind_valid); 716 } 717 718 if (ha->pci_func & 1) { 719 dptr = (uint32_t *)(&mpi_dump->serdes2_xaui_hss_pcs); 720 indptr = (uint32_t *)(&mpi_dump->serdes1_xaui_hss_pcs); 721 } else { 722 dptr = (uint32_t *)(&mpi_dump->serdes1_xaui_hss_pcs); 723 indptr = (uint32_t *)(&mpi_dump->serdes2_xaui_hss_pcs); 724 } 725 726 for (i = 0x800; i <= 0x880; i += 4, dptr ++, indptr ++) { 727 qls_get_both_serdes(ha, i, dptr, indptr, 728 xaui_d_valid, xaui_ind_valid); 729 } 730 731 if (ha->pci_func & 1) { 732 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_an); 733 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_an); 734 } else { 735 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_an); 736 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_an); 737 } 738 739 for (i = 0x1000; i <= 0x1034; i += 4, dptr ++, indptr ++) { 740 qls_get_both_serdes(ha, i, dptr, indptr, 741 xfi_d_valid, xfi_ind_valid); 742 } 743 744 if (ha->pci_func & 1) { 745 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_train); 746 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_train); 747 } else { 748 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_train); 749 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_train); 750 } 751 752 for (i = 0x1050; i <= 0x107c; i += 4, dptr ++, indptr ++) { 753 qls_get_both_serdes(ha, i, dptr, indptr, 754 xfi_d_valid, xfi_ind_valid); 755 } 756 757 if (ha->pci_func & 1) { 758 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pcs); 759 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pcs); 760 } else { 761 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pcs); 762 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pcs); 763 } 764 765 for (i = 0x1800; i <= 0x1838; i += 4, dptr++, indptr ++) { 766 qls_get_both_serdes(ha, i, dptr, indptr, 767 xfi_d_valid, xfi_ind_valid); 768 } 769 770 if (ha->pci_func & 1) { 771 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_tx); 772 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_tx); 773 } else { 774 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_tx); 775 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_tx); 776 } 777 778 for (i = 0x1c00; i <= 0x1c1f; i++, dptr ++, indptr ++) { 779 qls_get_both_serdes(ha, i, dptr, indptr, 780 xfi_d_valid, xfi_ind_valid); 781 } 782 783 if (ha->pci_func & 1) { 784 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_rx); 785 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_rx); 786 } else { 787 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_rx); 788 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_rx); 789 } 790 791 for (i = 0x1c40; i <= 0x1c5f; i++, dptr ++, indptr ++) { 792 qls_get_both_serdes(ha, i, dptr, indptr, 793 xfi_d_valid, xfi_ind_valid); 794 } 795 796 if (ha->pci_func & 1) { 797 dptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pll); 798 indptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pll); 799 } else { 800 dptr = (uint32_t *)(&mpi_dump->serdes1_xfi_hss_pll); 801 indptr = (uint32_t *)(&mpi_dump->serdes2_xfi_hss_pll); 802 } 803 804 for (i = 0x1e00; i <= 0x1e1f; i++, dptr ++, indptr ++) { 805 qls_get_both_serdes(ha, i, dptr, indptr, 806 xfi_d_valid, xfi_ind_valid); 807 } 808 809 return(0); 810 } 811 812 static int 813 qls_unpause_mpi_risc(qla_host_t *ha) 814 { 815 uint32_t data; 816 817 data = READ_REG32(ha, Q81_CTL_HOST_CMD_STATUS); 818 819 if (!(data & Q81_CTL_HCS_RISC_PAUSED)) 820 return -1; 821 822 WRITE_REG32(ha, Q81_CTL_HOST_CMD_STATUS, \ 823 Q81_CTL_HCS_CMD_CLR_RISC_PAUSE); 824 825 return 0; 826 } 827 828 static int 829 qls_pause_mpi_risc(qla_host_t *ha) 830 { 831 uint32_t data; 832 int count = 10; 833 834 WRITE_REG32(ha, Q81_CTL_HOST_CMD_STATUS, \ 835 Q81_CTL_HCS_CMD_SET_RISC_PAUSE); 836 837 do { 838 data = READ_REG32(ha, Q81_CTL_HOST_CMD_STATUS); 839 840 if (data & Q81_CTL_HCS_RISC_PAUSED) 841 break; 842 843 qls_mdelay(__func__, 10); 844 845 count--; 846 847 } while (count); 848 849 return ((count == 0) ? -1 : 0); 850 } 851 852 static void 853 qls_get_intr_states(qla_host_t *ha, uint32_t *buf) 854 { 855 int i; 856 857 for (i = 0; i < MAX_RX_RINGS; i++, buf++) { 858 859 WRITE_REG32(ha, Q81_CTL_INTR_ENABLE, (0x037f0300 + i)); 860 861 *buf = READ_REG32(ha, Q81_CTL_INTR_ENABLE); 862 } 863 } 864 865 static int 866 qls_rd_xgmac_reg(qla_host_t *ha, uint32_t reg, uint32_t*data) 867 { 868 int ret = 0; 869 870 ret = qls_wait_reg_rdy(ha, Q81_CTL_XGMAC_ADDR, Q81_XGMAC_ADDR_RDY, 871 Q81_XGMAC_ADDR_XME); 872 if (ret) 873 goto exit_qls_rd_xgmac_reg; 874 875 WRITE_REG32(ha, Q81_CTL_XGMAC_ADDR, (reg | Q81_XGMAC_ADDR_R)); 876 877 ret = qls_wait_reg_rdy(ha, Q81_CTL_XGMAC_ADDR, Q81_XGMAC_ADDR_RDY, 878 Q81_XGMAC_ADDR_XME); 879 if (ret) 880 goto exit_qls_rd_xgmac_reg; 881 882 *data = READ_REG32(ha, Q81_CTL_XGMAC_DATA); 883 884 exit_qls_rd_xgmac_reg: 885 return ret; 886 } 887 888 static int 889 qls_rd_xgmac_regs(qla_host_t *ha, uint32_t *buf, uint32_t o_func) 890 { 891 int ret = 0; 892 int i; 893 894 for (i = 0; i < Q81_XGMAC_REGISTER_END; i += 4, buf ++) { 895 896 switch (i) { 897 case Q81_PAUSE_SRC_LO : 898 case Q81_PAUSE_SRC_HI : 899 case Q81_GLOBAL_CFG : 900 case Q81_TX_CFG : 901 case Q81_RX_CFG : 902 case Q81_FLOW_CTL : 903 case Q81_PAUSE_OPCODE : 904 case Q81_PAUSE_TIMER : 905 case Q81_PAUSE_FRM_DEST_LO : 906 case Q81_PAUSE_FRM_DEST_HI : 907 case Q81_MAC_TX_PARAMS : 908 case Q81_MAC_RX_PARAMS : 909 case Q81_MAC_SYS_INT : 910 case Q81_MAC_SYS_INT_MASK : 911 case Q81_MAC_MGMT_INT : 912 case Q81_MAC_MGMT_IN_MASK : 913 case Q81_EXT_ARB_MODE : 914 case Q81_TX_PKTS : 915 case Q81_TX_PKTS_LO : 916 case Q81_TX_BYTES : 917 case Q81_TX_BYTES_LO : 918 case Q81_TX_MCAST_PKTS : 919 case Q81_TX_MCAST_PKTS_LO : 920 case Q81_TX_BCAST_PKTS : 921 case Q81_TX_BCAST_PKTS_LO : 922 case Q81_TX_UCAST_PKTS : 923 case Q81_TX_UCAST_PKTS_LO : 924 case Q81_TX_CTL_PKTS : 925 case Q81_TX_CTL_PKTS_LO : 926 case Q81_TX_PAUSE_PKTS : 927 case Q81_TX_PAUSE_PKTS_LO : 928 case Q81_TX_64_PKT : 929 case Q81_TX_64_PKT_LO : 930 case Q81_TX_65_TO_127_PKT : 931 case Q81_TX_65_TO_127_PKT_LO : 932 case Q81_TX_128_TO_255_PKT : 933 case Q81_TX_128_TO_255_PKT_LO : 934 case Q81_TX_256_511_PKT : 935 case Q81_TX_256_511_PKT_LO : 936 case Q81_TX_512_TO_1023_PKT : 937 case Q81_TX_512_TO_1023_PKT_LO : 938 case Q81_TX_1024_TO_1518_PKT : 939 case Q81_TX_1024_TO_1518_PKT_LO : 940 case Q81_TX_1519_TO_MAX_PKT : 941 case Q81_TX_1519_TO_MAX_PKT_LO : 942 case Q81_TX_UNDERSIZE_PKT : 943 case Q81_TX_UNDERSIZE_PKT_LO : 944 case Q81_TX_OVERSIZE_PKT : 945 case Q81_TX_OVERSIZE_PKT_LO : 946 case Q81_RX_HALF_FULL_DET : 947 case Q81_TX_HALF_FULL_DET_LO : 948 case Q81_RX_OVERFLOW_DET : 949 case Q81_TX_OVERFLOW_DET_LO : 950 case Q81_RX_HALF_FULL_MASK : 951 case Q81_TX_HALF_FULL_MASK_LO : 952 case Q81_RX_OVERFLOW_MASK : 953 case Q81_TX_OVERFLOW_MASK_LO : 954 case Q81_STAT_CNT_CTL : 955 case Q81_AUX_RX_HALF_FULL_DET : 956 case Q81_AUX_TX_HALF_FULL_DET : 957 case Q81_AUX_RX_OVERFLOW_DET : 958 case Q81_AUX_TX_OVERFLOW_DET : 959 case Q81_AUX_RX_HALF_FULL_MASK : 960 case Q81_AUX_TX_HALF_FULL_MASK : 961 case Q81_AUX_RX_OVERFLOW_MASK : 962 case Q81_AUX_TX_OVERFLOW_MASK : 963 case Q81_RX_BYTES : 964 case Q81_RX_BYTES_LO : 965 case Q81_RX_BYTES_OK : 966 case Q81_RX_BYTES_OK_LO : 967 case Q81_RX_PKTS : 968 case Q81_RX_PKTS_LO : 969 case Q81_RX_PKTS_OK : 970 case Q81_RX_PKTS_OK_LO : 971 case Q81_RX_BCAST_PKTS : 972 case Q81_RX_BCAST_PKTS_LO : 973 case Q81_RX_MCAST_PKTS : 974 case Q81_RX_MCAST_PKTS_LO : 975 case Q81_RX_UCAST_PKTS : 976 case Q81_RX_UCAST_PKTS_LO : 977 case Q81_RX_UNDERSIZE_PKTS : 978 case Q81_RX_UNDERSIZE_PKTS_LO : 979 case Q81_RX_OVERSIZE_PKTS : 980 case Q81_RX_OVERSIZE_PKTS_LO : 981 case Q81_RX_JABBER_PKTS : 982 case Q81_RX_JABBER_PKTS_LO : 983 case Q81_RX_UNDERSIZE_FCERR_PKTS : 984 case Q81_RX_UNDERSIZE_FCERR_PKTS_LO : 985 case Q81_RX_DROP_EVENTS : 986 case Q81_RX_DROP_EVENTS_LO : 987 case Q81_RX_FCERR_PKTS : 988 case Q81_RX_FCERR_PKTS_LO : 989 case Q81_RX_ALIGN_ERR : 990 case Q81_RX_ALIGN_ERR_LO : 991 case Q81_RX_SYMBOL_ERR : 992 case Q81_RX_SYMBOL_ERR_LO : 993 case Q81_RX_MAC_ERR : 994 case Q81_RX_MAC_ERR_LO : 995 case Q81_RX_CTL_PKTS : 996 case Q81_RX_CTL_PKTS_LO : 997 case Q81_RX_PAUSE_PKTS : 998 case Q81_RX_PAUSE_PKTS_LO : 999 case Q81_RX_64_PKTS : 1000 case Q81_RX_64_PKTS_LO : 1001 case Q81_RX_65_TO_127_PKTS : 1002 case Q81_RX_65_TO_127_PKTS_LO : 1003 case Q81_RX_128_255_PKTS : 1004 case Q81_RX_128_255_PKTS_LO : 1005 case Q81_RX_256_511_PKTS : 1006 case Q81_RX_256_511_PKTS_LO : 1007 case Q81_RX_512_TO_1023_PKTS : 1008 case Q81_RX_512_TO_1023_PKTS_LO : 1009 case Q81_RX_1024_TO_1518_PKTS : 1010 case Q81_RX_1024_TO_1518_PKTS_LO : 1011 case Q81_RX_1519_TO_MAX_PKTS : 1012 case Q81_RX_1519_TO_MAX_PKTS_LO : 1013 case Q81_RX_LEN_ERR_PKTS : 1014 case Q81_RX_LEN_ERR_PKTS_LO : 1015 case Q81_MDIO_TX_DATA : 1016 case Q81_MDIO_RX_DATA : 1017 case Q81_MDIO_CMD : 1018 case Q81_MDIO_PHY_ADDR : 1019 case Q81_MDIO_PORT : 1020 case Q81_MDIO_STATUS : 1021 case Q81_TX_CBFC_PAUSE_FRAMES0 : 1022 case Q81_TX_CBFC_PAUSE_FRAMES0_LO : 1023 case Q81_TX_CBFC_PAUSE_FRAMES1 : 1024 case Q81_TX_CBFC_PAUSE_FRAMES1_LO : 1025 case Q81_TX_CBFC_PAUSE_FRAMES2 : 1026 case Q81_TX_CBFC_PAUSE_FRAMES2_LO : 1027 case Q81_TX_CBFC_PAUSE_FRAMES3 : 1028 case Q81_TX_CBFC_PAUSE_FRAMES3_LO : 1029 case Q81_TX_CBFC_PAUSE_FRAMES4 : 1030 case Q81_TX_CBFC_PAUSE_FRAMES4_LO : 1031 case Q81_TX_CBFC_PAUSE_FRAMES5 : 1032 case Q81_TX_CBFC_PAUSE_FRAMES5_LO : 1033 case Q81_TX_CBFC_PAUSE_FRAMES6 : 1034 case Q81_TX_CBFC_PAUSE_FRAMES6_LO : 1035 case Q81_TX_CBFC_PAUSE_FRAMES7 : 1036 case Q81_TX_CBFC_PAUSE_FRAMES7_LO : 1037 case Q81_TX_FCOE_PKTS : 1038 case Q81_TX_FCOE_PKTS_LO : 1039 case Q81_TX_MGMT_PKTS : 1040 case Q81_TX_MGMT_PKTS_LO : 1041 case Q81_RX_CBFC_PAUSE_FRAMES0 : 1042 case Q81_RX_CBFC_PAUSE_FRAMES0_LO : 1043 case Q81_RX_CBFC_PAUSE_FRAMES1 : 1044 case Q81_RX_CBFC_PAUSE_FRAMES1_LO : 1045 case Q81_RX_CBFC_PAUSE_FRAMES2 : 1046 case Q81_RX_CBFC_PAUSE_FRAMES2_LO : 1047 case Q81_RX_CBFC_PAUSE_FRAMES3 : 1048 case Q81_RX_CBFC_PAUSE_FRAMES3_LO : 1049 case Q81_RX_CBFC_PAUSE_FRAMES4 : 1050 case Q81_RX_CBFC_PAUSE_FRAMES4_LO : 1051 case Q81_RX_CBFC_PAUSE_FRAMES5 : 1052 case Q81_RX_CBFC_PAUSE_FRAMES5_LO : 1053 case Q81_RX_CBFC_PAUSE_FRAMES6 : 1054 case Q81_RX_CBFC_PAUSE_FRAMES6_LO : 1055 case Q81_RX_CBFC_PAUSE_FRAMES7 : 1056 case Q81_RX_CBFC_PAUSE_FRAMES7_LO : 1057 case Q81_RX_FCOE_PKTS : 1058 case Q81_RX_FCOE_PKTS_LO : 1059 case Q81_RX_MGMT_PKTS : 1060 case Q81_RX_MGMT_PKTS_LO : 1061 case Q81_RX_NIC_FIFO_DROP : 1062 case Q81_RX_NIC_FIFO_DROP_LO : 1063 case Q81_RX_FCOE_FIFO_DROP : 1064 case Q81_RX_FCOE_FIFO_DROP_LO : 1065 case Q81_RX_MGMT_FIFO_DROP : 1066 case Q81_RX_MGMT_FIFO_DROP_LO : 1067 case Q81_RX_PKTS_PRIORITY0 : 1068 case Q81_RX_PKTS_PRIORITY0_LO : 1069 case Q81_RX_PKTS_PRIORITY1 : 1070 case Q81_RX_PKTS_PRIORITY1_LO : 1071 case Q81_RX_PKTS_PRIORITY2 : 1072 case Q81_RX_PKTS_PRIORITY2_LO : 1073 case Q81_RX_PKTS_PRIORITY3 : 1074 case Q81_RX_PKTS_PRIORITY3_LO : 1075 case Q81_RX_PKTS_PRIORITY4 : 1076 case Q81_RX_PKTS_PRIORITY4_LO : 1077 case Q81_RX_PKTS_PRIORITY5 : 1078 case Q81_RX_PKTS_PRIORITY5_LO : 1079 case Q81_RX_PKTS_PRIORITY6 : 1080 case Q81_RX_PKTS_PRIORITY6_LO : 1081 case Q81_RX_PKTS_PRIORITY7 : 1082 case Q81_RX_PKTS_PRIORITY7_LO : 1083 case Q81_RX_OCTETS_PRIORITY0 : 1084 case Q81_RX_OCTETS_PRIORITY0_LO : 1085 case Q81_RX_OCTETS_PRIORITY1 : 1086 case Q81_RX_OCTETS_PRIORITY1_LO : 1087 case Q81_RX_OCTETS_PRIORITY2 : 1088 case Q81_RX_OCTETS_PRIORITY2_LO : 1089 case Q81_RX_OCTETS_PRIORITY3 : 1090 case Q81_RX_OCTETS_PRIORITY3_LO : 1091 case Q81_RX_OCTETS_PRIORITY4 : 1092 case Q81_RX_OCTETS_PRIORITY4_LO : 1093 case Q81_RX_OCTETS_PRIORITY5 : 1094 case Q81_RX_OCTETS_PRIORITY5_LO : 1095 case Q81_RX_OCTETS_PRIORITY6 : 1096 case Q81_RX_OCTETS_PRIORITY6_LO : 1097 case Q81_RX_OCTETS_PRIORITY7 : 1098 case Q81_RX_OCTETS_PRIORITY7_LO : 1099 case Q81_TX_PKTS_PRIORITY0 : 1100 case Q81_TX_PKTS_PRIORITY0_LO : 1101 case Q81_TX_PKTS_PRIORITY1 : 1102 case Q81_TX_PKTS_PRIORITY1_LO : 1103 case Q81_TX_PKTS_PRIORITY2 : 1104 case Q81_TX_PKTS_PRIORITY2_LO : 1105 case Q81_TX_PKTS_PRIORITY3 : 1106 case Q81_TX_PKTS_PRIORITY3_LO : 1107 case Q81_TX_PKTS_PRIORITY4 : 1108 case Q81_TX_PKTS_PRIORITY4_LO : 1109 case Q81_TX_PKTS_PRIORITY5 : 1110 case Q81_TX_PKTS_PRIORITY5_LO : 1111 case Q81_TX_PKTS_PRIORITY6 : 1112 case Q81_TX_PKTS_PRIORITY6_LO : 1113 case Q81_TX_PKTS_PRIORITY7 : 1114 case Q81_TX_PKTS_PRIORITY7_LO : 1115 case Q81_TX_OCTETS_PRIORITY0 : 1116 case Q81_TX_OCTETS_PRIORITY0_LO : 1117 case Q81_TX_OCTETS_PRIORITY1 : 1118 case Q81_TX_OCTETS_PRIORITY1_LO : 1119 case Q81_TX_OCTETS_PRIORITY2 : 1120 case Q81_TX_OCTETS_PRIORITY2_LO : 1121 case Q81_TX_OCTETS_PRIORITY3 : 1122 case Q81_TX_OCTETS_PRIORITY3_LO : 1123 case Q81_TX_OCTETS_PRIORITY4 : 1124 case Q81_TX_OCTETS_PRIORITY4_LO : 1125 case Q81_TX_OCTETS_PRIORITY5 : 1126 case Q81_TX_OCTETS_PRIORITY5_LO : 1127 case Q81_TX_OCTETS_PRIORITY6 : 1128 case Q81_TX_OCTETS_PRIORITY6_LO : 1129 case Q81_TX_OCTETS_PRIORITY7 : 1130 case Q81_TX_OCTETS_PRIORITY7_LO : 1131 case Q81_RX_DISCARD_PRIORITY0 : 1132 case Q81_RX_DISCARD_PRIORITY0_LO : 1133 case Q81_RX_DISCARD_PRIORITY1 : 1134 case Q81_RX_DISCARD_PRIORITY1_LO : 1135 case Q81_RX_DISCARD_PRIORITY2 : 1136 case Q81_RX_DISCARD_PRIORITY2_LO : 1137 case Q81_RX_DISCARD_PRIORITY3 : 1138 case Q81_RX_DISCARD_PRIORITY3_LO : 1139 case Q81_RX_DISCARD_PRIORITY4 : 1140 case Q81_RX_DISCARD_PRIORITY4_LO : 1141 case Q81_RX_DISCARD_PRIORITY5 : 1142 case Q81_RX_DISCARD_PRIORITY5_LO : 1143 case Q81_RX_DISCARD_PRIORITY6 : 1144 case Q81_RX_DISCARD_PRIORITY6_LO : 1145 case Q81_RX_DISCARD_PRIORITY7 : 1146 case Q81_RX_DISCARD_PRIORITY7_LO : 1147 1148 if (o_func) 1149 ret = qls_rd_ofunc_xgmac_reg(ha, 1150 i, buf); 1151 else 1152 ret = qls_rd_xgmac_reg(ha, i, buf); 1153 1154 if (ret) 1155 *buf = Q81_BAD_DATA; 1156 1157 break; 1158 1159 default: 1160 break; 1161 1162 } 1163 } 1164 return 0; 1165 } 1166 1167 static int 1168 qls_get_mpi_regs(qla_host_t *ha, uint32_t *buf, uint32_t offset, uint32_t count) 1169 { 1170 int i, ret = 0; 1171 1172 for (i = 0; i < count; i++, buf++) { 1173 1174 ret = qls_rd_mpi_reg(ha, (offset + i), buf); 1175 1176 if (ret) 1177 return ret; 1178 } 1179 1180 return (ret); 1181 } 1182 1183 static int 1184 qls_get_mpi_shadow_regs(qla_host_t *ha, uint32_t *buf) 1185 { 1186 uint32_t i; 1187 int ret; 1188 1189 #define Q81_RISC_124 0x0000007c 1190 #define Q81_RISC_127 0x0000007f 1191 #define Q81_SHADOW_OFFSET 0xb0000000 1192 1193 for (i = 0; i < Q81_MPI_CORE_SH_REGS_CNT; i++, buf++) { 1194 1195 ret = qls_wr_mpi_reg(ha, 1196 (Q81_CTL_PROC_ADDR_RISC_INT_REG | Q81_RISC_124), 1197 (Q81_SHADOW_OFFSET | i << 20)); 1198 if (ret) 1199 goto exit_qls_get_mpi_shadow_regs; 1200 1201 ret = qls_mpi_risc_rd_reg(ha, 1202 (Q81_CTL_PROC_ADDR_RISC_INT_REG | Q81_RISC_127), 1203 buf); 1204 if (ret) 1205 goto exit_qls_get_mpi_shadow_regs; 1206 } 1207 1208 exit_qls_get_mpi_shadow_regs: 1209 return ret; 1210 } 1211 1212 #define SYS_CLOCK (0x00) 1213 #define PCI_CLOCK (0x80) 1214 #define FC_CLOCK (0x140) 1215 #define XGM_CLOCK (0x180) 1216 1217 #define Q81_ADDRESS_REGISTER_ENABLE 0x00010000 1218 #define Q81_UP 0x00008000 1219 #define Q81_MAX_MUX 0x40 1220 #define Q81_MAX_MODULES 0x1F 1221 1222 static uint32_t * 1223 qls_get_probe(qla_host_t *ha, uint32_t clock, uint8_t *valid, uint32_t *buf) 1224 { 1225 uint32_t module, mux_sel, probe, lo_val, hi_val; 1226 1227 for (module = 0; module < Q81_MAX_MODULES; module ++) { 1228 1229 if (valid[module]) { 1230 1231 for (mux_sel = 0; mux_sel < Q81_MAX_MUX; mux_sel++) { 1232 1233 probe = clock | Q81_ADDRESS_REGISTER_ENABLE | 1234 mux_sel | (module << 9); 1235 WRITE_REG32(ha, Q81_CTL_XG_PROBE_MUX_ADDR,\ 1236 probe); 1237 1238 lo_val = READ_REG32(ha,\ 1239 Q81_CTL_XG_PROBE_MUX_DATA); 1240 1241 if (mux_sel == 0) { 1242 *buf = probe; 1243 buf ++; 1244 } 1245 1246 probe |= Q81_UP; 1247 1248 WRITE_REG32(ha, Q81_CTL_XG_PROBE_MUX_ADDR,\ 1249 probe); 1250 hi_val = READ_REG32(ha,\ 1251 Q81_CTL_XG_PROBE_MUX_DATA); 1252 1253 *buf = lo_val; 1254 buf++; 1255 *buf = hi_val; 1256 buf++; 1257 } 1258 } 1259 } 1260 1261 return(buf); 1262 } 1263 1264 static int 1265 qls_get_probe_dump(qla_host_t *ha, uint32_t *buf) 1266 { 1267 1268 uint8_t sys_clock_valid_modules[0x20] = { 1269 1, // 0x00 1270 1, // 0x01 1271 1, // 0x02 1272 0, // 0x03 1273 1, // 0x04 1274 1, // 0x05 1275 1, // 0x06 1276 1, // 0x07 1277 1, // 0x08 1278 1, // 0x09 1279 1, // 0x0A 1280 1, // 0x0B 1281 1, // 0x0C 1282 1, // 0x0D 1283 1, // 0x0E 1284 0, // 0x0F 1285 1, // 0x10 1286 1, // 0x11 1287 1, // 0x12 1288 1, // 0x13 1289 0, // 0x14 1290 0, // 0x15 1291 0, // 0x16 1292 0, // 0x17 1293 0, // 0x18 1294 0, // 0x19 1295 0, // 0x1A 1296 0, // 0x1B 1297 0, // 0x1C 1298 0, // 0x1D 1299 0, // 0x1E 1300 0 // 0x1F 1301 }; 1302 1303 1304 uint8_t pci_clock_valid_modules[0x20] = { 1305 1, // 0x00 1306 0, // 0x01 1307 0, // 0x02 1308 0, // 0x03 1309 0, // 0x04 1310 0, // 0x05 1311 1, // 0x06 1312 1, // 0x07 1313 0, // 0x08 1314 0, // 0x09 1315 0, // 0x0A 1316 0, // 0x0B 1317 0, // 0x0C 1318 0, // 0x0D 1319 1, // 0x0E 1320 0, // 0x0F 1321 0, // 0x10 1322 0, // 0x11 1323 0, // 0x12 1324 0, // 0x13 1325 0, // 0x14 1326 0, // 0x15 1327 0, // 0x16 1328 0, // 0x17 1329 0, // 0x18 1330 0, // 0x19 1331 0, // 0x1A 1332 0, // 0x1B 1333 0, // 0x1C 1334 0, // 0x1D 1335 0, // 0x1E 1336 0 // 0x1F 1337 }; 1338 1339 1340 uint8_t xgm_clock_valid_modules[0x20] = { 1341 1, // 0x00 1342 0, // 0x01 1343 0, // 0x02 1344 1, // 0x03 1345 0, // 0x04 1346 0, // 0x05 1347 0, // 0x06 1348 0, // 0x07 1349 1, // 0x08 1350 1, // 0x09 1351 0, // 0x0A 1352 0, // 0x0B 1353 1, // 0x0C 1354 1, // 0x0D 1355 1, // 0x0E 1356 0, // 0x0F 1357 1, // 0x10 1358 1, // 0x11 1359 0, // 0x12 1360 0, // 0x13 1361 0, // 0x14 1362 0, // 0x15 1363 0, // 0x16 1364 0, // 0x17 1365 0, // 0x18 1366 0, // 0x19 1367 0, // 0x1A 1368 0, // 0x1B 1369 0, // 0x1C 1370 0, // 0x1D 1371 0, // 0x1E 1372 0 // 0x1F 1373 }; 1374 1375 uint8_t fc_clock_valid_modules[0x20] = { 1376 1, // 0x00 1377 0, // 0x01 1378 0, // 0x02 1379 0, // 0x03 1380 0, // 0x04 1381 0, // 0x05 1382 0, // 0x06 1383 0, // 0x07 1384 0, // 0x08 1385 0, // 0x09 1386 0, // 0x0A 1387 0, // 0x0B 1388 1, // 0x0C 1389 1, // 0x0D 1390 0, // 0x0E 1391 0, // 0x0F 1392 0, // 0x10 1393 0, // 0x11 1394 0, // 0x12 1395 0, // 0x13 1396 0, // 0x14 1397 0, // 0x15 1398 0, // 0x16 1399 0, // 0x17 1400 0, // 0x18 1401 0, // 0x19 1402 0, // 0x1A 1403 0, // 0x1B 1404 0, // 0x1C 1405 0, // 0x1D 1406 0, // 0x1E 1407 0 // 0x1F 1408 }; 1409 1410 qls_wr_mpi_reg(ha, 0x100e, 0x18a20000); 1411 1412 buf = qls_get_probe(ha, SYS_CLOCK, sys_clock_valid_modules, buf); 1413 1414 buf = qls_get_probe(ha, PCI_CLOCK, pci_clock_valid_modules, buf); 1415 1416 buf = qls_get_probe(ha, XGM_CLOCK, xgm_clock_valid_modules, buf); 1417 1418 buf = qls_get_probe(ha, FC_CLOCK, fc_clock_valid_modules, buf); 1419 1420 return(0); 1421 } 1422 1423 static void 1424 qls_get_ridx_registers(qla_host_t *ha, uint32_t *buf) 1425 { 1426 uint32_t type, idx, idx_max; 1427 uint32_t r_idx; 1428 uint32_t r_data; 1429 uint32_t val; 1430 1431 for (type = 0; type < 4; type ++) { 1432 if (type < 2) 1433 idx_max = 8; 1434 else 1435 idx_max = 16; 1436 1437 for (idx = 0; idx < idx_max; idx ++) { 1438 1439 val = 0x04000000 | (type << 16) | (idx << 8); 1440 WRITE_REG32(ha, Q81_CTL_ROUTING_INDEX, val); 1441 1442 r_idx = 0; 1443 while ((r_idx & 0x40000000) == 0) 1444 r_idx = READ_REG32(ha, Q81_CTL_ROUTING_INDEX); 1445 1446 r_data = READ_REG32(ha, Q81_CTL_ROUTING_DATA); 1447 1448 *buf = type; 1449 buf ++; 1450 *buf = idx; 1451 buf ++; 1452 *buf = r_idx; 1453 buf ++; 1454 *buf = r_data; 1455 buf ++; 1456 } 1457 } 1458 } 1459 1460 static void 1461 qls_get_mac_proto_regs(qla_host_t *ha, uint32_t* buf) 1462 { 1463 1464 #define Q81_RS_AND_ADR 0x06000000 1465 #define Q81_RS_ONLY 0x04000000 1466 #define Q81_NUM_TYPES 10 1467 1468 uint32_t result_index, result_data; 1469 uint32_t type; 1470 uint32_t index; 1471 uint32_t offset; 1472 uint32_t val; 1473 uint32_t initial_val; 1474 uint32_t max_index; 1475 uint32_t max_offset; 1476 1477 for (type = 0; type < Q81_NUM_TYPES; type ++) { 1478 switch (type) { 1479 1480 case 0: // CAM 1481 initial_val = Q81_RS_AND_ADR; 1482 max_index = 512; 1483 max_offset = 3; 1484 break; 1485 1486 case 1: // Multicast MAC Address 1487 initial_val = Q81_RS_ONLY; 1488 max_index = 32; 1489 max_offset = 2; 1490 break; 1491 1492 case 2: // VLAN filter mask 1493 case 3: // MC filter mask 1494 initial_val = Q81_RS_ONLY; 1495 max_index = 4096; 1496 max_offset = 1; 1497 break; 1498 1499 case 4: // FC MAC addresses 1500 initial_val = Q81_RS_ONLY; 1501 max_index = 4; 1502 max_offset = 2; 1503 break; 1504 1505 case 5: // Mgmt MAC addresses 1506 initial_val = Q81_RS_ONLY; 1507 max_index = 8; 1508 max_offset = 2; 1509 break; 1510 1511 case 6: // Mgmt VLAN addresses 1512 initial_val = Q81_RS_ONLY; 1513 max_index = 16; 1514 max_offset = 1; 1515 break; 1516 1517 case 7: // Mgmt IPv4 address 1518 initial_val = Q81_RS_ONLY; 1519 max_index = 4; 1520 max_offset = 1; 1521 break; 1522 1523 case 8: // Mgmt IPv6 address 1524 initial_val = Q81_RS_ONLY; 1525 max_index = 4; 1526 max_offset = 4; 1527 break; 1528 1529 case 9: // Mgmt TCP/UDP Dest port 1530 initial_val = Q81_RS_ONLY; 1531 max_index = 4; 1532 max_offset = 1; 1533 break; 1534 1535 default: 1536 printf("Bad type!!! 0x%08x\n", type); 1537 max_index = 0; 1538 max_offset = 0; 1539 break; 1540 } 1541 1542 for (index = 0; index < max_index; index ++) { 1543 1544 for (offset = 0; offset < max_offset; offset ++) { 1545 1546 val = initial_val | (type << 16) | 1547 (index << 4) | (offset); 1548 1549 WRITE_REG32(ha, Q81_CTL_MAC_PROTO_ADDR_INDEX,\ 1550 val); 1551 1552 result_index = 0; 1553 1554 while ((result_index & 0x40000000) == 0) 1555 result_index = 1556 READ_REG32(ha, \ 1557 Q81_CTL_MAC_PROTO_ADDR_INDEX); 1558 1559 result_data = READ_REG32(ha,\ 1560 Q81_CTL_MAC_PROTO_ADDR_DATA); 1561 1562 *buf = result_index; 1563 buf ++; 1564 1565 *buf = result_data; 1566 buf ++; 1567 } 1568 } 1569 } 1570 } 1571 1572 static int 1573 qls_get_ets_regs(qla_host_t *ha, uint32_t *buf) 1574 { 1575 int ret = 0; 1576 int i; 1577 1578 for(i = 0; i < 8; i ++, buf ++) { 1579 WRITE_REG32(ha, Q81_CTL_NIC_ENH_TX_SCHD, \ 1580 ((i << 29) | 0x08000000)); 1581 *buf = READ_REG32(ha, Q81_CTL_NIC_ENH_TX_SCHD); 1582 } 1583 1584 for(i = 0; i < 2; i ++, buf ++) { 1585 WRITE_REG32(ha, Q81_CTL_CNA_ENH_TX_SCHD, \ 1586 ((i << 29) | 0x08000000)); 1587 *buf = READ_REG32(ha, Q81_CTL_CNA_ENH_TX_SCHD); 1588 } 1589 1590 return ret; 1591 } 1592 1593 int 1594 qls_mpi_core_dump(qla_host_t *ha) 1595 { 1596 int ret; 1597 int i; 1598 uint32_t reg, reg_val; 1599 1600 qls_mpi_coredump_t *mpi_dump = &ql_mpi_coredump; 1601 1602 ret = qls_pause_mpi_risc(ha); 1603 if (ret) { 1604 printf("Failed RISC pause. Status = 0x%.08x\n",ret); 1605 return(-1); 1606 } 1607 1608 memset(&(mpi_dump->mpi_global_header), 0, 1609 sizeof(qls_mpid_glbl_hdr_t)); 1610 1611 mpi_dump->mpi_global_header.cookie = Q81_MPID_COOKIE; 1612 mpi_dump->mpi_global_header.hdr_size = 1613 sizeof(qls_mpid_glbl_hdr_t); 1614 mpi_dump->mpi_global_header.img_size = 1615 sizeof(qls_mpi_coredump_t); 1616 1617 memcpy(mpi_dump->mpi_global_header.id, "MPI Coredump", 1618 sizeof(mpi_dump->mpi_global_header.id)); 1619 1620 qls_mpid_seg_hdr(&mpi_dump->nic1_regs_seg_hdr, 1621 Q81_NIC1_CONTROL_SEG_NUM, 1622 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic1_regs)), 1623 "NIC1 Registers"); 1624 1625 qls_mpid_seg_hdr(&mpi_dump->nic2_regs_seg_hdr, 1626 Q81_NIC2_CONTROL_SEG_NUM, 1627 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic2_regs)), 1628 "NIC2 Registers"); 1629 1630 qls_mpid_seg_hdr(&mpi_dump->xgmac1_seg_hdr, 1631 Q81_NIC1_XGMAC_SEG_NUM, 1632 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->xgmac1)), 1633 "NIC1 XGMac Registers"); 1634 1635 qls_mpid_seg_hdr(&mpi_dump->xgmac2_seg_hdr, 1636 Q81_NIC2_XGMAC_SEG_NUM, 1637 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->xgmac2)), 1638 "NIC2 XGMac Registers"); 1639 1640 if (ha->pci_func & 1) { 1641 for (i = 0; i < 64; i++) 1642 mpi_dump->nic2_regs[i] = 1643 READ_REG32(ha, i * sizeof(uint32_t)); 1644 1645 for (i = 0; i < 64; i++) 1646 mpi_dump->nic1_regs[i] = 1647 qls_rd_ofunc_reg(ha, 1648 (i * sizeof(uint32_t)) / 4); 1649 1650 qls_rd_xgmac_regs(ha, &mpi_dump->xgmac2[0], 0); 1651 qls_rd_xgmac_regs(ha, &mpi_dump->xgmac1[0], 1); 1652 } else { 1653 for (i = 0; i < 64; i++) 1654 mpi_dump->nic1_regs[i] = 1655 READ_REG32(ha, i * sizeof(uint32_t)); 1656 1657 for (i = 0; i < 64; i++) 1658 mpi_dump->nic2_regs[i] = 1659 qls_rd_ofunc_reg(ha, 1660 (i * sizeof(uint32_t)) / 4); 1661 1662 qls_rd_xgmac_regs(ha, &mpi_dump->xgmac1[0], 0); 1663 qls_rd_xgmac_regs(ha, &mpi_dump->xgmac2[0], 1); 1664 } 1665 1666 1667 qls_mpid_seg_hdr(&mpi_dump->xaui1_an_hdr, 1668 Q81_XAUI1_AN_SEG_NUM, 1669 (sizeof(qls_mpid_seg_hdr_t) + 1670 sizeof(mpi_dump->serdes1_xaui_an)), 1671 "XAUI1 AN Registers"); 1672 1673 qls_mpid_seg_hdr(&mpi_dump->xaui1_hss_pcs_hdr, 1674 Q81_XAUI1_HSS_PCS_SEG_NUM, 1675 (sizeof(qls_mpid_seg_hdr_t) + 1676 sizeof(mpi_dump->serdes1_xaui_hss_pcs)), 1677 "XAUI1 HSS PCS Registers"); 1678 1679 qls_mpid_seg_hdr(&mpi_dump->xfi1_an_hdr, 1680 Q81_XFI1_AN_SEG_NUM, 1681 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->serdes1_xfi_an)), 1682 "XFI1 AN Registers"); 1683 1684 qls_mpid_seg_hdr(&mpi_dump->xfi1_train_hdr, 1685 Q81_XFI1_TRAIN_SEG_NUM, 1686 (sizeof(qls_mpid_seg_hdr_t) + 1687 sizeof(mpi_dump->serdes1_xfi_train)), 1688 "XFI1 TRAIN Registers"); 1689 1690 qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_pcs_hdr, 1691 Q81_XFI1_HSS_PCS_SEG_NUM, 1692 (sizeof(qls_mpid_seg_hdr_t) + 1693 sizeof(mpi_dump->serdes1_xfi_hss_pcs)), 1694 "XFI1 HSS PCS Registers"); 1695 1696 qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_tx_hdr, 1697 Q81_XFI1_HSS_TX_SEG_NUM, 1698 (sizeof(qls_mpid_seg_hdr_t) + 1699 sizeof(mpi_dump->serdes1_xfi_hss_tx)), 1700 "XFI1 HSS TX Registers"); 1701 1702 qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_rx_hdr, 1703 Q81_XFI1_HSS_RX_SEG_NUM, 1704 (sizeof(qls_mpid_seg_hdr_t) + 1705 sizeof(mpi_dump->serdes1_xfi_hss_rx)), 1706 "XFI1 HSS RX Registers"); 1707 1708 qls_mpid_seg_hdr(&mpi_dump->xfi1_hss_pll_hdr, 1709 Q81_XFI1_HSS_PLL_SEG_NUM, 1710 (sizeof(qls_mpid_seg_hdr_t) + 1711 sizeof(mpi_dump->serdes1_xfi_hss_pll)), 1712 "XFI1 HSS PLL Registers"); 1713 1714 qls_mpid_seg_hdr(&mpi_dump->xaui2_an_hdr, 1715 Q81_XAUI2_AN_SEG_NUM, 1716 (sizeof(qls_mpid_seg_hdr_t) + 1717 sizeof(mpi_dump->serdes2_xaui_an)), 1718 "XAUI2 AN Registers"); 1719 1720 qls_mpid_seg_hdr(&mpi_dump->xaui2_hss_pcs_hdr, 1721 Q81_XAUI2_HSS_PCS_SEG_NUM, 1722 (sizeof(qls_mpid_seg_hdr_t) + 1723 sizeof(mpi_dump->serdes2_xaui_hss_pcs)), 1724 "XAUI2 HSS PCS Registers"); 1725 1726 qls_mpid_seg_hdr(&mpi_dump->xfi2_an_hdr, 1727 Q81_XFI2_AN_SEG_NUM, 1728 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->serdes2_xfi_an)), 1729 "XFI2 AN Registers"); 1730 1731 qls_mpid_seg_hdr(&mpi_dump->xfi2_train_hdr, 1732 Q81_XFI2_TRAIN_SEG_NUM, 1733 (sizeof(qls_mpid_seg_hdr_t) + 1734 sizeof(mpi_dump->serdes2_xfi_train)), 1735 "XFI2 TRAIN Registers"); 1736 1737 qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_pcs_hdr, 1738 Q81_XFI2_HSS_PCS_SEG_NUM, 1739 (sizeof(qls_mpid_seg_hdr_t) + 1740 sizeof(mpi_dump->serdes2_xfi_hss_pcs)), 1741 "XFI2 HSS PCS Registers"); 1742 1743 qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_tx_hdr, 1744 Q81_XFI2_HSS_TX_SEG_NUM, 1745 (sizeof(qls_mpid_seg_hdr_t) + 1746 sizeof(mpi_dump->serdes2_xfi_hss_tx)), 1747 "XFI2 HSS TX Registers"); 1748 1749 qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_rx_hdr, 1750 Q81_XFI2_HSS_RX_SEG_NUM, 1751 (sizeof(qls_mpid_seg_hdr_t) + 1752 sizeof(mpi_dump->serdes2_xfi_hss_rx)), 1753 "XFI2 HSS RX Registers"); 1754 1755 qls_mpid_seg_hdr(&mpi_dump->xfi2_hss_pll_hdr, 1756 Q81_XFI2_HSS_PLL_SEG_NUM, 1757 (sizeof(qls_mpid_seg_hdr_t) + 1758 sizeof(mpi_dump->serdes2_xfi_hss_pll)), 1759 "XFI2 HSS PLL Registers"); 1760 1761 qls_rd_serdes_regs(ha, mpi_dump); 1762 1763 qls_mpid_seg_hdr(&mpi_dump->core_regs_seg_hdr, 1764 Q81_CORE_SEG_NUM, 1765 (sizeof(mpi_dump->core_regs_seg_hdr) + 1766 sizeof(mpi_dump->mpi_core_regs) + 1767 sizeof(mpi_dump->mpi_core_sh_regs)), 1768 "Core Registers"); 1769 1770 ret = qls_get_mpi_regs(ha, &mpi_dump->mpi_core_regs[0], 1771 Q81_MPI_CORE_REGS_ADDR, Q81_MPI_CORE_REGS_CNT); 1772 1773 ret = qls_get_mpi_shadow_regs(ha, 1774 &mpi_dump->mpi_core_sh_regs[0]); 1775 1776 qls_mpid_seg_hdr(&mpi_dump->test_logic_regs_seg_hdr, 1777 Q81_TEST_LOGIC_SEG_NUM, 1778 (sizeof(qls_mpid_seg_hdr_t) + 1779 sizeof(mpi_dump->test_logic_regs)), 1780 "Test Logic Regs"); 1781 1782 ret = qls_get_mpi_regs(ha, &mpi_dump->test_logic_regs[0], 1783 Q81_TEST_REGS_ADDR, Q81_TEST_REGS_CNT); 1784 1785 qls_mpid_seg_hdr(&mpi_dump->rmii_regs_seg_hdr, 1786 Q81_RMII_SEG_NUM, 1787 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->rmii_regs)), 1788 "RMII Registers"); 1789 1790 ret = qls_get_mpi_regs(ha, &mpi_dump->rmii_regs[0], 1791 Q81_RMII_REGS_ADDR, Q81_RMII_REGS_CNT); 1792 1793 qls_mpid_seg_hdr(&mpi_dump->fcmac1_regs_seg_hdr, 1794 Q81_FCMAC1_SEG_NUM, 1795 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fcmac1_regs)), 1796 "FCMAC1 Registers"); 1797 1798 ret = qls_get_mpi_regs(ha, &mpi_dump->fcmac1_regs[0], 1799 Q81_FCMAC1_REGS_ADDR, Q81_FCMAC_REGS_CNT); 1800 1801 qls_mpid_seg_hdr(&mpi_dump->fcmac2_regs_seg_hdr, 1802 Q81_FCMAC2_SEG_NUM, 1803 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fcmac2_regs)), 1804 "FCMAC2 Registers"); 1805 1806 ret = qls_get_mpi_regs(ha, &mpi_dump->fcmac2_regs[0], 1807 Q81_FCMAC2_REGS_ADDR, Q81_FCMAC_REGS_CNT); 1808 1809 qls_mpid_seg_hdr(&mpi_dump->fc1_mbx_regs_seg_hdr, 1810 Q81_FC1_MBOX_SEG_NUM, 1811 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fc1_mbx_regs)), 1812 "FC1 MBox Regs"); 1813 1814 ret = qls_get_mpi_regs(ha, &mpi_dump->fc1_mbx_regs[0], 1815 Q81_FC1_MBX_REGS_ADDR, Q81_FC_MBX_REGS_CNT); 1816 1817 qls_mpid_seg_hdr(&mpi_dump->ide_regs_seg_hdr, 1818 Q81_IDE_SEG_NUM, 1819 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->ide_regs)), 1820 "IDE Registers"); 1821 1822 ret = qls_get_mpi_regs(ha, &mpi_dump->ide_regs[0], 1823 Q81_IDE_REGS_ADDR, Q81_IDE_REGS_CNT); 1824 1825 qls_mpid_seg_hdr(&mpi_dump->nic1_mbx_regs_seg_hdr, 1826 Q81_NIC1_MBOX_SEG_NUM, 1827 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic1_mbx_regs)), 1828 "NIC1 MBox Regs"); 1829 1830 ret = qls_get_mpi_regs(ha, &mpi_dump->nic1_mbx_regs[0], 1831 Q81_NIC1_MBX_REGS_ADDR, Q81_NIC_MBX_REGS_CNT); 1832 1833 qls_mpid_seg_hdr(&mpi_dump->smbus_regs_seg_hdr, 1834 Q81_SMBUS_SEG_NUM, 1835 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->smbus_regs)), 1836 "SMBus Registers"); 1837 1838 ret = qls_get_mpi_regs(ha, &mpi_dump->smbus_regs[0], 1839 Q81_SMBUS_REGS_ADDR, Q81_SMBUS_REGS_CNT); 1840 1841 qls_mpid_seg_hdr(&mpi_dump->fc2_mbx_regs_seg_hdr, 1842 Q81_FC2_MBOX_SEG_NUM, 1843 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->fc2_mbx_regs)), 1844 "FC2 MBox Regs"); 1845 1846 ret = qls_get_mpi_regs(ha, &mpi_dump->fc2_mbx_regs[0], 1847 Q81_FC2_MBX_REGS_ADDR, Q81_FC_MBX_REGS_CNT); 1848 1849 qls_mpid_seg_hdr(&mpi_dump->nic2_mbx_regs_seg_hdr, 1850 Q81_NIC2_MBOX_SEG_NUM, 1851 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->nic2_mbx_regs)), 1852 "NIC2 MBox Regs"); 1853 1854 ret = qls_get_mpi_regs(ha, &mpi_dump->nic2_mbx_regs[0], 1855 Q81_NIC2_MBX_REGS_ADDR, Q81_NIC_MBX_REGS_CNT); 1856 1857 qls_mpid_seg_hdr(&mpi_dump->i2c_regs_seg_hdr, 1858 Q81_I2C_SEG_NUM, 1859 (sizeof(qls_mpid_seg_hdr_t) + 1860 sizeof(mpi_dump->i2c_regs)), 1861 "I2C Registers"); 1862 1863 ret = qls_get_mpi_regs(ha, &mpi_dump->i2c_regs[0], 1864 Q81_I2C_REGS_ADDR, Q81_I2C_REGS_CNT); 1865 1866 qls_mpid_seg_hdr(&mpi_dump->memc_regs_seg_hdr, 1867 Q81_MEMC_SEG_NUM, 1868 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->memc_regs)), 1869 "MEMC Registers"); 1870 1871 ret = qls_get_mpi_regs(ha, &mpi_dump->memc_regs[0], 1872 Q81_MEMC_REGS_ADDR, Q81_MEMC_REGS_CNT); 1873 1874 qls_mpid_seg_hdr(&mpi_dump->pbus_regs_seg_hdr, 1875 Q81_PBUS_SEG_NUM, 1876 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->pbus_regs)), 1877 "PBUS Registers"); 1878 1879 ret = qls_get_mpi_regs(ha, &mpi_dump->pbus_regs[0], 1880 Q81_PBUS_REGS_ADDR, Q81_PBUS_REGS_CNT); 1881 1882 qls_mpid_seg_hdr(&mpi_dump->mde_regs_seg_hdr, 1883 Q81_MDE_SEG_NUM, 1884 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->mde_regs)), 1885 "MDE Registers"); 1886 1887 ret = qls_get_mpi_regs(ha, &mpi_dump->mde_regs[0], 1888 Q81_MDE_REGS_ADDR, Q81_MDE_REGS_CNT); 1889 1890 qls_mpid_seg_hdr(&mpi_dump->intr_states_seg_hdr, 1891 Q81_INTR_STATES_SEG_NUM, 1892 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->intr_states)), 1893 "INTR States"); 1894 1895 qls_get_intr_states(ha, &mpi_dump->intr_states[0]); 1896 1897 qls_mpid_seg_hdr(&mpi_dump->probe_dump_seg_hdr, 1898 Q81_PROBE_DUMP_SEG_NUM, 1899 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->probe_dump)), 1900 "Probe Dump"); 1901 1902 qls_get_probe_dump(ha, &mpi_dump->probe_dump[0]); 1903 1904 qls_mpid_seg_hdr(&mpi_dump->routing_reg_seg_hdr, 1905 Q81_ROUTING_INDEX_SEG_NUM, 1906 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->routing_regs)), 1907 "Routing Regs"); 1908 1909 qls_get_ridx_registers(ha, &mpi_dump->routing_regs[0]); 1910 1911 qls_mpid_seg_hdr(&mpi_dump->mac_prot_reg_seg_hdr, 1912 Q81_MAC_PROTOCOL_SEG_NUM, 1913 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->mac_prot_regs)), 1914 "MAC Prot Regs"); 1915 1916 qls_get_mac_proto_regs(ha, &mpi_dump->mac_prot_regs[0]); 1917 1918 qls_mpid_seg_hdr(&mpi_dump->ets_seg_hdr, 1919 Q81_ETS_SEG_NUM, 1920 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->ets)), 1921 "ETS Registers"); 1922 1923 ret = qls_get_ets_regs(ha, &mpi_dump->ets[0]); 1924 1925 qls_mpid_seg_hdr(&mpi_dump->sem_regs_seg_hdr, 1926 Q81_SEM_REGS_SEG_NUM, 1927 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->sem_regs)), 1928 "Sem Registers"); 1929 1930 for(i = 0; i < Q81_MAX_SEMAPHORE_FUNCTIONS ; i ++) { 1931 1932 reg = Q81_CTL_PROC_ADDR_REG_BLOCK | (i << Q81_FUNCTION_SHIFT) | 1933 (Q81_CTL_SEMAPHORE >> 2); 1934 1935 ret = qls_mpi_risc_rd_reg(ha, reg, ®_val); 1936 mpi_dump->sem_regs[i] = reg_val; 1937 1938 if (ret != 0) 1939 mpi_dump->sem_regs[i] = Q81_BAD_DATA; 1940 } 1941 1942 ret = qls_unpause_mpi_risc(ha); 1943 if (ret) 1944 printf("Failed RISC unpause. Status = 0x%.08x\n",ret); 1945 1946 ret = qls_mpi_reset(ha); 1947 if (ret) 1948 printf("Failed RISC reset. Status = 0x%.08x\n",ret); 1949 1950 WRITE_REG32(ha, Q81_CTL_FUNC_SPECIFIC, 0x80008000); 1951 1952 qls_mpid_seg_hdr(&mpi_dump->memc_ram_seg_hdr, 1953 Q81_MEMC_RAM_SEG_NUM, 1954 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->memc_ram)), 1955 "MEMC RAM"); 1956 1957 ret = qls_mbx_dump_risc_ram(ha, &mpi_dump->memc_ram[0], 1958 Q81_MEMC_RAM_ADDR, Q81_MEMC_RAM_CNT); 1959 if (ret) 1960 printf("Failed Dump of MEMC RAM. Status = 0x%.08x\n",ret); 1961 1962 qls_mpid_seg_hdr(&mpi_dump->code_ram_seg_hdr, 1963 Q81_WCS_RAM_SEG_NUM, 1964 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->code_ram)), 1965 "WCS RAM"); 1966 1967 ret = qls_mbx_dump_risc_ram(ha, &mpi_dump->memc_ram[0], 1968 Q81_CODE_RAM_ADDR, Q81_CODE_RAM_CNT); 1969 if (ret) 1970 printf("Failed Dump of CODE RAM. Status = 0x%.08x\n",ret); 1971 1972 qls_mpid_seg_hdr(&mpi_dump->wqc1_seg_hdr, 1973 Q81_WQC1_SEG_NUM, 1974 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->wqc1)), 1975 "WQC 1"); 1976 1977 qls_mpid_seg_hdr(&mpi_dump->wqc2_seg_hdr, 1978 Q81_WQC2_SEG_NUM, 1979 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->wqc2)), 1980 "WQC 2"); 1981 1982 qls_mpid_seg_hdr(&mpi_dump->cqc1_seg_hdr, 1983 Q81_CQC1_SEG_NUM, 1984 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->cqc1)), 1985 "CQC 1"); 1986 1987 qls_mpid_seg_hdr(&mpi_dump->cqc2_seg_hdr, 1988 Q81_CQC2_SEG_NUM, 1989 (sizeof(qls_mpid_seg_hdr_t) + sizeof(mpi_dump->cqc2)), 1990 "CQC 2"); 1991 1992 return 0; 1993 } 1994 1995