emlxs_dump.h revision 291a2b48b9adcd7b3666c34e80ba6411929afe7f
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2009 Emulex. All rights reserved.
* Use is subject to License terms.
*/
#ifndef _EMLXS_DUMP_H
#define _EMLXS_DUMP_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct emlxs_file
{
uint8_t *buffer;
uint8_t *ptr;
uint32_t size;
} emlxs_file_t;
typedef struct dump_temp_event
{
struct emlxs_hba *hba;
uint32_t type;
uint32_t temp;
} dump_temp_event_t;
#define EMLXS_TXT_FILE_SIZE (1024*1024)
#define EMLXS_DMP_FILE_SIZE (4*1024*1024)
#define EMLXS_CEE_FILE_SIZE (1024*1024)
/* Maximum BC for DUMP w/o MBX Extension */
#define DUMP_BC_MAX (0x18 * 4)
/* Conditional Compile Symbols */
#define CC_DUMP_FW_BUG_1 1 /* 1 = workaround for FW Bug */
#define CC_DUMP_ENABLE_PAD 1 /* 1 = enable DMP File Padding */
/* The following define controls whether the Dump Routines, */
/* in the Port Memory Dump, */
/* use all (potentially up to 3) Dump Tables, or only Dump Table #1. */
/* This is a diagnostic feature only, and is not compiled in releases. */
/* If enabled, this feature provides a way to test all the FW Dump Tables, */
/* a debugging courtesy to the FW group. */
/* 1 = all Dump Tables; 0 = Table 1 Only */
#define CC_DUMP_USE_ALL_TABLES 1
/* Dump Type: loaded into gDumpType; controls */
/* operation of many dump functions */
#define DUMP_TYPE_USER 0 /* User-Initiated Dump */
#define DUMP_TYPE_DRIVER 1 /* Normal Driver-Initiated Dump */
#define DUMP_TYPE_TEMP 2 /* Driver-Initiated Temp Event Dump */
/* Dump Temperature tempType Event codes (from DFC) */
#define TEMP_TYPE_CRITICAL 1
#define TEMP_TYPE_THRESHOLD 2
#define TEMP_TYPE_NORMAL 3
/* Misc Defines */
#define DUMP_SEMAPHORE_RETRY 200 /* times to retry acquiring sema */
#define DUMP_RETENTION_CNT_DEF 10 /* files to retain before purging */
#define DUMP_RETENTION_CNT_MAX 500 /* (Linux KW ID 122) */
#define DUMP_TXT_FILE 0
#define DUMP_DMP_FILE 1
#define DUMP_CEE_FILE 2
/* Driver Name Strings */
#define DUMP_DRV_UNK "Unknown"
#define DUMP_DRV_LEADVILLE "Solaris emlxs"
/* SIDs (Dump File Segment Identifiers) */
/* SID Control Bits */
#define SID_MULT_ELEM 0x20 /* indicates structures, not bytes */
/* This set of SIDs is defined in "LightPulse Dump Facility Design Guide" */
#define SID_NULL 0x00 /* Null SID */
#define SID_ID01 0x01 /* Dump Table Identification */
#define SID_ID02 0x02 /* Dump Table Identification */
#define SID_ID03 0x03 /* Dump Table Identification */
#define SID_TERM 0x04 /* Dump Table Termination */
#define SID_SLIM 0x05 /* SLIM */
#define SID_05 0x06 /* reserved */
#define SID_PCI_CONFIG 0x07 /* PCI Cfg Registers (Direct) */
#define SID_SLI_REGS 0x08 /* SLI Registers (Direct) */
#define SID_29 0x29 /* reserved */
#define SID_PCI_CONFIG_I 0x47 /* PCI Cfg Registers (Indirect) */
#define SID_SLI_I 0x48 /* SLI Registers (Indirect) */
#define SID_DUMP_ID_LE 0x80 /* Dump Id, Little-endian system. */
#define SID_DUMP_ID_BE 0x81 /* Dump Id, Big-endian system. */
#define SID_DUMP_TERM 0x82 /* Dump Termination. Last byte */
#define SID_LEGEND 0x83 /* Legend */
#define SID_PCB 0x84 /* PCB */
#define SID_MBX 0x86 /* Mailbox */
#define SID_HOST_PTRS 0x87 /* Host Put/Get Pointer Array */
#define SID_PORT_PTRS 0x88 /* Port Get/Put Pointer Array */
#define SID_RINGS 0xA9 /* Command/Response Rings */
#define SID_PCB_A 0xC4 /* PCB */
#define SID_MBX_A 0xC6 /* Mailbox */
#define SID_HOST_PTRS_A 0xC7 /* Host Put/Get Pointer Array */
#define SID_PORT_PTRS_A 0xC8 /* Port Get/Put Pointer Array */
#define SID_BUFFER_LISTS 0xCA /* Buffer Lists */
#define SID_RINGS_A 0xE9 /* Command/Response Rings */
#define SID_BUFFER_LISTS_A 0xEA /* Buffer Lists */
/* This set of SIDs is defined in "HBAnyware v2.3 */
/* Dump Feature Design Specification" */
#define SID_HBA_MEM_DUMP 0x11 /* HBA Memory Dump */
#define SID_REV_INFO 0x90 /* Revision Information */
#define SID_HBA_INFO 0x91 /* HBA Information */
#define SID_DP_TABLE 0x92 /* Driver Parm Table */
#define SID_DP_UNIX 0x93 /* Driver Parm, config (Unix) */
#define SID_DP_WINDOWS 0x94 /* Driver Parm, Reg Entries (Win) */
#define SID_INTERNAL_MP 0x95 /* Driver-specific Intrnl, Miniport */
#define SID_INTERNAL_SP 0x96 /* Driver-specific Intrnl, Storport */
#define SID_INTERNAL_SOL 0x97 /* Driver-specific Intrnl, Solaris */
#define SID_INTERNAL_L7X 0x98 /* Driver-specific Intrnl, Lnx 7x */
#define SID_INTERNAL_L8X 0x99 /* Driver-specific Intrnl, Lnx 8x */
#define SID_CONFIG_REGION 0x9A /* Config Region Data */
#define SID_NON_VOLATILE_LOG 0x9B /* Saturn NV Log (Enterprise only) */
/* Legend Strings */
#define LEGEND_CONFIG_REGION "Config Region Data"
#define LEGEND_HBA_MEM_DUMP "HBA Memory Dump"
#define LEGEND_REV_INFO "Revision Information"
#define LEGEND_HBA_INFO "HBA Information"
#define LEGEND_DP_TABLE "Driver Parameters: Table"
#define LEGEND_DP_UNIX "Driver Parameters: Config File Entries"
#define LEGEND_DP_WINDOWS "Driver Parameters: Registry Entries"
#define LEGEND_INTERNAL_MP "Driver-specific Internal Structures, Miniport"
#define LEGEND_INTERNAL_SP "Driver-specific Internal Structures, Storport"
#define LEGEND_INTERNAL_SOL "Driver-specific Internal Structures, Solaris"
#define LEGEND_INTERNAL_L7X "Driver-specific Internal Structures, Linux 7x"
#define LEGEND_INTERNAL_L8X "Driver-specific Internal Structures, Linux 8x"
#define LEGEND_SLI_STRUCTURES "SLI Interface Structures"
#define LEGEND_MENLO_LOG_CONFIG "Converged Enhanced Ethernet (CEE) Log"
#define LEGEND_MENLO_LOG_PANIC_REGS "\n\nPanic Log Registers\n"
#define LEGEND_MENLO_LOG_PANIC_LOGS "\n\nPanic Log Entries\n"
#define LEGEND_NON_VOLATILE_LOG "Non-Volatile Log Data" /* peter */
/* Sub-Legends associated with SID_HBA_MEM_DUMP // HBA Memory Dump */
#define LEGEND_HBA_MEM_DUMP_TABLE "Dump Table"
#define LEGEND_HBA_MEM_DUMP_REGION "Dump Region"
/* Sub-Legends associated with SID_REV_INFO // Revision Information */
#define LEGEND_REV_OS_VERSION "OS Version"
#define LEGEND_REV_DRV_VERSION "Driver Version"
#define LEGEND_REV_UTIL_VERSION "HBAnyware Version"
#define LEGEND_REV_DFCLIB_VERSION "DFC Lib Version"
/* Sub-Legends associated with SID_HBA_INFO // Adapter Information */
#define LEGEND_HBA_MODEL "Adapter Model"
#define LEGEND_HBA_WWN "Adapter WWN"
#define LEGEND_HBA_SN "Adapter Serial Number"
#define LEGEND_HBA_FW_VERSION "Firmware Version"
#define LEGEND_HBA_FW_OPVERSION "Operational FW Version"
#define LEGEND_HBA_FW_SLI1VERSION "SLI-1 FW Version"
#define LEGEND_HBA_FW_SLI2VERSION "SLI-2 FW Version"
#define LEGEND_HBA_FW_SLI3VERSION "SLI-3 FW Version"
#define LEGEND_HBA_FW_KERNELVERSION "Kernel FW Version"
#define LEGEND_HBA_BB_STATE "Boot Bios State"
#define LEGEND_HBA_BB_VERSION "Boot Bios Version"
#define LEGEND_HBA_LMSD_A0 "Link Module Serial Data: Page A0"
#define LEGEND_HBA_LMSD_A2 "Link Module Serial Data: Page A2"
/* Sub-Legends associated with SID_CONFIG_REGION // Configuration Region */
#define LEGEND_CONFIG_REGION_0 "Config Region 0: Non-volatile Params"
#define LEGEND_CONFIG_REGION_1 "Config Region 1: reserved"
#define LEGEND_CONFIG_REGION_2 "Config Region 2: reserved"
#define LEGEND_CONFIG_REGION_3 "Config Region 3: reserved"
#define LEGEND_CONFIG_REGION_4 "Config Region 4: Wake-up Params"
#define LEGEND_CONFIG_REGION_5 "Config Region 5: PCI Config, Default"
#define LEGEND_CONFIG_REGION_6 "Config Region 6: PCI Config, Alternate 1"
#define LEGEND_CONFIG_REGION_7 "Config Region 7: PCI Config, Alternate 2"
#define LEGEND_CONFIG_REGION_8 "Config Region 8: Boot Params, x86, Basic"
#define LEGEND_CONFIG_REGION_9 "Config Region 9: Boot Params, x86, Extended"
#define LEGEND_CONFIG_REGION_10 "Config Region 10: Boot Params, EFI"
#define LEGEND_CONFIG_REGION_11 "Config Region 11: reserved"
#define LEGEND_CONFIG_REGION_12 "Config Region 12: reserved"
#define LEGEND_CONFIG_REGION_13 "Config Region 13: reserved"
#define LEGEND_CONFIG_REGION_14 "Config Region 14: VPD"
#define LEGEND_CONFIG_REGION_15 "Config Region 15: Diagnostic Trace"
#define LEGEND_CONFIG_REGION_16 "Config Region 16: reserved"
#define LEGEND_CONFIG_REGION_17 \
"Config Region 17: Physical Environment NV Params"
#define LEGEND_CONFIG_REGION_18 "Config Region 18: reserved"
#define LEGEND_CONFIG_REGION_19 "Config Region 19: reserved"
#define LEGEND_CONFIG_REGION_20 "Config Region 20: reserved"
#define LEGEND_CONFIG_REGION_21 "Config Region 21: Saved Wakeup Params"
#define LEGEND_CONFIG_REGION_22 "Config Region 22: reserved"
#define LEGEND_CONFIG_REGION_23 "Config Region 23: reserved"
#define LEGEND_CONFIG_REGION_24 "Config Region 24: reserved"
#define LEGEND_CONFIG_REGION_25 "Config Region 25: reserved"
#define LEGEND_CONFIG_REGION_26 "Config Region 26: reserved"
#define LEGEND_CONFIG_REGION_27 "Config Region 27: reserved"
#define LEGEND_CONFIG_REGION_28 "Config Region 28: reserved"
#define LEGEND_CONFIG_REGION_29 "Config Region 29: reserved"
#define LEGEND_CONFIG_REGION_30 "Config Region 30: reserved"
#define LEGEND_CONFIG_REGION_31 "Config Region 31: reserved"
#define LEGEND_CONFIG_REGION_32 "Config Region 32: IEEE Address"
/* Additional Sub-Legends for Region 4 */
#define LEGEND_CR4_INITIAL_LOAD "Initial Load"
#define LEGEND_CR4_FLAGS "Flags "
#define LEGEND_CR4_BOOT_BIOS_ID "Boot Bios ID"
#define LEGEND_CR4_SLI1_ID "SLI-1 ID "
#define LEGEND_CR4_SLI2_ID "SLI-2 ID "
#define LEGEND_CR4_SLI3_ID "SLI-3 ID "
#define LEGEND_CR4_SLI4_ID "SLI-4 ID "
#define LEGEND_CR4_EROM_ID "E-Rom ID "
/* Sub-Legends associated with SLI Interface Structures */
#define LEGEND_SLI_REGS "SLI Registers"
#define LEGEND_SLIM "SLIM"
#define LEGEND_PCB "PCB"
#define LEGEND_MBX "Mailbox"
#define LEGEND_HOST_PTRS "Host Pointers"
#define LEGEND_PORT_PTRS "Port Pointers"
#define LEGEND_RINGS "Cmd/Rsp Rings"
#define LEGEND_DRIVER_SPEC "Driver-Specific Internal Structures"
/* Misc Legend DAta */
#define LEGEND_NULL ""
#define LEGEND_NV_LOG_DRIVER_NOT_SUPPORTED \
"NV Log not supported by the driver"
#define LEGEND_NV_LOG_STATUS_ERROR \
"Error in getting NV Log status"
#define LEGEND_NV_LOG_ERROR \
"Error in getting NV Log"
/* Dump Regions Definitions */
#define DR_SLI_REGS 0x0000
#define DR_SLIM 0x0001
#define DR_PCB 0x0002
#define DR_MBX 0x0003
#define DR_HOST_PTRS 0x0004
#define DR_PORT_PTRS 0x0005
#define DR_RINGS 0x0006
#define DR_INTERNAL 0x0007
/* DFC_GetDriverDumpRegions Status */
#define GDDR_ST_SUCCESS 0
#define GDDR_ST_ERROR 1 /* General Error */
#define GDDR_ST_BAD_ID 2 /* Bad Region Identifier */
#define GDDR_ST_BUF_OVERFLOW 3 /* Buffer Overflow */
#define GDDR_ST_ID_NA 4 /* Region Identifier Not Applicable */
/* Max size supported by dump Config Region routines */
#define DUMP_MAX_CONFIG_REGION_LENGTH 1000
/* This is a simplified form of the wakeup params structure, */
/* w/o all the bit fields, */
/* for ease of displaying in the Dump File. */
typedef struct _DUMP_WAKE_UP_PARAMS
{
uint32_t InitialId[2];
uint32_t Flags;
uint32_t BootBiosId[2];
uint32_t Sli1Id[2];
uint32_t Sli2Id[2];
uint32_t Sli3Id[2];
uint32_t Sli4Id[2];
uint32_t EromId[2];
} DUMP_WAKE_UP_PARAMS;
typedef struct _DUMP_TABLE_ENTRY_PORT_STRUCT
{
union
{
uint32_t w[2];
struct
{
#ifdef EMLXS_LITTLE_ENDIAN
uint32_t count:16; /* structure repeat count */
uint32_t length:8; /* structure length */
uint32_t sid:8; /* SID */
#else
uint32_t sid:8; /* SID */
uint32_t length:8; /* structure length */
uint32_t count:16; /* structure repeat count */
#endif
uint32_t addr; /* address */
} s;
} un;
} DUMP_TABLE_ENTRY_PORT_STRUCT;
/* This is a simplified form of the Dump Table Entry structures. */
typedef struct _DUMP_TABLE_ENTRY_PORT_BLK
{
union
{
uint32_t w[2];
struct
{
#ifdef EMLXS_LITTLE_ENDIAN
uint32_t bc:24; /* byte count */
uint32_t sid:8; /* SID */
#else
uint32_t sid:8; /* SID */
uint32_t bc:24; /* byte count */
#endif
uint32_t addr; /* address */
} s;
} un;
} DUMP_TABLE_ENTRY_PORT_BLK;
typedef struct _DUMP_TABLE_ENTRY
{
union
{
DUMP_TABLE_ENTRY_PORT_BLK PortBlock;
DUMP_TABLE_ENTRY_PORT_STRUCT PortStruct;
} un;
} DUMP_TABLE_ENTRY;
/* VPD Data Defines */
#define VPD_TAG_82 0x82 /* start of VPD Data: Device Name */
#define VPD_TAG_90 0x90 /* start of Read-Only Area */
#define VPD_TAG_FF 0x0F /* end tag */
#ifdef __cplusplus
}
#endif
#endif /* _EMLXS_DUMP_H */