patch-2.2.14 linux/drivers/isdn/eicon/eicon_mod.c
Next file: linux/drivers/isdn/hisax/arcofi.c
Previous file: linux/drivers/isdn/eicon/eicon_isa.h
Back to the patch index
Back to the overall index
- Lines: 722
- Date:
Tue Jan 4 10:12:15 2000
- Orig file:
v2.2.13/linux/drivers/isdn/eicon/eicon_mod.c
- Orig date:
Tue Jan 4 11:10:34 2000
diff -u --recursive --new-file v2.2.13/linux/drivers/isdn/eicon/eicon_mod.c linux/drivers/isdn/eicon/eicon_mod.c
@@ -1,4 +1,4 @@
-/* $Id: eicon_mod.c,v 1.15 1999/09/08 20:17:31 armin Exp $
+/* $Id: eicon_mod.c,v 1.22 1999/11/27 12:56:19 armin Exp $
*
* ISDN lowlevel-module for Eicon.Diehl active cards.
*
@@ -11,6 +11,11 @@
*
* Deutsche Telekom AG for S2M support.
*
+ * Deutsche Mailbox Saar-Lor-Lux GmbH
+ * for sponsoring and testing fax
+ * capabilities with Diva Server cards.
+ * (dor@deutschemailbox.de)
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
@@ -26,8 +31,32 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log: eicon_mod.c,v $
+ * Revision 1.22 1999/11/27 12:56:19 armin
+ * Forgot some iomem changes for last ioremap compat.
+ *
+ * Revision 1.21 1999/11/25 11:35:10 armin
+ * Microchannel fix from Erik Weber (exrz73@ibm.net).
+ * Minor cleanup.
+ *
+ * Revision 1.20 1999/11/18 21:14:30 armin
+ * New ISA memory mapped IO
+ *
+ * Revision 1.19 1999/11/12 13:21:44 armin
+ * Bugfix of undefined reference with CONFIG_MCA
+ *
+ * Revision 1.18 1999/10/11 18:13:25 armin
+ * Added fax capabilities for Eicon Diva Server cards.
+ *
+ * Revision 1.17 1999/10/08 22:09:34 armin
+ * Some fixes of cards interface handling.
+ * Bugfix of NULL pointer occurence.
+ * Changed a few log outputs.
+ *
+ * Revision 1.16 1999/09/26 14:17:53 armin
+ * Improved debug and log via readstat()
+ *
* Revision 1.15 1999/09/08 20:17:31 armin
- * Added microchannel patch from Erik Weber.
+ * Added microchannel patch from Erik Weber (exrz73@ibm.net).
*
* Revision 1.14 1999/09/06 07:29:35 fritz
* Changed my mail-address.
@@ -104,7 +133,7 @@
static eicon_card *cards = (eicon_card *) NULL; /* glob. var , contains
start of card-list */
-static char *eicon_revision = "$Revision: 1.15 $";
+static char *eicon_revision = "$Revision: 1.22 $";
extern char *eicon_pci_revision;
extern char *eicon_isa_revision;
@@ -185,8 +214,7 @@
{
if ((channel >= 0) && (channel < card->nchannels))
return &(card->bch[channel]);
- if (DebugVar & 1)
- printk(KERN_WARNING "eicon: Invalid channel %d\n", channel);
+ eicon_log(card, 1, "eicon: Invalid channel %d\n", channel);
return NULL;
}
@@ -263,9 +291,8 @@
eicon_io_rcv_dispatch(card);
break;
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon_ack_dispatch: Illegal bustype %d\n", card->bus);
+ eicon_log(card, 1,
+ "eicon_ack_dispatch: Illegal bustype %d\n", card->bus);
}
}
@@ -279,9 +306,8 @@
eicon_io_ack_dispatch(card);
break;
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon_ack_dispatch: Illegal bustype %d\n", card->bus);
+ eicon_log(card, 1,
+ "eicon_ack_dispatch: Illegal bustype %d\n", card->bus);
}
}
@@ -295,9 +321,8 @@
eicon_io_transmit(card);
break;
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon_transmit: Illegal bustype %d\n", card->bus);
+ eicon_log(card, 1,
+ "eicon_transmit: Illegal bustype %d\n", card->bus);
}
}
@@ -307,8 +332,7 @@
int ret_val;
if (!(xlr = kmalloc(sizeof(xlogreq_t), GFP_KERNEL))) {
- if (DebugVar & 1)
- printk(KERN_WARNING "idi_err: alloc_xlogreq_t failed\n");
+ eicon_log(card, 1, "idi_err: alloc_xlogreq_t failed\n");
return -ENOMEM;
}
if (copy_from_user(xlr, xlogreq, sizeof(xlogreq_t))) {
@@ -338,9 +362,8 @@
int ret = 0;
unsigned long flags;
- if (DebugVar & 16)
- printk(KERN_WARNING "eicon_cmd 0x%x with arg 0x%lx (0x%lx)\n",
- c->command, c->arg, (ulong) *c->parm.num);
+ eicon_log(card, 16, "eicon_cmd 0x%x with arg 0x%lx (0x%lx)\n",
+ c->command, c->arg, (ulong) *c->parm.num);
switch (c->command) {
case ISDN_CMD_IOCTL:
@@ -360,9 +383,8 @@
return card->hwif.pci.PCIram;
#endif
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon: Illegal BUS type %d\n",
+ eicon_log(card, 1,
+ "eicon: Illegal BUS type %d\n",
card->bus);
ret = -ENODEV;
}
@@ -389,9 +411,8 @@
return 0;
#endif /* CONFIG_MCA */
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon: Illegal BUS type %d\n",
+ eicon_log(card, 1,
+ "eicon: Illegal BUS type %d\n",
card->bus);
ret = -ENODEV;
}
@@ -406,9 +427,8 @@
return card->hwif.pci.irq;
#endif
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon: Illegal BUS type %d\n",
+ eicon_log(card, 1,
+ "eicon: Illegal BUS type %d\n",
card->bus);
ret = -ENODEV;
}
@@ -423,9 +443,8 @@
card->hwif.isa.irq = a;
return 0;
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon: Illegal BUS type %d\n",
+ eicon_log(card, 1,
+ "eicon: Illegal BUS type %d\n",
card->bus);
ret = -ENODEV;
}
@@ -441,9 +460,8 @@
&(((eicon_codebuf *)a)->isa));
break;
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon: Illegal BUS type %d\n",
+ eicon_log(card, 1,
+ "eicon: Illegal BUS type %d\n",
card->bus);
ret = -ENODEV;
}
@@ -475,9 +493,8 @@
}
break;
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon: Illegal BUS type %d\n",
+ eicon_log(card, 1,
+ "eicon: Illegal BUS type %d\n",
card->bus);
ret = -ENODEV;
}
@@ -541,7 +558,7 @@
return 0;
case EICON_IOCTL_DEBUGVAR:
DebugVar = a;
- printk(KERN_DEBUG"Eicon: Debug Value set to %ld\n", DebugVar);
+ eicon_log(card, 1, "Eicon: Debug Value set to %ld\n", DebugVar);
return 0;
#ifdef MODULE
case EICON_IOCTL_FREEIT:
@@ -562,8 +579,7 @@
cli();
if ((chan->fsm_state != EICON_STATE_NULL) && (chan->fsm_state != EICON_STATE_LISTEN)) {
restore_flags(flags);
- if (DebugVar & 1)
- printk(KERN_WARNING "Dial on channel %d with state %d\n",
+ eicon_log(card, 1, "Dial on channel %d with state %d\n",
chan->No, chan->fsm_state);
return -EBUSY;
}
@@ -572,7 +588,6 @@
else
tmp[0] = c->parm.setup.eazmsn[0];
chan->fsm_state = EICON_STATE_OCALL;
- chan->callref = 0xffff;
restore_flags(flags);
ret = idi_connect_req(card, chan, c->parm.setup.phone,
@@ -667,20 +682,17 @@
case ISDN_CMD_GETEAZ:
if (!card->flags & EICON_FLAGS_RUNNING)
return -ENODEV;
- if (DebugVar & 1)
- printk(KERN_DEBUG "eicon CMD_GETEAZ not implemented\n");
+ eicon_log(card, 1, "eicon CMD_GETEAZ not implemented\n");
return 0;
case ISDN_CMD_SETSIL:
if (!card->flags & EICON_FLAGS_RUNNING)
return -ENODEV;
- if (DebugVar & 1)
- printk(KERN_DEBUG "eicon CMD_SETSIL not implemented\n");
+ eicon_log(card, 1, "eicon CMD_SETSIL not implemented\n");
return 0;
case ISDN_CMD_GETSIL:
if (!card->flags & EICON_FLAGS_RUNNING)
return -ENODEV;
- if (DebugVar & 1)
- printk(KERN_DEBUG "eicon CMD_GETSIL not implemented\n");
+ eicon_log(card, 1, "eicon CMD_GETSIL not implemented\n");
return 0;
case ISDN_CMD_LOCK:
MOD_INC_USE_COUNT;
@@ -752,6 +764,52 @@
static int
if_readstatus(u_char * buf, int len, int user, int id, int channel)
{
+ int count = 0;
+ int cnt = 0;
+ ulong flags = 0;
+ u_char *p = buf;
+ struct sk_buff *skb;
+
+ eicon_card *card = eicon_findcard(id);
+
+ if (card) {
+ if (!card->flags & EICON_FLAGS_RUNNING)
+ return -ENODEV;
+
+ save_flags(flags);
+ cli();
+ while((skb = skb_dequeue(&card->statq))) {
+
+ if ((skb->len + count) > len)
+ cnt = len - count;
+ else
+ cnt = skb->len;
+
+ if (user)
+ copy_to_user(p, skb->data, cnt);
+ else
+ memcpy(p, skb->data, cnt);
+
+ count += cnt;
+ p += cnt;
+
+ if (cnt == skb->len) {
+ dev_kfree_skb(skb);
+ if (card->statq_entries > 0)
+ card->statq_entries--;
+ } else {
+ skb_pull(skb, cnt);
+ skb_queue_head(&card->statq, skb);
+ restore_flags(flags);
+ return count;
+ }
+ }
+ card->statq_entries = 0;
+ restore_flags(flags);
+ return count;
+ }
+ printk(KERN_ERR
+ "eicon: if_readstatus called with invalid driverId!\n");
return 0;
}
@@ -766,14 +824,11 @@
len = skb->len;
if (card) {
- if (!card->flags & EICON_FLAGS_RUNNING) {
- dev_kfree_skb(skb);
+ if (!card->flags & EICON_FLAGS_RUNNING)
return -ENODEV;
- }
- if (!(chan = find_channel(card, channel))) {
- dev_kfree_skb(skb);
+ if (!(chan = find_channel(card, channel)))
return -ENODEV;
- }
+
if (chan->fsm_state == EICON_STATE_ACTIVE) {
#ifdef CONFIG_ISDN_TTY_FAX
if (chan->l2prot == ISDN_PROTO_L2_FAX) {
@@ -785,16 +840,114 @@
ret = idi_send_data(card, chan, ack, skb, 1);
return (ret);
} else {
- dev_kfree_skb(skb);
return -ENODEV;
}
}
printk(KERN_ERR
"eicon: if_sendbuf called with invalid driverId!\n");
- dev_kfree_skb(skb);
return -ENODEV;
}
+/* jiftime() copied from HiSax */
+static inline int jiftime(char *s, long mark)
+{
+ s += 8;
+
+ *s-- = '\0';
+ *s-- = mark % 10 + '0';
+ mark /= 10;
+ *s-- = mark % 10 + '0';
+ mark /= 10;
+ *s-- = '.';
+ *s-- = mark % 10 + '0';
+ mark /= 10;
+ *s-- = mark % 6 + '0';
+ mark /= 6;
+ *s-- = ':';
+ *s-- = mark % 10 + '0';
+ mark /= 10;
+ *s-- = mark % 10 + '0';
+ return(8);
+}
+
+void
+eicon_putstatus(eicon_card * card, char * buf)
+{
+ ulong flags;
+ int count;
+ isdn_ctrl cmd;
+ u_char *p;
+ struct sk_buff *skb;
+
+ if (!card)
+ return;
+
+ save_flags(flags);
+ cli();
+ count = strlen(buf);
+ skb = alloc_skb(count, GFP_ATOMIC);
+ if (!skb) {
+ restore_flags(flags);
+ printk(KERN_ERR "eicon: could not alloc skb in putstatus\n");
+ return;
+ }
+ p = skb_put(skb, count);
+ memcpy(p, buf, count);
+
+ skb_queue_tail(&card->statq, skb);
+
+ if (card->statq_entries >= MAX_STATUS_BUFFER) {
+ if ((skb = skb_dequeue(&card->statq))) {
+ count -= skb->len;
+ dev_kfree_skb(skb);
+ } else
+ count = 0;
+ } else
+ card->statq_entries++;
+
+ restore_flags(flags);
+ if (count) {
+ cmd.command = ISDN_STAT_STAVAIL;
+ cmd.driver = card->myid;
+ cmd.arg = count;
+ card->interface.statcallb(&cmd);
+ }
+}
+
+/*
+ * Debug and Log
+ */
+void
+eicon_log(eicon_card * card, int level, const char *fmt, ...)
+{
+ va_list args;
+ char Line[160];
+ u_char *p;
+
+
+ if ((DebugVar & level) || (DebugVar & 256)) {
+ va_start(args, fmt);
+
+ if (DebugVar & level) {
+ if (DebugVar & 256) {
+ /* log-buffer */
+ p = Line;
+ p += jiftime(p, jiffies);
+ *p++ = 32;
+ p += vsprintf(p, fmt, args);
+ *p = 0;
+ eicon_putstatus(card, Line);
+ } else {
+ /* printk, syslogd */
+ vsprintf(Line, fmt, args);
+ printk(KERN_DEBUG "%s", Line);
+ }
+ }
+
+ va_end(args);
+ }
+}
+
/*
* Allocate a new card-struct, initialize it
@@ -817,7 +970,7 @@
qloop = (Type == EICON_CTYPE_QUADRO)?2:0;
for (i = 0; i <= qloop; i++) {
if (!(card = (eicon_card *) kmalloc(sizeof(eicon_card), GFP_KERNEL))) {
- printk(KERN_WARNING
+ eicon_log(card, 1,
"eicon: (%s) Could not allocate card-struct.\n", id);
return;
}
@@ -826,6 +979,8 @@
skb_queue_head_init(&card->rcvq);
skb_queue_head_init(&card->rackq);
skb_queue_head_init(&card->sackq);
+ skb_queue_head_init(&card->statq);
+ card->statq_entries = 0;
card->snd_tq.routine = (void *) (void *) eicon_transmit;
card->snd_tq.data = card;
card->rcv_tq.routine = (void *) (void *) eicon_rcv_dispatch;
@@ -854,19 +1009,28 @@
case EICON_CTYPE_S:
case EICON_CTYPE_SX:
case EICON_CTYPE_SCOM:
- if (membase == -1)
- membase = EICON_ISA_MEMBASE;
- if (irq == -1)
- irq = EICON_ISA_IRQ;
- card->bus = EICON_BUS_MCA;
- card->hwif.isa.card = (void *)card;
- card->hwif.isa.shmem = (eicon_isa_shmem *)membase;
- card->hwif.isa.master = 1;
-
- card->hwif.isa.irq = irq;
- card->hwif.isa.type = Type;
- card->nchannels = 2;
- card->interface.channels = 1;
+ if (MCA_bus) {
+ if (membase == -1)
+ membase = EICON_ISA_MEMBASE;
+ if (irq == -1)
+ irq = EICON_ISA_IRQ;
+ card->bus = EICON_BUS_MCA;
+ card->hwif.isa.card = (void *)card;
+ card->hwif.isa.shmem = (eicon_isa_shmem *)membase;
+ card->hwif.isa.physmem = (unsigned long)membase;
+ card->hwif.isa.master = 1;
+
+ card->hwif.isa.irq = irq;
+ card->hwif.isa.type = Type;
+ card->nchannels = 2;
+ card->interface.channels = 1;
+ } else {
+ printk(KERN_WARNING
+ "eicon (%s): no MCA bus detected.\n",
+ card->interface.id);
+ kfree(card);
+ return;
+ }
break;
#endif /* CONFIG_MCA */
case EICON_CTYPE_QUADRO:
@@ -877,6 +1041,7 @@
card->bus = EICON_BUS_ISA;
card->hwif.isa.card = (void *)card;
card->hwif.isa.shmem = (eicon_isa_shmem *)(membase + (i+1) * EICON_ISA_QOFFSET);
+ card->hwif.isa.physmem = (unsigned long)(membase + (i+1) * EICON_ISA_QOFFSET);
card->hwif.isa.master = 0;
strcpy(card->interface.id, id);
if (id[strlen(id) - 1] == 'a') {
@@ -897,7 +1062,7 @@
p = p->next;
}
if (!p) {
- printk(KERN_WARNING "eicon_alloccard: Quadro Master not found.\n");
+ eicon_log(card, 1, "eicon_alloccard: Quadro Master not found.\n");
kfree(card);
return;
}
@@ -919,7 +1084,7 @@
ISDN_FEATURE_L2_V11019 |
ISDN_FEATURE_L2_V11038 |
ISDN_FEATURE_L2_MODEM |
- /* ISDN_FEATURE_L2_FAX | */
+ ISDN_FEATURE_L2_FAX |
ISDN_FEATURE_L3_TRANSDSP |
ISDN_FEATURE_L3_FAX;
card->hwif.pci.card = (void *)card;
@@ -943,7 +1108,7 @@
ISDN_FEATURE_L2_V11019 |
ISDN_FEATURE_L2_V11038 |
ISDN_FEATURE_L2_MODEM |
- /* ISDN_FEATURE_L2_FAX | */
+ ISDN_FEATURE_L2_FAX |
ISDN_FEATURE_L3_TRANSDSP |
ISDN_FEATURE_L3_FAX;
card->hwif.pci.card = (void *)card;
@@ -970,6 +1135,7 @@
card->bus = EICON_BUS_ISA;
card->hwif.isa.card = (void *)card;
card->hwif.isa.shmem = (eicon_isa_shmem *)membase;
+ card->hwif.isa.physmem = (unsigned long)membase;
card->hwif.isa.master = 1;
card->hwif.isa.irq = irq;
card->hwif.isa.type = Type;
@@ -984,6 +1150,7 @@
card->bus = EICON_BUS_ISA;
card->hwif.isa.card = (void *)card;
card->hwif.isa.shmem = (eicon_isa_shmem *)membase;
+ card->hwif.isa.physmem = (unsigned long)membase;
card->hwif.isa.master = 1;
card->hwif.isa.irq = irq;
card->hwif.isa.type = Type;
@@ -992,27 +1159,28 @@
break;
#endif
default:
- printk(KERN_WARNING "eicon_alloccard: Invalid type %d\n", Type);
+ eicon_log(card, 1, "eicon_alloccard: Invalid type %d\n", Type);
kfree(card);
return;
}
if (!(card->bch = (eicon_chan *) kmalloc(sizeof(eicon_chan) * (card->nchannels + 1)
, GFP_KERNEL))) {
- printk(KERN_WARNING
+ eicon_log(card, 1,
"eicon: (%s) Could not allocate bch-struct.\n", id);
kfree(card);
return;
}
for (j=0; j< (card->nchannels + 1); j++) {
memset((char *)&card->bch[j], 0, sizeof(eicon_chan));
- card->bch[j].plci = 0x8000;
- card->bch[j].ncci = 0x8000;
+ card->bch[j].statectrl = 0;
card->bch[j].l2prot = ISDN_PROTO_L2_X75I;
card->bch[j].l3prot = ISDN_PROTO_L3_TRANS;
card->bch[j].e.D3Id = 0;
card->bch[j].e.B2Id = 0;
card->bch[j].e.Req = 0;
card->bch[j].No = j;
+ card->bch[j].tskb1 = NULL;
+ card->bch[j].tskb2 = NULL;
skb_queue_head_init(&card->bch[j].e.X);
skb_queue_head_init(&card->bch[j].e.R);
}
@@ -1044,9 +1212,8 @@
break;
#endif
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon_registercard: Illegal BUS type %d\n",
+ eicon_log(card, 1,
+ "eicon_registercard: Illegal BUS type %d\n",
card->bus);
return -1;
}
@@ -1085,9 +1252,8 @@
break;
#endif
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon: Invalid BUS type %d\n",
+ eicon_log(card, 1,
+ "eicon: Invalid BUS type %d\n",
card->bus);
break;
}
@@ -1096,6 +1262,26 @@
static void
eicon_freecard(eicon_card *card) {
+ int i;
+ struct sk_buff *skb;
+
+ for(i = 0; i < (card->nchannels + 1); i++) {
+ while((skb = skb_dequeue(&card->bch[i].e.X)))
+ dev_kfree_skb(skb);
+ while((skb = skb_dequeue(&card->bch[i].e.R)))
+ dev_kfree_skb(skb);
+ }
+ while((skb = skb_dequeue(&card->sndq)))
+ dev_kfree_skb(skb);
+ while((skb = skb_dequeue(&card->rcvq)))
+ dev_kfree_skb(skb);
+ while((skb = skb_dequeue(&card->rackq)))
+ dev_kfree_skb(skb);
+ while((skb = skb_dequeue(&card->sackq)))
+ dev_kfree_skb(skb);
+ while((skb = skb_dequeue(&card->statq)))
+ dev_kfree_skb(skb);
+
eicon_clear_msn(card);
kfree(card->bch);
kfree(card);
@@ -1141,9 +1327,8 @@
break;
#endif
default:
- if (DebugVar & 1)
- printk(KERN_WARNING
- "eicon: addcard: Invalid BUS type %d\n",
+ printk(KERN_ERR
+ "eicon: addcard: Invalid BUS type %d\n",
p->bus);
}
} else
@@ -1155,7 +1340,7 @@
p = p->next;
} else {
/* registering failed, remove card from list, free memory */
- printk(KERN_WARNING
+ printk(KERN_ERR
"eicon: Initialization of %s failed\n",
p->interface.id);
if (q) {
@@ -1222,10 +1407,9 @@
printk(KERN_INFO
"eicon: No MCA bus, ISDN-interfaces not probed.\n");
} else {
- if (DebugVar & 8)
- printk(KERN_DEBUG
- "eicon_mca_find_card, irq=%d.\n",
- irq);
+ eicon_log(NULL, 8,
+ "eicon_mca_find_card, irq=%d.\n",
+ irq);
if (!eicon_mca_find_card(0, membase, irq, id))
card_count++;
};
@@ -1346,10 +1530,9 @@
{
int j, curr_slot = 0;
- if (DebugVar & 8)
- printk(KERN_DEBUG
- "eicon_mca_find_card type: %d, membase: %#x, irq %d \n",
- type, membase, irq);
+ eicon_log(NULL, 8,
+ "eicon_mca_find_card type: %d, membase: %#x, irq %d \n",
+ type, membase, irq);
/* find a no-driver-assigned eicon card */
for (j=0; eicon_mca_adapters[j].adf_id != 0; j++)
{
@@ -1414,11 +1597,10 @@
int irq_array1[]={3,4,0,0,2,10,11,12};
adf_pos0 = mca_read_stored_pos(slot,2);
- if (DebugVar & 8)
- printk(KERN_DEBUG
- "eicon_mca_probe irq=%d, membase=%d\n",
- irq,
- membase);
+ eicon_log(NULL, 8,
+ "eicon_mca_probe irq=%d, membase=%d\n",
+ irq,
+ membase);
switch (a_idx) {
case 0: /* P/2-Adapter (== PRI/S2M ? ) */
cards_membase= 0xC0000+((adf_pos0>>4)*0x4000);
@@ -1473,7 +1655,7 @@
default:
return ENODEV;
};
- /* Uebereinstimmung vorgegebener membase & irq */
+ /* matching membase & irq */
if ( 1 == eicon_addcard(type, membase, irq, id)) {
mca_set_adapter_name(slot, eicon_mca_adapters[a_idx].name);
mca_set_adapter_procfn(slot, (MCA_ProcFn) eicon_info, cards);
@@ -1486,10 +1668,9 @@
/* reset card */
outb_p(0,cards_io+1);
- if (DebugVar & 8)
- printk(KERN_INFO "eicon_addcard: successful for slot # %d.\n",
+ eicon_log(NULL, 8, "eicon_addcard: successful for slot # %d.\n",
cards->mca_slot+1);
- return 0 ; /* eicon_addcard hat eine Karte zugefuegt */
+ return 0 ; /* eicon_addcard added a card */
} else {
return ENODEV;
};
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)