/** * @brief This function frees the structure of adapter * * @param pmadapter A pointer to mlan_adapter structure * * @return N/A */ t_void wlan_free_adapter(pmlan_adapter pmadapter) { mlan_callbacks *pcb = (mlan_callbacks *) & pmadapter->callbacks; ENTER(); if (!pmadapter) { PRINTM(MERROR, "The adapter is NULL\n"); LEAVE(); return; } wlan_cancel_all_pending_cmd(pmadapter); /* Free command buffer */ PRINTM(MINFO, "Free Command buffer\n"); wlan_free_cmd_buffer(pmadapter); if (pmadapter->cmd_timer_is_set) { /* Cancel command timeout timer */ pcb->moal_stop_timer(pmadapter->pmoal_handle, pmadapter->pmlan_cmd_timer); pmadapter->cmd_timer_is_set = MFALSE; } #ifdef STA_SUPPORT PRINTM(MINFO, "Free ScanTable\n"); if (pmadapter->pscan_table) { pcb->moal_mfree(pmadapter->pmoal_handle, (t_u8 *) pmadapter->pscan_table); pmadapter->pscan_table = MNULL; } if (pmadapter->bcn_buf) { pcb->moal_mfree(pmadapter->pmoal_handle, (t_u8 *) pmadapter->bcn_buf); pmadapter->bcn_buf = MNULL; } #endif wlan_11h_cleanup(pmadapter); if (pmadapter->mp_regs_buf) { pcb->moal_mfree(pmadapter->pmoal_handle, (t_u8 *) pmadapter->mp_regs_buf); pmadapter->mp_regs_buf = MNULL; pmadapter->mp_regs = MNULL; } #if defined(SDIO_MULTI_PORT_TX_AGGR) || defined(SDIO_MULTI_PORT_RX_AGGR) wlan_free_sdio_mpa_buffers(pmadapter); #endif wlan_free_mlan_buffer(pmadapter, pmadapter->psleep_cfm); pmadapter->psleep_cfm = MNULL; LEAVE(); return; }
/** * @brief This function frees the structure of adapter * * @param priv A pointer to wlan_private structure * @return n/a */ void wlan_free_adapter(wlan_private * priv) { wlan_adapter *Adapter = priv->adapter; ENTER(); if (!Adapter) { PRINTM(INFO, "Why double free adapter?:)\n"); LEAVE(); return; } PRINTM(INFO, "Free Command buffer\n"); wlan_free_cmd_buffer(priv); PRINTM(INFO, "Free CommandTimer\n"); if (Adapter->CommandTimerIsSet) { wlan_cancel_timer(&Adapter->MrvDrvCommandTimer); Adapter->CommandTimerIsSet = FALSE; } FreeTimer(&Adapter->MrvDrvCommandTimer); #ifdef REASSOCIATION PRINTM(INFO, "Free MrvDrvTimer\n"); if (Adapter->ReassocTimerIsSet) { wlan_cancel_timer(&Adapter->MrvDrvTimer); Adapter->ReassocTimerIsSet = FALSE; } FreeTimer(&Adapter->MrvDrvTimer); #endif /* REASSOCIATION */ if (Adapter->bgScanConfig) { kfree(Adapter->bgScanConfig); Adapter->bgScanConfig = NULL; } OS_FREE_LOCK(&Adapter->CurrentTxLock); OS_FREE_LOCK(&Adapter->QueueSpinLock); PRINTM(INFO, "Free ScanTable\n"); if (Adapter->ScanTable) { kfree(Adapter->ScanTable); Adapter->ScanTable = NULL; } PRINTM(INFO, "Free Adapter\n"); /* Free the adapter object itself */ kfree(Adapter); priv->adapter = NULL; LEAVE(); }
/** * @brief This function frees the structure of adapter * * @param pmadapter A pointer to mlan_adapter structure * * @return N/A */ t_void wlan_free_adapter(pmlan_adapter pmadapter) { mlan_callbacks *pcb = (mlan_callbacks *) & pmadapter->callbacks; ENTER(); if (!pmadapter) { PRINTM(MERROR, "The adapter is MNULL.\n"); LEAVE(); return; } wlan_cancel_all_pending_cmd(pmadapter); /* Free command buffer */ PRINTM(MINFO, "Free Command buffer\n"); wlan_free_cmd_buffer(pmadapter); util_free_list_head(&pmadapter->cmd_free_q, pmadapter->callbacks.moal_free_lock); util_free_list_head(&pmadapter->cmd_pending_q, pmadapter->callbacks.moal_free_lock); util_free_list_head(&pmadapter->scan_pending_q, pmadapter->callbacks.moal_free_lock); if (pmadapter->cmd_timer_is_set) { /* Cancel command timeout timer */ pcb->moal_stop_timer(pmadapter->pmlan_cmd_timer); pmadapter->cmd_timer_is_set = MFALSE; } PRINTM(MINFO, "Free ScanTable\n"); if (pmadapter->pscan_table) { pcb->moal_mfree((t_u8 *) pmadapter->pscan_table); pmadapter->pscan_table = MNULL; } if (pmadapter->mp_regs_buf) { pcb->moal_mfree((t_u8 *) pmadapter->mp_regs_buf); pmadapter->mp_regs_buf = MNULL; pmadapter->mp_regs = MNULL; } #if defined(SDIO_MULTI_PORT_TX_AGGR) || defined(SDIO_MULTI_PORT_RX_AGGR) wlan_free_sdio_mpa_buffers(pmadapter); #endif wlan_free_mlan_buffer(&pmadapter->callbacks, pmadapter->psleep_cfm); LEAVE(); return; }
/** * @brief This function frees the structure of adapter * * @param pmadapter A pointer to mlan_adapter structure * * @return N/A */ t_void wlan_free_adapter(pmlan_adapter pmadapter) { mlan_callbacks *pcb = (mlan_callbacks *) & pmadapter->callbacks; ENTER(); if (!pmadapter) { PRINTM(ERROR, "The adapter is MNULL.\n"); LEAVE(); return; } wlan_cancel_all_pending_cmd(pmadapter); /* Free command buffer */ PRINTM(INFO, "Free Command buffer\n"); wlan_free_cmd_buffer(pmadapter); util_free_list_head(&pmadapter->cmd_free_q, pmadapter->callbacks.moal_free_lock); util_free_list_head(&pmadapter->cmd_pending_q, pmadapter->callbacks.moal_free_lock); util_free_list_head(&pmadapter->scan_pending_q, pmadapter->callbacks.moal_free_lock); if (pmadapter->cmd_timer_is_set) { /* Cancel command timeout timer */ pcb->moal_stop_timer(pmadapter->pmlan_cmd_timer); pmadapter->cmd_timer_is_set = MFALSE; } if (pmadapter->hb_host_timer_is_set) { pcb->moal_stop_timer(pmadapter->hb_host_timer); pmadapter->hb_host_timer_is_set = MFALSE; } if (pmadapter->hb_dev_timer_is_set) { pcb->moal_stop_timer(pmadapter->hb_device_timer); pmadapter->hb_dev_timer_is_set = MFALSE; } PRINTM(INFO, "Free ScanTable\n"); if (pmadapter->pscan_table) { pcb->moal_mfree((t_u8 *) pmadapter->pscan_table); pmadapter->pscan_table = MNULL; } LEAVE(); return; }