diff options
| author | Hansjoerg Lipp <hjlipp@web.de> | 2006-03-26 04:38:30 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 11:57:05 -0500 |
| commit | 14fa73a75df6a0ffe866f750e8dcd218d0171f51 (patch) | |
| tree | 2c2533189245bf9f4e4035d6b717641a1b845387 | |
| parent | 6fd5ea63f85e30fda55b80939b4f379ea5db62b1 (diff) | |
[PATCH] isdn4linux: Siemens Gigaset drivers - event layer
And: Tilman Schmidt <tilman@imap.cc>
This patch adds the event layer to the gigaset module. The event layer
serializes events from hardware, userspace, and other kernel subsystems.
Signed-off-by: Hansjoerg Lipp <hjlipp@web.de>
Signed-off-by: Tilman Schmidt <tilman@imap.cc>
Cc: Karsten Keil <kkeil@suse.de>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | drivers/isdn/gigaset/ev-layer.c | 1983 |
1 files changed, 1983 insertions, 0 deletions
diff --git a/drivers/isdn/gigaset/ev-layer.c b/drivers/isdn/gigaset/ev-layer.c new file mode 100644 index 000000000000..fdcb80bb21c7 --- /dev/null +++ b/drivers/isdn/gigaset/ev-layer.c | |||
| @@ -0,0 +1,1983 @@ | |||
| 1 | /* | ||
| 2 | * Stuff used by all variants of the driver | ||
| 3 | * | ||
| 4 | * Copyright (c) 2001 by Stefan Eilers <Eilers.Stefan@epost.de>, | ||
| 5 | * Hansjoerg Lipp <hjlipp@web.de>, | ||
| 6 | * Tilman Schmidt <tilman@imap.cc>. | ||
| 7 | * | ||
| 8 | * ===================================================================== | ||
| 9 | * This program is free software; you can redistribute it and/or | ||
| 10 | * modify it under the terms of the GNU General Public License as | ||
| 11 | * published by the Free Software Foundation; either version 2 of | ||
| 12 | * the License, or (at your option) any later version. | ||
| 13 | * ===================================================================== | ||
| 14 | * ToDo: ... | ||
| 15 | * ===================================================================== | ||
| 16 | * Version: $Id: ev-layer.c,v 1.4.2.18 2006/02/04 18:28:16 hjlipp Exp $ | ||
| 17 | * ===================================================================== | ||
| 18 | */ | ||
| 19 | |||
| 20 | #include "gigaset.h" | ||
| 21 | |||
| 22 | /* ========================================================== */ | ||
| 23 | /* bit masks for pending commands */ | ||
| 24 | #define PC_INIT 0x004 | ||
| 25 | #define PC_DLE0 0x008 | ||
| 26 | #define PC_DLE1 0x010 | ||
| 27 | #define PC_CID 0x080 | ||
| 28 | #define PC_NOCID 0x100 | ||
| 29 | #define PC_HUP 0x002 | ||
| 30 | #define PC_DIAL 0x001 | ||
| 31 | #define PC_ACCEPT 0x040 | ||
| 32 | #define PC_SHUTDOWN 0x020 | ||
| 33 | #define PC_CIDMODE 0x200 | ||
| 34 | #define PC_UMMODE 0x400 | ||
| 35 | |||
| 36 | /* types of modem responses */ | ||
| 37 | #define RT_NOTHING 0 | ||
| 38 | #define RT_ZSAU 1 | ||
| 39 | #define RT_RING 2 | ||
| 40 | #define RT_NUMBER 3 | ||
| 41 | #define RT_STRING 4 | ||
| 42 | #define RT_HEX 5 | ||
| 43 | #define RT_ZCAU 6 | ||
| 44 | |||
| 45 | /* Possible ASCII responses */ | ||
| 46 | #define RSP_OK 0 | ||
| 47 | //#define RSP_BUSY 1 | ||
| 48 | //#define RSP_CONNECT 2 | ||
| 49 | #define RSP_ZGCI 3 | ||
| 50 | #define RSP_RING 4 | ||
| 51 | #define RSP_ZAOC 5 | ||
| 52 | #define RSP_ZCSTR 6 | ||
| 53 | #define RSP_ZCFGT 7 | ||
| 54 | #define RSP_ZCFG 8 | ||
| 55 | #define RSP_ZCCR 9 | ||
| 56 | #define RSP_EMPTY 10 | ||
| 57 | #define RSP_ZLOG 11 | ||
| 58 | #define RSP_ZCAU 12 | ||
| 59 | #define RSP_ZMWI 13 | ||
| 60 | #define RSP_ZABINFO 14 | ||
| 61 | #define RSP_ZSMLSTCHG 15 | ||
| 62 | #define RSP_VAR 100 | ||
| 63 | #define RSP_ZSAU (RSP_VAR + VAR_ZSAU) | ||
| 64 | #define RSP_ZDLE (RSP_VAR + VAR_ZDLE) | ||
| 65 | #define RSP_ZVLS (RSP_VAR + VAR_ZVLS) | ||
| 66 | #define RSP_ZCTP (RSP_VAR + VAR_ZCTP) | ||
| 67 | #define RSP_STR (RSP_VAR + VAR_NUM) | ||
| 68 | #define RSP_NMBR (RSP_STR + STR_NMBR) | ||
| 69 | #define RSP_ZCPN (RSP_STR + STR_ZCPN) | ||
| 70 | #define RSP_ZCON (RSP_STR + STR_ZCON) | ||
| 71 | #define RSP_ZBC (RSP_STR + STR_ZBC) | ||
| 72 | #define RSP_ZHLC (RSP_STR + STR_ZHLC) | ||
| 73 | #define RSP_ERROR -1 /* ERROR */ | ||
| 74 | #define RSP_WRONG_CID -2 /* unknown cid in cmd */ | ||
| 75 | //#define RSP_EMPTY -3 | ||
| 76 | #define RSP_UNKNOWN -4 /* unknown response */ | ||
| 77 | #define RSP_FAIL -5 /* internal error */ | ||
| 78 | #define RSP_INVAL -6 /* invalid response */ | ||
| 79 | |||
| 80 | #define RSP_NONE -19 | ||
| 81 | #define RSP_STRING -20 | ||
| 82 | #define RSP_NULL -21 | ||
| 83 | //#define RSP_RETRYFAIL -22 | ||
| 84 | //#define RSP_RETRY -23 | ||
| 85 | //#define RSP_SKIP -24 | ||
| 86 | #define RSP_INIT -27 | ||
| 87 | #define RSP_ANY -26 | ||
| 88 | #define RSP_LAST -28 | ||
| 89 | #define RSP_NODEV -9 | ||
| 90 | |||
| 91 | /* actions for process_response */ | ||
| 92 | #define ACT_NOTHING 0 | ||
| 93 | #define ACT_SETDLE1 1 | ||
| 94 | #define ACT_SETDLE0 2 | ||
| 95 | #define ACT_FAILINIT 3 | ||
| 96 | #define ACT_HUPMODEM 4 | ||
| 97 | #define ACT_CONFIGMODE 5 | ||
| 98 | #define ACT_INIT 6 | ||
| 99 | #define ACT_DLE0 7 | ||
| 100 | #define ACT_DLE1 8 | ||
| 101 | #define ACT_FAILDLE0 9 | ||
| 102 | #define ACT_FAILDLE1 10 | ||
| 103 | #define ACT_RING 11 | ||
| 104 | #define ACT_CID 12 | ||
| 105 | #define ACT_FAILCID 13 | ||
| 106 | #define ACT_SDOWN 14 | ||
| 107 | #define ACT_FAILSDOWN 15 | ||
| 108 | #define ACT_DEBUG 16 | ||
| 109 | #define ACT_WARN 17 | ||
| 110 | #define ACT_DIALING 18 | ||
| 111 | #define ACT_ABORTDIAL 19 | ||
| 112 | #define ACT_DISCONNECT 20 | ||
| 113 | #define ACT_CONNECT 21 | ||
| 114 | #define ACT_REMOTEREJECT 22 | ||
| 115 | #define ACT_CONNTIMEOUT 23 | ||
| 116 | #define ACT_REMOTEHUP 24 | ||
| 117 | #define ACT_ABORTHUP 25 | ||
| 118 | #define ACT_ICALL 26 | ||
| 119 | #define ACT_ACCEPTED 27 | ||
| 120 | #define ACT_ABORTACCEPT 28 | ||
| 121 | #define ACT_TIMEOUT 29 | ||
| 122 | #define ACT_GETSTRING 30 | ||
| 123 | #define ACT_SETVER 31 | ||
| 124 | #define ACT_FAILVER 32 | ||
| 125 | #define ACT_GOTVER 33 | ||
| 126 | #define ACT_TEST 34 | ||
| 127 | #define ACT_ERROR 35 | ||
| 128 | #define ACT_ABORTCID 36 | ||
| 129 | #define ACT_ZCAU 37 | ||
| 130 | #define ACT_NOTIFY_BC_DOWN 38 | ||
| 131 | #define ACT_NOTIFY_BC_UP 39 | ||
| 132 | #define ACT_DIAL 40 | ||
| 133 | #define ACT_ACCEPT 41 | ||
| 134 | #define ACT_PROTO_L2 42 | ||
| 135 | #define ACT_HUP 43 | ||
| 136 | #define ACT_IF_LOCK 44 | ||
| 137 | #define ACT_START 45 | ||
| 138 | #define ACT_STOP 46 | ||
| 139 | #define ACT_FAKEDLE0 47 | ||
| 140 | #define ACT_FAKEHUP 48 | ||
| 141 | #define ACT_FAKESDOWN 49 | ||
| 142 | #define ACT_SHUTDOWN 50 | ||
| 143 | #define ACT_PROC_CIDMODE 51 | ||
| 144 | #define ACT_UMODESET 52 | ||
| 145 | #define ACT_FAILUMODE 53 | ||
| 146 | #define ACT_CMODESET 54 | ||
| 147 | #define ACT_FAILCMODE 55 | ||
| 148 | #define ACT_IF_VER 56 | ||
| 149 | #define ACT_CMD 100 | ||
| 150 | |||
| 151 | /* at command sequences */ | ||
| 152 | #define SEQ_NONE 0 | ||
| 153 | #define SEQ_INIT 100 | ||
| 154 | #define SEQ_DLE0 200 | ||
| 155 | #define SEQ_DLE1 250 | ||
| 156 | #define SEQ_CID 300 | ||
| 157 | #define SEQ_NOCID 350 | ||
| 158 | #define SEQ_HUP 400 | ||
| 159 | #define SEQ_DIAL 600 | ||
| 160 | #define SEQ_ACCEPT 720 | ||
| 161 | #define SEQ_SHUTDOWN 500 | ||
| 162 | #define SEQ_CIDMODE 10 | ||
| 163 | #define SEQ_UMMODE 11 | ||
| 164 | |||
| 165 | |||
| 166 | // 100: init, 200: dle0, 250:dle1, 300: get cid (dial), 350: "hup" (no cid), 400: hup, 500: reset, 600: dial, 700: ring | ||
| 167 | struct reply_t gigaset_tab_nocid_m10x[]= /* with dle mode */ | ||
| 168 | { | ||
| 169 | /* resp_code, min_ConState, max_ConState, parameter, new_ConState, timeout, action, command */ | ||
| 170 | |||
| 171 | /* initialize device, set cid mode if possible */ | ||
| 172 | //{RSP_INIT, -1, -1,100, 900, 0, {ACT_TEST}}, | ||
| 173 | //{RSP_ERROR, 900,900, -1, 0, 0, {ACT_FAILINIT}}, | ||
| 174 | //{RSP_OK, 900,900, -1, 100, INIT_TIMEOUT, | ||
| 175 | // {ACT_TIMEOUT}}, | ||
| 176 | |||
| 177 | {RSP_INIT, -1, -1,SEQ_INIT, 100, INIT_TIMEOUT, | ||
| 178 | {ACT_TIMEOUT}}, /* wait until device is ready */ | ||
| 179 | |||
| 180 | {EV_TIMEOUT, 100,100, -1, 101, 3, {0}, "Z\r"}, /* device in transparent mode? try to initialize it. */ | ||
| 181 | {RSP_OK, 101,103, -1, 120, 5, {ACT_GETSTRING}, "+GMR\r"}, /* get version */ | ||
| 182 | |||
| 183 | {EV_TIMEOUT, 101,101, -1, 102, 5, {0}, "Z\r"}, /* timeout => try once again. */ | ||
| 184 | {RSP_ERROR, 101,101, -1, 102, 5, {0}, "Z\r"}, /* error => try once again. */ | ||
| 185 | |||
| 186 | {EV_TIMEOUT, 102,102, -1, 108, 5, {ACT_SETDLE1}, "^SDLE=0\r"}, /* timeout => try again in DLE mode. */ | ||
| 187 | {RSP_OK, 108,108, -1, 104,-1}, | ||
| 188 | {RSP_ZDLE, 104,104, 0, 103, 5, {0}, "Z\r"}, | ||
| 189 | {EV_TIMEOUT, 104,104, -1, 0, 0, {ACT_FAILINIT}}, | ||
| 190 | {RSP_ERROR, 108,108, -1, 0, 0, {ACT_FAILINIT}}, | ||
| 191 | |||
