lkml.org 
[lkml]   [2002]   [Feb]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] Removal of big kernel lock from isdn drivers [1/3]
1 of 3

isdn.bkl-remove.isdn_dev_rwsem.patch:
* changes name of "dev" to "isdn_dev"
- If there are going to be global variables,
they can at least not have exceedingly generic
names like "dev"!
* adds global isdn_dev_rwsem
- isdn_dev_rwsem must be held when manipulating "isdn_dev"

This could probably be 2 different patches, but I don't imagine that
the name change will be very controvertial.

I've been examining the continuing additions of the big kernel lock
(BKL) to the 2.5 tree. I noticed that in 2.5.3, the ISDN subsystem
added the BKL to several places. In response to this, I have written
several patches to attempt removal of the BKL from the ISDN subsystem.
I have little knowledge of the drivers themselves, so I would like some
assistance from those of you who understand them better. I probably
have an over-simplified view of the code, so my patches may be too
simplistic.


--
Dave Hansen
haveblue@us.ibm.com
diff -ur -X exclude linux-2.5.3-clean/drivers/isdn/isdn_audio.c linux/drivers/isdn/isdn_audio.c
--- linux-2.5.3-clean/drivers/isdn/isdn_audio.c Sun Sep 30 12:26:06 2001
+++ linux/drivers/isdn/isdn_audio.c Mon Feb 4 11:35:49 2002
@@ -564,13 +564,13 @@
cli();
di = info->isdn_driver;
ch = info->isdn_channel;
- __skb_queue_tail(&dev->drv[di]->rpqueue[ch], skb);
- dev->drv[di]->rcvcount[ch] += 2;
+ __skb_queue_tail(&isdn_dev->drv[di]->rpqueue[ch], skb);
+ isdn_dev->drv[di]->rcvcount[ch] += 2;
restore_flags(flags);
/* Schedule dequeuing */
- if ((dev->modempoll) && (info->rcvsched))
+ if ((isdn_dev->modempoll) && (info->rcvsched))
isdn_timer_ctrl(ISDN_TIMER_MODEMREAD, 1);
- wake_up_interruptible(&dev->drv[di]->rcv_waitq[ch]);
+ wake_up_interruptible(&isdn_dev->drv[di]->rcv_waitq[ch]);
} else
kfree_skb(skb);
s->last = what;
@@ -685,13 +685,13 @@
cli();
di = info->isdn_driver;
ch = info->isdn_channel;
- __skb_queue_tail(&dev->drv[di]->rpqueue[ch], skb);
- dev->drv[di]->rcvcount[ch] += 2;
+ __skb_queue_tail(&isdn_dev->drv[di]->rpqueue[ch], skb);
+ isdn_dev->drv[di]->rcvcount[ch] += 2;
restore_flags(flags);
/* Schedule dequeuing */
- if ((dev->modempoll) && (info->rcvsched))
+ if ((isdn_dev->modempoll) && (info->rcvsched))
isdn_timer_ctrl(ISDN_TIMER_MODEMREAD, 1);
- wake_up_interruptible(&dev->drv[di]->rcv_waitq[ch]);
+ wake_up_interruptible(&isdn_dev->drv[di]->rcv_waitq[ch]);
}

void
diff -ur -X exclude linux-2.5.3-clean/drivers/isdn/isdn_common.c linux/drivers/isdn/isdn_common.c
--- linux-2.5.3-clean/drivers/isdn/isdn_common.c Sun Jan 27 11:33:38 2002
+++ linux/drivers/isdn/isdn_common.c Mon Feb 4 11:40:24 2002
@@ -42,7 +42,8 @@
MODULE_AUTHOR("Fritz Elfert");
MODULE_LICENSE("GPL");

-isdn_dev *dev;
+isdn_dev_t *isdn_dev;
+DECLARE_RWSEM(isdn_dev_rwsem);

static char *isdn_revision = "$Revision: 1.114.6.16 $";

@@ -75,14 +76,14 @@
{
int i;

- for (i = 0; i < dev->drivers; i++) {
+ for (i = 0; i < isdn_dev->drivers; i++) {
isdn_ctrl cmd;

cmd.driver = i;
cmd.arg = 0;
cmd.command = ISDN_CMD_LOCK;
isdn_command(&cmd);
- dev->drv[i]->locks++;
+ isdn_dev->drv[i]->locks++;
}
}

@@ -98,16 +99,18 @@
{
int i;

- for (i = 0; i < dev->drivers; i++)
- if (dev->drv[i]->locks > 0) {
+ down_read(&isdn_dev_rwsem);
+ for (i = 0; i < isdn_dev->drivers; i++)
+ if (isdn_dev->drv[i]->locks > 0) {
isdn_ctrl cmd;

cmd.driver = i;
cmd.arg = 0;
cmd.command = ISDN_CMD_UNLOCK;
isdn_command(&cmd);
- dev->drv[i]->locks--;
+ isdn_dev->drv[i]->locks--;
}
+ up_read(&isdn_dev_rwsem);
}

void
@@ -230,7 +233,7 @@
{
int i;
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- if (dev->chanmap[i] == ch && dev->drvmap[i] == di)
+ if (isdn_dev->chanmap[i] == ch && isdn_dev->drvmap[i] == di)
return i;
return -1;
}
@@ -242,7 +245,7 @@
static void
isdn_timer_funct(ulong dummy)
{
- int tf = dev->tflags;
+ int tf = isdn_dev->tflags;
if (tf & ISDN_TIMER_FAST) {
if (tf & ISDN_TIMER_MODEMREAD)
isdn_tty_readmodem();
@@ -276,7 +279,7 @@

save_flags(flags);
cli();
- mod_timer(&dev->timer, jiffies+ISDN_TIMER_RES);
+ mod_timer(&isdn_dev->timer, jiffies+ISDN_TIMER_RES);
restore_flags(flags);
}
}
@@ -289,18 +292,18 @@

save_flags(flags);
cli();
- if ((tf & ISDN_TIMER_SLOW) && (!(dev->tflags & ISDN_TIMER_SLOW))) {
+ if ((tf & ISDN_TIMER_SLOW) && (!(isdn_dev->tflags & ISDN_TIMER_SLOW))) {
/* If the slow-timer wasn't activated until now */
isdn_timer_cnt1 = 0;
isdn_timer_cnt2 = 0;
}
- old_tflags = dev->tflags;
+ old_tflags = isdn_dev->tflags;
if (onoff)
- dev->tflags |= tf;
+ isdn_dev->tflags |= tf;
else
- dev->tflags &= ~tf;
- if (dev->tflags && !old_tflags)
- mod_timer(&dev->timer, jiffies+ISDN_TIMER_RES);
+ isdn_dev->tflags &= ~tf;
+ if (isdn_dev->tflags && !old_tflags)
+ mod_timer(&isdn_dev->timer, jiffies+ISDN_TIMER_RES);
restore_flags(flags);
}

@@ -317,7 +320,7 @@
return;
}
/* Update statistics */
- dev->ibytes[i] += skb->len;
+ isdn_dev->ibytes[i] += skb->len;

/* First, try to deliver data to network-device */
if (isdn_net_rcv_skb(i, skb))
@@ -327,10 +330,10 @@
* makes sense for async streams only, so it is
* called after possible net-device delivery.
*/
- if (dev->v110[i]) {
- atomic_inc(&dev->v110use[i]);
- skb = isdn_v110_decode(dev->v110[i], skb);
- atomic_dec(&dev->v110use[i]);
+ if (isdn_dev->v110[i]) {
+ atomic_inc(&isdn_dev->v110use[i]);
+ skb = isdn_v110_decode(isdn_dev->v110[i], skb);
+ atomic_dec(&isdn_dev->v110use[i]);
if (!skb)
return;
}
@@ -339,7 +342,7 @@
if (skb->len) {
if (isdn_tty_rcv_skb(i, di, channel, skb))
return;
- wake_up_interruptible(&dev->drv[di]->rcv_waitq[channel]);
+ wake_up_interruptible(&isdn_dev->drv[di]->rcv_waitq[channel]);
} else
dev_kfree_skb(skb);
}
@@ -360,7 +363,7 @@
if (cmd->command == ISDN_CMD_SETL2) {
int idx = isdn_dc2minor(cmd->driver, cmd->arg & 255);
unsigned long l2prot = (cmd->arg >> 8) & 255;
- unsigned long features = (dev->drv[cmd->driver]->interface->features
+ unsigned long features = (isdn_dev->drv[cmd->driver]->interface->features
>> ISDN_FEATURE_L2_SHIFT) &
ISDN_FEATURE_L2_MASK;
unsigned long l2_feature = (1 << l2prot);
@@ -374,14 +377,14 @@
* Layer-2 to transparent
*/
if (!(features & l2_feature)) {
- dev->v110emu[idx] = l2prot;
+ isdn_dev->v110emu[idx] = l2prot;
cmd->arg = (cmd->arg & 255) |
(ISDN_PROTO_L2_TRANS << 8);
} else
- dev->v110emu[idx] = 0;
+ isdn_dev->v110emu[idx] = 0;
}
}
- return dev->drv[cmd->driver]->interface->command(cmd);
+ return isdn_dev->drv[cmd->driver]->interface->command(cmd);
}

void
@@ -438,7 +441,7 @@
case ISDN_STAT_BSENT:
if (i < 0)
return -1;
- if (dev->global_flags & ISDN_GLOBAL_STOPPED)
+ if (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED)
return 0;
if (isdn_net_stat_callback(i, c))
return 0;
@@ -446,24 +449,24 @@
return 0;
if (isdn_tty_stat_callback(i, c))
return 0;
- wake_up_interruptible(&dev->drv[di]->snd_waitq[c->arg]);
+ wake_up_interruptible(&isdn_dev->drv[di]->snd_waitq[c->arg]);
break;
case ISDN_STAT_STAVAIL:
save_flags(flags);
cli();
- dev->drv[di]->stavail += c->arg;
+ isdn_dev->drv[di]->stavail += c->arg;
restore_flags(flags);
- wake_up_interruptible(&dev->drv[di]->st_waitq);
+ wake_up_interruptible(&isdn_dev->drv[di]->st_waitq);
break;
case ISDN_STAT_RUN:
- dev->drv[di]->flags |= DRV_FLAG_RUNNING;
+ isdn_dev->drv[di]->flags |= DRV_FLAG_RUNNING;
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- if (dev->drvmap[i] == di)
- isdn_all_eaz(di, dev->chanmap[i]);
+ if (isdn_dev->drvmap[i] == di)
+ isdn_all_eaz(di, isdn_dev->chanmap[i]);
set_global_features();
break;
case ISDN_STAT_STOP:
- dev->drv[di]->flags &= ~DRV_FLAG_RUNNING;
+ isdn_dev->drv[di]->flags &= ~DRV_FLAG_RUNNING;
break;
case ISDN_STAT_ICALL:
if (i < 0)
@@ -471,7 +474,7 @@
#ifdef ISDN_DEBUG_STATCALLB
printk(KERN_DEBUG "ICALL (net): %d %ld %s\n", di, c->arg, c->parm.num);
#endif
- if (dev->global_flags & ISDN_GLOBAL_STOPPED) {
+ if (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED) {
cmd.driver = di;
cmd.arg = c->arg;
cmd.command = ISDN_CMD_HANGUP;
@@ -494,7 +497,7 @@
if ((retval = divert_if->stat_callback(c)))
return(retval); /* processed */
#endif /* CONFIG_ISDN_DIVERSION */
- if ((!retval) && (dev->drv[di]->flags & DRV_FLAG_REJBUS)) {
+ if ((!retval) && (isdn_dev->drv[di]->flags & DRV_FLAG_REJBUS)) {
/* No tty responding */
cmd.driver = di;
cmd.arg = c->arg;
@@ -509,7 +512,7 @@
cmd.driver = di;
cmd.arg = c->arg;
cmd.command = ISDN_CMD_ACCEPTD;
- for ( p = dev->netdev; p; p = p->next )
+ for ( p = isdn_dev->netdev; p; p = p->next )
if ( p->local->isdn_channel == cmd.arg )
{
strcpy( cmd.parm.setup.eazmsn, p->local->msn );
@@ -550,7 +553,7 @@
#ifdef ISDN_DEBUG_STATCALLB
printk(KERN_DEBUG "CINF: %ld %s\n", c->arg, c->parm.num);
#endif
- if (dev->global_flags & ISDN_GLOBAL_STOPPED)
+ if (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED)
return 0;
if (strcmp(c->parm.num, "0"))
isdn_net_stat_callback(i, c);
@@ -561,7 +564,7 @@
printk(KERN_DEBUG "CAUSE: %ld %s\n", c->arg, c->parm.num);
#endif
printk(KERN_INFO "isdn: %s,ch%ld cause: %s\n",
- dev->drvid[di], c->arg, c->parm.num);
+ isdn_dev->drvid[di], c->arg, c->parm.num);
isdn_tty_stat_callback(i, c);
#ifdef CONFIG_ISDN_DIVERSION
if (divert_if)
@@ -584,7 +587,7 @@
#ifdef ISDN_DEBUG_STATCALLB
printk(KERN_DEBUG "DCONN: %ld\n", c->arg);
#endif
- if (dev->global_flags & ISDN_GLOBAL_STOPPED)
+ if (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED)
return 0;
/* Find any net-device, waiting for D-channel setup */
if (isdn_net_stat_callback(i, c))
@@ -605,9 +608,9 @@
#ifdef ISDN_DEBUG_STATCALLB
printk(KERN_DEBUG "DHUP: %ld\n", c->arg);
#endif
- if (dev->global_flags & ISDN_GLOBAL_STOPPED)
+ if (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED)
return 0;
- dev->drv[di]->online &= ~(1 << (c->arg));
+ isdn_dev->drv[di]->online &= ~(1 << (c->arg));
isdn_info_update();
/* Signal hangup to network-devices */
if (isdn_net_stat_callback(i, c))
@@ -628,9 +631,9 @@
printk(KERN_DEBUG "BCONN: %ld\n", c->arg);
#endif
/* Signal B-channel-connect to network-devices */
- if (dev->global_flags & ISDN_GLOBAL_STOPPED)
+ if (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED)
return 0;
- dev->drv[di]->online |= (1 << (c->arg));
+ isdn_dev->drv[di]->online |= (1 << (c->arg));
isdn_info_update();
if (isdn_net_stat_callback(i, c))
break;
@@ -644,9 +647,9 @@
#ifdef ISDN_DEBUG_STATCALLB
printk(KERN_DEBUG "BHUP: %ld\n", c->arg);
#endif
- if (dev->global_flags & ISDN_GLOBAL_STOPPED)
+ if (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED)
return 0;
- dev->drv[di]->online &= ~(1 << (c->arg));
+ isdn_dev->drv[di]->online &= ~(1 << (c->arg));
isdn_info_update();
#ifdef CONFIG_ISDN_X25
/* Signal hangup to network-devices */
@@ -663,7 +666,7 @@
#ifdef ISDN_DEBUG_STATCALLB
printk(KERN_DEBUG "NODCH: %ld\n", c->arg);
#endif
- if (dev->global_flags & ISDN_GLOBAL_STOPPED)
+ if (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED)
return 0;
if (isdn_net_stat_callback(i, c))
break;
@@ -671,7 +674,7 @@
break;
break;
case ISDN_STAT_ADDCH:
- if (isdn_add_channels(dev->drv[di], di, c->arg, 1))
+ if (isdn_add_channels(isdn_dev->drv[di], di, c->arg, 1))
return -1;
isdn_info_update();
break;
@@ -679,13 +682,13 @@
save_flags(flags);
cli();
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- if ((dev->drvmap[i] == di) &&
- (dev->chanmap[i] == c->arg)) {
+ if ((isdn_dev->drvmap[i] == di) &&
+ (isdn_dev->chanmap[i] == c->arg)) {
if (c->parm.num[0])
- dev->usage[i] &= ~ISDN_USAGE_DISABLED;
+ isdn_dev->usage[i] &= ~ISDN_USAGE_DISABLED;
else
- if (USG_NONE(dev->usage[i])) {
- dev->usage[i] |= ISDN_USAGE_DISABLED;
+ if (USG_NONE(isdn_dev->usage[i])) {
+ isdn_dev->usage[i] |= ISDN_USAGE_DISABLED;
}
else
retval = -1;
@@ -695,35 +698,35 @@
isdn_info_update();
break;
case ISDN_STAT_UNLOAD:
- while (dev->drv[di]->locks > 0) {
+ while (isdn_dev->drv[di]->locks > 0) {
isdn_ctrl cmd;
cmd.driver = di;
cmd.arg = 0;
cmd.command = ISDN_CMD_UNLOCK;
isdn_command(&cmd);
- dev->drv[di]->locks--;
+ isdn_dev->drv[di]->locks--;
}
save_flags(flags);
cli();
isdn_tty_stat_callback(i, c);
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- if (dev->drvmap[i] == di) {
- dev->drvmap[i] = -1;
- dev->chanmap[i] = -1;
- dev->usage[i] &= ~ISDN_USAGE_DISABLED;
+ if (isdn_dev->drvmap[i] == di) {
+ isdn_dev->drvmap[i] = -1;
+ isdn_dev->chanmap[i] = -1;
+ isdn_dev->usage[i] &= ~ISDN_USAGE_DISABLED;
isdn_unregister_devfs(i);
}
- dev->drivers--;
- dev->channels -= dev->drv[di]->channels;
- kfree(dev->drv[di]->rcverr);
- kfree(dev->drv[di]->rcvcount);
- for (i = 0; i < dev->drv[di]->channels; i++)
- skb_queue_purge(&dev->drv[di]->rpqueue[i]);
- kfree(dev->drv[di]->rpqueue);
- kfree(dev->drv[di]->rcv_waitq);
- kfree(dev->drv[di]);
- dev->drv[di] = NULL;
- dev->drvid[di][0] = '\0';
+ isdn_dev->drivers--;
+ isdn_dev->channels -= isdn_dev->drv[di]->channels;
+ kfree(isdn_dev->drv[di]->rcverr);
+ kfree(isdn_dev->drv[di]->rcvcount);
+ for (i = 0; i < isdn_dev->drv[di]->channels; i++)
+ skb_queue_purge(&isdn_dev->drv[di]->rpqueue[i]);
+ kfree(isdn_dev->drv[di]->rpqueue);
+ kfree(isdn_dev->drv[di]->rcv_waitq);
+ kfree(isdn_dev->drv[di]);
+ isdn_dev->drv[di] = NULL;
+ isdn_dev->drvid[di][0] = '\0';
isdn_info_update();
set_global_features();
restore_flags(flags);
@@ -792,26 +795,26 @@
struct sk_buff *skb;
u_char *cp;

- if (!dev->drv[di])
+ if (!isdn_dev->drv[di])
return 0;
- if (skb_queue_empty(&dev->drv[di]->rpqueue[channel])) {
+ if (skb_queue_empty(&isdn_dev->drv[di]->rpqueue[channel])) {
if (sleep)
interruptible_sleep_on(sleep);
else
return 0;
}
- if (len > dev->drv[di]->rcvcount[channel])
- len = dev->drv[di]->rcvcount[channel];
+ if (len > isdn_dev->drv[di]->rcvcount[channel])
+ len = isdn_dev->drv[di]->rcvcount[channel];
cp = buf;
count = 0;
while (len) {
- if (!(skb = skb_peek(&dev->drv[di]->rpqueue[channel])))
+ if (!(skb = skb_peek(&isdn_dev->drv[di]->rpqueue[channel])))
break;
#ifdef CONFIG_ISDN_AUDIO
if (ISDN_AUDIO_SKB_LOCK(skb))
break;
ISDN_AUDIO_SKB_LOCK(skb) = 1;
- if ((ISDN_AUDIO_SKB_DLECOUNT(skb)) || (dev->drv[di]->DLEflag & (1 << channel))) {
+ if ((ISDN_AUDIO_SKB_DLECOUNT(skb)) || (isdn_dev->drv[di]->DLEflag & (1 << channel))) {
char *p = skb->data;
unsigned long DLEmask = (1 << channel);

@@ -819,13 +822,13 @@
count_pull = count_put = 0;
while ((count_pull < skb->len) && (len > 0)) {
len--;
- if (dev->drv[di]->DLEflag & DLEmask) {
+ if (isdn_dev->drv[di]->DLEflag & DLEmask) {
*cp++ = DLE;
- dev->drv[di]->DLEflag &= ~DLEmask;
+ isdn_dev->drv[di]->DLEflag &= ~DLEmask;
} else {
*cp++ = *p;
if (*p == DLE) {
- dev->drv[di]->DLEflag |= DLEmask;
+ isdn_dev->drv[di]->DLEflag |= DLEmask;
(ISDN_AUDIO_SKB_DLECOUNT(skb))--;
}
p++;
@@ -864,7 +867,7 @@
#ifdef CONFIG_ISDN_AUDIO
ISDN_AUDIO_SKB_LOCK(skb) = 0;
#endif
- skb = skb_dequeue(&dev->drv[di]->rpqueue[channel]);
+ skb = skb_dequeue(&isdn_dev->drv[di]->rpqueue[channel]);
dev_kfree_skb(skb);
} else {
/* Not yet emptied this buff, so it
@@ -876,7 +879,7 @@
ISDN_AUDIO_SKB_LOCK(skb) = 0;
#endif
}
- dev->drv[di]->rcvcount[channel] -= count_put;
+ isdn_dev->drv[di]->rcvcount[channel] -= count_put;
}
return count;
}
@@ -884,13 +887,13 @@
static __inline int
isdn_minor2drv(int minor)
{
- return (dev->drvmap[minor]);
+ return (isdn_dev->drvmap[minor]);
}

static __inline int
isdn_minor2chan(int minor)
{
- return (dev->chanmap[minor]);
+ return (isdn_dev->chanmap[minor]);
}

static char *
@@ -903,32 +906,32 @@
sprintf(istatbuf, "idmap:\t");
p = istatbuf + strlen(istatbuf);
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- sprintf(p, "%s ", (dev->drvmap[i] < 0) ? "-" : dev->drvid[dev->drvmap[i]]);
+ sprintf(p, "%s ", (isdn_dev->drvmap[i] < 0) ? "-" : isdn_dev->drvid[isdn_dev->drvmap[i]]);
p = istatbuf + strlen(istatbuf);
}
sprintf(p, "\nchmap:\t");
p = istatbuf + strlen(istatbuf);
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- sprintf(p, "%d ", dev->chanmap[i]);
+ sprintf(p, "%d ", isdn_dev->chanmap[i]);
p = istatbuf + strlen(istatbuf);
}
sprintf(p, "\ndrmap:\t");
p = istatbuf + strlen(istatbuf);
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- sprintf(p, "%d ", dev->drvmap[i]);
+ sprintf(p, "%d ", isdn_dev->drvmap[i]);
p = istatbuf + strlen(istatbuf);
}
sprintf(p, "\nusage:\t");
p = istatbuf + strlen(istatbuf);
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- sprintf(p, "%d ", dev->usage[i]);
+ sprintf(p, "%d ", isdn_dev->usage[i]);
p = istatbuf + strlen(istatbuf);
}
sprintf(p, "\nflags:\t");
p = istatbuf + strlen(istatbuf);
for (i = 0; i < ISDN_MAX_DRIVERS; i++) {
- if (dev->drv[i]) {
- sprintf(p, "%ld ", dev->drv[i]->online);
+ if (isdn_dev->drv[i]) {
+ sprintf(p, "%ld ", isdn_dev->drv[i]->online);
p = istatbuf + strlen(istatbuf);
} else {
sprintf(p, "? ");
@@ -938,7 +941,7 @@
sprintf(p, "\nphone:\t");
p = istatbuf + strlen(istatbuf);
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- sprintf(p, "%s ", dev->num[i]);
+ sprintf(p, "%s ", isdn_dev->num[i]);
p = istatbuf + strlen(istatbuf);
}
sprintf(p, "\n");
@@ -952,13 +955,13 @@
void
isdn_info_update(void)
{
- infostruct *p = dev->infochain;
+ infostruct *p = isdn_dev->infochain;

while (p) {
*(p->private) = 1;
p = (infostruct *) p->next;
}
- wake_up_interruptible(&(dev->info_waitq));
+ wake_up_interruptible(&(isdn_dev->info_waitq));
}

static int
@@ -970,9 +973,9 @@
if (!p)
return -ENOMEM;

- p->next = (char *) dev->infochain;
+ p->next = (char *) isdn_dev->infochain;
p->private = (char *) &(filep->private_data);
- dev->infochain = p;
+ isdn_dev->infochain = p;
/* At opening we allow a single update */
filep->private_data = (char *) 1;

@@ -982,17 +985,16 @@
static int
isdn_status_release(struct inode *ino, struct file *filep)
{
- infostruct *p = dev->infochain;
+ infostruct *p = isdn_dev->infochain;
infostruct *q = NULL;

- lock_kernel();
-
+ down_write(&isdn_dev_rwsem);
while (p) {
if (p->private == (char *) &(filep->private_data)) {
if (q)
q->next = p->next;
else
- dev->infochain = (infostruct *) (p->next);
+ isdn_dev->infochain = (infostruct *) (p->next);
kfree(p);
goto out;
}
@@ -1002,7 +1004,7 @@
printk(KERN_WARNING "isdn: No private data while closing isdnctrl\n");

out:
- unlock_kernel();
+ up_write(&isdn_dev_rwsem);
return 0;
}

@@ -1016,13 +1018,13 @@
if (off != &file->f_pos)
return -ESPIPE;

- lock_kernel();
+ down_write(&isdn_dev_rwsem);
if (!file->private_data) {
if (file->f_flags & O_NONBLOCK) {
retval = -EAGAIN;
goto out;
}
- interruptible_sleep_on(&(dev->info_waitq));
+ interruptible_sleep_on(&(isdn_dev->info_waitq));
}
p = isdn_statstr();
file->private_data = 0;
@@ -1039,7 +1041,7 @@
goto out;

out:
- unlock_kernel();
+ up_write(&isdn_dev_rwsem);
return retval;
}

@@ -1054,13 +1056,13 @@
{
unsigned int mask = 0;

- lock_kernel();
+ down_read(&isdn_dev_rwsem);

- poll_wait(file, &(dev->info_waitq), wait);
+ poll_wait(file, &(isdn_dev->info_waitq), wait);
if (file->private_data)
mask |= POLLIN | POLLRDNORM;

- unlock_kernel();
+ up_read(&isdn_dev_rwsem);
return mask;
}

@@ -1095,8 +1097,8 @@
sizeof(ulong) * ISDN_MAX_CHANNELS * 2)))
return ret;
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- put_user(dev->ibytes[i], p++);
- put_user(dev->obytes[i], p++);
+ put_user(isdn_dev->ibytes[i], p++);
+ put_user(isdn_dev->obytes[i], p++);
}
return 0;
} else
@@ -1146,9 +1148,11 @@
uint minor = minor(ino->i_rdev);
int drvidx;

+ down_read(&isdn_dev_rwsem);
drvidx = isdn_minor2drv(minor - ISDN_MINOR_CTRL);
if (drvidx < 0)
return -ENODEV;
+ up_read(&isdn_dev_rwsem);

isdn_lock_drivers();
return 0;
@@ -1157,14 +1161,15 @@
static int
isdn_ctrl_release(struct inode *ino, struct file *filep)
{
- lock_kernel();
-
- if (dev->profd == current)
- dev->profd = NULL;
+ down_read(&isdn_dev_rwsem);
+
+ if (isdn_dev->profd == current)
+ isdn_dev->profd = NULL;

isdn_unlock_drivers();

- unlock_kernel();
+ up_read(&isdn_dev_rwsem);
+
return 0;
}

@@ -1180,24 +1185,24 @@
if (off != &file->f_pos)
return -ESPIPE;

- lock_kernel();
+ down_read(&isdn_dev_rwsem);

drvidx = isdn_minor2drv(minor - ISDN_MINOR_CTRL);
if (drvidx < 0) {
retval = -ENODEV;
goto out;
}
- if (!dev->drv[drvidx]->stavail) {
+ if (!isdn_dev->drv[drvidx]->stavail) {
if (file->f_flags & O_NONBLOCK) {
retval = -EAGAIN;
goto out;
}
- interruptible_sleep_on(&(dev->drv[drvidx]->st_waitq));
+ interruptible_sleep_on(&(isdn_dev->drv[drvidx]->st_waitq));
}
- if (dev->drv[drvidx]->interface->readstat) {
- if (count > dev->drv[drvidx]->stavail)
- count = dev->drv[drvidx]->stavail;
- len = dev->drv[drvidx]->interface->
+ if (isdn_dev->drv[drvidx]->interface->readstat) {
+ if (count > isdn_dev->drv[drvidx]->stavail)
+ count = isdn_dev->drv[drvidx]->stavail;
+ len = isdn_dev->drv[drvidx]->interface->
readstat(buf, count, 1, drvidx,
isdn_minor2chan(minor));
} else {
@@ -1206,15 +1211,15 @@
save_flags(flags);
cli();
if (len)
- dev->drv[drvidx]->stavail -= len;
+ isdn_dev->drv[drvidx]->stavail -= len;
else
- dev->drv[drvidx]->stavail = 0;
+ isdn_dev->drv[drvidx]->stavail = 0;
restore_flags(flags);
*off += len;
retval = len;

out:
- unlock_kernel();
+ up_read(&isdn_dev_rwsem);
return retval;
}

@@ -1228,22 +1233,22 @@
if (off != &file->f_pos)
return -ESPIPE;

- lock_kernel();
+ down_read(&isdn_dev_rwsem);

drvidx = isdn_minor2drv(minor - ISDN_MINOR_CTRL);
if (drvidx < 0) {
retval = -ENODEV;
goto out;
}
- if (!dev->drv[drvidx]->interface->writecmd) {
+ if (!isdn_dev->drv[drvidx]->interface->writecmd) {
retval = -EINVAL;
goto out;
}
- retval = dev->drv[drvidx]->interface->
+ retval = isdn_dev->drv[drvidx]->interface->
writecmd(buf, count, 1, drvidx, isdn_minor2chan(minor - ISDN_MINOR_CTRL));

out:
- unlock_kernel();
+ up_read(&isdn_dev_rwsem);
return retval;
}

@@ -1259,14 +1264,14 @@
/* driver deregistered while file open */
return POLLHUP;

- lock_kernel();
+ down_read(&isdn_dev_rwsem);

- poll_wait(file, &(dev->drv[drvidx]->st_waitq), wait);
+ poll_wait(file, &(isdn_dev->drv[drvidx]->st_waitq), wait);
mask = POLLOUT | POLLWRNORM;
- if (dev->drv[drvidx]->stavail)
+ if (isdn_dev->drv[drvidx]->stavail)
mask |= POLLIN | POLLRDNORM;

- unlock_kernel();
+ up_read(&isdn_dev_rwsem);
return mask;
}

@@ -1317,7 +1322,7 @@
} else {
s = NULL;
}
- ret = down_interruptible(&dev->sem);
+ ret = down_interruptible(&isdn_dev->sem);
if( ret ) return ret;
if ((s = isdn_net_new(s, NULL))) {
if (copy_to_user((char *) arg, s, strlen(s) + 1)){
@@ -1327,7 +1332,7 @@
}
} else
ret = -ENODEV;
- up(&dev->sem);
+ up(&isdn_dev->sem);
return ret;
case IIOCNETASL:
/* Add a slave to a network-interface */
@@ -1336,7 +1341,7 @@
return -EFAULT;
} else
return -EINVAL;
- ret = down_interruptible(&dev->sem);
+ ret = down_interruptible(&isdn_dev->sem);
if( ret ) return ret;
if ((s = isdn_net_newslave(bname))) {
if (copy_to_user((char *) arg, s, strlen(s) + 1)){
@@ -1346,17 +1351,17 @@
}
} else
ret = -ENODEV;
- up(&dev->sem);
+ up(&isdn_dev->sem);
return ret;
case IIOCNETDIF:
/* Delete a network-interface */
if (arg) {
if (copy_from_user(name, (char *) arg, sizeof(name)))
return -EFAULT;
- ret = down_interruptible(&dev->sem);
+ ret = down_interruptible(&isdn_dev->sem);
if( ret ) return ret;
ret = isdn_net_rm(name);
- up(&dev->sem);
+ up(&isdn_dev->sem);
return ret;
} else
return -EINVAL;
@@ -1385,10 +1390,10 @@
if (arg) {
if (copy_from_user((char *) &phone, (char *) arg, sizeof(phone)))
return -EFAULT;
- ret = down_interruptible(&dev->sem);
+ ret = down_interruptible(&isdn_dev->sem);
if( ret ) return ret;
ret = isdn_net_addphone(&phone);
- up(&dev->sem);
+ up(&isdn_dev->sem);
return ret;
} else
return -EINVAL;
@@ -1397,10 +1402,10 @@
if (arg) {
if (copy_from_user((char *) &phone, (char *) arg, sizeof(phone)))
return -EFAULT;
- ret = down_interruptible(&dev->sem);
+ ret = down_interruptible(&isdn_dev->sem);
if( ret ) return ret;
ret = isdn_net_getphones(&phone, (char *) arg);
- up(&dev->sem);
+ up(&isdn_dev->sem);
return ret;
} else
return -EINVAL;
@@ -1409,10 +1414,10 @@
if (arg) {
if (copy_from_user((char *) &phone, (char *) arg, sizeof(phone)))
return -EFAULT;
- ret = down_interruptible(&dev->sem);
+ ret = down_interruptible(&isdn_dev->sem);
if( ret ) return ret;
ret = isdn_net_delphone(&phone);
- up(&dev->sem);
+ up(&isdn_dev->sem);
return ret;
} else
return -EINVAL;
@@ -1448,16 +1453,16 @@
break;
#endif /* CONFIG_NETDEVICES */
case IIOCSETVER:
- dev->net_verbose = arg;
- printk(KERN_INFO "isdn: Verbose-Level is %d\n", dev->net_verbose);
+ isdn_dev->net_verbose = arg;
+ printk(KERN_INFO "isdn: Verbose-Level is %d\n", isdn_dev->net_verbose);
return 0;
case IIOCSETGST:
if (arg)
- dev->global_flags |= ISDN_GLOBAL_STOPPED;
+ isdn_dev->global_flags |= ISDN_GLOBAL_STOPPED;
else
- dev->global_flags &= ~ISDN_GLOBAL_STOPPED;
+ isdn_dev->global_flags &= ~ISDN_GLOBAL_STOPPED;
printk(KERN_INFO "isdn: Global Mode %s\n",
- (dev->global_flags & ISDN_GLOBAL_STOPPED) ? "stopped" : "running");
+ (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED) ? "stopped" : "running");
return 0;
case IIOCSETBRJ:
drvidx = -1;
@@ -1472,7 +1477,7 @@
*p = 0;
drvidx = -1;
for (i = 0; i < ISDN_MAX_DRIVERS; i++)
- if (!(strcmp(dev->drvid[i], iocts.drvid))) {
+ if (!(strcmp(isdn_dev->drvid[i], iocts.drvid))) {
drvidx = i;
break;
}
@@ -1481,12 +1486,12 @@
if (drvidx == -1)
return -ENODEV;
if (iocts.arg)
- dev->drv[drvidx]->flags |= DRV_FLAG_REJBUS;
+ isdn_dev->drv[drvidx]->flags |= DRV_FLAG_REJBUS;
else
- dev->drv[drvidx]->flags &= ~DRV_FLAG_REJBUS;
+ isdn_dev->drv[drvidx]->flags &= ~DRV_FLAG_REJBUS;
return 0;
case IIOCSIGPRF:
- dev->profd = current;
+ isdn_dev->profd = current;
return 0;
break;
case IIOCGETPRF:
@@ -1501,14 +1506,14 @@
return ret;

for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- if (copy_to_user(p, dev->mdm.info[i].emu.profile,
+ if (copy_to_user(p, isdn_dev->mdm.info[i].emu.profile,
ISDN_MODEM_NUMREG))
return -EFAULT;
p += ISDN_MODEM_NUMREG;
- if (copy_to_user(p, dev->mdm.info[i].emu.pmsn, ISDN_MSNLEN))
+ if (copy_to_user(p, isdn_dev->mdm.info[i].emu.pmsn, ISDN_MSNLEN))
return -EFAULT;
p += ISDN_MSNLEN;
- if (copy_to_user(p, dev->mdm.info[i].emu.plmsn, ISDN_LMSNLEN))
+ if (copy_to_user(p, isdn_dev->mdm.info[i].emu.plmsn, ISDN_LMSNLEN))
return -EFAULT;
p += ISDN_LMSNLEN;
}
@@ -1528,14 +1533,14 @@
return ret;

for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- if (copy_from_user(dev->mdm.info[i].emu.profile, p,
+ if (copy_from_user(isdn_dev->mdm.info[i].emu.profile, p,
ISDN_MODEM_NUMREG))
return -EFAULT;
p += ISDN_MODEM_NUMREG;
- if (copy_from_user(dev->mdm.info[i].emu.plmsn, p, ISDN_LMSNLEN))
+ if (copy_from_user(isdn_dev->mdm.info[i].emu.plmsn, p, ISDN_LMSNLEN))
return -EFAULT;
p += ISDN_LMSNLEN;
- if (copy_from_user(dev->mdm.info[i].emu.pmsn, p, ISDN_MSNLEN))
+ if (copy_from_user(isdn_dev->mdm.info[i].emu.pmsn, p, ISDN_MSNLEN))
return -EFAULT;
p += ISDN_MSNLEN;
}
@@ -1555,7 +1560,7 @@
if (strlen(iocts.drvid)) {
drvidx = -1;
for (i = 0; i < ISDN_MAX_DRIVERS; i++)
- if (!(strcmp(dev->drvid[i], iocts.drvid))) {
+ if (!(strcmp(isdn_dev->drvid[i], iocts.drvid))) {
drvidx = i;
break;
}
@@ -1581,7 +1586,7 @@
/* Fall through */
case ',':
bname[j] = '\0';
- strcpy(dev->drv[drvidx]->msn2eaz[i], bname);
+ strcpy(isdn_dev->drv[drvidx]->msn2eaz[i], bname);
j = ISDN_MSNLEN;
break;
default:
@@ -1597,8 +1602,8 @@
p = (char *) iocts.arg;
for (i = 0; i < 10; i++) {
sprintf(bname, "%s%s",
- strlen(dev->drv[drvidx]->msn2eaz[i]) ?
- dev->drv[drvidx]->msn2eaz[i] : "_",
+ strlen(isdn_dev->drv[drvidx]->msn2eaz[i]) ?
+ isdn_dev->drv[drvidx]->msn2eaz[i] : "_",
(i < 9) ? "," : "\0");
if (copy_to_user(p, bname, strlen(bname) + 1))
return -EFAULT;
@@ -1610,7 +1615,7 @@
return -EINVAL;
case IIOCDBGVAR:
if (arg) {
- if (copy_to_user((char *) arg, (char *) &dev, sizeof(ulong)))
+ if (copy_to_user((char *) arg, (char *) &isdn_dev, sizeof(ulong)))
return -EFAULT;
return 0;
} else
@@ -1631,7 +1636,7 @@
*p = 0;
drvidx = -1;
for (i = 0; i < ISDN_MAX_DRIVERS; i++)
- if (!(strcmp(dev->drvid[i], iocts.drvid))) {
+ if (!(strcmp(isdn_dev->drvid[i], iocts.drvid))) {
drvidx = i;
break;
}
@@ -1723,7 +1728,7 @@
char *
isdn_map_eaz2msn(char *msn, int di)
{
- driver *this = dev->drv[di];
+ driver *this = isdn_dev->drv[di];
int i;

if (strlen(msn) == 1) {
@@ -1760,30 +1765,30 @@
* because we can emulate this in linklevel.
*/
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- if (USG_NONE(dev->usage[i]) &&
- (dev->drvmap[i] != -1)) {
- int d = dev->drvmap[i];
- if ((dev->usage[i] & ISDN_USAGE_EXCLUSIVE) &&
- ((pre_dev != d) || (pre_chan != dev->chanmap[i])))
+ if (USG_NONE(isdn_dev->usage[i]) &&
+ (isdn_dev->drvmap[i] != -1)) {
+ int d = isdn_dev->drvmap[i];
+ if ((isdn_dev->usage[i] & ISDN_USAGE_EXCLUSIVE) &&
+ ((pre_dev != d) || (pre_chan != isdn_dev->chanmap[i])))
continue;
if (!strcmp(isdn_map_eaz2msn(msn, d), "-"))
continue;
- if (dev->usage[i] & ISDN_USAGE_DISABLED)
+ if (isdn_dev->usage[i] & ISDN_USAGE_DISABLED)
continue; /* usage not allowed */
- if (dev->drv[d]->flags & DRV_FLAG_RUNNING) {
- if (((dev->drv[d]->interface->features & features) == features) ||
- (((dev->drv[d]->interface->features & vfeatures) == vfeatures) &&
- (dev->drv[d]->interface->features & ISDN_FEATURE_L2_TRANS))) {
+ if (isdn_dev->drv[d]->flags & DRV_FLAG_RUNNING) {
+ if (((isdn_dev->drv[d]->interface->features & features) == features) ||
+ (((isdn_dev->drv[d]->interface->features & vfeatures) == vfeatures) &&
+ (isdn_dev->drv[d]->interface->features & ISDN_FEATURE_L2_TRANS))) {
if ((pre_dev < 0) || (pre_chan < 0)) {
- dev->usage[i] &= ISDN_USAGE_EXCLUSIVE;
- dev->usage[i] |= usage;
+ isdn_dev->usage[i] &= ISDN_USAGE_EXCLUSIVE;
+ isdn_dev->usage[i] |= usage;
isdn_info_update();
restore_flags(flags);
return i;
} else {
- if ((pre_dev == d) && (pre_chan == dev->chanmap[i])) {
- dev->usage[i] &= ISDN_USAGE_EXCLUSIVE;
- dev->usage[i] |= usage;
+ if ((pre_dev == d) && (pre_chan == isdn_dev->chanmap[i])) {
+ isdn_dev->usage[i] &= ISDN_USAGE_EXCLUSIVE;
+ isdn_dev->usage[i] |= usage;
isdn_info_update();
restore_flags(flags);
return i;
@@ -1808,21 +1813,21 @@
save_flags(flags);
cli();
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- if (((!usage) || ((dev->usage[i] & ISDN_USAGE_MASK) == usage)) &&
- (dev->drvmap[i] == di) &&
- (dev->chanmap[i] == ch)) {
- dev->usage[i] &= (ISDN_USAGE_NONE | ISDN_USAGE_EXCLUSIVE);
- strcpy(dev->num[i], "???");
- dev->ibytes[i] = 0;
- dev->obytes[i] = 0;
+ if (((!usage) || ((isdn_dev->usage[i] & ISDN_USAGE_MASK) == usage)) &&
+ (isdn_dev->drvmap[i] == di) &&
+ (isdn_dev->chanmap[i] == ch)) {
+ isdn_dev->usage[i] &= (ISDN_USAGE_NONE | ISDN_USAGE_EXCLUSIVE);
+ strcpy(isdn_dev->num[i], "???");
+ isdn_dev->ibytes[i] = 0;
+ isdn_dev->obytes[i] = 0;
// 20.10.99 JIM, try to reinitialize v110 !
- dev->v110emu[i] = 0;
- atomic_set(&(dev->v110use[i]), 0);
- isdn_v110_close(dev->v110[i]);
- dev->v110[i] = NULL;
+ isdn_dev->v110emu[i] = 0;
+ atomic_set(&(isdn_dev->v110use[i]), 0);
+ isdn_v110_close(isdn_dev->v110[i]);
+ isdn_dev->v110[i] = NULL;
// 20.10.99 JIM, try to reinitialize v110 !
isdn_info_update();
- skb_queue_purge(&dev->drv[di]->rpqueue[ch]);
+ skb_queue_purge(&isdn_dev->drv[di]->rpqueue[ch]);
}
restore_flags(flags);
}
@@ -1839,9 +1844,9 @@
save_flags(flags);
cli();
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- if ((dev->drvmap[i] == di) &&
- (dev->chanmap[i] == ch)) {
- dev->usage[i] &= ~ISDN_USAGE_EXCLUSIVE;
+ if ((isdn_dev->drvmap[i] == di) &&
+ (isdn_dev->chanmap[i] == ch)) {
+ isdn_dev->usage[i] &= ~ISDN_USAGE_EXCLUSIVE;
isdn_info_update();
restore_flags(flags);
return;
@@ -1860,10 +1865,10 @@
int v110_ret = skb->len;
int idx = isdn_dc2minor(drvidx, chan);

- if (dev->v110[idx]) {
- atomic_inc(&dev->v110use[idx]);
- nskb = isdn_v110_encode(dev->v110[idx], skb);
- atomic_dec(&dev->v110use[idx]);
+ if (isdn_dev->v110[idx]) {
+ atomic_inc(&isdn_dev->v110use[idx]);
+ nskb = isdn_v110_encode(isdn_dev->v110[idx], skb);
+ atomic_dec(&isdn_dev->v110use[idx]);
if (!nskb)
return 0;
v110_ret = *((int *)nskb->data);
@@ -1874,9 +1879,9 @@
}
/* V.110 must always be acknowledged */
ack = 1;
- ret = dev->drv[drvidx]->interface->writebuf_skb(drvidx, chan, ack, nskb);
+ ret = isdn_dev->drv[drvidx]->interface->writebuf_skb(drvidx, chan, ack, nskb);
} else {
- int hl = dev->drv[drvidx]->interface->hl_hdrlen;
+ int hl = isdn_dev->drv[drvidx]->interface->hl_hdrlen;

if( skb_headroom(skb) < hl ){
/*
@@ -1892,22 +1897,22 @@
skb_tmp = skb_realloc_headroom(skb, hl);
printk(KERN_DEBUG "isdn_writebuf_skb_stub: reallocating headroom%s\n", skb_tmp ? "" : " failed");
if (!skb_tmp) return -ENOMEM; /* 0 better? */
- ret = dev->drv[drvidx]->interface->writebuf_skb(drvidx, chan, ack, skb_tmp);
+ ret = isdn_dev->drv[drvidx]->interface->writebuf_skb(drvidx, chan, ack, skb_tmp);
if( ret > 0 ){
dev_kfree_skb(skb);
} else {
dev_kfree_skb(skb_tmp);
}
} else {
- ret = dev->drv[drvidx]->interface->writebuf_skb(drvidx, chan, ack, skb);
+ ret = isdn_dev->drv[drvidx]->interface->writebuf_skb(drvidx, chan, ack, skb);
}
}
if (ret > 0) {
- dev->obytes[idx] += ret;
- if (dev->v110[idx]) {
- atomic_inc(&dev->v110use[idx]);
- dev->v110[idx]->skbuser++;
- atomic_dec(&dev->v110use[idx]);
+ isdn_dev->obytes[idx] += ret;
+ if (isdn_dev->v110[idx]) {
+ atomic_inc(&isdn_dev->v110use[idx]);
+ isdn_dev->v110[idx]->skbuser++;
+ atomic_dec(&isdn_dev->v110use[idx]);
/* For V.110 return unencoded data length */
ret = v110_ret;
/* if the complete frame was send we free the skb;
@@ -1916,7 +1921,7 @@
dev_kfree_skb(skb);
}
} else
- if (dev->v110[idx])
+ if (isdn_dev->v110[idx])
dev_kfree_skb(nskb);
return ret;
}
@@ -1934,7 +1939,7 @@

m = (adding) ? d->channels + n : n;

- if (dev->channels + n > ISDN_MAX_CHANNELS) {
+ if (isdn_dev->channels + n > ISDN_MAX_CHANNELS) {
printk(KERN_WARNING "register_isdn: Max. %d channels supported\n",
ISDN_MAX_CHANNELS);
return -1;
@@ -1992,14 +1997,14 @@
init_waitqueue_head(&d->snd_waitq[j]);
}

- dev->channels += n;
+ isdn_dev->channels += n;
save_flags(flags);
cli();
for (j = d->channels; j < m; j++)
for (k = 0; k < ISDN_MAX_CHANNELS; k++)
- if (dev->chanmap[k] < 0) {
- dev->chanmap[k] = j;
- dev->drvmap[k] = drvidx;
+ if (isdn_dev->chanmap[k] < 0) {
+ isdn_dev->chanmap[k] = j;
+ isdn_dev->drvmap[k] = drvidx;
isdn_register_devfs(k);
break;
}
@@ -2017,12 +2022,12 @@
{
int drvidx;

- dev->global_features = 0;
+ isdn_dev->global_features = 0;
for (drvidx = 0; drvidx < ISDN_MAX_DRIVERS; drvidx++) {
- if (!dev->drv[drvidx])
+ if (!isdn_dev->drv[drvidx])
continue;
- if (dev->drv[drvidx]->interface)
- dev->global_features |= dev->drv[drvidx]->interface->features;
+ if (isdn_dev->drv[drvidx]->interface)
+ isdn_dev->global_features |= isdn_dev->drv[drvidx]->interface->features;
}
}

@@ -2032,14 +2037,14 @@
{
if ((di < 0) || (di >= ISDN_MAX_DRIVERS))
return(NULL);
- return(dev->drvid[di]); /* driver name */
+ return(isdn_dev->drvid[di]); /* driver name */
} /* map_drvname */

static int map_namedrv(char *id)
{ int i;

for (i = 0; i < ISDN_MAX_DRIVERS; i++)
- { if (!strcmp(dev->drvid[i],id))
+ { if (!strcmp(isdn_dev->drvid[i],id))
return(i);
}
return(-1);
@@ -2092,7 +2097,7 @@
ulong flags;
int drvidx;

- if (dev->drivers >= ISDN_MAX_DRIVERS) {
+ if (isdn_dev->drivers >= ISDN_MAX_DRIVERS) {
printk(KERN_WARNING "register_isdn: Max. %d drivers supported\n",
ISDN_MAX_DRIVERS);
return 0;
@@ -2115,7 +2120,7 @@
d->interface = i;
d->channels = 0;
for (drvidx = 0; drvidx < ISDN_MAX_DRIVERS; drvidx++)
- if (!dev->drv[drvidx])
+ if (!isdn_dev->drv[drvidx])
break;
if (isdn_add_channels(d, drvidx, i->channels, 0)) {
kfree(d);
@@ -2129,12 +2134,12 @@
save_flags(flags);
cli();
for (j = 0; j < drvidx; j++)
- if (!strcmp(i->id, dev->drvid[j]))
+ if (!strcmp(i->id, isdn_dev->drvid[j]))
sprintf(i->id, "line%d", drvidx);
- dev->drv[drvidx] = d;
- strcpy(dev->drvid[drvidx], i->id);
+ isdn_dev->drv[drvidx] = d;
+ strcpy(isdn_dev->drvid[drvidx], i->id);
isdn_info_update();
- dev->drivers++;
+ isdn_dev->drivers++;
set_global_features();
restore_flags(flags);
return 1;
@@ -2170,7 +2175,7 @@
char buf[11];

sprintf (buf, "isdnctrl%d", k);
- dev->devfs_handle_isdnctrlX[k] =
+ isdn_dev->devfs_handle_isdnctrlX[k] =
devfs_register (devfs_handle, buf, DEVFS_FL_DEFAULT,
ISDN_MAJOR, ISDN_MINOR_CTRL + k, 0600 | S_IFCHR,
&isdn_fops, NULL);
@@ -2178,8 +2183,8 @@

static void isdn_unregister_devfs(int k)
{
- devfs_unregister (dev->devfs_handle_isdnX[k]);
- devfs_unregister (dev->devfs_handle_isdnctrlX[k]);
+ devfs_unregister (isdn_dev->devfs_handle_isdnX[k]);
+ devfs_unregister (isdn_dev->devfs_handle_isdnctrlX[k]);
}

static void isdn_init_devfs(void)
@@ -2194,18 +2199,18 @@
char buf[8];

sprintf (buf, "ippp%d", i);
- dev->devfs_handle_ipppX[i] =
+ isdn_dev->devfs_handle_ipppX[i] =
devfs_register (devfs_handle, buf, DEVFS_FL_DEFAULT,
ISDN_MAJOR, ISDN_MINOR_PPP + i,
0600 | S_IFCHR, &isdn_fops, NULL);
}
# endif

- dev->devfs_handle_isdninfo =
+ isdn_dev->devfs_handle_isdninfo =
devfs_register (devfs_handle, "isdninfo", DEVFS_FL_DEFAULT,
ISDN_MAJOR, ISDN_MINOR_STATUS, 0600 | S_IFCHR,
&isdn_fops, NULL);
- dev->devfs_handle_isdnctrl =
+ isdn_dev->devfs_handle_isdnctrl =
devfs_register (devfs_handle, "isdnctrl", DEVFS_FL_DEFAULT,
ISDN_MAJOR, ISDN_MINOR_CTRL, 0600 | S_IFCHR,
&isdn_fops, NULL);
@@ -2216,10 +2221,10 @@
# ifdef CONFIG_ISDN_PPP
int i;
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- devfs_unregister (dev->devfs_handle_ipppX[i]);
+ devfs_unregister (isdn_dev->devfs_handle_ipppX[i]);
# endif
- devfs_unregister (dev->devfs_handle_isdninfo);
- devfs_unregister (dev->devfs_handle_isdnctrl);
+ devfs_unregister (isdn_dev->devfs_handle_isdninfo);
+ devfs_unregister (isdn_dev->devfs_handle_isdnctrl);
devfs_unregister (devfs_handle);
}

@@ -2254,36 +2259,40 @@
int i;
char tmprev[50];

- if (!(dev = (isdn_dev *) vmalloc(sizeof(isdn_dev)))) {
+ down_write(&isdn_dev_rwsem); /* yeah, yeah, yeah, I took the easy
+ way out and just locked it for the
+ whole function */
+
+ if (!(isdn_dev = (isdn_dev_t *) vmalloc(sizeof(isdn_dev_t)))) {
printk(KERN_WARNING "isdn: Could not allocate device-struct.\n");
return -EIO;
}
- memset((char *) dev, 0, sizeof(isdn_dev));
- init_timer(&dev->timer);
- dev->timer.function = isdn_timer_funct;
- init_MUTEX(&dev->sem);
- init_waitqueue_head(&dev->info_waitq);
+ memset((char *) isdn_dev, 0, sizeof(isdn_dev_t));
+ init_timer(&isdn_dev->timer);
+ isdn_dev->timer.function = isdn_timer_funct;
+ init_MUTEX(&isdn_dev->sem);
+ init_waitqueue_head(&isdn_dev->info_waitq);
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- dev->drvmap[i] = -1;
- dev->chanmap[i] = -1;
- dev->m_idx[i] = -1;
- strcpy(dev->num[i], "???");
- init_waitqueue_head(&dev->mdm.info[i].open_wait);
- init_waitqueue_head(&dev->mdm.info[i].close_wait);
+ isdn_dev->drvmap[i] = -1;
+ isdn_dev->chanmap[i] = -1;
+ isdn_dev->m_idx[i] = -1;
+ strcpy(isdn_dev->num[i], "???");
+ init_waitqueue_head(&isdn_dev->mdm.info[i].open_wait);
+ init_waitqueue_head(&isdn_dev->mdm.info[i].close_wait);
}
if (devfs_register_chrdev(ISDN_MAJOR, "isdn", &isdn_fops)) {
printk(KERN_WARNING "isdn: Could not register control devices\n");
- vfree(dev);
+ vfree(isdn_dev);
return -EIO;
}
isdn_init_devfs();
if ((i = isdn_tty_modem_init()) < 0) {
printk(KERN_WARNING "isdn: Could not register tty devices\n");
if (i == -3)
- tty_unregister_driver(&dev->mdm.cua_modem);
+ tty_unregister_driver(&isdn_dev->mdm.cua_modem);
if (i <= -2)
- tty_unregister_driver(&dev->mdm.tty_modem);
- vfree(dev);
+ tty_unregister_driver(&isdn_dev->mdm.tty_modem);
+ vfree(isdn_dev);
isdn_cleanup_devfs();
devfs_unregister_chrdev(ISDN_MAJOR, "isdn");
return -EIO;
@@ -2291,13 +2300,13 @@
#ifdef CONFIG_ISDN_PPP
if (isdn_ppp_init() < 0) {
printk(KERN_WARNING "isdn: Could not create PPP-device-structs\n");
- tty_unregister_driver(&dev->mdm.tty_modem);
- tty_unregister_driver(&dev->mdm.cua_modem);
+ tty_unregister_driver(&isdn_dev->mdm.tty_modem);
+ tty_unregister_driver(&isdn_dev->mdm.cua_modem);
for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- kfree(dev->mdm.info[i].xmit_buf - 4);
+ kfree(isdn_dev->mdm.info[i].xmit_buf - 4);
isdn_cleanup_devfs();
devfs_unregister_chrdev(ISDN_MAJOR, "isdn");
- vfree(dev);
+ vfree(isdn_dev);
return -EIO;
}
#endif /* CONFIG_ISDN_PPP */
@@ -2321,6 +2330,7 @@
printk("\n");
#endif
isdn_info_update();
+ up_write(&isdn_dev_rwsem);
return 0;
}

@@ -2342,21 +2352,21 @@
restore_flags(flags);
return;
}
- if (tty_unregister_driver(&dev->mdm.tty_modem)) {
+ if (tty_unregister_driver(&isdn_dev->mdm.tty_modem)) {
printk(KERN_WARNING "isdn: ttyI-device busy, remove cancelled\n");
restore_flags(flags);
return;
}
- if (tty_unregister_driver(&dev->mdm.cua_modem)) {
+ if (tty_unregister_driver(&isdn_dev->mdm.cua_modem)) {
printk(KERN_WARNING "isdn: cui-device busy, remove cancelled\n");
restore_flags(flags);
return;
}
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- isdn_tty_cleanup_xmit(&dev->mdm.info[i]);
- kfree(dev->mdm.info[i].xmit_buf - 4);
+ isdn_tty_cleanup_xmit(&isdn_dev->mdm.info[i]);
+ kfree(isdn_dev->mdm.info[i].xmit_buf - 4);
#ifdef CONFIG_ISDN_TTY_FAX
- kfree(dev->mdm.info[i].fax);
+ kfree(isdn_dev->mdm.info[i].fax);
#endif
}
if (devfs_unregister_chrdev(ISDN_MAJOR, "isdn") != 0) {
@@ -2364,10 +2374,10 @@
restore_flags(flags);
} else {
isdn_cleanup_devfs();
- del_timer(&dev->timer);
+ del_timer(&isdn_dev->timer);
restore_flags(flags);
/* call vfree with interrupts enabled, else it will hang */
- vfree(dev);
+ vfree(isdn_dev);
printk(KERN_NOTICE "ISDN-subsystem unloaded\n");
}
}
Only in linux/drivers/isdn/: isdn_common.c.orig
Only in linux/drivers/isdn/: isdn_common.c.rej
diff -ur -X exclude linux-2.5.3-clean/drivers/isdn/isdn_net.c linux/drivers/isdn/isdn_net.c
--- linux-2.5.3-clean/drivers/isdn/isdn_net.c Fri Nov 9 13:41:41 2001
+++ linux/drivers/isdn/isdn_net.c Mon Feb 4 11:35:49 2002
@@ -272,10 +272,10 @@
save_flags(flags);
cli();
lp->flags |= ISDN_NET_CONNECTED;
- lp->isdn_device = dev->drvmap[idx];
- lp->isdn_channel = dev->chanmap[idx];
- dev->rx_netdev[idx] = lp->netdev;
- dev->st_netdev[idx] = lp->netdev;
+ lp->isdn_device = isdn_dev->drvmap[idx];
+ lp->isdn_channel = isdn_dev->chanmap[idx];
+ isdn_dev->rx_netdev[idx] = lp->netdev;
+ isdn_dev->st_netdev[idx] = lp->netdev;
restore_flags(flags);
}

@@ -299,8 +299,8 @@
qdisc_reset(lp->netdev->dev.qdisc);
}
lp->dialstate = 0;
- dev->rx_netdev[isdn_dc2minor(lp->isdn_device, lp->isdn_channel)] = NULL;
- dev->st_netdev[isdn_dc2minor(lp->isdn_device, lp->isdn_channel)] = NULL;
+ isdn_dev->rx_netdev[isdn_dc2minor(lp->isdn_device, lp->isdn_channel)] = NULL;
+ isdn_dev->st_netdev[isdn_dc2minor(lp->isdn_device, lp->isdn_channel)] = NULL;
isdn_free_channel(lp->isdn_device, lp->isdn_channel, ISDN_USAGE_NET);
lp->flags &= ~ISDN_NET_CONNECTED;
lp->isdn_device = -1;
@@ -327,7 +327,7 @@
void
isdn_net_autohup()
{
- isdn_net_dev *p = dev->netdev;
+ isdn_net_dev *p = isdn_dev->netdev;
int anymore;

anymore = 0;
@@ -338,7 +338,7 @@
else
l->cps = (l->transcount * HZ) / (jiffies - last_jiffies);
l->transcount = 0;
- if (dev->net_verbose > 3)
+ if (isdn_dev->net_verbose > 3)
printk(KERN_DEBUG "%s: %d bogocps\n", l->name, l->cps);
if ((l->flags & ISDN_NET_CONNECTED) && (!l->dialstate)) {
anymore = 1;
@@ -375,7 +375,7 @@
isdn_net_hangup(&p->dev);
}

- if(dev->global_flags & ISDN_GLOBAL_STOPPED || (ISDN_NET_DIALMODE(*l) == ISDN_NET_DM_OFF)) {
+ if(isdn_dev->global_flags & ISDN_GLOBAL_STOPPED || (ISDN_NET_DIALMODE(*l) == ISDN_NET_DM_OFF)) {
isdn_net_hangup(&p->dev);
break;
}
@@ -400,7 +400,7 @@
int
isdn_net_stat_callback(int idx, isdn_ctrl *c)
{
- isdn_net_dev *p = dev->st_netdev[idx];
+ isdn_net_dev *p = isdn_dev->st_netdev[idx];
int cmd = c->command;

if (p) {
@@ -484,10 +484,10 @@
case 10:
case 12:
if (lp->dialstate <= 6) {
- dev->usage[idx] |= ISDN_USAGE_OUTGOING;
+ isdn_dev->usage[idx] |= ISDN_USAGE_OUTGOING;
isdn_info_update();
} else
- dev->rx_netdev[idx] = p;
+ isdn_dev->rx_netdev[idx] = p;
lp->dialstate = 0;
isdn_timer_ctrl(ISDN_TIMER_NETHANGUP, 1);
if (lp->p_encap == ISDN_NET_ENCAP_CISCOHDLCK)
@@ -565,7 +565,7 @@
void
isdn_net_dial(void)
{
- isdn_net_dev *p = dev->netdev;
+ isdn_net_dev *p = isdn_dev->netdev;
int anymore = 0;
int i;
unsigned long flags;
@@ -624,9 +624,9 @@
* If list of phone-numbers is exhausted, increment
* retry-counter.
*/
- if(dev->global_flags & ISDN_GLOBAL_STOPPED || (ISDN_NET_DIALMODE(*lp) == ISDN_NET_DM_OFF)) {
+ if(isdn_dev->global_flags & ISDN_GLOBAL_STOPPED || (ISDN_NET_DIALMODE(*lp) == ISDN_NET_DM_OFF)) {
char *s;
- if (dev->global_flags & ISDN_GLOBAL_STOPPED)
+ if (isdn_dev->global_flags & ISDN_GLOBAL_STOPPED)
s = "dial suppressed: isdn system stopped";
else
s = "dial suppressed: dialmode `off'";
@@ -696,8 +696,8 @@
isdn_map_eaz2msn(lp->msn, cmd.driver));
i = isdn_dc2minor(lp->isdn_device, lp->isdn_channel);
if (i >= 0) {
- strcpy(dev->num[i], cmd.parm.setup.phone);
- dev->usage[i] |= ISDN_USAGE_OUTGOING;
+ strcpy(isdn_dev->num[i], cmd.parm.setup.phone);
+ isdn_dev->usage[i] |= ISDN_USAGE_OUTGOING;
isdn_info_update();
}
printk(KERN_INFO "%s: dialing %d %s...\n", lp->name,
@@ -1263,7 +1263,7 @@
return 0;
}
/* Log packet, which triggered dialing */
- if (dev->net_verbose)
+ if (isdn_dev->net_verbose)
isdn_net_log_skb(skb, lp);
lp->dialstate = 1;
/* Connect interface with channel */
@@ -1415,7 +1415,7 @@
static struct sk_buff*
isdn_net_ciscohdlck_alloc_skb(isdn_net_local *lp, int len)
{
- unsigned short hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen;
+ unsigned short hl = isdn_dev->drv[lp->isdn_device]->interface->hl_hdrlen;
struct sk_buff *skb;

skb = alloc_skb(hl + len, GFP_ATOMIC);
@@ -1879,7 +1879,7 @@
int
isdn_net_rcv_skb(int idx, struct sk_buff *skb)
{
- isdn_net_dev *p = dev->rx_netdev[idx];
+ isdn_net_dev *p = isdn_dev->rx_netdev[idx];

if (p) {
isdn_net_local *lp = p->local;
@@ -2064,9 +2064,9 @@
*/

for (drvidx = 0; drvidx < ISDN_MAX_DRIVERS; drvidx++)
- if (dev->drv[drvidx])
- if (max_hlhdr_len < dev->drv[drvidx]->interface->hl_hdrlen)
- max_hlhdr_len = dev->drv[drvidx]->interface->hl_hdrlen;
+ if (isdn_dev->drv[drvidx])
+ if (max_hlhdr_len < isdn_dev->drv[drvidx]->interface->hl_hdrlen)
+ max_hlhdr_len = isdn_dev->drv[drvidx]->interface->hl_hdrlen;

ndev->hard_header_len = ETH_HLEN + max_hlhdr_len;
ndev->stop = &isdn_net_close;
@@ -2084,7 +2084,7 @@
#ifdef ISDN_DEBUG_NET_ICALL
printk(KERN_DEBUG "n_fi: swapping ch of %d\n", drvidx);
#endif
- p = dev->netdev;
+ p = isdn_dev->netdev;
while (p) {
if (p->local->pre_device == drvidx)
switch (p->local->pre_channel) {
@@ -2102,16 +2102,16 @@
static void
isdn_net_swap_usage(int i1, int i2)
{
- int u1 = dev->usage[i1] & ISDN_USAGE_EXCLUSIVE;
- int u2 = dev->usage[i2] & ISDN_USAGE_EXCLUSIVE;
+ int u1 = isdn_dev->usage[i1] & ISDN_USAGE_EXCLUSIVE;
+ int u2 = isdn_dev->usage[i2] & ISDN_USAGE_EXCLUSIVE;

#ifdef ISDN_DEBUG_NET_ICALL
printk(KERN_DEBUG "n_fi: usage of %d and %d\n", i1, i2);
#endif
- dev->usage[i1] &= ~ISDN_USAGE_EXCLUSIVE;
- dev->usage[i1] |= u2;
- dev->usage[i2] &= ~ISDN_USAGE_EXCLUSIVE;
- dev->usage[i2] |= u1;
+ isdn_dev->usage[i1] &= ~ISDN_USAGE_EXCLUSIVE;
+ isdn_dev->usage[i1] |= u2;
+ isdn_dev->usage[i2] &= ~ISDN_USAGE_EXCLUSIVE;
+ isdn_dev->usage[i2] |= u1;
isdn_info_update();
}

@@ -2161,21 +2161,21 @@
eaz = "0";
} else
eaz = setup->eazmsn;
- if (dev->net_verbose > 1)
+ if (isdn_dev->net_verbose > 1)
printk(KERN_INFO "isdn_net: call from %s,%d,%d -> %s\n", nr, si1, si2, eaz);
/* Accept only calls with Si1 = 7 (Data-Transmission) */
if (si1 != 7) {
restore_flags(flags);
- if (dev->net_verbose > 1)
+ if (isdn_dev->net_verbose > 1)
printk(KERN_INFO "isdn_net: Service-Indicator not 7, ignored\n");
return 0;
}
n = (isdn_net_phone *) 0;
- p = dev->netdev;
+ p = isdn_dev->netdev;
ematch = wret = swapped = 0;
#ifdef ISDN_DEBUG_NET_ICALL
printk(KERN_DEBUG "n_fi: di=%d ch=%d idx=%d usg=%d\n", di, ch, idx,
- dev->usage[idx]);
+ isdn_dev->usage[idx]);
#endif
while (p) {
int matchret;
@@ -2202,7 +2202,7 @@
#endif
if ((!matchret) && /* EAZ is matching */
(((!(lp->flags & ISDN_NET_CONNECTED)) && /* but not connected */
- (USG_NONE(dev->usage[idx]))) || /* and ch. unused or */
+ (USG_NONE(isdn_dev->usage[idx]))) || /* and ch. unused or */
((((lp->dialstate == 4) || (lp->dialstate == 12)) && /* if dialing */
(!(lp->flags & ISDN_NET_CALLBACK))) /* but no callback */
)))
@@ -2211,7 +2211,7 @@
printk(KERN_DEBUG "n_fi: match1, pdev=%d pch=%d\n",
lp->pre_device, lp->pre_channel);
#endif
- if (dev->usage[idx] & ISDN_USAGE_EXCLUSIVE) {
+ if (isdn_dev->usage[idx] & ISDN_USAGE_EXCLUSIVE) {
if ((lp->pre_channel != ch) ||
(lp->pre_device != di)) {
/* Here we got a problem:
@@ -2228,10 +2228,10 @@
#ifdef ISDN_DEBUG_NET_ICALL
printk(KERN_DEBUG "n_fi: ch is 0\n");
#endif
- if (USG_NONE(dev->usage[sidx])) {
+ if (USG_NONE(isdn_dev->usage[sidx])) {
/* Second Channel is free, now see if it is bound
* exclusive too. */
- if (dev->usage[sidx] & ISDN_USAGE_EXCLUSIVE) {
+ if (isdn_dev->usage[sidx] & ISDN_USAGE_EXCLUSIVE) {
#ifdef ISDN_DEBUG_NET_ICALL
printk(KERN_DEBUG "n_fi: 2nd channel is down and bound\n");
#endif
@@ -2259,7 +2259,7 @@
#ifdef ISDN_DEBUG_NET_ICALL
printk(KERN_DEBUG "n_fi: final check\n");
#endif
- if ((dev->usage[idx] & ISDN_USAGE_EXCLUSIVE) &&
+ if ((isdn_dev->usage[idx] & ISDN_USAGE_EXCLUSIVE) &&
((lp->pre_channel != ch) ||
(lp->pre_device != di))) {
#ifdef ISDN_DEBUG_NET_ICALL
@@ -2404,11 +2404,11 @@
isdn_free_channel(lp->isdn_device, lp->isdn_channel,
ISDN_USAGE_NET);
}
- dev->usage[idx] &= ISDN_USAGE_EXCLUSIVE;
- dev->usage[idx] |= ISDN_USAGE_NET;
- strcpy(dev->num[idx], nr);
+ isdn_dev->usage[idx] &= ISDN_USAGE_EXCLUSIVE;
+ isdn_dev->usage[idx] |= ISDN_USAGE_NET;
+ strcpy(isdn_dev->num[idx], nr);
isdn_info_update();
- dev->st_netdev[idx] = lp->netdev;
+ isdn_dev->st_netdev[idx] = lp->netdev;
lp->isdn_device = di;
lp->isdn_channel = ch;
lp->ppp_slot = -1;
@@ -2435,7 +2435,7 @@
p = (isdn_net_dev *) p->next;
}
/* If none of configured EAZ/MSN matched and not verbose, be silent */
- if (!ematch || dev->net_verbose)
+ if (!ematch || isdn_dev->net_verbose)
printk(KERN_INFO "isdn_net: call from %s -> %d %s ignored\n", nr, di, eaz);
restore_flags(flags);
return (wret == 2)?5:0;
@@ -2447,7 +2447,7 @@
isdn_net_dev *
isdn_net_findif(char *name)
{
- isdn_net_dev *p = dev->netdev;
+ isdn_net_dev *p = isdn_dev->netdev;

while (p) {
if (!strcmp(p->local->name, name))
@@ -2631,8 +2631,8 @@
netdev->local->dialwait_timer = 0; /* Jiffies of earliest next dial-start */

/* Put into to netdev-chain */
- netdev->next = (void *) dev->netdev;
- dev->netdev = netdev;
+ netdev->next = (void *) isdn_dev->netdev;
+ isdn_dev->netdev = netdev;
return netdev->dev.name;
}

@@ -2688,8 +2688,8 @@
features = ((1 << cfg->l2_proto) << ISDN_FEATURE_L2_SHIFT) |
((1 << cfg->l3_proto) << ISDN_FEATURE_L3_SHIFT);
for (i = 0; i < ISDN_MAX_DRIVERS; i++)
- if (dev->drv[i])
- if ((dev->drv[i]->interface->features & features) == features)
+ if (isdn_dev->drv[i])
+ if ((isdn_dev->drv[i]->interface->features & features) == features)
break;
if (i == ISDN_MAX_DRIVERS) {
printk(KERN_WARNING "isdn_net: No driver with selected features\n");
@@ -2778,7 +2778,7 @@
}
for (i = 0; i < ISDN_MAX_DRIVERS; i++)
/* Lookup driver-Id in array */
- if (!(strcmp(dev->drvid[i], drvid))) {
+ if (!(strcmp(isdn_dev->drvid[i], drvid))) {
drvidx = i;
break;
}
@@ -2804,7 +2804,7 @@
return -EBUSY;
}
/* All went ok, so update isdninfo */
- dev->usage[i] = ISDN_USAGE_EXCLUSIVE;
+ isdn_dev->usage[i] = ISDN_USAGE_EXCLUSIVE;
isdn_info_update();
restore_flags(flags);
lp->exclusive = i;
@@ -2914,7 +2914,7 @@
strcpy(cfg->eaz, lp->msn);
cfg->exclusive = lp->exclusive;
if (lp->pre_device >= 0) {
- sprintf(cfg->drvid, "%s,%d", dev->drvid[lp->pre_device],
+ sprintf(cfg->drvid, "%s,%d", isdn_dev->drvid[lp->pre_device],
lp->pre_channel);
} else
cfg->drvid[0] = '\0';
@@ -3031,9 +3031,9 @@
idx = isdn_dc2minor(dv, ch);
if (idx<0) return -ENODEV;
/* for pre-bound channels, we need this extra check */
- if ( strncmp(dev->num[idx],"???",3) == 0 ) return -ENOTCONN;
- strncpy(phone->phone,dev->num[idx],ISDN_MSNLEN);
- phone->outgoing=USG_OUTGOING(dev->usage[idx]);
+ if ( strncmp(isdn_dev->num[idx],"???",3) == 0 ) return -ENOTCONN;
+ strncpy(phone->phone,isdn_dev->num[idx],ISDN_MSNLEN);
+ phone->outgoing=USG_OUTGOING(isdn_dev->usage[idx]);
if ( copy_to_user(peer,phone,sizeof(*peer)) ) return -EFAULT;
return 0;
}
@@ -3163,11 +3163,11 @@
if (q)
q->next = p->next;
else
- dev->netdev = p->next;
+ isdn_dev->netdev = p->next;
if (p->local->slave) {
/* If this interface has a slave, remove it also */
char *slavename = ((isdn_net_local *) (p->local->slave->priv))->name;
- isdn_net_dev *n = dev->netdev;
+ isdn_net_dev *n = isdn_dev->netdev;
q = NULL;
while (n) {
if (!strcmp(n->local->name, slavename)) {
@@ -3179,7 +3179,7 @@
}
}
/* If no more net-devices remain, disable auto-hangup timer */
- if (dev->netdev == NULL)
+ if (isdn_dev->netdev == NULL)
isdn_timer_ctrl(ISDN_TIMER_NETHANGUP, 0);
restore_flags(flags);
kfree(p->local);
@@ -3198,7 +3198,7 @@
isdn_net_dev *q;

/* Search name in netdev-chain */
- p = dev->netdev;
+ p = isdn_dev->netdev;
q = NULL;
while (p) {
if (!strcmp(p->local->name, name))
@@ -3207,7 +3207,7 @@
p = (isdn_net_dev *) p->next;
}
/* If no more net-devices remain, disable auto-hangup timer */
- if (dev->netdev == NULL)
+ if (isdn_dev->netdev == NULL)
isdn_timer_ctrl(ISDN_TIMER_NETHANGUP, 0);
return -ENODEV;
}
@@ -3224,16 +3224,16 @@
/* Walk through netdev-chain */
save_flags(flags);
cli();
- while (dev->netdev) {
- if (!dev->netdev->local->master) {
+ while (isdn_dev->netdev) {
+ if (!isdn_dev->netdev->local->master) {
/* Remove master-devices only, slaves get removed with their master */
- if ((ret = isdn_net_realrm(dev->netdev, NULL))) {
+ if ((ret = isdn_net_realrm(isdn_dev->netdev, NULL))) {
restore_flags(flags);
return ret;
}
}
}
- dev->netdev = NULL;
+ isdn_dev->netdev = NULL;
restore_flags(flags);
return 0;
}
diff -ur -X exclude linux-2.5.3-clean/drivers/isdn/isdn_tty.c linux/drivers/isdn/isdn_tty.c
--- linux-2.5.3-clean/drivers/isdn/isdn_tty.c Thu Jan 3 12:20:10 2002
+++ linux/drivers/isdn/isdn_tty.c Mon Feb 4 11:35:49 2002
@@ -128,8 +128,8 @@
modem_info *info;

for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- if ((midx = dev->m_idx[i]) >= 0) {
- info = &dev->mdm.info[midx];
+ if ((midx = isdn_dev->m_idx[i]) >= 0) {
+ info = &isdn_dev->mdm.info[midx];
if (info->online) {
r = 0;
#ifdef CONFIG_ISDN_AUDIO
@@ -182,11 +182,11 @@
#endif
modem_info *info;

- if ((midx = dev->m_idx[i]) < 0) {
+ if ((midx = isdn_dev->m_idx[i]) < 0) {
/* if midx is invalid, packet is not for tty */
return 0;
}
- info = &dev->mdm.info[midx];
+ info = &isdn_dev->mdm.info[midx];
#ifdef CONFIG_ISDN_AUDIO
ifmt = 1;

@@ -269,7 +269,7 @@
/* Try to deliver directly via tty-flip-buf if queue is empty */
save_flags(flags);
cli();
- if (skb_queue_empty(&dev->drv[di]->rpqueue[channel]))
+ if (skb_queue_empty(&isdn_dev->drv[di]->rpqueue[channel]))
if (isdn_tty_try_read(info, skb)) {
restore_flags(flags);
return 1;
@@ -277,8 +277,8 @@
/* Direct deliver failed or queue wasn't empty.
* Queue up for later dequeueing via timer-irq.
*/
- __skb_queue_tail(&dev->drv[di]->rpqueue[channel], skb);
- dev->drv[di]->rcvcount[channel] +=
+ __skb_queue_tail(&isdn_dev->drv[di]->rpqueue[channel], skb);
+ isdn_dev->drv[di]->rcvcount[channel] +=
(skb->len
#ifdef CONFIG_ISDN_AUDIO
+ ISDN_AUDIO_SKB_DLECOUNT(skb)
@@ -286,7 +286,7 @@
);
restore_flags(flags);
/* Schedule dequeuing */
- if ((dev->modempoll) && (info->rcvsched))
+ if ((isdn_dev->modempoll) && (info->rcvsched))
isdn_timer_ctrl(ISDN_TIMER_MODEMREAD, 1);
return 1;
}
@@ -483,7 +483,7 @@
info->xmit_count = 0;
return;
}
- skb_res = dev->drv[info->isdn_driver]->interface->hl_hdrlen + 4;
+ skb_res = isdn_dev->drv[info->isdn_driver]->interface->hl_hdrlen + 4;
#ifdef CONFIG_ISDN_AUDIO
if (info->vonline & 2)
audio_len = buflen * voice_cf[info->emu.vpar[3]];
@@ -657,11 +657,11 @@
restore_flags(flags);
isdn_tty_modem_result(RESULT_NO_DIALTONE, info);
} else {
- info->isdn_driver = dev->drvmap[i];
- info->isdn_channel = dev->chanmap[i];
+ info->isdn_driver = isdn_dev->drvmap[i];
+ info->isdn_channel = isdn_dev->chanmap[i];
info->drv_index = i;
- dev->m_idx[i] = info->line;
- dev->usage[i] |= ISDN_USAGE_OUTGOING;
+ isdn_dev->m_idx[i] = info->line;
+ isdn_dev->usage[i] |= ISDN_USAGE_OUTGOING;
info->last_dir = 1;
strcpy(info->last_num, n);
isdn_info_update();
@@ -699,7 +699,7 @@
cmd.command = ISDN_CMD_DIAL;
info->dialing = 1;
info->emu.carrierwait = 0;
- strcpy(dev->num[i], n);
+ strcpy(isdn_dev->num[i], n);
isdn_info_update();
isdn_command(&cmd);
isdn_timer_ctrl(ISDN_TIMER_CARRIER, 1);
@@ -780,7 +780,7 @@
isdn_free_channel(di, ch, 0);

if (info->drv_index >= 0) {
- dev->m_idx[info->drv_index] = -1;
+ isdn_dev->m_idx[info->drv_index] = -1;
info->drv_index = -1;
}
}
@@ -876,11 +876,11 @@
restore_flags(flags);
isdn_tty_modem_result(RESULT_NO_DIALTONE, info);
} else {
- info->isdn_driver = dev->drvmap[i];
- info->isdn_channel = dev->chanmap[i];
+ info->isdn_driver = isdn_dev->drvmap[i];
+ info->isdn_channel = isdn_dev->chanmap[i];
info->drv_index = i;
- dev->m_idx[i] = info->line;
- dev->usage[i] |= ISDN_USAGE_OUTGOING;
+ isdn_dev->m_idx[i] = info->line;
+ isdn_dev->usage[i] |= ISDN_USAGE_OUTGOING;
info->last_dir = 1;
// strcpy(info->last_num, n);
isdn_info_update();
@@ -917,7 +917,7 @@
strncpy(&cmd.parm.cmsg.para[6], id, l);
cmd.command =CAPI_PUT_MESSAGE;
info->dialing = 1;
-// strcpy(dev->num[i], n);
+// strcpy(isdn_dev->num[i], n);
isdn_info_update();
isdn_command(&cmd);
isdn_timer_ctrl(ISDN_TIMER_CARRIER, 1);
@@ -970,11 +970,11 @@
restore_flags(flags);
isdn_tty_modem_result(RESULT_NO_DIALTONE, info);
} else {
- info->isdn_driver = dev->drvmap[i];
- info->isdn_channel = dev->chanmap[i];
+ info->isdn_driver = isdn_dev->drvmap[i];
+ info->isdn_channel = isdn_dev->chanmap[i];
info->drv_index = i;
- dev->m_idx[i] = info->line;
- dev->usage[i] |= ISDN_USAGE_OUTGOING;
+ isdn_dev->m_idx[i] = info->line;
+ isdn_dev->usage[i] |= ISDN_USAGE_OUTGOING;
info->last_dir = 1;
isdn_info_update();
restore_flags(flags);
@@ -1006,7 +1006,7 @@
cmd.parm.cmsg.para[l+1] = 0xd;
cmd.command =CAPI_PUT_MESSAGE;
/* info->dialing = 1;
- strcpy(dev->num[i], n);
+ strcpy(isdn_dev->num[i], n);
isdn_info_update();
*/
isdn_command(&cmd);
@@ -1186,8 +1186,8 @@
c = count;
if (c > info->xmit_size - info->xmit_count)
c = info->xmit_size - info->xmit_count;
- if (info->isdn_driver >= 0 && c > dev->drv[info->isdn_driver]->maxbufsize)
- c = dev->drv[info->isdn_driver]->maxbufsize;
+ if (info->isdn_driver >= 0 && c > isdn_dev->drv[info->isdn_driver]->maxbufsize)
+ c = isdn_dev->drv[info->isdn_driver]->maxbufsize;
if (c <= 0)
break;
if ((info->online > 1)
@@ -1743,7 +1743,7 @@
line = minor(tty->device) - tty->driver.minor_start;
if (line < 0 || line > ISDN_MAX_CHANNELS)
return -ENODEV;
- info = &dev->mdm.info[line];
+ info = &isdn_dev->mdm.info[line];
if (isdn_tty_paranoia_check(info, tty->device, "isdn_tty_open"))
return -ENODEV;
#ifdef ISDN_DEBUG_MODEM_OPEN
@@ -1782,7 +1782,7 @@
#ifdef ISDN_DEBUG_MODEM_OPEN
printk(KERN_DEBUG "isdn_tty_open ttyi%d successful...\n", info->line);
#endif
- dev->modempoll++;
+ isdn_dev->modempoll++;
#ifdef ISDN_DEBUG_MODEM_OPEN
printk(KERN_DEBUG "isdn_tty_open normal exit\n");
#endif
@@ -1863,7 +1863,7 @@
break;
}
}
- dev->modempoll--;
+ isdn_dev->modempoll--;
isdn_tty_shutdown(info);
if (tty->driver.flush_buffer)
tty->driver.flush_buffer(tty);
@@ -2006,8 +2006,8 @@
memcpy(m->profile, m->mdmreg, ISDN_MODEM_NUMREG);
memcpy(m->pmsn, m->msn, ISDN_MSNLEN);
memcpy(m->plmsn, m->lmsn, ISDN_LMSNLEN);
- if (dev->profd)
- send_sig(SIGIO, dev->profd, 1);
+ if (isdn_dev->profd)
+ send_sig(SIGIO, isdn_dev->profd, 1);
}

int
@@ -2017,7 +2017,7 @@
int i;
modem_info *info;

- m = &dev->mdm;
+ m = &isdn_dev->mdm;
memset(&m->tty_modem, 0, sizeof(struct tty_driver));
m->tty_modem.magic = TTY_DRIVER_MAGIC;
m->tty_modem.name = isdn_ttyname_ttyI;
@@ -2206,7 +2206,7 @@
save_flags(flags);
cli();
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- modem_info *info = &dev->mdm.info[i];
+ modem_info *info = &isdn_dev->mdm.info[i];

if (info->count == 0)
continue;
@@ -2217,7 +2217,7 @@
printk(KERN_DEBUG "m_fi: match1 wret=%d\n", wret);
printk(KERN_DEBUG "m_fi: idx=%d flags=%08lx drv=%d ch=%d usg=%d\n", idx,
info->flags, info->isdn_driver, info->isdn_channel,
- dev->usage[idx]);
+ isdn_dev->usage[idx]);
#endif
if (
#ifndef FIX_FILE_TRANSFER
@@ -2225,7 +2225,7 @@
#endif
(info->isdn_driver == -1) &&
(info->isdn_channel == -1) &&
- (USG_NONE(dev->usage[idx]))) {
+ (USG_NONE(isdn_dev->usage[idx]))) {
int matchret;

if ((matchret = isdn_tty_match_icall(eaz, &info->emu, di)) > wret)
@@ -2234,10 +2234,10 @@
info->isdn_driver = di;
info->isdn_channel = ch;
info->drv_index = idx;
- dev->m_idx[idx] = info->line;
- dev->usage[idx] &= ISDN_USAGE_EXCLUSIVE;
- dev->usage[idx] |= isdn_calc_usage(si1, info->emu.mdmreg[REG_L2PROT]);
- strcpy(dev->num[idx], nr);
+ isdn_dev->m_idx[idx] = info->line;
+ isdn_dev->usage[idx] &= ISDN_USAGE_EXCLUSIVE;
+ isdn_dev->usage[idx] |= isdn_calc_usage(si1, info->emu.mdmreg[REG_L2PROT]);
+ strcpy(isdn_dev->num[idx], nr);
strcpy(info->emu.cpn, eaz);
info->emu.mdmreg[REG_SI1I] = si2bit[si1];
info->emu.mdmreg[REG_PLAN] = setup->plan;
@@ -2256,7 +2256,7 @@
}
restore_flags(flags);
printk(KERN_INFO "isdn_tty: call from %s -> %s %s\n", nr, eaz,
- ((dev->drv[di]->flags & DRV_FLAG_REJBUS) && (wret != 2))? "rejected" : "ignored");
+ ((isdn_dev->drv[di]->flags & DRV_FLAG_REJBUS) && (wret != 2))? "rejected" : "ignored");
return (wret == 2)?3:0;
}

@@ -2272,8 +2272,8 @@

if (i < 0)
return 0;
- if ((mi = dev->m_idx[i]) >= 0) {
- info = &dev->mdm.info[mi];
+ if ((mi = isdn_dev->m_idx[i]) >= 0) {
+ info = &isdn_dev->mdm.info[mi];
switch (c->command) {
case ISDN_STAT_CINF:
printk(KERN_DEBUG "CHARGEINFO on ttyI%d: %ld %s\n", info->line, c->arg, c->parm.num);
@@ -2371,14 +2371,14 @@
info->last_dir = 0;
info->dialing = 0;
info->rcvsched = 1;
- if (USG_MODEM(dev->usage[i])) {
+ if (USG_MODEM(isdn_dev->usage[i])) {
if (info->emu.mdmreg[REG_L2PROT] == ISDN_PROTO_L2_MODEM) {
strcpy(info->emu.connmsg, c->parm.num);
isdn_tty_modem_result(RESULT_CONNECT, info);
} else
isdn_tty_modem_result(RESULT_CONNECT64000, info);
}
- if (USG_VOICE(dev->usage[i]))
+ if (USG_VOICE(isdn_dev->usage[i]))
isdn_tty_modem_result(RESULT_VCON, info);
return 1;
}
@@ -2416,7 +2416,7 @@
printk(KERN_DEBUG "tty_STAT_UNLOAD ttyI%d\n", info->line);
#endif
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- info = &dev->mdm.info[i];
+ info = &isdn_dev->mdm.info[i];
if (info->isdn_driver == c->driver) {
if (info->online)
isdn_tty_modem_hup(info, 1);
@@ -2485,7 +2485,7 @@
/* use queue instead of direct flip, if online and */
/* data is in queue or flip buffer is full */
if ((info->online) && (((tty->flip.count + strlen(msg)) >= TTY_FLIPBUF_SIZE) ||
- (!skb_queue_empty(&dev->drv[info->isdn_driver]->rpqueue[info->isdn_channel])))) {
+ (!skb_queue_empty(&isdn_dev->drv[info->isdn_driver]->rpqueue[info->isdn_channel])))) {
skb = alloc_skb(strlen(msg)
#ifdef CONFIG_ISDN_AUDIO
+ sizeof(isdn_audio_skb)
@@ -2528,11 +2528,11 @@
}
}
if (skb) {
- __skb_queue_tail(&dev->drv[info->isdn_driver]->rpqueue[info->isdn_channel], skb);
- dev->drv[info->isdn_driver]->rcvcount[info->isdn_channel] += skb->len;
+ __skb_queue_tail(&isdn_dev->drv[info->isdn_driver]->rpqueue[info->isdn_channel], skb);
+ isdn_dev->drv[info->isdn_driver]->rcvcount[info->isdn_channel] += skb->len;
restore_flags(flags);
/* Schedule dequeuing */
- if ((dev->modempoll) && (info->rcvsched))
+ if ((isdn_dev->modempoll) && (info->rcvsched))
isdn_timer_ctrl(ISDN_TIMER_MODEMREAD, 1);

} else {
@@ -2706,7 +2706,7 @@
/* print CID, _before_ _every_ ring */
if (!(m->mdmreg[REG_CIDONCE] & BIT_CIDONCE)) {
isdn_tty_at_cout("\r\nCALLER NUMBER: ", info);
- isdn_tty_at_cout(dev->num[info->drv_index], info);
+ isdn_tty_at_cout(isdn_dev->num[info->drv_index], info);
if (m->mdmreg[REG_CDN] & BIT_CDN) {
isdn_tty_at_cout("\r\nCALLED NUMBER: ", info);
isdn_tty_at_cout(info->emu.cpn, info);
@@ -2735,7 +2735,7 @@
(m->mdmreg[REG_RINGCNT] == 1)) {
isdn_tty_at_cout("\r\n", info);
isdn_tty_at_cout("CALLER NUMBER: ", info);
- isdn_tty_at_cout(dev->num[info->drv_index], info);
+ isdn_tty_at_cout(isdn_dev->num[info->drv_index], info);
if (m->mdmreg[REG_CDN] & BIT_CDN) {
isdn_tty_at_cout("\r\nCALLED NUMBER: ", info);
isdn_tty_at_cout(info->emu.cpn, info);
@@ -3247,7 +3247,7 @@
if (info->msr & UART_MSR_RI) {
/* Accept incoming call */
info->last_dir = 0;
- strcpy(info->last_num, dev->num[info->drv_index]);
+ strcpy(info->last_num, isdn_dev->num[info->drv_index]);
m->mdmreg[REG_RINGCNT] = 0;
info->msr &= ~UART_MSR_RI;
l2 = m->mdmreg[REG_L2PROT];
@@ -3326,7 +3326,7 @@
#ifdef CONFIG_ISDN_TTY_FAX
case '1':
p[0]++;
- if (!(dev->global_features &
+ if (!(isdn_dev->global_features &
ISDN_FEATURE_L3_FCLASS1))
PARSE_ERROR1;
m->mdmreg[REG_SI1] = 1;
@@ -3337,7 +3337,7 @@
break;
case '2':
p[0]++;
- if (!(dev->global_features &
+ if (!(isdn_dev->global_features &
ISDN_FEATURE_L3_FCLASS2))
PARSE_ERROR1;
m->mdmreg[REG_SI1] = 1;
@@ -3359,10 +3359,10 @@
p[0]++;
strcpy(rs, "\r\n0,");
#ifdef CONFIG_ISDN_TTY_FAX
- if (dev->global_features &
+ if (isdn_dev->global_features &
ISDN_FEATURE_L3_FCLASS1)
strcat(rs, "1,");
- if (dev->global_features &
+ if (isdn_dev->global_features &
ISDN_FEATURE_L3_FCLASS2)
strcat(rs, "2,");
#endif
@@ -3968,9 +3968,9 @@
int midx;

for (i = 0; i < ISDN_MAX_CHANNELS; i++)
- if (USG_MODEM(dev->usage[i]))
- if ((midx = dev->m_idx[i]) >= 0) {
- modem_info *info = &dev->mdm.info[midx];
+ if (USG_MODEM(isdn_dev->usage[i]))
+ if ((midx = isdn_dev->m_idx[i]) >= 0) {
+ modem_info *info = &isdn_dev->mdm.info[midx];
if (info->online) {
ton = 1;
if ((info->emu.pluscount == 3) &&
@@ -3996,7 +3996,7 @@
int i;

for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- modem_info *info = &dev->mdm.info[i];
+ modem_info *info = &isdn_dev->mdm.info[i];
if (info->msr & UART_MSR_RI) {
ton = 1;
isdn_tty_modem_result(RESULT_RING, info);
@@ -4016,7 +4016,7 @@
int i;

for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- modem_info *info = &dev->mdm.info[i];
+ modem_info *info = &isdn_dev->mdm.info[i];
if (info->online) {
ton = 1;
isdn_tty_senddown(info);
@@ -4037,7 +4037,7 @@
int i;

for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
- modem_info *info = &dev->mdm.info[i];
+ modem_info *info = &isdn_dev->mdm.info[i];
if (info->dialing) {
if (info->emu.carrierwait++ > info->emu.mdmreg[REG_WAITC]) {
info->dialing = 0;
diff -ur -X exclude linux-2.5.3-clean/drivers/isdn/isdn_ttyfax.c linux/drivers/isdn/isdn_ttyfax.c
--- linux-2.5.3-clean/drivers/isdn/isdn_ttyfax.c Sun Sep 30 12:26:06 2001
+++ linux/drivers/isdn/isdn_ttyfax.c Mon Feb 4 11:35:49 2002
@@ -74,7 +74,7 @@
case 2: /* +FCON */
/* Append CPN, if enabled */
if ((m->mdmreg[REG_CPNFCON] & BIT_CPNFCON) &&
- (!(dev->usage[info->isdn_channel] & ISDN_USAGE_OUTGOING))) {
+ (!(isdn_dev->usage[info->isdn_channel] & ISDN_USAGE_OUTGOING))) {
sprintf(rs, "/%s", m->cpn);
isdn_tty_at_cout(rs, info);
}
@@ -380,10 +380,10 @@
restore_flags(flags);
PARSE_ERROR1;
}
- info->isdn_driver = dev->drvmap[i];
- info->isdn_channel = dev->chanmap[i];
+ info->isdn_driver = isdn_dev->drvmap[i];
+ info->isdn_channel = isdn_dev->chanmap[i];
info->drv_index = i;
- dev->m_idx[i] = info->line;
+ isdn_dev->m_idx[i] = info->line;
c.driver = info->isdn_driver;
c.arg = info->isdn_channel;
isdn_command(&c);
@@ -392,7 +392,7 @@
info->isdn_driver = -1;
info->isdn_channel = -1;
if (info->drv_index >= 0) {
- dev->m_idx[info->drv_index] = -1;
+ isdn_dev->m_idx[info->drv_index] = -1;
info->drv_index = -1;
}
restore_flags(flags);
diff -ur -X exclude linux-2.5.3-clean/drivers/isdn/isdn_v110.c linux/drivers/isdn/isdn_v110.c
--- linux-2.5.3-clean/drivers/isdn/isdn_v110.c Sun Sep 30 12:26:06 2001
+++ linux/drivers/isdn/isdn_v110.c Mon Feb 4 11:35:49 2002
@@ -531,9 +531,9 @@
* send down an Idle-Frame (or an Sync-Frame, if
* v->SyncInit != 0).
*/
- if (!(v = dev->v110[idx]))
+ if (!(v = isdn_dev->v110[idx]))
return 0;
- atomic_inc(&dev->v110use[idx]);
+ atomic_inc(&isdn_dev->v110use[idx]);
if (v->skbidle > 0) {
v->skbidle--;
ret = 1;
@@ -549,7 +549,7 @@
else
skb = isdn_v110_idle(v);
if (skb) {
- if (dev->drv[c->driver]->interface->writebuf_skb(c->driver, c->arg, 1, skb) <= 0) {
+ if (isdn_dev->drv[c->driver]->interface->writebuf_skb(c->driver, c->arg, 1, skb) <= 0) {
dev_kfree_skb(skb);
break;
} else {
@@ -560,41 +560,41 @@
} else
break;
}
- atomic_dec(&dev->v110use[idx]);
+ atomic_dec(&isdn_dev->v110use[idx]);
return ret;
case ISDN_STAT_DHUP:
case ISDN_STAT_BHUP:
while (1) {
- atomic_inc(&dev->v110use[idx]);
- if (atomic_dec_and_test(&dev->v110use[idx])) {
- isdn_v110_close(dev->v110[idx]);
- dev->v110[idx] = NULL;
+ atomic_inc(&isdn_dev->v110use[idx]);
+ if (atomic_dec_and_test(&isdn_dev->v110use[idx])) {
+ isdn_v110_close(isdn_dev->v110[idx]);
+ isdn_dev->v110[idx] = NULL;
break;
}
sti();
}
break;
case ISDN_STAT_BCONN:
- if (dev->v110emu[idx] && (dev->v110[idx] == NULL)) {
- int hdrlen = dev->drv[c->driver]->interface->hl_hdrlen;
- int maxsize = dev->drv[c->driver]->interface->maxbufsize;
- atomic_inc(&dev->v110use[idx]);
- switch (dev->v110emu[idx]) {
+ if (isdn_dev->v110emu[idx] && (isdn_dev->v110[idx] == NULL)) {
+ int hdrlen = isdn_dev->drv[c->driver]->interface->hl_hdrlen;
+ int maxsize = isdn_dev->drv[c->driver]->interface->maxbufsize;
+ atomic_inc(&isdn_dev->v110use[idx]);
+ switch (isdn_dev->v110emu[idx]) {
case ISDN_PROTO_L2_V11096:
- dev->v110[idx] = isdn_v110_open(V110_9600, hdrlen, maxsize);
+ isdn_dev->v110[idx] = isdn_v110_open(V110_9600, hdrlen, maxsize);
break;
case ISDN_PROTO_L2_V11019:
- dev->v110[idx] = isdn_v110_open(V110_19200, hdrlen, maxsize);
+ isdn_dev->v110[idx] = isdn_v110_open(V110_19200, hdrlen, maxsize);
break;
case ISDN_PROTO_L2_V11038:
- dev->v110[idx] = isdn_v110_open(V110_38400, hdrlen, maxsize);
+ isdn_dev->v110[idx] = isdn_v110_open(V110_38400, hdrlen, maxsize);
break;
default:;
}
- if ((v = dev->v110[idx])) {
+ if ((v = isdn_dev->v110[idx])) {
while (v->SyncInit) {
struct sk_buff *skb = isdn_v110_sync(v);
- if (dev->drv[c->driver]->interface->writebuf_skb(c->driver, c->arg, 1, skb) <= 0) {
+ if (isdn_dev->drv[c->driver]->interface->writebuf_skb(c->driver, c->arg, 1, skb) <= 0) {
dev_kfree_skb(skb);
/* Unable to send, try later */
break;
@@ -604,7 +604,7 @@
}
} else
printk(KERN_WARNING "isdn_v110: Couldn't open stream for chan %d\n", idx);
- atomic_dec(&dev->v110use[idx]);
+ atomic_dec(&isdn_dev->v110use[idx]);
}
break;
default:
--- linux-2.5.3-clean/include/linux/isdn.h Sun Jan 27 11:33:38 2002
+++ linux/include/linux/isdn.h Mon Feb 4 12:30:23 2002
@@ -636,9 +636,9 @@
devfs_handle_t devfs_handle_ipppX[ISDN_MAX_CHANNELS];
#endif
#endif /* CONFIG_DEVFS_FS */
-} isdn_dev;
+} isdn_dev_t;

-extern isdn_dev *dev;
+extern isdn_dev_t *isdn_dev;


#endif /* __KERNEL__ */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:24    [W:0.101 / U:37.348 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site