summaryrefslogtreecommitdiffstats
path: root/sys/i4b/layer4
diff options
context:
space:
mode:
authorhm <hm@FreeBSD.org>2001-05-25 08:43:30 +0000
committerhm <hm@FreeBSD.org>2001-05-25 08:43:30 +0000
commit7e6e58c4c7f91947ec1f9a10a284f8d9c2fdf1f2 (patch)
tree6b2ce85b45dc25104f9a4e60d014db8fc3de9b95 /sys/i4b/layer4
parent8094d979ca0adb982d9e0c5482a2825da1b38e11 (diff)
downloadFreeBSD-src-7e6e58c4c7f91947ec1f9a10a284f8d9c2fdf1f2.zip
FreeBSD-src-7e6e58c4c7f91947ec1f9a10a284f8d9c2fdf1f2.tar.gz
Submitted by: Juha-Matti Liukkonen (Cubical Solutions Ltd) (jml@cubical.fi)
Add a CAPI (hardware independent) driver i4bcapi(4) and hardware driver iavc (4) to support active CAPI-based BRI and PRI cards (currently AVM B1 and T1 cards) to isdn4bsd.
Diffstat (limited to 'sys/i4b/layer4')
-rw-r--r--sys/i4b/layer4/i4b_i4bdrv.c13
-rw-r--r--sys/i4b/layer4/i4b_l4.c6
2 files changed, 14 insertions, 5 deletions
diff --git a/sys/i4b/layer4/i4b_i4bdrv.c b/sys/i4b/layer4/i4b_i4bdrv.c
index 29620ad..71c200f 100644
--- a/sys/i4b/layer4/i4b_i4bdrv.c
+++ b/sys/i4b/layer4/i4b_i4bdrv.c
@@ -453,9 +453,16 @@ i4bioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
break;
case CHAN_ANY:
- if((ctrl_desc[mcr->controller].bch_state[CHAN_B1] != BCH_ST_FREE) &&
- (ctrl_desc[mcr->controller].bch_state[CHAN_B2] != BCH_ST_FREE))
+ {
+ int i;
+ for (i = 0;
+ i < ctrl_desc[mcr->controller].nbch &&
+ ctrl_desc[mcr->controller].bch_state[i] != BCH_ST_FREE;
+ i++);
+ if (i == ctrl_desc[mcr->controller].nbch)
SET_CAUSE_VAL(cd->cause_in, CAUSE_I4B_NOCHAN);
+ /* else mcr->channel = i; XXX */
+ }
break;
default:
@@ -560,6 +567,8 @@ i4bioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
ctrl_desc[mcir->controller].ctrl_type;
mcir->card_type =
ctrl_desc[mcir->controller].card_type;
+ mcir->nbch =
+ ctrl_desc[mcir->controller].nbch;
if(ctrl_desc[mcir->controller].ctrl_type == CTRL_PASSIVE)
mcir->tei = ctrl_desc[mcir->controller].tei;
diff --git a/sys/i4b/layer4/i4b_l4.c b/sys/i4b/layer4/i4b_l4.c
index 5430c3a..9cb3f26 100644
--- a/sys/i4b/layer4/i4b_l4.c
+++ b/sys/i4b/layer4/i4b_l4.c
@@ -131,7 +131,7 @@ i4b_l4_pdeact(int controller, int numactive)
i4b_unlink_bchandrvr(cd);
}
- if((cd->channelid == CHAN_B1) || (cd->channelid == CHAN_B2))
+ if((cd->channelid >= 0) & (cd->channelid < ctrl_desc[cd->controller].nbch))
{
ctrl_desc[cd->controller].bch_state[cd->channelid] = BCH_ST_FREE;
}
@@ -438,14 +438,14 @@ i4b_l4_disconnect_ind(call_desc_t *cd)
i4b_unlink_bchandrvr(cd);
}
- if((cd->channelid == CHAN_B1) || (cd->channelid == CHAN_B2))
+ if((cd->channelid >= 0) && (cd->channelid < ctrl_desc[cd->controller].nbch))
{
ctrl_desc[cd->controller].bch_state[cd->channelid] = BCH_ST_FREE;
}
else
{
/* no error, might be hunting call for callback */
- NDBGL4(L4_MSG, "channel free not B1/B2 but %d!", cd->channelid);
+ NDBGL4(L4_MSG, "channel free not valid but %d!", cd->channelid);
}
if((m = i4b_Dgetmbuf(sizeof(msg_disconnect_ind_t))) != NULL)
OpenPOWER on IntegriCloud