static void rtw_gspi_if1_deinit(PADAPTER if1) { struct net_device *pnetdev = if1->pnetdev; struct mlme_priv *pmlmepriv = &if1->mlmepriv; if (check_fwstate(pmlmepriv, _FW_LINKED)) rtw_disassoc_cmd(if1, 0, _FALSE); #ifdef CONFIG_AP_MODE free_mlme_ap_info(if1); #ifdef CONFIG_HOSTAPD_MLME hostapd_mode_unload(if1); #endif #endif rtw_cancel_all_timer(if1); rtw_dev_unload(if1); DBG_871X("+r871xu_dev_remove, hw_init_completed=%d\n", if1->hw_init_completed); rtw_handle_dualmac(if1, 0); #ifdef CONFIG_IOCTL_CFG80211 if (if1->rtw_wdev) { //rtw_wdev_unregister(if1->rtw_wdev); rtw_wdev_free(if1->rtw_wdev); } #endif rtw_free_drv_sw(if1); if(pnetdev) rtw_free_netdev(pnetdev); }
static void rtw_gspi_if1_deinit(PADAPTER if1) { struct net_device *pnetdev = if1->pnetdev; struct mlme_priv *pmlmepriv = &if1->mlmepriv; #if defined(CONFIG_HAS_EARLYSUSPEND ) || defined(CONFIG_ANDROID_POWER) rtw_unregister_early_suspend(&if1->pwrctrlpriv); #endif rtw_pm_set_ips(if1, IPS_NONE); rtw_pm_set_lps(if1, PS_MODE_ACTIVE); LeaveAllPowerSaveMode(if1); if (check_fwstate(pmlmepriv, _FW_LINKED)) disconnect_hdl(if1, NULL); #ifdef CONFIG_AP_MODE free_mlme_ap_info(if1); #ifdef CONFIG_HOSTAPD_MLME hostapd_mode_unload(if1); #endif #endif if(if1->DriverState != DRIVER_DISAPPEAR) { if(pnetdev) { unregister_netdev(pnetdev); //will call netdev_close() rtw_proc_remove_one(pnetdev); } } rtw_cancel_all_timer(if1); rtw_dev_unload(if1); DBG_871X("+r871xu_dev_remove, hw_init_completed=%d\n", if1->hw_init_completed); rtw_handle_dualmac(if1, 0); #ifdef CONFIG_IOCTL_CFG80211 rtw_wdev_free(if1->rtw_wdev); #endif rtw_free_drv_sw(if1); if(pnetdev) rtw_free_netdev(pnetdev); }
static void rtw_dev_remove(struct sdio_func *func) { PADAPTER padapter; struct net_device *pnetdev; #ifdef CONFIG_IOCTL_CFG80211 struct wireless_dev *wdev; #endif _func_enter_; RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_dev_remove\n")); padapter = ((struct dvobj_priv*)sdio_get_drvdata(func))->padapter; #ifdef CONFIG_IOCTL_CFG80211 wdev = padapter->rtw_wdev; #endif #if defined(CONFIG_HAS_EARLYSUSPEND ) || defined(CONFIG_ANDROID_POWER) rtw_unregister_early_suspend(&padapter->pwrctrlpriv); #endif if (padapter->bSurpriseRemoved == _FALSE) { // test surprise remove int err; sdio_claim_host(func); sdio_readb(func, 0, &err); sdio_release_host(func); if (err == -ENOMEDIUM) { padapter->bSurpriseRemoved = _TRUE; DBG_871X(KERN_NOTICE "%s: device had been removed!\n", __func__); } } #ifdef CONFIG_HOSTAPD_MLME hostapd_mode_unload(padapter); #endif LeaveAllPowerSaveMode(padapter); pnetdev = (struct net_device*)padapter->pnetdev; if (pnetdev) { unregister_netdev(pnetdev); //will call netdev_close() RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("rtw_dev_remove: unregister netdev\n")); #ifdef CONFIG_PROC_DEBUG rtw_proc_remove_one(pnetdev); #endif } else { RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("rtw_dev_remove: NO padapter->pnetdev!\n")); } rtw_cancel_all_timer(padapter); rtw_dev_unload(padapter); // interface deinit sdio_deinit(padapter); RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("rtw_dev_remove: deinit intf complete!\n")); rtw_free_drv_sw(padapter); #ifdef CONFIG_IOCTL_CFG80211 rtw_wdev_free(wdev); #endif RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("-rtw_dev_remove\n")); _func_exit_; }