1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at 9 * http://www.opensource.org/licenses/cddl1.txt. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright (c) 2004-2011 Emulex. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _EMLXS_DUMP_H 28 #define _EMLXS_DUMP_H 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 typedef struct emlxs_file 35 { 36 uint8_t *buffer; 37 uint8_t *ptr; 38 uint32_t size; 39 40 } emlxs_file_t; 41 42 typedef struct dump_temp_event 43 { 44 struct emlxs_hba *hba; 45 uint32_t type; 46 uint32_t temp; 47 48 } dump_temp_event_t; 49 50 #define EMLXS_TXT_FILE_SIZE (1024*1024) 51 #define EMLXS_DMP_FILE_SIZE ((8*1024*1024)+0x100) 52 /* #define EMLXS_DMP_FILE_SIZE (4*1024*1024) */ 53 #define EMLXS_CEE_FILE_SIZE (1024*1024) 54 55 /* Maximum BC for DUMP w/o MBX Extension */ 56 #define DUMP_BC_MAX (0x18 * 4) 57 58 /* Conditional Compile Symbols */ 59 60 #define CC_DUMP_FW_BUG_1 1 /* 1 = workaround for FW Bug */ 61 #define CC_DUMP_ENABLE_PAD 1 /* 1 = enable DMP File Padding */ 62 63 /* The following define controls whether the Dump Routines, */ 64 /* in the Port Memory Dump, */ 65 /* use all (potentially up to 3) Dump Tables, or only Dump Table #1. */ 66 /* This is a diagnostic feature only, and is not compiled in releases. */ 67 /* If enabled, this feature provides a way to test all the FW Dump Tables, */ 68 /* a debugging courtesy to the FW group. */ 69 70 /* 1 = all Dump Tables; 0 = Table 1 Only */ 71 #define CC_DUMP_USE_ALL_TABLES 1 72 73 /* Dump Type: loaded into gDumpType; controls */ 74 /* operation of many dump functions */ 75 #define DUMP_TYPE_USER 0 /* User-Initiated Dump */ 76 #define DUMP_TYPE_DRIVER 1 /* Normal Driver-Initiated Dump */ 77 #define DUMP_TYPE_TEMP 2 /* Driver-Initiated Temp Event Dump */ 78 79 /* Dump Temperature tempType Event codes (from DFC) */ 80 #define TEMP_TYPE_CRITICAL 1 81 #define TEMP_TYPE_THRESHOLD 2 82 #define TEMP_TYPE_NORMAL 3 83 84 /* Misc Defines */ 85 86 #define DUMP_SEMAPHORE_RETRY 200 /* times to retry acquiring sema */ 87 88 #define DUMP_RETENTION_CNT_DEF 10 /* files to retain before purging */ 89 #define DUMP_RETENTION_CNT_MAX 500 /* (Linux KW ID 122) */ 90 91 #define DUMP_TXT_FILE 0 92 #define DUMP_DMP_FILE 1 93 #define DUMP_CEE_FILE 2 94 95 /* Driver Name Strings */ 96 #define DUMP_DRV_UNK "Unknown" 97 #define DUMP_DRV_LEADVILLE "Solaris " DRIVER_NAME 98 99 /* SIDs (Dump File Segment Identifiers) */ 100 101 /* SID Control Bits */ 102 #define SID_MULT_ELEM 0x20 /* indicates structures, not bytes */ 103 104 /* This set of SIDs is defined in "LightPulse Dump Facility Design Guide" */ 105 #define SID_NULL 0x00 /* Null SID */ 106 #define SID_ID01 0x01 /* Dump Table Identification */ 107 #define SID_ID02 0x02 /* Dump Table Identification */ 108 #define SID_ID03 0x03 /* Dump Table Identification */ 109 #define SID_TERM 0x04 /* Dump Table Termination */ 110 #define SID_SLIM 0x05 /* SLIM */ 111 #define SID_05 0x06 /* reserved */ 112 #define SID_PCI_CONFIG 0x07 /* PCI Cfg Registers (Direct) */ 113 #define SID_SLI_REGS 0x08 /* SLI Registers (Direct) */ 114 #define SID_29 0x29 /* reserved */ 115 #define SID_PCI_CONFIG_I 0x47 /* PCI Cfg Registers (Indirect) */ 116 #define SID_SLI_I 0x48 /* SLI Registers (Indirect) */ 117 #define SID_DUMP_ID_LE 0x80 /* Dump Id, Little-endian system. */ 118 #define SID_DUMP_ID_BE 0x81 /* Dump Id, Big-endian system. */ 119 #define SID_DUMP_TERM 0x82 /* Dump Termination. Last byte */ 120 #define SID_LEGEND 0x83 /* Legend */ 121 #define SID_PCB 0x84 /* PCB */ 122 #define SID_MBX 0x86 /* Mailbox */ 123 #define SID_HOST_PTRS 0x87 /* Host Put/Get Pointer Array */ 124 #define SID_PORT_PTRS 0x88 /* Port Get/Put Pointer Array */ 125 #define SID_RINGS 0xA9 /* Command/Response Rings */ 126 #define SID_PCB_A 0xC4 /* PCB */ 127 #define SID_MBX_A 0xC6 /* Mailbox */ 128 #define SID_HOST_PTRS_A 0xC7 /* Host Put/Get Pointer Array */ 129 #define SID_PORT_PTRS_A 0xC8 /* Port Get/Put Pointer Array */ 130 #define SID_BUFFER_LISTS 0xCA /* Buffer Lists */ 131 #define SID_RINGS_A 0xE9 /* Command/Response Rings */ 132 #define SID_BUFFER_LISTS_A 0xEA /* Buffer Lists */ 133 134 /* This set of SIDs is defined in "HBAnyware v2.3 */ 135 /* Dump Feature Design Specification" */ 136 137 #define SID_HBA_MEM_DUMP 0x11 /* HBA Memory Dump */ 138 #define SID_REV_INFO 0x90 /* Revision Information */ 139 #define SID_HBA_INFO 0x91 /* HBA Information */ 140 #define SID_DP_TABLE 0x92 /* Driver Parm Table */ 141 #define SID_DP_UNIX 0x93 /* Driver Parm, config (Unix) */ 142 #define SID_DP_WINDOWS 0x94 /* Driver Parm, Reg Entries (Win) */ 143 #define SID_INTERNAL_MP 0x95 /* Driver-specific Intrnl, Miniport */ 144 #define SID_INTERNAL_SP 0x96 /* Driver-specific Intrnl, Storport */ 145 #define SID_INTERNAL_SOL 0x97 /* Driver-specific Intrnl, Solaris */ 146 #define SID_INTERNAL_L7X 0x98 /* Driver-specific Intrnl, Lnx 7x */ 147 #define SID_INTERNAL_L8X 0x99 /* Driver-specific Intrnl, Lnx 8x */ 148 #define SID_CONFIG_REGION 0x9A /* Config Region Data */ 149 #define SID_NON_VOLATILE_LOG 0x9B /* NV Log (Enterprise only) */ 150 151 /* Legend Strings */ 152 153 #define LEGEND_CONFIG_REGION "Config Region Data" 154 #define LEGEND_HBA_MEM_DUMP "HBA Memory Dump" 155 #define LEGEND_REV_INFO "Revision Information" 156 #define LEGEND_HBA_INFO "HBA Information" 157 #define LEGEND_DP_TABLE "Driver Parameters: Table" 158 #define LEGEND_DP_UNIX "Driver Parameters: Config File Entries" 159 #define LEGEND_DP_WINDOWS "Driver Parameters: Registry Entries" 160 #define LEGEND_INTERNAL_MP "Driver-specific Internal Structures, Miniport" 161 #define LEGEND_INTERNAL_SP "Driver-specific Internal Structures, Storport" 162 #define LEGEND_INTERNAL_SOL "Driver-specific Internal Structures, Solaris" 163 #define LEGEND_INTERNAL_L7X "Driver-specific Internal Structures, Linux 7x" 164 #define LEGEND_INTERNAL_L8X "Driver-specific Internal Structures, Linux 8x" 165 #define LEGEND_SLI_STRUCTURES "SLI Interface Structures" 166 #define LEGEND_MENLO_LOG_CONFIG "Converged Enhanced Ethernet (CEE) Log" 167 #define LEGEND_MENLO_LOG_PANIC_REGS "\n\nPanic Log Registers\n" 168 #define LEGEND_MENLO_LOG_PANIC_LOGS "\n\nPanic Log Entries\n" 169 #define LEGEND_NON_VOLATILE_LOG "Non-Volatile Log Data" 170 171 /* Sub-Legends associated with SID_HBA_MEM_DUMP // HBA Memory Dump */ 172 #define LEGEND_HBA_MEM_DUMP_TABLE "Dump Table" 173 #define LEGEND_HBA_MEM_DUMP_REGION "Dump Region" 174 175 /* Sub-Legends associated with SID_REV_INFO // Revision Information */ 176 #define LEGEND_REV_OS_VERSION "OS Version" 177 #define LEGEND_REV_DRV_VERSION "Driver Version" 178 #define LEGEND_REV_UTIL_VERSION "HBAnyware Version" 179 #define LEGEND_REV_DFCLIB_VERSION "DFC Lib Version" 180 181 /* Sub-Legends associated with SID_HBA_INFO // Adapter Information */ 182 #define LEGEND_HBA_MODEL "Adapter Model" 183 #define LEGEND_HBA_WWN "Adapter WWN" 184 #define LEGEND_HBA_SN "Adapter Serial Number" 185 #define LEGEND_HBA_FW_VERSION "Firmware Version" 186 #define LEGEND_HBA_FW_OPVERSION "Operational FW Version" 187 #define LEGEND_HBA_FW_SLI1VERSION "SLI-1 FW Version" 188 #define LEGEND_HBA_FW_SLI2VERSION "SLI-2 FW Version" 189 #define LEGEND_HBA_FW_SLI3VERSION "SLI-3 FW Version" 190 #define LEGEND_HBA_FW_KERNELVERSION "Kernel FW Version" 191 #define LEGEND_HBA_BB_STATE "Boot Bios State" 192 #define LEGEND_HBA_BB_VERSION "Boot Bios Version" 193 #define LEGEND_HBA_LMSD_A0 "Link Module Serial Data: Page A0" 194 #define LEGEND_HBA_LMSD_A2 "Link Module Serial Data: Page A2" 195 196 /* Sub-Legends associated with SID_CONFIG_REGION // Configuration Region */ 197 #define LEGEND_CONFIG_REGION_0 "Config Region 0: Non-volatile Params" 198 #define LEGEND_CONFIG_REGION_1 "Config Region 1: reserved" 199 #define LEGEND_CONFIG_REGION_2 "Config Region 2: reserved" 200 #define LEGEND_CONFIG_REGION_3 "Config Region 3: reserved" 201 #define LEGEND_CONFIG_REGION_4 "Config Region 4: Wake-up Params" 202 #define LEGEND_CONFIG_REGION_5 "Config Region 5: PCI Config, Default" 203 #define LEGEND_CONFIG_REGION_6 "Config Region 6: PCI Config, Alternate 1" 204 #define LEGEND_CONFIG_REGION_7 "Config Region 7: PCI Config, Alternate 2" 205 #define LEGEND_CONFIG_REGION_8 "Config Region 8: Boot Params, x86, Basic" 206 #define LEGEND_CONFIG_REGION_9 "Config Region 9: Boot Params, x86, Extended" 207 #define LEGEND_CONFIG_REGION_10 "Config Region 10: Boot Params, EFI" 208 #define LEGEND_CONFIG_REGION_11 "Config Region 11: reserved" 209 #define LEGEND_CONFIG_REGION_12 "Config Region 12: reserved" 210 #define LEGEND_CONFIG_REGION_13 "Config Region 13: reserved" 211 #define LEGEND_CONFIG_REGION_14 "Config Region 14: VPD" 212 #define LEGEND_CONFIG_REGION_15 "Config Region 15: Diagnostic Trace" 213 #define LEGEND_CONFIG_REGION_16 "Config Region 16: reserved" 214 #define LEGEND_CONFIG_REGION_17 \ 215 "Config Region 17: Physical Environment NV Params" 216 #define LEGEND_CONFIG_REGION_18 "Config Region 18: reserved" 217 #define LEGEND_CONFIG_REGION_19 "Config Region 19: reserved" 218 #define LEGEND_CONFIG_REGION_20 "Config Region 20: reserved" 219 #define LEGEND_CONFIG_REGION_21 "Config Region 21: Saved Wakeup Params" 220 #define LEGEND_CONFIG_REGION_22 "Config Region 22: reserved" 221 #define LEGEND_CONFIG_REGION_23 "Config Region 23: reserved" 222 #define LEGEND_CONFIG_REGION_24 "Config Region 24: reserved" 223 #define LEGEND_CONFIG_REGION_25 "Config Region 25: reserved" 224 #define LEGEND_CONFIG_REGION_26 "Config Region 26: reserved" 225 #define LEGEND_CONFIG_REGION_27 "Config Region 27: reserved" 226 #define LEGEND_CONFIG_REGION_28 "Config Region 28: reserved" 227 #define LEGEND_CONFIG_REGION_29 "Config Region 29: reserved" 228 #define LEGEND_CONFIG_REGION_30 "Config Region 30: reserved" 229 #define LEGEND_CONFIG_REGION_31 "Config Region 31: reserved" 230 #define LEGEND_CONFIG_REGION_32 "Config Region 32: IEEE Address" 231 232 /* Additional Sub-Legends for Region 4 */ 233 #define LEGEND_CR4_INITIAL_LOAD "Initial Load" 234 #define LEGEND_CR4_FLAGS "Flags " 235 #define LEGEND_CR4_BOOT_BIOS_ID "Boot Bios ID" 236 #define LEGEND_CR4_SLI1_ID "SLI-1 ID " 237 #define LEGEND_CR4_SLI2_ID "SLI-2 ID " 238 #define LEGEND_CR4_SLI3_ID "SLI-3 ID " 239 #define LEGEND_CR4_SLI4_ID "SLI-4 ID " 240 #define LEGEND_CR4_EROM_ID "E-Rom ID " 241 242 /* Sub-Legends associated with SLI Interface Structures */ 243 #define LEGEND_SLI_REGS "SLI Registers" 244 #define LEGEND_SLIM "SLIM" 245 #define LEGEND_PCB "PCB" 246 #define LEGEND_MBX "Mailbox" 247 #define LEGEND_HOST_PTRS "Host Pointers" 248 #define LEGEND_PORT_PTRS "Port Pointers" 249 #define LEGEND_RINGS "Cmd/Rsp Rings" 250 #define LEGEND_DRIVER_SPEC "Driver-Specific Internal Structures" 251 252 /* Misc Legend Data */ 253 #define LEGEND_NULL "" 254 #define LEGEND_NV_LOG_DRIVER_NOT_SUPPORTED \ 255 "NV Log not supported by the driver" 256 #define LEGEND_NV_LOG_STATUS_ERROR \ 257 "Error in getting NV Log status" 258 #define LEGEND_NV_LOG_ERROR \ 259 "Error in getting NV Log" 260 261 #define NV_LOG_NOT_INCLUDED_IN_DMP \ 262 "Non-Volatile Log Dump is not included in the DMP file" 263 #define NV_LOG_INCLUDED_IN_DMP \ 264 "Non-Volatile Log Dump is included in the DMP file" 265 266 #define NV_LOG_NOT_INCLUDED_IN_FAT \ 267 "Non-Volatile Log Dump is not included in the FAT file" 268 #define NV_LOG_INCLUDED_IN_FAT \ 269 "Non-Volatile Log Dump is included in the FAT file" 270 271 /* Dump Regions Definitions */ 272 #define DR_SLI_REGS 0x0000 273 #define DR_SLIM 0x0001 274 #define DR_PCB 0x0002 275 #define DR_MBX 0x0003 276 #define DR_HOST_PTRS 0x0004 277 #define DR_PORT_PTRS 0x0005 278 #define DR_RINGS 0x0006 279 #define DR_INTERNAL 0x0007 280 281 /* DFC_GetDriverDumpRegions Status */ 282 #define GDDR_ST_SUCCESS 0 283 #define GDDR_ST_ERROR 1 /* General Error */ 284 #define GDDR_ST_BAD_ID 2 /* Bad Region Identifier */ 285 #define GDDR_ST_BUF_OVERFLOW 3 /* Buffer Overflow */ 286 #define GDDR_ST_ID_NA 4 /* Region Identifier Not Applicable */ 287 288 /* Max size supported by dump Config Region routines */ 289 #define DUMP_MAX_CONFIG_REGION_LENGTH 1000 290 291 292 /* This is a simplified form of the wakeup params structure, */ 293 /* w/o all the bit fields, */ 294 /* for ease of displaying in the Dump File. */ 295 typedef struct _DUMP_WAKE_UP_PARAMS 296 { 297 uint32_t InitialId[2]; 298 uint32_t Flags; 299 uint32_t BootBiosId[2]; 300 uint32_t Sli1Id[2]; 301 uint32_t Sli2Id[2]; 302 uint32_t Sli3Id[2]; 303 uint32_t Sli4Id[2]; 304 uint32_t EromId[2]; 305 } DUMP_WAKE_UP_PARAMS; 306 307 308 typedef struct _DUMP_TABLE_ENTRY_PORT_STRUCT 309 { 310 union 311 { 312 uint32_t w[2]; 313 struct 314 { 315 #ifdef EMLXS_LITTLE_ENDIAN 316 uint32_t count:16; /* structure repeat count */ 317 uint32_t length:8; /* structure length */ 318 uint32_t sid:8; /* SID */ 319 #else 320 uint32_t sid:8; /* SID */ 321 uint32_t length:8; /* structure length */ 322 uint32_t count:16; /* structure repeat count */ 323 #endif 324 uint32_t addr; /* address */ 325 } s; 326 327 } un; 328 329 } DUMP_TABLE_ENTRY_PORT_STRUCT; 330 331 332 /* This is a simplified form of the Dump Table Entry structures. */ 333 typedef struct _DUMP_TABLE_ENTRY_PORT_BLK 334 { 335 union 336 { 337 uint32_t w[2]; 338 struct 339 { 340 341 #ifdef EMLXS_LITTLE_ENDIAN 342 uint32_t bc:24; /* byte count */ 343 uint32_t sid:8; /* SID */ 344 #else 345 uint32_t sid:8; /* SID */ 346 uint32_t bc:24; /* byte count */ 347 #endif 348 uint32_t addr; /* address */ 349 } s; 350 351 } un; 352 353 } DUMP_TABLE_ENTRY_PORT_BLK; 354 355 356 typedef struct _DUMP_TABLE_ENTRY 357 { 358 union 359 { 360 DUMP_TABLE_ENTRY_PORT_BLK PortBlock; 361 DUMP_TABLE_ENTRY_PORT_STRUCT PortStruct; 362 363 } un; 364 365 } DUMP_TABLE_ENTRY; 366 367 /* VPD Data Defines */ 368 369 #define VPD_TAG_82 0x82 /* start of VPD Data: Device Name */ 370 #define VPD_TAG_90 0x90 /* start of Read-Only Area */ 371 #define VPD_TAG_FF 0x0F /* end tag */ 372 373 #ifdef __cplusplus 374 } 375 #endif 376 377 #endif /* _EMLXS_DUMP_H */ 378