summaryrefslogtreecommitdiff
path: root/dhd_buzzz.h
blob: 36b5438a10cc327ea2ad113087b9e7e14f21af31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#ifndef _DHD_BUZZZ_H_INCLUDED_
#define _DHD_BUZZZ_H_INCLUDED_

/*
 * Copyright (C) 2022, Broadcom.
 *
 *      Unless you and Broadcom execute a separate written software license
 * agreement governing use of this software, this software is licensed to you
 * under the terms of the GNU General Public License version 2 (the "GPL"),
 * available at http://www.broadcom.com/licenses/GPLv2.php, with the
 * following added to such license:
 *
 *      As a special exception, the copyright holders of this software give you
 * permission to link this software with independent modules, and to copy and
 * distribute the resulting executable under terms of your choice, provided that
 * you also meet, for each linked independent module, the terms and conditions of
 * the license of that module.  An independent module is a module which is not
 * derived from this software.  The special exception does not apply to any
 * modifications of the software.
 *
 *
 * <<Broadcom-WL-IPTag/Open:>>
 *
 * $Id$
 */

#if defined(DHD_BUZZZ_LOG_ENABLED)
/*
 * Broadcom proprietary logging system. Deleted performance counters.
 */
void dhd_buzzz_attach(void);
void dhd_buzzz_detach(void);
void dhd_buzzz_panic(uint32 crash);
void dhd_buzzz_dump(void);
void dhd_buzzz_log_disable(void);
void dhd_buzzz_crash(void);

void dhd_buzzz_log0(uint32 evt_id);
void dhd_buzzz_log1(uint32 evt_id, uint32 arg1);
void dhd_buzzz_log2(uint32 evt_id, uint32 arg1, uintptr arg2);

void dhd_buzzz_fmt_reg(uint32 id, char * fmt);

extern void* dhd_os_create_buzzz_thread(void);
extern void dhd_os_destroy_buzzz_thread(void *thr_hdl);
extern void dhd_os_sched_buzzz_thread(void *thr_hdl);

#undef BUZZZ_EVT
#define BUZZZ_EVT(ID)		BUZZZ_EVT__## ID,

#undef BUZZZ_FMT
#define BUZZZ_FMT(ID, format) \
	dhd_buzzz_fmt_reg(BUZZZ_EVT__## ID, "\t" format);

typedef enum buzzz_evt_id
{
	BUZZZ_EVT__DHD = 100, /* BUZZZ_EVT(DHD) */
	BUZZZ_EVT(GENERAL_LOCK)
	BUZZZ_EVT(GENERAL_UNLOCK)
	BUZZZ_EVT(FLOWRING_LOCK)
	BUZZZ_EVT(FLOWRING_UNLOCK)
	BUZZZ_EVT(FLOWID_LOCK)
	BUZZZ_EVT(FLOWID_UNLOCK)

	BUZZZ_EVT(START_XMIT_BGN)
	BUZZZ_EVT(START_XMIT_END)
	BUZZZ_EVT(PROCESS_CTRL_BGN)
	BUZZZ_EVT(PROCESS_CTRL_END)
	BUZZZ_EVT(UPDATE_TXFLOWRINGS_BGN)
	BUZZZ_EVT(UPDATE_TXFLOWRINGS_END)
	BUZZZ_EVT(PROCESS_TXCPL_BGN)
	BUZZZ_EVT(PROCESS_TXCPL_END)
	BUZZZ_EVT(PROCESS_RXCPL_BGN)
	BUZZZ_EVT(PROCESS_RXCPL_END)

	BUZZZ_EVT(GET_SRC_ADDR)
	BUZZZ_EVT(WRITE_COMPLETE)
	BUZZZ_EVT(ALLOC_RING_SPACE)
	BUZZZ_EVT(ALLOC_RING_SPACE_RET)
	BUZZZ_EVT(ALLOC_RING_SPACE_FAIL)

	BUZZZ_EVT(PKTID_MAP_CLEAR)
	BUZZZ_EVT(PKTID_NOT_AVAILABLE)
	BUZZZ_EVT(PKTID_MAP_RSV)
	BUZZZ_EVT(PKTID_MAP_SAVE)
	BUZZZ_EVT(PKTID_MAP_ALLOC)
	BUZZZ_EVT(PKTID_MAP_FREE)
	BUZZZ_EVT(LOCKER_INUSE_ABORT)
	BUZZZ_EVT(BUFFER_TYPE_ABORT1)
	BUZZZ_EVT(BUFFER_TYPE_ABORT2)

	BUZZZ_EVT(UPD_READ_IDX)
	BUZZZ_EVT(STORE_RXCPLN_RD)
	BUZZZ_EVT(EARLY_UPD_RXCPLN_RD)

	BUZZZ_EVT(POST_TXDATA)
	BUZZZ_EVT(RETURN_RXBUF)
	BUZZZ_EVT(RXBUF_POST)
	BUZZZ_EVT(RXBUF_POST_EVENT)
	BUZZZ_EVT(RXBUF_POST_IOCTL)
	BUZZZ_EVT(RXBUF_POST_CTRL_PKTGET_FAIL)
	BUZZZ_EVT(RXBUF_POST_PKTGET_FAIL)
	BUZZZ_EVT(RXBUF_POST_PKTID_FAIL)

	BUZZZ_EVT(DHD_DUPLICATE_ALLOC)
	BUZZZ_EVT(DHD_DUPLICATE_FREE)
	BUZZZ_EVT(DHD_TEST_IS_ALLOC)
	BUZZZ_EVT(DHD_TEST_IS_FREE)

	BUZZZ_EVT(DHD_PROT_IOCT_BGN)
	BUZZZ_EVT(DHDMSGBUF_CMPLT_BGN)
	BUZZZ_EVT(DHDMSGBUF_CMPLT_END)
	BUZZZ_EVT(DHD_PROT_IOCT_END)
	BUZZZ_EVT(DHD_FILLUP_IOCT_REQST_BGN)
	BUZZZ_EVT(DHD_FILLUP_IOCT_REQST_END)
	BUZZZ_EVT(DHD_MSGBUF_RXBUF_POST_IOCTLRESP_BUFS_BGN)
	BUZZZ_EVT(DHD_MSGBUF_RXBUF_POST_IOCTLRESP_BUFS_END)
	BUZZZ_EVT(DHD_PROT_IOCTCMPLT_PROCESS_ONE)
	BUZZZ_EVT(DHD_PROT_IOCTCMPLT_PROCESS_TWO)
	BUZZZ_EVT(DHD_PROT_EVENT_PROCESS_BGN)
	BUZZZ_EVT(DHD_PROT_EVENT_PROCESS_END)
	BUZZZ_EVT(DHD_PROT_D2H_SYNC_LIVELOCK)
	BUZZZ_EVT(DHD_IOCTL_BUFPOST)
	BUZZZ_EVT(DHD_EVENT_BUFPOST)
	BUZZZ_EVT(DHD_PROC_MSG_TYPE)
	BUZZZ_EVT(DHD_BUS_RXCTL_ONE)
	BUZZZ_EVT(DHD_BUS_RXCTL_TWO)
} buzzz_evt_id_t;

static inline void dhd_buzzz_fmt_init(void)
{
	BUZZZ_FMT(DHD,				"DHD events")
	BUZZZ_FMT(GENERAL_LOCK,			"+++LOCK GENERAL flags<0x%08x>")
	BUZZZ_FMT(GENERAL_UNLOCK,		"---UNLK GENERAL flags<0x%08x>")
	BUZZZ_FMT(FLOWRING_LOCK,		"+++LOCK FLOWRING flags<0x%08x>")
	BUZZZ_FMT(FLOWRING_UNLOCK,		"---UNLK FLOWRING flags<0x%08x>")
	BUZZZ_FMT(FLOWID_LOCK,			"+++LOCK FLOWID flags<0x%08x>")
	BUZZZ_FMT(FLOWID_UNLOCK,		"---UNLK FLOWID flags<0x%08x>")

	BUZZZ_FMT(START_XMIT_BGN,		"{ dhd_start_xmit() ifidx<%u> skb<0x%p>")
	BUZZZ_FMT(START_XMIT_END,		"} dhd_start_xmit()")
	BUZZZ_FMT(PROCESS_CTRL_BGN,		"{ dhd_prot_process_ctrlbuf()")
	BUZZZ_FMT(PROCESS_CTRL_END,		"} dhd_prot_process_ctrlbuf()")
	BUZZZ_FMT(UPDATE_TXFLOWRINGS_BGN,	"{ dhd_update_txflowrings()");
	BUZZZ_FMT(UPDATE_TXFLOWRINGS_END,	"} dhd_update_txflowrings()");
	BUZZZ_FMT(PROCESS_TXCPL_BGN,		"{ dhd_prot_process_msgbuf_txcpl()")
	BUZZZ_FMT(PROCESS_TXCPL_END,		"} dhd_prot_process_msgbuf_txcpl()")
	BUZZZ_FMT(PROCESS_RXCPL_BGN,		"{ dhd_prot_process_msgbuf_rxcpl()")
	BUZZZ_FMT(PROCESS_RXCPL_END,		"} dhd_prot_process_msgbuf_rxcpl()")

	BUZZZ_FMT(GET_SRC_ADDR,			"bytes<%u> @<0x%p> prot_get_src_addr()")
	BUZZZ_FMT(WRITE_COMPLETE,		"WR<%u> prot_ring_write_complete")
	BUZZZ_FMT(ALLOC_RING_SPACE,		"{ dhd_alloc_ring_space nitems<%d>")
	BUZZZ_FMT(ALLOC_RING_SPACE_RET,		"} dhd_alloc_ring_space() alloc<%d> @<0x%p>")
	BUZZZ_FMT(ALLOC_RING_SPACE_FAIL,	"FAILURE } dhd_alloc_ring_space() alloc<%d>")

	BUZZZ_FMT(PKTID_MAP_CLEAR,		"pktid map clear")
	BUZZZ_FMT(PKTID_NOT_AVAILABLE,		"FAILURE pktid pool depletion failures<%u>")
	BUZZZ_FMT(PKTID_MAP_RSV,		"pktid<%u> pkt<0x%p> dhd_pktid_map_reserve()")
	BUZZZ_FMT(PKTID_MAP_SAVE,		"pktid<%u> pkt<0x%p> dhd_pktid_map_save()")
	BUZZZ_FMT(PKTID_MAP_ALLOC,		"pktid<%u> pkt<0x%p> dhd_pktid_map_alloc()")
	BUZZZ_FMT(PKTID_MAP_FREE,		"pktid<%u> pkt<0x%p> dhd_pktid_map_free()")
	BUZZZ_FMT(LOCKER_INUSE_ABORT,		"ASSERT  pktid<%u> pkt<0x%p> locker->inuse")
	BUZZZ_FMT(BUFFER_TYPE_ABORT1,		"ASSERT  pktid<%u> pkt<0x%p> locker->dma")
	BUZZZ_FMT(BUFFER_TYPE_ABORT2,		"ASSERT  locker->dma<%u> buf_type<%u>")

	BUZZZ_FMT(UPD_READ_IDX,			"RD<%u>  prot_upd_read_idx()")
	BUZZZ_FMT(STORE_RXCPLN_RD,		"RD<%u>  prot_store_rxcpln_read_idx()")
	BUZZZ_FMT(EARLY_UPD_RXCPLN_RD,		"RD<%u>  prot_early_upd_rxcpln_read_idx()")

	BUZZZ_FMT(POST_TXDATA,			"flr<%u> pkt<0x%p> dhd_prot_txdata()")
	BUZZZ_FMT(RETURN_RXBUF,			"cnt<%u> dhd_prot_return_rxbuf()");
	BUZZZ_FMT(RXBUF_POST,			"cnt<%u> dhd_prot_rxbufpost()");
	BUZZZ_FMT(RXBUF_POST_EVENT,		"event   dhd_prot_rxbufpost_ctrl()");
	BUZZZ_FMT(RXBUF_POST_IOCTL,		"ioctl   dhd_prot_rxbufpost_ctrl()");
	BUZZZ_FMT(RXBUF_POST_CTRL_PKTGET_FAIL,	"FAILURE pktget dhd_prot_rxbufpost_ctrl()");
	BUZZZ_FMT(RXBUF_POST_PKTGET_FAIL,	"FAILURE pktget loop<%u> dhd_prot_rxbufpost()")
	BUZZZ_FMT(RXBUF_POST_PKTID_FAIL,	"FAILURE pktid  loop<%u> dhd_prot_rxbufpost()")

	BUZZZ_FMT(DHD_DUPLICATE_ALLOC,		"ASSERT  dhd_pktid_audit(%u) DHD_DUPLICATE_ALLOC")
	BUZZZ_FMT(DHD_DUPLICATE_FREE,		"ASSERT  dhd_pktid_audit(%u) DHD_DUPLICATE_FREE")
	BUZZZ_FMT(DHD_TEST_IS_ALLOC,		"ASSERT  dhd_pktid_audit(%u) DHD_TEST_IS_ALLOC")
	BUZZZ_FMT(DHD_TEST_IS_FREE,		"ASSERT  dhd_pktid_audit(%u) DHD_TEST_IS_FREE")

	BUZZZ_FMT(DHD_PROT_IOCT_BGN,        "{ dhd_prot_ioct pending<%u> thread<0x%p>")
	BUZZZ_FMT(DHDMSGBUF_CMPLT_BGN,      "{  dhdmsgbuf_cmplt bus::retlen<%u> bus::pktid<%u>")
	BUZZZ_FMT(DHDMSGBUF_CMPLT_END,      "}  dhdmsgbuf_cmplt resp_len<%d> pktid<%u>")
	BUZZZ_FMT(DHD_PROT_IOCT_END,        "} dhd_prot_ioct pending<%u> thread<0x%p>")
	BUZZZ_FMT(DHD_FILLUP_IOCT_REQST_BGN, "{ dhd_fillup_ioct_reqst_ptrbased cmd<%u> transid<%u>")
	BUZZZ_FMT(DHD_FILLUP_IOCT_REQST_END,
		"} dhd_fillup_ioct_reqst_ptrbased transid<%u> bus::pktid<%u>")
	BUZZZ_FMT(DHD_MSGBUF_RXBUF_POST_IOCTLRESP_BUFS_BGN,
		"{ dhd_msgbuf_rxbuf_post_ioctlresp_bufs cur_posted<%u> bus::pktid<%u>")
	BUZZZ_FMT(DHD_MSGBUF_RXBUF_POST_IOCTLRESP_BUFS_END,
		"} dhd_msgbuf_rxbuf_post_ioctlresp_bufs cur_posted<%u> bus::pktid<%u>")
	BUZZZ_FMT(DHD_PROT_IOCTCMPLT_PROCESS_ONE,
		"{ dhd_prot_ioctlcmplt_process cmd<%d> transid<%d>")
	BUZZZ_FMT(DHD_PROT_IOCTCMPLT_PROCESS_TWO,
		"} dhd_prot_ioctlcmplt_process resplen<%u> pktid<%u>")
	BUZZZ_FMT(DHD_PROT_EVENT_PROCESS_BGN, "{ dhd_prot_event_process pktid<%u>")
	BUZZZ_FMT(DHD_PROT_EVENT_PROCESS_END, "} dhd_prot_event_process buflen<%u> pkt<0x%p>")
	BUZZZ_FMT(DHD_PROT_D2H_SYNC_LIVELOCK, " dhd_prot_d2h_sync_livelock seqnum<%u>")
	BUZZZ_FMT(DHD_IOCTL_BUFPOST, " dhd_prot_rxbufpost_ctrl ioctl pktid<%u> phyaddr<0x%x>")
	BUZZZ_FMT(DHD_EVENT_BUFPOST, " dhd_prot_rxbufpost_ctrl event pktid<%u> phyaddr<0x%x>")
	BUZZZ_FMT(DHD_PROC_MSG_TYPE, " dhd_process_msgtype msg<0x%x> epoch<%u>")
	BUZZZ_FMT(DHD_BUS_RXCTL_ONE, "dhd_bus_rxctl prev resplen<%u> pktid<%u>")
	BUZZZ_FMT(DHD_BUS_RXCTL_TWO, "dhd_bus_rxctl cur  resplen<%u> pktid<%u>")
}

#define BUZZZ_LOG(ID, N, ARG...)    dhd_buzzz_log ##N(BUZZZ_EVT__ ##ID, ##ARG)

#else  /* DHD_BUZZZ_LOG_ENABLED */
/*
 * Broadcom logging system - Empty implementaiton
 */

#define dhd_buzzz_attach()              do { /* noop */ } while (0)
#define dhd_buzzz_detach()              do { /* noop */ } while (0)
#define dhd_buzzz_panic(x)              do { /* noop */ } while (0)
#define BUZZZ_LOG(ID, N, ARG...)    do { /* noop */ } while (0)

#endif /* DHD_BUZZZ_LOG_ENABLED */

#endif /* _DHD_BUZZZ_H_INCLUDED_ */