Beispiel #1
0
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);
		}
	}
}
Beispiel #5
0
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;
		}
	}
}
Beispiel #6
0
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);
}