xref: /OK3568_Linux_fs/external/rkwifibt/drivers/bcmdhd/include/etd.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Extended Trap data component interface file.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2020, Broadcom.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  *      Unless you and Broadcom execute a separate written software license
7*4882a593Smuzhiyun  * agreement governing use of this software, this software is licensed to you
8*4882a593Smuzhiyun  * under the terms of the GNU General Public License version 2 (the "GPL"),
9*4882a593Smuzhiyun  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
10*4882a593Smuzhiyun  * following added to such license:
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  *      As a special exception, the copyright holders of this software give you
13*4882a593Smuzhiyun  * permission to link this software with independent modules, and to copy and
14*4882a593Smuzhiyun  * distribute the resulting executable under terms of your choice, provided that
15*4882a593Smuzhiyun  * you also meet, for each linked independent module, the terms and conditions of
16*4882a593Smuzhiyun  * the license of that module.  An independent module is a module which is not
17*4882a593Smuzhiyun  * derived from this software.  The special exception does not apply to any
18*4882a593Smuzhiyun  * modifications of the software.
19*4882a593Smuzhiyun  *
20*4882a593Smuzhiyun  *
21*4882a593Smuzhiyun  * <<Broadcom-WL-IPTag/Dual:>>
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #ifndef _ETD_H_
25*4882a593Smuzhiyun #define _ETD_H_
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #if defined(ETD) && !defined(WLETD)
28*4882a593Smuzhiyun #include <hnd_trap.h>
29*4882a593Smuzhiyun #endif
30*4882a593Smuzhiyun #include <bcmutils.h>
31*4882a593Smuzhiyun /* Tags for structures being used by etd info iovar.
32*4882a593Smuzhiyun  * Related structures are defined in wlioctl.h.
33*4882a593Smuzhiyun  */
34*4882a593Smuzhiyun #define ETD_TAG_JOIN_CLASSIFICATION_INFO 10 /* general information about join request */
35*4882a593Smuzhiyun #define ETD_TAG_JOIN_TARGET_CLASSIFICATION_INFO 11	/* per target (AP) join information */
36*4882a593Smuzhiyun #define ETD_TAG_ASSOC_STATE 12 /* current state of the Device association state machine */
37*4882a593Smuzhiyun #define ETD_TAG_CHANNEL 13	/* current channel on which the association was performed */
38*4882a593Smuzhiyun #define ETD_TAG_TOTAL_NUM_OF_JOIN_ATTEMPTS 14 /* number of join attempts (bss_retries) */
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define  PSMDBG_REG_READ_CNT_FOR_PSMWDTRAP_V1	3
41*4882a593Smuzhiyun #define  PSMDBG_REG_READ_CNT_FOR_PSMWDTRAP_V2	6
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #ifndef _LANGUAGE_ASSEMBLY
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #define HND_EXTENDED_TRAP_VERSION  1
46*4882a593Smuzhiyun #define HND_EXTENDED_TRAP_BUFLEN   512
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun typedef struct hnd_ext_trap_hdr {
49*4882a593Smuzhiyun 	uint8 version;    /* Extended trap version info */
50*4882a593Smuzhiyun 	uint8 reserved;   /* currently unused */
51*4882a593Smuzhiyun 	uint16 len;       /* Length of data excluding this header */
52*4882a593Smuzhiyun 	uint8 data[];     /* TLV data */
53*4882a593Smuzhiyun } hnd_ext_trap_hdr_t;
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun typedef enum {
56*4882a593Smuzhiyun 	TAG_TRAP_NONE			= 0u,  /* None trap type */
57*4882a593Smuzhiyun 	TAG_TRAP_SIGNATURE		= 1u,  /* Processor register dumps */
58*4882a593Smuzhiyun 	TAG_TRAP_STACK			= 2u,  /* Processor stack dump (possible code locations) */
59*4882a593Smuzhiyun 	TAG_TRAP_MEMORY			= 3u,  /* Memory subsystem dump */
60*4882a593Smuzhiyun 	TAG_TRAP_DEEPSLEEP		= 4u,  /* Deep sleep health check failures */
61*4882a593Smuzhiyun 	TAG_TRAP_PSM_WD			= 5u,  /* PSM watchdog information */
62*4882a593Smuzhiyun 	TAG_TRAP_PHY			= 6u,  /* Phy related issues */
63*4882a593Smuzhiyun 	TAG_TRAP_BUS			= 7u,  /* Bus level issues */
64*4882a593Smuzhiyun 	TAG_TRAP_MAC_SUSP		= 8u,  /* Mac level suspend issues */
65*4882a593Smuzhiyun 	TAG_TRAP_BACKPLANE		= 9u,  /* Backplane related errors */
66*4882a593Smuzhiyun 	/* Values 10 through 14 are in use by etd_data info iovar */
67*4882a593Smuzhiyun 	TAG_TRAP_PCIE_Q			= 15u, /* PCIE Queue state during memory trap */
68*4882a593Smuzhiyun 	TAG_TRAP_WLC_STATE		= 16u, /* WLAN state during memory trap */
69*4882a593Smuzhiyun 	TAG_TRAP_MAC_WAKE		= 17u, /* Mac level wake issues */
70*4882a593Smuzhiyun 	TAG_TRAP_PHYTXERR_THRESH	= 18u, /* Phy Tx Err */
71*4882a593Smuzhiyun 	TAG_TRAP_HC_DATA		= 19u, /* Data collected by HC module */
72*4882a593Smuzhiyun 	TAG_TRAP_LOG_DATA		= 20u,
73*4882a593Smuzhiyun 	TAG_TRAP_CODE			= 21u, /* The trap type */
74*4882a593Smuzhiyun 	TAG_TRAP_HMAP			= 22u, /* HMAP violation Address and Info */
75*4882a593Smuzhiyun 	TAG_TRAP_PCIE_ERR_ATTN		= 23u, /* PCIE error attn log */
76*4882a593Smuzhiyun 	TAG_TRAP_AXI_ERROR		= 24u, /* AXI Error */
77*4882a593Smuzhiyun 	TAG_TRAP_AXI_HOST_INFO		= 25u, /* AXI Host log */
78*4882a593Smuzhiyun 	TAG_TRAP_AXI_SR_ERROR		= 26u, /* AXI SR error log */
79*4882a593Smuzhiyun 	TAG_TRAP_MEM_BIT_FLIP		= 27u, /* Memory 1-Bit Flip error */
80*4882a593Smuzhiyun 	TAG_TRAP_LAST  /* This must be the last entry */
81*4882a593Smuzhiyun } hnd_ext_tag_trap_t;
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun typedef struct hnd_ext_trap_bp_err
84*4882a593Smuzhiyun {
85*4882a593Smuzhiyun 	uint32 error;
86*4882a593Smuzhiyun 	uint32 coreid;
87*4882a593Smuzhiyun 	uint32 baseaddr;
88*4882a593Smuzhiyun 	uint32 ioctrl;
89*4882a593Smuzhiyun 	uint32 iostatus;
90*4882a593Smuzhiyun 	uint32 resetctrl;
91*4882a593Smuzhiyun 	uint32 resetstatus;
92*4882a593Smuzhiyun 	uint32 resetreadid;
93*4882a593Smuzhiyun 	uint32 resetwriteid;
94*4882a593Smuzhiyun 	uint32 errlogctrl;
95*4882a593Smuzhiyun 	uint32 errlogdone;
96*4882a593Smuzhiyun 	uint32 errlogstatus;
97*4882a593Smuzhiyun 	uint32 errlogaddrlo;
98*4882a593Smuzhiyun 	uint32 errlogaddrhi;
99*4882a593Smuzhiyun 	uint32 errlogid;
100*4882a593Smuzhiyun 	uint32 errloguser;
101*4882a593Smuzhiyun 	uint32 errlogflags;
102*4882a593Smuzhiyun 	uint32 itipoobaout;
103*4882a593Smuzhiyun 	uint32 itipoobbout;
104*4882a593Smuzhiyun 	uint32 itipoobcout;
105*4882a593Smuzhiyun 	uint32 itipoobdout;
106*4882a593Smuzhiyun } hnd_ext_trap_bp_err_t;
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun #define HND_EXT_TRAP_AXISR_INFO_VER_1	1
109*4882a593Smuzhiyun typedef struct hnd_ext_trap_axi_sr_err_v1
110*4882a593Smuzhiyun {
111*4882a593Smuzhiyun 	uint8 version;
112*4882a593Smuzhiyun 	uint8 pad[3];
113*4882a593Smuzhiyun 	uint32 error;
114*4882a593Smuzhiyun 	uint32 coreid;
115*4882a593Smuzhiyun 	uint32 baseaddr;
116*4882a593Smuzhiyun 	uint32 ioctrl;
117*4882a593Smuzhiyun 	uint32 iostatus;
118*4882a593Smuzhiyun 	uint32 resetctrl;
119*4882a593Smuzhiyun 	uint32 resetstatus;
120*4882a593Smuzhiyun 	uint32 resetreadid;
121*4882a593Smuzhiyun 	uint32 resetwriteid;
122*4882a593Smuzhiyun 	uint32 errlogctrl;
123*4882a593Smuzhiyun 	uint32 errlogdone;
124*4882a593Smuzhiyun 	uint32 errlogstatus;
125*4882a593Smuzhiyun 	uint32 errlogaddrlo;
126*4882a593Smuzhiyun 	uint32 errlogaddrhi;
127*4882a593Smuzhiyun 	uint32 errlogid;
128*4882a593Smuzhiyun 	uint32 errloguser;
129*4882a593Smuzhiyun 	uint32 errlogflags;
130*4882a593Smuzhiyun 	uint32 itipoobaout;
131*4882a593Smuzhiyun 	uint32 itipoobbout;
132*4882a593Smuzhiyun 	uint32 itipoobcout;
133*4882a593Smuzhiyun 	uint32 itipoobdout;
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun 	/* axi_sr_issue_debug */
136*4882a593Smuzhiyun 	uint32 sr_pwr_control;
137*4882a593Smuzhiyun 	uint32 sr_corereset_wrapper_main;
138*4882a593Smuzhiyun 	uint32 sr_corereset_wrapper_aux;
139*4882a593Smuzhiyun 	uint32 sr_main_gci_status_0;
140*4882a593Smuzhiyun 	uint32 sr_aux_gci_status_0;
141*4882a593Smuzhiyun 	uint32 sr_dig_gci_status_0;
142*4882a593Smuzhiyun } hnd_ext_trap_axi_sr_err_v1_t;
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun #define HND_EXT_TRAP_PSMWD_INFO_VER	1
145*4882a593Smuzhiyun typedef struct hnd_ext_trap_psmwd_v1 {
146*4882a593Smuzhiyun 	uint16 xtag;
147*4882a593Smuzhiyun 	uint16 version; /* version of the information following this */
148*4882a593Smuzhiyun 	uint32 i32_maccontrol;
149*4882a593Smuzhiyun 	uint32 i32_maccommand;
150*4882a593Smuzhiyun 	uint32 i32_macintstatus;
151*4882a593Smuzhiyun 	uint32 i32_phydebug;
152*4882a593Smuzhiyun 	uint32 i32_clk_ctl_st;
153*4882a593Smuzhiyun 	uint32 i32_psmdebug[PSMDBG_REG_READ_CNT_FOR_PSMWDTRAP_V1];
154*4882a593Smuzhiyun 	uint16 i16_0x1a8; /* gated clock en */
155*4882a593Smuzhiyun 	uint16 i16_0x406; /* Rcv Fifo Ctrl */
156*4882a593Smuzhiyun 	uint16 i16_0x408; /* Rx ctrl 1 */
157*4882a593Smuzhiyun 	uint16 i16_0x41a; /* Rxe Status 1 */
158*4882a593Smuzhiyun 	uint16 i16_0x41c; /* Rxe Status 2 */
159*4882a593Smuzhiyun 	uint16 i16_0x424; /* rcv wrd count 0 */
160*4882a593Smuzhiyun 	uint16 i16_0x426; /* rcv wrd count 1 */
161*4882a593Smuzhiyun 	uint16 i16_0x456; /* RCV_LFIFO_STS */
162*4882a593Smuzhiyun 	uint16 i16_0x480; /* PSM_SLP_TMR */
163*4882a593Smuzhiyun 	uint16 i16_0x490; /* PSM BRC */
164*4882a593Smuzhiyun 	uint16 i16_0x500; /* TXE CTRL */
165*4882a593Smuzhiyun 	uint16 i16_0x50e; /* TXE Status */
166*4882a593Smuzhiyun 	uint16 i16_0x55e; /* TXE_xmtdmabusy */
167*4882a593Smuzhiyun 	uint16 i16_0x566; /* TXE_XMTfifosuspflush */
168*4882a593Smuzhiyun 	uint16 i16_0x690; /* IFS Stat */
169*4882a593Smuzhiyun 	uint16 i16_0x692; /* IFS_MEDBUSY_CTR */
170*4882a593Smuzhiyun 	uint16 i16_0x694; /* IFS_TX_DUR */
171*4882a593Smuzhiyun 	uint16 i16_0x6a0; /* SLow_CTL */
172*4882a593Smuzhiyun 	uint16 i16_0x838; /* TXE_AQM fifo Ready */
173*4882a593Smuzhiyun 	uint16 i16_0x8c0; /* Dagg ctrl */
174*4882a593Smuzhiyun 	uint16 shm_prewds_cnt;
175*4882a593Smuzhiyun 	uint16 shm_txtplufl_cnt;
176*4882a593Smuzhiyun 	uint16 shm_txphyerr_cnt;
177*4882a593Smuzhiyun 	uint16 pad;
178*4882a593Smuzhiyun } hnd_ext_trap_psmwd_v1_t;
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun typedef struct hnd_ext_trap_psmwd {
181*4882a593Smuzhiyun 	uint16 xtag;
182*4882a593Smuzhiyun 	uint16 version; /* version of the information following this */
183*4882a593Smuzhiyun 	uint32 i32_maccontrol;
184*4882a593Smuzhiyun 	uint32 i32_maccommand;
185*4882a593Smuzhiyun 	uint32 i32_macintstatus;
186*4882a593Smuzhiyun 	uint32 i32_phydebug;
187*4882a593Smuzhiyun 	uint32 i32_clk_ctl_st;
188*4882a593Smuzhiyun 	uint32 i32_psmdebug[PSMDBG_REG_READ_CNT_FOR_PSMWDTRAP_V2];
189*4882a593Smuzhiyun 	uint16 i16_0x4b8; /* psm_brwk_0 */
190*4882a593Smuzhiyun 	uint16 i16_0x4ba; /* psm_brwk_1 */
191*4882a593Smuzhiyun 	uint16 i16_0x4bc; /* psm_brwk_2 */
192*4882a593Smuzhiyun 	uint16 i16_0x4be; /* psm_brwk_2 */
193*4882a593Smuzhiyun 	uint16 i16_0x1a8; /* gated clock en */
194*4882a593Smuzhiyun 	uint16 i16_0x406; /* Rcv Fifo Ctrl */
195*4882a593Smuzhiyun 	uint16 i16_0x408; /* Rx ctrl 1 */
196*4882a593Smuzhiyun 	uint16 i16_0x41a; /* Rxe Status 1 */
197*4882a593Smuzhiyun 	uint16 i16_0x41c; /* Rxe Status 2 */
198*4882a593Smuzhiyun 	uint16 i16_0x424; /* rcv wrd count 0 */
199*4882a593Smuzhiyun 	uint16 i16_0x426; /* rcv wrd count 1 */
200*4882a593Smuzhiyun 	uint16 i16_0x456; /* RCV_LFIFO_STS */
201*4882a593Smuzhiyun 	uint16 i16_0x480; /* PSM_SLP_TMR */
202*4882a593Smuzhiyun 	uint16 i16_0x500; /* TXE CTRL */
203*4882a593Smuzhiyun 	uint16 i16_0x50e; /* TXE Status */
204*4882a593Smuzhiyun 	uint16 i16_0x55e; /* TXE_xmtdmabusy */
205*4882a593Smuzhiyun 	uint16 i16_0x566; /* TXE_XMTfifosuspflush */
206*4882a593Smuzhiyun 	uint16 i16_0x690; /* IFS Stat */
207*4882a593Smuzhiyun 	uint16 i16_0x692; /* IFS_MEDBUSY_CTR */
208*4882a593Smuzhiyun 	uint16 i16_0x694; /* IFS_TX_DUR */
209*4882a593Smuzhiyun 	uint16 i16_0x6a0; /* SLow_CTL */
210*4882a593Smuzhiyun 	uint16 i16_0x490; /* psm_brc */
211*4882a593Smuzhiyun 	uint16 i16_0x4da; /* psm_brc_1 */
212*4882a593Smuzhiyun 	uint16 i16_0x838; /* TXE_AQM fifo Ready */
213*4882a593Smuzhiyun 	uint16 i16_0x8c0; /* Dagg ctrl */
214*4882a593Smuzhiyun 	uint16 shm_prewds_cnt;
215*4882a593Smuzhiyun 	uint16 shm_txtplufl_cnt;
216*4882a593Smuzhiyun 	uint16 shm_txphyerr_cnt;
217*4882a593Smuzhiyun } hnd_ext_trap_psmwd_t;
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun #define HEAP_HISTOGRAM_DUMP_LEN	6
220*4882a593Smuzhiyun #define HEAP_MAX_SZ_BLKS_LEN	2
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun /* Ignore chunks for which there are fewer than this many instances, irrespective of size */
223*4882a593Smuzhiyun #define HEAP_HISTOGRAM_INSTANCE_MIN		4
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun /*
226*4882a593Smuzhiyun  * Use the last two length values for chunks larger than this, or when we run out of
227*4882a593Smuzhiyun  * histogram entries (because we have too many different sized chunks) to store "other"
228*4882a593Smuzhiyun  */
229*4882a593Smuzhiyun #define HEAP_HISTOGRAM_SPECIAL	0xfffeu
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun #define HEAP_HISTOGRAM_GRTR256K	0xffffu
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun typedef struct hnd_ext_trap_heap_err {
234*4882a593Smuzhiyun 	uint32 arena_total;
235*4882a593Smuzhiyun 	uint32 heap_free;
236*4882a593Smuzhiyun 	uint32 heap_inuse;
237*4882a593Smuzhiyun 	uint32 mf_count;
238*4882a593Smuzhiyun 	uint32 stack_lwm;
239*4882a593Smuzhiyun 	uint16 heap_histogm[HEAP_HISTOGRAM_DUMP_LEN * 2]; /* size/number */
240*4882a593Smuzhiyun 	uint16 max_sz_free_blk[HEAP_MAX_SZ_BLKS_LEN];
241*4882a593Smuzhiyun } hnd_ext_trap_heap_err_t;
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun #define MEM_TRAP_NUM_WLC_TX_QUEUES		6
244*4882a593Smuzhiyun #define HND_EXT_TRAP_WLC_MEM_ERR_VER_V2		2
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun /* already there are quite a few chips which are ROM'ed wth this structure
247*4882a593Smuzhiyun  * Will not be adding version. This will be the V1 structure.
248*4882a593Smuzhiyun  */
249*4882a593Smuzhiyun typedef struct hnd_ext_trap_wlc_mem_err {
250*4882a593Smuzhiyun 	uint8 instance;
251*4882a593Smuzhiyun 	uint8 associated;
252*4882a593Smuzhiyun 	uint8 soft_ap_client_cnt;
253*4882a593Smuzhiyun 	uint8 peer_cnt;
254*4882a593Smuzhiyun 	uint16 txqueue_len[MEM_TRAP_NUM_WLC_TX_QUEUES];
255*4882a593Smuzhiyun } hnd_ext_trap_wlc_mem_err_t;
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun typedef struct hnd_ext_trap_wlc_mem_err_v2 {
258*4882a593Smuzhiyun 	uint16 version;
259*4882a593Smuzhiyun 	uint16 pad;
260*4882a593Smuzhiyun 	uint8 instance;
261*4882a593Smuzhiyun 	uint8 stas_associated;
262*4882a593Smuzhiyun 	uint8 aps_associated;
263*4882a593Smuzhiyun 	uint8 soft_ap_client_cnt;
264*4882a593Smuzhiyun 	uint16 txqueue_len[MEM_TRAP_NUM_WLC_TX_QUEUES];
265*4882a593Smuzhiyun } hnd_ext_trap_wlc_mem_err_v2_t;
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun #define HND_EXT_TRAP_WLC_MEM_ERR_VER_V3		3
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun typedef struct hnd_ext_trap_wlc_mem_err_v3 {
270*4882a593Smuzhiyun 	uint8 version;
271*4882a593Smuzhiyun 	uint8 instance;
272*4882a593Smuzhiyun 	uint8 stas_associated;
273*4882a593Smuzhiyun 	uint8 aps_associated;
274*4882a593Smuzhiyun 	uint8 soft_ap_client_cnt;
275*4882a593Smuzhiyun 	uint8 peer_cnt;
276*4882a593Smuzhiyun 	uint16 txqueue_len[MEM_TRAP_NUM_WLC_TX_QUEUES];
277*4882a593Smuzhiyun } hnd_ext_trap_wlc_mem_err_v3_t;
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun typedef struct hnd_ext_trap_pcie_mem_err {
280*4882a593Smuzhiyun 	uint16 d2h_queue_len;
281*4882a593Smuzhiyun 	uint16 d2h_req_queue_len;
282*4882a593Smuzhiyun } hnd_ext_trap_pcie_mem_err_t;
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun #define MAX_DMAFIFO_ENTRIES_V1			1
285*4882a593Smuzhiyun #define MAX_DMAFIFO_DESC_ENTRIES_V1		2
286*4882a593Smuzhiyun #define HND_EXT_TRAP_AXIERROR_SIGNATURE		0xbabebabe
287*4882a593Smuzhiyun #define HND_EXT_TRAP_AXIERROR_VERSION_1		1
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun /* Structure to collect debug info of descriptor entry for dma channel on encountering AXI Error */
290*4882a593Smuzhiyun /* Below three structures are dependant, any change will bump version of all the three */
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun typedef struct hnd_ext_trap_desc_entry_v1 {
293*4882a593Smuzhiyun 	uint32  ctrl1;   /* descriptor entry at din < misc control bits > */
294*4882a593Smuzhiyun 	uint32  ctrl2;   /* descriptor entry at din <buffer count and address extension> */
295*4882a593Smuzhiyun 	uint32  addrlo;  /* descriptor entry at din <address of data buffer, bits 31:0> */
296*4882a593Smuzhiyun 	uint32  addrhi;  /* descriptor entry at din <address of data buffer, bits 63:32> */
297*4882a593Smuzhiyun } dma_dentry_v1_t;
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /* Structure to collect debug info about a dma channel on encountering AXI Error */
300*4882a593Smuzhiyun typedef struct hnd_ext_trap_dma_fifo_v1 {
301*4882a593Smuzhiyun 	uint8	valid;		/* no of valid desc entries filled, non zero = fifo entry valid */
302*4882a593Smuzhiyun 	uint8	direction;	/* TX=1, RX=2, currently only using TX */
303*4882a593Smuzhiyun 	uint16	index;		/* Index of the DMA channel in system */
304*4882a593Smuzhiyun 	uint32	dpa;		/* Expected Address of Descriptor table from software state */
305*4882a593Smuzhiyun 	uint32	desc_lo;	/* Low Address of Descriptor table programmed in DMA register */
306*4882a593Smuzhiyun 	uint32	desc_hi;	/* High Address of Descriptor table programmed in DMA register */
307*4882a593Smuzhiyun 	uint16	din;		/* rxin / txin */
308*4882a593Smuzhiyun 	uint16	dout;		/* rxout / txout */
309*4882a593Smuzhiyun 	dma_dentry_v1_t dentry[MAX_DMAFIFO_DESC_ENTRIES_V1]; /* Descriptor Entires */
310*4882a593Smuzhiyun } dma_fifo_v1_t;
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun typedef struct hnd_ext_trap_axi_error_v1 {
313*4882a593Smuzhiyun 	uint8 version;			/* version = 1 */
314*4882a593Smuzhiyun 	uint8 dma_fifo_valid_count;	/* Number of valid dma_fifo entries */
315*4882a593Smuzhiyun 	uint16 length;			/* length of whole structure */
316*4882a593Smuzhiyun 	uint32 signature;		/* indicate that its filled with AXI Error data */
317*4882a593Smuzhiyun 	uint32 axi_errorlog_status;	/* errlog_status from slave wrapper */
318*4882a593Smuzhiyun 	uint32 axi_errorlog_core;	/* errlog_core from slave wrapper */
319*4882a593Smuzhiyun 	uint32 axi_errorlog_lo;		/* errlog_lo from slave wrapper */
320*4882a593Smuzhiyun 	uint32 axi_errorlog_hi;		/* errlog_hi from slave wrapper */
321*4882a593Smuzhiyun 	uint32 axi_errorlog_id;		/* errlog_id from slave wrapper */
322*4882a593Smuzhiyun 	dma_fifo_v1_t dma_fifo[MAX_DMAFIFO_ENTRIES_V1];
323*4882a593Smuzhiyun } hnd_ext_trap_axi_error_v1_t;
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun #define HND_EXT_TRAP_MACSUSP_INFO_VER	1
326*4882a593Smuzhiyun typedef struct hnd_ext_trap_macsusp {
327*4882a593Smuzhiyun 	uint16 xtag;
328*4882a593Smuzhiyun 	uint8 version; /* version of the information following this */
329*4882a593Smuzhiyun 	uint8 trap_reason;
330*4882a593Smuzhiyun 	uint32 i32_maccontrol;
331*4882a593Smuzhiyun 	uint32 i32_maccommand;
332*4882a593Smuzhiyun 	uint32 i32_macintstatus;
333*4882a593Smuzhiyun 	uint32 i32_phydebug[4];
334*4882a593Smuzhiyun 	uint32 i32_psmdebug[8];
335*4882a593Smuzhiyun 	uint16 i16_0x41a; /* Rxe Status 1 */
336*4882a593Smuzhiyun 	uint16 i16_0x41c; /* Rxe Status 2 */
337*4882a593Smuzhiyun 	uint16 i16_0x490; /* PSM BRC */
338*4882a593Smuzhiyun 	uint16 i16_0x50e; /* TXE Status */
339*4882a593Smuzhiyun 	uint16 i16_0x55e; /* TXE_xmtdmabusy */
340*4882a593Smuzhiyun 	uint16 i16_0x566; /* TXE_XMTfifosuspflush */
341*4882a593Smuzhiyun 	uint16 i16_0x690; /* IFS Stat */
342*4882a593Smuzhiyun 	uint16 i16_0x692; /* IFS_MEDBUSY_CTR */
343*4882a593Smuzhiyun 	uint16 i16_0x694; /* IFS_TX_DUR */
344*4882a593Smuzhiyun 	uint16 i16_0x7c0; /* WEP CTL */
345*4882a593Smuzhiyun 	uint16 i16_0x838; /* TXE_AQM fifo Ready */
346*4882a593Smuzhiyun 	uint16 i16_0x880; /* MHP_status */
347*4882a593Smuzhiyun 	uint16 shm_prewds_cnt;
348*4882a593Smuzhiyun 	uint16 shm_ucode_dbgst;
349*4882a593Smuzhiyun } hnd_ext_trap_macsusp_t;
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun #define HND_EXT_TRAP_MACENAB_INFO_VER	1
352*4882a593Smuzhiyun typedef struct hnd_ext_trap_macenab {
353*4882a593Smuzhiyun 	uint16 xtag;
354*4882a593Smuzhiyun 	uint8 version; /* version of the information following this */
355*4882a593Smuzhiyun 	uint8 trap_reason;
356*4882a593Smuzhiyun 	uint32 i32_maccontrol;
357*4882a593Smuzhiyun 	uint32 i32_maccommand;
358*4882a593Smuzhiyun 	uint32 i32_macintstatus;
359*4882a593Smuzhiyun 	uint32 i32_psmdebug[8];
360*4882a593Smuzhiyun 	uint32 i32_clk_ctl_st;
361*4882a593Smuzhiyun 	uint32 i32_powerctl;
362*4882a593Smuzhiyun 	uint16 i16_0x1a8; /* gated clock en */
363*4882a593Smuzhiyun 	uint16 i16_0x480; /* PSM_SLP_TMR */
364*4882a593Smuzhiyun 	uint16 i16_0x490; /* PSM BRC */
365*4882a593Smuzhiyun 	uint16 i16_0x600; /* TSF CTL */
366*4882a593Smuzhiyun 	uint16 i16_0x690; /* IFS Stat */
367*4882a593Smuzhiyun 	uint16 i16_0x692; /* IFS_MEDBUSY_CTR */
368*4882a593Smuzhiyun 	uint16 i16_0x6a0; /* SLow_CTL */
369*4882a593Smuzhiyun 	uint16 i16_0x6a6; /* SLow_FRAC */
370*4882a593Smuzhiyun 	uint16 i16_0x6a8; /* fast power up delay */
371*4882a593Smuzhiyun 	uint16 i16_0x6aa; /* SLow_PER */
372*4882a593Smuzhiyun 	uint16 shm_ucode_dbgst;
373*4882a593Smuzhiyun 	uint16 PAD;
374*4882a593Smuzhiyun } hnd_ext_trap_macenab_t;
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun #define HND_EXT_TRAP_PHY_INFO_VER_1 (1)
377*4882a593Smuzhiyun typedef struct hnd_ext_trap_phydbg {
378*4882a593Smuzhiyun 	uint16 err;
379*4882a593Smuzhiyun 	uint16 RxFeStatus;
380*4882a593Smuzhiyun 	uint16 TxFIFOStatus0;
381*4882a593Smuzhiyun 	uint16 TxFIFOStatus1;
382*4882a593Smuzhiyun 	uint16 RfseqMode;
383*4882a593Smuzhiyun 	uint16 RfseqStatus0;
384*4882a593Smuzhiyun 	uint16 RfseqStatus1;
385*4882a593Smuzhiyun 	uint16 RfseqStatus_Ocl;
386*4882a593Smuzhiyun 	uint16 RfseqStatus_Ocl1;
387*4882a593Smuzhiyun 	uint16 OCLControl1;
388*4882a593Smuzhiyun 	uint16 TxError;
389*4882a593Smuzhiyun 	uint16 bphyTxError;
390*4882a593Smuzhiyun 	uint16 TxCCKError;
391*4882a593Smuzhiyun 	uint16 TxCtrlWrd0;
392*4882a593Smuzhiyun 	uint16 TxCtrlWrd1;
393*4882a593Smuzhiyun 	uint16 TxCtrlWrd2;
394*4882a593Smuzhiyun 	uint16 TxLsig0;
395*4882a593Smuzhiyun 	uint16 TxLsig1;
396*4882a593Smuzhiyun 	uint16 TxVhtSigA10;
397*4882a593Smuzhiyun 	uint16 TxVhtSigA11;
398*4882a593Smuzhiyun 	uint16 TxVhtSigA20;
399*4882a593Smuzhiyun 	uint16 TxVhtSigA21;
400*4882a593Smuzhiyun 	uint16 txPktLength;
401*4882a593Smuzhiyun 	uint16 txPsdulengthCtr;
402*4882a593Smuzhiyun 	uint16 gpioClkControl;
403*4882a593Smuzhiyun 	uint16 gpioSel;
404*4882a593Smuzhiyun 	uint16 pktprocdebug;
405*4882a593Smuzhiyun 	uint16 PAD;
406*4882a593Smuzhiyun 	uint32 gpioOut[3];
407*4882a593Smuzhiyun } hnd_ext_trap_phydbg_t;
408*4882a593Smuzhiyun 
409*4882a593Smuzhiyun /* unique IDs for separate cores in SI */
410*4882a593Smuzhiyun #define REGDUMP_MASK_MAC0		BCM_BIT(1)
411*4882a593Smuzhiyun #define REGDUMP_MASK_ARM		BCM_BIT(2)
412*4882a593Smuzhiyun #define REGDUMP_MASK_PCIE		BCM_BIT(3)
413*4882a593Smuzhiyun #define REGDUMP_MASK_MAC1		BCM_BIT(4)
414*4882a593Smuzhiyun #define REGDUMP_MASK_PMU		BCM_BIT(5)
415*4882a593Smuzhiyun 
416*4882a593Smuzhiyun typedef struct {
417*4882a593Smuzhiyun 	uint16 reg_offset;
418*4882a593Smuzhiyun 	uint16 core_mask;
419*4882a593Smuzhiyun } reg_dump_config_t;
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun #define HND_EXT_TRAP_PHY_INFO_VER              2
422*4882a593Smuzhiyun typedef struct hnd_ext_trap_phydbg_v2 {
423*4882a593Smuzhiyun 	uint8 version;
424*4882a593Smuzhiyun 	uint8 len;
425*4882a593Smuzhiyun 	uint16 err;
426*4882a593Smuzhiyun 	uint16 RxFeStatus;
427*4882a593Smuzhiyun 	uint16 TxFIFOStatus0;
428*4882a593Smuzhiyun 	uint16 TxFIFOStatus1;
429*4882a593Smuzhiyun 	uint16 RfseqMode;
430*4882a593Smuzhiyun 	uint16 RfseqStatus0;
431*4882a593Smuzhiyun 	uint16 RfseqStatus1;
432*4882a593Smuzhiyun 	uint16 RfseqStatus_Ocl;
433*4882a593Smuzhiyun 	uint16 RfseqStatus_Ocl1;
434*4882a593Smuzhiyun 	uint16 OCLControl1;
435*4882a593Smuzhiyun 	uint16 TxError;
436*4882a593Smuzhiyun 	uint16 bphyTxError;
437*4882a593Smuzhiyun 	uint16 TxCCKError;
438*4882a593Smuzhiyun 	uint16 TxCtrlWrd0;
439*4882a593Smuzhiyun 	uint16 TxCtrlWrd1;
440*4882a593Smuzhiyun 	uint16 TxCtrlWrd2;
441*4882a593Smuzhiyun 	uint16 TxLsig0;
442*4882a593Smuzhiyun 	uint16 TxLsig1;
443*4882a593Smuzhiyun 	uint16 TxVhtSigA10;
444*4882a593Smuzhiyun 	uint16 TxVhtSigA11;
445*4882a593Smuzhiyun 	uint16 TxVhtSigA20;
446*4882a593Smuzhiyun 	uint16 TxVhtSigA21;
447*4882a593Smuzhiyun 	uint16 txPktLength;
448*4882a593Smuzhiyun 	uint16 txPsdulengthCtr;
449*4882a593Smuzhiyun 	uint16 gpioClkControl;
450*4882a593Smuzhiyun 	uint16 gpioSel;
451*4882a593Smuzhiyun 	uint16 pktprocdebug;
452*4882a593Smuzhiyun 	uint32 gpioOut[3];
453*4882a593Smuzhiyun 	uint32 additional_regs[1];
454*4882a593Smuzhiyun } hnd_ext_trap_phydbg_v2_t;
455*4882a593Smuzhiyun 
456*4882a593Smuzhiyun #define HND_EXT_TRAP_PHY_INFO_VER_3		(3)
457*4882a593Smuzhiyun typedef struct hnd_ext_trap_phydbg_v3 {
458*4882a593Smuzhiyun 	uint8 version;
459*4882a593Smuzhiyun 	uint8 len;
460*4882a593Smuzhiyun 	uint16 err;
461*4882a593Smuzhiyun 	uint16 RxFeStatus;
462*4882a593Smuzhiyun 	uint16 TxFIFOStatus0;
463*4882a593Smuzhiyun 	uint16 TxFIFOStatus1;
464*4882a593Smuzhiyun 	uint16 RfseqMode;
465*4882a593Smuzhiyun 	uint16 RfseqStatus0;
466*4882a593Smuzhiyun 	uint16 RfseqStatus1;
467*4882a593Smuzhiyun 	uint16 RfseqStatus_Ocl;
468*4882a593Smuzhiyun 	uint16 RfseqStatus_Ocl1;
469*4882a593Smuzhiyun 	uint16 OCLControl1;
470*4882a593Smuzhiyun 	uint16 TxError;
471*4882a593Smuzhiyun 	uint16 bphyTxError;
472*4882a593Smuzhiyun 	uint16 TxCCKError;
473*4882a593Smuzhiyun 	uint16 TxCtrlWrd0;
474*4882a593Smuzhiyun 	uint16 TxCtrlWrd1;
475*4882a593Smuzhiyun 	uint16 TxCtrlWrd2;
476*4882a593Smuzhiyun 	uint16 TxLsig0;
477*4882a593Smuzhiyun 	uint16 TxLsig1;
478*4882a593Smuzhiyun 	uint16 TxVhtSigA10;
479*4882a593Smuzhiyun 	uint16 TxVhtSigA11;
480*4882a593Smuzhiyun 	uint16 TxVhtSigA20;
481*4882a593Smuzhiyun 	uint16 TxVhtSigA21;
482*4882a593Smuzhiyun 	uint16 txPktLength;
483*4882a593Smuzhiyun 	uint16 txPsdulengthCtr;
484*4882a593Smuzhiyun 	uint16 gpioClkControl;
485*4882a593Smuzhiyun 	uint16 gpioSel;
486*4882a593Smuzhiyun 	uint16 pktprocdebug;
487*4882a593Smuzhiyun 	uint32 gpioOut[3];
488*4882a593Smuzhiyun 	uint16 HESigURateFlagStatus;
489*4882a593Smuzhiyun 	uint16 HESigUsRateFlagStatus;
490*4882a593Smuzhiyun 	uint32 additional_regs[1];
491*4882a593Smuzhiyun } hnd_ext_trap_phydbg_v3_t;
492*4882a593Smuzhiyun 
493*4882a593Smuzhiyun /* Phy TxErr Dump Structure */
494*4882a593Smuzhiyun #define HND_EXT_TRAP_PHYTXERR_INFO_VER		1
495*4882a593Smuzhiyun #define HND_EXT_TRAP_PHYTXERR_INFO_VER_V2	2
496*4882a593Smuzhiyun typedef struct hnd_ext_trap_macphytxerr {
497*4882a593Smuzhiyun 	uint8 version; /* version of the information following this */
498*4882a593Smuzhiyun 	uint8 trap_reason;
499*4882a593Smuzhiyun 	uint16 i16_0x63E; /* tsf_tmr_rx_ts */
500*4882a593Smuzhiyun 	uint16 i16_0x640; /* tsf_tmr_tx_ts */
501*4882a593Smuzhiyun 	uint16 i16_0x642; /* tsf_tmr_rx_end_ts  */
502*4882a593Smuzhiyun 	uint16 i16_0x846; /* TDC_FrmLen0 */
503*4882a593Smuzhiyun 	uint16 i16_0x848; /* TDC_FrmLen1 */
504*4882a593Smuzhiyun 	uint16 i16_0x84a; /* TDC_Txtime */
505*4882a593Smuzhiyun 	uint16 i16_0xa5a; /* TXE_BytCntInTxFrmLo  */
506*4882a593Smuzhiyun 	uint16 i16_0xa5c; /* TXE_BytCntInTxFrmHi */
507*4882a593Smuzhiyun 	uint16 i16_0x856; /* TDC_VhtPsduLen0 */
508*4882a593Smuzhiyun 	uint16 i16_0x858; /* TDC_VhtPsduLen1 */
509*4882a593Smuzhiyun 	uint16 i16_0x490; /* psm_brc  */
510*4882a593Smuzhiyun 	uint16 i16_0x4d8; /* psm_brc_1 */
511*4882a593Smuzhiyun 	uint16 shm_txerr_reason;
512*4882a593Smuzhiyun 	uint16 shm_pctl0;
513*4882a593Smuzhiyun 	uint16 shm_pctl1;
514*4882a593Smuzhiyun 	uint16 shm_pctl2;
515*4882a593Smuzhiyun 	uint16 shm_lsig0;
516*4882a593Smuzhiyun 	uint16 shm_lsig1;
517*4882a593Smuzhiyun 	uint16 shm_plcp0;
518*4882a593Smuzhiyun 	uint16 shm_plcp1;
519*4882a593Smuzhiyun 	uint16 shm_plcp2;
520*4882a593Smuzhiyun 	uint16 shm_vht_sigb0;
521*4882a593Smuzhiyun 	uint16 shm_vht_sigb1;
522*4882a593Smuzhiyun 	uint16 shm_tx_tst;
523*4882a593Smuzhiyun 	uint16 shm_txerr_tm;
524*4882a593Smuzhiyun 	uint16 shm_curchannel;
525*4882a593Smuzhiyun 	uint16 shm_crx_rxtsf_pos;
526*4882a593Smuzhiyun 	uint16 shm_lasttx_tsf;
527*4882a593Smuzhiyun 	uint16 shm_s_rxtsftmrval;
528*4882a593Smuzhiyun 	uint16 i16_0x29;	/* Phy indirect address */
529*4882a593Smuzhiyun 	uint16 i16_0x2a;	/* Phy indirect address */
530*4882a593Smuzhiyun } hnd_ext_trap_macphytxerr_t;
531*4882a593Smuzhiyun 
532*4882a593Smuzhiyun typedef struct hnd_ext_trap_macphytxerr_v2 {
533*4882a593Smuzhiyun 	uint8 version; /* version of the information following this */
534*4882a593Smuzhiyun 	uint8 trap_reason;
535*4882a593Smuzhiyun 	uint16 i16_0x63E; /* tsf_tmr_rx_ts */
536*4882a593Smuzhiyun 	uint16 i16_0x640; /* tsf_tmr_tx_ts */
537*4882a593Smuzhiyun 	uint16 i16_0x642; /* tsf_tmr_rx_end_ts  */
538*4882a593Smuzhiyun 	uint16 i16_0x846; /* TDC_FrmLen0 */
539*4882a593Smuzhiyun 	uint16 i16_0x848; /* TDC_FrmLen1 */
540*4882a593Smuzhiyun 	uint16 i16_0x84a; /* TDC_Txtime */
541*4882a593Smuzhiyun 	uint16 i16_0xa5a; /* TXE_BytCntInTxFrmLo  */
542*4882a593Smuzhiyun 	uint16 i16_0xa5c; /* TXE_BytCntInTxFrmHi */
543*4882a593Smuzhiyun 	uint16 i16_0x856; /* TDC_VhtPsduLen0 */
544*4882a593Smuzhiyun 	uint16 i16_0x858; /* TDC_VhtPsduLen1 */
545*4882a593Smuzhiyun 	uint16 i16_0x490; /* psm_brc  */
546*4882a593Smuzhiyun 	uint16 i16_0x4d8; /* psm_brc_1 */
547*4882a593Smuzhiyun 	uint16 shm_txerr_reason;
548*4882a593Smuzhiyun 	uint16 shm_pctl0;
549*4882a593Smuzhiyun 	uint16 shm_pctl1;
550*4882a593Smuzhiyun 	uint16 shm_pctl2;
551*4882a593Smuzhiyun 	uint16 shm_lsig0;
552*4882a593Smuzhiyun 	uint16 shm_lsig1;
553*4882a593Smuzhiyun 	uint16 shm_plcp0;
554*4882a593Smuzhiyun 	uint16 shm_plcp1;
555*4882a593Smuzhiyun 	uint16 shm_plcp2;
556*4882a593Smuzhiyun 	uint16 shm_vht_sigb0;
557*4882a593Smuzhiyun 	uint16 shm_vht_sigb1;
558*4882a593Smuzhiyun 	uint16 shm_tx_tst;
559*4882a593Smuzhiyun 	uint16 shm_txerr_tm;
560*4882a593Smuzhiyun 	uint16 shm_curchannel;
561*4882a593Smuzhiyun 	uint16 shm_crx_rxtsf_pos;
562*4882a593Smuzhiyun 	uint16 shm_lasttx_tsf;
563*4882a593Smuzhiyun 	uint16 shm_s_rxtsftmrval;
564*4882a593Smuzhiyun 	uint16 i16_0x29;        /* Phy indirect address */
565*4882a593Smuzhiyun 	uint16 i16_0x2a;        /* Phy indirect address */
566*4882a593Smuzhiyun 	uint8 phyerr_bmac_cnt; /* number of times bmac raised phy tx err */
567*4882a593Smuzhiyun 	uint8 phyerr_bmac_rsn; /* bmac reason for phy tx error */
568*4882a593Smuzhiyun 	uint16 pad;
569*4882a593Smuzhiyun 	uint32 recv_fifo_status[3][2]; /* Rcv Status0 & Rcv Status1 for 3 Rx fifos */
570*4882a593Smuzhiyun } hnd_ext_trap_macphytxerr_v2_t;
571*4882a593Smuzhiyun 
572*4882a593Smuzhiyun #define HND_EXT_TRAP_PCIE_ERR_ATTN_VER_1	(1u)
573*4882a593Smuzhiyun #define MAX_AER_HDR_LOG_REGS			(4u)
574*4882a593Smuzhiyun typedef struct hnd_ext_trap_pcie_err_attn_v1 {
575*4882a593Smuzhiyun 	uint8 version;
576*4882a593Smuzhiyun 	uint8 pad[3];
577*4882a593Smuzhiyun 	uint32 err_hdr_logreg1;
578*4882a593Smuzhiyun 	uint32 err_hdr_logreg2;
579*4882a593Smuzhiyun 	uint32 err_hdr_logreg3;
580*4882a593Smuzhiyun 	uint32 err_hdr_logreg4;
581*4882a593Smuzhiyun 	uint32 err_code_logreg;
582*4882a593Smuzhiyun 	uint32 err_type;
583*4882a593Smuzhiyun 	uint32 err_code_state;
584*4882a593Smuzhiyun 	uint32 last_err_attn_ts;
585*4882a593Smuzhiyun 	uint32 cfg_tlp_hdr[MAX_AER_HDR_LOG_REGS];
586*4882a593Smuzhiyun } hnd_ext_trap_pcie_err_attn_v1_t;
587*4882a593Smuzhiyun 
588*4882a593Smuzhiyun #define MAX_EVENTLOG_BUFFERS	48
589*4882a593Smuzhiyun typedef struct eventlog_trapdata_info {
590*4882a593Smuzhiyun 	uint32 num_elements;
591*4882a593Smuzhiyun 	uint32 seq_num;
592*4882a593Smuzhiyun 	uint32 log_arr_addr;
593*4882a593Smuzhiyun } eventlog_trapdata_info_t;
594*4882a593Smuzhiyun 
595*4882a593Smuzhiyun typedef struct eventlog_trap_buf_info {
596*4882a593Smuzhiyun 	uint32 len;
597*4882a593Smuzhiyun 	uint32 buf_addr;
598*4882a593Smuzhiyun } eventlog_trap_buf_info_t;
599*4882a593Smuzhiyun 
600*4882a593Smuzhiyun #define HND_MEM_HC_FB_MEM_VER_1	(1u)
601*4882a593Smuzhiyun typedef struct hnd_ext_trap_fb_mem_err {
602*4882a593Smuzhiyun 	uint16 version;
603*4882a593Smuzhiyun 	uint16 reserved;
604*4882a593Smuzhiyun 	uint32 flip_bit_err_time;
605*4882a593Smuzhiyun } hnd_ext_trap_fb_mem_err_t;
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun #if defined(ETD) && !defined(WLETD)
608*4882a593Smuzhiyun #define ETD_SW_FLAG_MEM		0x00000001
609*4882a593Smuzhiyun 
610*4882a593Smuzhiyun int etd_init(osl_t *osh);
611*4882a593Smuzhiyun int etd_register_trap_ext_callback(void *cb, void *arg);
612*4882a593Smuzhiyun int (etd_register_trap_ext_callback_late)(void *cb, void *arg);
613*4882a593Smuzhiyun uint32 *etd_get_trap_ext_data(void);
614*4882a593Smuzhiyun uint32 etd_get_trap_ext_swflags(void);
615*4882a593Smuzhiyun void etd_set_trap_ext_swflag(uint32 flag);
616*4882a593Smuzhiyun void etd_notify_trap_ext_callback(trap_t *tr);
617*4882a593Smuzhiyun reg_dump_config_t *etd_get_reg_dump_config_tbl(void);
618*4882a593Smuzhiyun uint etd_get_reg_dump_config_len(void);
619*4882a593Smuzhiyun 
620*4882a593Smuzhiyun extern bool _etd_enab;
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun #if defined(ROM_ENAB_RUNTIME_CHECK)
623*4882a593Smuzhiyun 	#define ETD_ENAB(pub)		(_etd_enab)
624*4882a593Smuzhiyun #elif defined(ETD_DISABLED)
625*4882a593Smuzhiyun 	#define ETD_ENAB(pub)		(0)
626*4882a593Smuzhiyun #else
627*4882a593Smuzhiyun 	#define ETD_ENAB(pub)		(1)
628*4882a593Smuzhiyun #endif
629*4882a593Smuzhiyun 
630*4882a593Smuzhiyun #else
631*4882a593Smuzhiyun #define ETD_ENAB(pub)		(0)
632*4882a593Smuzhiyun #endif /* WLETD */
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun #endif /* !LANGUAGE_ASSEMBLY */
635*4882a593Smuzhiyun 
636*4882a593Smuzhiyun #endif /* _ETD_H_ */
637