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 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(); }