static int netdev_close(struct net_device *pnetdev) { struct rtw_adapter *padapter = netdev_priv(pnetdev); RT_TRACE(_module_os_intfs_c_, _drv_info_, ("+871x_drv - drv_close\n")); padapter->net_closed = true; if (padapter->pwrctrlpriv.rf_pwrstate == rf_on) { DBG_8723A("(2)871x_drv - drv_close, bup =%d, " "hw_init_completed =%d\n", padapter->bup, padapter->hw_init_completed); /* s1. */ if (pnetdev) { if (!rtw_netif_queue_stopped(pnetdev)) netif_tx_stop_all_queues(pnetdev); } /* s2. */ LeaveAllPowerSaveMode23a(padapter); rtw_disassoc_cmd23a(padapter, 500, false); /* s2-2. indicate disconnect to os */ rtw_indicate_disconnect23a(padapter); /* s2-3. */ rtw_free_assoc_resources23a(padapter, 1); /* s2-4. */ rtw_free_network_queue23a(padapter); /* Close LED */ rtw_led_control(padapter, LED_CTL_POWER_OFF); } rtw_scan_abort23a(padapter); RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-871x_drv - drv_close\n")); DBG_8723A("-871x_drv - drv_close, bup =%d\n", padapter->bup); return 0; }
static void sreset_stop_adapter(struct rtw_adapter *padapter) { struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; if (padapter == NULL) return; DBG_8723A("%s(%s)\n", __func__, padapter->pnetdev->name); if (!rtw_netif_queue_stopped(padapter->pnetdev)) netif_tx_stop_all_queues(padapter->pnetdev); rtw_cancel_all_timer23a(padapter); /* TODO: OS and HCI independent */ tasklet_kill(&pxmitpriv->xmit_tasklet); if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) rtw_scan_abort23a(padapter); if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) rtw23a_join_to_handler((unsigned long)padapter); }