summaryrefslogtreecommitdiffstats
path: root/sys/i4b/layer4/i4b_i4bdrv.c
diff options
context:
space:
mode:
authorhm <hm@FreeBSD.org>1999-12-14 20:48:35 +0000
committerhm <hm@FreeBSD.org>1999-12-14 20:48:35 +0000
commit57bc8b41244c53f38345080f7e4b02bed8685f82 (patch)
tree01308b146b463af38fde282b569bea03dc8c8b94 /sys/i4b/layer4/i4b_i4bdrv.c
parent2edcbc2e0b115cf2b9357f0b246717209c7b6cbf (diff)
downloadFreeBSD-src-57bc8b41244c53f38345080f7e4b02bed8685f82.zip
FreeBSD-src-57bc8b41244c53f38345080f7e4b02bed8685f82.tar.gz
update to isdn4bsd beta release 0.90
Diffstat (limited to 'sys/i4b/layer4/i4b_i4bdrv.c')
-rw-r--r--sys/i4b/layer4/i4b_i4bdrv.c96
1 files changed, 76 insertions, 20 deletions
diff --git a/sys/i4b/layer4/i4b_i4bdrv.c b/sys/i4b/layer4/i4b_i4bdrv.c
index f45897b..1a07b95 100644
--- a/sys/i4b/layer4/i4b_i4bdrv.c
+++ b/sys/i4b/layer4/i4b_i4bdrv.c
@@ -27,9 +27,11 @@
* i4b_i4bdrv.c - i4b userland interface driver
* --------------------------------------------
*
- * $FreeBSD$
+ * $Id: i4b_i4bdrv.c,v 1.52 1999/12/13 21:25:28 hm Exp $
*
- * last edit-date: [Tue Jun 8 19:48:16 1999]
+ * $FreeBSD$
+ *
+ * last edit-date: [Mon Dec 13 22:06:11 1999]
*
*---------------------------------------------------------------------------*/
@@ -51,7 +53,7 @@
#include <sys/param.h>
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
+#if defined(__FreeBSD__)
#include <sys/ioccom.h>
#include <sys/malloc.h>
#include <sys/uio.h>
@@ -70,6 +72,18 @@
#include <net/if.h>
#ifdef __FreeBSD__
+
+#if defined(__FreeBSD__) && __FreeBSD__ == 3
+#include "opt_devfs.h"
+#endif
+
+#ifdef DEVFS
+#include <sys/devfsext.h>
+#endif
+
+#endif /* __FreeBSD__*/
+
+#ifdef __FreeBSD__
#include <machine/i4b_debug.h>
#include <machine/i4b_ioctl.h>
#include <machine/i4b_cause.h>
@@ -96,6 +110,12 @@ static int openflag = 0;
static int selflag = 0;
static int readflag = 0;
+#if defined(__FreeBSD__) && __FreeBSD__ == 3
+#ifdef DEVFS
+static void *devfs_token;
+#endif
+#endif
+
#ifndef __FreeBSD__
#define PDEVSTATIC /* - not static - */
@@ -137,22 +157,22 @@ PDEVSTATIC d_select_t i4bselect;
#define CDEV_MAJOR 60
-#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
+#if defined(__FreeBSD__) && __FreeBSD__ >= 4
static struct cdevsw i4b_cdevsw = {
- /* open */ i4bopen,
- /* close */ i4bclose,
- /* read */ i4bread,
- /* write */ nowrite,
- /* ioctl */ i4bioctl,
- /* poll */ POLLFIELD,
- /* mmap */ nommap,
- /* strategy */ nostrategy,
- /* name */ "i4b",
- /* maj */ CDEV_MAJOR,
- /* dump */ nodump,
- /* psize */ nopsize,
- /* flags */ 0,
- /* bmaj */ -1
+ /* open */ i4bopen,
+ /* close */ i4bclose,
+ /* read */ i4bread,
+ /* write */ nowrite,
+ /* ioctl */ i4bioctl,
+ /* poll */ POLLFIELD,
+ /* mmap */ nommap,
+ /* strategy */ nostrategy,
+ /* name */ "i4b",
+ /* maj */ CDEV_MAJOR,
+ /* dump */ nodump,
+ /* psize */ nopsize,
+ /* flags */ 0,
+ /* bmaj */ -1
};
#else
static struct cdevsw i4b_cdevsw = {
@@ -168,7 +188,7 @@ PSEUDO_SET(i4battach, i4b_i4bdrv);
static void
i4b_drvinit(void *unused)
{
-#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
+#if defined(__FreeBSD__) && __FreeBSD__ >= 4
cdevsw_add(&i4b_cdevsw);
#else
static int i4b_devsw_installed = 0;
@@ -231,7 +251,20 @@ i4battach()
printf("i4b: ISDN call control device attached\n");
#endif
i4b_rdqueue.ifq_maxlen = IFQ_MAXLEN;
+
+#if defined(__FreeBSD__)
+#if __FreeBSD__ == 3
+
+#ifdef DEVFS
+ devfs_token = devfs_add_devswf(&i4b_cdevsw, 0, DV_CHR,
+ UID_ROOT, GID_WHEEL, 0600,
+ "i4b");
+#endif
+
+#else
make_dev(&i4b_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "i4b");
+#endif
+#endif
}
/*---------------------------------------------------------------------------*
@@ -332,7 +365,7 @@ i4bioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
case I4B_CDID_REQ:
{
- msg_cdid_req_t *mir;
+ msg_cdid_req_t *mir;
mir = (msg_cdid_req_t *)data;
cd = reserve_cd();
mir->cdid = cd->cdid;
@@ -353,6 +386,16 @@ i4bioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
break;
}
+ /* prevent dialling on leased lines */
+ if(ctrl_desc[mcr->controller].protocol == PROTOCOL_D64S)
+ {
+ SET_CAUSE_TYPE(cd->cause_in, CAUSET_I4B);
+ SET_CAUSE_VAL(cd->cause_in, CAUSE_I4B_LLDIAL);
+ i4b_l4_disconnect_ind(cd);
+ freecd_by_cd(cd);
+ break;
+ }
+
cd->controller = mcr->controller; /* fill cd */
cd->bprot = mcr->bprot;
cd->driver = mcr->driver;
@@ -683,6 +726,19 @@ i4bioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
mvr->step = STEP;
break;
}
+
+ /* set D-channel protocol for a controller */
+
+ case I4B_PROT_IND:
+ {
+ msg_prot_ind_t *mpi;
+
+ mpi = (msg_prot_ind_t *)data;
+
+ ctrl_desc[mpi->controller].protocol = mpi->protocol;
+
+ break;
+ }
/* Download request */
OpenPOWER on IntegriCloud