void macTraceNew(tpAniSirGlobal pMac, tANI_U8 module, tANI_U8 code, tANI_U8 session, tANI_U32 data) { tpTraceRecord rec = NULL; if(!gTraceData.enable) return; if(traceCBTable[module] == NULL) return; pe_AcquireGlobalLock( &pMac->lim ); gTraceData.num++; if (gTraceData.head == INVALID_TRACE_ADDR) { gTraceData.head = 0; gTraceData.tail = 0; } else { tANI_U32 tail = gTraceData.tail + 1; if (tail == MAX_TRACE_RECORDS) tail = 0; if (gTraceData.head == tail) { if (++gTraceData.head == MAX_TRACE_RECORDS) gTraceData.head = 0; } gTraceData.tail = tail; } rec = &gTraceTbl[gTraceData.tail]; rec->code = code; rec->session = session; rec->data = data; rec->time = vos_timer_get_system_time(); rec->module = module; gTraceData.numSinceLastDump ++; pe_ReleaseGlobalLock( &pMac->lim ); }
void macTraceNew(tpAniSirGlobal pMac, tANI_U8 module, tANI_U8 code, tANI_U8 session, tANI_U32 data) { tpTraceRecord rec = NULL; //limLog(pMac, LOGE, "mac Trace code: %d, data: %x, head: %d, tail: %d\n", code, data, gTraceData.head, gTraceData.tail); if(!gTraceData.enable) return; //If module is not registered, don't record for that module. if(traceCBTable[module] == NULL) return; pe_AcquireGlobalLock( &pMac->lim ); gTraceData.num++; if (gTraceData.head == INVALID_TRACE_ADDR) { /* first record */ gTraceData.head = 0; gTraceData.tail = 0; } else { /* queue is not empty */ tANI_U32 tail = gTraceData.tail + 1; if (tail == MAX_TRACE_RECORDS) tail = 0; if (gTraceData.head == tail) { /* full */ if (++gTraceData.head == MAX_TRACE_RECORDS) gTraceData.head = 0; } gTraceData.tail = tail; } rec = &gTraceTbl[gTraceData.tail]; rec->code = code; rec->session = session; rec->data = data; rec->time = vos_timer_get_system_time(); rec->module = module; gTraceData.numSinceLastDump ++; pe_ReleaseGlobalLock( &pMac->lim ); }
void macTraceDumpAll(tpAniSirGlobal pMac, tANI_U8 code, tANI_U8 session, tANI_U32 count) { tpTraceRecord pRecord; tANI_S32 i, tail; if(!gTraceData.enable) { VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, "Tracing Disabled \n"); return; } VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, "Total Records: %d, Head: %d, Tail: %d\n", gTraceData.num, gTraceData.head, gTraceData.tail); pe_AcquireGlobalLock( &pMac->lim ); if (gTraceData.head != INVALID_TRACE_ADDR) { i = gTraceData.head; tail = gTraceData.tail; if (count) { if (count > gTraceData.num) count = gTraceData.num; if (count > MAX_TRACE_RECORDS) count = MAX_TRACE_RECORDS; if(tail >= (count + 1)) { i = tail - count + 1; } else { i = MAX_TRACE_RECORDS - ((count + 1) - tail); } } pRecord = &gTraceTbl[i]; for (;;) { if ( (code == 0 || (code == pRecord->code)) && (traceCBTable[pRecord->module] != NULL)) traceCBTable[pRecord->module](pMac, pRecord, (tANI_U16)i); if (i == tail) break; i += 1; if (i == MAX_TRACE_RECORDS) { i = 0; pRecord = &gTraceTbl[0]; } else pRecord += 1; } gTraceData.numSinceLastDump = 0; } pe_ReleaseGlobalLock( &pMac->lim ); }
/*-------------------------------------------------------------------------- \brief peDeleteSession() - deletes the PE session given the session ID. \param pMac - pointer to global adapter context \param sessionId -session ID of the session which needs to be deleted. \sa --------------------------------------------------------------------------*/ void peDeleteSession(tpAniSirGlobal pMac, tpPESession psessionEntry) { tANI_U16 i = 0; tANI_U16 n; TX_TIMER *timer_ptr; eHalStatus lock_status = eHAL_STATUS_SUCCESS; limLog(pMac, LOGW, FL("Trying to delete a session %d Opmode %d BssIdx %d" " BSSID: " MAC_ADDRESS_STR), psessionEntry->peSessionId, psessionEntry->operMode, psessionEntry->bssIdx, MAC_ADDR_ARRAY(psessionEntry->bssId)); for (n = 0; n < pMac->lim.maxStation; n++) { timer_ptr = &pMac->lim.limTimers.gpLimCnfWaitTimer[n]; if(psessionEntry->peSessionId == timer_ptr->sessionId) { if(VOS_TRUE == tx_timer_running(timer_ptr)) { tx_timer_deactivate(timer_ptr); } } } #ifdef WLAN_FEATURE_11AC /* Unblock the MuBF for other session if the MuBf session is deleted */ if(psessionEntry->txMuBformee) { pMac->isMuBfsessionexist = FALSE; } #endif if (psessionEntry->pLimStartBssReq != NULL) { vos_mem_free( psessionEntry->pLimStartBssReq ); psessionEntry->pLimStartBssReq = NULL; } if(psessionEntry->pLimJoinReq != NULL) { vos_mem_free( psessionEntry->pLimJoinReq ); psessionEntry->pLimJoinReq = NULL; } if(psessionEntry->pLimReAssocReq != NULL) { vos_mem_free( psessionEntry->pLimReAssocReq ); psessionEntry->pLimReAssocReq = NULL; } if(psessionEntry->pLimMlmJoinReq != NULL) { vos_mem_free( psessionEntry->pLimMlmJoinReq ); psessionEntry->pLimMlmJoinReq = NULL; } lock_status = pe_AcquireGlobalLock(&pMac->lim); if (eHAL_STATUS_SUCCESS == lock_status) { if (psessionEntry->dph.dphHashTable.pHashTable != NULL) { vos_mem_vfree(psessionEntry->dph.dphHashTable.pHashTable); psessionEntry->dph.dphHashTable.pHashTable = NULL; } } pe_ReleaseGlobalLock(&pMac->lim); if(psessionEntry->dph.dphHashTable.pDphNodeArray != NULL) { vos_mem_vfree(psessionEntry->dph.dphHashTable.pDphNodeArray); psessionEntry->dph.dphHashTable.pDphNodeArray = NULL; } if(psessionEntry->gpLimPeerIdxpool != NULL) { vos_mem_vfree(psessionEntry->gpLimPeerIdxpool); psessionEntry->gpLimPeerIdxpool = NULL; } if(psessionEntry->beacon != NULL) { vos_mem_free( psessionEntry->beacon); psessionEntry->beacon = NULL; } if(psessionEntry->assocReq != NULL) { vos_mem_free( psessionEntry->assocReq); psessionEntry->assocReq = NULL; } if(psessionEntry->assocRsp != NULL) { vos_mem_free( psessionEntry->assocRsp); psessionEntry->assocRsp = NULL; } if(psessionEntry->parsedAssocReq != NULL) { // Cleanup the individual allocation first for (i=0; i < psessionEntry->dph.dphHashTable.size; i++) { if ( psessionEntry->parsedAssocReq[i] != NULL ) { if( ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame ) { vos_mem_free(((tpSirAssocReq) (psessionEntry->parsedAssocReq[i]))->assocReqFrame); ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame = NULL; ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrameLength = 0; } vos_mem_free(psessionEntry->parsedAssocReq[i]); psessionEntry->parsedAssocReq[i] = NULL; } } // Cleanup the whole block vos_mem_free(psessionEntry->parsedAssocReq); psessionEntry->parsedAssocReq = NULL; } if (NULL != psessionEntry->limAssocResponseData) { vos_mem_free( psessionEntry->limAssocResponseData); psessionEntry->limAssocResponseData = NULL; } #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR) if (NULL != psessionEntry->pLimMlmReassocRetryReq) { vos_mem_free( psessionEntry->pLimMlmReassocRetryReq); psessionEntry->pLimMlmReassocRetryReq = NULL; } #endif if (NULL != psessionEntry->pLimMlmReassocReq) { vos_mem_free( psessionEntry->pLimMlmReassocReq); psessionEntry->pLimMlmReassocReq = NULL; } #if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD) limCleanupEseCtxt(pMac, psessionEntry); #endif psessionEntry->valid = FALSE; return; }