v_VOID_t vos_mem_dma_free( v_VOID_t *ptr ) { if (ptr != NULL) { VOS_STATUS vosStatus; struct s_vos_mem_struct* memStruct = ((struct s_vos_mem_struct*)ptr) - 1; spin_lock(&vosMemList.lock); vosStatus = hdd_list_remove_node(&vosMemList, &memStruct->pNode); spin_unlock(&vosMemList.lock); if(VOS_STATUS_SUCCESS == vosStatus) { if(0 == vos_mem_compare(memStruct->header, &WLAN_MEM_HEADER[0], sizeof(WLAN_MEM_HEADER)) ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "Memory Header is corrupted. MemInfo: Filename %s, LineNum %d", memStruct->fileName, (int)memStruct->lineNum); } if(0 == vos_mem_compare( (v_U8_t*)ptr + memStruct->size, &WLAN_MEM_TAIL[0], sizeof(WLAN_MEM_TAIL ) ) ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "Memory Trailer is corrupted. MemInfo: Filename %s, LineNum %d", memStruct->fileName, (int)memStruct->lineNum); } kfree((v_VOID_t*)memStruct); } } }
v_VOID_t vos_mem_free( v_VOID_t *ptr ) { unsigned long IrqFlags; if (ptr == NULL) return; if (!memory_dbug_flag) { #ifdef CONFIG_WCNSS_MEM_PRE_ALLOC if (wcnss_prealloc_put(ptr)) return; #endif kfree(ptr); } else { VOS_STATUS vosStatus; struct s_vos_mem_struct* memStruct = ((struct s_vos_mem_struct*)ptr) - 1; spin_lock_irqsave(&vosMemList.lock, IrqFlags); vosStatus = hdd_list_remove_node(&vosMemList, &memStruct->pNode); spin_unlock_irqrestore(&vosMemList.lock, IrqFlags); if(VOS_STATUS_SUCCESS == vosStatus) { if(0 == vos_mem_compare(memStruct->header, &WLAN_MEM_HEADER[0], sizeof(WLAN_MEM_HEADER)) ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "Memory Header is corrupted. MemInfo: Filename %s, LineNum %d", memStruct->fileName, (int)memStruct->lineNum); } if(0 == vos_mem_compare( (v_U8_t*)ptr + memStruct->size, &WLAN_MEM_TAIL[0], sizeof(WLAN_MEM_TAIL ) ) ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "Memory Trailer is corrupted. MemInfo: Filename %s, LineNum %d", memStruct->fileName, (int)memStruct->lineNum); } kfree((v_VOID_t*)memStruct); } else { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: Unallocated memory (double free?)", __func__); VOS_BUG(0); } } }
VOS_STATUS vos_timer_destroy ( vos_timer_t *timer ) { VOS_STATUS vStatus=VOS_STATUS_SUCCESS; unsigned long flags; // Check for invalid pointer if ( NULL == timer ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Null timer pointer being passed",__func__); VOS_ASSERT(0); return VOS_STATUS_E_FAULT; } // Check if timer refers to an uninitialized object if ( LINUX_TIMER_COOKIE != timer->platformInfo.cookie ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Cannot destroy uninitialized timer",__func__); return VOS_STATUS_E_INVAL; } spin_lock_irqsave(&vosTimerList.lock, flags); vStatus = hdd_list_remove_node(&vosTimerList, &timer->ptimerNode->pNode); spin_unlock_irqrestore(&vosTimerList.lock, flags); if(vStatus != VOS_STATUS_SUCCESS) { VOS_ASSERT(0); return VOS_STATUS_E_INVAL; } vos_mem_free(timer->ptimerNode); spin_lock_irqsave( &timer->platformInfo.spinlock,flags ); switch ( timer->state ) { case VOS_TIMER_STATE_STARTING: vStatus = VOS_STATUS_E_BUSY; break; case VOS_TIMER_STATE_RUNNING: /* Stop the timer first */ del_timer(&(timer->platformInfo.Timer)); vStatus = VOS_STATUS_SUCCESS; break; case VOS_TIMER_STATE_STOPPED: vStatus = VOS_STATUS_SUCCESS; break; case VOS_TIMER_STATE_UNUSED: vStatus = VOS_STATUS_E_ALREADY; break; default: vStatus = VOS_STATUS_E_FAULT; break; } if ( VOS_STATUS_SUCCESS == vStatus ) { timer->platformInfo.cookie = LINUX_INVALID_TIMER_COOKIE; timer->state = VOS_TIMER_STATE_UNUSED; spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags ); return vStatus; } spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags ); VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Cannot destroy timer in state = %d",__func__, timer->state); VOS_ASSERT(0); return vStatus; }