root/usr/src/uts/common/io/cxgbe/t4nex/cudbg_entity.h
/*
 * This file and its contents are supplied under the terms of the
 * Common Development and Distribution License ("CDDL"), version 1.0.
 * You may only use this file in accordance with the terms of version
 * 1.0 of the CDDL.
 *
 * A full copy of the text of the CDDL should have accompanied this
 * source. A copy of the CDDL is also available via the Internet at
 * http://www.illumos.org/license/CDDL.
 */

/*-
 * Copyright (c) 2017 Chelsio Communications, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef __CUDBG_ENTITY_H__
#define __CUDBG_ENTITY_H__

#include "common.h"

#ifdef __GNUC__
#define ATTRIBUTE_UNUSED __attribute__ ((unused))
#else
#define ATTRIBUTE_UNUSED
#endif

#define MC0_FLAG    1
#define MC1_FLAG    2
#define EDC0_FLAG   3
#define EDC1_FLAG   4

#define NUM_PCIE_CONFIG_REGS 0x61
#define CUDBG_CTXT_SIZE_BYTES 24
#define CUDBG_MAX_INGRESS_QIDS 65536
#define CUDBG_MAX_FL_QIDS 2048
#define CUDBG_MAX_CNM_QIDS 1024
#define CUDBG_LOWMEM_MAX_CTXT_QIDS 256
#define ETH_ALEN 6
#define CUDBG_MAX_RPLC_SIZE 128
#define CUDBG_NUM_REQ_REGS 17
#define CUDBG_MAX_TCAM_TID 0x800
#define CUDBG_NUM_ULPTX 11

#define SN_REG_ADDR 0x183f
#define BN_REG_ADDR 0x1819
#define NA_REG_ADDR 0x185a
#define MN_REG_ADDR 0x1803

#define A_MPS_VF_RPLCT_MAP0 0x1111c
#define A_MPS_VF_RPLCT_MAP1 0x11120
#define A_MPS_VF_RPLCT_MAP2 0x11124
#define A_MPS_VF_RPLCT_MAP3 0x11128
#define A_MPS_VF_RPLCT_MAP4 0x11300
#define A_MPS_VF_RPLCT_MAP5 0x11304
#define A_MPS_VF_RPLCT_MAP6 0x11308
#define A_MPS_VF_RPLCT_MAP7 0x1130c

#define PORT_TYPE_ADDR 0x1869
#define PORT_TYPE_LEN 8

/* For T6 */
#define SN_T6_ADDR 0x83f
#define BN_T6_ADDR 0x819
#define NA_T6_ADDR 0x85a
#define MN_T6_ADDR 0x803

#define SN_MAX_LEN       24
#define BN_MAX_LEN       16
#define NA_MAX_LEN       12
#define MN_MAX_LEN       16
#define MAX_VPD_DATA_LEN 32

#define VPD_VER_ADDR     0x18c7
#define VPD_VER_LEN      2
#define SCFG_VER_ADDR    0x06
#define SCFG_VER_LEN     4

#define CUDBG_CIM_BUSY_BIT (1 << 17)

#define CUDBG_CHAC_PBT_ADDR 0x2800
#define CUDBG_CHAC_PBT_LRF  0x3000
#define CUDBG_CHAC_PBT_DATA 0x3800
#define CUDBG_PBT_DYNAMIC_ENTRIES 8
#define CUDBG_PBT_STATIC_ENTRIES 16
#define CUDBG_LRF_ENTRIES 8
#define CUDBG_PBT_DATA_ENTRIES 512

#define CUDBG_ENTITY_SIGNATURE 0xCCEDB001
#define CUDBG_TID_INFO_REV 1
#define CUDBG_MAC_STATS_REV 1
#define CUDBG_ULPTX_LA_REV 1                                                    
#define CUDBG_MEMINFO_REV 1   

#define CUDBG_ULPTX_LA_REV 1

#define CUDBG_T6_CLIP 1536                                                      
#define CUDBG_MAX_TID_COMP_EN 6144                                              
#define CUDBG_MAX_TID_COMP_DIS 3072                                             
#define CUDBG_NUM_ULPTX_READ 512                                                
#define CUDBG_NUM_ULPTX_ASIC 6                                                  
#define CUDBG_NUM_ULPTX_ASIC_READ 128 

#ifndef ARRAY_SIZE
#define ARRAY_SIZE(_a)  (sizeof((_a)) / sizeof((_a)[0]))
#endif

enum cudbg_qdesc_qtype {                                                        
        CUDBG_QTYPE_UNKNOWN = 0,                                                
        CUDBG_QTYPE_NIC_TXQ,                                                    
        CUDBG_QTYPE_NIC_RXQ,                                                    
        CUDBG_QTYPE_NIC_FLQ,                                                    
        CUDBG_QTYPE_CTRLQ,                                                      
        CUDBG_QTYPE_FWEVTQ,                                                     
        CUDBG_QTYPE_INTRQ,                                                      
        CUDBG_QTYPE_PTP_TXQ,                                                    
        CUDBG_QTYPE_OFLD_TXQ,                                                   
        CUDBG_QTYPE_RDMA_RXQ,                                                   
        CUDBG_QTYPE_RDMA_FLQ,                                                   
        CUDBG_QTYPE_RDMA_CIQ,                                                   
        CUDBG_QTYPE_ISCSI_RXQ,                                                  
        CUDBG_QTYPE_ISCSI_FLQ,                                                  
        CUDBG_QTYPE_ISCSIT_RXQ,                                                 
        CUDBG_QTYPE_ISCSIT_FLQ,                                                 
        CUDBG_QTYPE_CRYPTO_TXQ,                                                 
        CUDBG_QTYPE_CRYPTO_RXQ,                                                 
        CUDBG_QTYPE_CRYPTO_FLQ,                                                 
        CUDBG_QTYPE_TLS_RXQ,                                                    
        CUDBG_QTYPE_TLS_FLQ,                                                    
        CUDBG_QTYPE_MAX,                                                        
};

struct cudbg_pbt_tables {
        u32 pbt_dynamic[CUDBG_PBT_DYNAMIC_ENTRIES];
        u32 pbt_static[CUDBG_PBT_STATIC_ENTRIES];
        u32 lrf_table[CUDBG_LRF_ENTRIES];
        u32 pbt_data[CUDBG_PBT_DATA_ENTRIES];
};

struct card_mem {
        u16 size_mc0;
        u16 size_mc1;
        u16 size_edc0;
        u16 size_edc1;
        u16 mem_flag;
        u16 res;
};

struct rss_pf_conf {
        u32 rss_pf_map;
        u32 rss_pf_mask;
        u32 rss_pf_config;
};

struct cudbg_ch_cntxt {
        uint32_t cntxt_type;
        uint32_t cntxt_id;
        uint32_t data[SGE_CTXT_SIZE / 4];
};

struct cudbg_tcam {
        u32 filter_start;
        u32 server_start;
        u32 clip_start;
        u32 routing_start;
        u32 tid_hash_base;
        u32 max_tid;
};

struct cudbg_mbox_log {
        struct mbox_cmd entry;
        u32 hi[MBOX_LEN / 8];
        u32 lo[MBOX_LEN / 8];
};

struct cudbg_tid_data {
        u32 tid;
        u32 dbig_cmd;
        u32 dbig_conf;
        u32 dbig_rsp_stat;
        u32 data[CUDBG_NUM_REQ_REGS];
};

struct cudbg_cntxt_field {
        char *name;
        u32 start_bit;
        u32 end_bit;
        u32 shift;
        u32 islog2;
};

struct cudbg_mps_tcam {
        u64 mask;
        u32 rplc[8];
        u32 idx;
        u32 cls_lo;
        u32 cls_hi;
        u32 rplc_size;
        u32 vniy;
        u32 vnix;
        u32 dip_hit;
        u32 vlan_vld;
        u32 repli;
        u16 ivlan;
        u8 addr[ETH_ALEN];
        u8 lookup_type;
        u8 port_num;
        u8 reserved[2];
};

struct rss_vf_conf {
        u32 rss_vf_vfl;
        u32 rss_vf_vfh;
};

struct rss_config {
        u32 tp_rssconf;         /* A_TP_RSS_CONFIG      */
        u32 tp_rssconf_tnl;     /* A_TP_RSS_CONFIG_TNL  */
        u32 tp_rssconf_ofd;     /* A_TP_RSS_CONFIG_OFD  */
        u32 tp_rssconf_syn;     /* A_TP_RSS_CONFIG_SYN  */
        u32 tp_rssconf_vrt;     /* A_TP_RSS_CONFIG_VRT  */
        u32 tp_rssconf_cng;     /* A_TP_RSS_CONFIG_CNG  */
        u32 chip;
};

struct struct_pm_stats {
        u32 tx_cnt[T6_PM_NSTATS];
        u32 rx_cnt[T6_PM_NSTATS];
        u64 tx_cyc[T6_PM_NSTATS];
        u64 rx_cyc[T6_PM_NSTATS];
};

struct struct_hw_sched {
        u32 kbps[NTX_SCHED];
        u32 ipg[NTX_SCHED];
        u32 pace_tab[NTX_SCHED];
        u32 mode;
        u32 map;
};

struct struct_tcp_stats {
        struct tp_tcp_stats v4, v6;
};

struct struct_tp_err_stats {
        struct tp_err_stats stats;
        u32 nchan;
};

struct struct_tp_fcoe_stats {
        struct tp_fcoe_stats stats[4];
        u32 nchan;
};

struct struct_mac_stats {
        u32 port_count;
        struct port_stats stats[4];
};

struct struct_mac_stats_rev1 {
        struct cudbg_ver_hdr ver_hdr;
        u32 port_count;
        u32 reserved;
        struct port_stats stats[4];
};

struct struct_tp_cpl_stats {
        struct tp_cpl_stats stats;
        u32 nchan;
};

struct struct_wc_stats {
        u32 wr_cl_success;
        u32 wr_cl_fail;
};

struct struct_ulptx_la {
        u32 rdptr[CUDBG_NUM_ULPTX];
        u32 wrptr[CUDBG_NUM_ULPTX];
        u32 rddata[CUDBG_NUM_ULPTX];
        u32 rd_data[CUDBG_NUM_ULPTX][CUDBG_NUM_ULPTX_READ];
        u32 rdptr_asic[CUDBG_NUM_ULPTX_ASIC_READ];                              
        u32 rddata_asic[CUDBG_NUM_ULPTX_ASIC_READ][CUDBG_NUM_ULPTX_ASIC];  
};

struct struct_ulprx_la {
        u32 data[ULPRX_LA_SIZE * 8];
        u32 size;
};

struct struct_cim_qcfg {
        u8 chip;
        u16 base[CIM_NUM_IBQ + CIM_NUM_OBQ_T5];
        u16 size[CIM_NUM_IBQ + CIM_NUM_OBQ_T5];
        u16 thres[CIM_NUM_IBQ];
        u32 obq_wr[2 * CIM_NUM_OBQ_T5];
        u32 stat[4 * (CIM_NUM_IBQ + CIM_NUM_OBQ_T5)];
};

enum region_index {
        REGN_DBQ_CONTEXS_IDX,
        REGN_IMSG_CONTEXTS_IDX,
        REGN_FLM_CACHE_IDX,
        REGN_TCBS_IDX,
        REGN_PSTRUCT_IDX,
        REGN_TIMERS_IDX,
        REGN_RX_FL_IDX,
        REGN_TX_FL_IDX,
        REGN_PSTRUCT_FL_IDX,
        REGN_TX_PAYLOAD_IDX,
        REGN_RX_PAYLOAD_IDX,
        REGN_LE_HASH_IDX,
        REGN_ISCSI_IDX,
        REGN_TDDP_IDX,
        REGN_TPT_IDX,
        REGN_STAG_IDX,
        REGN_RQ_IDX,
        REGN_RQUDP_IDX,
        REGN_PBL_IDX,
        REGN_TXPBL_IDX,
        REGN_DBVFIFO_IDX,
        REGN_ULPRX_STATE_IDX,
        REGN_ULPTX_STATE_IDX,
#ifndef __NO_DRIVER_OCQ_SUPPORT__
        REGN_ON_CHIP_Q_IDX,
#endif
};

struct cudbg_qdesc_info {                                                       
        u32 qdesc_entry_size;                                                   
        u32 num_queues;                                                         
        u8 data[0]; /* Must be last */                                          
};

static const char * const region[] = {
        "DBQ contexts:", "IMSG contexts:", "FLM cache:", "TCBs:",
        "Pstructs:", "Timers:", "Rx FL:", "Tx FL:", "Pstruct FL:",
        "Tx payload:", "Rx payload:", "LE hash:", "iSCSI region:",
        "TDDP region:", "TPT region:", "STAG region:", "RQ region:",
        "RQUDP region:", "PBL region:", "TXPBL region:",
        "DBVFIFO region:", "ULPRX state:", "ULPTX state:",
#ifndef __NO_DRIVER_OCQ_SUPPORT__
        "On-chip queues:"
#endif
};

/* Info relative to memory region (i.e. wrt 0). */
struct struct_region_info {
        bool exist; /* Does region exists in current memory region? */
        u32 start;  /* Start wrt 0 */
        u32 end;    /* End wrt 0 */
};

struct struct_port_usage {
        u32 id;
        u32 used;
        u32 alloc;
};

struct struct_lpbk_usage {
        u32 id;
        u32 used;
        u32 alloc;
};

struct struct_mem_desc {
        u32 base;
        u32 limit;
        u32 idx;
};

enum string_size_units {
        STRING_UNITS_10,         /* use powers of 10^3 (standard SI) */
        STRING_UNITS_2,         /* use binary powers of 2^10 */
};

struct struct_meminfo {
        struct struct_mem_desc avail[4];
        struct struct_mem_desc mem[ARRAY_SIZE(region) + 3];
        u32 avail_c;
        u32 mem_c;
        u32 up_ram_lo;
        u32 up_ram_hi;
        u32 up_extmem2_lo;
        u32 up_extmem2_hi;
        u32 rx_pages_data[3];
        u32 tx_pages_data[4];
        u32 p_structs;
        struct struct_port_usage port_data[4];
        u32 port_used[4];
        u32 port_alloc[4];
        u32 loopback_used[NCHAN];
        u32 loopback_alloc[NCHAN];
        u32 pstructs_free_cnt;
        u32 free_rx_cnt;
        u32 free_tx_cnt;  
};

#ifndef __GNUC__
#pragma warning(disable : 4200)
#endif

struct struct_lb_stats {
        int nchan;
        struct lb_port_stats s[0];
};

struct struct_clk_info {
        u64 retransmit_min;
        u64 retransmit_max;
        u64 persist_timer_min;
        u64 persist_timer_max;
        u64 keepalive_idle_timer;
        u64 keepalive_interval;
        u64 initial_srtt;
        u64 finwait2_timer;
        u32 dack_timer;
        u32 res;
        u32 cclk_ps;
        u32 tre;
        u32 dack_re;
        char core_clk_period[32];
        char tp_timer_tick[32];
        char tcp_tstamp_tick[32];
        char dack_tick[32];
};

struct cim_pif_la {
        int size;
        u8 data[0];
};

struct struct_tp_la {
        u32 size;
        u32 mode;
        u8 data[0];
};

struct field_desc {
        const char *name;
        u32 start;
        u32 width;
};

struct tp_mib_type {
        char *key;
        u32 addr;
        u32 value;
};

struct wtp_type_0 {
        u32   sop;
        u32   eop;
};

struct wtp_type_1 {
        u32   sop[2];
        u32   eop[2];
};

struct wtp_type_2 {
        u32   sop[4];
        u32   eop[4];
};

struct wtp_type_3 {
        u32   sop[4];
        u32   eop[4];
        u32   drops;
};

struct wtp_data {
        /*TX path, Request Work request sub-path:*/

        struct wtp_type_1 sge_pcie_cmd_req;       /*SGE_DEBUG   PC_Req_xOPn*/
        struct wtp_type_1 pcie_core_cmd_req;      /*PCIE_CMDR_REQ_CNT*/


        /*TX path, Work request to uP sub-path*/
        struct wtp_type_1 core_pcie_cmd_rsp;      /*PCIE_CMDR_RSP_CNT*/
        struct wtp_type_1 pcie_sge_cmd_rsp;       /*SGE_DEBUG   PC_Rsp_xOPn*/
        struct wtp_type_1 sge_cim;                /*SGE_DEBUG CIM_xOPn*/

        /*TX path, Data request path from ULP_TX to core*/
        struct wtp_type_2 utx_sge_dma_req;       /*SGE UD_Rx_xOPn*/
        struct wtp_type_2 sge_pcie_dma_req;      /*SGE PD_Req_Rdn (no eops)*/
        struct wtp_type_2 pcie_core_dma_req;     /*PCIE_DMAR_REQ_CNT (no eops)*/

        /*Main TX path, from core to wire*/
        struct wtp_type_2 core_pcie_dma_rsp;    /*PCIE_DMAR_RSP_SOP_CNT/
                                                  PCIE_DMAR_EOP_CNT*/
        struct wtp_type_2 pcie_sge_dma_rsp;     /*SGE_DEBUG PD_Rsp_xOPn*/
        struct wtp_type_2 sge_utx;              /*SGE_DEBUG U_Tx_xOPn*/
        struct wtp_type_2 utx_tp;          /*ULP_TX_SE_CNT_CHn[xOP_CNT_ULP2TP]*/
        struct wtp_type_2 utx_tpcside;     /*TP_DBG_CSIDE_RXn[RxXoPCnt]*/

        struct wtp_type_2 tpcside_rxpld;
        struct wtp_type_2 tpcside_rxarb;       /*TP_DBG_CSIDE_RXn[RxArbXopCnt]*/
        struct wtp_type_2 tpcside_rxcpl;

        struct wtp_type_2 tpeside_mps;         /*TP_DBG_ESDIE_PKT0[TxXoPCnt]*/
        struct wtp_type_2 tpeside_pm;
        struct wtp_type_2 tpeside_pld;

        /*Tx path, PCIE t5 DMA stat*/
        struct wtp_type_2 pcie_t5_dma_stat3;

        /*Tx path, SGE debug data high index 6*/
        struct wtp_type_2 sge_debug_data_high_index_6;

        /*Tx path, SGE debug data high index 3*/
        struct wtp_type_2 sge_debug_data_high_index_3;

        /*Tx path, ULP SE CNT CHx*/
        struct wtp_type_2 ulp_se_cnt_chx;

        /*pcie cmd stat 2*/
        struct wtp_type_2 pcie_cmd_stat2;

        /*pcie cmd stat 3*/
        struct wtp_type_2 pcie_cmd_stat3;

        struct wtp_type_2 pcie_dma1_stat2_core;

        struct wtp_type_1 sge_work_req_pkt;

        struct wtp_type_2 sge_debug_data_high_indx5;

        /*Tx path, mac portx pkt count*/
        struct wtp_type_2 mac_portx_pkt_count;

        /*Rx path, mac porrx pkt count*/
        struct wtp_type_2 mac_porrx_pkt_count;

        /*Rx path, PCIE T5 dma1 stat 2*/
        struct wtp_type_2 pcie_dma1_stat2;

        /*Rx path, sge debug data high index 7*/
        struct wtp_type_2 sge_debug_data_high_indx7;

        /*Rx path, sge debug data high index 1*/
        struct wtp_type_1 sge_debug_data_high_indx1;

        /*Rx path, TP debug CSIDE Tx register*/
        struct wtp_type_1 utx_tpcside_tx;

        /*Rx path, LE DB response count*/
        struct wtp_type_0 le_db_rsp_cnt;

        /*Rx path, TP debug Eside PKTx*/
        struct wtp_type_2 tp_dbg_eside_pktx;

        /*Rx path, sge debug data high index 9*/
        struct wtp_type_1 sge_debug_data_high_indx9;

        /*Tx path, mac portx aFramesTransmittesok*/
        struct wtp_type_2 mac_portx_aframestra_ok;

        /*Rx path, mac portx aFramesTransmittesok*/
        struct wtp_type_2 mac_porrx_aframestra_ok;

        /*Tx path, MAC_PORT_MTIP_1G10G_RX_etherStatsPkts*/
        struct wtp_type_1 mac_portx_etherstatspkts;

        /*Rx path, MAC_PORT_MTIP_1G10G_RX_etherStatsPkts*/
        struct wtp_type_1 mac_porrx_etherstatspkts;

        struct wtp_type_3 tp_mps;           /*MPS_TX_SE_CNT_TP01 and
                                              MPS_TX_SE_CNT_TP34*/
        struct wtp_type_3 mps_xgm;          /*MPS_TX_SE_CNT_MAC01 and
                                              MPS_TX_SE_CNT_MAC34*/
        struct wtp_type_2 tx_xgm_xgm;       /*XGMAC_PORT_PKT_CNT_PORT_n*/
        struct wtp_type_2 xgm_wire;   /*XGMAC_PORT_XGM_STAT_TX_FRAME_LOW_PORT_N
                                      (clear on read)*/

        /*RX path, from wire to core.*/
        struct wtp_type_2 wire_xgm;   /*XGMAC_PORT_XGM_STAT_RX_FRAMES_LOW_PORT_N
                                        (clear on read)*/
        struct wtp_type_2 rx_xgm_xgm;       /*XGMAC_PORT_PKT_CNT_PORT_n*/
        struct _xgm_mps {                   /*MPS_RX_SE_CNT_INn*/
                u32   sop[8];               /*  => undef,*/
                u32   eop[8];               /*  => undef,*/
                u32   drop;                 /* => undef,*/
                u32   cls_drop;             /* => undef,*/
                u32   err;                  /* => undef,*/
                u32   bp;                   /*   => undef,*/
        } xgm_mps;

        struct wtp_type_3 mps_tp;           /*MPS_RX_SE_CNT_OUT01 and
                                              MPS_RX_SE_CNT_OUT23*/
        struct wtp_type_2 mps_tpeside;      /*TP_DBG_ESIDE_PKTn*/
        struct wtp_type_1 tpeside_pmrx;     /*???*/
        struct wtp_type_2 pmrx_ulprx;       /*ULP_RX_SE_CNT_CHn[xOP_CNT_INn]*/
        struct wtp_type_2 ulprx_tpcside;    /*ULP_RX_SE_CNT_CHn[xOP_CNT_OUTn]*/
        struct wtp_type_2 tpcside_csw;      /*TP_DBG_CSIDE_TXn[TxSopCnt]*/
        struct wtp_type_2 tpcside_pm;
        struct wtp_type_2 tpcside_uturn;
        struct wtp_type_2 tpcside_txcpl;
        struct wtp_type_1 tp_csw;            /*SGE_DEBUG CPLSW_TP_Rx_xOPn*/
        struct wtp_type_1 csw_sge;           /*SGE_DEBUG T_Rx_xOPn*/
        struct wtp_type_2 sge_pcie;          /*SGE_DEBUG PD_Req_SopN -
                                               PD_Req_RdN - PD_ReqIntN*/
        struct wtp_type_2 sge_pcie_ints;     /*SGE_DEBUG PD_Req_IntN*/
        struct wtp_type_2 pcie_core_dmaw;    /*PCIE_DMAW_SOP_CNT and
                                               PCIE_DMAW_EOP_CNT*/
        struct wtp_type_2 pcie_core_dmai;    /*PCIE_DMAI_CNT*/

};

struct tp_mib_data {
        struct tp_mib_type TP_MIB_MAC_IN_ERR_0;
        struct tp_mib_type TP_MIB_MAC_IN_ERR_1;
        struct tp_mib_type TP_MIB_MAC_IN_ERR_2;
        struct tp_mib_type TP_MIB_MAC_IN_ERR_3;
        struct tp_mib_type TP_MIB_HDR_IN_ERR_0;
        struct tp_mib_type TP_MIB_HDR_IN_ERR_1;
        struct tp_mib_type TP_MIB_HDR_IN_ERR_2;
        struct tp_mib_type TP_MIB_HDR_IN_ERR_3;
        struct tp_mib_type TP_MIB_TCP_IN_ERR_0;
        struct tp_mib_type TP_MIB_TCP_IN_ERR_1;
        struct tp_mib_type TP_MIB_TCP_IN_ERR_2;
        struct tp_mib_type TP_MIB_TCP_IN_ERR_3;
        struct tp_mib_type TP_MIB_TCP_OUT_RST;
        struct tp_mib_type TP_MIB_TCP_IN_SEG_HI;
        struct tp_mib_type TP_MIB_TCP_IN_SEG_LO;
        struct tp_mib_type TP_MIB_TCP_OUT_SEG_HI;
        struct tp_mib_type TP_MIB_TCP_OUT_SEG_LO;
        struct tp_mib_type TP_MIB_TCP_RXT_SEG_HI;
        struct tp_mib_type TP_MIB_TCP_RXT_SEG_LO;
        struct tp_mib_type TP_MIB_TNL_CNG_DROP_0;
        struct tp_mib_type TP_MIB_TNL_CNG_DROP_1;
        struct tp_mib_type TP_MIB_TNL_CNG_DROP_2;
        struct tp_mib_type TP_MIB_TNL_CNG_DROP_3;
        struct tp_mib_type TP_MIB_OFD_CHN_DROP_0;
        struct tp_mib_type TP_MIB_OFD_CHN_DROP_1;
        struct tp_mib_type TP_MIB_OFD_CHN_DROP_2;
        struct tp_mib_type TP_MIB_OFD_CHN_DROP_3;
        struct tp_mib_type TP_MIB_TNL_OUT_PKT_0;
        struct tp_mib_type TP_MIB_TNL_OUT_PKT_1;
        struct tp_mib_type TP_MIB_TNL_OUT_PKT_2;
        struct tp_mib_type TP_MIB_TNL_OUT_PKT_3;
        struct tp_mib_type TP_MIB_TNL_IN_PKT_0;
        struct tp_mib_type TP_MIB_TNL_IN_PKT_1;
        struct tp_mib_type TP_MIB_TNL_IN_PKT_2;
        struct tp_mib_type TP_MIB_TNL_IN_PKT_3;
        struct tp_mib_type TP_MIB_TCP_V6IN_ERR_0;
        struct tp_mib_type TP_MIB_TCP_V6IN_ERR_1;
        struct tp_mib_type TP_MIB_TCP_V6IN_ERR_2;
        struct tp_mib_type TP_MIB_TCP_V6IN_ERR_3;
        struct tp_mib_type TP_MIB_TCP_V6OUT_RST;
        struct tp_mib_type TP_MIB_TCP_V6IN_SEG_HI;
        struct tp_mib_type TP_MIB_TCP_V6IN_SEG_LO;
        struct tp_mib_type TP_MIB_TCP_V6OUT_SEG_HI;
        struct tp_mib_type TP_MIB_TCP_V6OUT_SEG_LO;
        struct tp_mib_type TP_MIB_TCP_V6RXT_SEG_HI;
        struct tp_mib_type TP_MIB_TCP_V6RXT_SEG_LO;
        struct tp_mib_type TP_MIB_OFD_ARP_DROP;
        struct tp_mib_type TP_MIB_OFD_DFR_DROP;
        struct tp_mib_type TP_MIB_CPL_IN_REQ_0;
        struct tp_mib_type TP_MIB_CPL_IN_REQ_1;
        struct tp_mib_type TP_MIB_CPL_IN_REQ_2;
        struct tp_mib_type TP_MIB_CPL_IN_REQ_3;
        struct tp_mib_type TP_MIB_CPL_OUT_RSP_0;
        struct tp_mib_type TP_MIB_CPL_OUT_RSP_1;
        struct tp_mib_type TP_MIB_CPL_OUT_RSP_2;
        struct tp_mib_type TP_MIB_CPL_OUT_RSP_3;
        struct tp_mib_type TP_MIB_TNL_LPBK_0;
        struct tp_mib_type TP_MIB_TNL_LPBK_1;
        struct tp_mib_type TP_MIB_TNL_LPBK_2;
        struct tp_mib_type TP_MIB_TNL_LPBK_3;
        struct tp_mib_type TP_MIB_TNL_DROP_0;
        struct tp_mib_type TP_MIB_TNL_DROP_1;
        struct tp_mib_type TP_MIB_TNL_DROP_2;
        struct tp_mib_type TP_MIB_TNL_DROP_3;
        struct tp_mib_type TP_MIB_FCOE_DDP_0;
        struct tp_mib_type TP_MIB_FCOE_DDP_1;
        struct tp_mib_type TP_MIB_FCOE_DDP_2;
        struct tp_mib_type TP_MIB_FCOE_DDP_3;
        struct tp_mib_type TP_MIB_FCOE_DROP_0;
        struct tp_mib_type TP_MIB_FCOE_DROP_1;
        struct tp_mib_type TP_MIB_FCOE_DROP_2;
        struct tp_mib_type TP_MIB_FCOE_DROP_3;
        struct tp_mib_type TP_MIB_FCOE_BYTE_0_HI;
        struct tp_mib_type TP_MIB_FCOE_BYTE_0_LO;
        struct tp_mib_type TP_MIB_FCOE_BYTE_1_HI;
        struct tp_mib_type TP_MIB_FCOE_BYTE_1_LO;
        struct tp_mib_type TP_MIB_FCOE_BYTE_2_HI;
        struct tp_mib_type TP_MIB_FCOE_BYTE_2_LO;
        struct tp_mib_type TP_MIB_FCOE_BYTE_3_HI;
        struct tp_mib_type TP_MIB_FCOE_BYTE_3_LO;
        struct tp_mib_type TP_MIB_OFD_VLN_DROP_0;
        struct tp_mib_type TP_MIB_OFD_VLN_DROP_1;
        struct tp_mib_type TP_MIB_OFD_VLN_DROP_2;
        struct tp_mib_type TP_MIB_OFD_VLN_DROP_3;
        struct tp_mib_type TP_MIB_USM_PKTS;
        struct tp_mib_type TP_MIB_USM_DROP;
        struct tp_mib_type TP_MIB_USM_BYTES_HI;
        struct tp_mib_type TP_MIB_USM_BYTES_LO;
        struct tp_mib_type TP_MIB_TID_DEL;
        struct tp_mib_type TP_MIB_TID_INV;
        struct tp_mib_type TP_MIB_TID_ACT;
        struct tp_mib_type TP_MIB_TID_PAS;
        struct tp_mib_type TP_MIB_RQE_DFR_MOD;
        struct tp_mib_type TP_MIB_RQE_DFR_PKT;
};

struct cudbg_reg_info {
        const char *name;
        unsigned int addr;
        unsigned int len;
};

struct tp1_reg_info {
        char addr[10];
        char name[40];
};

struct ireg_field {
        u32 ireg_addr;
        u32 ireg_data;
        u32 ireg_local_offset;
        u32 ireg_offset_range;
};

struct ireg_buf {
        struct ireg_field tp_pio;
        u32 outbuf[32];
};

struct tx_rate {
        u64 nrate[NCHAN];
        u64 orate[NCHAN];
        u32 nchan;
};

struct tid_info_region {
        u32 ntids;
        u32 nstids;
        u32 stid_base;
        u32 hash_base;

        u32 natids;
        u32 nftids;
        u32 ftid_base;
        u32 aftid_base;
        u32 aftid_end;

        /* Server filter region */
        u32 sftid_base;
        u32 nsftids;

        /* UO context range */
        u32 uotid_base;
        u32 nuotids;

        u32 sb;
        u32 flags;
        u32 le_db_conf;
        u32 IP_users;
        u32 IPv6_users;

        u32 hpftid_base;
        u32 nhpftids;
};

struct tid_info_region_rev1 {
        struct cudbg_ver_hdr ver_hdr;
        struct tid_info_region tid;
        u32 tid_start;
        u32 reserved[16];
};

struct struct_vpd_data {
        u8 sn[SN_MAX_LEN + 1];
        u8 bn[BN_MAX_LEN + 1];
        u8 na[NA_MAX_LEN + 1];
        u8 mn[MN_MAX_LEN + 1];
        u16 fw_major;
        u16 fw_minor;
        u16 fw_micro;
        u16 fw_build;
        u32 scfg_vers;
        u32 vpd_vers;
};

struct sw_state {
        u32 fw_state;
        u8 caller_string[100];
        u8 os_type;
        u8 reserved[3];
        u32 reserved1[16];
};

struct sge_qbase_reg_field {                                                    
        u32 reg_addr;                                                           
        u32 reg_data[4];                                                        
        u32 pf_data_value[8][4]; /* [max pf][4 data reg SGE_QBASE_MAP[0-3] */   
        u32 vf_data_value[256][4]; /* [max vf][4 data reg SGE_QBASE_MAP[0-3] */ 
        u32 vfcount;                                                            
};

struct cudbg_qdesc_entry {                                                      
        u32 data_size;                                                          
        u32 qtype;                                                              
        u32 qid;                                                                
        u32 desc_size;                                                          
        u32 num_desc;                                                           
        u8 data[0]; /* Must be last */                                          
};

static u32 ATTRIBUTE_UNUSED t6_tp_pio_array[][4] = {
        {0x7e40, 0x7e44, 0x020, 28}, /* t6_tp_pio_regs_20_to_3b */
        {0x7e40, 0x7e44, 0x040, 10}, /* t6_tp_pio_regs_40_to_49 */
        {0x7e40, 0x7e44, 0x050, 10}, /* t6_tp_pio_regs_50_to_59 */
        {0x7e40, 0x7e44, 0x060, 14}, /* t6_tp_pio_regs_60_to_6d */
        {0x7e40, 0x7e44, 0x06F, 1}, /* t6_tp_pio_regs_6f */
        {0x7e40, 0x7e44, 0x070, 6}, /* t6_tp_pio_regs_70_to_75 */
        {0x7e40, 0x7e44, 0x130, 18},  /* t6_tp_pio_regs_130_to_141 */
        {0x7e40, 0x7e44, 0x145, 19}, /* t6_tp_pio_regs_145_to_157 */
        {0x7e40, 0x7e44, 0x160, 1}, /* t6_tp_pio_regs_160 */
        {0x7e40, 0x7e44, 0x230, 25}, /* t6_tp_pio_regs_230_to_248 */
        {0x7e40, 0x7e44, 0x24a, 3}, /* t6_tp_pio_regs_24c */
        {0x7e40, 0x7e44, 0x8C0, 1} /* t6_tp_pio_regs_8c0 */
};

static u32 ATTRIBUTE_UNUSED t5_tp_pio_array[][4] = {
        {0x7e40, 0x7e44, 0x020, 28}, /* t5_tp_pio_regs_20_to_3b */
        {0x7e40, 0x7e44, 0x040, 19}, /* t5_tp_pio_regs_40_to_52 */
        {0x7e40, 0x7e44, 0x054, 2}, /* t5_tp_pio_regs_54_to_55 */
        {0x7e40, 0x7e44, 0x060, 13}, /* t5_tp_pio_regs_60_to_6c */
        {0x7e40, 0x7e44, 0x06F, 1}, /* t5_tp_pio_regs_6f */
        {0x7e40, 0x7e44, 0x120, 4}, /* t5_tp_pio_regs_120_to_123 */
        {0x7e40, 0x7e44, 0x12b, 2},  /* t5_tp_pio_regs_12b_to_12c */
        {0x7e40, 0x7e44, 0x12f, 21}, /* t5_tp_pio_regs_12f_to_143 */
        {0x7e40, 0x7e44, 0x145, 19}, /* t5_tp_pio_regs_145_to_157 */
        {0x7e40, 0x7e44, 0x230, 25}, /* t5_tp_pio_regs_230_to_248 */
        {0x7e40, 0x7e44, 0x8C0, 1} /* t5_tp_pio_regs_8c0 */
};

static u32 ATTRIBUTE_UNUSED t6_ma_ireg_array[][4] = {
        {0x78f8, 0x78fc, 0xa000, 23}, /* t6_ma_regs_a000_to_a016 */
        {0x78f8, 0x78fc, 0xa400, 30}, /* t6_ma_regs_a400_to_a41e */
        {0x78f8, 0x78fc, 0xa800, 20}  /* t6_ma_regs_a800_to_a813 */
};

static u32 ATTRIBUTE_UNUSED t6_ma_ireg_array2[][4] = {
        {0x78f8, 0x78fc, 0xe400, 17}, /* t6_ma_regs_e400_to_e600 */
        {0x78f8, 0x78fc, 0xe640, 13} /* t6_ma_regs_e640_to_e7c0 */
};

static u32 ATTRIBUTE_UNUSED t6_hma_ireg_array[][4] = {
        {0x51320, 0x51324, 0xa000, 32} /* t6_hma_regs_a000_to_a01f */
};
static u32 ATTRIBUTE_UNUSED t5_pcie_pdbg_array[][4] = {
        {0x5a04, 0x5a0c, 0x00, 0x20}, /* t5_pcie_pdbg_regs_00_to_20 */
        {0x5a04, 0x5a0c, 0x21, 0x20}, /* t5_pcie_pdbg_regs_21_to_40 */
        {0x5a04, 0x5a0c, 0x41, 0x10}, /* t5_pcie_pdbg_regs_41_to_50 */
};

static u32 ATTRIBUTE_UNUSED t5_pcie_config_array[][2] = {
        {0x0, 0x34},
        {0x3c, 0x40},
        {0x50, 0x64},
        {0x70, 0x80},
        {0x94, 0xa0},
        {0xb0, 0xb8},
        {0xd0, 0xd4},
        {0x100, 0x128},
        {0x140, 0x148},
        {0x150, 0x164},
        {0x170, 0x178},
        {0x180, 0x194},
        {0x1a0, 0x1b8},
        {0x1c0, 0x208},
};

static u32 ATTRIBUTE_UNUSED t5_pcie_cdbg_array[][4] = {
        {0x5a10, 0x5a18, 0x00, 0x20}, /* t5_pcie_cdbg_regs_00_to_20 */
        {0x5a10, 0x5a18, 0x21, 0x18}, /* t5_pcie_cdbg_regs_21_to_37 */
};

static u32 ATTRIBUTE_UNUSED t6_tp_tm_pio_array[1][4] = {
        {0x7e18, 0x7e1c, 0x0, 12}
};

static u32 ATTRIBUTE_UNUSED t5_tp_tm_pio_array[1][4] = {
        {0x7e18, 0x7e1c, 0x0, 12}
};

static u32 ATTRIBUTE_UNUSED t5_pm_rx_array[][4] = {
        {0x8FD0, 0x8FD4, 0x10000, 0x20}, /* t5_pm_rx_regs_10000_to_10020 */
        {0x8FD0, 0x8FD4, 0x10021, 0x0D}, /* t5_pm_rx_regs_10021_to_1002c */
};

static u32 ATTRIBUTE_UNUSED t5_pm_tx_array[][4] = {
        {0x8FF0, 0x8FF4, 0x10000, 0x20}, /* t5_pm_tx_regs_10000_to_10020 */
        {0x8FF0, 0x8FF4, 0x10021, 0x1D}, /* t5_pm_tx_regs_10021_to_1003c */
};

static u32 ATTRIBUTE_UNUSED t6_tp_mib_index_array[6][4] = {
        {0x7e50, 0x7e54, 0x0, 13},
        {0x7e50, 0x7e54, 0x10, 6},
        {0x7e50, 0x7e54, 0x18, 21},
        {0x7e50, 0x7e54, 0x30, 32},
        {0x7e50, 0x7e54, 0x50, 22},
        {0x7e50, 0x7e54, 0x68, 12}
};

static u32 ATTRIBUTE_UNUSED t5_tp_mib_index_array[9][4] = {
        {0x7e50, 0x7e54, 0x0, 13},
        {0x7e50, 0x7e54, 0x10, 6},
        {0x7e50, 0x7e54, 0x18, 8},
        {0x7e50, 0x7e54, 0x20, 13},
        {0x7e50, 0x7e54, 0x30, 16},
        {0x7e50, 0x7e54, 0x40, 16},
        {0x7e50, 0x7e54, 0x50, 16},
        {0x7e50, 0x7e54, 0x60, 6},
        {0x7e50, 0x7e54, 0x68, 4}
};

static u32 ATTRIBUTE_UNUSED t5_sge_dbg_index_array[9][4] = {
        {0x10cc, 0x10d0, 0x0, 16},
        {0x10cc, 0x10d4, 0x0, 16},
};

static u32 ATTRIBUTE_UNUSED t6_up_cim_reg_array[][4] = {
        {0x7b50, 0x7b54, 0x2000, 0x20},   /* up_cim_2000_to_207c */
        {0x7b50, 0x7b54, 0x2080, 0x1d},   /* up_cim_2080_to_20fc */
        {0x7b50, 0x7b54, 0x00, 0x20},     /* up_cim_00_to_7c */
        {0x7b50, 0x7b54, 0x80, 0x20},     /* up_cim_80_to_fc */
        {0x7b50, 0x7b54, 0x100, 0x11},    /* up_cim_100_to_14c */
        {0x7b50, 0x7b54, 0x200, 0x10},    /* up_cim_200_to_23c */
        {0x7b50, 0x7b54, 0x240, 0x2},     /* up_cim_240_to_244 */
        {0x7b50, 0x7b54, 0x250, 0x2},     /* up_cim_250_to_254 */
        {0x7b50, 0x7b54, 0x260, 0x2},     /* up_cim_260_to_264 */
        {0x7b50, 0x7b54, 0x270, 0x2},     /* up_cim_270_to_274 */
        {0x7b50, 0x7b54, 0x280, 0x20},    /* up_cim_280_to_2fc */
        {0x7b50, 0x7b54, 0x300, 0x20},    /* up_cim_300_to_37c */
        {0x7b50, 0x7b54, 0x380, 0x14},    /* up_cim_380_to_3cc */

};

static u32 ATTRIBUTE_UNUSED t5_up_cim_reg_array[][4] = {
        {0x7b50, 0x7b54, 0x2000, 0x20},   /* up_cim_2000_to_207c */
        {0x7b50, 0x7b54, 0x2080, 0x19},   /* up_cim_2080_to_20ec */
        {0x7b50, 0x7b54, 0x00, 0x20},     /* up_cim_00_to_7c */
        {0x7b50, 0x7b54, 0x80, 0x20},     /* up_cim_80_to_fc */
        {0x7b50, 0x7b54, 0x100, 0x11},    /* up_cim_100_to_14c */
        {0x7b50, 0x7b54, 0x200, 0x10},    /* up_cim_200_to_23c */
        {0x7b50, 0x7b54, 0x240, 0x2},     /* up_cim_240_to_244 */
        {0x7b50, 0x7b54, 0x250, 0x2},     /* up_cim_250_to_254 */
        {0x7b50, 0x7b54, 0x260, 0x2},     /* up_cim_260_to_264 */
        {0x7b50, 0x7b54, 0x270, 0x2},     /* up_cim_270_to_274 */
        {0x7b50, 0x7b54, 0x280, 0x20},    /* up_cim_280_to_2fc */
        {0x7b50, 0x7b54, 0x300, 0x20},    /* up_cim_300_to_37c */
        {0x7b50, 0x7b54, 0x380, 0x14},    /* up_cim_380_to_3cc */
};

#endif