patch-2.3.27 linux/drivers/isdn/hisax/config.c
Next file: linux/drivers/isdn/hisax/diva.c
Previous file: linux/drivers/isdn/hisax/callc.c
Back to the patch index
Back to the overall index
- Lines: 441
- Date:
Sun Nov 7 16:34:00 1999
- Orig file:
v2.3.26/linux/drivers/isdn/hisax/config.c
- Orig date:
Tue Sep 7 12:14:06 1999
diff -u --recursive --new-file v2.3.26/linux/drivers/isdn/hisax/config.c linux/drivers/isdn/hisax/config.c
@@ -1,10 +1,32 @@
-/* $Id: config.c,v 2.33 1999/08/30 11:57:52 keil Exp $
+/* $Id: config.c,v 2.40 1999/10/30 13:09:45 keil Exp $
* Author Karsten Keil (keil@isdn4linux.de)
* based on the teles driver from Jan den Ouden
*
*
* $Log: config.c,v $
+ * Revision 2.40 1999/10/30 13:09:45 keil
+ * Version 3.3c
+ *
+ * Revision 2.39 1999/10/16 14:44:45 keil
+ * Fix module parm if only NICCY was selected
+ *
+ * Revision 2.38 1999/10/14 20:25:28 keil
+ * add a statistic for error monitoring
+ *
+ * Revision 2.37 1999/09/20 12:11:08 keil
+ * Fix hang if no protocol was selected
+ *
+ * Revision 2.36 1999/09/07 05:43:58 werner
+ *
+ * Added io as parameter 0 for HFC-PCI cards, if manual selection needed.
+ *
+ * Revision 2.35 1999/09/04 06:35:09 keil
+ * Winbond W6692 support
+ *
+ * Revision 2.34 1999/09/04 06:20:06 keil
+ * Changes from kernel set_current_state()
+ *
* Revision 2.33 1999/08/30 11:57:52 keil
* Fix broken avm pcmcia
*
@@ -126,10 +148,7 @@
#include <linux/stddef.h>
#include <linux/timer.h>
#include <linux/config.h>
-#include <linux/isdn_compat.h>
-#ifdef COMPAT_HAS_NEW_SETUP
#include <linux/init.h>
-#endif
#include "hisax.h"
#include <linux/module.h>
#include <linux/kernel_stat.h>
@@ -182,6 +201,8 @@
* 33 Scitel Quadro p0=subcontroller (4*S0, subctrl 1...4)
* 34 Gazel ISDN cards
* 35 HFC 2BDS0 PCI none
+ * 36 Winbond 6692 PCI none
+ *
* protocol can be either ISDN_PTYPE_EURO or ISDN_PTYPE_1TR6 or ISDN_PTYPE_NI1
*
*
@@ -195,7 +216,7 @@
"Compaq ISA", "NETjet", "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",
+ "Telekom A4T", "Scitel Quadro", "Gazel", "HFC 2BDS0 PCI", "Winbond 6692",
};
void HiSax_closecard(int cardnr);
@@ -204,15 +225,7 @@
#define DEFAULT_CARD ISDN_CTYPE_ELSA
#define DEFAULT_CFG {0,0,0,0}
int elsa_init_pcmcia(void*, int, int*, int);
-#ifdef COMPAT_HAS_NEW_SYMTAB
EXPORT_SYMBOL(elsa_init_pcmcia);
-#else
-static struct symbol_table hisax_syms_elsa = {
-#include <linux/symtab_begin.h>
- X(elsa_init_pcmcia),
-#include <linux/symtab_end.h>
-};
-#endif /* COMPAT_HAS_NEW_SYMTAB */
#endif /* CONFIG_HISAX_ELSA */
#ifdef CONFIG_HISAX_AVM_A1
@@ -228,17 +241,8 @@
#define DEFAULT_CARD ISDN_CTYPE_A1_PCMCIA
#define DEFAULT_CFG {11,0x170,0,0}
int avm_a1_init_pcmcia(void*, int, int*, int);
-#ifdef COMPAT_HAS_NEW_SYMTAB
EXPORT_SYMBOL(avm_a1_init_pcmcia);
EXPORT_SYMBOL(HiSax_closecard);
-#else
-static struct symbol_table hisax_syms_avm_a1= {
-#include <linux/symtab_begin.h>
- X(avm_a1_init_pcmcia),
- X(HiSax_closecard),
-#include <linux/symtab_end.h>
-};
-#endif /* COMPAT_HAS_NEW_SYMTAB */
#endif /* CONFIG_HISAX_AVM_A1_PCMCIA */
#ifdef CONFIG_HISAX_FRITZPCI
@@ -310,15 +314,7 @@
#define DEFAULT_CARD ISDN_CTYPE_SEDLBAUER
#define DEFAULT_CFG {11,0x270,0,0}
int sedl_init_pcmcia(void*, int, int*, int);
-#ifdef COMPAT_HAS_NEW_SYMTAB
EXPORT_SYMBOL(sedl_init_pcmcia);
-#else
-static struct symbol_table hisax_syms_sedl= {
-#include <linux/symtab_begin.h>
- X(sedl_init_pcmcia),
-#include <linux/symtab_end.h>
-};
-#endif /* COMPAT_HAS_NEW_SYMTAB */
#endif /* CONFIG_HISAX_SEDLBAUER */
#ifdef CONFIG_HISAX_SPORTSTER
@@ -406,6 +402,13 @@
#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_1TR6
#define DEFAULT_PROTO ISDN_PTYPE_1TR6
#define DEFAULT_PROTO_NAME "1TR6"
@@ -483,7 +486,6 @@
{0, 0, 0, 0, 0, 0, 0, 0};
static char *id HISAX_INITDATA = HiSaxID;
-#ifdef COMPAT_HAS_NEW_SYMTAB
MODULE_AUTHOR("Karsten Keil");
MODULE_PARM(type, "1-8i");
MODULE_PARM(protocol, "1-8i");
@@ -491,11 +493,10 @@
MODULE_PARM(irq, "1-8i");
MODULE_PARM(mem, "1-8i");
MODULE_PARM(id, "s");
-#ifdef CONFIG_HISAX_16_3 /* For Creatix/Teles PnP */
+#ifdef IO0_IO1
MODULE_PARM(io0, "1-8i");
MODULE_PARM(io1, "1-8i");
-#endif /* CONFIG_HISAX_16_3 */
-#endif /* COMPAT_HAS_NEW_SYMTAB */
+#endif /* IO0_IO1 */
#endif /* MODULE */
int nrcards;
@@ -528,9 +529,9 @@
printk(KERN_INFO "HiSax: Linux Driver for passive ISDN cards\n");
#ifdef MODULE
- printk(KERN_INFO "HiSax: Version 3.3a (module)\n");
+ printk(KERN_INFO "HiSax: Version 3.3c (module)\n");
#else
- printk(KERN_INFO "HiSax: Version 3.3a (kernel)\n");
+ printk(KERN_INFO "HiSax: Version 3.3c (kernel)\n");
#endif
strcpy(tmp, l1_revision);
printk(KERN_INFO "HiSax: Layer1 Revision %s\n", HiSax_getrev(tmp));
@@ -560,7 +561,6 @@
#ifdef MODULE
#define HiSax_init init_module
#else
-#ifdef COMPAT_HAS_NEW_SETUP
#define MAX_ARG (HISAX_MAX_CARDS*5)
static int __init
HiSax_setup(char *line)
@@ -570,12 +570,6 @@
char *str;
str = get_options(line, MAX_ARG, ints);
-#else
-void __init
-HiSax_setup(char *str, int *ints)
-{
- int i, j, argc;
-#endif
argc = ints[0];
printk(KERN_DEBUG"HiSax_setup: argc(%d) str(%s)\n", argc, str);
i = 0;
@@ -615,14 +609,10 @@
strcpy(HiSaxID, "HiSax");
HiSax_id = HiSaxID;
}
-#ifdef COMPAT_HAS_NEW_SETUP
return(1);
}
__setup("hisax=", HiSax_setup);
-#else
-}
-#endif /* COMPAT_HAS_NEW_SETUP */
#endif /* MODULES */
#if CARD_TELES0
@@ -717,11 +707,11 @@
extern int setup_testemu(struct IsdnCard *card);
#endif
-#if CARD_BKM_A4T
+#if CARD_BKM_A4T
extern int setup_bkm_a4t(struct IsdnCard *card);
#endif
-#if CARD_SCT_QUADRO
+#if CARD_SCT_QUADRO
extern int setup_sct_quadro(struct IsdnCard *card);
#endif
@@ -729,6 +719,10 @@
extern int setup_gazel(struct IsdnCard *card);
#endif
+#if CARD_W6692
+extern int setup_w6692(struct IsdnCard *card);
+#endif
+
/*
* Find card with given driverId
*/
@@ -967,7 +961,7 @@
csta->rcvbuf = NULL;
}
if (csta->tx_skb) {
- idev_kfree_skb(csta->tx_skb, FREE_WRITE);
+ dev_kfree_skb(csta->tx_skb);
csta->tx_skb = NULL;
}
if (csta->DC_Close != NULL) {
@@ -1000,7 +994,7 @@
while (cnt) {
cs->cardmsg(cs, CARD_INIT, NULL);
sti();
- current->state = TASK_INTERRUPTIBLE;
+ set_current_state(TASK_INTERRUPTIBLE);
/* Timeout 10ms */
schedule_timeout((10*HZ)/1000);
restore_flags(flags);
@@ -1254,6 +1248,11 @@
ret = setup_gazel(card);
break;
#endif
+#if CARD_W6692
+ case ISDN_CTYPE_W6692:
+ ret = setup_w6692(card);
+ break;
+#endif
default:
printk(KERN_WARNING
"HiSax: Support for %s Card not selected\n",
@@ -1357,6 +1356,7 @@
kfree((void *) cards[i].cs);
cards[i].cs = NULL;
HiSax_shiftcards(i);
+ nrcards--;
}
}
return foundcards;
@@ -1387,12 +1387,9 @@
}
void
-HiSax_reportcard(int cardnr)
+HiSax_reportcard(int cardnr, int sel)
{
struct IsdnCardState *cs = cards[cardnr].cs;
- struct PStack *stptr;
- struct l3_process *pc;
- int j, i = 1;
printk(KERN_DEBUG "HiSax: reportcard No %d\n", cardnr + 1);
printk(KERN_DEBUG "HiSax: Type %s\n", CardType[cs->typ]);
@@ -1400,50 +1397,38 @@
printk(KERN_DEBUG "HiSax: HiSax_reportcard address 0x%lX\n",
(ulong) & HiSax_reportcard);
printk(KERN_DEBUG "HiSax: cs 0x%lX\n", (ulong) cs);
- printk(KERN_DEBUG "HiSax: HW_Flags %x bc0 flg %x bc0 flg %x\n",
+ printk(KERN_DEBUG "HiSax: HW_Flags %x bc0 flg %x bc1 flg %x\n",
cs->HW_Flags, cs->bcs[0].Flag, cs->bcs[1].Flag);
printk(KERN_DEBUG "HiSax: bcs 0 mode %d ch%d\n",
cs->bcs[0].mode, cs->bcs[0].channel);
printk(KERN_DEBUG "HiSax: bcs 1 mode %d ch%d\n",
cs->bcs[1].mode, cs->bcs[1].channel);
- printk(KERN_DEBUG "HiSax: cs setstack_d 0x%lX\n", (ulong) cs->setstack_d);
- printk(KERN_DEBUG "HiSax: cs stl 0x%lX\n", (ulong) & (cs->stlist));
- stptr = cs->stlist;
- while (stptr != NULL) {
- printk(KERN_DEBUG "HiSax: dst%d 0x%lX\n", i, (ulong) stptr);
- printk(KERN_DEBUG "HiSax: dst%d stp 0x%lX\n", i, (ulong) stptr->l1.stlistp);
- printk(KERN_DEBUG "HiSax: dst%d l1.l1hw 0x%lX\n", i, (ulong) stptr->l1.l1hw);
- printk(KERN_DEBUG "HiSax: tei %d sapi %d\n",
- stptr->l2.tei, stptr->l2.sap);
- printk(KERN_DEBUG "HiSax: man 0x%lX\n", (ulong) stptr->ma.layer);
- pc = stptr->l3.proc;
- while (pc) {
- printk(KERN_DEBUG "HiSax: l3proc %x 0x%lX\n", pc->callref,
- (ulong) pc);
- printk(KERN_DEBUG "HiSax: state %d st 0x%lX chan 0x%lX\n",
- pc->state, (ulong) pc->st, (ulong) pc->chan);
- pc = pc->next;
- }
- stptr = stptr->next;
- i++;
- }
- for (j = 0; j < 2; j++) {
- printk(KERN_DEBUG "HiSax: ch%d 0x%lX\n", j,
- (ulong) & cs->channel[j]);
- stptr = cs->channel[j].b_st;
- i = 1;
- while (stptr != NULL) {
- printk(KERN_DEBUG "HiSax: b_st%d 0x%lX\n", i, (ulong) stptr);
- printk(KERN_DEBUG "HiSax: man 0x%lX\n", (ulong) stptr->ma.layer);
- stptr = stptr->next;
- i++;
- }
+#ifdef ERROR_STATISTIC
+ printk(KERN_DEBUG "HiSax: dc errors(rx,crc,tx) %d,%d,%d\n",
+ cs->err_rx, cs->err_crc, cs->err_tx);
+ printk(KERN_DEBUG "HiSax: bc0 errors(inv,rdo,crc,tx) %d,%d,%d,%d\n",
+ cs->bcs[0].err_inv, cs->bcs[0].err_rdo, cs->bcs[0].err_crc, cs->bcs[0].err_tx);
+ printk(KERN_DEBUG "HiSax: bc1 errors(inv,rdo,crc,tx) %d,%d,%d,%d\n",
+ cs->bcs[1].err_inv, cs->bcs[1].err_rdo, cs->bcs[1].err_crc, cs->bcs[1].err_tx);
+ if (sel == 99) {
+ cs->err_rx = 0;
+ cs->err_crc = 0;
+ cs->err_tx = 0;
+ cs->bcs[0].err_inv = 0;
+ cs->bcs[0].err_rdo = 0;
+ cs->bcs[0].err_crc = 0;
+ cs->bcs[0].err_tx = 0;
+ cs->bcs[1].err_inv = 0;
+ cs->bcs[1].err_rdo = 0;
+ cs->bcs[1].err_crc = 0;
+ cs->bcs[1].err_tx = 0;
}
+#endif
}
-int __init
-HiSax_init(void)
+__initfunc(int
+HiSax_init(void))
{
int i;
@@ -1452,27 +1437,18 @@
#ifdef CONFIG_HISAX_ELSA
if (type[0] == ISDN_CTYPE_ELSA_PCMCIA) {
/* we have exported and return in this case */
-#ifndef COMPAT_HAS_NEW_SYMTAB
- register_symtab(&hisax_syms_elsa);
-#endif
return 0;
}
#endif
#ifdef CONFIG_HISAX_SEDLBAUER
if (type[0] == ISDN_CTYPE_SEDLBAUER_PCMCIA) {
/* we have to export and return in this case */
-#ifndef COMPAT_HAS_NEW_SYMTAB
- register_symtab(&hisax_syms_sedl);
-#endif
return 0;
}
#endif
#ifdef CONFIG_HISAX_AVM_A1_PCMCIA
if (type[0] == ISDN_CTYPE_A1_PCMCIA) {
/* we have to export and return in this case */
-#ifndef COMPAT_HAS_NEW_SYMTAB
- register_symtab(&hisax_syms_avm_a1);
-#endif
return 0;
}
#endif
@@ -1515,6 +1491,7 @@
break;
#endif
case ISDN_CTYPE_ELSA:
+ case ISDN_CTYPE_HFC_PCI:
cards[i].para[0] = io[i];
break;
case ISDN_CTYPE_16_3:
@@ -1550,6 +1527,7 @@
case ISDN_CTYPE_NETJET:
case ISDN_CTYPE_AMD7930:
case ISDN_CTYPE_TELESPCI:
+ case ISDN_CTYPE_W6692:
break;
case ISDN_CTYPE_BKM_A4T:
break;
@@ -1582,11 +1560,6 @@
if (HiSax_inithardware(NULL)) {
/* Install only, if at least one card found */
#ifdef MODULE
-#ifndef COMPAT_HAS_NEW_SYMTAB
- /* No symbols to export, hide all symbols */
- register_symtab(NULL);
- printk(KERN_INFO "HiSax: module installed\n");
-#endif /* COMPAT_HAS_NEW_SYMTAB */
#endif /* MODULE */
return (0);
} else {
@@ -1629,9 +1602,7 @@
nrcards = 0;
HiSaxVersion();
- if (id) /* If id= string used */
- HiSax_id = id;
- /* Initialize all 8 structs, even though we only accept
+ /* Initialize all structs, even though we only accept
two pcmcia cards
*/
for (i = 0; i < HISAX_MAX_CARDS; i++) {
@@ -1680,9 +1651,7 @@
nrcards = 0;
HiSaxVersion();
- if (id) /* If id= string used */
- HiSax_id = id;
- /* Initialize all 8 structs, even though we only accept
+ /* Initialize all structs, even though we only accept
two pcmcia cards
*/
for (i = 0; i < HISAX_MAX_CARDS; i++) {
@@ -1731,12 +1700,10 @@
nrcards = 0;
HiSaxVersion();
- if (id) /* If id= string used */
- HiSax_id = id;
- /* Initialize all 16 structs, even though we only accept
+ /* Initialize all structs, even though we only accept
two pcmcia cards
*/
- for (i = 0; i < 16; i++) {
+ for (i = 0; i < HISAX_MAX_CARDS; i++) {
cards[i].para[0] = irq[i];
cards[i].para[1] = io[i];
cards[i].typ = type[i];
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)