static void __exit scc_enet_cleanup(void) { struct rtnet_device *rtdev = rtdev_root; struct scc_enet_private *cep = (struct scc_enet_private *)rtdev->priv; volatile cpm8xx_t *cp = cpmp; volatile scc_enet_t *ep; if (rtdev) { rtdm_irq_disable(&cep->irq_handle); rtdm_irq_free(&cep->irq_handle); ep = (scc_enet_t *)(&cp->cp_dparam[PROFF_ENET]); m8xx_cpm_dpfree(ep->sen_genscc.scc_rbase); m8xx_cpm_dpfree(ep->sen_genscc.scc_tbase); rt_stack_disconnect(rtdev); rt_unregister_rtnetdev(rtdev); rt_rtdev_disconnect(rtdev); printk("%s: unloaded\n", rtdev->name); rtskb_pool_release(&cep->skb_pool); rtdev_free(rtdev); rtdev_root = NULL; } }
static void tulip_remove_one (struct pci_dev *pdev) { struct rtnet_device *rtdev = (struct rtnet_device *) pci_get_drvdata (pdev); struct tulip_private *tp; if (!rtdev || !rtdev->priv) return; tp = rtdev->priv; pci_free_consistent (pdev, sizeof (struct tulip_rx_desc) * RX_RING_SIZE + sizeof (struct tulip_tx_desc) * TX_RING_SIZE, tp->rx_ring, tp->rx_ring_dma); rt_unregister_rtnetdev (rtdev); if (tp->mtable) kfree (tp->mtable); #ifndef USE_IO_OPS iounmap((void *)rtdev->base_addr); #endif /*RTnet*/ rt_rtdev_disconnect(rtdev); rtdev_free (rtdev); /*RTnet*/ pci_release_regions (pdev); pci_set_drvdata (pdev, NULL); /* pci_power_off (pdev, -1); */ }
/*** * loopback_cleanup */ static void __exit loopback_cleanup(void) { struct rtnet_device *rtdev = rt_loopback_dev; printk("removing loopback...\n"); rt_unregister_rtnetdev(rtdev); rt_rtdev_disconnect(rtdev); rtdev_free(rtdev); }
void rt2x00_core_remove(struct rtnet_device * rtnet_dev) { struct rtwlan_device * rtwlan_dev = rtnetdev_priv(rtnet_dev); rtskb_pool_release(&rtwlan_dev->skb_pool); rt_unregister_rtnetdev(rtnet_dev); rt_rtdev_disconnect(rtnet_dev); rtdev_free(rtnet_dev); }