blob: b15f7ce6ab61046e95072d96c3d7b3b122f2bd3e [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Jeff Johnson32d95a32012-09-10 13:15:23 -07002 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -07003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/**=========================================================================
23
24 \file limTrace.c
25
26 \brief implementation for trace related APIs
27
28 \author Sunit Bhatia
29
30 Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved.
31
32 Qualcomm Confidential and Proprietary.
33
34 ========================================================================*/
35
36
37/*--------------------------------------------------------------------------
38 Include Files
39 ------------------------------------------------------------------------*/
40
41#ifdef FEATURE_WLAN_INTEGRATED_SOC
42#include "aniGlobal.h" //for tpAniSirGlobal
43#endif
44
45#include "limTrace.h"
46#include "limTimerUtils.h"
47
48
49#ifdef LIM_TRACE_RECORD
50tANI_U32 gMgmtFrameStats[14];
51
52
53
54static tANI_U8* __limTraceGetTimerString( tANI_U16 timerId )
55{
56 switch( timerId )
57 {
58 CASE_RETURN_STRING(eLIM_MIN_CHANNEL_TIMER);
59 CASE_RETURN_STRING(eLIM_MAX_CHANNEL_TIMER);
60 CASE_RETURN_STRING(eLIM_JOIN_FAIL_TIMER);
61 CASE_RETURN_STRING(eLIM_AUTH_FAIL_TIMER);
62 CASE_RETURN_STRING(eLIM_AUTH_RESP_TIMER);
63 CASE_RETURN_STRING(eLIM_ASSOC_FAIL_TIMER);
64 CASE_RETURN_STRING(eLIM_REASSOC_FAIL_TIMER);
65 CASE_RETURN_STRING(eLIM_PRE_AUTH_CLEANUP_TIMER);
66 CASE_RETURN_STRING(eLIM_HEART_BEAT_TIMER);
67 CASE_RETURN_STRING(eLIM_BACKGROUND_SCAN_TIMER);
68#ifdef ANI_PRODUCT_TYPE_AP
69 CASE_RETURN_STRING(eLIM_LEARN_INTERVAL_TIMER);
70#endif
71 CASE_RETURN_STRING(eLIM_KEEPALIVE_TIMER);
72 CASE_RETURN_STRING(eLIM_CNF_WAIT_TIMER);
73 CASE_RETURN_STRING(eLIM_AUTH_RSP_TIMER);
74 CASE_RETURN_STRING(eLIM_UPDATE_OLBC_CACHE_TIMER);
75 CASE_RETURN_STRING(eLIM_PROBE_AFTER_HB_TIMER);
76 CASE_RETURN_STRING(eLIM_ADDTS_RSP_TIMER);
77 CASE_RETURN_STRING(eLIM_CHANNEL_SWITCH_TIMER);
78 CASE_RETURN_STRING(eLIM_LEARN_DURATION_TIMER);
79 CASE_RETURN_STRING(eLIM_QUIET_TIMER);
80 CASE_RETURN_STRING(eLIM_QUIET_BSS_TIMER);
81 default:
82 return( "UNKNOWN" );
83 break;
84 }
85}
86
87
88static tANI_U8* __limTraceGetMgmtDropReasonString( tANI_U16 dropReason )
89{
90
91 switch( dropReason )
92 {
93 CASE_RETURN_STRING(eMGMT_DROP_INFRA_BCN_IN_IBSS);
94 CASE_RETURN_STRING(eMGMT_DROP_INVALID_SIZE);
95 CASE_RETURN_STRING(eMGMT_DROP_NON_SCAN_MODE_FRAME);
96 CASE_RETURN_STRING(eMGMT_DROP_NOT_LAST_IBSS_BCN);
97 CASE_RETURN_STRING(eMGMT_DROP_NO_DROP);
98 CASE_RETURN_STRING(eMGMT_DROP_SCAN_MODE_FRAME);
99
100 default:
101 return( "UNKNOWN" );
102 break;
103 }
104}
105
106
107
108void limTraceInit(tpAniSirGlobal pMac)
109{
110 macTraceRegister(pMac, VOS_MODULE_ID_PE, limTraceDump);
111}
112
113
114
115
116void limTraceDump(tpAniSirGlobal pMac, tpTraceRecord pRecord, tANI_U16 recIndex)
117{
118
119 static char *frameSubtypeStr[14] =
120 {
121 "Association request",
122 "Association response",
123 "Reassociation request",
124 "Reassociation response",
125 "Probe request",
126 "Probe response",
127 NULL,
128 NULL,
129 "Beacon",
130 "ATIM",
131 "Disassocation",
132 "Authentication",
133 "Deauthentication",
134 "Action"
135 };
136
137 switch (pRecord->code) {
138 case TRACE_CODE_MLM_STATE:
139 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
140 "MLM State:", limTraceGetMlmStateString((tANI_U16)pRecord->data), pRecord->data );
141 break;
142 case TRACE_CODE_SME_STATE:
143 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
144 "SME State:", limTraceGetSmeStateString((tANI_U16)pRecord->data), pRecord->data );
145 break;
146 case TRACE_CODE_TX_MGMT:
147 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
148 "TX Mgmt:", frameSubtypeStr[pRecord->data], pRecord->data );
149 break;
150
151 case TRACE_CODE_RX_MGMT:
152 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(%d) SN: %d \n", recIndex, pRecord->time, pRecord->session,
153 "RX Mgmt:", frameSubtypeStr[LIM_TRACE_GET_SUBTYPE(pRecord->data)],
154 LIM_TRACE_GET_SUBTYPE(pRecord->data),
155 LIM_TRACE_GET_SSN(pRecord->data) );
156 break;
157 case TRACE_CODE_RX_MGMT_DROP:
158 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(%d) \n", recIndex, pRecord->time, pRecord->session,
159 "Drop RX Mgmt:", __limTraceGetMgmtDropReasonString((tANI_U16)pRecord->data), pRecord->data);
160 break;
161
162
163 case TRACE_CODE_RX_MGMT_TSF:
164 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s0x%x(%d) \n", recIndex, pRecord->time, pRecord->session,
165 "RX Mgmt TSF:", " ", pRecord->data, pRecord->data );
166 break;
167
168 case TRACE_CODE_TX_COMPLETE:
169 limLog(pMac, LOGE, "%04d %012u S%d %-14s \n", recIndex, pRecord->time, pRecord->session,
170 "TX Complete" );
171 break;
172
173 case TRACE_CODE_TX_SME_MSG:
174 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
175 "TX SME Msg:", macTraceGetSmeMsgString((tANI_U16)pRecord->data), pRecord->data );
176 break;
177 case TRACE_CODE_RX_SME_MSG:
178 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
179 LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX Sme Msg:",
180 macTraceGetSmeMsgString((tANI_U16)pRecord->data), pRecord->data );
181 break;
182
183 case TRACE_CODE_TX_HAL_MSG:
184 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
185 "TX HAL Msg:", macTraceGetHalMsgString((tANI_U16)pRecord->data), pRecord->data );
186 break;
187
188 case TRACE_CODE_RX_HAL_MSG:
189 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
190 LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX HAL Msg:",
191 macTraceGetHalMsgString((tANI_U16)pRecord->data), pRecord->data );
192 break;
193
194 case TRACE_CODE_TX_LIM_MSG:
195 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
196 "TX LIM Msg:", macTraceGetLimMsgString((tANI_U16)pRecord->data), pRecord->data );
197 break;
198 case TRACE_CODE_RX_LIM_MSG:
199 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
200 LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX LIM Msg",
201 macTraceGetLimMsgString((tANI_U16)pRecord->data), pRecord->data );
202 break;
203 case TRACE_CODE_TX_CFG_MSG:
204 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
205 "TX CFG Msg:", macTraceGetCfgMsgString((tANI_U16)pRecord->data), pRecord->data );
206 break;
207 case TRACE_CODE_RX_CFG_MSG:
208 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
209 LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX CFG Msg:",
210 macTraceGetCfgMsgString((tANI_U16)MAC_TRACE_GET_MSG_ID(pRecord->data)),
211 pRecord->data );
212 break;
213
214 case TRACE_CODE_TIMER_ACTIVATE:
215 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
216 "Timer Actvtd", __limTraceGetTimerString((tANI_U16)pRecord->data), pRecord->data );
217 break;
218 case TRACE_CODE_TIMER_DEACTIVATE:
219 limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
220 "Timer DeActvtd", __limTraceGetTimerString((tANI_U16)pRecord->data), pRecord->data );
221 break;
222
223 default :
224 limLog(pMac, LOGE, "%04d %012u S%d %-14s(%d) (0x%x) \n", recIndex, pRecord->time, pRecord->session,
225 "Unknown Code", pRecord->code, pRecord->data );
226 break;
227 }
228}
229
230
231void macTraceMsgTx(tpAniSirGlobal pMac, tANI_U8 session, tANI_U32 data)
232{
233
234 tANI_U16 msgId = (tANI_U16)MAC_TRACE_GET_MSG_ID(data);
235 tANI_U8 moduleId = (tANI_U8)MAC_TRACE_GET_MODULE_ID(data);
236
237 switch(moduleId)
238 {
239 case SIR_LIM_MODULE_ID:
240 if(msgId >= SIR_LIM_ITC_MSG_TYPES_BEGIN)
241 macTrace(pMac, TRACE_CODE_TX_LIM_MSG, session, data);
242 else
243 macTrace(pMac, TRACE_CODE_TX_SME_MSG, session, data);
244 break;
245 case SIR_WDA_MODULE_ID:
246 macTrace(pMac, TRACE_CODE_TX_HAL_MSG, session, data);
247 break;
248 case SIR_CFG_MODULE_ID:
249 macTrace(pMac, TRACE_CODE_TX_CFG_MSG, session, data);
250 break;
251 }
252}
253
254
255void macTraceMsgTxNew(tpAniSirGlobal pMac, tANI_U8 module, tANI_U8 session, tANI_U32 data)
256{
257 tANI_U16 msgId = (tANI_U16)MAC_TRACE_GET_MSG_ID(data);
258 tANI_U8 moduleId = (tANI_U8)MAC_TRACE_GET_MODULE_ID(data);
259
260 switch(moduleId)
261 {
262 case SIR_LIM_MODULE_ID:
263 if(msgId >= SIR_LIM_ITC_MSG_TYPES_BEGIN)
264 macTraceNew(pMac, module, TRACE_CODE_TX_LIM_MSG, session, data);
265 else
266 macTraceNew(pMac, module, TRACE_CODE_TX_SME_MSG, session, data);
267 break;
268 case SIR_WDA_MODULE_ID:
269 macTraceNew(pMac, module, TRACE_CODE_TX_HAL_MSG, session, data);
270 break;
271 case SIR_CFG_MODULE_ID:
272 macTraceNew(pMac, module, TRACE_CODE_TX_CFG_MSG, session, data);
273 break;
274 }
275}
276
277/*
278* bit31: Rx message defferred or not
279* bit 0-15: message ID:
280*/
281void macTraceMsgRx(tpAniSirGlobal pMac, tANI_U8 session, tANI_U32 data)
282{
283 tANI_U16 msgId = (tANI_U16)MAC_TRACE_GET_MSG_ID(data);
284 tANI_U8 moduleId = (tANI_U8)MAC_TRACE_GET_MODULE_ID(data);
285
286
287 switch(moduleId)
288 {
289 case SIR_LIM_MODULE_ID:
290 if(msgId >= SIR_LIM_ITC_MSG_TYPES_BEGIN)
291 macTrace(pMac, TRACE_CODE_RX_LIM_MSG, session, data);
292 else
293 macTrace(pMac, TRACE_CODE_RX_SME_MSG, session, data);
294 break;
295 case SIR_WDA_MODULE_ID:
296 macTrace(pMac, TRACE_CODE_RX_HAL_MSG, session, data);
297 break;
298 case SIR_CFG_MODULE_ID:
299 macTrace(pMac, TRACE_CODE_RX_CFG_MSG, session, data);
300 break;
301 }
302}
303
304
305
306/*
307* bit31: Rx message defferred or not
308* bit 0-15: message ID:
309*/
310void macTraceMsgRxNew(tpAniSirGlobal pMac, tANI_U8 module, tANI_U8 session, tANI_U32 data)
311{
312 tANI_U16 msgId = (tANI_U16)MAC_TRACE_GET_MSG_ID(data);
313 tANI_U8 moduleId = (tANI_U8)MAC_TRACE_GET_MODULE_ID(data);
314
315
316 switch(moduleId)
317 {
318 case SIR_LIM_MODULE_ID:
319 if(msgId >= SIR_LIM_ITC_MSG_TYPES_BEGIN)
320 macTraceNew(pMac, module, TRACE_CODE_RX_LIM_MSG, session, data);
321 else
322 macTraceNew(pMac, module, TRACE_CODE_RX_SME_MSG, session, data);
323 break;
324 case SIR_WDA_MODULE_ID:
325 macTraceNew(pMac, module, TRACE_CODE_RX_HAL_MSG, session, data);
326 break;
327 case SIR_CFG_MODULE_ID:
328 macTraceNew(pMac, module, TRACE_CODE_RX_CFG_MSG, session, data);
329 break;
330 }
331}
332
333
334
335tANI_U8* limTraceGetMlmStateString( tANI_U32 mlmState )
336{
337 switch( mlmState )
338 {
339 CASE_RETURN_STRING( eLIM_MLM_OFFLINE_STATE);
340 CASE_RETURN_STRING( eLIM_MLM_IDLE_STATE);
341 CASE_RETURN_STRING( eLIM_MLM_WT_PROBE_RESP_STATE);
342 CASE_RETURN_STRING( eLIM_MLM_PASSIVE_SCAN_STATE);
343 CASE_RETURN_STRING( eLIM_MLM_WT_JOIN_BEACON_STATE);
344 CASE_RETURN_STRING( eLIM_MLM_JOINED_STATE);
345 CASE_RETURN_STRING( eLIM_MLM_BSS_STARTED_STATE);
346 CASE_RETURN_STRING( eLIM_MLM_WT_AUTH_FRAME2_STATE);
347 CASE_RETURN_STRING( eLIM_MLM_WT_AUTH_FRAME3_STATE);
348 CASE_RETURN_STRING( eLIM_MLM_WT_AUTH_FRAME4_STATE);
349 CASE_RETURN_STRING( eLIM_MLM_AUTH_RSP_TIMEOUT_STATE);
350 CASE_RETURN_STRING( eLIM_MLM_AUTHENTICATED_STATE);
351 CASE_RETURN_STRING( eLIM_MLM_WT_ASSOC_RSP_STATE);
352 CASE_RETURN_STRING( eLIM_MLM_WT_REASSOC_RSP_STATE);
353 CASE_RETURN_STRING( eLIM_MLM_ASSOCIATED_STATE);
354 CASE_RETURN_STRING( eLIM_MLM_REASSOCIATED_STATE);
355 CASE_RETURN_STRING( eLIM_MLM_LINK_ESTABLISHED_STATE);
356 CASE_RETURN_STRING( eLIM_MLM_WT_ASSOC_CNF_STATE);
357 CASE_RETURN_STRING( eLIM_MLM_LEARN_STATE);
358 CASE_RETURN_STRING( eLIM_MLM_WT_ADD_BSS_RSP_STATE);
359 CASE_RETURN_STRING( eLIM_MLM_WT_DEL_BSS_RSP_STATE);
360 CASE_RETURN_STRING( eLIM_MLM_WT_ADD_BSS_RSP_ASSOC_STATE);
361 CASE_RETURN_STRING( eLIM_MLM_WT_ADD_BSS_RSP_PREASSOC_STATE);
362 CASE_RETURN_STRING( eLIM_MLM_WT_ADD_BSS_RSP_REASSOC_STATE);
363 CASE_RETURN_STRING( eLIM_MLM_WT_ADD_STA_RSP_STATE);
364 CASE_RETURN_STRING( eLIM_MLM_WT_DEL_STA_RSP_STATE);
365 CASE_RETURN_STRING( eLIM_MLM_WT_ASSOC_DEL_STA_RSP_STATE);
366 CASE_RETURN_STRING( eLIM_MLM_WT_SET_BSS_KEY_STATE);
367 CASE_RETURN_STRING( eLIM_MLM_WT_SET_STA_KEY_STATE);
368 CASE_RETURN_STRING( eLIM_MLM_WT_SET_STA_BCASTKEY_STATE);
369 CASE_RETURN_STRING( eLIM_MLM_WT_ADDBA_RSP_STATE);
370 CASE_RETURN_STRING( eLIM_MLM_WT_REMOVE_BSS_KEY_STATE);
371 CASE_RETURN_STRING( eLIM_MLM_WT_REMOVE_STA_KEY_STATE);
372 CASE_RETURN_STRING( eLIM_MLM_WT_SET_MIMOPS_STATE);
373 default:
374 return( "UNKNOWN" );
375 break;
376 }
377}
378
379
380tANI_U8* limTraceGetSmeStateString( tANI_U32 smeState )
381{
382 switch( smeState )
383 {
384
385 CASE_RETURN_STRING(eLIM_SME_OFFLINE_STATE);
386 CASE_RETURN_STRING(eLIM_SME_IDLE_STATE);
387 CASE_RETURN_STRING(eLIM_SME_SUSPEND_STATE);
388 CASE_RETURN_STRING(eLIM_SME_WT_SCAN_STATE);
389 CASE_RETURN_STRING(eLIM_SME_WT_JOIN_STATE);
390 CASE_RETURN_STRING(eLIM_SME_WT_AUTH_STATE);
391 CASE_RETURN_STRING(eLIM_SME_WT_ASSOC_STATE);
392 CASE_RETURN_STRING(eLIM_SME_WT_REASSOC_STATE);
393 CASE_RETURN_STRING(eLIM_SME_WT_REASSOC_LINK_FAIL_STATE);
394 CASE_RETURN_STRING(eLIM_SME_JOIN_FAILURE_STATE);
395 CASE_RETURN_STRING(eLIM_SME_ASSOCIATED_STATE);
396 CASE_RETURN_STRING(eLIM_SME_REASSOCIATED_STATE);
397 CASE_RETURN_STRING(eLIM_SME_LINK_EST_STATE);
398 CASE_RETURN_STRING(eLIM_SME_LINK_EST_WT_SCAN_STATE);
399 CASE_RETURN_STRING(eLIM_SME_WT_PRE_AUTH_STATE);
400 CASE_RETURN_STRING(eLIM_SME_WT_DISASSOC_STATE);
401 CASE_RETURN_STRING(eLIM_SME_WT_DEAUTH_STATE);
402 CASE_RETURN_STRING(eLIM_SME_WT_START_BSS_STATE);
403 CASE_RETURN_STRING(eLIM_SME_WT_STOP_BSS_STATE);
404 CASE_RETURN_STRING(eLIM_SME_NORMAL_STATE);
405 CASE_RETURN_STRING(eLIM_SME_CHANNEL_SCAN_STATE);
406 CASE_RETURN_STRING(eLIM_SME_NORMAL_CHANNEL_SCAN_STATE);
407 default:
408 return( "UNKNOWN" );
409 break;
410 }
411}
412
413
414
415
416
417
418#endif