1 /******************************************************************************
2 *
3 * Copyright(c) 2020 Realtek Corporation.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 *****************************************************************************/
15 #pragma once
16
17 #ifndef PHL_WPP_H
18 #define PHL_WPP_H
19
20 #define PHL_WPP_CONTROL_GUID\
21 WPP_DEFINE_CONTROL_GUID( \
22 rtPhlGuid, (16D085D0,69AD,41FD,94E1,77667C0C6664), \
23 WPP_DEFINE_BIT(COMP_PHL_DBG) \
24 WPP_DEFINE_BIT(COMP_PHL_RECV) \
25 WPP_DEFINE_BIT(COMP_PHL_XMIT) \
26 WPP_DEFINE_BIT(COMP_PHL_MAC) \
27 WPP_DEFINE_BIT(COMP_PHL_SOUND)\
28 WPP_DEFINE_BIT(COMP_PHL_WOW)\
29 WPP_DEFINE_BIT(COMP_PHL_TRIG)\
30 WPP_DEFINE_BIT(COMP_PHL_PKTOFLD)\
31 WPP_DEFINE_BIT(COMP_PHL_FSM)\
32 WPP_DEFINE_BIT(COMP_PHL_PS)\
33 WPP_DEFINE_BIT(COMP_PHL_PSTS)\
34 WPP_DEFINE_BIT(COMP_PHL_LED)\
35 WPP_DEFINE_BIT(COMP_PHL_BB)\
36 WPP_DEFINE_BIT(COMP_PHL_RF)\
37 WPP_DEFINE_BIT(COMP_PHL_MCC)\
38 WPP_DEFINE_BIT(COMP_PHL_P2PPS)\
39 WPP_DEFINE_BIT(COMP_PHL_ECSA)\
40 WPP_DEFINE_BIT(COMP_PHL_CMDDISP)\
41 WPP_DEFINE_BIT(COMP_PHL_BTC)\
42 WPP_DEFINE_BIT(COMP_PHL_TWT)\
43 ) \
44 HALMAC_WPP_CONTROL_GUIDS \
45 HALBB_WPP_CONTROL_GUIDS
46 //HALRF_WPP_CONTROL_GUIDS
47 /*
48 * Note that the comment blocks begin with "begin_wpp" and end with "end_wpp"
49 * will be scanned by the trace preprocessor to define our trace function.
50 */
51
52 #undef WPP_COMPID_LEVEL_ENABLED
53 #define WPP_COMPID_LEVEL_ENABLED(COMPID, LEVEL) \
54 ((WPP_CONTROL(WPP_BIT_ ## COMPID).Level >= LEVEL) && \
55 (WPP_CONTROL(WPP_BIT_ ## COMPID).Flags[WPP_FLAG_NO(WPP_BIT_ ## COMPID)] & \
56 WPP_MASK(WPP_BIT_ ## COMPID)))
57
58 #undef WPP_COMPID_LEVEL_LOGGER
59 #define WPP_COMPID_LEVEL_LOGGER(COMPID, LEVEL) \
60 (WPP_CONTROL(WPP_BIT_ ## COMPID).Logger),
61
62 #undef WPP_COMPID_LEVEL__sts_ENABLED
63 #define WPP_COMPID_LEVEL__sts_ENABLED(COMPID, LEVEL, _sts) \
64 ((WPP_CONTROL(WPP_BIT_ ## COMPID).Level >= LEVEL) && \
65 (WPP_CONTROL(WPP_BIT_ ## COMPID).Flags[WPP_FLAG_NO(WPP_BIT_ ## COMPID)] & \
66 WPP_MASK(WPP_BIT_ ## COMPID)))
67
68 #undef WPP_COMPID_LEVEL__sts_LOGGER
69 #define WPP_COMPID_LEVEL__sts_LOGGER(COMPID, LEVEL, _sts) \
70 (WPP_CONTROL(WPP_BIT_ ## COMPID).Logger),
71
72 /*
73 * begin_wpp config
74 *
75 * USEPREFIX (PHL_TRACE, "%!STDPREFIX! %s", PHL_PREFIX);
76 * FUNC PHL_TRACE{}(COMPID, LEVEL, MSG,...);
77 *
78 * FUNC PHL_DATA{}(COMPID, LEVEL, MSG,...);
79 *
80 * USEPREFIX (PHL_ERR, "%!STDPREFIX! %s ERROR\t", PHL_PREFIX);
81 * FUNC PHL_ERR{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_ERROR}(MSG,...);
82 *
83 * USEPREFIX (PHL_PRINT, "%!STDPREFIX! %s", PHL_PREFIX);
84 * FUNC PHL_PRINT{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_CRITICAL}(MSG,...);
85 *
86 * USEPREFIX (PHL_WARN, "%!STDPREFIX! %s WARN\t", PHL_PREFIX);
87 * FUNC PHL_WARN{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_WARNING}(MSG,...);
88 *
89 * USEPREFIX (PHL_INFO, "%!STDPREFIX! %s INFO\t", PHL_PREFIX);
90 * FUNC PHL_INFO{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_INFORMATION}(MSG,...);
91 *
92 * USEPREFIX (PHL_DBG, "%!STDPREFIX! %s", PHL_PREFIX);
93 * FUNC PHL_DBG{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_VERBOSE}(MSG,...);
94 *
95 * USEPREFIX (FUNCIN, "%!STDPREFIX! %s", PHL_PREFIX);
96 * FUNC FUNCIN{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_VERBOSE}();
97 * USESUFFIX(FUNCIN, "Enter %!FUNC!");
98 *
99 * USEPREFIX (FUNCOUT, "%!STDPREFIX! %s", PHL_PREFIX);
100 * FUNC FUNCOUT{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_VERBOSE}();
101 * USESUFFIX(FUNCOUT, "Leave %!FUNC!");
102 *
103 * CUSTOM_TYPE(RTW_PHL_STATUS, ItemEnum(rtw_phl_status) );
104 * USEPREFIX (FUNCIN_WSTS, "%!STDPREFIX! %s", PHL_PREFIX);
105 * FUNC FUNCIN_WSTS{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_VERBOSE}(_sts);
106 * USESUFFIX(FUNCIN_WSTS, "Enter with %!RTW_PHL_STATUS! %!FUNC!", _sts);
107 *
108 * USEPREFIX (FUNCOUT_WSTS, "%!STDPREFIX! %s", PHL_PREFIX);
109 * FUNC FUNCOUT_WSTS{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_VERBOSE}(_sts);
110 * USESUFFIX(FUNCOUT_WSTS, "Leave with %!RTW_PHL_STATUS! %!FUNC!", _sts);
111 *
112 * USEPREFIX (BB_TRACE, "%!STDPREFIX! [BB]\t");
113 * FUNC BB_TRACE{COMPID=COMP_PHL_BB, LEVEL=TRACE_LEVEL_INFORMATION}(MSG,...);
114 *
115 * USEPREFIX (BB_WARNING, "%!STDPREFIX! [BB][WARN]\t");
116 * FUNC BB_WARNING{COMPID=COMP_PHL_BB, LEVEL=TRACE_LEVEL_WARNING}(MSG,...);
117 *
118 * USEPREFIX (RF_TRACE, "%!STDPREFIX! [RF]\t");
119 * FUNC RF_TRACE{COMPID=COMP_PHL_RF, LEVEL=TRACE_LEVEL_INFORMATION}(MSG,...);
120 *
121 * USEPREFIX (RF_WARNING, "%!STDPREFIX! [RF][WARN]\t");
122 * FUNC RF_WARNING{COMPID=COMP_PHL_RF, LEVEL=TRACE_LEVEL_WARNING}(MSG,...);
123 *
124 * end_wpp
125 */
126
127 /*
128 * begin_wpp config
129 *
130 * USEPREFIX (PLTFM_MSG_ERR, "%!STDPREFIX! [MAC][ERR]\t");
131 * FUNC PLTFM_MSG_ERR{COMPID=COMP_PHL_MAC, LEVEL=TRACE_LEVEL_ERROR}(MSG,...);
132 *
133 * USEPREFIX (PLTFM_MSG_ALWAYS, "%!STDPREFIX! [MAC]\t");
134 * FUNC PLTFM_MSG_ALWAYS{COMPID=COMP_PHL_MAC, LEVEL=TRACE_LEVEL_CRITICAL}(MSG,...);
135 *
136 * USEPREFIX (PLTFM_MSG_WARN, "%!STDPREFIX! [MAC][WARN]\t");
137 * FUNC PLTFM_MSG_WARN{COMPID=COMP_PHL_MAC, LEVEL=TRACE_LEVEL_WARNING}(MSG,...);
138 *
139 * USEPREFIX (PLTFM_MSG_TRACE, "%!STDPREFIX! [MAC][TRACE]\t");
140 * FUNC PLTFM_MSG_TRACE{COMPID=COMP_PHL_MAC, LEVEL=TRACE_LEVEL_INFORMATION}(MSG,...);
141 *
142 * end_wpp
143 */
144
145 #ifdef CONFIG_FSM
146 #undef WPP_COMPID_LEVEL_FSM_ENABLED
147 #define WPP_COMPID_LEVEL_FSM_ENABLED(COMPID, LEVEL, FSM) \
148 ((!FSM || phl_fsm_dbg_level(FSM, LEVEL) || \
149 LEVEL == TRACE_LEVEL_ERROR || LEVEL == TRACE_LEVEL_WARNING) && \
150 (WPP_CONTROL(WPP_BIT_ ## COMPID).Level >= LEVEL) && \
151 (WPP_CONTROL(WPP_BIT_ ## COMPID).Flags[WPP_FLAG_NO(WPP_BIT_ ## COMPID)] & \
152 WPP_MASK(WPP_BIT_ ## COMPID)))
153
154 #undef WPP_COMPID_LEVEL_FSM_LOGGER
155 #define WPP_COMPID_LEVEL_FSM_LOGGER(COMPID, LEVEL, FSM) \
156 (WPP_CONTROL(WPP_BIT_ ## COMPID).Logger),
157 #endif
158 /*
159 * begin_wpp config
160 *
161 * USEPREFIX (FSM_ERR, "%!STDPREFIX! %s ERROR\t", PHL_PREFIX);
162 * FUNC FSM_ERR{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_ERROR}(FSM,MSG,...);
163 *
164 * USEPREFIX (FSM_WARN, "%!STDPREFIX! %s WARN\t", PHL_PREFIX);
165 * FUNC FSM_WARN{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_WARNING}(FSM,MSG,...);
166 *
167 * USEPREFIX (FSM_PRINT, "%!STDPREFIX! %s", PHL_PREFIX);
168 * FUNC FSM_PRINT{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_CRITICAL}(FSM,MSG,...);
169 *
170 * USEPREFIX (FSM_INFO, "%!STDPREFIX! %s INFO\t", PHL_PREFIX);
171 * FUNC FSM_INFO{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_INFORMATION}(FSM,MSG,...);
172 *
173 * USEPREFIX (FSM_DBG, "%!STDPREFIX! %s", PHL_PREFIX);
174 * FUNC FSM_DBG{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_VERBOSE}(FSM,MSG,...);
175 *
176 * end_wpp
177 */
178
179 #undef WPP_COMPID_LEVEL_opsfun_ENABLED
180 #define WPP_COMPID_LEVEL_opsfun_ENABLED(COMPID, LEVEL, opsfun) \
181 ((WPP_CONTROL(WPP_BIT_ ## COMPID).Level >= LEVEL) && \
182 (WPP_CONTROL(WPP_BIT_ ## COMPID).Flags[WPP_FLAG_NO(WPP_BIT_ ## COMPID)] & \
183 WPP_MASK(WPP_BIT_ ## COMPID)))
184
185 #undef WPP_COMPID_LEVEL_opsfun_LOGGER
186 #define WPP_COMPID_LEVEL_opsfun_LOGGER(COMPID, LEVEL, opsfun) \
187 (WPP_CONTROL(WPP_BIT_ ## COMPID).Logger),
188
189 /*
190 * begin_wpp config
191 *
192 * USEPREFIX (phl_ops_error_msg, "%!STDPREFIX! %s", PHL_PREFIX);
193 * FUNC phl_ops_error_msg{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_ERROR}(opsfun);
194 * USESUFFIX(phl_ops_error_msg, "### %!FUNC! - Please hook phl_hci_ops.%s ###\n", opsfun);
195 *
196 * USEPREFIX (hal_error_msg, "%!STDPREFIX! %s", PHL_PREFIX);
197 * FUNC hal_error_msg{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_ERROR}(opsfun);
198 * USESUFFIX(hal_error_msg, "### %!FUNC! - Error : Please hook hal_ops.%s ###\n", opsfun);
199 *
200 * end_wpp
201 */
202
203 /*
204 * Define the 'xstr' structure for logging buffer and length pairs
205 * and the 'log_xstr' function which returns it to create one in-place.
206 * this enables logging of complex data types.
207 */
208
209 typedef struct xstr { char * _buf; size_t _len; } xstr_t;
log_xstr(void * p,size_t l)210 __inline xstr_t log_xstr(void * p, size_t l)
211 {
212 xstr_t xs;
213 xs._buf = (char *)p;
214 xs._len = l;
215 return xs;
216 }
217
218 #define WPP_LOGHEXDUMP(x) WPP_LOGPAIR(2, &((x)._len)) WPP_LOGPAIR((x)._len, (x)._buf)
219
220 #undef WPP_COMPID_LEVEL_BUF_LEN_PREFIX_ENABLED
221 #define WPP_COMPID_LEVEL_BUF_LEN_PREFIX_ENABLED(COMPID, LEVEL, BUF, LEN, PREFIX) \
222 ((WPP_CONTROL(WPP_BIT_ ## COMPID).Level >= LEVEL) && \
223 (WPP_CONTROL(WPP_BIT_ ## COMPID).Flags[WPP_FLAG_NO(WPP_BIT_ ## COMPID)] & \
224 WPP_MASK(WPP_BIT_ ## COMPID)))
225
226 #undef WPP_COMPID_LEVEL_BUF_LEN_PREFIX_LOGGER
227 #define WPP_COMPID_LEVEL_BUF_LEN_PREFIX_LOGGER(COMPID, LEVEL, BUF, LEN, PREFIX) \
228 (WPP_CONTROL(WPP_BIT_ ## COMPID).Logger),
229
230 #define WPP_COMPID_LEVEL_BUF_LEN_PREFIX_PRE(COMPID, LEVEL, BUF, LEN, PREFIX) \
231 { if (BUF != NULL) { \
232
233 #define WPP_COMPID_LEVEL_BUF_LEN_PREFIX_POST(COMPID, LEVEL, BUF, LEN, PREFIX) \
234 /* TraceMessage() */; }}
235
236 /*
237 * begin_wpp config
238 *
239 * DEFINE_CPLX_TYPE(HEXDUMP, WPP_LOGHEXDUMP, xstr_t, ItemHEXDump, "s", _HEX_, 0, 2);
240 * USEPREFIX (debug_dump_data, "%!STDPREFIX! %s\t[debug dump] %s", PHL_PREFIX, PREFIX);
241 * FUNC debug_dump_data{COMPID=COMP_PHL_DBG, LEVEL=TRACE_LEVEL_INFORMATION}(BUF,LEN, PREFIX);
242 * USESUFFIX(debug_dump_data, "%!HEXDUMP!", log_xstr(BUF, LEN));
243 *
244 * end_wpp
245 */
246
247 #undef WPP_LEVEL_BB_COMPID_ENABLED
248 #define WPP_LEVEL_BB_COMPID_ENABLED(LEVEL, BB, COMPID) \
249 ((WPP_CONTROL(WPP_BIT_ ## COMPID).Level >= LEVEL) && \
250 (WPP_CONTROL(WPP_BIT_ ## COMPID).Flags[WPP_FLAG_NO(WPP_BIT_ ## COMPID)] & \
251 WPP_MASK(WPP_BIT_ ## COMPID)))
252
253 #undef WPP_LEVEL_BB_COMPID_LOGGER
254 #define WPP_LEVEL_BB_COMPID_LOGGER(LEVEL, BB, COMPID) \
255 (WPP_CONTROL(WPP_BIT_ ## COMPID).Logger),
256
257 /*
258 * begin_wpp config
259 *
260 * USEPREFIX (BB_DBG, "%!STDPREFIX! [BB]\t");
261 * FUNC BB_DBG{LEVEL=TRACE_LEVEL_INFORMATION}(BB, COMPID, MSG,...);
262 *
263 * end_wpp
264 */
265
266
267 #undef WPP_LEVEL_RF_COMPID_ENABLED
268 #define WPP_LEVEL_RF_COMPID_ENABLED(LEVEL, RF, COMPID) \
269 ((WPP_CONTROL(WPP_BIT_ ## COMPID).Level >= LEVEL) && \
270 (WPP_CONTROL(WPP_BIT_ ## COMPID).Flags[WPP_FLAG_NO(WPP_BIT_ ## COMPID)] & \
271 WPP_MASK(WPP_BIT_ ## COMPID)))
272
273 #undef WPP_LEVEL_RF_COMPID_LOGGER
274 #define WPP_LEVEL_RF_COMPID_LOGGER(LEVEL, RF, COMPID) \
275 (WPP_CONTROL(WPP_BIT_ ## COMPID).Logger),
276
277 /*
278 * begin_wpp config
279 *
280 * USEPREFIX (RF_DBG, "%!STDPREFIX! [RF]\t");
281 * FUNC RF_DBG{LEVEL=TRACE_LEVEL_INFORMATION}(RF, COMPID, MSG,...);
282 *
283 * end_wpp
284 */
285
286 #endif
287