📄 config.c
字号:
/* $Id: config.c,v 2.84.2.5 2004/02/11 13:21:33 keil Exp $ * * Author Karsten Keil * Copyright by Karsten Keil <keil@isdn4linux.de> * by Kai Germaschewski <kai.germaschewski@gmx.de> * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. * * For changes and modifications please read * Documentation/isdn/HiSax.cert * * based on the teles driver from Jan den Ouden * */#include <linux/types.h>#include <linux/stddef.h>#include <linux/timer.h>#include <linux/config.h>#include <linux/init.h>#include "hisax.h"#include <linux/module.h>#include <linux/kernel_stat.h>#include <linux/workqueue.h>#include <linux/interrupt.h>#define HISAX_STATUS_BUFSIZE 4096#define INCLUDE_INLINE_FUNCS/* * This structure array contains one entry per card. An entry looks * like this: * * { type, protocol, p0, p1, p2, NULL } * * type * 1 Teles 16.0 p0=irq p1=membase p2=iobase * 2 Teles 8.0 p0=irq p1=membase * 3 Teles 16.3 p0=irq p1=iobase * 4 Creatix PNP p0=irq p1=IO0 (ISAC) p2=IO1 (HSCX) * 5 AVM A1 (Fritz) p0=irq p1=iobase * 6 ELSA PC [p0=iobase] or nothing (autodetect) * 7 ELSA Quickstep p0=irq p1=iobase * 8 Teles PCMCIA p0=irq p1=iobase * 9 ITK ix1-micro p0=irq p1=iobase * 10 ELSA PCMCIA p0=irq p1=iobase * 11 Eicon.Diehl Diva p0=irq p1=iobase * 12 Asuscom ISDNLink p0=irq p1=iobase * 13 Teleint p0=irq p1=iobase * 14 Teles 16.3c p0=irq p1=iobase * 15 Sedlbauer speed p0=irq p1=iobase * 15 Sedlbauer PC/104 p0=irq p1=iobase * 15 Sedlbauer speed pci no parameter * 16 USR Sportster internal p0=irq p1=iobase * 17 MIC card p0=irq p1=iobase * 18 ELSA Quickstep 1000PCI no parameter * 19 Compaq ISDN S0 ISA card p0=irq p1=IO0 (HSCX) p2=IO1 (ISAC) p3=IO2 * 20 Travers Technologies NETjet-S PCI card * 21 TELES PCI no parameter * 22 Sedlbauer Speed Star p0=irq p1=iobase * 23 reserved * 24 Dr Neuhaus Niccy PnP/PCI card p0=irq p1=IO0 p2=IO1 (PnP only) * 25 Teles S0Box p0=irq p1=iobase (from isapnp setup) * 26 AVM A1 PCMCIA (Fritz) p0=irq p1=iobase * 27 AVM PnP/PCI p0=irq p1=iobase (PCI no parameter) * 28 Sedlbauer Speed Fax+ p0=irq p1=iobase (from isapnp setup) * 29 Siemens I-Surf p0=irq p1=iobase p2=memory (from isapnp setup) * 30 ACER P10 p0=irq p1=iobase (from isapnp setup) * 31 HST Saphir p0=irq p1=iobase * 32 Telekom A4T none * 33 Scitel Quadro p0=subcontroller (4*S0, subctrl 1...4) * 34 Gazel ISDN cards * 35 HFC 2BDS0 PCI none * 36 Winbond 6692 PCI none * 37 HFC 2BDS0 S+/SP p0=irq p1=iobase * 38 Travers Technologies NETspider-U PCI card * 39 HFC 2BDS0-SP PCMCIA p0=irq p1=iobase * 40 hotplug interface * 41 Formula-n enter:now ISDN PCI a/b none * * protocol can be either ISDN_PTYPE_EURO or ISDN_PTYPE_1TR6 or ISDN_PTYPE_NI1 * * */const char *CardType[] = { "No Card", "Teles 16.0", "Teles 8.0", "Teles 16.3", "Creatix/Teles PnP", "AVM A1", "Elsa ML", "Elsa Quickstep", "Teles PCMCIA", "ITK ix1-micro Rev.2", "Elsa PCMCIA", "Eicon.Diehl Diva", "ISDNLink", "TeleInt", "Teles 16.3c", "Sedlbauer Speed Card", "USR Sportster", "ith mic Linux", "Elsa PCI", "Compaq ISA", "NETjet-S", "Teles PCI", "Sedlbauer Speed Star (PCMCIA)", "AMD 7930", "NICCY", "S0Box", "AVM A1 (PCMCIA)", "AVM Fritz PnP/PCI", "Sedlbauer Speed Fax +", "Siemens I-Surf", "Acer P10", "HST Saphir", "Telekom A4T", "Scitel Quadro", "Gazel", "HFC 2BDS0 PCI", "Winbond 6692", "HFC 2BDS0 SX", "NETspider-U", "HFC-2BDS0-SP PCMCIA", "Hotplug", "Formula-n enter:now PCI a/b", };#ifdef CONFIG_HISAX_ELSA#define DEFAULT_CARD ISDN_CTYPE_ELSA#define DEFAULT_CFG {0,0,0,0}#endif#ifdef CONFIG_HISAX_AVM_A1#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_A1#define DEFAULT_CFG {10,0x340,0,0}#endif#ifdef CONFIG_HISAX_AVM_A1_PCMCIA#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_A1_PCMCIA#define DEFAULT_CFG {11,0x170,0,0}#endif#ifdef CONFIG_HISAX_FRITZPCI#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_FRITZPCI#define DEFAULT_CFG {0,0,0,0}#endif#ifdef CONFIG_HISAX_16_3#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_16_3#define DEFAULT_CFG {15,0x180,0,0}#endif#ifdef CONFIG_HISAX_S0BOX#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_S0BOX#define DEFAULT_CFG {7,0x378,0,0}#endif#ifdef CONFIG_HISAX_16_0#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_16_0#define DEFAULT_CFG {15,0xd0000,0xd80,0}#endif#ifdef CONFIG_HISAX_TELESPCI#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_TELESPCI#define DEFAULT_CFG {0,0,0,0}#endif#ifdef CONFIG_HISAX_IX1MICROR2#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_IX1MICROR2#define DEFAULT_CFG {5,0x390,0,0}#endif#ifdef CONFIG_HISAX_DIEHLDIVA#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_DIEHLDIVA#define DEFAULT_CFG {0,0x0,0,0}#endif#ifdef CONFIG_HISAX_ASUSCOM#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_ASUSCOM#define DEFAULT_CFG {5,0x200,0,0}#endif#ifdef CONFIG_HISAX_TELEINT#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_TELEINT#define DEFAULT_CFG {5,0x300,0,0}#endif#ifdef CONFIG_HISAX_SEDLBAUER#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_SEDLBAUER#define DEFAULT_CFG {11,0x270,0,0}#endif#ifdef CONFIG_HISAX_SPORTSTER#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_SPORTSTER#define DEFAULT_CFG {7,0x268,0,0}#endif#ifdef CONFIG_HISAX_MIC#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_MIC#define DEFAULT_CFG {12,0x3e0,0,0}#endif#ifdef CONFIG_HISAX_NETJET#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_NETJET_S#define DEFAULT_CFG {0,0,0,0}#endif#ifdef CONFIG_HISAX_HFCS#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_TELES3C#define DEFAULT_CFG {5,0x500,0,0}#endif#ifdef CONFIG_HISAX_HFC_PCI#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_HFC_PCI#define DEFAULT_CFG {0,0,0,0}#endif#ifdef CONFIG_HISAX_HFC_SX#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_HFC_SX#define DEFAULT_CFG {5,0x2E0,0,0}#endif#ifdef CONFIG_HISAX_AMD7930#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_AMD7930#define DEFAULT_CFG {12,0x3e0,0,0}#endif#ifdef CONFIG_HISAX_NICCY#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_NICCY#define DEFAULT_CFG {0,0x0,0,0}#endif#ifdef CONFIG_HISAX_ISURF#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_ISURF#define DEFAULT_CFG {5,0x100,0xc8000,0}#endif#ifdef CONFIG_HISAX_HSTSAPHIR#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_HSTSAPHIR#define DEFAULT_CFG {5,0x250,0,0}#endif#ifdef CONFIG_HISAX_BKM_A4T#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_BKM_A4T#define DEFAULT_CFG {0,0x0,0,0}#endif#ifdef CONFIG_HISAX_SCT_QUADRO#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_SCT_QUADRO#define DEFAULT_CFG {1,0x0,0,0}#endif#ifdef CONFIG_HISAX_GAZEL#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_GAZEL#define DEFAULT_CFG {15,0x180,0,0}#endif#ifdef CONFIG_HISAX_W6692#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_W6692#define DEFAULT_CFG {0,0,0,0}#endif#ifdef CONFIG_HISAX_NETJET_U#undef DEFAULT_CARD#undef DEFAULT_CFG#define DEFAULT_CARD ISDN_CTYPE_NETJET_U#define DEFAULT_CFG {0,0,0,0}#endif#ifdef CONFIG_HISAX_1TR6#define DEFAULT_PROTO ISDN_PTYPE_1TR6#define DEFAULT_PROTO_NAME "1TR6"#endif#ifdef CONFIG_HISAX_NI1#undef DEFAULT_PROTO#define DEFAULT_PROTO ISDN_PTYPE_NI1#undef DEFAULT_PROTO_NAME#define DEFAULT_PROTO_NAME "NI1"#endif#ifdef CONFIG_HISAX_EURO#undef DEFAULT_PROTO#define DEFAULT_PROTO ISDN_PTYPE_EURO#undef DEFAULT_PROTO_NAME#define DEFAULT_PROTO_NAME "EURO"#endif#ifndef DEFAULT_PROTO#define DEFAULT_PROTO ISDN_PTYPE_UNKNOWN#define DEFAULT_PROTO_NAME "UNKNOWN"#endif#ifndef DEFAULT_CARD#define DEFAULT_CARD 0#define DEFAULT_CFG {0,0,0,0}#endif#define FIRST_CARD { \ DEFAULT_CARD, \ DEFAULT_PROTO, \ DEFAULT_CFG, \ NULL, \}struct IsdnCard cards[HISAX_MAX_CARDS] = { FIRST_CARD,};#define HISAX_IDSIZE (HISAX_MAX_CARDS*8)static char HiSaxID[HISAX_IDSIZE] = { 0, };static char *HiSax_id = HiSaxID;#ifdef MODULE/* Variables for insmod */static int type[HISAX_MAX_CARDS] = { 0, };static int protocol[HISAX_MAX_CARDS] = { 0, };static int io[HISAX_MAX_CARDS] = { 0, };#undef IO0_IO1#ifdef CONFIG_HISAX_16_3#define IO0_IO1#endif#ifdef CONFIG_HISAX_NICCY#undef IO0_IO1#define IO0_IO1#endif#ifdef IO0_IO1static int io0[HISAX_MAX_CARDS] __devinitdata = { 0, };static int io1[HISAX_MAX_CARDS] __devinitdata = { 0, };#endifstatic int irq[HISAX_MAX_CARDS] __devinitdata = { 0, };static int mem[HISAX_MAX_CARDS] __devinitdata = { 0, };static char *id = HiSaxID;MODULE_DESCRIPTION("ISDN4Linux: Driver for passive ISDN cards");MODULE_AUTHOR("Karsten Keil");MODULE_LICENSE("GPL");module_param_array(type, int, NULL, 0);module_param_array(protocol, int, NULL, 0);module_param_array(io, int, NULL, 0);module_param_array(irq, int, NULL, 0);module_param_array(mem, int, NULL, 0);module_param(id, charp, 0);#ifdef IO0_IO1module_param_array(io0, int, NULL, 0);module_param_array(io1, int, NULL, 0);#endif#endif /* MODULE */int nrcards;extern char *l1_revision;extern char *l2_revision;extern char *l3_revision;extern char *lli_revision;extern char *tei_revision;char *HiSax_getrev(const char *revision){ char *rev; char *p; if ((p = strchr(revision, ':'))) { rev = p + 2; p = strchr(rev, '$'); *--p = 0; } else rev = "???"; return rev;}static void __init HiSaxVersion(void){ char tmp[64]; printk(KERN_INFO "HiSax: Linux Driver for passive ISDN cards\n");#ifdef MODULE printk(KERN_INFO "HiSax: Version 3.5 (module)\n");#else printk(KERN_INFO "HiSax: Version 3.5 (kernel)\n");#endif strcpy(tmp, l1_revision); printk(KERN_INFO "HiSax: Layer1 Revision %s\n", HiSax_getrev(tmp)); strcpy(tmp, l2_revision); printk(KERN_INFO "HiSax: Layer2 Revision %s\n", HiSax_getrev(tmp)); strcpy(tmp, tei_revision); printk(KERN_INFO "HiSax: TeiMgr Revision %s\n", HiSax_getrev(tmp)); strcpy(tmp, l3_revision); printk(KERN_INFO "HiSax: Layer3 Revision %s\n", HiSax_getrev(tmp)); strcpy(tmp, lli_revision); printk(KERN_INFO "HiSax: LinkLayer Revision %s\n", HiSax_getrev(tmp));}#ifndef MODULE#define MAX_ARG (HISAX_MAX_CARDS*5)static int __init HiSax_setup(char *line){ int i, j, argc; int ints[MAX_ARG + 1]; char *str; str = get_options(line, MAX_ARG, ints); argc = ints[0]; printk(KERN_DEBUG "HiSax_setup: argc(%d) str(%s)\n", argc, str); i = 0; j = 1; while (argc && (i < HISAX_MAX_CARDS)) { cards[i].protocol = DEFAULT_PROTO; if (argc) { cards[i].typ = ints[j]; j++; argc--; } if (argc) { cards[i].protocol = ints[j]; j++; argc--; } if (argc) { cards[i].para[0] = ints[j]; j++; argc--; } if (argc) { cards[i].para[1] = ints[j]; j++; argc--; } if (argc) { cards[i].para[2] = ints[j]; j++; argc--; } i++; } if (str && *str) { if (strlen(str) < HISAX_IDSIZE) strcpy(HiSaxID, str); else printk(KERN_WARNING "HiSax: ID too long!"); } else strcpy(HiSaxID, "HiSax"); HiSax_id = HiSaxID; return 1;}__setup("hisax=", HiSax_setup);#endif /* MODULES */#if CARD_TELES0extern int setup_teles0(struct IsdnCard *card);#endif#if CARD_TELES3extern int setup_teles3(struct IsdnCard *card);#endif#if CARD_S0BOXextern int setup_s0box(struct IsdnCard *card);#endif#if CARD_TELESPCIextern int setup_telespci(struct IsdnCard *card);#endif#if CARD_AVM_A1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -