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