int netdev_close(struct net_device *pnetdev) { struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev); struct dvobj_priv *dvobj = adapter_to_dvobj(padapter); RT_TRACE(_module_os_intfs_c_, _drv_info_, ("+88eu_drv - drv_close\n")); if (padapter->pwrctrlpriv.bInternalAutoSuspend) { if (padapter->pwrctrlpriv.rf_pwrstate == rf_off) padapter->pwrctrlpriv.ps_flag = true; } padapter->net_closed = true; if (padapter->pwrctrlpriv.rf_pwrstate == rf_on) { DBG_88E("(2)88eu_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)) rtw_netif_stop_queue(pnetdev); } /* s2. */ LeaveAllPowerSaveMode(padapter); rtw_disassoc_cmd(padapter, 500, false); /* s2-2. indicate disconnect to os */ rtw_indicate_disconnect(padapter); /* s2-3. */ rtw_free_assoc_resources(padapter, 1); /* s2-4. */ rtw_free_network_queue(padapter, true); /* Close LED */ rtw_led_control(padapter, LED_CTL_POWER_OFF); } nat25_db_cleanup(padapter); #ifdef CONFIG_88EU_P2P rtw_p2p_enable(padapter, P2P_ROLE_DISABLE); #endif /* CONFIG_88EU_P2P */ kfree(dvobj->firmware.szFwBuffer); dvobj->firmware.szFwBuffer = NULL; RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-88eu_drv - drv_close\n")); DBG_88E("-88eu_drv - drv_close, bup =%d\n", padapter->bup); return 0; }
//extern int rfpwrstate_check(_adapter *padapter); static int netdev_close(struct net_device *pnetdev) { _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev); RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - drv_close\n")); if(padapter->pwrctrlpriv.bInternalAutoSuspend == _TRUE) { //rfpwrstate_check(padapter); if(padapter->pwrctrlpriv.rf_pwrstate == rf_off) padapter->pwrctrlpriv.ps_flag = _TRUE; } padapter->net_closed = _TRUE; /* if(!padapter->hw_init_completed) { DBG_8192C("(1)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed); padapter->bDriverStopped = _TRUE; rtw_dev_unload(padapter); } else*/ if(padapter->pwrctrlpriv.rf_pwrstate == rf_on){ DBG_8192C("(2)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed); //s1. if(pnetdev) { if (!netif_queue_stopped(pnetdev)) netif_stop_queue(pnetdev); } #ifndef CONFIG_ANDROID //s2. //s2-1. issue rtw_disassoc_cmd to fw rtw_disassoc_cmd(padapter); //s2-2. indicate disconnect to os rtw_indicate_disconnect(padapter); //s2-3. rtw_free_assoc_resources(padapter, 1); //s2-4. rtw_free_network_queue(padapter,_TRUE); #endif // Close LED rtw_led_control(padapter, LED_CTL_POWER_OFF); } #ifdef CONFIG_BR_EXT //if (OPMODE & (WIFI_STATION_STATE | WIFI_ADHOC_STATE)) { //void nat25_db_cleanup(_adapter *priv); nat25_db_cleanup(padapter); } #endif // CONFIG_BR_EXT #ifdef CONFIG_P2P #ifdef CONFIG_IOCTL_CFG80211 if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _TRUE) wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _FALSE; #endif rtw_p2p_enable(padapter, P2P_ROLE_DISABLE); #endif //CONFIG_P2P #ifdef CONFIG_IOCTL_CFG80211 DBG_871X("call rtw_indicate_scan_done when drv_close\n"); rtw_indicate_scan_done(padapter, _TRUE); padapter->rtw_wdev->iftype = NL80211_IFTYPE_MONITOR; //set this at the end #endif RT_TRACE(_module_os_intfs_c_,_drv_info_,("-871x_drv - drv_close\n")); DBG_8192C("-871x_drv - drv_close, bup=%d\n", padapter->bup); return 0; }