patch-2.0.31 linux/drivers/isdn/teles/tei.c
Next file: linux/drivers/isdn/teles/teles.h
Previous file: linux/drivers/isdn/teles/q931.c
Back to the patch index
Back to the overall index
- Lines: 249
- Date:
Wed Dec 31 16:00:00 1969
- Orig file:
v2.0.30/linux/drivers/isdn/teles/tei.c
- Orig date:
Sun Apr 21 01:56:15 1996
diff -u --recursive --new-file v2.0.30/linux/drivers/isdn/teles/tei.c linux/drivers/isdn/teles/tei.c
@@ -1,248 +0,0 @@
-/* $Id: tei.c,v 1.1 1996/04/13 10:28:25 fritz Exp $
- *
- * $Log: tei.c,v $
- * Revision 1.1 1996/04/13 10:28:25 fritz
- * Initial revision
- *
- *
- */
-#define __NO_VERSION__
-#include "teles.h"
-
-extern struct IsdnCard cards[];
-extern int nrcards;
-
-static struct PStack *
-findces(struct PStack *st, int ces)
-{
- struct PStack *ptr = *(st->l1.stlistp);
-
- while (ptr)
- if (ptr->l2.ces == ces)
- return (ptr);
- else
- ptr = ptr->next;
- return (NULL);
-}
-
-static struct PStack *
-findtei(struct PStack *st, int tei)
-{
- struct PStack *ptr = *(st->l1.stlistp);
-
- if (tei == 127)
- return (NULL);
-
- while (ptr)
- if (ptr->l2.tei == tei)
- return (ptr);
- else
- ptr = ptr->next;
- return (NULL);
-}
-
-void
-tei_handler(struct PStack *st,
- byte pr, struct BufHeader *ibh)
-{
- byte *bp;
- unsigned int tces;
- struct PStack *otsp, *ptr;
- unsigned int data;
-
- if (st->l2.debug)
- printk(KERN_DEBUG "teihandler %d\n", pr);
-
- switch (pr) {
- case (MDL_ASSIGN):
- data = (unsigned int) ibh;
- BufPoolGet(&ibh, st->l1.smallpool, GFP_ATOMIC, (void *) st, 6);
- if (!ibh)
- return;
- bp = DATAPTR(ibh);
- bp += st->l2.uihsize;
- bp[0] = 0xf;
- bp[1] = data >> 8;
- bp[2] = data & 0xff;
- bp[3] = 0x1;
- bp[4] = 0xff;
- ibh->datasize = 8;
- st->l3.l3l2(st, DL_UNIT_DATA, ibh);
- break;
- case (DL_UNIT_DATA):
- bp = DATAPTR(ibh);
- bp += 3;
- if (bp[0] != 0xf)
- break;
- switch (bp[3]) {
- case (2):
- tces = (bp[1] << 8) | bp[2];
- BufPoolRelease(ibh);
- if (st->l3.debug)
- printk(KERN_DEBUG "tei identity assigned for %d=%d\n", tces,
- bp[4] >> 1);
- if ((otsp = findces(st, tces)))
- otsp->ma.teil2(otsp, MDL_ASSIGN,
- (void *)(bp[4] >> 1));
- break;
- case (4):
- if (st->l3.debug)
- printk(KERN_DEBUG "checking identity for %d\n", bp[4] >> 1);
- if (bp[4] >> 1 == 0x7f) {
- BufPoolRelease(ibh);
- ptr = *(st->l1.stlistp);
- while (ptr) {
- if ((ptr->l2.tei & 0x7f) != 0x7f) {
- if (BufPoolGet(&ibh, st->l1.smallpool, GFP_ATOMIC, (void *) st, 7))
- break;
- bp = DATAPTR(ibh);
- bp += 3;
- bp[0] = 0xf;
- bp[1] = ptr->l2.ces >> 8;
- bp[2] = ptr->l2.ces & 0xff;
- bp[3] = 0x5;
- bp[4] = (ptr->l2.tei << 1) | 1;
- ibh->datasize = 8;
- st->l3.l3l2(st, DL_UNIT_DATA, ibh);
- }
- ptr = ptr->next;
- }
- } else {
- otsp = findtei(st, bp[4] >> 1);
- BufPoolRelease(ibh);
- if (!otsp)
- break;
- if (st->l3.debug)
- printk(KERN_DEBUG "ces is %d\n", otsp->l2.ces);
- if (BufPoolGet(&ibh, st->l1.smallpool, GFP_ATOMIC, (void *) st, 7))
- break;
- bp = DATAPTR(ibh);
- bp += 3;
- bp[0] = 0xf;
- bp[1] = otsp->l2.ces >> 8;
- bp[2] = otsp->l2.ces & 0xff;
- bp[3] = 0x5;
- bp[4] = (otsp->l2.tei << 1) | 1;
- ibh->datasize = 8;
- st->l3.l3l2(st, DL_UNIT_DATA, ibh);
- }
- break;
- default:
- BufPoolRelease(ibh);
- if (st->l3.debug)
- printk(KERN_DEBUG "tei message unknown %d ai %d\n", bp[3], bp[4] >> 1);
- }
- break;
- default:
- printk(KERN_WARNING "tei handler unknown primitive %d\n", pr);
- break;
- }
-}
-
-unsigned int
-randomces(void)
-{
- int x = jiffies & 0xffff;
-
- return (x);
-}
-
-static void
-tei_man(struct PStack *sp, int i, void *v)
-{
- printk(KERN_DEBUG "tei_man\n");
-}
-
-static void
-tei_l2tei(struct PStack *st, int pr, void *arg)
-{
- struct IsdnCardState *sp = st->l1.hardware;
-
- tei_handler(sp->teistack, pr, arg);
-}
-
-void
-setstack_tei(struct PStack *st)
-{
- st->l2.l2tei = tei_l2tei;
-}
-
-static void
-init_tei(struct IsdnCardState *sp, int protocol)
-{
- struct PStack *st;
- char tmp[128];
-
-#define DIRTY_HACK_AGAINST_SIGSEGV
-
- st = (struct PStack *) Smalloc(sizeof(struct PStack), GFP_KERNEL,
- "struct PStack");
-
-#ifdef DIRTY_HACK_AGAINST_SIGSEGV
- sp->teistack = st; /* struct is not initialized yet */
- sp->teistack->protocol = protocol; /* struct is not initialized yet */
-#endif /* DIRTY_HACK_AGAINST_SIGSEGV */
-
-
- setstack_teles(st, sp);
-
- st->l2.extended = !0;
- st->l2.laptype = LAPD;
- st->l2.window = 1;
- st->l2.orig = !0;
- st->protocol = protocol;
-
-/*
- * the following is not necessary for tei mng. (broadcast only)
- */
-
- st->l2.t200 = 500; /* 500 milliseconds */
- st->l2.n200 = 4; /* try 4 times */
-
- st->l2.sap = 63;
- st->l2.tei = 127;
-
- sprintf(tmp, "Card %d tei ", sp->cardnr);
- setstack_isdnl2(st, tmp);
- st->l2.debug = 0;
- st->l3.debug = 0;
-
- st->ma.manl2(st, MDL_NOTEIPROC, NULL);
-
- st->l2.l2l3 = (void *) tei_handler;
- st->l1.l1man = tei_man;
- st->l2.l2man = tei_man;
- st->l4.l2writewakeup = NULL;
-
- teles_addlist(sp, st);
- sp->teistack = st;
-}
-
-static void
-release_tei(struct IsdnCardState *sp)
-{
- struct PStack *st = sp->teistack;
-
- teles_rmlist(sp, st);
- Sfree((void *) st);
-}
-
-void
-TeiNew(void)
-{
- int i;
-
- for (i = 0; i < nrcards; i++)
- if (cards[i].sp)
- init_tei(cards[i].sp, cards[i].protocol);
-}
-
-void
-TeiFree(void)
-{
- int i;
-
- for (i = 0; i < nrcards; i++)
- if (cards[i].sp)
- release_tei(cards[i].sp);
-}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov