summaryrefslogtreecommitdiffstats
path: root/kernel/drivers/isdn/hisax/lmgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/drivers/isdn/hisax/lmgr.c')
-rw-r--r--kernel/drivers/isdn/hisax/lmgr.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/kernel/drivers/isdn/hisax/lmgr.c b/kernel/drivers/isdn/hisax/lmgr.c
new file mode 100644
index 000000000..5b63eb660
--- /dev/null
+++ b/kernel/drivers/isdn/hisax/lmgr.c
@@ -0,0 +1,50 @@
+/* $Id: lmgr.c,v 1.7.6.2 2001/09/23 22:24:50 kai Exp $
+ *
+ * Layermanagement module
+ *
+ * Author Karsten Keil
+ * Copyright by Karsten Keil <keil@isdn4linux.de>
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#include "hisax.h"
+
+static void
+error_handling_dchan(struct PStack *st, int Error)
+{
+ switch (Error) {
+ case 'C':
+ case 'D':
+ case 'G':
+ case 'H':
+ st->l2.l2tei(st, MDL_ERROR | REQUEST, NULL);
+ break;
+ }
+}
+
+static void
+hisax_manager(struct PStack *st, int pr, void *arg)
+{
+ long Code;
+
+ switch (pr) {
+ case (MDL_ERROR | INDICATION):
+ Code = (long) arg;
+ HiSax_putstatus(st->l1.hardware, "manager: MDL_ERROR",
+ " %c %s", (char)Code,
+ test_bit(FLG_LAPD, &st->l2.flag) ?
+ "D-channel" : "B-channel");
+ if (test_bit(FLG_LAPD, &st->l2.flag))
+ error_handling_dchan(st, Code);
+ break;
+ }
+}
+
+void
+setstack_manager(struct PStack *st)
+{
+ st->ma.layer = hisax_manager;
+}