]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/cxgbe/cudbg/cudbg_entity.h
Merge OpenSSL 1.1.1a.
[FreeBSD/FreeBSD.git] / sys / dev / cxgbe / cudbg / cudbg_entity.h
1 /*-
2  * Copyright (c) 2017 Chelsio Communications, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  *
28  */
29
30 #ifndef __CUDBG_ENTITY_H__
31 #define __CUDBG_ENTITY_H__
32
33 #ifdef __GNUC__
34 #define ATTRIBUTE_UNUSED __attribute__ ((unused))
35 #else
36 #define ATTRIBUTE_UNUSED
37 #endif
38
39 #define MC0_FLAG    1
40 #define MC1_FLAG    2
41 #define EDC0_FLAG   3
42 #define EDC1_FLAG   4
43
44 #define NUM_PCIE_CONFIG_REGS 0x61
45 #define CUDBG_CTXT_SIZE_BYTES 24
46 #define CUDBG_MAX_INGRESS_QIDS 65536
47 #define CUDBG_MAX_FL_QIDS 2048
48 #define CUDBG_MAX_CNM_QIDS 1024
49 #define CUDBG_LOWMEM_MAX_CTXT_QIDS 256
50 #define ETH_ALEN 6
51 #define CUDBG_MAX_RPLC_SIZE 128
52 #define CUDBG_NUM_REQ_REGS 17
53 #define CUDBG_MAX_TCAM_TID 0x800
54 #define CUDBG_NUM_ULPTX 11
55 #define CUDBG_NUM_ULPTX_READ 512
56
57 #define SN_REG_ADDR 0x183f
58 #define BN_REG_ADDR 0x1819
59 #define NA_REG_ADDR 0x185a
60 #define MN_REG_ADDR 0x1803
61
62 #define A_MPS_VF_RPLCT_MAP0 0x1111c
63 #define A_MPS_VF_RPLCT_MAP1 0x11120
64 #define A_MPS_VF_RPLCT_MAP2 0x11124
65 #define A_MPS_VF_RPLCT_MAP3 0x11128
66 #define A_MPS_VF_RPLCT_MAP4 0x11300
67 #define A_MPS_VF_RPLCT_MAP5 0x11304
68 #define A_MPS_VF_RPLCT_MAP6 0x11308
69 #define A_MPS_VF_RPLCT_MAP7 0x1130c
70
71 #define PORT_TYPE_ADDR 0x1869
72 #define PORT_TYPE_LEN 8
73
74 /* For T6 */
75 #define SN_T6_ADDR 0x83f
76 #define BN_T6_ADDR 0x819
77 #define NA_T6_ADDR 0x85a
78 #define MN_T6_ADDR 0x803
79
80 #define SN_MAX_LEN       24
81 #define BN_MAX_LEN       16
82 #define NA_MAX_LEN       12
83 #define MN_MAX_LEN       16
84 #define MAX_VPD_DATA_LEN 32
85
86 #define VPD_VER_ADDR     0x18c7
87 #define VPD_VER_LEN      2
88 #define SCFG_VER_ADDR    0x06
89 #define SCFG_VER_LEN     4
90
91 #define CUDBG_CIM_BUSY_BIT (1 << 17)
92
93 #define CUDBG_CHAC_PBT_ADDR 0x2800
94 #define CUDBG_CHAC_PBT_LRF  0x3000
95 #define CUDBG_CHAC_PBT_DATA 0x3800
96 #define CUDBG_PBT_DYNAMIC_ENTRIES 8
97 #define CUDBG_PBT_STATIC_ENTRIES 16
98 #define CUDBG_LRF_ENTRIES 8
99 #define CUDBG_PBT_DATA_ENTRIES 512
100
101 #define CUDBG_ENTITY_SIGNATURE 0xCCEDB001
102 #define CUDBG_TID_INFO_REV 1
103 #define CUDBG_MAC_STATS_REV 1
104
105 #ifndef ARRAY_SIZE
106 #define ARRAY_SIZE(_a)  (sizeof((_a)) / sizeof((_a)[0]))
107 #endif
108
109 struct cudbg_pbt_tables {
110         u32 pbt_dynamic[CUDBG_PBT_DYNAMIC_ENTRIES];
111         u32 pbt_static[CUDBG_PBT_STATIC_ENTRIES];
112         u32 lrf_table[CUDBG_LRF_ENTRIES];
113         u32 pbt_data[CUDBG_PBT_DATA_ENTRIES];
114 };
115
116 struct card_mem {
117         u16 size_mc0;
118         u16 size_mc1;
119         u16 size_edc0;
120         u16 size_edc1;
121         u16 mem_flag;
122         u16 res;
123 };
124
125 struct rss_pf_conf {
126         u32 rss_pf_map;
127         u32 rss_pf_mask;
128         u32 rss_pf_config;
129 };
130
131 struct cudbg_ch_cntxt {
132         uint32_t cntxt_type;
133         uint32_t cntxt_id;
134         uint32_t data[SGE_CTXT_SIZE / 4];
135 };
136
137 struct cudbg_tcam {
138         u32 filter_start;
139         u32 server_start;
140         u32 clip_start;
141         u32 routing_start;
142         u32 tid_hash_base;
143         u32 max_tid;
144 };
145
146 #if 0
147 struct cudbg_mbox_log {
148         struct mbox_cmd entry;
149         u32 hi[MBOX_LEN / 8];
150         u32 lo[MBOX_LEN / 8];
151 };
152 #endif
153
154 struct cudbg_tid_data {
155         u32 tid;
156         u32 dbig_cmd;
157         u32 dbig_conf;
158         u32 dbig_rsp_stat;
159         u32 data[CUDBG_NUM_REQ_REGS];
160 };
161
162 struct cudbg_cntxt_field {
163         char *name;
164         u32 start_bit;
165         u32 end_bit;
166         u32 shift;
167         u32 islog2;
168 };
169
170 struct cudbg_mps_tcam {
171         u64 mask;
172         u32 rplc[8];
173         u32 idx;
174         u32 cls_lo;
175         u32 cls_hi;
176         u32 rplc_size;
177         u32 vniy;
178         u32 vnix;
179         u32 dip_hit;
180         u32 vlan_vld;
181         u32 repli;
182         u16 ivlan;
183         u8 addr[ETH_ALEN];
184         u8 lookup_type;
185         u8 port_num;
186         u8 reserved[2];
187 };
188
189 struct rss_vf_conf {
190         u32 rss_vf_vfl;
191         u32 rss_vf_vfh;
192 };
193
194 struct rss_config {
195         u32 tp_rssconf;         /* A_TP_RSS_CONFIG      */
196         u32 tp_rssconf_tnl;     /* A_TP_RSS_CONFIG_TNL  */
197         u32 tp_rssconf_ofd;     /* A_TP_RSS_CONFIG_OFD  */
198         u32 tp_rssconf_syn;     /* A_TP_RSS_CONFIG_SYN  */
199         u32 tp_rssconf_vrt;     /* A_TP_RSS_CONFIG_VRT  */
200         u32 tp_rssconf_cng;     /* A_TP_RSS_CONFIG_CNG  */
201         u32 chip;
202 };
203
204 struct struct_pm_stats {
205         u32 tx_cnt[T6_PM_NSTATS];
206         u32 rx_cnt[T6_PM_NSTATS];
207         u64 tx_cyc[T6_PM_NSTATS];
208         u64 rx_cyc[T6_PM_NSTATS];
209 };
210
211 struct struct_hw_sched {
212         u32 kbps[NTX_SCHED];
213         u32 ipg[NTX_SCHED];
214         u32 pace_tab[NTX_SCHED];
215         u32 mode;
216         u32 map;
217 };
218
219 struct struct_tcp_stats {
220         struct tp_tcp_stats v4, v6;
221 };
222
223 struct struct_tp_err_stats {
224         struct tp_err_stats stats;
225         u32 nchan;
226 };
227
228 struct struct_tp_fcoe_stats {
229         struct tp_fcoe_stats stats[4];
230         u32 nchan;
231 };
232
233 struct struct_mac_stats {
234         u32 port_count;
235         struct port_stats stats[4];
236 };
237
238 struct struct_mac_stats_rev1 {
239         struct cudbg_ver_hdr ver_hdr;
240         u32 port_count;
241         u32 reserved;
242         struct port_stats stats[4];
243 };
244
245 struct struct_tp_cpl_stats {
246         struct tp_cpl_stats stats;
247         u32 nchan;
248 };
249
250 struct struct_wc_stats {
251         u32 wr_cl_success;
252         u32 wr_cl_fail;
253 };
254
255 struct struct_ulptx_la {
256         u32 rdptr[CUDBG_NUM_ULPTX];
257         u32 wrptr[CUDBG_NUM_ULPTX];
258         u32 rddata[CUDBG_NUM_ULPTX];
259         u32 rd_data[CUDBG_NUM_ULPTX][CUDBG_NUM_ULPTX_READ];
260 };
261
262 struct struct_ulprx_la {
263         u32 data[ULPRX_LA_SIZE * 8];
264         u32 size;
265 };
266
267 struct struct_cim_qcfg {
268         u8 chip;
269         u16 base[CIM_NUM_IBQ + CIM_NUM_OBQ_T5];
270         u16 size[CIM_NUM_IBQ + CIM_NUM_OBQ_T5];
271         u16 thres[CIM_NUM_IBQ];
272         u32 obq_wr[2 * CIM_NUM_OBQ_T5];
273         u32 stat[4 * (CIM_NUM_IBQ + CIM_NUM_OBQ_T5)];
274 };
275
276 enum region_index {
277         REGN_DBQ_CONTEXS_IDX,
278         REGN_IMSG_CONTEXTS_IDX,
279         REGN_FLM_CACHE_IDX,
280         REGN_TCBS_IDX,
281         REGN_PSTRUCT_IDX,
282         REGN_TIMERS_IDX,
283         REGN_RX_FL_IDX,
284         REGN_TX_FL_IDX,
285         REGN_PSTRUCT_FL_IDX,
286         REGN_TX_PAYLOAD_IDX,
287         REGN_RX_PAYLOAD_IDX,
288         REGN_LE_HASH_IDX,
289         REGN_ISCSI_IDX,
290         REGN_TDDP_IDX,
291         REGN_TPT_IDX,
292         REGN_STAG_IDX,
293         REGN_RQ_IDX,
294         REGN_RQUDP_IDX,
295         REGN_PBL_IDX,
296         REGN_TXPBL_IDX,
297         REGN_DBVFIFO_IDX,
298         REGN_ULPRX_STATE_IDX,
299         REGN_ULPTX_STATE_IDX,
300 #ifndef __NO_DRIVER_OCQ_SUPPORT__
301         REGN_ON_CHIP_Q_IDX,
302 #endif
303 };
304
305 static const char * const region[] = {
306         "DBQ contexts:", "IMSG contexts:", "FLM cache:", "TCBs:",
307         "Pstructs:", "Timers:", "Rx FL:", "Tx FL:", "Pstruct FL:",
308         "Tx payload:", "Rx payload:", "LE hash:", "iSCSI region:",
309         "TDDP region:", "TPT region:", "STAG region:", "RQ region:",
310         "RQUDP region:", "PBL region:", "TXPBL region:",
311         "DBVFIFO region:", "ULPRX state:", "ULPTX state:",
312 #ifndef __NO_DRIVER_OCQ_SUPPORT__
313         "On-chip queues:"
314 #endif
315 };
316
317 /* Info relative to memory region (i.e. wrt 0). */
318 struct struct_region_info {
319         bool exist; /* Does region exists in current memory region? */
320         u32 start;  /* Start wrt 0 */
321         u32 end;    /* End wrt 0 */
322 };
323
324 struct struct_port_usage {
325         u32 id;
326         u32 used;
327         u32 alloc;
328 };
329
330 struct struct_lpbk_usage {
331         u32 id;
332         u32 used;
333         u32 alloc;
334 };
335
336 struct struct_mem_desc {
337         u32 base;
338         u32 limit;
339         u32 idx;
340 };
341
342 enum string_size_units {
343         STRING_UNITS_10,         /* use powers of 10^3 (standard SI) */
344         STRING_UNITS_2,         /* use binary powers of 2^10 */
345 };
346
347 struct struct_meminfo {
348         struct struct_mem_desc avail[4];
349         struct struct_mem_desc mem[ARRAY_SIZE(region) + 3];
350         u32 avail_c;
351         u32 mem_c;
352         u32 up_ram_lo;
353         u32 up_ram_hi;
354         u32 up_extmem2_lo;
355         u32 up_extmem2_hi;
356         u32 rx_pages_data[3];
357         u32 tx_pages_data[4];
358         u32 p_structs;
359         struct struct_port_usage port_data[4];
360         u32 port_used[4];
361         u32 port_alloc[4];
362         u32 loopback_used[NCHAN];
363         u32 loopback_alloc[NCHAN];
364 };
365
366 #ifndef __GNUC__
367 #pragma warning(disable : 4200)
368 #endif
369
370 struct struct_lb_stats {
371         int nchan;
372         struct lb_port_stats s[0];
373 };
374
375 struct struct_clk_info {
376         u64 retransmit_min;
377         u64 retransmit_max;
378         u64 persist_timer_min;
379         u64 persist_timer_max;
380         u64 keepalive_idle_timer;
381         u64 keepalive_interval;
382         u64 initial_srtt;
383         u64 finwait2_timer;
384         u32 dack_timer;
385         u32 res;
386         u32 cclk_ps;
387         u32 tre;
388         u32 dack_re;
389         char core_clk_period[32];
390         char tp_timer_tick[32];
391         char tcp_tstamp_tick[32];
392         char dack_tick[32];
393 };
394
395 struct cim_pif_la {
396         int size;
397         u8 data[0];
398 };
399
400 struct struct_tp_la {
401         u32 size;
402         u32 mode;
403         u8 data[0];
404 };
405
406 struct field_desc {
407         const char *name;
408         u32 start;
409         u32 width;
410 };
411
412 struct tp_mib_type {
413         char *key;
414         u32 addr;
415         u32 value;
416 };
417
418 struct wtp_type_0 {
419         u32   sop;
420         u32   eop;
421 };
422
423 struct wtp_type_1 {
424         u32   sop[2];
425         u32   eop[2];
426 };
427
428 struct wtp_type_2 {
429         u32   sop[4];
430         u32   eop[4];
431 };
432
433 struct wtp_type_3 {
434         u32   sop[4];
435         u32   eop[4];
436         u32   drops;
437 };
438
439 struct wtp_data {
440         /*TX path, Request Work request sub-path:*/
441
442         struct wtp_type_1 sge_pcie_cmd_req;       /*SGE_DEBUG   PC_Req_xOPn*/
443         struct wtp_type_1 pcie_core_cmd_req;      /*PCIE_CMDR_REQ_CNT*/
444
445
446         /*TX path, Work request to uP sub-path*/
447         struct wtp_type_1 core_pcie_cmd_rsp;      /*PCIE_CMDR_RSP_CNT*/
448         struct wtp_type_1 pcie_sge_cmd_rsp;       /*SGE_DEBUG   PC_Rsp_xOPn*/
449         struct wtp_type_1 sge_cim;                /*SGE_DEBUG CIM_xOPn*/
450
451         /*TX path, Data request path from ULP_TX to core*/
452         struct wtp_type_2 utx_sge_dma_req;       /*SGE UD_Rx_xOPn*/
453         struct wtp_type_2 sge_pcie_dma_req;      /*SGE PD_Req_Rdn (no eops)*/
454         struct wtp_type_2 pcie_core_dma_req;     /*PCIE_DMAR_REQ_CNT (no eops)*/
455
456         /*Main TX path, from core to wire*/
457         struct wtp_type_2 core_pcie_dma_rsp;    /*PCIE_DMAR_RSP_SOP_CNT/
458                                                   PCIE_DMAR_EOP_CNT*/
459         struct wtp_type_2 pcie_sge_dma_rsp;     /*SGE_DEBUG PD_Rsp_xOPn*/
460         struct wtp_type_2 sge_utx;              /*SGE_DEBUG U_Tx_xOPn*/
461         struct wtp_type_2 utx_tp;          /*ULP_TX_SE_CNT_CHn[xOP_CNT_ULP2TP]*/
462         struct wtp_type_2 utx_tpcside;     /*TP_DBG_CSIDE_RXn[RxXoPCnt]*/
463
464         struct wtp_type_2 tpcside_rxpld;
465         struct wtp_type_2 tpcside_rxarb;       /*TP_DBG_CSIDE_RXn[RxArbXopCnt]*/
466         struct wtp_type_2 tpcside_rxcpl;
467
468         struct wtp_type_2 tpeside_mps;         /*TP_DBG_ESDIE_PKT0[TxXoPCnt]*/
469         struct wtp_type_2 tpeside_pm;
470         struct wtp_type_2 tpeside_pld;
471
472         /*Tx path, PCIE t5 DMA stat*/
473         struct wtp_type_2 pcie_t5_dma_stat3;
474
475         /*Tx path, SGE debug data high index 6*/
476         struct wtp_type_2 sge_debug_data_high_index_6;
477
478         /*Tx path, SGE debug data high index 3*/
479         struct wtp_type_2 sge_debug_data_high_index_3;
480
481         /*Tx path, ULP SE CNT CHx*/
482         struct wtp_type_2 ulp_se_cnt_chx;
483
484         /*pcie cmd stat 2*/
485         struct wtp_type_2 pcie_cmd_stat2;
486
487         /*pcie cmd stat 3*/
488         struct wtp_type_2 pcie_cmd_stat3;
489
490         struct wtp_type_2 pcie_dma1_stat2_core;
491
492         struct wtp_type_1 sge_work_req_pkt;
493
494         struct wtp_type_2 sge_debug_data_high_indx5;
495
496         /*Tx path, mac portx pkt count*/
497         struct wtp_type_2 mac_portx_pkt_count;
498
499         /*Rx path, mac porrx pkt count*/
500         struct wtp_type_2 mac_porrx_pkt_count;
501
502         /*Rx path, PCIE T5 dma1 stat 2*/
503         struct wtp_type_2 pcie_dma1_stat2;
504
505         /*Rx path, sge debug data high index 7*/
506         struct wtp_type_2 sge_debug_data_high_indx7;
507
508         /*Rx path, sge debug data high index 1*/
509         struct wtp_type_1 sge_debug_data_high_indx1;
510
511         /*Rx path, TP debug CSIDE Tx register*/
512         struct wtp_type_1 utx_tpcside_tx;
513
514         /*Rx path, LE DB response count*/
515         struct wtp_type_0 le_db_rsp_cnt;
516
517         /*Rx path, TP debug Eside PKTx*/
518         struct wtp_type_2 tp_dbg_eside_pktx;
519
520         /*Rx path, sge debug data high index 9*/
521         struct wtp_type_1 sge_debug_data_high_indx9;
522
523         /*Tx path, mac portx aFramesTransmittesok*/
524         struct wtp_type_2 mac_portx_aframestra_ok;
525
526         /*Rx path, mac portx aFramesTransmittesok*/
527         struct wtp_type_2 mac_porrx_aframestra_ok;
528
529         /*Tx path, MAC_PORT_MTIP_1G10G_RX_etherStatsPkts*/
530         struct wtp_type_1 mac_portx_etherstatspkts;
531
532         /*Rx path, MAC_PORT_MTIP_1G10G_RX_etherStatsPkts*/
533         struct wtp_type_1 mac_porrx_etherstatspkts;
534
535         struct wtp_type_3 tp_mps;           /*MPS_TX_SE_CNT_TP01 and
536                                               MPS_TX_SE_CNT_TP34*/
537         struct wtp_type_3 mps_xgm;          /*MPS_TX_SE_CNT_MAC01 and
538                                               MPS_TX_SE_CNT_MAC34*/
539         struct wtp_type_2 tx_xgm_xgm;       /*XGMAC_PORT_PKT_CNT_PORT_n*/
540         struct wtp_type_2 xgm_wire;   /*XGMAC_PORT_XGM_STAT_TX_FRAME_LOW_PORT_N
541                                       (clear on read)*/
542
543         /*RX path, from wire to core.*/
544         struct wtp_type_2 wire_xgm;   /*XGMAC_PORT_XGM_STAT_RX_FRAMES_LOW_PORT_N
545                                         (clear on read)*/
546         struct wtp_type_2 rx_xgm_xgm;       /*XGMAC_PORT_PKT_CNT_PORT_n*/
547         struct _xgm_mps {                   /*MPS_RX_SE_CNT_INn*/
548                 u32   sop[8];               /*  => undef,*/
549                 u32   eop[8];               /*  => undef,*/
550                 u32   drop;                 /* => undef,*/
551                 u32   cls_drop;             /* => undef,*/
552                 u32   err;                  /* => undef,*/
553                 u32   bp;                   /*   => undef,*/
554         } xgm_mps;
555
556         struct wtp_type_3 mps_tp;           /*MPS_RX_SE_CNT_OUT01 and
557                                               MPS_RX_SE_CNT_OUT23*/
558         struct wtp_type_2 mps_tpeside;      /*TP_DBG_ESIDE_PKTn*/
559         struct wtp_type_1 tpeside_pmrx;     /*???*/
560         struct wtp_type_2 pmrx_ulprx;       /*ULP_RX_SE_CNT_CHn[xOP_CNT_INn]*/
561         struct wtp_type_2 ulprx_tpcside;    /*ULP_RX_SE_CNT_CHn[xOP_CNT_OUTn]*/
562         struct wtp_type_2 tpcside_csw;      /*TP_DBG_CSIDE_TXn[TxSopCnt]*/
563         struct wtp_type_2 tpcside_pm;
564         struct wtp_type_2 tpcside_uturn;
565         struct wtp_type_2 tpcside_txcpl;
566         struct wtp_type_1 tp_csw;            /*SGE_DEBUG CPLSW_TP_Rx_xOPn*/
567         struct wtp_type_1 csw_sge;           /*SGE_DEBUG T_Rx_xOPn*/
568         struct wtp_type_2 sge_pcie;          /*SGE_DEBUG PD_Req_SopN -
569                                                PD_Req_RdN - PD_ReqIntN*/
570         struct wtp_type_2 sge_pcie_ints;     /*SGE_DEBUG PD_Req_IntN*/
571         struct wtp_type_2 pcie_core_dmaw;    /*PCIE_DMAW_SOP_CNT and
572                                                PCIE_DMAW_EOP_CNT*/
573         struct wtp_type_2 pcie_core_dmai;    /*PCIE_DMAI_CNT*/
574
575 };
576
577 struct tp_mib_data {
578         struct tp_mib_type TP_MIB_MAC_IN_ERR_0;
579         struct tp_mib_type TP_MIB_MAC_IN_ERR_1;
580         struct tp_mib_type TP_MIB_MAC_IN_ERR_2;
581         struct tp_mib_type TP_MIB_MAC_IN_ERR_3;
582         struct tp_mib_type TP_MIB_HDR_IN_ERR_0;
583         struct tp_mib_type TP_MIB_HDR_IN_ERR_1;
584         struct tp_mib_type TP_MIB_HDR_IN_ERR_2;
585         struct tp_mib_type TP_MIB_HDR_IN_ERR_3;
586         struct tp_mib_type TP_MIB_TCP_IN_ERR_0;
587         struct tp_mib_type TP_MIB_TCP_IN_ERR_1;
588         struct tp_mib_type TP_MIB_TCP_IN_ERR_2;
589         struct tp_mib_type TP_MIB_TCP_IN_ERR_3;
590         struct tp_mib_type TP_MIB_TCP_OUT_RST;
591         struct tp_mib_type TP_MIB_TCP_IN_SEG_HI;
592         struct tp_mib_type TP_MIB_TCP_IN_SEG_LO;
593         struct tp_mib_type TP_MIB_TCP_OUT_SEG_HI;
594         struct tp_mib_type TP_MIB_TCP_OUT_SEG_LO;
595         struct tp_mib_type TP_MIB_TCP_RXT_SEG_HI;
596         struct tp_mib_type TP_MIB_TCP_RXT_SEG_LO;
597         struct tp_mib_type TP_MIB_TNL_CNG_DROP_0;
598         struct tp_mib_type TP_MIB_TNL_CNG_DROP_1;
599         struct tp_mib_type TP_MIB_TNL_CNG_DROP_2;
600         struct tp_mib_type TP_MIB_TNL_CNG_DROP_3;
601         struct tp_mib_type TP_MIB_OFD_CHN_DROP_0;
602         struct tp_mib_type TP_MIB_OFD_CHN_DROP_1;
603         struct tp_mib_type TP_MIB_OFD_CHN_DROP_2;
604         struct tp_mib_type TP_MIB_OFD_CHN_DROP_3;
605         struct tp_mib_type TP_MIB_TNL_OUT_PKT_0;
606         struct tp_mib_type TP_MIB_TNL_OUT_PKT_1;
607         struct tp_mib_type TP_MIB_TNL_OUT_PKT_2;
608         struct tp_mib_type TP_MIB_TNL_OUT_PKT_3;
609         struct tp_mib_type TP_MIB_TNL_IN_PKT_0;
610         struct tp_mib_type TP_MIB_TNL_IN_PKT_1;
611         struct tp_mib_type TP_MIB_TNL_IN_PKT_2;
612         struct tp_mib_type TP_MIB_TNL_IN_PKT_3;
613         struct tp_mib_type TP_MIB_TCP_V6IN_ERR_0;
614         struct tp_mib_type TP_MIB_TCP_V6IN_ERR_1;
615         struct tp_mib_type TP_MIB_TCP_V6IN_ERR_2;
616         struct tp_mib_type TP_MIB_TCP_V6IN_ERR_3;
617         struct tp_mib_type TP_MIB_TCP_V6OUT_RST;
618         struct tp_mib_type TP_MIB_TCP_V6IN_SEG_HI;
619         struct tp_mib_type TP_MIB_TCP_V6IN_SEG_LO;
620         struct tp_mib_type TP_MIB_TCP_V6OUT_SEG_HI;
621         struct tp_mib_type TP_MIB_TCP_V6OUT_SEG_LO;
622         struct tp_mib_type TP_MIB_TCP_V6RXT_SEG_HI;
623         struct tp_mib_type TP_MIB_TCP_V6RXT_SEG_LO;
624         struct tp_mib_type TP_MIB_OFD_ARP_DROP;
625         struct tp_mib_type TP_MIB_OFD_DFR_DROP;
626         struct tp_mib_type TP_MIB_CPL_IN_REQ_0;
627         struct tp_mib_type TP_MIB_CPL_IN_REQ_1;
628         struct tp_mib_type TP_MIB_CPL_IN_REQ_2;
629         struct tp_mib_type TP_MIB_CPL_IN_REQ_3;
630         struct tp_mib_type TP_MIB_CPL_OUT_RSP_0;
631         struct tp_mib_type TP_MIB_CPL_OUT_RSP_1;
632         struct tp_mib_type TP_MIB_CPL_OUT_RSP_2;
633         struct tp_mib_type TP_MIB_CPL_OUT_RSP_3;
634         struct tp_mib_type TP_MIB_TNL_LPBK_0;
635         struct tp_mib_type TP_MIB_TNL_LPBK_1;
636         struct tp_mib_type TP_MIB_TNL_LPBK_2;
637         struct tp_mib_type TP_MIB_TNL_LPBK_3;
638         struct tp_mib_type TP_MIB_TNL_DROP_0;
639         struct tp_mib_type TP_MIB_TNL_DROP_1;
640         struct tp_mib_type TP_MIB_TNL_DROP_2;
641         struct tp_mib_type TP_MIB_TNL_DROP_3;
642         struct tp_mib_type TP_MIB_FCOE_DDP_0;
643         struct tp_mib_type TP_MIB_FCOE_DDP_1;
644         struct tp_mib_type TP_MIB_FCOE_DDP_2;
645         struct tp_mib_type TP_MIB_FCOE_DDP_3;
646         struct tp_mib_type TP_MIB_FCOE_DROP_0;
647         struct tp_mib_type TP_MIB_FCOE_DROP_1;
648         struct tp_mib_type TP_MIB_FCOE_DROP_2;
649         struct tp_mib_type TP_MIB_FCOE_DROP_3;
650         struct tp_mib_type TP_MIB_FCOE_BYTE_0_HI;
651         struct tp_mib_type TP_MIB_FCOE_BYTE_0_LO;
652         struct tp_mib_type TP_MIB_FCOE_BYTE_1_HI;
653         struct tp_mib_type TP_MIB_FCOE_BYTE_1_LO;
654         struct tp_mib_type TP_MIB_FCOE_BYTE_2_HI;
655         struct tp_mib_type TP_MIB_FCOE_BYTE_2_LO;
656         struct tp_mib_type TP_MIB_FCOE_BYTE_3_HI;
657         struct tp_mib_type TP_MIB_FCOE_BYTE_3_LO;
658         struct tp_mib_type TP_MIB_OFD_VLN_DROP_0;
659         struct tp_mib_type TP_MIB_OFD_VLN_DROP_1;
660         struct tp_mib_type TP_MIB_OFD_VLN_DROP_2;
661         struct tp_mib_type TP_MIB_OFD_VLN_DROP_3;
662         struct tp_mib_type TP_MIB_USM_PKTS;
663         struct tp_mib_type TP_MIB_USM_DROP;
664         struct tp_mib_type TP_MIB_USM_BYTES_HI;
665         struct tp_mib_type TP_MIB_USM_BYTES_LO;
666         struct tp_mib_type TP_MIB_TID_DEL;
667         struct tp_mib_type TP_MIB_TID_INV;
668         struct tp_mib_type TP_MIB_TID_ACT;
669         struct tp_mib_type TP_MIB_TID_PAS;
670         struct tp_mib_type TP_MIB_RQE_DFR_MOD;
671         struct tp_mib_type TP_MIB_RQE_DFR_PKT;
672 };
673
674 struct cudbg_reg_info {
675         const char *name;
676         unsigned int addr;
677         unsigned int len;
678 };
679
680 struct tp1_reg_info {
681         char addr[10];
682         char name[40];
683 };
684
685 struct ireg_field {
686         u32 ireg_addr;
687         u32 ireg_data;
688         u32 ireg_local_offset;
689         u32 ireg_offset_range;
690 };
691
692 struct ireg_buf {
693         struct ireg_field tp_pio;
694         u32 outbuf[32];
695 };
696
697 struct tx_rate {
698         u64 nrate[NCHAN];
699         u64 orate[NCHAN];
700         u32 nchan;
701 };
702
703 struct tid_info_region {
704         u32 ntids;
705         u32 nstids;
706         u32 stid_base;
707         u32 hash_base;
708
709         u32 natids;
710         u32 nftids;
711         u32 ftid_base;
712         u32 aftid_base;
713         u32 aftid_end;
714
715         /* Server filter region */
716         u32 sftid_base;
717         u32 nsftids;
718
719         /* UO context range */
720         u32 uotid_base;
721         u32 nuotids;
722
723         u32 sb;
724         u32 flags;
725         u32 le_db_conf;
726         u32 IP_users;
727         u32 IPv6_users;
728
729         u32 hpftid_base;
730         u32 nhpftids;
731 };
732
733 struct tid_info_region_rev1 {
734         struct cudbg_ver_hdr ver_hdr;
735         struct tid_info_region tid;
736         u32 tid_start;
737         u32 reserved[16];
738 };
739
740 struct struct_vpd_data {
741         u8 sn[SN_MAX_LEN + 1];
742         u8 bn[BN_MAX_LEN + 1];
743         u8 na[NA_MAX_LEN + 1];
744         u8 mn[MN_MAX_LEN + 1];
745         u16 fw_major;
746         u16 fw_minor;
747         u16 fw_micro;
748         u16 fw_build;
749         u32 scfg_vers;
750         u32 vpd_vers;
751 };
752
753 struct sw_state {
754         u32 fw_state;
755         u8 caller_string[100];
756         u8 os_type;
757         u8 reserved[3];
758         u32 reserved1[16];
759 };
760
761 static u32 ATTRIBUTE_UNUSED t6_tp_pio_array[][4] = {
762         {0x7e40, 0x7e44, 0x020, 28}, /* t6_tp_pio_regs_20_to_3b */
763         {0x7e40, 0x7e44, 0x040, 10}, /* t6_tp_pio_regs_40_to_49 */
764         {0x7e40, 0x7e44, 0x050, 10}, /* t6_tp_pio_regs_50_to_59 */
765         {0x7e40, 0x7e44, 0x060, 14}, /* t6_tp_pio_regs_60_to_6d */
766         {0x7e40, 0x7e44, 0x06F, 1}, /* t6_tp_pio_regs_6f */
767         {0x7e40, 0x7e44, 0x070, 6}, /* t6_tp_pio_regs_70_to_75 */
768         {0x7e40, 0x7e44, 0x130, 18},  /* t6_tp_pio_regs_130_to_141 */
769         {0x7e40, 0x7e44, 0x145, 19}, /* t6_tp_pio_regs_145_to_157 */
770         {0x7e40, 0x7e44, 0x160, 1}, /* t6_tp_pio_regs_160 */
771         {0x7e40, 0x7e44, 0x230, 25}, /* t6_tp_pio_regs_230_to_248 */
772         {0x7e40, 0x7e44, 0x24a, 3}, /* t6_tp_pio_regs_24c */
773         {0x7e40, 0x7e44, 0x8C0, 1} /* t6_tp_pio_regs_8c0 */
774 };
775
776 static u32 ATTRIBUTE_UNUSED t5_tp_pio_array[][4] = {
777         {0x7e40, 0x7e44, 0x020, 28}, /* t5_tp_pio_regs_20_to_3b */
778         {0x7e40, 0x7e44, 0x040, 19}, /* t5_tp_pio_regs_40_to_52 */
779         {0x7e40, 0x7e44, 0x054, 2}, /* t5_tp_pio_regs_54_to_55 */
780         {0x7e40, 0x7e44, 0x060, 13}, /* t5_tp_pio_regs_60_to_6c */
781         {0x7e40, 0x7e44, 0x06F, 1}, /* t5_tp_pio_regs_6f */
782         {0x7e40, 0x7e44, 0x120, 4}, /* t5_tp_pio_regs_120_to_123 */
783         {0x7e40, 0x7e44, 0x12b, 2},  /* t5_tp_pio_regs_12b_to_12c */
784         {0x7e40, 0x7e44, 0x12f, 21}, /* t5_tp_pio_regs_12f_to_143 */
785         {0x7e40, 0x7e44, 0x145, 19}, /* t5_tp_pio_regs_145_to_157 */
786         {0x7e40, 0x7e44, 0x230, 25}, /* t5_tp_pio_regs_230_to_248 */
787         {0x7e40, 0x7e44, 0x8C0, 1} /* t5_tp_pio_regs_8c0 */
788 };
789
790 static u32 ATTRIBUTE_UNUSED t6_ma_ireg_array[][4] = {
791         {0x78f8, 0x78fc, 0xa000, 23}, /* t6_ma_regs_a000_to_a016 */
792         {0x78f8, 0x78fc, 0xa400, 30}, /* t6_ma_regs_a400_to_a41e */
793         {0x78f8, 0x78fc, 0xa800, 20}  /* t6_ma_regs_a800_to_a813 */
794 };
795
796 static u32 ATTRIBUTE_UNUSED t6_ma_ireg_array2[][4] = {
797         {0x78f8, 0x78fc, 0xe400, 17}, /* t6_ma_regs_e400_to_e600 */
798         {0x78f8, 0x78fc, 0xe640, 13} /* t6_ma_regs_e640_to_e7c0 */
799 };
800
801 static u32 ATTRIBUTE_UNUSED t6_hma_ireg_array[][4] = {
802         {0x51320, 0x51324, 0xa000, 32} /* t6_hma_regs_a000_to_a01f */
803 };
804 static u32 ATTRIBUTE_UNUSED t5_pcie_pdbg_array[][4] = {
805         {0x5a04, 0x5a0c, 0x00, 0x20}, /* t5_pcie_pdbg_regs_00_to_20 */
806         {0x5a04, 0x5a0c, 0x21, 0x20}, /* t5_pcie_pdbg_regs_21_to_40 */
807         {0x5a04, 0x5a0c, 0x41, 0x10}, /* t5_pcie_pdbg_regs_41_to_50 */
808 };
809
810 static u32 ATTRIBUTE_UNUSED t5_pcie_config_array[][2] = {
811         {0x0, 0x34},
812         {0x3c, 0x40},
813         {0x50, 0x64},
814         {0x70, 0x80},
815         {0x94, 0xa0},
816         {0xb0, 0xb8},
817         {0xd0, 0xd4},
818         {0x100, 0x128},
819         {0x140, 0x148},
820         {0x150, 0x164},
821         {0x170, 0x178},
822         {0x180, 0x194},
823         {0x1a0, 0x1b8},
824         {0x1c0, 0x208},
825 };
826
827 static u32 ATTRIBUTE_UNUSED t5_pcie_cdbg_array[][4] = {
828         {0x5a10, 0x5a18, 0x00, 0x20}, /* t5_pcie_cdbg_regs_00_to_20 */
829         {0x5a10, 0x5a18, 0x21, 0x18}, /* t5_pcie_cdbg_regs_21_to_37 */
830 };
831
832 static u32 ATTRIBUTE_UNUSED t6_tp_tm_pio_array[1][4] = {
833         {0x7e18, 0x7e1c, 0x0, 12}
834 };
835
836 static u32 ATTRIBUTE_UNUSED t5_tp_tm_pio_array[1][4] = {
837         {0x7e18, 0x7e1c, 0x0, 12}
838 };
839
840 static u32 ATTRIBUTE_UNUSED t5_pm_rx_array[][4] = {
841         {0x8FD0, 0x8FD4, 0x10000, 0x20}, /* t5_pm_rx_regs_10000_to_10020 */
842         {0x8FD0, 0x8FD4, 0x10021, 0x0D}, /* t5_pm_rx_regs_10021_to_1002c */
843 };
844
845 static u32 ATTRIBUTE_UNUSED t5_pm_tx_array[][4] = {
846         {0x8FF0, 0x8FF4, 0x10000, 0x20}, /* t5_pm_tx_regs_10000_to_10020 */
847         {0x8FF0, 0x8FF4, 0x10021, 0x1D}, /* t5_pm_tx_regs_10021_to_1003c */
848 };
849
850 static u32 ATTRIBUTE_UNUSED t6_tp_mib_index_array[6][4] = {
851         {0x7e50, 0x7e54, 0x0, 13},
852         {0x7e50, 0x7e54, 0x10, 6},
853         {0x7e50, 0x7e54, 0x18, 21},
854         {0x7e50, 0x7e54, 0x30, 32},
855         {0x7e50, 0x7e54, 0x50, 22},
856         {0x7e50, 0x7e54, 0x68, 12}
857 };
858
859 static u32 ATTRIBUTE_UNUSED t5_tp_mib_index_array[9][4] = {
860         {0x7e50, 0x7e54, 0x0, 13},
861         {0x7e50, 0x7e54, 0x10, 6},
862         {0x7e50, 0x7e54, 0x18, 8},
863         {0x7e50, 0x7e54, 0x20, 13},
864         {0x7e50, 0x7e54, 0x30, 16},
865         {0x7e50, 0x7e54, 0x40, 16},
866         {0x7e50, 0x7e54, 0x50, 16},
867         {0x7e50, 0x7e54, 0x60, 6},
868         {0x7e50, 0x7e54, 0x68, 4}
869 };
870
871 static u32 ATTRIBUTE_UNUSED t5_sge_dbg_index_array[9][4] = {
872         {0x10cc, 0x10d0, 0x0, 16},
873         {0x10cc, 0x10d4, 0x0, 16},
874 };
875
876 static u32 ATTRIBUTE_UNUSED t6_up_cim_reg_array[][4] = {
877         {0x7b50, 0x7b54, 0x2000, 0x20},   /* up_cim_2000_to_207c */
878         {0x7b50, 0x7b54, 0x2080, 0x1d},   /* up_cim_2080_to_20fc */
879         {0x7b50, 0x7b54, 0x00, 0x20},     /* up_cim_00_to_7c */
880         {0x7b50, 0x7b54, 0x80, 0x20},     /* up_cim_80_to_fc */
881         {0x7b50, 0x7b54, 0x100, 0x11},    /* up_cim_100_to_14c */
882         {0x7b50, 0x7b54, 0x200, 0x10},    /* up_cim_200_to_23c */
883         {0x7b50, 0x7b54, 0x240, 0x2},     /* up_cim_240_to_244 */
884         {0x7b50, 0x7b54, 0x250, 0x2},     /* up_cim_250_to_254 */
885         {0x7b50, 0x7b54, 0x260, 0x2},     /* up_cim_260_to_264 */
886         {0x7b50, 0x7b54, 0x270, 0x2},     /* up_cim_270_to_274 */
887         {0x7b50, 0x7b54, 0x280, 0x20},    /* up_cim_280_to_2fc */
888         {0x7b50, 0x7b54, 0x300, 0x20},    /* up_cim_300_to_37c */
889         {0x7b50, 0x7b54, 0x380, 0x14},    /* up_cim_380_to_3cc */
890
891 };
892
893 static u32 ATTRIBUTE_UNUSED t5_up_cim_reg_array[][4] = {
894         {0x7b50, 0x7b54, 0x2000, 0x20},   /* up_cim_2000_to_207c */
895         {0x7b50, 0x7b54, 0x2080, 0x19},   /* up_cim_2080_to_20ec */
896         {0x7b50, 0x7b54, 0x00, 0x20},     /* up_cim_00_to_7c */
897         {0x7b50, 0x7b54, 0x80, 0x20},     /* up_cim_80_to_fc */
898         {0x7b50, 0x7b54, 0x100, 0x11},    /* up_cim_100_to_14c */
899         {0x7b50, 0x7b54, 0x200, 0x10},    /* up_cim_200_to_23c */
900         {0x7b50, 0x7b54, 0x240, 0x2},     /* up_cim_240_to_244 */
901         {0x7b50, 0x7b54, 0x250, 0x2},     /* up_cim_250_to_254 */
902         {0x7b50, 0x7b54, 0x260, 0x2},     /* up_cim_260_to_264 */
903         {0x7b50, 0x7b54, 0x270, 0x2},     /* up_cim_270_to_274 */
904         {0x7b50, 0x7b54, 0x280, 0x20},    /* up_cim_280_to_2fc */
905         {0x7b50, 0x7b54, 0x300, 0x20},    /* up_cim_300_to_37c */
906         {0x7b50, 0x7b54, 0x380, 0x14},    /* up_cim_380_to_3cc */
907 };
908
909 #endif