diff options
author | hm <hm@FreeBSD.org> | 2001-05-25 08:43:30 +0000 |
---|---|---|
committer | hm <hm@FreeBSD.org> | 2001-05-25 08:43:30 +0000 |
commit | 7e6e58c4c7f91947ec1f9a10a284f8d9c2fdf1f2 (patch) | |
tree | 6b2ce85b45dc25104f9a4e60d014db8fc3de9b95 /sys/i4b/layer4 | |
parent | 8094d979ca0adb982d9e0c5482a2825da1b38e11 (diff) | |
download | FreeBSD-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.c | 13 | ||||
-rw-r--r-- | sys/i4b/layer4/i4b_l4.c | 6 |
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) |