BOOLEAN RtmpPhyNetDevExit( IN RTMP_ADAPTER *pAd, IN PNET_DEV net_dev) { // Unregister network device if (net_dev != NULL) { printk("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", net_dev->name); RtmpOSNetDevDetach(net_dev); } return TRUE; }
static VOID __devexit rt2860_remove_one(struct pci_dev *pci_dev) { PNET_DEV net_dev = pci_get_drvdata(pci_dev); VOID *pAd = NULL; ULONG csr_addr = net_dev->base_addr; GET_PAD_FROM_NET_DEV(pAd, net_dev); DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); if (pAd != NULL) { /* Unregister/Free all allocated net_device. */ RtmpPhyNetDevExit(pAd, net_dev); #ifdef RT_CFG80211_SUPPORT RTMP_DRIVER_80211_UNREGISTER(pAd, net_dev); #endif /* RT_CFG80211_SUPPORT */ /* Free RTMP_ADAPTER related structures. */ RtmpRaDevCtrlExit(pAd); /* Unmap CSR base address */ iounmap((char *)(csr_addr)); /* release memory region */ release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); } else { /* Unregister network device */ RtmpOSNetDevDetach(net_dev); /* Unmap CSR base address */ iounmap((char *)(net_dev->base_addr)); /* release memory region */ release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); } /* Free the root net_device */ RtmpOSNetDevFree(net_dev); wl_proc_exit(); }
VOID WDS_Remove( IN PRTMP_ADAPTER pAd) { UINT index; for(index = 0; index < MAX_WDS_ENTRY; index++) { if (pAd->WdsTab.WdsEntry[index].dev) { RtmpOSNetDevDetach(pAd->WdsTab.WdsEntry[index].dev); RtmpOSNetDevFree(pAd->WdsTab.WdsEntry[index].dev); /* Clear it as NULL to prevent latter access error. */ pAd->WdsTab.WdsEntry[index].dev = NULL; } } }
static VOID __devexit rt2860_remove_one( IN struct pci_dev *pci_dev) { PNET_DEV net_dev = pci_get_drvdata(pci_dev); RTMP_ADAPTER *pAd = NULL; ULONG csr_addr = net_dev->base_addr; // pAd->CSRBaseAddress; GET_PAD_FROM_NET_DEV(pAd, net_dev); DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); if (pAd != NULL) { // Unregister/Free all allocated net_device. RtmpPhyNetDevExit(pAd, net_dev); // Unmap CSR base address iounmap((char *)(csr_addr)); // release memory region release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); #ifdef RT_CFG80211_SUPPORT CFG80211_UnRegister(pAd, net_dev); #endif // RT_CFG80211_SUPPORT // // Free RTMP_ADAPTER related structures. RtmpRaDevCtrlExit(pAd); } else { // Unregister network device RtmpOSNetDevDetach(net_dev); // Unmap CSR base address iounmap((char *)(net_dev->base_addr)); // release memory region release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); } // Free the root net_device RtmpOSNetDevFree(net_dev); }
static VOID DEVEXIT rt_pci_remove(struct pci_dev *pci_dev) { PNET_DEV net_dev = pci_get_drvdata(pci_dev); VOID *pAd = NULL; ULONG csr_addr = net_dev->base_addr; GET_PAD_FROM_NET_DEV(pAd, net_dev); MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("===> %s()\n", __FUNCTION__)); if (pAd != NULL) { /* Unregister/Free all allocated net_device. */ RtmpPhyNetDevExit(pAd, net_dev); #ifdef RT_CFG80211_SUPPORT RTMP_DRIVER_80211_UNREGISTER(pAd, net_dev); #endif /* RT_CFG80211_SUPPORT */ /* Free RTMP_ADAPTER related structures. */ RtmpRaDevCtrlExit(pAd); /* Unmap CSR base address */ iounmap((char *)(csr_addr)); /* release memory region */ release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); } else { /* Unregister network device */ RtmpOSNetDevDetach(net_dev); /* Unmap CSR base address */ iounmap((char *)(net_dev->base_addr)); /* release memory region */ release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); } /* Free the root net_device */ RtmpOSNetDevFree(net_dev); }
BOOLEAN RtmpPhyNetDevExit( IN RTMP_ADAPTER *pAd, IN PNET_DEV net_dev) { #ifdef CONFIG_AP_SUPPORT #ifdef APCLI_SUPPORT // remove all AP-client virtual interfaces. RT28xx_ApCli_Remove(pAd); #endif // APCLI_SUPPORT // #ifdef WDS_SUPPORT // remove all WDS virtual interfaces. RT28xx_WDS_Remove(pAd); #endif // WDS_SUPPORT // #ifdef MBSS_SUPPORT RT28xx_MBSS_Remove(pAd); #endif // MBSS_SUPPORT // #endif // CONFIG_AP_SUPPORT // #ifdef INF_PPA_SUPPORT if (ppa_hook_directpath_register_dev_fn && pAd->PPAEnable==TRUE) { UINT status; status=ppa_hook_directpath_register_dev_fn(&pAd->g_if_id, pAd->net_dev, NULL, PPA_F_DIRECTPATH_REGISTER); DBGPRINT(RT_DEBUG_TRACE, ("unregister PPA:g_if_id=%d status=%d\n",pAd->g_if_id,status)); } kfree(pAd->pDirectpathCb); #endif // INF_PPA_SUPPORT // // Unregister network device if (net_dev != NULL) { printk("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", net_dev->name); RtmpOSNetDevDetach(net_dev); } return TRUE; }
VOID rt2880_module_exit(VOID) { struct net_device *net_dev = rt2880_dev; RTMP_ADAPTER *pAd; if (net_dev == NULL) return; pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); if (pAd != NULL) { #ifdef WLAN_LED //extern RALINK_TIMER_STRUCT LedCheckTimer; //extern unsigned char CheckTimerEbl; { BOOLEAN Cancelled; RTMPCancelTimer(&LedCheckTimer, &Cancelled); CheckTimerEbl=0; } #endif // WLAN_LED // RtmpPhyNetDevExit(pAd, net_dev); RtmpRaDevCtrlExit(pAd); } else { RtmpOSNetDevDetach(net_dev); } // Free the root net_device. RtmpOSNetDevFree(net_dev); #if defined(CONFIG_RA_CLASSIFIER)&&(!defined(CONFIG_RA_CLASSIFIER_MODULE)) proc_ptr = proc_ralink_wl_video; if(ra_classifier_release_func!=NULL) ra_classifier_release_func(); #endif wl_proc_exit(); }
/* ======================================================================== Routine Description: Remove Multi-BSS network interface. Arguments: pAd points to our adapter Return Value: None Note: FIRST_MBSSID = 1 Main BSS is not removed here. ======================================================================== */ VOID MBSS_Remove(RTMP_ADAPTER *pAd) { struct wifi_dev *wdev; UINT IdBss; for(IdBss=FIRST_MBSSID; IdBss<MAX_MBSSID_NUM(pAd); IdBss++) { wdev = &pAd->ApCfg.MBSSID[IdBss].wdev; if (wdev->if_dev) { RtmpOSNetDevProtect(1); RtmpOSNetDevDetach(wdev->if_dev); RtmpOSNetDevProtect(0); rtmp_wdev_idx_unreg(pAd, wdev); RtmpOSNetDevFree(wdev->if_dev); wdev->if_dev = NULL; } } }
/* ======================================================================== Routine Description: Remove Multi-BSS network interface. Arguments: pAd points to our adapter Return Value: None Note: FIRST_MBSSID = 1 Main BSS is not removed here. ======================================================================== */ VOID RT28xx_MBSS_Remove( IN PRTMP_ADAPTER pAd) { MULTISSID_STRUCT *pMbss; UINT IdBss; for(IdBss=FIRST_MBSSID; IdBss<MAX_MBSSID_NUM; IdBss++) { pMbss = &pAd->ApCfg.MBSSID[IdBss]; if (pMbss->MSSIDDev) { RtmpOSNetDevDetach(pMbss->MSSIDDev); RtmpOSNetDevFree(pMbss->MSSIDDev); /* clear it as NULL to prevent latter access error */ pMbss->MSSIDDev = NULL; } } } /* End of RT28xx_MBSS_Remove */
static void __devexit rt2860_remove_one(IN struct pci_dev *pci_dev) { struct net_device *net_dev = pci_get_drvdata(pci_dev); struct rt_rtmp_adapter *pAd = NULL; unsigned long csr_addr = net_dev->base_addr; /* pAd->CSRBaseAddress; */ GET_PAD_FROM_NET_DEV(pAd, net_dev); DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); if (pAd != NULL) { /* Unregister/Free all allocated net_device. */ RtmpPhyNetDevExit(pAd, net_dev); /* Unmap CSR base address */ iounmap((char *)(csr_addr)); /* release memory region */ release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); /* Free struct rt_rtmp_adapter related structures. */ RtmpRaDevCtrlExit(pAd); } else { /* Unregister network device */ RtmpOSNetDevDetach(net_dev); /* Unmap CSR base address */ iounmap((char *)(net_dev->base_addr)); /* release memory region */ release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); } /* Free the root net_device */ RtmpOSNetDevFree(net_dev); }
static VOID __devexit rt2860_remove_one( IN struct pci_dev *pci_dev) { PNET_DEV net_dev = pci_get_drvdata(pci_dev); RTMP_ADAPTER *pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); ULONG csr_addr = net_dev->base_addr; DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); if (pAd != NULL) { RtmpPhyNetDevExit(pAd, net_dev); iounmap((char *)(csr_addr)); release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); RtmpRaDevCtrlExit(pAd); } else { RtmpOSNetDevDetach(net_dev); iounmap((char *)(net_dev->base_addr)); release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); } RtmpOSNetDevFree(net_dev); }
VOID WDS_Remove(RTMP_ADAPTER *pAd) { UINT index; struct wifi_dev *wdev; for(index = 0; index < MAX_WDS_ENTRY; index++) { wdev = &pAd->WdsTab.WdsEntry[index].wdev; if (wdev->if_dev) { RtmpOSNetDevProtect(1); RtmpOSNetDevDetach(wdev->if_dev); RtmpOSNetDevProtect(0); rtmp_wdev_idx_unreg(pAd, wdev); RtmpOSNetDevFree(wdev->if_dev); /* Clear it as NULL to prevent latter access error. */ wdev->if_dev = NULL; } } }
/* ======================================================================== Routine Description: Remove Multi-BSS network interface. Arguments: pAd points to our adapter Return Value: None Note: FIRST_MBSSID = 1 Main BSS is not removed here. ======================================================================== */ VOID MBSS_Remove(RTMP_ADAPTER *pAd) { struct wifi_dev *wdev; UINT IdBss; #ifdef RELEASE_EXCLUDE DBGPRINT(RT_DEBUG_INFO, ("%s --->\n", __FUNCTION__)); #endif /* RELEASE_EXCLUDE */ for(IdBss=FIRST_MBSSID; IdBss<MAX_MBSSID_NUM(pAd); IdBss++) { wdev = &pAd->ApCfg.MBSSID[IdBss].wdev; if (wdev->if_dev) { RtmpOSNetDevDetach(wdev->if_dev); rtmp_wdev_idx_unreg(pAd, wdev); RtmpOSNetDevFree(wdev->if_dev); wdev->if_dev = NULL; } } }
VOID RTMP_CFG80211_VirtualIF_Remove( IN VOID *pAdSrc, IN PNET_DEV dev_p, IN UINT32 DevType) { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)pAdSrc; BOOLEAN isGoOn = FALSE; struct wifi_dev *wdev; #ifdef RT_CFG80211_P2P_SUPPORT UINT apidx = CFG_GO_BSSID_IDX; #else UINT apidx = MAIN_MBSSID; #endif /*RT_CFG80211_P2P_SUPPORT*/ if (dev_p) { pAd->cfg80211_ctrl.Cfg80211VifDevSet.isGoingOn = FALSE; RTMP_CFG80211_RemoveVifEntry(pAd, dev_p); RTMP_OS_NETDEV_STOP_QUEUE(dev_p); #ifdef RT_CFG80211_P2P_CONCURRENT_DEVICE isGoOn = RTMP_CFG80211_VIF_P2P_GO_ON(pAd); if (isGoOn) { wdev = &pAd->ApCfg.MBSSID[apidx].wdev; BSS_STRUCT *pMbss = &pAd->ApCfg.MBSSID[CFG_GO_BSSID_IDX]; struct wifi_dev *pwdev = &pMbss->wdev; if (pAd->Mlme.bStartScc == TRUE) { pAd->Mlme.bStartScc = FALSE; AsicSwitchChannel(pAd, pAd->StaCfg.wdev.CentralChannel, FALSE); AsicLockChannel(pAd, pAd->StaCfg.wdev.CentralChannel); bbp_set_bw(pAd, pAd->StaCfg.wdev.bw); } pwdev->channel = 0; pwdev->CentralChannel= 0; pwdev->bw = 0; pwdev->extcha = EXTCHA_NONE; /*after p2p cli connect , neet to change to default configure*/ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; pAd->CommonCfg.HT_Disable = 0; SetCommonHT(pAd); wdev_bcn_buf_deinit(pAd, &pAd->ApCfg.MBSSID[apidx].bcn_buf); RtmpOSNetDevDetach(dev_p); rtmp_wdev_idx_unreg(pAd, wdev); wdev->if_dev = NULL; } else #endif /* RT_CFG80211_P2P_CONCURRENT_DEVICE */ if (pAd->flg_apcli_init) { wdev = &pAd->ApCfg.ApCliTab[MAIN_MBSSID].wdev; //actually not mcc still need to check this! if (pAd->Mlme.bStartScc == TRUE) { printk("GC remove & switch to Infra BW = %d pAd->StaCfg.wdev.CentralChannel %d \n",pAd->StaCfg.wdev.bw,pAd->StaCfg.wdev.CentralChannel); pAd->Mlme.bStartScc = FALSE; AsicSwitchChannel(pAd, pAd->StaCfg.wdev.CentralChannel, FALSE); AsicLockChannel(pAd, pAd->StaCfg.wdev.CentralChannel); bbp_set_bw(pAd, pAd->StaCfg.wdev.bw); } wdev->CentralChannel = 0; wdev->channel= 0; wdev->bw = HT_BW_20; wdev->extcha = EXTCHA_NONE; OPSTATUS_CLEAR_FLAG(pAd, fOP_AP_STATUS_MEDIA_STATE_CONNECTED); cfg80211_disconnected(dev_p, 0, NULL, 0, GFP_KERNEL); NdisZeroMemory(pAd->ApCfg.ApCliTab[MAIN_MBSSID].CfgApCliBssid, MAC_ADDR_LEN); RtmpOSNetDevDetach(dev_p); rtmp_wdev_idx_unreg(pAd, wdev); pAd->flg_apcli_init = FALSE; wdev->if_dev = NULL; } else /* Never Opened When New Netdevice on */ { RtmpOSNetDevDetach(dev_p); } if (dev_p->ieee80211_ptr) { kfree(dev_p->ieee80211_ptr); dev_p->ieee80211_ptr = NULL; } } }