mempool: introduce helpers for populate and required size
[dpdk.git] / drivers / net / qede / base / ecore_hsi_debug_tools.h
index e82b0d4..a959aee 100644 (file)
@@ -1,9 +1,7 @@
-/*
- * Copyright (c) 2016 QLogic Corporation.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2016 - 2018 Cavium Inc.
  * All rights reserved.
- * www.qlogic.com
- *
- * See LICENSE.qede_pmd for copyright and licensing details.
+ * www.cavium.com
  */
 
 #ifndef __ECORE_HSI_DEBUG_TOOLS__
 /****************************************/
 
 
-enum block_addr {
-       GRCBASE_GRC = 0x50000,
-       GRCBASE_MISCS = 0x9000,
-       GRCBASE_MISC = 0x8000,
-       GRCBASE_DBU = 0xa000,
-       GRCBASE_PGLUE_B = 0x2a8000,
-       GRCBASE_CNIG = 0x218000,
-       GRCBASE_CPMU = 0x30000,
-       GRCBASE_NCSI = 0x40000,
-       GRCBASE_OPTE = 0x53000,
-       GRCBASE_BMB = 0x540000,
-       GRCBASE_PCIE = 0x54000,
-       GRCBASE_MCP = 0xe00000,
-       GRCBASE_MCP2 = 0x52000,
-       GRCBASE_PSWHST = 0x2a0000,
-       GRCBASE_PSWHST2 = 0x29e000,
-       GRCBASE_PSWRD = 0x29c000,
-       GRCBASE_PSWRD2 = 0x29d000,
-       GRCBASE_PSWWR = 0x29a000,
-       GRCBASE_PSWWR2 = 0x29b000,
-       GRCBASE_PSWRQ = 0x280000,
-       GRCBASE_PSWRQ2 = 0x240000,
-       GRCBASE_PGLCS = 0x0,
-       GRCBASE_DMAE = 0xc000,
-       GRCBASE_PTU = 0x560000,
-       GRCBASE_TCM = 0x1180000,
-       GRCBASE_MCM = 0x1200000,
-       GRCBASE_UCM = 0x1280000,
-       GRCBASE_XCM = 0x1000000,
-       GRCBASE_YCM = 0x1080000,
-       GRCBASE_PCM = 0x1100000,
-       GRCBASE_QM = 0x2f0000,
-       GRCBASE_TM = 0x2c0000,
-       GRCBASE_DORQ = 0x100000,
-       GRCBASE_BRB = 0x340000,
-       GRCBASE_SRC = 0x238000,
-       GRCBASE_PRS = 0x1f0000,
-       GRCBASE_TSDM = 0xfb0000,
-       GRCBASE_MSDM = 0xfc0000,
-       GRCBASE_USDM = 0xfd0000,
-       GRCBASE_XSDM = 0xf80000,
-       GRCBASE_YSDM = 0xf90000,
-       GRCBASE_PSDM = 0xfa0000,
-       GRCBASE_TSEM = 0x1700000,
-       GRCBASE_MSEM = 0x1800000,
-       GRCBASE_USEM = 0x1900000,
-       GRCBASE_XSEM = 0x1400000,
-       GRCBASE_YSEM = 0x1500000,
-       GRCBASE_PSEM = 0x1600000,
-       GRCBASE_RSS = 0x238800,
-       GRCBASE_TMLD = 0x4d0000,
-       GRCBASE_MULD = 0x4e0000,
-       GRCBASE_YULD = 0x4c8000,
-       GRCBASE_XYLD = 0x4c0000,
-       GRCBASE_PRM = 0x230000,
-       GRCBASE_PBF_PB1 = 0xda0000,
-       GRCBASE_PBF_PB2 = 0xda4000,
-       GRCBASE_RPB = 0x23c000,
-       GRCBASE_BTB = 0xdb0000,
-       GRCBASE_PBF = 0xd80000,
-       GRCBASE_RDIF = 0x300000,
-       GRCBASE_TDIF = 0x310000,
-       GRCBASE_CDU = 0x580000,
-       GRCBASE_CCFC = 0x2e0000,
-       GRCBASE_TCFC = 0x2d0000,
-       GRCBASE_IGU = 0x180000,
-       GRCBASE_CAU = 0x1c0000,
-       GRCBASE_UMAC = 0x51000,
-       GRCBASE_XMAC = 0x210000,
-       GRCBASE_DBG = 0x10000,
-       GRCBASE_NIG = 0x500000,
-       GRCBASE_WOL = 0x600000,
-       GRCBASE_BMBN = 0x610000,
-       GRCBASE_IPC = 0x20000,
-       GRCBASE_NWM = 0x800000,
-       GRCBASE_NWS = 0x700000,
-       GRCBASE_MS = 0x6a0000,
-       GRCBASE_PHY_PCIE = 0x620000,
-       GRCBASE_LED = 0x6b8000,
-       GRCBASE_MISC_AEU = 0x8000,
-       GRCBASE_BAR0_MAP = 0x1c00000,
-       MAX_BLOCK_ADDR
-};
-
-
 enum block_id {
        BLOCK_GRC,
        BLOCK_MISCS,
@@ -167,6 +80,7 @@ enum block_id {
        BLOCK_CAU,
        BLOCK_UMAC,
        BLOCK_XMAC,
+       BLOCK_MSTAT,
        BLOCK_DBG,
        BLOCK_NIG,
        BLOCK_WOL,
@@ -177,8 +91,19 @@ enum block_id {
        BLOCK_MS,
        BLOCK_PHY_PCIE,
        BLOCK_LED,
-       BLOCK_MISC_AEU,
+       BLOCK_AVS_WRAP,
+       BLOCK_PXPREQBUS,
        BLOCK_BAR0_MAP,
+       BLOCK_MCP_FIO,
+       BLOCK_LAST_INIT,
+       BLOCK_PRS_FC,
+       BLOCK_PBF_FC,
+       BLOCK_NIG_LB_FC,
+       BLOCK_NIG_LB_FC_PLLH,
+       BLOCK_NIG_TX_FC_PLLH,
+       BLOCK_NIG_TX_FC,
+       BLOCK_NIG_RX_FC_PLLH,
+       BLOCK_NIG_RX_FC,
        MAX_BLOCK_ID
 };
 
@@ -198,6 +123,13 @@ enum bin_dbg_buffer_type {
        BIN_BUF_DBG_ATTN_REGS /* Attention registers */,
        BIN_BUF_DBG_ATTN_INDEXES /* Attention indexes */,
        BIN_BUF_DBG_ATTN_NAME_OFFSETS /* Attention name offsets */,
+       BIN_BUF_DBG_BLOCKS /* Blocks debug data */,
+       BIN_BUF_DBG_BLOCKS_CHIP_DATA /* Blocks debug chip data */,
+       BIN_BUF_DBG_BUS_LINES /* Blocks debug bus lines */,
+       BIN_BUF_DBG_BLOCKS_USER_DATA /* Blocks debug user data */,
+       BIN_BUF_DBG_BLOCKS_CHIP_USER_DATA /* Blocks debug chip user data */,
+       BIN_BUF_DBG_BUS_LINE_NAME_OFFSETS /* Debug Bus line name offsets */,
+       BIN_BUF_DBG_RESET_REGS /* Reset registers */,
        BIN_BUF_DBG_PARSING_STRINGS /* Debug Tools parsing strings */,
        MAX_BIN_DBG_BUFFER_TYPE
 };
@@ -207,10 +139,10 @@ enum bin_dbg_buffer_type {
  * Attention bit mapping
  */
 struct dbg_attn_bit_mapping {
-       __le16 data;
+       u16 data;
 /* The index of an attention in the blocks attentions list
- * (if is_unused_idx_cnt=0), or a number of consecutive unused attention bits
- * (if is_unused_idx_cnt=1)
+ * (if is_unused_bit_cnt=0), or a number of consecutive unused attention bits
+ * (if is_unused_bit_cnt=1)
  */
 #define DBG_ATTN_BIT_MAPPING_VAL_MASK                0x7FFF
 #define DBG_ATTN_BIT_MAPPING_VAL_SHIFT               0
@@ -229,14 +161,14 @@ struct dbg_attn_block_type_data {
 /* Offset of this block attention names in the debug attention name offsets
  * array
  */
-       __le16 names_offset;
-       __le16 reserved1;
+       u16 names_offset;
+       u16 reserved1;
        u8 num_regs /* Number of attention registers in this block */;
        u8 reserved2;
 /* Offset of this blocks attention registers in the attention registers array
  * (in dbg_attn_reg units)
  */
-       __le16 regs_offset;
+       u16 regs_offset;
 };
 
 /*
@@ -254,20 +186,20 @@ struct dbg_attn_block {
  * Attention register result
  */
 struct dbg_attn_reg_result {
-       __le32 data;
+       u32 data;
 /* STS attention register GRC address (in dwords) */
 #define DBG_ATTN_REG_RESULT_STS_ADDRESS_MASK   0xFFFFFF
 #define DBG_ATTN_REG_RESULT_STS_ADDRESS_SHIFT  0
 /* Number of attention indexes in this register */
-#define DBG_ATTN_REG_RESULT_NUM_ATTN_IDX_MASK  0xFF
-#define DBG_ATTN_REG_RESULT_NUM_ATTN_IDX_SHIFT 24
-/* Offset of this registers block attention indexes (values in the range
- * 0..number of block attentions)
- */
-       __le16 attn_idx_offset;
-       __le16 reserved;
-       __le32 sts_val /* Value read from the STS attention register */;
-       __le32 mask_val /* Value read from the MASK attention register */;
+#define DBG_ATTN_REG_RESULT_NUM_REG_ATTN_MASK  0xFF
+#define DBG_ATTN_REG_RESULT_NUM_REG_ATTN_SHIFT 24
+/* The offset of this registers attentions within the blocks attentions list
+ * (a value in the range 0..number of block attentions-1)
+ */
+       u16 block_attn_offset;
+       u16 reserved;
+       u32 sts_val /* Value read from the STS attention register */;
+       u32 mask_val /* Value read from the MASK attention register */;
 };
 
 /*
@@ -279,13 +211,13 @@ struct dbg_attn_block_result {
 /* Value from dbg_attn_type enum */
 #define DBG_ATTN_BLOCK_RESULT_ATTN_TYPE_MASK  0x3
 #define DBG_ATTN_BLOCK_RESULT_ATTN_TYPE_SHIFT 0
-/* Number of registers in the blok in which at least one attention bit is set */
+/* Number of registers in block in which at least one attention bit is set */
 #define DBG_ATTN_BLOCK_RESULT_NUM_REGS_MASK   0x3F
 #define DBG_ATTN_BLOCK_RESULT_NUM_REGS_SHIFT  2
 /* Offset of this registers block attention names in the attention name offsets
  * array
  */
-       __le16 names_offset;
+       u16 names_offset;
 /* result data for each register in the block in which at least one attention
  * bit is set
  */
@@ -298,7 +230,7 @@ struct dbg_attn_block_result {
  * mode header
  */
 struct dbg_mode_hdr {
-       __le16 data;
+       u16 data;
 /* indicates if a mode expression should be evaluated (0/1) */
 #define DBG_MODE_HDR_EVAL_MODE_MASK         0x1
 #define DBG_MODE_HDR_EVAL_MODE_SHIFT        0
@@ -313,22 +245,20 @@ struct dbg_mode_hdr {
  * Attention register
  */
 struct dbg_attn_reg {
-       struct dbg_mode_hdr mode /* Mode header */;
-/* Offset of this registers block attention indexes (values in the range
- * 0..number of block attentions)
+/* The offset of this registers attentions within the blocks attentions list
+ * (a value in the range 0..number of block attentions-1)
  */
-       __le16 attn_idx_offset;
-       __le32 data;
+       u16 block_attn_offset;
+       u32 data;
 /* STS attention register GRC address (in dwords) */
 #define DBG_ATTN_REG_STS_ADDRESS_MASK   0xFFFFFF
 #define DBG_ATTN_REG_STS_ADDRESS_SHIFT  0
-/* Number of attention indexes in this register */
-#define DBG_ATTN_REG_NUM_ATTN_IDX_MASK  0xFF
-#define DBG_ATTN_REG_NUM_ATTN_IDX_SHIFT 24
+/* Number of attention in this register */
+#define DBG_ATTN_REG_NUM_REG_ATTN_MASK  0xFF
+#define DBG_ATTN_REG_NUM_REG_ATTN_SHIFT 24
 /* STS_CLR attention register GRC address (in dwords) */
-       __le32 sts_clr_address;
-/* MASK attention register GRC address (in dwords) */
-       __le32 mask_address;
+       u32 sts_clr_address;
+       u32 mask_address /* MASK attention register GRC address (in dwords) */;
 };
 
 
@@ -343,6 +273,132 @@ enum dbg_attn_type {
 };
 
 
+/*
+ * Block debug data
+ */
+struct dbg_block {
+       u8 name[15] /* Block name */;
+/* The letter (char) of the associated Storm, or 0 if no associated Storm. */
+       u8 associated_storm_letter;
+};
+
+
+/*
+ * Chip-specific block debug data
+ */
+struct dbg_block_chip {
+       u8 flags;
+/* Indicates if the block is removed in this chip (0/1). */
+#define DBG_BLOCK_CHIP_IS_REMOVED_MASK           0x1
+#define DBG_BLOCK_CHIP_IS_REMOVED_SHIFT          0
+/* Indicates if this block has a reset register (0/1). */
+#define DBG_BLOCK_CHIP_HAS_RESET_REG_MASK        0x1
+#define DBG_BLOCK_CHIP_HAS_RESET_REG_SHIFT       1
+/* Indicates if this block should be taken out of reset before GRC Dump (0/1).
+ * Valid only if has_reset_reg is set.
+ */
+#define DBG_BLOCK_CHIP_UNRESET_BEFORE_DUMP_MASK  0x1
+#define DBG_BLOCK_CHIP_UNRESET_BEFORE_DUMP_SHIFT 2
+/* Indicates if this block has a debug bus (0/1). */
+#define DBG_BLOCK_CHIP_HAS_DBG_BUS_MASK          0x1
+#define DBG_BLOCK_CHIP_HAS_DBG_BUS_SHIFT         3
+/* Indicates if this block has a latency events debug line (0/1). Valid only
+ * if has_dbg_bus is set.
+ */
+#define DBG_BLOCK_CHIP_HAS_LATENCY_EVENTS_MASK   0x1
+#define DBG_BLOCK_CHIP_HAS_LATENCY_EVENTS_SHIFT  4
+#define DBG_BLOCK_CHIP_RESERVED0_MASK            0x7
+#define DBG_BLOCK_CHIP_RESERVED0_SHIFT           5
+/* The DBG block client ID of this block/chip. Valid only if has_dbg_bus is
+ * set.
+ */
+       u8 dbg_client_id;
+/* The ID of the reset register of this block/chip in the dbg_reset_reg
+ * array.
+ */
+       u8 reset_reg_id;
+/* The bit offset of this block/chip in the reset register. Valid only if
+ * has_reset_reg is set.
+ */
+       u8 reset_reg_bit_offset;
+       struct dbg_mode_hdr dbg_bus_mode /* Mode header */;
+       u16 reserved1;
+       u8 reserved2;
+/* Number of Debug Bus lines in this block/chip (excluding signature and latency
+ * events). Valid only if has_dbg_bus is set.
+ */
+       u8 num_of_dbg_bus_lines;
+/* Offset of this block/chip Debug Bus lines in the Debug Bus lines array. Valid
+ * only if has_dbg_bus is set.
+ */
+       u16 dbg_bus_lines_offset;
+/* GRC address of the Debug Bus dbg_select register (in dwords). Valid only if
+ * has_dbg_bus is set.
+ */
+       u32 dbg_select_reg_addr;
+/* GRC address of the Debug Bus dbg_dword_enable register (in dwords). Valid
+ * only if has_dbg_bus is set.
+ */
+       u32 dbg_dword_enable_reg_addr;
+/* GRC address of the Debug Bus dbg_shift register (in dwords). Valid only if
+ * has_dbg_bus is set.
+ */
+       u32 dbg_shift_reg_addr;
+/* GRC address of the Debug Bus dbg_force_valid register (in dwords). Valid only
+ * if has_dbg_bus is set.
+ */
+       u32 dbg_force_valid_reg_addr;
+/* GRC address of the Debug Bus dbg_force_frame register (in dwords). Valid only
+ * if has_dbg_bus is set.
+ */
+       u32 dbg_force_frame_reg_addr;
+};
+
+
+/*
+ * Chip-specific block user debug data
+ */
+struct dbg_block_chip_user {
+/* Number of debug bus lines in this block (excluding signature and latency
+ * events).
+ */
+       u8 num_of_dbg_bus_lines;
+/* Indicates if this block has a latency events debug line (0/1). */
+       u8 has_latency_events;
+/* Offset of this blocks lines in the debug bus line name offsets array. */
+       u16 names_offset;
+};
+
+
+/*
+ * Block user debug data
+ */
+struct dbg_block_user {
+       u8 name[16] /* Block name */;
+};
+
+
+/*
+ * Block Debug line data
+ */
+struct dbg_bus_line {
+       u8 data;
+/* Number of groups in the line (0-3) */
+#define DBG_BUS_LINE_NUM_OF_GROUPS_MASK  0xF
+#define DBG_BUS_LINE_NUM_OF_GROUPS_SHIFT 0
+/* Indicates if this is a 128b line (0) or a 256b line (1). */
+#define DBG_BUS_LINE_IS_256B_MASK        0x1
+#define DBG_BUS_LINE_IS_256B_SHIFT       4
+#define DBG_BUS_LINE_RESERVED_MASK       0x7
+#define DBG_BUS_LINE_RESERVED_SHIFT      5
+/* Four 2-bit values, indicating the size of each group minus 1 (i.e.
+ * value=0 means size=1, value=1 means size=2, etc), starting from lsb.
+ * The sizes are in dwords (if is_256b=0) or in qwords (if is_256b=1).
+ */
+       u8 group_sizes;
+};
+
+
 /*
  * condition header for registers dump
  */
@@ -357,18 +413,21 @@ struct dbg_dump_cond_hdr {
  * memory data for registers dump
  */
 struct dbg_dump_mem {
-       __le32 dword0;
+       u32 dword0;
 /* register address (in dwords) */
 #define DBG_DUMP_MEM_ADDRESS_MASK       0xFFFFFF
 #define DBG_DUMP_MEM_ADDRESS_SHIFT      0
 #define DBG_DUMP_MEM_MEM_GROUP_ID_MASK  0xFF /* memory group ID */
 #define DBG_DUMP_MEM_MEM_GROUP_ID_SHIFT 24
-       __le32 dword1;
+       u32 dword1;
 /* register size (in dwords) */
 #define DBG_DUMP_MEM_LENGTH_MASK        0xFFFFFF
 #define DBG_DUMP_MEM_LENGTH_SHIFT       0
-#define DBG_DUMP_MEM_RESERVED_MASK      0xFF
-#define DBG_DUMP_MEM_RESERVED_SHIFT     24
+/* indicates if the register is wide-bus */
+#define DBG_DUMP_MEM_WIDE_BUS_MASK      0x1
+#define DBG_DUMP_MEM_WIDE_BUS_SHIFT     24
+#define DBG_DUMP_MEM_RESERVED_MASK      0x7F
+#define DBG_DUMP_MEM_RESERVED_SHIFT     25
 };
 
 
@@ -376,12 +435,15 @@ struct dbg_dump_mem {
  * register data for registers dump
  */
 struct dbg_dump_reg {
-       __le32 data;
+       u32 data;
 /* register address (in dwords) */
-#define DBG_DUMP_REG_ADDRESS_MASK  0xFFFFFF
-#define DBG_DUMP_REG_ADDRESS_SHIFT 0
-#define DBG_DUMP_REG_LENGTH_MASK   0xFF /* register size (in dwords) */
-#define DBG_DUMP_REG_LENGTH_SHIFT  24
+#define DBG_DUMP_REG_ADDRESS_MASK   0x7FFFFF /* register address (in dwords) */
+#define DBG_DUMP_REG_ADDRESS_SHIFT  0
+/* indicates if the register is wide-bus */
+#define DBG_DUMP_REG_WIDE_BUS_MASK  0x1
+#define DBG_DUMP_REG_WIDE_BUS_SHIFT 23
+#define DBG_DUMP_REG_LENGTH_MASK    0xFF /* register size (in dwords) */
+#define DBG_DUMP_REG_LENGTH_SHIFT   24
 };
 
 
@@ -389,7 +451,7 @@ struct dbg_dump_reg {
  * split header for registers dump
  */
 struct dbg_dump_split_hdr {
-       __le32 hdr;
+       u32 hdr;
 /* size in dwords of the data following this header */
 #define DBG_DUMP_SPLIT_HDR_DATA_SIZE_MASK      0xFFFFFF
 #define DBG_DUMP_SPLIT_HDR_DATA_SIZE_SHIFT     0
@@ -403,8 +465,7 @@ struct dbg_dump_split_hdr {
  */
 struct dbg_idle_chk_cond_hdr {
        struct dbg_mode_hdr mode /* Mode header */;
-/* size in dwords of the data following this header */
-       __le16 data_size;
+       u16 data_size /* size in dwords of the data following this header */;
 };
 
 
@@ -412,14 +473,17 @@ struct dbg_idle_chk_cond_hdr {
  * Idle Check condition register
  */
 struct dbg_idle_chk_cond_reg {
-       __le32 data;
+       u32 data;
 /* Register GRC address (in dwords) */
-#define DBG_IDLE_CHK_COND_REG_ADDRESS_MASK   0xFFFFFF
+#define DBG_IDLE_CHK_COND_REG_ADDRESS_MASK   0x7FFFFF
 #define DBG_IDLE_CHK_COND_REG_ADDRESS_SHIFT  0
+/* indicates if the register is wide-bus */
+#define DBG_IDLE_CHK_COND_REG_WIDE_BUS_MASK  0x1
+#define DBG_IDLE_CHK_COND_REG_WIDE_BUS_SHIFT 23
 /* value from block_id enum */
 #define DBG_IDLE_CHK_COND_REG_BLOCK_ID_MASK  0xFF
 #define DBG_IDLE_CHK_COND_REG_BLOCK_ID_SHIFT 24
-       __le16 num_entries /* number of registers entries to check */;
+       u16 num_entries /* number of registers entries to check */;
        u8 entry_size /* size of registers entry (in dwords) */;
        u8 start_entry /* index of the first entry to check */;
 };
@@ -429,14 +493,17 @@ struct dbg_idle_chk_cond_reg {
  * Idle Check info register
  */
 struct dbg_idle_chk_info_reg {
-       __le32 data;
+       u32 data;
 /* Register GRC address (in dwords) */
-#define DBG_IDLE_CHK_INFO_REG_ADDRESS_MASK   0xFFFFFF
+#define DBG_IDLE_CHK_INFO_REG_ADDRESS_MASK   0x7FFFFF
 #define DBG_IDLE_CHK_INFO_REG_ADDRESS_SHIFT  0
+/* indicates if the register is wide-bus */
+#define DBG_IDLE_CHK_INFO_REG_WIDE_BUS_MASK  0x1
+#define DBG_IDLE_CHK_INFO_REG_WIDE_BUS_SHIFT 23
 /* value from block_id enum */
 #define DBG_IDLE_CHK_INFO_REG_BLOCK_ID_MASK  0xFF
 #define DBG_IDLE_CHK_INFO_REG_BLOCK_ID_SHIFT 24
-       __le16 size /* register size in dwords */;
+       u16 size /* register size in dwords */;
        struct dbg_mode_hdr mode /* Mode header */;
 };
 
@@ -454,8 +521,8 @@ union dbg_idle_chk_reg {
  * Idle Check result header
  */
 struct dbg_idle_chk_result_hdr {
-       __le16 rule_id /* Failing rule index */;
-       __le16 mem_entry_id /* Failing memory entry index */;
+       u16 rule_id /* Failing rule index */;
+       u16 mem_entry_id /* Failing memory entry index */;
        u8 num_dumped_cond_regs /* number of dumped condition registers */;
        u8 num_dumped_info_regs /* number of dumped condition registers */;
        u8 severity /* from dbg_idle_chk_severity_types enum */;
@@ -475,7 +542,7 @@ struct dbg_idle_chk_result_reg_hdr {
 #define DBG_IDLE_CHK_RESULT_REG_HDR_REG_ID_MASK  0x7F
 #define DBG_IDLE_CHK_RESULT_REG_HDR_REG_ID_SHIFT 1
        u8 start_entry /* index of the first checked entry */;
-       __le16 size /* register size in dwords */;
+       u16 size /* register size in dwords */;
 };
 
 
@@ -483,7 +550,7 @@ struct dbg_idle_chk_result_reg_hdr {
  * Idle Check rule
  */
 struct dbg_idle_chk_rule {
-       __le16 rule_id /* Idle Check rule ID */;
+       u16 rule_id /* Idle Check rule ID */;
        u8 severity /* value from dbg_idle_chk_severity_types enum */;
        u8 cond_id /* Condition ID */;
        u8 num_cond_regs /* number of condition registers */;
@@ -493,11 +560,11 @@ struct dbg_idle_chk_rule {
 /* offset of this rules registers in the idle check register array
  * (in dbg_idle_chk_reg units)
  */
-       __le16 reg_offset;
+       u16 reg_offset;
 /* offset of this rules immediate values in the immediate values array
  * (in dwords)
  */
-       __le16 imm_offset;
+       u16 imm_offset;
 };
 
 
@@ -505,7 +572,7 @@ struct dbg_idle_chk_rule {
  * Idle Check rule parsing data
  */
 struct dbg_idle_chk_rule_parsing_data {
-       __le32 data;
+       u32 data;
 /* indicates if this register has a FW message */
 #define DBG_IDLE_CHK_RULE_PARSING_DATA_HAS_FW_MSG_MASK  0x1
 #define DBG_IDLE_CHK_RULE_PARSING_DATA_HAS_FW_MSG_SHIFT 0
@@ -531,47 +598,42 @@ enum dbg_idle_chk_severity_types {
 
 
 /*
- * Debug Bus block data
- */
-struct dbg_bus_block_data {
-/* Indicates if the block is enabled for recording (0/1) */
-       u8 enabled;
-       u8 hw_id /* HW ID associated with the block */;
-       u8 line_num /* Debug line number to select */;
-       u8 right_shift /* Number of units to  right the debug data (0-3) */;
-       u8 cycle_en /* 4-bit value: bit i set -> unit i is enabled. */;
-/* 4-bit value: bit i set -> unit i is forced valid. */
-       u8 force_valid;
-/* 4-bit value: bit i set -> unit i frame bit is forced. */
-       u8 force_frame;
-       u8 reserved;
+ * Reset register
+ */
+struct dbg_reset_reg {
+       u32 data;
+#define DBG_RESET_REG_ADDR_MASK        0xFFFFFF /* GRC address (in dwords) */
+#define DBG_RESET_REG_ADDR_SHIFT       0
+/* indicates if this register is removed (0/1). */
+#define DBG_RESET_REG_IS_REMOVED_MASK  0x1
+#define DBG_RESET_REG_IS_REMOVED_SHIFT 24
+#define DBG_RESET_REG_RESERVED_MASK    0x7F
+#define DBG_RESET_REG_RESERVED_SHIFT   25
 };
 
 
 /*
- * Debug Bus Clients
- */
-enum dbg_bus_clients {
-       DBG_BUS_CLIENT_RBCN,
-       DBG_BUS_CLIENT_RBCP,
-       DBG_BUS_CLIENT_RBCR,
-       DBG_BUS_CLIENT_RBCT,
-       DBG_BUS_CLIENT_RBCU,
-       DBG_BUS_CLIENT_RBCF,
-       DBG_BUS_CLIENT_RBCX,
-       DBG_BUS_CLIENT_RBCS,
-       DBG_BUS_CLIENT_RBCH,
-       DBG_BUS_CLIENT_RBCZ,
-       DBG_BUS_CLIENT_OTHER_ENGINE,
-       DBG_BUS_CLIENT_TIMESTAMP,
-       DBG_BUS_CLIENT_CPU,
-       DBG_BUS_CLIENT_RBCY,
-       DBG_BUS_CLIENT_RBCQ,
-       DBG_BUS_CLIENT_RBCM,
-       DBG_BUS_CLIENT_RBCB,
-       DBG_BUS_CLIENT_RBCW,
-       DBG_BUS_CLIENT_RBCV,
-       MAX_DBG_BUS_CLIENTS
+ * Debug Bus block data
+ */
+struct dbg_bus_block_data {
+/* 4 bit value, bit i set -> dword/qword i is enabled in block. */
+       u8 enable_mask;
+/* Number of dwords/qwords to cyclically  right the blocks output (0-3). */
+       u8 right_shift;
+/* 4 bit value, bit i set -> dword/qword i is forced valid in block. */
+       u8 force_valid_mask;
+/* 4 bit value, bit i set -> dword/qword i frame bit is forced in block. */
+       u8 force_frame_mask;
+/* bit i set -> dword i contains this blocks data (after shifting). */
+       u8 dword_mask;
+       u8 line_num /* Debug line number to select */;
+       u8 hw_id /* HW ID associated with the block */;
+       u8 flags;
+/* 0/1. If 1, the debug line is 256b, otherwise its 128b. */
+#define DBG_BUS_BLOCK_DATA_IS_256B_LINE_MASK  0x1
+#define DBG_BUS_BLOCK_DATA_IS_256B_LINE_SHIFT 0
+#define DBG_BUS_BLOCK_DATA_RESERVED_MASK      0x7F
+#define DBG_BUS_BLOCK_DATA_RESERVED_SHIFT     1
 };
 
 
@@ -593,12 +655,31 @@ enum dbg_bus_constraint_ops {
 };
 
 
+/*
+ * Debug Bus trigger state data
+ */
+struct dbg_bus_trigger_state_data {
+/* Message length (in cycles) to be used for message-based trigger constraints.
+ * If set to 0, message length is based only on frame bit received from HW.
+ */
+       u8 msg_len;
+/* A bit for each dword in the debug bus cycle, indicating if this dword appears
+ * in a trigger constraint (1) or not (0)
+ */
+       u8 constraint_dword_mask;
+/* Storm ID to trigger on. Valid only when triggering on Storm data.
+ * (use enum dbg_storms)
+ */
+       u8 storm_id;
+       u8 reserved;
+};
+
 /*
  * Debug Bus memory address
  */
 struct dbg_bus_mem_addr {
-       __le32 lo;
-       __le32 hi;
+       u32 lo;
+       u32 hi;
 };
 
 /*
@@ -607,7 +688,7 @@ struct dbg_bus_mem_addr {
 struct dbg_bus_pci_buf_data {
        struct dbg_bus_mem_addr phys_addr /* PCI buffer physical address */;
        struct dbg_bus_mem_addr virt_addr /* PCI buffer virtual address */;
-       __le32 size /* PCI buffer size in bytes */;
+       u32 size /* PCI buffer size in bytes */;
 };
 
 /*
@@ -640,14 +721,8 @@ union dbg_bus_storm_eid_params {
  * Debug Bus Storm data
  */
 struct dbg_bus_storm_data {
-/* Indicates if the Storm is enabled for fast debug recording (0/1) */
-       u8 fast_enabled;
-/* Fast debug Storm mode, valid only if fast_enabled is set */
-       u8 fast_mode;
-/* Indicates if the Storm is enabled for slow debug recording (0/1) */
-       u8 slow_enabled;
-/* Slow debug Storm mode, valid only if slow_enabled is set */
-       u8 slow_mode;
+       u8 enabled /* indicates if the Storm is enabled for recording */;
+       u8 mode /* Storm debug mode, valid only if the Storm is enabled */;
        u8 hw_id /* HW ID associated with the Storm */;
        u8 eid_filter_en /* Indicates if EID filtering is performed (0/1) */;
 /* 1 = EID range filter, 0 = EID mask filter. Valid only if eid_filter_en is
@@ -657,32 +732,24 @@ struct dbg_bus_storm_data {
        u8 cid_filter_en /* Indicates if CID filtering is performed (0/1) */;
 /* EID filter params to filter on. Valid only if eid_filter_en is set. */
        union dbg_bus_storm_eid_params eid_filter_params;
-       __le16 reserved;
-/* CID to filter on. Valid only if cid_filter_en is set. */
-       __le32 cid;
+       u32 cid /* CID to filter on. Valid only if cid_filter_en is set. */;
 };
 
 /*
  * Debug Bus data
  */
 struct dbg_bus_data {
-       __le32 app_version /* The tools version number of the application */;
+       u32 app_version /* The tools version number of the application */;
        u8 state /* The current debug bus state */;
-       u8 hw_dwords /* HW dwords per cycle */;
-       u8 next_hw_id /* Next HW ID to be associated with an input */;
+       u8 mode_256b_en /* Indicates if the 256 bit mode is enabled */;
        u8 num_enabled_blocks /* Number of blocks enabled for recording */;
        u8 num_enabled_storms /* Number of Storms enabled for recording */;
        u8 target /* Output target */;
-       u8 next_trigger_state /* ID of next trigger state to be added */;
-/* ID of next filter/trigger constraint to be added */
-       u8 next_constraint_id;
        u8 one_shot_en /* Indicates if one-shot mode is enabled (0/1) */;
        u8 grc_input_en /* Indicates if GRC recording is enabled (0/1) */;
 /* Indicates if timestamp recording is enabled (0/1) */
        u8 timestamp_input_en;
        u8 filter_en /* Indicates if the recording filter is enabled (0/1) */;
-/* Indicates if the recording trigger is enabled (0/1) */
-       u8 trigger_en;
 /* If true, the next added constraint belong to the filter. Otherwise,
  * it belongs to the last added trigger state. Valid only if either filter or
  * triggers are enabled.
@@ -696,106 +763,46 @@ struct dbg_bus_data {
  * Valid only if both filter and trigger are enabled (0/1)
  */
        u8 filter_post_trigger;
-/* If true, all inputs are associated with HW ID 0. Otherwise, each input is
- * assigned a different HW ID (0/1)
+/* Indicates if the recording trigger is enabled (0/1) */
+       u8 trigger_en;
+/* A bit for each dword in the debug bus cycle, indicating if this dword
+ * appears in a filter constraint (1) or not (0)
+ */
+       u8 filter_constraint_dword_mask;
+       u8 next_trigger_state /* ID of next trigger state to be added */;
+/* ID of next filter/trigger constraint to be added */
+       u8 next_constraint_id;
+/* trigger states data */
+       struct dbg_bus_trigger_state_data trigger_states[3];
+/* Message length (in cycles) to be used for message-based filter constraints.
+ * If set to 0 message length is based only on frame bit received from HW.
  */
-       u8 unify_inputs;
+       u8 filter_msg_len;
 /* Indicates if the other engine sends it NW recording to this engine (0/1) */
        u8 rcv_from_other_engine;
+/* A bit for each dword in the debug bus cycle, indicating if this dword is
+ * recorded (1) or not (0)
+ */
+       u8 blocks_dword_mask;
+/* Indicates if there are dwords in the debug bus cycle which are recorded
+ * by more tan one block (0/1)
+ */
+       u8 blocks_dword_overlap;
+/* The HW IDs of the recorded HW blocks, where bits i*3..i*3+2 contain the
+ * HW ID of dword/qword i
+ */
+       u32 hw_id_mask;
 /* Debug Bus PCI buffer data. Valid only when the target is
  * DBG_BUS_TARGET_ID_PCI.
  */
        struct dbg_bus_pci_buf_data pci_buf;
-       __le16 reserved;
 /* Debug Bus data for each block */
-       struct dbg_bus_block_data blocks[80];
+       struct dbg_bus_block_data blocks[132];
 /* Debug Bus data for each block */
        struct dbg_bus_storm_data storms[6];
 };
 
 
-/*
- * Debug bus filter types
- */
-enum dbg_bus_filter_types {
-       DBG_BUS_FILTER_TYPE_OFF /* filter always off */,
-       DBG_BUS_FILTER_TYPE_PRE /* filter before trigger only */,
-       DBG_BUS_FILTER_TYPE_POST /* filter after trigger only */,
-       DBG_BUS_FILTER_TYPE_ON /* filter always on */,
-       MAX_DBG_BUS_FILTER_TYPES
-};
-
-
-/*
- * Debug bus frame modes
- */
-enum dbg_bus_frame_modes {
-       DBG_BUS_FRAME_MODE_0HW_4ST = 0 /* 0 HW dwords, 4 Storm dwords */,
-       DBG_BUS_FRAME_MODE_4HW_0ST = 3 /* 4 HW dwords, 0 Storm dwords */,
-       DBG_BUS_FRAME_MODE_8HW_0ST = 4 /* 8 HW dwords, 0 Storm dwords */,
-       MAX_DBG_BUS_FRAME_MODES
-};
-
-
-/*
- * Debug bus input types
- */
-enum dbg_bus_input_types {
-       DBG_BUS_INPUT_TYPE_STORM,
-       DBG_BUS_INPUT_TYPE_BLOCK,
-       MAX_DBG_BUS_INPUT_TYPES
-};
-
-
-
-/*
- * Debug bus other engine mode
- */
-enum dbg_bus_other_engine_modes {
-       DBG_BUS_OTHER_ENGINE_MODE_NONE,
-       DBG_BUS_OTHER_ENGINE_MODE_DOUBLE_BW_TX,
-       DBG_BUS_OTHER_ENGINE_MODE_DOUBLE_BW_RX,
-       DBG_BUS_OTHER_ENGINE_MODE_CROSS_ENGINE_TX,
-       DBG_BUS_OTHER_ENGINE_MODE_CROSS_ENGINE_RX,
-       MAX_DBG_BUS_OTHER_ENGINE_MODES
-};
-
-
-
-/*
- * Debug bus post-trigger recording types
- */
-enum dbg_bus_post_trigger_types {
-       DBG_BUS_POST_TRIGGER_RECORD /* start recording after trigger */,
-       DBG_BUS_POST_TRIGGER_DROP /* drop data after trigger */,
-       MAX_DBG_BUS_POST_TRIGGER_TYPES
-};
-
-
-/*
- * Debug bus pre-trigger recording types
- */
-enum dbg_bus_pre_trigger_types {
-       DBG_BUS_PRE_TRIGGER_START_FROM_ZERO /* start recording from time 0 */,
-/* start recording some chunks before trigger */
-       DBG_BUS_PRE_TRIGGER_NUM_CHUNKS,
-       DBG_BUS_PRE_TRIGGER_DROP /* drop data before trigger */,
-       MAX_DBG_BUS_PRE_TRIGGER_TYPES
-};
-
-
-/*
- * Debug bus SEMI frame modes
- */
-enum dbg_bus_semi_frame_modes {
-/* 0 slow dwords, 4 fast dwords */
-       DBG_BUS_SEMI_FRAME_MODE_0SLOW_4FAST = 0,
-/* 4 slow dwords, 0 fast dwords */
-       DBG_BUS_SEMI_FRAME_MODE_4SLOW_0FAST = 3,
-       MAX_DBG_BUS_SEMI_FRAME_MODES
-};
-
-
 /*
  * Debug bus states
  */
@@ -824,6 +831,8 @@ enum dbg_bus_storm_modes {
        DBG_BUS_STORM_MODE_LD_ST_ADDR /* load/store address (fast debug) */,
        DBG_BUS_STORM_MODE_DRA_FSM /* DRA state machines (fast debug) */,
        DBG_BUS_STORM_MODE_RH /* recording handlers (fast debug) */,
+/* recording handlers with store messages (fast debug) */
+       DBG_BUS_STORM_MODE_RH_WITH_STORE,
        DBG_BUS_STORM_MODE_FOC /* FOC: FIN + DRA Rd (slow debug) */,
        DBG_BUS_STORM_MODE_EXT_STORE /* FOC: External Store (slow) */,
        MAX_DBG_BUS_STORM_MODES
@@ -842,16 +851,18 @@ enum dbg_bus_targets {
 };
 
 
+
 /*
  * GRC Dump data
  */
 struct dbg_grc_data {
-/* Value of each GRC parameter. Array size must match enum dbg_grc_params. */
-       __le32 param_val[40];
-/* Indicates for each GRC parameter if it was set by the user (0/1).
- * Array size must match the enum dbg_grc_params.
+/* Indicates if the GRC parameters were initialized */
+       u8 params_initialized;
+       u8 reserved1;
+       u16 reserved2;
+/* Value of each GRC parameter. Array size must match the enum dbg_grc_params.
  */
-       u8 param_set_by_user[40];
+       u32 param_val[48];
 };
 
 
@@ -876,13 +887,13 @@ enum dbg_grc_params {
        DBG_GRC_PARAM_DUMP_CAU /* dump CAU memories (0/1) */,
        DBG_GRC_PARAM_DUMP_QM /* dump QM memories (0/1) */,
        DBG_GRC_PARAM_DUMP_MCP /* dump MCP memories (0/1) */,
-       DBG_GRC_PARAM_RESERVED /* reserved */,
+       DBG_GRC_PARAM_DUMP_DORQ /* dump DORQ memories (0/1) */,
        DBG_GRC_PARAM_DUMP_CFC /* dump CFC memories (0/1) */,
        DBG_GRC_PARAM_DUMP_IGU /* dump IGU memories (0/1) */,
        DBG_GRC_PARAM_DUMP_BRB /* dump BRB memories (0/1) */,
        DBG_GRC_PARAM_DUMP_BTB /* dump BTB memories (0/1) */,
        DBG_GRC_PARAM_DUMP_BMB /* dump BMB memories (0/1) */,
-       DBG_GRC_PARAM_DUMP_NIG /* dump NIG memories (0/1) */,
+       DBG_GRC_PARAM_RESERVD1 /* reserved */,
        DBG_GRC_PARAM_DUMP_MULD /* dump MULD memories (0/1) */,
        DBG_GRC_PARAM_DUMP_PRS /* dump PRS memories (0/1) */,
        DBG_GRC_PARAM_DUMP_DMAE /* dump PRS memories (0/1) */,
@@ -891,8 +902,9 @@ enum dbg_grc_params {
        DBG_GRC_PARAM_DUMP_DIF /* dump DIF memories (0/1) */,
        DBG_GRC_PARAM_DUMP_STATIC /* dump static debug data (0/1) */,
        DBG_GRC_PARAM_UNSTALL /* un-stall Storms after dump (0/1) */,
-       DBG_GRC_PARAM_NUM_LCIDS /* number of LCIDs (0..320) */,
-       DBG_GRC_PARAM_NUM_LTIDS /* number of LTIDs (0..320) */,
+       DBG_GRC_PARAM_RESERVED2 /* reserved */,
+/* MCP Trace meta data size in bytes */
+       DBG_GRC_PARAM_MCP_TRACE_META_SIZE,
 /* preset: exclude all memories from dump (1 only) */
        DBG_GRC_PARAM_EXCLUDE_ALL,
 /* preset: include memories for crash dump (1 only) */
@@ -901,26 +913,14 @@ enum dbg_grc_params {
        DBG_GRC_PARAM_PARITY_SAFE,
        DBG_GRC_PARAM_DUMP_CM /* dump CM memories (0/1) */,
        DBG_GRC_PARAM_DUMP_PHY /* dump PHY memories (0/1) */,
+       DBG_GRC_PARAM_NO_MCP /* dont perform MCP commands (0/1) */,
+       DBG_GRC_PARAM_NO_FW_VER /* dont read FW/MFW version (0/1) */,
+       DBG_GRC_PARAM_RESERVED3 /* reserved */,
+       DBG_GRC_PARAM_DUMP_MCP_HW_DUMP /* dump MCP HW Dump (0/1) */,
        MAX_DBG_GRC_PARAMS
 };
 
 
-/*
- * Debug reset registers
- */
-enum dbg_reset_regs {
-       DBG_RESET_REG_MISCS_PL_UA,
-       DBG_RESET_REG_MISCS_PL_HV,
-       DBG_RESET_REG_MISCS_PL_HV_2,
-       DBG_RESET_REG_MISC_PL_UA,
-       DBG_RESET_REG_MISC_PL_HV,
-       DBG_RESET_REG_MISC_PL_PDA_VMAIN_1,
-       DBG_RESET_REG_MISC_PL_PDA_VMAIN_2,
-       DBG_RESET_REG_MISC_PL_PDA_VAUX,
-       MAX_DBG_RESET_REGS
-};
-
-
 /*
  * Debug status codes
  */
@@ -934,15 +934,15 @@ enum dbg_status {
        DBG_STATUS_INVALID_PCI_BUF_SIZE,
        DBG_STATUS_PCI_BUF_ALLOC_FAILED,
        DBG_STATUS_PCI_BUF_NOT_ALLOCATED,
-       DBG_STATUS_TOO_MANY_INPUTS,
-       DBG_STATUS_INPUT_OVERLAP,
-       DBG_STATUS_HW_ONLY_RECORDING,
+       DBG_STATUS_INVALID_FILTER_TRIGGER_DWORDS,
+       DBG_STATUS_NO_MATCHING_FRAMING_MODE,
+       DBG_STATUS_VFC_READ_ERROR,
        DBG_STATUS_STORM_ALREADY_ENABLED,
        DBG_STATUS_STORM_NOT_ENABLED,
        DBG_STATUS_BLOCK_ALREADY_ENABLED,
        DBG_STATUS_BLOCK_NOT_ENABLED,
        DBG_STATUS_NO_INPUT_ENABLED,
-       DBG_STATUS_NO_FILTER_TRIGGER_64B,
+       DBG_STATUS_NO_FILTER_TRIGGER_256B,
        DBG_STATUS_FILTER_ALREADY_ENABLED,
        DBG_STATUS_TRIGGER_ALREADY_ENABLED,
        DBG_STATUS_TRIGGER_NOT_ENABLED,
@@ -967,7 +967,7 @@ enum dbg_status {
        DBG_STATUS_MCP_TRACE_NO_META,
        DBG_STATUS_MCP_COULD_NOT_HALT,
        DBG_STATUS_MCP_COULD_NOT_RESUME,
-       DBG_STATUS_DMAE_FAILED,
+       DBG_STATUS_RESERVED0,
        DBG_STATUS_SEMI_FIFO_NOT_EMPTY,
        DBG_STATUS_IGU_FIFO_BAD_DATA,
        DBG_STATUS_MCP_COULD_NOT_MASK_PRTY,
@@ -975,7 +975,15 @@ enum dbg_status {
        DBG_STATUS_REG_FIFO_BAD_DATA,
        DBG_STATUS_PROTECTION_OVERRIDE_BAD_DATA,
        DBG_STATUS_DBG_ARRAY_NOT_SET,
-       DBG_STATUS_MULTI_BLOCKS_WITH_FILTER,
+       DBG_STATUS_RESERVED1,
+       DBG_STATUS_NON_MATCHING_LINES,
+       DBG_STATUS_INSUFFICIENT_HW_IDS,
+       DBG_STATUS_DBG_BUS_IN_USE,
+       DBG_STATUS_INVALID_STORM_DBG_MODE,
+       DBG_STATUS_OTHER_ENGINE_BB_ONLY,
+       DBG_STATUS_FILTER_SINGLE_HW_ID,
+       DBG_STATUS_TRIGGER_SINGLE_HW_ID,
+       DBG_STATUS_MISSING_TRIGGER_STATE_STORM,
        MAX_DBG_STATUS
 };
 
@@ -998,11 +1006,20 @@ enum dbg_storms {
  * Idle Check data
  */
 struct idle_chk_data {
-       __le32 buf_size /* Idle check buffer size in dwords */;
+       u32 buf_size /* Idle check buffer size in dwords */;
 /* Indicates if the idle check buffer size was set (0/1) */
        u8 buf_size_set;
        u8 reserved1;
-       __le16 reserved2;
+       u16 reserved2;
+};
+
+/*
+ * Pretend parameters
+ */
+struct pretend_params {
+       u8 split_type /* Pretend split type (from enum init_split_types) */;
+       u8 reserved;
+       u16 split_id /* Preted split ID (within the pretend split type) */;
 };
 
 /*
@@ -1014,12 +1031,20 @@ struct dbg_tools_data {
        struct idle_chk_data idle_chk /* Idle Check data */;
        u8 mode_enable[40] /* Indicates if a mode is enabled (0/1) */;
 /* Indicates if a block is in reset state (0/1) */
-       u8 block_in_reset[80];
+       u8 block_in_reset[132];
        u8 chip_id /* Chip ID (from enum chip_ids) */;
-       u8 platform_id /* Platform ID (from enum platform_ids) */;
+       u8 hw_type /* HW Type */;
+       u8 num_ports /* Number of ports in the chip */;
+       u8 num_pfs_per_port /* Number of PFs in each port */;
+       u8 num_vfs /* Number of VFs in the chip */;
        u8 initialized /* Indicates if the data was initialized */;
+       u8 use_dmae /* Indicates if DMAE should be used */;
        u8 reserved;
+       struct pretend_params pretend /* Current pretend parameters */;
+/* Numbers of registers that were read since last log */
+       u32 num_regs_read;
 };
 
 
+
 #endif /* __ECORE_HSI_DEBUG_TOOLS__ */