xref: /illumos-gate/usr/src/uts/common/io/cxgbe/t4nex/cudbg.h (revision 7e6ad4690aa1d3cbf260ef54d5e9632ae40a782e)
1*7e6ad469SVishal Kulkarni /*
2*7e6ad469SVishal Kulkarni  * This file and its contents are supplied under the terms of the
3*7e6ad469SVishal Kulkarni  * Common Development and Distribution License ("CDDL"), version 1.0.
4*7e6ad469SVishal Kulkarni  * You may only use this file in accordance with the terms of version
5*7e6ad469SVishal Kulkarni  * 1.0 of the CDDL.
6*7e6ad469SVishal Kulkarni  *
7*7e6ad469SVishal Kulkarni  * A full copy of the text of the CDDL should have accompanied this
8*7e6ad469SVishal Kulkarni  * source. A copy of the CDDL is also available via the Internet at
9*7e6ad469SVishal Kulkarni  * http://www.illumos.org/license/CDDL.
10*7e6ad469SVishal Kulkarni  */
11*7e6ad469SVishal Kulkarni 
12*7e6ad469SVishal Kulkarni /*-
13*7e6ad469SVishal Kulkarni  * Copyright (c) 2019 Chelsio Communications, Inc.
14*7e6ad469SVishal Kulkarni  * All rights reserved.
15*7e6ad469SVishal Kulkarni  * * Redistribution and use in source and binary forms, with or without
16*7e6ad469SVishal Kulkarni  * modification, are permitted provided that the following conditions * are met:
17*7e6ad469SVishal Kulkarni  * 1. Redistributions of source code must retain the above copyright
18*7e6ad469SVishal Kulkarni  *    notice, this list of conditions and the following disclaimer.
19*7e6ad469SVishal Kulkarni  * 2. Redistributions in binary form must reproduce the above copyright
20*7e6ad469SVishal Kulkarni  *    notice, this list of conditions and the following disclaimer in the
21*7e6ad469SVishal Kulkarni  *    documentation and/or other materials provided with the distribution.
22*7e6ad469SVishal Kulkarni  *
23*7e6ad469SVishal Kulkarni  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
24*7e6ad469SVishal Kulkarni  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25*7e6ad469SVishal Kulkarni  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26*7e6ad469SVishal Kulkarni  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
27*7e6ad469SVishal Kulkarni  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28*7e6ad469SVishal Kulkarni  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29*7e6ad469SVishal Kulkarni  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30*7e6ad469SVishal Kulkarni  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31*7e6ad469SVishal Kulkarni  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32*7e6ad469SVishal Kulkarni  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33*7e6ad469SVishal Kulkarni  * SUCH DAMAGE.
34*7e6ad469SVishal Kulkarni  */
35*7e6ad469SVishal Kulkarni 
36*7e6ad469SVishal Kulkarni /*
37*7e6ad469SVishal Kulkarni  * Chelsio Unified Debug Interface header file.
38*7e6ad469SVishal Kulkarni  * Version 1.1
39*7e6ad469SVishal Kulkarni  */
40*7e6ad469SVishal Kulkarni #ifndef _CUDBG_IF_H_
41*7e6ad469SVishal Kulkarni #define _CUDBG_IF_H_
42*7e6ad469SVishal Kulkarni 
43*7e6ad469SVishal Kulkarni #ifndef _KERNEL
44*7e6ad469SVishal Kulkarni #include <stdlib.h>
45*7e6ad469SVishal Kulkarni #endif
46*7e6ad469SVishal Kulkarni 
47*7e6ad469SVishal Kulkarni #include "cudbg_lib_common.h"
48*7e6ad469SVishal Kulkarni 
49*7e6ad469SVishal Kulkarni #ifdef __GNUC__
50*7e6ad469SVishal Kulkarni #define ATTRIBUTE_UNUSED __attribute__ ((unused))
51*7e6ad469SVishal Kulkarni #else
52*7e6ad469SVishal Kulkarni #define ATTRIBUTE_UNUSED
53*7e6ad469SVishal Kulkarni #endif
54*7e6ad469SVishal Kulkarni 
55*7e6ad469SVishal Kulkarni #if defined(CONFIG_CUDBG_DEBUG)
56*7e6ad469SVishal Kulkarni #define cudbg_debug(pdbg_init, format,  ...) do {\
57*7e6ad469SVishal Kulkarni 	pdbg_init->print(format, ##__VA_ARGS__); \
58*7e6ad469SVishal Kulkarni } while (0)
59*7e6ad469SVishal Kulkarni #else
60*7e6ad469SVishal Kulkarni #define cudbg_debug(pdbg_init, format,  ...) do { } while (0)
61*7e6ad469SVishal Kulkarni #endif
62*7e6ad469SVishal Kulkarni 
63*7e6ad469SVishal Kulkarni #define OUT
64*7e6ad469SVishal Kulkarni #define IN
65*7e6ad469SVishal Kulkarni #define INOUT
66*7e6ad469SVishal Kulkarni 
67*7e6ad469SVishal Kulkarni /* Error codes */
68*7e6ad469SVishal Kulkarni 
69*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_SUCCESS		     0
70*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NOSPACE		    -2
71*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FLASH_WRITE_FAIL	    -3
72*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FLASH_READ_FAIL	    -4
73*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNDEFINED_OUT_BUF	    -5
74*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNDEFINED_CBFN	    -6
75*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNDEFINED_PRINTF_CBFN  -7
76*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_ADAP_INVALID	    -8
77*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FLASH_EMPTY	    -9
78*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NO_ADAPTER		    -10
79*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NO_SIGNATURE	    -11
80*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_MULTIPLE_REG	    -12
81*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNREGISTERED	    -13
82*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_UNDEFINED_ENTITY	    -14
83*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_REG_FAIlED		    -15
84*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_DEVLOG_FAILED	    -16
85*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_SMALL_BUFF		    -17
86*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_CHKSUM_MISSMATCH	    -18
87*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NO_SCRATCH_MEM	    -19
88*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_OUTBUFF_OVERFLOW	    -20
89*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_INVALID_BUFF	    -21  /* Invalid magic */
90*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FILE_OPEN_FAIL	    -22
91*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_DEVLOG_INT_FAIL	    -23
92*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_ENTITY_NOT_FOUND	    -24
93*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_DECOMPRESS_FAIL	    -25
94*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_BUFFER_SHORT	    -26
95*7e6ad469SVishal Kulkarni #define CUDBG_METADATA_VERSION_MISMATCH     -27
96*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NOT_IMPLEMENTED	    -28
97*7e6ad469SVishal Kulkarni #define CUDBG_SYSTEM_ERROR		    -29
98*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_MMAP_FAILED	    -30
99*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FILE_WRITE_FAILED	    -31
100*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_CCLK_NOT_DEFINED	    -32
101*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FLASH_FULL            -33
102*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_SECTOR_EMPTY          -34
103*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_ENTITY_NOT_REQUESTED  -35
104*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_NOT_SUPPORTED         -36
105*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_FILE_READ_FAILED      -37
106*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_CORRUPTED             -38
107*7e6ad469SVishal Kulkarni #define CUDBG_STATUS_INVALID_INDEX         -39
108*7e6ad469SVishal Kulkarni 
109*7e6ad469SVishal Kulkarni #define CUDBG_MAJOR_VERSION		    1
110*7e6ad469SVishal Kulkarni #define CUDBG_MINOR_VERSION		    14
111*7e6ad469SVishal Kulkarni #define CUDBG_BUILD_VERSION		    0
112*7e6ad469SVishal Kulkarni 
113*7e6ad469SVishal Kulkarni #define CUDBG_FILE_NAME_LEN 256
114*7e6ad469SVishal Kulkarni #define CUDBG_DIR_NAME_LEN  256
115*7e6ad469SVishal Kulkarni #define CUDBG_MAX_BITMAP_LEN 16
116*7e6ad469SVishal Kulkarni 
117*7e6ad469SVishal Kulkarni static char ATTRIBUTE_UNUSED * err_msg[] = {
118*7e6ad469SVishal Kulkarni 	"Success",
119*7e6ad469SVishal Kulkarni 	"Unknown",
120*7e6ad469SVishal Kulkarni 	"No space",
121*7e6ad469SVishal Kulkarni 	"Flash write fail",
122*7e6ad469SVishal Kulkarni 	"Flash read fail",
123*7e6ad469SVishal Kulkarni 	"Undefined out buf",
124*7e6ad469SVishal Kulkarni 	"Callback function undefined",
125*7e6ad469SVishal Kulkarni 	"Print callback function undefined",
126*7e6ad469SVishal Kulkarni 	"ADAP invalid",
127*7e6ad469SVishal Kulkarni 	"Flash empty",
128*7e6ad469SVishal Kulkarni 	"No adapter",
129*7e6ad469SVishal Kulkarni 	"No signature",
130*7e6ad469SVishal Kulkarni 	"Multiple registration",
131*7e6ad469SVishal Kulkarni 	"Unregistered",
132*7e6ad469SVishal Kulkarni 	"Undefined entity",
133*7e6ad469SVishal Kulkarni 	"Reg failed",
134*7e6ad469SVishal Kulkarni 	"Devlog failed",
135*7e6ad469SVishal Kulkarni 	"Small buff",
136*7e6ad469SVishal Kulkarni 	"Checksum mismatch",
137*7e6ad469SVishal Kulkarni 	"No scratch memory",
138*7e6ad469SVishal Kulkarni 	"Outbuff overflow",
139*7e6ad469SVishal Kulkarni 	"Invalid buffer",
140*7e6ad469SVishal Kulkarni 	"File open fail",
141*7e6ad469SVishal Kulkarni 	"Devlog int fail",
142*7e6ad469SVishal Kulkarni 	"Entity not found",
143*7e6ad469SVishal Kulkarni 	"Decompress fail",
144*7e6ad469SVishal Kulkarni 	"Buffer short",
145*7e6ad469SVishal Kulkarni 	"Version mismatch",
146*7e6ad469SVishal Kulkarni 	"Not implemented",
147*7e6ad469SVishal Kulkarni 	"System error",
148*7e6ad469SVishal Kulkarni 	"Mmap failed",
149*7e6ad469SVishal Kulkarni 	"File write failed",
150*7e6ad469SVishal Kulkarni 	"cclk not defined",
151*7e6ad469SVishal Kulkarni 	"Flash full",
152*7e6ad469SVishal Kulkarni 	"Sector empty",
153*7e6ad469SVishal Kulkarni 	"Entity not requested",
154*7e6ad469SVishal Kulkarni 	"Not supported",
155*7e6ad469SVishal Kulkarni 	"File read fail",
156*7e6ad469SVishal Kulkarni 	"Corrupted",
157*7e6ad469SVishal Kulkarni 	"Invalid Index"
158*7e6ad469SVishal Kulkarni };
159*7e6ad469SVishal Kulkarni 
160*7e6ad469SVishal Kulkarni enum CUDBG_DBG_ENTITY_TYPE {
161*7e6ad469SVishal Kulkarni 	CUDBG_ALL	   = 0,
162*7e6ad469SVishal Kulkarni 	CUDBG_REG_DUMP	   = 1,
163*7e6ad469SVishal Kulkarni 	CUDBG_DEV_LOG	   = 2,
164*7e6ad469SVishal Kulkarni 	CUDBG_CIM_LA	   = 3,
165*7e6ad469SVishal Kulkarni 	CUDBG_CIM_MA_LA    = 4,
166*7e6ad469SVishal Kulkarni 	CUDBG_CIM_QCFG	   = 5,
167*7e6ad469SVishal Kulkarni 	CUDBG_CIM_IBQ_TP0  = 6,
168*7e6ad469SVishal Kulkarni 	CUDBG_CIM_IBQ_TP1  = 7,
169*7e6ad469SVishal Kulkarni 	CUDBG_CIM_IBQ_ULP  = 8,
170*7e6ad469SVishal Kulkarni 	CUDBG_CIM_IBQ_SGE0 = 9,
171*7e6ad469SVishal Kulkarni 	CUDBG_CIM_IBQ_SGE1 = 10,
172*7e6ad469SVishal Kulkarni 	CUDBG_CIM_IBQ_NCSI = 11,
173*7e6ad469SVishal Kulkarni 	CUDBG_CIM_OBQ_ULP0 = 12,
174*7e6ad469SVishal Kulkarni 	CUDBG_CIM_OBQ_ULP1 = 13,
175*7e6ad469SVishal Kulkarni 	CUDBG_CIM_OBQ_ULP2 = 14,
176*7e6ad469SVishal Kulkarni 	CUDBG_CIM_OBQ_ULP3 = 15,
177*7e6ad469SVishal Kulkarni 	CUDBG_CIM_OBQ_SGE  = 16,
178*7e6ad469SVishal Kulkarni 	CUDBG_CIM_OBQ_NCSI = 17,
179*7e6ad469SVishal Kulkarni 	CUDBG_EDC0	   = 18,
180*7e6ad469SVishal Kulkarni 	CUDBG_EDC1	   = 19,
181*7e6ad469SVishal Kulkarni 	CUDBG_MC0	   = 20,
182*7e6ad469SVishal Kulkarni 	CUDBG_MC1	   = 21,
183*7e6ad469SVishal Kulkarni 	CUDBG_RSS	   = 22,
184*7e6ad469SVishal Kulkarni 	CUDBG_RSS_PF_CONF  = 23,
185*7e6ad469SVishal Kulkarni 	CUDBG_RSS_KEY	   = 24,
186*7e6ad469SVishal Kulkarni 	CUDBG_RSS_VF_CONF  = 25,
187*7e6ad469SVishal Kulkarni 	CUDBG_RSS_CONF	   = 26,
188*7e6ad469SVishal Kulkarni 	CUDBG_PATH_MTU	   = 27,
189*7e6ad469SVishal Kulkarni 	CUDBG_SW_STATE	   = 28,
190*7e6ad469SVishal Kulkarni 	CUDBG_WTP	   = 29,
191*7e6ad469SVishal Kulkarni 	CUDBG_PM_STATS	   = 30,
192*7e6ad469SVishal Kulkarni 	CUDBG_HW_SCHED	   = 31,
193*7e6ad469SVishal Kulkarni 	CUDBG_TCP_STATS    = 32,
194*7e6ad469SVishal Kulkarni 	CUDBG_TP_ERR_STATS = 33,
195*7e6ad469SVishal Kulkarni 	CUDBG_FCOE_STATS   = 34,
196*7e6ad469SVishal Kulkarni 	CUDBG_RDMA_STATS   = 35,
197*7e6ad469SVishal Kulkarni 	CUDBG_TP_INDIRECT  = 36,
198*7e6ad469SVishal Kulkarni 	CUDBG_SGE_INDIRECT = 37,
199*7e6ad469SVishal Kulkarni 	CUDBG_CPL_STATS    = 38,
200*7e6ad469SVishal Kulkarni 	CUDBG_DDP_STATS    = 39,
201*7e6ad469SVishal Kulkarni 	CUDBG_WC_STATS	   = 40,
202*7e6ad469SVishal Kulkarni 	CUDBG_ULPRX_LA	   = 41,
203*7e6ad469SVishal Kulkarni 	CUDBG_LB_STATS	   = 42,
204*7e6ad469SVishal Kulkarni 	CUDBG_TP_LA	   = 43,
205*7e6ad469SVishal Kulkarni 	CUDBG_MEMINFO	   = 44,
206*7e6ad469SVishal Kulkarni 	CUDBG_CIM_PIF_LA   = 45,
207*7e6ad469SVishal Kulkarni 	CUDBG_CLK	   = 46,
208*7e6ad469SVishal Kulkarni 	CUDBG_CIM_OBQ_RXQ0 = 47,
209*7e6ad469SVishal Kulkarni 	CUDBG_CIM_OBQ_RXQ1 = 48,
210*7e6ad469SVishal Kulkarni 	CUDBG_MAC_STATS    = 49,
211*7e6ad469SVishal Kulkarni 	CUDBG_PCIE_INDIRECT = 50,
212*7e6ad469SVishal Kulkarni 	CUDBG_PM_INDIRECT  = 51,
213*7e6ad469SVishal Kulkarni 	CUDBG_FULL	   = 52,
214*7e6ad469SVishal Kulkarni 	CUDBG_TX_RATE	   = 53,
215*7e6ad469SVishal Kulkarni 	CUDBG_TID_INFO	   = 54,
216*7e6ad469SVishal Kulkarni 	CUDBG_PCIE_CONFIG  = 55,
217*7e6ad469SVishal Kulkarni 	CUDBG_DUMP_CONTEXT = 56,
218*7e6ad469SVishal Kulkarni 	CUDBG_MPS_TCAM	   = 57,
219*7e6ad469SVishal Kulkarni 	CUDBG_VPD_DATA	   = 58,
220*7e6ad469SVishal Kulkarni 	CUDBG_LE_TCAM	   = 59,
221*7e6ad469SVishal Kulkarni 	CUDBG_CCTRL	   = 60,
222*7e6ad469SVishal Kulkarni 	CUDBG_MA_INDIRECT  = 61,
223*7e6ad469SVishal Kulkarni 	CUDBG_ULPTX_LA	   = 62,
224*7e6ad469SVishal Kulkarni 	CUDBG_EXT_ENTITY   = 63,
225*7e6ad469SVishal Kulkarni 	CUDBG_UP_CIM_INDIRECT = 64,
226*7e6ad469SVishal Kulkarni 	CUDBG_PBT_TABLE    = 65,
227*7e6ad469SVishal Kulkarni 	CUDBG_MBOX_LOG     = 66,
228*7e6ad469SVishal Kulkarni 	CUDBG_HMA_INDIRECT = 67,
229*7e6ad469SVishal Kulkarni 	CUDBG_MAX_ENTITY   = 68,
230*7e6ad469SVishal Kulkarni };
231*7e6ad469SVishal Kulkarni 
232*7e6ad469SVishal Kulkarni #define ENTITY_FLAG_NULL 0
233*7e6ad469SVishal Kulkarni #define ENTITY_FLAG_REGISTER 1
234*7e6ad469SVishal Kulkarni #define ENTITY_FLAG_BINARY 2
235*7e6ad469SVishal Kulkarni #define ENTITY_FLAG_FW_NO_ATTACH    3
236*7e6ad469SVishal Kulkarni 
237*7e6ad469SVishal Kulkarni /* file_name matches Linux cxgb4 debugfs entry names. */
238*7e6ad469SVishal Kulkarni struct el {char *name; char *file_name; int bit; u32 flag; };
239*7e6ad469SVishal Kulkarni static struct el ATTRIBUTE_UNUSED entity_list[] = {
240*7e6ad469SVishal Kulkarni 	{"all", "all", CUDBG_ALL, ENTITY_FLAG_NULL},
241*7e6ad469SVishal Kulkarni 	{"regdump", "regdump", CUDBG_REG_DUMP, 1 << ENTITY_FLAG_REGISTER},
242*7e6ad469SVishal Kulkarni 	{"devlog", "devlog", CUDBG_DEV_LOG, ENTITY_FLAG_NULL},
243*7e6ad469SVishal Kulkarni 	{"cimla", "cim_la", CUDBG_CIM_LA, ENTITY_FLAG_NULL},
244*7e6ad469SVishal Kulkarni 	{"cimmala", "cim_ma_la", CUDBG_CIM_MA_LA, ENTITY_FLAG_NULL},
245*7e6ad469SVishal Kulkarni 	{"cimqcfg", "cim_qcfg", CUDBG_CIM_QCFG, ENTITY_FLAG_NULL},
246*7e6ad469SVishal Kulkarni 	{"ibqtp0", "ibq_tp0", CUDBG_CIM_IBQ_TP0, ENTITY_FLAG_NULL},
247*7e6ad469SVishal Kulkarni 	{"ibqtp1", "ibq_tp1", CUDBG_CIM_IBQ_TP1, ENTITY_FLAG_NULL},
248*7e6ad469SVishal Kulkarni 	{"ibqulp", "ibq_ulp", CUDBG_CIM_IBQ_ULP, ENTITY_FLAG_NULL},
249*7e6ad469SVishal Kulkarni 	{"ibqsge0", "ibq_sge0", CUDBG_CIM_IBQ_SGE0, ENTITY_FLAG_NULL},
250*7e6ad469SVishal Kulkarni 	{"ibqsge1", "ibq_sge1", CUDBG_CIM_IBQ_SGE1, ENTITY_FLAG_NULL},
251*7e6ad469SVishal Kulkarni 	{"ibqncsi", "ibq_ncsi", CUDBG_CIM_IBQ_NCSI, ENTITY_FLAG_NULL},
252*7e6ad469SVishal Kulkarni 	{"obqulp0", "obq_ulp0", CUDBG_CIM_OBQ_ULP0, ENTITY_FLAG_NULL},
253*7e6ad469SVishal Kulkarni 	{"obqulp1", "obq_ulp1", CUDBG_CIM_OBQ_ULP1, ENTITY_FLAG_NULL},
254*7e6ad469SVishal Kulkarni 	{"obqulp2", "obq_ulp2", CUDBG_CIM_OBQ_ULP2, ENTITY_FLAG_NULL},
255*7e6ad469SVishal Kulkarni 	{"obqulp3", "obq_ulp3", CUDBG_CIM_OBQ_ULP3, ENTITY_FLAG_NULL},
256*7e6ad469SVishal Kulkarni 	{"obqsge", "obq_sge", CUDBG_CIM_OBQ_SGE, ENTITY_FLAG_NULL},
257*7e6ad469SVishal Kulkarni 	{"obqncsi", "obq_ncsi", CUDBG_CIM_OBQ_NCSI, ENTITY_FLAG_NULL},
258*7e6ad469SVishal Kulkarni 	{"edc0", "edc0", CUDBG_EDC0, (1 << ENTITY_FLAG_BINARY)},
259*7e6ad469SVishal Kulkarni 	{"edc1", "edc1", CUDBG_EDC1, (1 << ENTITY_FLAG_BINARY)},
260*7e6ad469SVishal Kulkarni 	{"mc0", "mc0", CUDBG_MC0, (1 << ENTITY_FLAG_BINARY)},
261*7e6ad469SVishal Kulkarni 	{"mc1", "mc1", CUDBG_MC1, (1 << ENTITY_FLAG_BINARY)},
262*7e6ad469SVishal Kulkarni 	{"rss", "rss", CUDBG_RSS, ENTITY_FLAG_NULL},
263*7e6ad469SVishal Kulkarni 	{"rss_pf_config", "rss_pf_config", CUDBG_RSS_PF_CONF, ENTITY_FLAG_NULL},
264*7e6ad469SVishal Kulkarni 	{"rss_key", "rss_key", CUDBG_RSS_KEY, ENTITY_FLAG_NULL},
265*7e6ad469SVishal Kulkarni 	{"rss_vf_config", "rss_vf_config", CUDBG_RSS_VF_CONF, ENTITY_FLAG_NULL},
266*7e6ad469SVishal Kulkarni 	{"rss_config", "rss_config", CUDBG_RSS_CONF, ENTITY_FLAG_NULL},
267*7e6ad469SVishal Kulkarni 	{"pathmtu", "path_mtus", CUDBG_PATH_MTU, ENTITY_FLAG_NULL},
268*7e6ad469SVishal Kulkarni 	{"swstate", "sw_state", CUDBG_SW_STATE, ENTITY_FLAG_NULL},
269*7e6ad469SVishal Kulkarni 	{"wtp", "wtp", CUDBG_WTP, ENTITY_FLAG_NULL},
270*7e6ad469SVishal Kulkarni 	{"pmstats", "pm_stats", CUDBG_PM_STATS, ENTITY_FLAG_NULL},
271*7e6ad469SVishal Kulkarni 	{"hwsched", "hw_sched", CUDBG_HW_SCHED, ENTITY_FLAG_NULL},
272*7e6ad469SVishal Kulkarni 	{"tcpstats", "tcp_stats", CUDBG_TCP_STATS, ENTITY_FLAG_NULL},
273*7e6ad469SVishal Kulkarni 	{"tperrstats", "tp_err_stats", CUDBG_TP_ERR_STATS, ENTITY_FLAG_NULL},
274*7e6ad469SVishal Kulkarni 	{"fcoestats", "fcoe_stats", CUDBG_FCOE_STATS, ENTITY_FLAG_NULL},
275*7e6ad469SVishal Kulkarni 	{"rdmastats", "rdma_stats", CUDBG_RDMA_STATS, ENTITY_FLAG_NULL},
276*7e6ad469SVishal Kulkarni 	{"tpindirect", "tp_indirect", CUDBG_TP_INDIRECT,
277*7e6ad469SVishal Kulkarni 					1 << ENTITY_FLAG_REGISTER},
278*7e6ad469SVishal Kulkarni 	{"sgeindirect", "sge_indirect", CUDBG_SGE_INDIRECT,
279*7e6ad469SVishal Kulkarni 					1 << ENTITY_FLAG_REGISTER},
280*7e6ad469SVishal Kulkarni 	{"cplstats", "cpl_stats", CUDBG_CPL_STATS, ENTITY_FLAG_NULL},
281*7e6ad469SVishal Kulkarni 	{"ddpstats", "ddp_stats", CUDBG_DDP_STATS, ENTITY_FLAG_NULL},
282*7e6ad469SVishal Kulkarni 	{"wcstats", "wc_stats", CUDBG_WC_STATS, ENTITY_FLAG_NULL},
283*7e6ad469SVishal Kulkarni 	{"ulprxla", "ulprx_la", CUDBG_ULPRX_LA, ENTITY_FLAG_NULL},
284*7e6ad469SVishal Kulkarni 	{"lbstats", "lb_stats", CUDBG_LB_STATS, ENTITY_FLAG_NULL},
285*7e6ad469SVishal Kulkarni 	{"tpla", "tp_la", CUDBG_TP_LA, ENTITY_FLAG_NULL},
286*7e6ad469SVishal Kulkarni 	{"meminfo", "meminfo", CUDBG_MEMINFO, ENTITY_FLAG_NULL},
287*7e6ad469SVishal Kulkarni 	{"cimpifla", "cim_pif_la", CUDBG_CIM_PIF_LA, ENTITY_FLAG_NULL},
288*7e6ad469SVishal Kulkarni 	{"clk", "clk", CUDBG_CLK, ENTITY_FLAG_NULL},
289*7e6ad469SVishal Kulkarni 	{"obq_sge_rx_q0", "obq_sge_rx_q0", CUDBG_CIM_OBQ_RXQ0,
290*7e6ad469SVishal Kulkarni 					ENTITY_FLAG_NULL},
291*7e6ad469SVishal Kulkarni 	{"obq_sge_rx_q1", "obq_sge_rx_q1", CUDBG_CIM_OBQ_RXQ1,
292*7e6ad469SVishal Kulkarni 					ENTITY_FLAG_NULL},
293*7e6ad469SVishal Kulkarni 	{"macstats", "mac_stats", CUDBG_MAC_STATS, ENTITY_FLAG_NULL},
294*7e6ad469SVishal Kulkarni 	{"pcieindirect", "pcie_indirect", CUDBG_PCIE_INDIRECT,
295*7e6ad469SVishal Kulkarni 					1 << ENTITY_FLAG_REGISTER},
296*7e6ad469SVishal Kulkarni 	{"pmindirect", "pm_indirect", CUDBG_PM_INDIRECT,
297*7e6ad469SVishal Kulkarni 				1 << ENTITY_FLAG_REGISTER},
298*7e6ad469SVishal Kulkarni 	{"full", "full", CUDBG_FULL, ENTITY_FLAG_NULL},
299*7e6ad469SVishal Kulkarni 	{"txrate", "tx_rate", CUDBG_TX_RATE, ENTITY_FLAG_NULL},
300*7e6ad469SVishal Kulkarni 	{"tidinfo", "tids", CUDBG_TID_INFO, ENTITY_FLAG_NULL |
301*7e6ad469SVishal Kulkarni 				(1 << ENTITY_FLAG_FW_NO_ATTACH)},
302*7e6ad469SVishal Kulkarni 	{"pcieconfig", "pcie_config", CUDBG_PCIE_CONFIG, ENTITY_FLAG_NULL},
303*7e6ad469SVishal Kulkarni 	{"dumpcontext", "dump_context", CUDBG_DUMP_CONTEXT, ENTITY_FLAG_NULL},
304*7e6ad469SVishal Kulkarni 	{"mpstcam", "mps_tcam", CUDBG_MPS_TCAM, ENTITY_FLAG_NULL},
305*7e6ad469SVishal Kulkarni 	{"vpddata", "vpd_data", CUDBG_VPD_DATA, ENTITY_FLAG_NULL},
306*7e6ad469SVishal Kulkarni 	{"letcam", "le_tcam", CUDBG_LE_TCAM, ENTITY_FLAG_NULL},
307*7e6ad469SVishal Kulkarni 	{"cctrl", "cctrl", CUDBG_CCTRL, ENTITY_FLAG_NULL},
308*7e6ad469SVishal Kulkarni 	{"maindirect", "ma_indirect", CUDBG_MA_INDIRECT,
309*7e6ad469SVishal Kulkarni 				1 << ENTITY_FLAG_REGISTER},
310*7e6ad469SVishal Kulkarni 	{"ulptxla", "ulptx_la", CUDBG_ULPTX_LA, ENTITY_FLAG_NULL},
311*7e6ad469SVishal Kulkarni 	{"extentity", "ext_entity", CUDBG_EXT_ENTITY, ENTITY_FLAG_NULL},
312*7e6ad469SVishal Kulkarni 	{"upcimindirect", "up_cim_indirect", CUDBG_UP_CIM_INDIRECT,
313*7e6ad469SVishal Kulkarni 					1 << ENTITY_FLAG_REGISTER},
314*7e6ad469SVishal Kulkarni 	{"pbttables", "pbt_tables", CUDBG_PBT_TABLE, ENTITY_FLAG_NULL},
315*7e6ad469SVishal Kulkarni 	{"mboxlog", "mboxlog", CUDBG_MBOX_LOG, ENTITY_FLAG_NULL},
316*7e6ad469SVishal Kulkarni 	{"hmaindirect", "hma_indirect", CUDBG_HMA_INDIRECT,
317*7e6ad469SVishal Kulkarni 				1 << ENTITY_FLAG_REGISTER},
318*7e6ad469SVishal Kulkarni };
319*7e6ad469SVishal Kulkarni 
320*7e6ad469SVishal Kulkarni #ifdef _KERNEL
321*7e6ad469SVishal Kulkarni typedef int (*cudbg_print_cb) (dev_info_t *dip, ...);
322*7e6ad469SVishal Kulkarni #else
323*7e6ad469SVishal Kulkarni typedef int (*cudbg_print_cb) (char *, ...);
324*7e6ad469SVishal Kulkarni #endif
325*7e6ad469SVishal Kulkarni 
326*7e6ad469SVishal Kulkarni struct cudbg_init_hdr {
327*7e6ad469SVishal Kulkarni 	u8   major_ver;
328*7e6ad469SVishal Kulkarni 	u8   minor_ver;
329*7e6ad469SVishal Kulkarni 	u8   build_ver;
330*7e6ad469SVishal Kulkarni 	u8   res;
331*7e6ad469SVishal Kulkarni 	u16  init_struct_size;
332*7e6ad469SVishal Kulkarni };
333*7e6ad469SVishal Kulkarni 
334*7e6ad469SVishal Kulkarni struct cudbg_flash_hdr {
335*7e6ad469SVishal Kulkarni 	u32 signature;
336*7e6ad469SVishal Kulkarni 	u8 major_ver;
337*7e6ad469SVishal Kulkarni 	u8 minor_ver;
338*7e6ad469SVishal Kulkarni 	u8 build_ver;
339*7e6ad469SVishal Kulkarni 	u8 res;
340*7e6ad469SVishal Kulkarni 	u64 timestamp;
341*7e6ad469SVishal Kulkarni 	u64 time_res;
342*7e6ad469SVishal Kulkarni 	u32 hdr_len;
343*7e6ad469SVishal Kulkarni 	u32 data_len;
344*7e6ad469SVishal Kulkarni 	u32 hdr_flags;
345*7e6ad469SVishal Kulkarni 	u32 sec_seq_no;
346*7e6ad469SVishal Kulkarni 	u32 reserved[22];
347*7e6ad469SVishal Kulkarni };
348*7e6ad469SVishal Kulkarni 
349*7e6ad469SVishal Kulkarni struct cudbg_param {
350*7e6ad469SVishal Kulkarni 	u16			 param_type;
351*7e6ad469SVishal Kulkarni 	u16			 reserved;
352*7e6ad469SVishal Kulkarni 	union {
353*7e6ad469SVishal Kulkarni 		struct {
354*7e6ad469SVishal Kulkarni 			u32 memtype;	/* which memory (EDC0, EDC1, MC) */
355*7e6ad469SVishal Kulkarni 			u32 start;	/* start of log in firmware memory */
356*7e6ad469SVishal Kulkarni 			u32 size;	/* size of log */
357*7e6ad469SVishal Kulkarni 		} devlog_param;
358*7e6ad469SVishal Kulkarni 		struct {
359*7e6ad469SVishal Kulkarni 			struct mbox_cmd_log *log;
360*7e6ad469SVishal Kulkarni 			u16 mbox_cmds;
361*7e6ad469SVishal Kulkarni 		} mboxlog_param;
362*7e6ad469SVishal Kulkarni 		struct {
363*7e6ad469SVishal Kulkarni 			u8 caller_string[100];
364*7e6ad469SVishal Kulkarni 			u8 os_type;
365*7e6ad469SVishal Kulkarni 		} sw_state_param;
366*7e6ad469SVishal Kulkarni 		u64 time;
367*7e6ad469SVishal Kulkarni 		u8 tcb_bit_param;
368*7e6ad469SVishal Kulkarni 		void *adap;
369*7e6ad469SVishal Kulkarni 		void *access_lock;
370*7e6ad469SVishal Kulkarni 	} u;
371*7e6ad469SVishal Kulkarni };
372*7e6ad469SVishal Kulkarni 
373*7e6ad469SVishal Kulkarni /* params for tcb_bit_param */
374*7e6ad469SVishal Kulkarni #define CUDBG_TCB_BRIEF_PARAM      0x1
375*7e6ad469SVishal Kulkarni #define CUDBG_TCB_FROM_CARD_PARAM  0x2
376*7e6ad469SVishal Kulkarni #define CUDBG_TCB_AS_SCB_PARAM     0x4
377*7e6ad469SVishal Kulkarni 
378*7e6ad469SVishal Kulkarni enum {
379*7e6ad469SVishal Kulkarni         /* params for os_type */
380*7e6ad469SVishal Kulkarni         CUDBG_OS_TYPE_WINDOWS = 1,
381*7e6ad469SVishal Kulkarni         CUDBG_OS_TYPE_LINUX = 2,
382*7e6ad469SVishal Kulkarni         CUDBG_OS_TYPE_ESX = 3,
383*7e6ad469SVishal Kulkarni         CUDBG_OS_TYPE_UNKNOWN = 4,
384*7e6ad469SVishal Kulkarni };
385*7e6ad469SVishal Kulkarni 
386*7e6ad469SVishal Kulkarni /*
387*7e6ad469SVishal Kulkarni  * * What is OFFLINE_VIEW_ONLY mode?
388*7e6ad469SVishal Kulkarni  *
389*7e6ad469SVishal Kulkarni  * cudbg frame work will be used only to interpret previously collected
390*7e6ad469SVishal Kulkarni  * data store in a file (i.e NOT hw flash)
391*7e6ad469SVishal Kulkarni  */
392*7e6ad469SVishal Kulkarni 
393*7e6ad469SVishal Kulkarni struct cudbg_init {
394*7e6ad469SVishal Kulkarni 	struct cudbg_init_hdr	 header;
395*7e6ad469SVishal Kulkarni 	struct adapter		 *adap;		 /* Pointer to adapter structure
396*7e6ad469SVishal Kulkarni 						    with filled fields */
397*7e6ad469SVishal Kulkarni 	cudbg_print_cb		 print;		 /* Platform dependent print
398*7e6ad469SVishal Kulkarni 						    function */
399*7e6ad469SVishal Kulkarni 	u32			 verbose:1;	 /* Turn on verbose print */
400*7e6ad469SVishal Kulkarni 	u32			 use_flash:1;	 /* Use flash to collect or view
401*7e6ad469SVishal Kulkarni 						    debug */
402*7e6ad469SVishal Kulkarni 	u32			 full_mode:1;	 /* If set, cudbg will pull in
403*7e6ad469SVishal Kulkarni 						    common code */
404*7e6ad469SVishal Kulkarni 	u32			 no_compress:1;  /* Dont compress will storing
405*7e6ad469SVishal Kulkarni 						    the collected debug */
406*7e6ad469SVishal Kulkarni 	u32			 info:1;	 /* Show just the info, Dont
407*7e6ad469SVishal Kulkarni 						    interpret */
408*7e6ad469SVishal Kulkarni 	u32			 reserved:27;
409*7e6ad469SVishal Kulkarni 	u8			 dbg_bitmap[CUDBG_MAX_BITMAP_LEN];
410*7e6ad469SVishal Kulkarni 						/* Bit map to select the dbg
411*7e6ad469SVishal Kulkarni 						    data type to be collected
412*7e6ad469SVishal Kulkarni 						    or viewed */
413*7e6ad469SVishal Kulkarni };
414*7e6ad469SVishal Kulkarni 
415*7e6ad469SVishal Kulkarni struct cudbg_private {
416*7e6ad469SVishal Kulkarni 	struct cudbg_init  dbg_init;
417*7e6ad469SVishal Kulkarni #ifdef _KERNEL
418*7e6ad469SVishal Kulkarni 	struct cudbg_flash_sec_info  sec_info;
419*7e6ad469SVishal Kulkarni #endif
420*7e6ad469SVishal Kulkarni };
421*7e6ad469SVishal Kulkarni 
422*7e6ad469SVishal Kulkarni /********************************* Helper functions *************************/
423*7e6ad469SVishal Kulkarni void set_dbg_bitmap(u8 *bitmap, enum CUDBG_DBG_ENTITY_TYPE type);
424*7e6ad469SVishal Kulkarni void reset_dbg_bitmap(u8 *bitmap, enum CUDBG_DBG_ENTITY_TYPE type);
425*7e6ad469SVishal Kulkarni struct cudbg_init * cudbg_get_init(void *handle);
426*7e6ad469SVishal Kulkarni 
427*7e6ad469SVishal Kulkarni /**
428*7e6ad469SVishal Kulkarni  *  cudbg_collect - Collect and store debug information.
429*7e6ad469SVishal Kulkarni  *  ## Parameters ##
430*7e6ad469SVishal Kulkarni  *  @handle : A pointer returned by cudbg_alloc_handle.
431*7e6ad469SVishal Kulkarni  *  @outbuf : pointer to output buffer, to store the collected information
432*7e6ad469SVishal Kulkarni  *	      or to use it as a scratch buffer in case HW flash is used to
433*7e6ad469SVishal Kulkarni  *	      store the debug information.
434*7e6ad469SVishal Kulkarni  *  @outbuf_size : Size of output buffer.
435*7e6ad469SVishal Kulkarni  *  ##	Return ##
436*7e6ad469SVishal Kulkarni  *  If the function succeeds, the return value will be size of debug information
437*7e6ad469SVishal Kulkarni  *  collected and stored.
438*7e6ad469SVishal Kulkarni  *  -ve value represent error.
439*7e6ad469SVishal Kulkarni  */
440*7e6ad469SVishal Kulkarni int cudbg_collect(void *handle, void *outbuf, u32 *outbuf_size);
441*7e6ad469SVishal Kulkarni 
442*7e6ad469SVishal Kulkarni int cudbg_view(void *handle, void *pinbuf, u32 inbuf_size,
443*7e6ad469SVishal Kulkarni                void *poutbuf, s64 *poutbuf_size);
444*7e6ad469SVishal Kulkarni void init_cudbg_hdr(struct cudbg_init_hdr *hdr);
445*7e6ad469SVishal Kulkarni void * cudbg_alloc_handle(void);
446*7e6ad469SVishal Kulkarni void cudbg_free_handle(void *handle);
447*7e6ad469SVishal Kulkarni #endif /* _CUDBG_IF_H_ */
448