1 /* 2 * Copyright (c) 2013-2014 Qlogic Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 * 27 * $FreeBSD$ 28 */ 29 30 /* 31 * File: qls_dump.h 32 */ 33 34 #ifndef _QLS_DUMP_H_ 35 #define _QLS_DUMP_H_ 36 37 #define Q81_MPID_COOKIE 0x5555aaaa 38 39 typedef struct qls_mpid_glbl_hdr 40 { 41 uint32_t cookie; 42 uint8_t id[16]; 43 uint32_t time_lo; 44 uint32_t time_hi; 45 uint32_t img_size; 46 uint32_t hdr_size; 47 uint8_t info[220]; 48 } qls_mpid_glbl_hdr_t; 49 50 typedef struct qls_mpid_seg_hdr 51 { 52 uint32_t cookie; 53 uint32_t seg_num; 54 uint32_t seg_size; 55 uint32_t extra; 56 uint8_t desc[16]; 57 } qls_mpid_seg_hdr_t; 58 59 enum 60 { 61 Q81_MPI_CORE_REGS_ADDR = 0x00030000, 62 Q81_MPI_CORE_REGS_CNT = 127, 63 Q81_MPI_CORE_SH_REGS_CNT = 16, 64 Q81_TEST_REGS_ADDR = 0x00001000, 65 Q81_TEST_REGS_CNT = 23, 66 Q81_RMII_REGS_ADDR = 0x00001040, 67 Q81_RMII_REGS_CNT = 64, 68 Q81_FCMAC1_REGS_ADDR = 0x00001080, 69 Q81_FCMAC2_REGS_ADDR = 0x000010c0, 70 Q81_FCMAC_REGS_CNT = 64, 71 Q81_FC1_MBX_REGS_ADDR = 0x00001100, 72 Q81_FC2_MBX_REGS_ADDR = 0x00001240, 73 Q81_FC_MBX_REGS_CNT = 64, 74 Q81_IDE_REGS_ADDR = 0x00001140, 75 Q81_IDE_REGS_CNT = 64, 76 Q81_NIC1_MBX_REGS_ADDR = 0x00001180, 77 Q81_NIC2_MBX_REGS_ADDR = 0x00001280, 78 Q81_NIC_MBX_REGS_CNT = 64, 79 Q81_SMBUS_REGS_ADDR = 0x00001200, 80 Q81_SMBUS_REGS_CNT = 64, 81 Q81_I2C_REGS_ADDR = 0x00001fc0, 82 Q81_I2C_REGS_CNT = 64, 83 Q81_MEMC_REGS_ADDR = 0x00003000, 84 Q81_MEMC_REGS_CNT = 256, 85 Q81_PBUS_REGS_ADDR = 0x00007c00, 86 Q81_PBUS_REGS_CNT = 256, 87 Q81_MDE_REGS_ADDR = 0x00010000, 88 Q81_MDE_REGS_CNT = 6, 89 Q81_CODE_RAM_ADDR = 0x00020000, 90 Q81_CODE_RAM_CNT = 0x2000, 91 Q81_MEMC_RAM_ADDR = 0x00100000, 92 Q81_MEMC_RAM_CNT = 0x2000, 93 Q81_XGMAC_REGISTER_END = 0x740, 94 }; 95 96 #define Q81_PROBE_DATA_LENGTH_WORDS ((64*2) + 1) 97 #define Q81_NUMBER_OF_PROBES 34 98 99 #define Q81_PROBE_SIZE \ 100 (Q81_PROBE_DATA_LENGTH_WORDS * Q81_NUMBER_OF_PROBES) 101 102 #define Q81_NUMBER_ROUTING_REG_ENTRIES 48 103 #define Q81_WORDS_PER_ROUTING_REG_ENTRY 4 104 105 #define Q81_ROUT_REG_SIZE \ 106 (Q81_NUMBER_ROUTING_REG_ENTRIES * Q81_WORDS_PER_ROUTING_REG_ENTRY) 107 108 #define Q81_MAC_PROTOCOL_REGISTER_WORDS ((512 * 3) + (32 * 2) + (4096 * 1) +\ 109 (4096 * 1) + (4 * 2) +\ 110 (8 * 2) + (16 * 1) +\ 111 (4 * 1) + (4 * 4) + (4 * 1)) 112 113 #define Q81_WORDS_PER_MAC_PROT_ENTRY 2 114 #define Q81_MAC_REG_SIZE \ 115 (Q81_MAC_PROTOCOL_REGISTER_WORDS * Q81_WORDS_PER_MAC_PROT_ENTRY) 116 117 #define Q81_MAX_SEMAPHORE_FUNCTIONS 5 118 119 #define Q81_WQC_WORD_SIZE 6 120 #define Q81_NUMBER_OF_WQCS 128 121 #define Q81_WQ_SIZE (Q81_WQC_WORD_SIZE * Q81_NUMBER_OF_WQCS) 122 123 #define Q81_CQC_WORD_SIZE 13 124 #define Q81_NUMBER_OF_CQCS 128 125 #define Q81_CQ_SIZE (Q81_CQC_WORD_SIZE * Q81_NUMBER_OF_CQCS) 126 127 struct qls_mpi_coredump { 128 qls_mpid_glbl_hdr_t mpi_global_header; 129 130 qls_mpid_seg_hdr_t core_regs_seg_hdr; 131 uint32_t mpi_core_regs[Q81_MPI_CORE_REGS_CNT]; 132 uint32_t mpi_core_sh_regs[Q81_MPI_CORE_SH_REGS_CNT]; 133 134 qls_mpid_seg_hdr_t test_logic_regs_seg_hdr; 135 uint32_t test_logic_regs[Q81_TEST_REGS_CNT]; 136 137 qls_mpid_seg_hdr_t rmii_regs_seg_hdr; 138 uint32_t rmii_regs[Q81_RMII_REGS_CNT]; 139 140 qls_mpid_seg_hdr_t fcmac1_regs_seg_hdr; 141 uint32_t fcmac1_regs[Q81_FCMAC_REGS_CNT]; 142 143 qls_mpid_seg_hdr_t fcmac2_regs_seg_hdr; 144 uint32_t fcmac2_regs[Q81_FCMAC_REGS_CNT]; 145 146 qls_mpid_seg_hdr_t fc1_mbx_regs_seg_hdr; 147 uint32_t fc1_mbx_regs[Q81_FC_MBX_REGS_CNT]; 148 149 qls_mpid_seg_hdr_t ide_regs_seg_hdr; 150 uint32_t ide_regs[Q81_IDE_REGS_CNT]; 151 152 qls_mpid_seg_hdr_t nic1_mbx_regs_seg_hdr; 153 uint32_t nic1_mbx_regs[Q81_NIC_MBX_REGS_CNT]; 154 155 qls_mpid_seg_hdr_t smbus_regs_seg_hdr; 156 uint32_t smbus_regs[Q81_SMBUS_REGS_CNT]; 157 158 qls_mpid_seg_hdr_t fc2_mbx_regs_seg_hdr; 159 uint32_t fc2_mbx_regs[Q81_FC_MBX_REGS_CNT]; 160 161 qls_mpid_seg_hdr_t nic2_mbx_regs_seg_hdr; 162 uint32_t nic2_mbx_regs[Q81_NIC_MBX_REGS_CNT]; 163 164 qls_mpid_seg_hdr_t i2c_regs_seg_hdr; 165 uint32_t i2c_regs[Q81_I2C_REGS_CNT]; 166 167 qls_mpid_seg_hdr_t memc_regs_seg_hdr; 168 uint32_t memc_regs[Q81_MEMC_REGS_CNT]; 169 170 qls_mpid_seg_hdr_t pbus_regs_seg_hdr; 171 uint32_t pbus_regs[Q81_PBUS_REGS_CNT]; 172 173 qls_mpid_seg_hdr_t mde_regs_seg_hdr; 174 uint32_t mde_regs[Q81_MDE_REGS_CNT]; 175 176 qls_mpid_seg_hdr_t xaui1_an_hdr; 177 uint32_t serdes1_xaui_an[14]; 178 179 qls_mpid_seg_hdr_t xaui1_hss_pcs_hdr; 180 uint32_t serdes1_xaui_hss_pcs[33]; 181 182 qls_mpid_seg_hdr_t xfi1_an_hdr; 183 uint32_t serdes1_xfi_an[14]; 184 185 qls_mpid_seg_hdr_t xfi1_train_hdr; 186 uint32_t serdes1_xfi_train[12]; 187 188 qls_mpid_seg_hdr_t xfi1_hss_pcs_hdr; 189 uint32_t serdes1_xfi_hss_pcs[15]; 190 191 qls_mpid_seg_hdr_t xfi1_hss_tx_hdr; 192 uint32_t serdes1_xfi_hss_tx[32]; 193 194 qls_mpid_seg_hdr_t xfi1_hss_rx_hdr; 195 uint32_t serdes1_xfi_hss_rx[32]; 196 197 qls_mpid_seg_hdr_t xfi1_hss_pll_hdr; 198 uint32_t serdes1_xfi_hss_pll[32]; 199 200 qls_mpid_seg_hdr_t xaui2_an_hdr; 201 uint32_t serdes2_xaui_an[14]; 202 203 qls_mpid_seg_hdr_t xaui2_hss_pcs_hdr; 204 uint32_t serdes2_xaui_hss_pcs[33]; 205 206 qls_mpid_seg_hdr_t xfi2_an_hdr; 207 uint32_t serdes2_xfi_an[14]; 208 209 qls_mpid_seg_hdr_t xfi2_train_hdr; 210 uint32_t serdes2_xfi_train[12]; 211 212 qls_mpid_seg_hdr_t xfi2_hss_pcs_hdr; 213 uint32_t serdes2_xfi_hss_pcs[15]; 214 215 qls_mpid_seg_hdr_t xfi2_hss_tx_hdr; 216 uint32_t serdes2_xfi_hss_tx[32]; 217 218 qls_mpid_seg_hdr_t xfi2_hss_rx_hdr; 219 uint32_t serdes2_xfi_hss_rx[32]; 220 221 qls_mpid_seg_hdr_t xfi2_hss_pll_hdr; 222 uint32_t serdes2_xfi_hss_pll[32]; 223 224 qls_mpid_seg_hdr_t nic1_regs_seg_hdr; 225 uint32_t nic1_regs[64]; 226 227 qls_mpid_seg_hdr_t nic2_regs_seg_hdr; 228 uint32_t nic2_regs[64]; 229 230 qls_mpid_seg_hdr_t intr_states_seg_hdr; 231 uint32_t intr_states[MAX_RX_RINGS]; 232 233 qls_mpid_seg_hdr_t xgmac1_seg_hdr; 234 uint32_t xgmac1[Q81_XGMAC_REGISTER_END]; 235 236 qls_mpid_seg_hdr_t xgmac2_seg_hdr; 237 uint32_t xgmac2[Q81_XGMAC_REGISTER_END]; 238 239 qls_mpid_seg_hdr_t probe_dump_seg_hdr; 240 uint32_t probe_dump[Q81_PROBE_SIZE]; 241 242 qls_mpid_seg_hdr_t routing_reg_seg_hdr; 243 uint32_t routing_regs[Q81_ROUT_REG_SIZE]; 244 245 qls_mpid_seg_hdr_t mac_prot_reg_seg_hdr; 246 uint32_t mac_prot_regs[Q81_MAC_REG_SIZE]; 247 248 qls_mpid_seg_hdr_t sem_regs_seg_hdr; 249 uint32_t sem_regs[Q81_MAX_SEMAPHORE_FUNCTIONS]; 250 251 qls_mpid_seg_hdr_t ets_seg_hdr; 252 uint32_t ets[8+2]; 253 254 qls_mpid_seg_hdr_t wqc1_seg_hdr; 255 uint32_t wqc1[Q81_WQ_SIZE]; 256 257 qls_mpid_seg_hdr_t cqc1_seg_hdr; 258 uint32_t cqc1[Q81_CQ_SIZE]; 259 260 qls_mpid_seg_hdr_t wqc2_seg_hdr; 261 uint32_t wqc2[Q81_WQ_SIZE]; 262 263 qls_mpid_seg_hdr_t cqc2_seg_hdr; 264 uint32_t cqc2[Q81_CQ_SIZE]; 265 266 qls_mpid_seg_hdr_t code_ram_seg_hdr; 267 uint32_t code_ram[Q81_CODE_RAM_CNT]; 268 269 qls_mpid_seg_hdr_t memc_ram_seg_hdr; 270 uint32_t memc_ram[Q81_MEMC_RAM_CNT]; 271 }; 272 typedef struct qls_mpi_coredump qls_mpi_coredump_t; 273 274 #define Q81_BAD_DATA 0xDEADBEEF 275 276 #endif /* #ifndef _QLS_DUMP_H_ */ 277 278