2 * This software may be used and distributed according to the terms
3 * of the GNU General Public License, incorporated herein by reference.
7 #include <linux/config.h>
8 #include <linux/init.h>
12 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/pci.h>
16 #include <linux/ioport.h>
17 #include <linux/slab.h>
18 #include <linux/errno.h>
24 MODULE_DESCRIPTION("ISDN4Linux: Driver for Eicon Diva Server cards");
25 MODULE_AUTHOR("Armin Schindler");
26 MODULE_LICENSE("GPL");
30 void DIVA_DIDD_Write(DESCRIPTOR *, int);
31 EXPORT_SYMBOL_NOVERS(DIVA_DIDD_Read);
32 EXPORT_SYMBOL_NOVERS(DIVA_DIDD_Write);
33 EXPORT_SYMBOL_NOVERS(DivasPrintf);
36 int DivasCardsDiscover(void);
41 printk(KERN_DEBUG "DIVA Server Driver - initialising\n");
43 printk(KERN_DEBUG "DIVA Server Driver - Version 2.0.16\n");
45 #if !defined(CONFIG_PCI)
46 printk(KERN_WARNING "CONFIG_PCI is not defined!\n");
52 if (DivasCardsDiscover() < 0)
54 printk(KERN_WARNING "Divas: Not loaded\n");
60 printk(KERN_WARNING "Divas: No PCI bus present\n");
72 extern int Divas_major;
74 printk(KERN_DEBUG "DIVA Server Driver - unloading\n");
77 for (wCardIndex = 0; wCardIndex < MAX_CARDS; wCardIndex++)
79 if ((pCard->hw) && (pCard->hw->in_use))
82 (*pCard->card_reset)(pCard);
84 UxIsrRemove(pCard->hw, pCard);
85 UxCardHandleFree(pCard->hw);
87 if(pCard->e_tbl != NULL)
93 if(pCard->hw->card_type == DIA_CARD_TYPE_DIVA_SERVER_B)
95 release_region(pCard->hw->io_base,0x20);
96 release_region(pCard->hw->reset_base,0x80);
99 // If this is a 4BRI ...
100 if (pCard->hw->card_type == DIA_CARD_TYPE_DIVA_SERVER_Q)
102 // Skip over the next 3 virtual adapters
105 // But free their handles
107 UxCardHandleFree(pCard->hw);
109 if(pCard->e_tbl != NULL)
115 UxCardHandleFree(pCard->hw);
117 if(pCard->e_tbl != NULL)
123 UxCardHandleFree(pCard->hw);
125 if(pCard->e_tbl != NULL)
134 unregister_chrdev(Divas_major, "Divas");
137 module_init(divas_init);
138 module_exit(divas_exit);