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