void cleanup_module(void) { struct IBMLANA_NETDEV *dev; ibmlana_priv *priv; int z; if (MOD_IN_USE) { printk("cannot unload, module in use\n"); return; } for (z = 0; z < DEVMAX; z++) { dev = moddevs + z; if (dev->priv != NULL) { priv = (ibmlana_priv *) dev->priv; /*DeinitBoard(dev); */ if (dev->irq != 0) free_irq(dev->irq, dev); dev->irq = 0; release_region(dev->base_addr, IBM_LANA_IORANGE); unregister_netdev(dev); #if (LINUX_VERSION_CODE >= 0x20200) mca_mark_as_unused(priv->slot); #endif mca_set_adapter_name(priv->slot, ""); mca_set_adapter_procfn(priv->slot, NULL, NULL); kfree(dev->priv); dev->priv = NULL; } } }
int init_module(void) { int z; startslot = 0; for (z = 0; z < DEVMAX; z++) { struct net_device *dev = alloc_etherdev(sizeof(ibmlana_priv)); if (!dev) break; dev->irq = irq; dev->base_addr = io; if (ibmlana_probe(dev)) { free_netdev(dev); break; } if (register_netdev(dev)) { ibmlana_priv *priv = netdev_priv(dev); release_region(dev->base_addr, IBM_LANA_IORANGE); mca_mark_as_unused(priv->slot); mca_set_adapter_name(priv->slot, ""); mca_set_adapter_procfn(priv->slot, NULL, NULL); iounmap(priv->base); free_netdev(dev); break; } moddevs[z] = dev; } return (z > 0) ? 0 : -EIO; }
static void cleanup_card(struct net_device *dev) { struct mc32_local *lp = netdev_priv(dev); unsigned slot = lp->slot; mca_mark_as_unused(slot); mca_set_adapter_name(slot, NULL); free_irq(dev->irq, dev); release_region(dev->base_addr, MC32_IO_EXTENT); }
void cleanup_module(void) { int z; for (z = 0; z < DEVMAX; z++) { struct net_device *dev = moddevs[z]; if (dev) { ibmlana_priv *priv = netdev_priv(dev); unregister_netdev(dev); /*DeinitBoard(dev); */ release_region(dev->base_addr, IBM_LANA_IORANGE); mca_mark_as_unused(priv->slot); mca_set_adapter_name(priv->slot, ""); mca_set_adapter_procfn(priv->slot, NULL, NULL); iounmap(priv->base); free_netdev(dev); } } }
void cleanup_module(void) { struct net_device *dev; ibmlana_priv *priv; int z; for (z = 0; z < DEVMAX; z++) { dev = moddevs + z; if (dev->priv != NULL) { priv = (ibmlana_priv *) dev->priv; /*DeinitBoard(dev); */ if (dev->irq != 0) free_irq(dev->irq, dev); dev->irq = 0; release_region(dev->base_addr, IBM_LANA_IORANGE); unregister_netdev(dev); mca_mark_as_unused(priv->slot); mca_set_adapter_name(priv->slot, ""); mca_set_adapter_procfn(priv->slot, NULL, NULL); kfree(dev->priv); dev->priv = NULL; } } }
static void __exit eicon_exit(void) { #if CONFIG_PCI #ifdef CONFIG_ISDN_DRV_EICON_PCI card_t *pCard; word wCardIndex; extern int Divas_major; int iTmp = 0; #endif #endif eicon_card *card = cards; eicon_card *last; while (card) { #ifdef CONFIG_ISDN_DRV_EICON_ISA #ifdef CONFIG_MCA if (MCA_bus) { mca_mark_as_unused (card->mca_slot); mca_set_adapter_procfn(card->mca_slot, NULL, NULL); }; #endif /* CONFIG_MCA */ #endif unregister_card(card); card = card->next; } card = cards; while (card) { last = card; card = card->next; eicon_freecard(last); } #if CONFIG_PCI #ifdef CONFIG_ISDN_DRV_EICON_PCI pCard = DivasCards; for (wCardIndex = 0; wCardIndex < MAX_CARDS; wCardIndex++) { if ((pCard->hw) && (pCard->hw->in_use)) { (*pCard->card_reset)(pCard); UxIsrRemove(pCard->hw, pCard); UxCardHandleFree(pCard->hw); if(pCard->e_tbl != NULL) { kfree(pCard->e_tbl); } if(pCard->hw->card_type == DIA_CARD_TYPE_DIVA_SERVER_B) { release_region(pCard->hw->io_base,0x20); release_region(pCard->hw->reset_base,0x80); } // If this is a 4BRI ... if (pCard->hw->card_type == DIA_CARD_TYPE_DIVA_SERVER_Q) { // Skip over the next 3 virtual adapters wCardIndex += 3; // But free their handles for (iTmp = 0; iTmp < 3; iTmp++) { pCard++; UxCardHandleFree(pCard->hw); if(pCard->e_tbl != NULL) { kfree(pCard->e_tbl); } } } } pCard++; } unregister_chrdev(Divas_major, "Divas"); #endif #endif /* CONFIG_PCI */ printk(KERN_INFO "%s unloaded\n", DRIVERNAME); }