Linux-libre 5.4.47-gnu
[librecmc/linux-libre.git] / drivers / isdn / mISDN / layer2.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  *
4  * Author       Karsten Keil <kkeil@novell.com>
5  *
6  * Copyright 2008  by Karsten Keil <kkeil@novell.com>
7  */
8
9 #include <linux/mISDNif.h>
10 #include <linux/slab.h>
11 #include "core.h"
12 #include "fsm.h"
13 #include "layer2.h"
14
15 static u_int *debug;
16
17 static
18 struct Fsm l2fsm = {NULL, 0, 0, NULL, NULL};
19
20 static char *strL2State[] =
21 {
22         "ST_L2_1",
23         "ST_L2_2",
24         "ST_L2_3",
25         "ST_L2_4",
26         "ST_L2_5",
27         "ST_L2_6",
28         "ST_L2_7",
29         "ST_L2_8",
30 };
31
32 enum {
33         EV_L2_UI,
34         EV_L2_SABME,
35         EV_L2_DISC,
36         EV_L2_DM,
37         EV_L2_UA,
38         EV_L2_FRMR,
39         EV_L2_SUPER,
40         EV_L2_I,
41         EV_L2_DL_DATA,
42         EV_L2_ACK_PULL,
43         EV_L2_DL_UNITDATA,
44         EV_L2_DL_ESTABLISH_REQ,
45         EV_L2_DL_RELEASE_REQ,
46         EV_L2_MDL_ASSIGN,
47         EV_L2_MDL_REMOVE,
48         EV_L2_MDL_ERROR,
49         EV_L1_DEACTIVATE,
50         EV_L2_T200,
51         EV_L2_T203,
52         EV_L2_T200I,
53         EV_L2_T203I,
54         EV_L2_SET_OWN_BUSY,
55         EV_L2_CLEAR_OWN_BUSY,
56         EV_L2_FRAME_ERROR,
57 };
58
59 #define L2_EVENT_COUNT (EV_L2_FRAME_ERROR + 1)
60
61 static char *strL2Event[] =
62 {
63         "EV_L2_UI",
64         "EV_L2_SABME",
65         "EV_L2_DISC",
66         "EV_L2_DM",
67         "EV_L2_UA",
68         "EV_L2_FRMR",
69         "EV_L2_SUPER",
70         "EV_L2_I",
71         "EV_L2_DL_DATA",
72         "EV_L2_ACK_PULL",
73         "EV_L2_DL_UNITDATA",
74         "EV_L2_DL_ESTABLISH_REQ",
75         "EV_L2_DL_RELEASE_REQ",
76         "EV_L2_MDL_ASSIGN",
77         "EV_L2_MDL_REMOVE",
78         "EV_L2_MDL_ERROR",
79         "EV_L1_DEACTIVATE",
80         "EV_L2_T200",
81         "EV_L2_T203",
82         "EV_L2_T200I",
83         "EV_L2_T203I",
84         "EV_L2_SET_OWN_BUSY",
85         "EV_L2_CLEAR_OWN_BUSY",
86         "EV_L2_FRAME_ERROR",
87 };
88
89 static void
90 l2m_debug(struct FsmInst *fi, char *fmt, ...)
91 {
92         struct layer2 *l2 = fi->userdata;
93         struct va_format vaf;
94         va_list va;
95
96         if (!(*debug & DEBUG_L2_FSM))
97                 return;
98
99         va_start(va, fmt);
100
101         vaf.fmt = fmt;
102         vaf.va = &va;
103
104         printk(KERN_DEBUG "%s l2 (sapi %d tei %d): %pV\n",
105                mISDNDevName4ch(&l2->ch), l2->sapi, l2->tei, &vaf);
106
107         va_end(va);
108 }
109
110 inline u_int
111 l2headersize(struct layer2 *l2, int ui)
112 {
113         return ((test_bit(FLG_MOD128, &l2->flag) && (!ui)) ? 2 : 1) +
114                 (test_bit(FLG_LAPD, &l2->flag) ? 2 : 1);
115 }
116
117 inline u_int
118 l2addrsize(struct layer2 *l2)
119 {
120         return test_bit(FLG_LAPD, &l2->flag) ? 2 : 1;
121 }
122
123 static u_int
124 l2_newid(struct layer2 *l2)
125 {
126         u_int   id;
127
128         id = l2->next_id++;
129         if (id == 0x7fff)
130                 l2->next_id = 1;
131         id <<= 16;
132         id |= l2->tei << 8;
133         id |= l2->sapi;
134         return id;
135 }
136
137 static void
138 l2up(struct layer2 *l2, u_int prim, struct sk_buff *skb)
139 {
140         int     err;
141
142         if (!l2->up)
143                 return;
144         mISDN_HEAD_PRIM(skb) = prim;
145         mISDN_HEAD_ID(skb) = (l2->ch.nr << 16) | l2->ch.addr;
146         err = l2->up->send(l2->up, skb);
147         if (err) {
148                 printk(KERN_WARNING "%s: dev %s err=%d\n", __func__,
149                        mISDNDevName4ch(&l2->ch), err);
150                 dev_kfree_skb(skb);
151         }
152 }
153
154 static void
155 l2up_create(struct layer2 *l2, u_int prim, int len, void *arg)
156 {
157         struct sk_buff  *skb;
158         struct mISDNhead *hh;
159         int             err;
160
161         if (!l2->up)
162                 return;
163         skb = mI_alloc_skb(len, GFP_ATOMIC);
164         if (!skb)
165                 return;
166         hh = mISDN_HEAD_P(skb);
167         hh->prim = prim;
168         hh->id = (l2->ch.nr << 16) | l2->ch.addr;
169         if (len)
170                 skb_put_data(skb, arg, len);
171         err = l2->up->send(l2->up, skb);
172         if (err) {
173                 printk(KERN_WARNING "%s: dev %s err=%d\n", __func__,
174                        mISDNDevName4ch(&l2->ch), err);
175                 dev_kfree_skb(skb);
176         }
177 }
178
179 static int
180 l2down_skb(struct layer2 *l2, struct sk_buff *skb) {
181         int ret;
182
183         ret = l2->ch.recv(l2->ch.peer, skb);
184         if (ret && (*debug & DEBUG_L2_RECV))
185                 printk(KERN_DEBUG "l2down_skb: dev %s ret(%d)\n",
186                        mISDNDevName4ch(&l2->ch), ret);
187         return ret;
188 }
189
190 static int
191 l2down_raw(struct layer2 *l2, struct sk_buff *skb)
192 {
193         struct mISDNhead *hh = mISDN_HEAD_P(skb);
194
195         if (hh->prim == PH_DATA_REQ) {
196                 if (test_and_set_bit(FLG_L1_NOTREADY, &l2->flag)) {
197                         skb_queue_tail(&l2->down_queue, skb);
198                         return 0;
199                 }
200                 l2->down_id = mISDN_HEAD_ID(skb);
201         }
202         return l2down_skb(l2, skb);
203 }
204
205 static int
206 l2down(struct layer2 *l2, u_int prim, u_int id, struct sk_buff *skb)
207 {
208         struct mISDNhead *hh = mISDN_HEAD_P(skb);
209
210         hh->prim = prim;
211         hh->id = id;
212         return l2down_raw(l2, skb);
213 }
214
215 static int
216 l2down_create(struct layer2 *l2, u_int prim, u_int id, int len, void *arg)
217 {
218         struct sk_buff  *skb;
219         int             err;
220         struct mISDNhead *hh;
221
222         skb = mI_alloc_skb(len, GFP_ATOMIC);
223         if (!skb)
224                 return -ENOMEM;
225         hh = mISDN_HEAD_P(skb);
226         hh->prim = prim;
227         hh->id = id;
228         if (len)
229                 skb_put_data(skb, arg, len);
230         err = l2down_raw(l2, skb);
231         if (err)
232                 dev_kfree_skb(skb);
233         return err;
234 }
235
236 static int
237 ph_data_confirm(struct layer2 *l2, struct mISDNhead *hh, struct sk_buff *skb) {
238         struct sk_buff *nskb = skb;
239         int ret = -EAGAIN;
240
241         if (test_bit(FLG_L1_NOTREADY, &l2->flag)) {
242                 if (hh->id == l2->down_id) {
243                         nskb = skb_dequeue(&l2->down_queue);
244                         if (nskb) {
245                                 l2->down_id = mISDN_HEAD_ID(nskb);
246                                 if (l2down_skb(l2, nskb)) {
247                                         dev_kfree_skb(nskb);
248                                         l2->down_id = MISDN_ID_NONE;
249                                 }
250                         } else
251                                 l2->down_id = MISDN_ID_NONE;
252                         if (ret) {
253                                 dev_kfree_skb(skb);
254                                 ret = 0;
255                         }
256                         if (l2->down_id == MISDN_ID_NONE) {
257                                 test_and_clear_bit(FLG_L1_NOTREADY, &l2->flag);
258                                 mISDN_FsmEvent(&l2->l2m, EV_L2_ACK_PULL, NULL);
259                         }
260                 }
261         }
262         if (!test_and_set_bit(FLG_L1_NOTREADY, &l2->flag)) {
263                 nskb = skb_dequeue(&l2->down_queue);
264                 if (nskb) {
265                         l2->down_id = mISDN_HEAD_ID(nskb);
266                         if (l2down_skb(l2, nskb)) {
267                                 dev_kfree_skb(nskb);
268                                 l2->down_id = MISDN_ID_NONE;
269                                 test_and_clear_bit(FLG_L1_NOTREADY, &l2->flag);
270                         }
271                 } else
272                         test_and_clear_bit(FLG_L1_NOTREADY, &l2->flag);
273         }
274         return ret;
275 }
276
277 static void
278 l2_timeout(struct FsmInst *fi, int event, void *arg)
279 {
280         struct layer2 *l2 = fi->userdata;
281         struct sk_buff *skb;
282         struct mISDNhead *hh;
283
284         skb = mI_alloc_skb(0, GFP_ATOMIC);
285         if (!skb) {
286                 printk(KERN_WARNING "%s: L2(%d,%d) nr:%x timer %s no skb\n",
287                        mISDNDevName4ch(&l2->ch), l2->sapi, l2->tei,
288                        l2->ch.nr, event == EV_L2_T200 ? "T200" : "T203");
289                 return;
290         }
291         hh = mISDN_HEAD_P(skb);
292         hh->prim = event == EV_L2_T200 ? DL_TIMER200_IND : DL_TIMER203_IND;
293         hh->id = l2->ch.nr;
294         if (*debug & DEBUG_TIMER)
295                 printk(KERN_DEBUG "%s: L2(%d,%d) nr:%x timer %s expired\n",
296                        mISDNDevName4ch(&l2->ch), l2->sapi, l2->tei,
297                        l2->ch.nr, event == EV_L2_T200 ? "T200" : "T203");
298         if (l2->ch.st)
299                 l2->ch.st->own.recv(&l2->ch.st->own, skb);
300 }
301
302 static int
303 l2mgr(struct layer2 *l2, u_int prim, void *arg) {
304         long c = (long)arg;
305
306         printk(KERN_WARNING "l2mgr: dev %s addr:%x prim %x %c\n",
307                mISDNDevName4ch(&l2->ch), l2->id, prim, (char)c);
308         if (test_bit(FLG_LAPD, &l2->flag) &&
309             !test_bit(FLG_FIXED_TEI, &l2->flag)) {
310                 switch (c) {
311                 case 'C':
312                 case 'D':
313                 case 'G':
314                 case 'H':
315                         l2_tei(l2, prim, (u_long)arg);
316                         break;
317                 }
318         }
319         return 0;
320 }
321
322 static void
323 set_peer_busy(struct layer2 *l2) {
324         test_and_set_bit(FLG_PEER_BUSY, &l2->flag);
325         if (skb_queue_len(&l2->i_queue) || skb_queue_len(&l2->ui_queue))
326                 test_and_set_bit(FLG_L2BLOCK, &l2->flag);
327 }
328
329 static void
330 clear_peer_busy(struct layer2 *l2) {
331         if (test_and_clear_bit(FLG_PEER_BUSY, &l2->flag))
332                 test_and_clear_bit(FLG_L2BLOCK, &l2->flag);
333 }
334
335 static void
336 InitWin(struct layer2 *l2)
337 {
338         int i;
339
340         for (i = 0; i < MAX_WINDOW; i++)
341                 l2->windowar[i] = NULL;
342 }
343
344 static int
345 freewin(struct layer2 *l2)
346 {
347         int i, cnt = 0;
348
349         for (i = 0; i < MAX_WINDOW; i++) {
350                 if (l2->windowar[i]) {
351                         cnt++;
352                         dev_kfree_skb(l2->windowar[i]);
353                         l2->windowar[i] = NULL;
354                 }
355         }
356         return cnt;
357 }
358
359 static void
360 ReleaseWin(struct layer2 *l2)
361 {
362         int cnt = freewin(l2);
363
364         if (cnt)
365                 printk(KERN_WARNING
366                        "isdnl2 freed %d skbuffs in release\n", cnt);
367 }
368
369 inline unsigned int
370 cansend(struct layer2 *l2)
371 {
372         unsigned int p1;
373
374         if (test_bit(FLG_MOD128, &l2->flag))
375                 p1 = (l2->vs - l2->va) % 128;
376         else
377                 p1 = (l2->vs - l2->va) % 8;
378         return (p1 < l2->window) && !test_bit(FLG_PEER_BUSY, &l2->flag);
379 }
380
381 inline void
382 clear_exception(struct layer2 *l2)
383 {
384         test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
385         test_and_clear_bit(FLG_REJEXC, &l2->flag);
386         test_and_clear_bit(FLG_OWN_BUSY, &l2->flag);
387         clear_peer_busy(l2);
388 }
389
390 static int
391 sethdraddr(struct layer2 *l2, u_char *header, int rsp)
392 {
393         u_char *ptr = header;
394         int crbit = rsp;
395
396         if (test_bit(FLG_LAPD, &l2->flag)) {
397                 if (test_bit(FLG_LAPD_NET, &l2->flag))
398                         crbit = !crbit;
399                 *ptr++ = (l2->sapi << 2) | (crbit ? 2 : 0);
400                 *ptr++ = (l2->tei << 1) | 1;
401                 return 2;
402         } else {
403                 if (test_bit(FLG_ORIG, &l2->flag))
404                         crbit = !crbit;
405                 if (crbit)
406                         *ptr++ = l2->addr.B;
407                 else
408                         *ptr++ = l2->addr.A;
409                 return 1;
410         }
411 }
412
413 static inline void
414 enqueue_super(struct layer2 *l2, struct sk_buff *skb)
415 {
416         if (l2down(l2, PH_DATA_REQ, l2_newid(l2), skb))
417                 dev_kfree_skb(skb);
418 }
419
420 static inline void
421 enqueue_ui(struct layer2 *l2, struct sk_buff *skb)
422 {
423         if (l2->tm)
424                 l2_tei(l2, MDL_STATUS_UI_IND, 0);
425         if (l2down(l2, PH_DATA_REQ, l2_newid(l2), skb))
426                 dev_kfree_skb(skb);
427 }
428
429 inline int
430 IsUI(u_char *data)
431 {
432         return (data[0] & 0xef) == UI;
433 }
434
435 inline int
436 IsUA(u_char *data)
437 {
438         return (data[0] & 0xef) == UA;
439 }
440
441 inline int
442 IsDM(u_char *data)
443 {
444         return (data[0] & 0xef) == DM;
445 }
446
447 inline int
448 IsDISC(u_char *data)
449 {
450         return (data[0] & 0xef) == DISC;
451 }
452
453 inline int
454 IsRR(u_char *data, struct layer2 *l2)
455 {
456         if (test_bit(FLG_MOD128, &l2->flag))
457                 return data[0] == RR;
458         else
459                 return (data[0] & 0xf) == 1;
460 }
461
462 inline int
463 IsSFrame(u_char *data, struct layer2 *l2)
464 {
465         register u_char d = *data;
466
467         if (!test_bit(FLG_MOD128, &l2->flag))
468                 d &= 0xf;
469         return ((d & 0xf3) == 1) && ((d & 0x0c) != 0x0c);
470 }
471
472 inline int
473 IsSABME(u_char *data, struct layer2 *l2)
474 {
475         u_char d = data[0] & ~0x10;
476
477         return test_bit(FLG_MOD128, &l2->flag) ? d == SABME : d == SABM;
478 }
479
480 inline int
481 IsREJ(u_char *data, struct layer2 *l2)
482 {
483         return test_bit(FLG_MOD128, &l2->flag) ?
484                 data[0] == REJ : (data[0] & 0xf) == REJ;
485 }
486
487 inline int
488 IsFRMR(u_char *data)
489 {
490         return (data[0] & 0xef) == FRMR;
491 }
492
493 inline int
494 IsRNR(u_char *data, struct layer2 *l2)
495 {
496         return test_bit(FLG_MOD128, &l2->flag) ?
497                 data[0] == RNR : (data[0] & 0xf) == RNR;
498 }
499
500 static int
501 iframe_error(struct layer2 *l2, struct sk_buff *skb)
502 {
503         u_int   i;
504         int     rsp = *skb->data & 0x2;
505
506         i = l2addrsize(l2) + (test_bit(FLG_MOD128, &l2->flag) ? 2 : 1);
507         if (test_bit(FLG_ORIG, &l2->flag))
508                 rsp = !rsp;
509         if (rsp)
510                 return 'L';
511         if (skb->len < i)
512                 return 'N';
513         if ((skb->len - i) > l2->maxlen)
514                 return 'O';
515         return 0;
516 }
517
518 static int
519 super_error(struct layer2 *l2, struct sk_buff *skb)
520 {
521         if (skb->len != l2addrsize(l2) +
522             (test_bit(FLG_MOD128, &l2->flag) ? 2 : 1))
523                 return 'N';
524         return 0;
525 }
526
527 static int
528 unnum_error(struct layer2 *l2, struct sk_buff *skb, int wantrsp)
529 {
530         int rsp = (*skb->data & 0x2) >> 1;
531         if (test_bit(FLG_ORIG, &l2->flag))
532                 rsp = !rsp;
533         if (rsp != wantrsp)
534                 return 'L';
535         if (skb->len != l2addrsize(l2) + 1)
536                 return 'N';
537         return 0;
538 }
539
540 static int
541 UI_error(struct layer2 *l2, struct sk_buff *skb)
542 {
543         int rsp = *skb->data & 0x2;
544         if (test_bit(FLG_ORIG, &l2->flag))
545                 rsp = !rsp;
546         if (rsp)
547                 return 'L';
548         if (skb->len > l2->maxlen + l2addrsize(l2) + 1)
549                 return 'O';
550         return 0;
551 }
552
553 static int
554 FRMR_error(struct layer2 *l2, struct sk_buff *skb)
555 {
556         u_int   headers = l2addrsize(l2) + 1;
557         u_char  *datap = skb->data + headers;
558         int     rsp = *skb->data & 0x2;
559
560         if (test_bit(FLG_ORIG, &l2->flag))
561                 rsp = !rsp;
562         if (!rsp)
563                 return 'L';
564         if (test_bit(FLG_MOD128, &l2->flag)) {
565                 if (skb->len < headers + 5)
566                         return 'N';
567                 else if (*debug & DEBUG_L2)
568                         l2m_debug(&l2->l2m,
569                                   "FRMR information %2x %2x %2x %2x %2x",
570                                   datap[0], datap[1], datap[2], datap[3], datap[4]);
571         } else {
572                 if (skb->len < headers + 3)
573                         return 'N';
574                 else if (*debug & DEBUG_L2)
575                         l2m_debug(&l2->l2m,
576                                   "FRMR information %2x %2x %2x",
577                                   datap[0], datap[1], datap[2]);
578         }
579         return 0;
580 }
581
582 static unsigned int
583 legalnr(struct layer2 *l2, unsigned int nr)
584 {
585         if (test_bit(FLG_MOD128, &l2->flag))
586                 return ((nr - l2->va) % 128) <= ((l2->vs - l2->va) % 128);
587         else
588                 return ((nr - l2->va) % 8) <= ((l2->vs - l2->va) % 8);
589 }
590
591 static void
592 setva(struct layer2 *l2, unsigned int nr)
593 {
594         struct sk_buff  *skb;
595
596         while (l2->va != nr) {
597                 l2->va++;
598                 if (test_bit(FLG_MOD128, &l2->flag))
599                         l2->va %= 128;
600                 else
601                         l2->va %= 8;
602                 if (l2->windowar[l2->sow]) {
603                         skb_trim(l2->windowar[l2->sow], 0);
604                         skb_queue_tail(&l2->tmp_queue, l2->windowar[l2->sow]);
605                         l2->windowar[l2->sow] = NULL;
606                 }
607                 l2->sow = (l2->sow + 1) % l2->window;
608         }
609         skb = skb_dequeue(&l2->tmp_queue);
610         while (skb) {
611                 dev_kfree_skb(skb);
612                 skb = skb_dequeue(&l2->tmp_queue);
613         }
614 }
615
616 static void
617 send_uframe(struct layer2 *l2, struct sk_buff *skb, u_char cmd, u_char cr)
618 {
619         u_char tmp[MAX_L2HEADER_LEN];
620         int i;
621
622         i = sethdraddr(l2, tmp, cr);
623         tmp[i++] = cmd;
624         if (skb)
625                 skb_trim(skb, 0);
626         else {
627                 skb = mI_alloc_skb(i, GFP_ATOMIC);
628                 if (!skb) {
629                         printk(KERN_WARNING "%s: can't alloc skbuff in %s\n",
630                                mISDNDevName4ch(&l2->ch), __func__);
631                         return;
632                 }
633         }
634         skb_put_data(skb, tmp, i);
635         enqueue_super(l2, skb);
636 }
637
638
639 inline u_char
640 get_PollFlag(struct layer2 *l2, struct sk_buff *skb)
641 {
642         return skb->data[l2addrsize(l2)] & 0x10;
643 }
644
645 inline u_char
646 get_PollFlagFree(struct layer2 *l2, struct sk_buff *skb)
647 {
648         u_char PF;
649
650         PF = get_PollFlag(l2, skb);
651         dev_kfree_skb(skb);
652         return PF;
653 }
654
655 inline void
656 start_t200(struct layer2 *l2, int i)
657 {
658         mISDN_FsmAddTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, i);
659         test_and_set_bit(FLG_T200_RUN, &l2->flag);
660 }
661
662 inline void
663 restart_t200(struct layer2 *l2, int i)
664 {
665         mISDN_FsmRestartTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, i);
666         test_and_set_bit(FLG_T200_RUN, &l2->flag);
667 }
668
669 inline void
670 stop_t200(struct layer2 *l2, int i)
671 {
672         if (test_and_clear_bit(FLG_T200_RUN, &l2->flag))
673                 mISDN_FsmDelTimer(&l2->t200, i);
674 }
675
676 inline void
677 st5_dl_release_l2l3(struct layer2 *l2)
678 {
679         int pr;
680
681         if (test_and_clear_bit(FLG_PEND_REL, &l2->flag))
682                 pr = DL_RELEASE_CNF;
683         else
684                 pr = DL_RELEASE_IND;
685         l2up_create(l2, pr, 0, NULL);
686 }
687
688 inline void
689 lapb_dl_release_l2l3(struct layer2 *l2, int f)
690 {
691         if (test_bit(FLG_LAPB, &l2->flag))
692                 l2down_create(l2, PH_DEACTIVATE_REQ, l2_newid(l2), 0, NULL);
693         l2up_create(l2, f, 0, NULL);
694 }
695
696 static void
697 establishlink(struct FsmInst *fi)
698 {
699         struct layer2 *l2 = fi->userdata;
700         u_char cmd;
701
702         clear_exception(l2);
703         l2->rc = 0;
704         cmd = (test_bit(FLG_MOD128, &l2->flag) ? SABME : SABM) | 0x10;
705         send_uframe(l2, NULL, cmd, CMD);
706         mISDN_FsmDelTimer(&l2->t203, 1);
707         restart_t200(l2, 1);
708         test_and_clear_bit(FLG_PEND_REL, &l2->flag);
709         freewin(l2);
710         mISDN_FsmChangeState(fi, ST_L2_5);
711 }
712
713 static void
714 l2_mdl_error_ua(struct FsmInst *fi, int event, void *arg)
715 {
716         struct sk_buff *skb = arg;
717         struct layer2 *l2 = fi->userdata;
718
719         if (get_PollFlagFree(l2, skb))
720                 l2mgr(l2, MDL_ERROR_IND, (void *) 'C');
721         else
722                 l2mgr(l2, MDL_ERROR_IND, (void *) 'D');
723
724 }
725
726 static void
727 l2_mdl_error_dm(struct FsmInst *fi, int event, void *arg)
728 {
729         struct sk_buff *skb = arg;
730         struct layer2 *l2 = fi->userdata;
731
732         if (get_PollFlagFree(l2, skb))
733                 l2mgr(l2, MDL_ERROR_IND, (void *) 'B');
734         else {
735                 l2mgr(l2, MDL_ERROR_IND, (void *) 'E');
736                 establishlink(fi);
737                 test_and_clear_bit(FLG_L3_INIT, &l2->flag);
738         }
739 }
740
741 static void
742 l2_st8_mdl_error_dm(struct FsmInst *fi, int event, void *arg)
743 {
744         struct sk_buff *skb = arg;
745         struct layer2 *l2 = fi->userdata;
746
747         if (get_PollFlagFree(l2, skb))
748                 l2mgr(l2, MDL_ERROR_IND, (void *) 'B');
749         else
750                 l2mgr(l2, MDL_ERROR_IND, (void *) 'E');
751         establishlink(fi);
752         test_and_clear_bit(FLG_L3_INIT, &l2->flag);
753 }
754
755 static void
756 l2_go_st3(struct FsmInst *fi, int event, void *arg)
757 {
758         dev_kfree_skb((struct sk_buff *)arg);
759         mISDN_FsmChangeState(fi, ST_L2_3);
760 }
761
762 static void
763 l2_mdl_assign(struct FsmInst *fi, int event, void *arg)
764 {
765         struct layer2   *l2 = fi->userdata;
766
767         mISDN_FsmChangeState(fi, ST_L2_3);
768         dev_kfree_skb((struct sk_buff *)arg);
769         l2_tei(l2, MDL_ASSIGN_IND, 0);
770 }
771
772 static void
773 l2_queue_ui_assign(struct FsmInst *fi, int event, void *arg)
774 {
775         struct layer2 *l2 = fi->userdata;
776         struct sk_buff *skb = arg;
777
778         skb_queue_tail(&l2->ui_queue, skb);
779         mISDN_FsmChangeState(fi, ST_L2_2);
780         l2_tei(l2, MDL_ASSIGN_IND, 0);
781 }
782
783 static void
784 l2_queue_ui(struct FsmInst *fi, int event, void *arg)
785 {
786         struct layer2 *l2 = fi->userdata;
787         struct sk_buff *skb = arg;
788
789         skb_queue_tail(&l2->ui_queue, skb);
790 }
791
792 static void
793 tx_ui(struct layer2 *l2)
794 {
795         struct sk_buff *skb;
796         u_char header[MAX_L2HEADER_LEN];
797         int i;
798
799         i = sethdraddr(l2, header, CMD);
800         if (test_bit(FLG_LAPD_NET, &l2->flag))
801                 header[1] = 0xff; /* tei 127 */
802         header[i++] = UI;
803         while ((skb = skb_dequeue(&l2->ui_queue))) {
804                 memcpy(skb_push(skb, i), header, i);
805                 enqueue_ui(l2, skb);
806         }
807 }
808
809 static void
810 l2_send_ui(struct FsmInst *fi, int event, void *arg)
811 {
812         struct layer2 *l2 = fi->userdata;
813         struct sk_buff *skb = arg;
814
815         skb_queue_tail(&l2->ui_queue, skb);
816         tx_ui(l2);
817 }
818
819 static void
820 l2_got_ui(struct FsmInst *fi, int event, void *arg)
821 {
822         struct layer2 *l2 = fi->userdata;
823         struct sk_buff *skb = arg;
824
825         skb_pull(skb, l2headersize(l2, 1));
826 /*
827  *              in states 1-3 for broadcast
828  */
829
830         if (l2->tm)
831                 l2_tei(l2, MDL_STATUS_UI_IND, 0);
832         l2up(l2, DL_UNITDATA_IND, skb);
833 }
834
835 static void
836 l2_establish(struct FsmInst *fi, int event, void *arg)
837 {
838         struct sk_buff *skb = arg;
839         struct layer2 *l2 = fi->userdata;
840
841         establishlink(fi);
842         test_and_set_bit(FLG_L3_INIT, &l2->flag);
843         dev_kfree_skb(skb);
844 }
845
846 static void
847 l2_discard_i_setl3(struct FsmInst *fi, int event, void *arg)
848 {
849         struct sk_buff *skb = arg;
850         struct layer2 *l2 = fi->userdata;
851
852         skb_queue_purge(&l2->i_queue);
853         test_and_set_bit(FLG_L3_INIT, &l2->flag);
854         test_and_clear_bit(FLG_PEND_REL, &l2->flag);
855         dev_kfree_skb(skb);
856 }
857
858 static void
859 l2_l3_reestablish(struct FsmInst *fi, int event, void *arg)
860 {
861         struct sk_buff *skb = arg;
862         struct layer2 *l2 = fi->userdata;
863
864         skb_queue_purge(&l2->i_queue);
865         establishlink(fi);
866         test_and_set_bit(FLG_L3_INIT, &l2->flag);
867         dev_kfree_skb(skb);
868 }
869
870 static void
871 l2_release(struct FsmInst *fi, int event, void *arg)
872 {
873         struct layer2 *l2 = fi->userdata;
874         struct sk_buff *skb = arg;
875
876         skb_trim(skb, 0);
877         l2up(l2, DL_RELEASE_CNF, skb);
878 }
879
880 static void
881 l2_pend_rel(struct FsmInst *fi, int event, void *arg)
882 {
883         struct sk_buff *skb = arg;
884         struct layer2 *l2 = fi->userdata;
885
886         test_and_set_bit(FLG_PEND_REL, &l2->flag);
887         dev_kfree_skb(skb);
888 }
889
890 static void
891 l2_disconnect(struct FsmInst *fi, int event, void *arg)
892 {
893         struct layer2 *l2 = fi->userdata;
894         struct sk_buff *skb = arg;
895
896         skb_queue_purge(&l2->i_queue);
897         freewin(l2);
898         mISDN_FsmChangeState(fi, ST_L2_6);
899         l2->rc = 0;
900         send_uframe(l2, NULL, DISC | 0x10, CMD);
901         mISDN_FsmDelTimer(&l2->t203, 1);
902         restart_t200(l2, 2);
903         dev_kfree_skb(skb);
904 }
905
906 static void
907 l2_start_multi(struct FsmInst *fi, int event, void *arg)
908 {
909         struct layer2   *l2 = fi->userdata;
910         struct sk_buff  *skb = arg;
911
912         l2->vs = 0;
913         l2->va = 0;
914         l2->vr = 0;
915         l2->sow = 0;
916         clear_exception(l2);
917         send_uframe(l2, NULL, UA | get_PollFlag(l2, skb), RSP);
918         mISDN_FsmChangeState(fi, ST_L2_7);
919         mISDN_FsmAddTimer(&l2->t203, l2->T203, EV_L2_T203, NULL, 3);
920         skb_trim(skb, 0);
921         l2up(l2, DL_ESTABLISH_IND, skb);
922         if (l2->tm)
923                 l2_tei(l2, MDL_STATUS_UP_IND, 0);
924 }
925
926 static void
927 l2_send_UA(struct FsmInst *fi, int event, void *arg)
928 {
929         struct layer2 *l2 = fi->userdata;
930         struct sk_buff *skb = arg;
931
932         send_uframe(l2, skb, UA | get_PollFlag(l2, skb), RSP);
933 }
934
935 static void
936 l2_send_DM(struct FsmInst *fi, int event, void *arg)
937 {
938         struct layer2 *l2 = fi->userdata;
939         struct sk_buff *skb = arg;
940
941         send_uframe(l2, skb, DM | get_PollFlag(l2, skb), RSP);
942 }
943
944 static void
945 l2_restart_multi(struct FsmInst *fi, int event, void *arg)
946 {
947         struct layer2   *l2 = fi->userdata;
948         struct sk_buff  *skb = arg;
949         int             est = 0;
950
951         send_uframe(l2, skb, UA | get_PollFlag(l2, skb), RSP);
952
953         l2mgr(l2, MDL_ERROR_IND, (void *) 'F');
954
955         if (l2->vs != l2->va) {
956                 skb_queue_purge(&l2->i_queue);
957                 est = 1;
958         }
959
960         clear_exception(l2);
961         l2->vs = 0;
962         l2->va = 0;
963         l2->vr = 0;
964         l2->sow = 0;
965         mISDN_FsmChangeState(fi, ST_L2_7);
966         stop_t200(l2, 3);
967         mISDN_FsmRestartTimer(&l2->t203, l2->T203, EV_L2_T203, NULL, 3);
968
969         if (est)
970                 l2up_create(l2, DL_ESTABLISH_IND, 0, NULL);
971 /*              mISDN_queue_data(&l2->inst, l2->inst.id | MSG_BROADCAST,
972  *                  MGR_SHORTSTATUS | INDICATION, SSTATUS_L2_ESTABLISHED,
973  *                  0, NULL, 0);
974  */
975         if (skb_queue_len(&l2->i_queue) && cansend(l2))
976                 mISDN_FsmEvent(fi, EV_L2_ACK_PULL, NULL);
977 }
978
979 static void
980 l2_stop_multi(struct FsmInst *fi, int event, void *arg)
981 {
982         struct layer2   *l2 = fi->userdata;
983         struct sk_buff  *skb = arg;
984
985         mISDN_FsmChangeState(fi, ST_L2_4);
986         mISDN_FsmDelTimer(&l2->t203, 3);
987         stop_t200(l2, 4);
988
989         send_uframe(l2, skb, UA | get_PollFlag(l2, skb), RSP);
990         skb_queue_purge(&l2->i_queue);
991         freewin(l2);
992         lapb_dl_release_l2l3(l2, DL_RELEASE_IND);
993         if (l2->tm)
994                 l2_tei(l2, MDL_STATUS_DOWN_IND, 0);
995 }
996
997 static void
998 l2_connected(struct FsmInst *fi, int event, void *arg)
999 {
1000         struct layer2   *l2 = fi->userdata;
1001         struct sk_buff  *skb = arg;
1002         int pr = -1;
1003
1004         if (!get_PollFlag(l2, skb)) {
1005                 l2_mdl_error_ua(fi, event, arg);
1006                 return;
1007         }
1008         dev_kfree_skb(skb);
1009         if (test_and_clear_bit(FLG_PEND_REL, &l2->flag))
1010                 l2_disconnect(fi, event, NULL);
1011         if (test_and_clear_bit(FLG_L3_INIT, &l2->flag)) {
1012                 pr = DL_ESTABLISH_CNF;
1013         } else if (l2->vs != l2->va) {
1014                 skb_queue_purge(&l2->i_queue);
1015                 pr = DL_ESTABLISH_IND;
1016         }
1017         stop_t200(l2, 5);
1018         l2->vr = 0;
1019         l2->vs = 0;
1020         l2->va = 0;
1021         l2->sow = 0;
1022         mISDN_FsmChangeState(fi, ST_L2_7);
1023         mISDN_FsmAddTimer(&l2->t203, l2->T203, EV_L2_T203, NULL, 4);
1024         if (pr != -1)
1025                 l2up_create(l2, pr, 0, NULL);
1026
1027         if (skb_queue_len(&l2->i_queue) && cansend(l2))
1028                 mISDN_FsmEvent(fi, EV_L2_ACK_PULL, NULL);
1029
1030         if (l2->tm)
1031                 l2_tei(l2, MDL_STATUS_UP_IND, 0);
1032 }
1033
1034 static void
1035 l2_released(struct FsmInst *fi, int event, void *arg)
1036 {
1037         struct layer2 *l2 = fi->userdata;
1038         struct sk_buff *skb = arg;
1039
1040         if (!get_PollFlag(l2, skb)) {
1041                 l2_mdl_error_ua(fi, event, arg);
1042                 return;
1043         }
1044         dev_kfree_skb(skb);
1045         stop_t200(l2, 6);
1046         lapb_dl_release_l2l3(l2, DL_RELEASE_CNF);
1047         mISDN_FsmChangeState(fi, ST_L2_4);
1048         if (l2->tm)
1049                 l2_tei(l2, MDL_STATUS_DOWN_IND, 0);
1050 }
1051
1052 static void
1053 l2_reestablish(struct FsmInst *fi, int event, void *arg)
1054 {
1055         struct layer2 *l2 = fi->userdata;
1056         struct sk_buff *skb = arg;
1057
1058         if (!get_PollFlagFree(l2, skb)) {
1059                 establishlink(fi);
1060                 test_and_set_bit(FLG_L3_INIT, &l2->flag);
1061         }
1062 }
1063
1064 static void
1065 l2_st5_dm_release(struct FsmInst *fi, int event, void *arg)
1066 {
1067         struct layer2 *l2 = fi->userdata;
1068         struct sk_buff *skb = arg;
1069
1070         if (get_PollFlagFree(l2, skb)) {
1071                 stop_t200(l2, 7);
1072                 if (!test_bit(FLG_L3_INIT, &l2->flag))
1073                         skb_queue_purge(&l2->i_queue);
1074                 if (test_bit(FLG_LAPB, &l2->flag))
1075                         l2down_create(l2, PH_DEACTIVATE_REQ,
1076                                       l2_newid(l2), 0, NULL);
1077                 st5_dl_release_l2l3(l2);
1078                 mISDN_FsmChangeState(fi, ST_L2_4);
1079                 if (l2->tm)
1080                         l2_tei(l2, MDL_STATUS_DOWN_IND, 0);
1081         }
1082 }
1083
1084 static void
1085 l2_st6_dm_release(struct FsmInst *fi, int event, void *arg)
1086 {
1087         struct layer2 *l2 = fi->userdata;
1088         struct sk_buff *skb = arg;
1089
1090         if (get_PollFlagFree(l2, skb)) {
1091                 stop_t200(l2, 8);
1092                 lapb_dl_release_l2l3(l2, DL_RELEASE_CNF);
1093                 mISDN_FsmChangeState(fi, ST_L2_4);
1094                 if (l2->tm)
1095                         l2_tei(l2, MDL_STATUS_DOWN_IND, 0);
1096         }
1097 }
1098
1099 static void
1100 enquiry_cr(struct layer2 *l2, u_char typ, u_char cr, u_char pf)
1101 {
1102         struct sk_buff *skb;
1103         u_char tmp[MAX_L2HEADER_LEN];
1104         int i;
1105
1106         i = sethdraddr(l2, tmp, cr);
1107         if (test_bit(FLG_MOD128, &l2->flag)) {
1108                 tmp[i++] = typ;
1109                 tmp[i++] = (l2->vr << 1) | (pf ? 1 : 0);
1110         } else
1111                 tmp[i++] = (l2->vr << 5) | typ | (pf ? 0x10 : 0);
1112         skb = mI_alloc_skb(i, GFP_ATOMIC);
1113         if (!skb) {
1114                 printk(KERN_WARNING "%s: isdnl2 can't alloc sbbuff in %s\n",
1115                        mISDNDevName4ch(&l2->ch), __func__);
1116                 return;
1117         }
1118         skb_put_data(skb, tmp, i);
1119         enqueue_super(l2, skb);
1120 }
1121
1122 inline void
1123 enquiry_response(struct layer2 *l2)
1124 {
1125         if (test_bit(FLG_OWN_BUSY, &l2->flag))
1126                 enquiry_cr(l2, RNR, RSP, 1);
1127         else
1128                 enquiry_cr(l2, RR, RSP, 1);
1129         test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
1130 }
1131
1132 inline void
1133 transmit_enquiry(struct layer2 *l2)
1134 {
1135         if (test_bit(FLG_OWN_BUSY, &l2->flag))
1136                 enquiry_cr(l2, RNR, CMD, 1);
1137         else
1138                 enquiry_cr(l2, RR, CMD, 1);
1139         test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
1140         start_t200(l2, 9);
1141 }
1142
1143
1144 static void
1145 nrerrorrecovery(struct FsmInst *fi)
1146 {
1147         struct layer2 *l2 = fi->userdata;
1148
1149         l2mgr(l2, MDL_ERROR_IND, (void *) 'J');
1150         establishlink(fi);
1151         test_and_clear_bit(FLG_L3_INIT, &l2->flag);
1152 }
1153
1154 static void
1155 invoke_retransmission(struct layer2 *l2, unsigned int nr)
1156 {
1157         u_int   p1;
1158
1159         if (l2->vs != nr) {
1160                 while (l2->vs != nr) {
1161                         (l2->vs)--;
1162                         if (test_bit(FLG_MOD128, &l2->flag)) {
1163                                 l2->vs %= 128;
1164                                 p1 = (l2->vs - l2->va) % 128;
1165                         } else {
1166                                 l2->vs %= 8;
1167                                 p1 = (l2->vs - l2->va) % 8;
1168                         }
1169                         p1 = (p1 + l2->sow) % l2->window;
1170                         if (l2->windowar[p1])
1171                                 skb_queue_head(&l2->i_queue, l2->windowar[p1]);
1172                         else
1173                                 printk(KERN_WARNING
1174                                        "%s: windowar[%d] is NULL\n",
1175                                        mISDNDevName4ch(&l2->ch), p1);
1176                         l2->windowar[p1] = NULL;
1177                 }
1178                 mISDN_FsmEvent(&l2->l2m, EV_L2_ACK_PULL, NULL);
1179         }
1180 }
1181
1182 static void
1183 l2_st7_got_super(struct FsmInst *fi, int event, void *arg)
1184 {
1185         struct layer2 *l2 = fi->userdata;
1186         struct sk_buff *skb = arg;
1187         int PollFlag, rsp, typ = RR;
1188         unsigned int nr;
1189
1190         rsp = *skb->data & 0x2;
1191         if (test_bit(FLG_ORIG, &l2->flag))
1192                 rsp = !rsp;
1193
1194         skb_pull(skb, l2addrsize(l2));
1195         if (IsRNR(skb->data, l2)) {
1196                 set_peer_busy(l2);
1197                 typ = RNR;
1198         } else
1199                 clear_peer_busy(l2);
1200         if (IsREJ(skb->data, l2))
1201                 typ = REJ;
1202
1203         if (test_bit(FLG_MOD128, &l2->flag)) {
1204                 PollFlag = (skb->data[1] & 0x1) == 0x1;
1205                 nr = skb->data[1] >> 1;
1206         } else {
1207                 PollFlag = (skb->data[0] & 0x10);
1208                 nr = (skb->data[0] >> 5) & 0x7;
1209         }
1210         dev_kfree_skb(skb);
1211
1212         if (PollFlag) {
1213                 if (rsp)
1214                         l2mgr(l2, MDL_ERROR_IND, (void *) 'A');
1215                 else
1216                         enquiry_response(l2);
1217         }
1218         if (legalnr(l2, nr)) {
1219                 if (typ == REJ) {
1220                         setva(l2, nr);
1221                         invoke_retransmission(l2, nr);
1222                         stop_t200(l2, 10);
1223                         if (mISDN_FsmAddTimer(&l2->t203, l2->T203,
1224                                               EV_L2_T203, NULL, 6))
1225                                 l2m_debug(&l2->l2m, "Restart T203 ST7 REJ");
1226                 } else if ((nr == l2->vs) && (typ == RR)) {
1227                         setva(l2, nr);
1228                         stop_t200(l2, 11);
1229                         mISDN_FsmRestartTimer(&l2->t203, l2->T203,
1230                                               EV_L2_T203, NULL, 7);
1231                 } else if ((l2->va != nr) || (typ == RNR)) {
1232                         setva(l2, nr);
1233                         if (typ != RR)
1234                                 mISDN_FsmDelTimer(&l2->t203, 9);
1235                         restart_t200(l2, 12);
1236                 }
1237                 if (skb_queue_len(&l2->i_queue) && (typ == RR))
1238                         mISDN_FsmEvent(fi, EV_L2_ACK_PULL, NULL);
1239         } else
1240                 nrerrorrecovery(fi);
1241 }
1242
1243 static void
1244 l2_feed_i_if_reest(struct FsmInst *fi, int event, void *arg)
1245 {
1246         struct layer2 *l2 = fi->userdata;
1247         struct sk_buff *skb = arg;
1248
1249         if (!test_bit(FLG_L3_INIT, &l2->flag))
1250                 skb_queue_tail(&l2->i_queue, skb);
1251         else
1252                 dev_kfree_skb(skb);
1253 }
1254
1255 static void
1256 l2_feed_i_pull(struct FsmInst *fi, int event, void *arg)
1257 {
1258         struct layer2 *l2 = fi->userdata;
1259         struct sk_buff *skb = arg;
1260
1261         skb_queue_tail(&l2->i_queue, skb);
1262         mISDN_FsmEvent(fi, EV_L2_ACK_PULL, NULL);
1263 }
1264
1265 static void
1266 l2_feed_iqueue(struct FsmInst *fi, int event, void *arg)
1267 {
1268         struct layer2 *l2 = fi->userdata;
1269         struct sk_buff *skb = arg;
1270
1271         skb_queue_tail(&l2->i_queue, skb);
1272 }
1273
1274 static void
1275 l2_got_iframe(struct FsmInst *fi, int event, void *arg)
1276 {
1277         struct layer2   *l2 = fi->userdata;
1278         struct sk_buff  *skb = arg;
1279         int             PollFlag, i;
1280         u_int           ns, nr;
1281
1282         i = l2addrsize(l2);
1283         if (test_bit(FLG_MOD128, &l2->flag)) {
1284                 PollFlag = ((skb->data[i + 1] & 0x1) == 0x1);
1285                 ns = skb->data[i] >> 1;
1286                 nr = (skb->data[i + 1] >> 1) & 0x7f;
1287         } else {
1288                 PollFlag = (skb->data[i] & 0x10);
1289                 ns = (skb->data[i] >> 1) & 0x7;
1290                 nr = (skb->data[i] >> 5) & 0x7;
1291         }
1292         if (test_bit(FLG_OWN_BUSY, &l2->flag)) {
1293                 dev_kfree_skb(skb);
1294                 if (PollFlag)
1295                         enquiry_response(l2);
1296         } else {
1297                 if (l2->vr == ns) {
1298                         l2->vr++;
1299                         if (test_bit(FLG_MOD128, &l2->flag))
1300                                 l2->vr %= 128;
1301                         else
1302                                 l2->vr %= 8;
1303                         test_and_clear_bit(FLG_REJEXC, &l2->flag);
1304                         if (PollFlag)
1305                                 enquiry_response(l2);
1306                         else
1307                                 test_and_set_bit(FLG_ACK_PEND, &l2->flag);
1308                         skb_pull(skb, l2headersize(l2, 0));
1309                         l2up(l2, DL_DATA_IND, skb);
1310                 } else {
1311                         /* n(s)!=v(r) */
1312                         dev_kfree_skb(skb);
1313                         if (test_and_set_bit(FLG_REJEXC, &l2->flag)) {
1314                                 if (PollFlag)
1315                                         enquiry_response(l2);
1316                         } else {
1317                                 enquiry_cr(l2, REJ, RSP, PollFlag);
1318                                 test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
1319                         }
1320                 }
1321         }
1322         if (legalnr(l2, nr)) {
1323                 if (!test_bit(FLG_PEER_BUSY, &l2->flag) &&
1324                     (fi->state == ST_L2_7)) {
1325                         if (nr == l2->vs) {
1326                                 stop_t200(l2, 13);
1327                                 mISDN_FsmRestartTimer(&l2->t203, l2->T203,
1328                                                       EV_L2_T203, NULL, 7);
1329                         } else if (nr != l2->va)
1330                                 restart_t200(l2, 14);
1331                 }
1332                 setva(l2, nr);
1333         } else {
1334                 nrerrorrecovery(fi);
1335                 return;
1336         }
1337         if (skb_queue_len(&l2->i_queue) && (fi->state == ST_L2_7))
1338                 mISDN_FsmEvent(fi, EV_L2_ACK_PULL, NULL);
1339         if (test_and_clear_bit(FLG_ACK_PEND, &l2->flag))
1340                 enquiry_cr(l2, RR, RSP, 0);
1341 }
1342
1343 static void
1344 l2_got_tei(struct FsmInst *fi, int event, void *arg)
1345 {
1346         struct layer2   *l2 = fi->userdata;
1347         u_int           info;
1348
1349         l2->tei = (signed char)(long)arg;
1350         set_channel_address(&l2->ch, l2->sapi, l2->tei);
1351         info = DL_INFO_L2_CONNECT;
1352         l2up_create(l2, DL_INFORMATION_IND, sizeof(info), &info);
1353         if (fi->state == ST_L2_3) {
1354                 establishlink(fi);
1355                 test_and_set_bit(FLG_L3_INIT, &l2->flag);
1356         } else
1357                 mISDN_FsmChangeState(fi, ST_L2_4);
1358         if (skb_queue_len(&l2->ui_queue))
1359                 tx_ui(l2);
1360 }
1361
1362 static void
1363 l2_st5_tout_200(struct FsmInst *fi, int event, void *arg)
1364 {
1365         struct layer2 *l2 = fi->userdata;
1366
1367         if (test_bit(FLG_LAPD, &l2->flag) &&
1368             test_bit(FLG_DCHAN_BUSY, &l2->flag)) {
1369                 mISDN_FsmAddTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, 9);
1370         } else if (l2->rc == l2->N200) {
1371                 mISDN_FsmChangeState(fi, ST_L2_4);
1372                 test_and_clear_bit(FLG_T200_RUN, &l2->flag);
1373                 skb_queue_purge(&l2->i_queue);
1374                 l2mgr(l2, MDL_ERROR_IND, (void *) 'G');
1375                 if (test_bit(FLG_LAPB, &l2->flag))
1376                         l2down_create(l2, PH_DEACTIVATE_REQ,
1377                                       l2_newid(l2), 0, NULL);
1378                 st5_dl_release_l2l3(l2);
1379                 if (l2->tm)
1380                         l2_tei(l2, MDL_STATUS_DOWN_IND, 0);
1381         } else {
1382                 l2->rc++;
1383                 mISDN_FsmAddTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, 9);
1384                 send_uframe(l2, NULL, (test_bit(FLG_MOD128, &l2->flag) ?
1385                                        SABME : SABM) | 0x10, CMD);
1386         }
1387 }
1388
1389 static void
1390 l2_st6_tout_200(struct FsmInst *fi, int event, void *arg)
1391 {
1392         struct layer2 *l2 = fi->userdata;
1393
1394         if (test_bit(FLG_LAPD, &l2->flag) &&
1395             test_bit(FLG_DCHAN_BUSY, &l2->flag)) {
1396                 mISDN_FsmAddTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, 9);
1397         } else if (l2->rc == l2->N200) {
1398                 mISDN_FsmChangeState(fi, ST_L2_4);
1399                 test_and_clear_bit(FLG_T200_RUN, &l2->flag);
1400                 l2mgr(l2, MDL_ERROR_IND, (void *) 'H');
1401                 lapb_dl_release_l2l3(l2, DL_RELEASE_CNF);
1402                 if (l2->tm)
1403                         l2_tei(l2, MDL_STATUS_DOWN_IND, 0);
1404         } else {
1405                 l2->rc++;
1406                 mISDN_FsmAddTimer(&l2->t200, l2->T200, EV_L2_T200,
1407                                   NULL, 9);
1408                 send_uframe(l2, NULL, DISC | 0x10, CMD);
1409         }
1410 }
1411
1412 static void
1413 l2_st7_tout_200(struct FsmInst *fi, int event, void *arg)
1414 {
1415         struct layer2 *l2 = fi->userdata;
1416
1417         if (test_bit(FLG_LAPD, &l2->flag) &&
1418             test_bit(FLG_DCHAN_BUSY, &l2->flag)) {
1419                 mISDN_FsmAddTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, 9);
1420                 return;
1421         }
1422         test_and_clear_bit(FLG_T200_RUN, &l2->flag);
1423         l2->rc = 0;
1424         mISDN_FsmChangeState(fi, ST_L2_8);
1425         transmit_enquiry(l2);
1426         l2->rc++;
1427 }
1428
1429 static void
1430 l2_st8_tout_200(struct FsmInst *fi, int event, void *arg)
1431 {
1432         struct layer2 *l2 = fi->userdata;
1433
1434         if (test_bit(FLG_LAPD, &l2->flag) &&
1435             test_bit(FLG_DCHAN_BUSY, &l2->flag)) {
1436                 mISDN_FsmAddTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, 9);
1437                 return;
1438         }
1439         test_and_clear_bit(FLG_T200_RUN, &l2->flag);
1440         if (l2->rc == l2->N200) {
1441                 l2mgr(l2, MDL_ERROR_IND, (void *) 'I');
1442                 establishlink(fi);
1443                 test_and_clear_bit(FLG_L3_INIT, &l2->flag);
1444         } else {
1445                 transmit_enquiry(l2);
1446                 l2->rc++;
1447         }
1448 }
1449
1450 static void
1451 l2_st7_tout_203(struct FsmInst *fi, int event, void *arg)
1452 {
1453         struct layer2 *l2 = fi->userdata;
1454
1455         if (test_bit(FLG_LAPD, &l2->flag) &&
1456             test_bit(FLG_DCHAN_BUSY, &l2->flag)) {
1457                 mISDN_FsmAddTimer(&l2->t203, l2->T203, EV_L2_T203, NULL, 9);
1458                 return;
1459         }
1460         mISDN_FsmChangeState(fi, ST_L2_8);
1461         transmit_enquiry(l2);
1462         l2->rc = 0;
1463 }
1464
1465 static void
1466 l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
1467 {
1468         struct layer2   *l2 = fi->userdata;
1469         struct sk_buff  *skb, *nskb;
1470         u_char          header[MAX_L2HEADER_LEN];
1471         u_int           i, p1;
1472
1473         if (!cansend(l2))
1474                 return;
1475
1476         skb = skb_dequeue(&l2->i_queue);
1477         if (!skb)
1478                 return;
1479         i = sethdraddr(l2, header, CMD);
1480         if (test_bit(FLG_MOD128, &l2->flag)) {
1481                 header[i++] = l2->vs << 1;
1482                 header[i++] = l2->vr << 1;
1483         } else
1484                 header[i++] = (l2->vr << 5) | (l2->vs << 1);
1485         nskb = skb_realloc_headroom(skb, i);
1486         if (!nskb) {
1487                 printk(KERN_WARNING "%s: no headroom(%d) copy for IFrame\n",
1488                        mISDNDevName4ch(&l2->ch), i);
1489                 skb_queue_head(&l2->i_queue, skb);
1490                 return;
1491         }
1492         if (test_bit(FLG_MOD128, &l2->flag)) {
1493                 p1 = (l2->vs - l2->va) % 128;
1494                 l2->vs = (l2->vs + 1) % 128;
1495         } else {
1496                 p1 = (l2->vs - l2->va) % 8;
1497                 l2->vs = (l2->vs + 1) % 8;
1498         }
1499         p1 = (p1 + l2->sow) % l2->window;
1500         if (l2->windowar[p1]) {
1501                 printk(KERN_WARNING "%s: l2 try overwrite ack queue entry %d\n",
1502                        mISDNDevName4ch(&l2->ch), p1);
1503                 dev_kfree_skb(l2->windowar[p1]);
1504         }
1505         l2->windowar[p1] = skb;
1506         memcpy(skb_push(nskb, i), header, i);
1507         l2down(l2, PH_DATA_REQ, l2_newid(l2), nskb);
1508         test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
1509         if (!test_and_set_bit(FLG_T200_RUN, &l2->flag)) {
1510                 mISDN_FsmDelTimer(&l2->t203, 13);
1511                 mISDN_FsmAddTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, 11);
1512         }
1513 }
1514
1515 static void
1516 l2_st8_got_super(struct FsmInst *fi, int event, void *arg)
1517 {
1518         struct layer2 *l2 = fi->userdata;
1519         struct sk_buff *skb = arg;
1520         int PollFlag, rsp, rnr = 0;
1521         unsigned int nr;
1522
1523         rsp = *skb->data & 0x2;
1524         if (test_bit(FLG_ORIG, &l2->flag))
1525                 rsp = !rsp;
1526
1527         skb_pull(skb, l2addrsize(l2));
1528
1529         if (IsRNR(skb->data, l2)) {
1530                 set_peer_busy(l2);
1531                 rnr = 1;
1532         } else
1533                 clear_peer_busy(l2);
1534
1535         if (test_bit(FLG_MOD128, &l2->flag)) {
1536                 PollFlag = (skb->data[1] & 0x1) == 0x1;
1537                 nr = skb->data[1] >> 1;
1538         } else {
1539                 PollFlag = (skb->data[0] & 0x10);
1540                 nr = (skb->data[0] >> 5) & 0x7;
1541         }
1542         dev_kfree_skb(skb);
1543         if (rsp && PollFlag) {
1544                 if (legalnr(l2, nr)) {
1545                         if (rnr) {
1546                                 restart_t200(l2, 15);
1547                         } else {
1548                                 stop_t200(l2, 16);
1549                                 mISDN_FsmAddTimer(&l2->t203, l2->T203,
1550                                                   EV_L2_T203, NULL, 5);
1551                                 setva(l2, nr);
1552                         }
1553                         invoke_retransmission(l2, nr);
1554                         mISDN_FsmChangeState(fi, ST_L2_7);
1555                         if (skb_queue_len(&l2->i_queue) && cansend(l2))
1556                                 mISDN_FsmEvent(fi, EV_L2_ACK_PULL, NULL);
1557                 } else
1558                         nrerrorrecovery(fi);
1559         } else {
1560                 if (!rsp && PollFlag)
1561                         enquiry_response(l2);
1562                 if (legalnr(l2, nr))
1563                         setva(l2, nr);
1564                 else
1565                         nrerrorrecovery(fi);
1566         }
1567 }
1568
1569 static void
1570 l2_got_FRMR(struct FsmInst *fi, int event, void *arg)
1571 {
1572         struct layer2 *l2 = fi->userdata;
1573         struct sk_buff *skb = arg;
1574
1575         skb_pull(skb, l2addrsize(l2) + 1);
1576
1577         if (!(skb->data[0] & 1) || ((skb->data[0] & 3) == 1) || /* I or S */
1578             (IsUA(skb->data) && (fi->state == ST_L2_7))) {
1579                 l2mgr(l2, MDL_ERROR_IND, (void *) 'K');
1580                 establishlink(fi);
1581                 test_and_clear_bit(FLG_L3_INIT, &l2->flag);
1582         }
1583         dev_kfree_skb(skb);
1584 }
1585
1586 static void
1587 l2_st24_tei_remove(struct FsmInst *fi, int event, void *arg)
1588 {
1589         struct layer2 *l2 = fi->userdata;
1590
1591         skb_queue_purge(&l2->ui_queue);
1592         l2->tei = GROUP_TEI;
1593         mISDN_FsmChangeState(fi, ST_L2_1);
1594 }
1595
1596 static void
1597 l2_st3_tei_remove(struct FsmInst *fi, int event, void *arg)
1598 {
1599         struct layer2 *l2 = fi->userdata;
1600
1601         skb_queue_purge(&l2->ui_queue);
1602         l2->tei = GROUP_TEI;
1603         l2up_create(l2, DL_RELEASE_IND, 0, NULL);
1604         mISDN_FsmChangeState(fi, ST_L2_1);
1605 }
1606
1607 static void
1608 l2_st5_tei_remove(struct FsmInst *fi, int event, void *arg)
1609 {
1610         struct layer2 *l2 = fi->userdata;
1611
1612         skb_queue_purge(&l2->i_queue);
1613         skb_queue_purge(&l2->ui_queue);
1614         freewin(l2);
1615         l2->tei = GROUP_TEI;
1616         stop_t200(l2, 17);
1617         st5_dl_release_l2l3(l2);
1618         mISDN_FsmChangeState(fi, ST_L2_1);
1619 }
1620
1621 static void
1622 l2_st6_tei_remove(struct FsmInst *fi, int event, void *arg)
1623 {
1624         struct layer2 *l2 = fi->userdata;
1625
1626         skb_queue_purge(&l2->ui_queue);
1627         l2->tei = GROUP_TEI;
1628         stop_t200(l2, 18);
1629         l2up_create(l2, DL_RELEASE_IND, 0, NULL);
1630         mISDN_FsmChangeState(fi, ST_L2_1);
1631 }
1632
1633 static void
1634 l2_tei_remove(struct FsmInst *fi, int event, void *arg)
1635 {
1636         struct layer2 *l2 = fi->userdata;
1637
1638         skb_queue_purge(&l2->i_queue);
1639         skb_queue_purge(&l2->ui_queue);
1640         freewin(l2);
1641         l2->tei = GROUP_TEI;
1642         stop_t200(l2, 17);
1643         mISDN_FsmDelTimer(&l2->t203, 19);
1644         l2up_create(l2, DL_RELEASE_IND, 0, NULL);
1645 /*      mISDN_queue_data(&l2->inst, l2->inst.id | MSG_BROADCAST,
1646  *              MGR_SHORTSTATUS_IND, SSTATUS_L2_RELEASED,
1647  *              0, NULL, 0);
1648  */
1649         mISDN_FsmChangeState(fi, ST_L2_1);
1650 }
1651
1652 static void
1653 l2_st14_persistent_da(struct FsmInst *fi, int event, void *arg)
1654 {
1655         struct layer2 *l2 = fi->userdata;
1656         struct sk_buff *skb = arg;
1657
1658         skb_queue_purge(&l2->i_queue);
1659         skb_queue_purge(&l2->ui_queue);
1660         if (test_and_clear_bit(FLG_ESTAB_PEND, &l2->flag))
1661                 l2up(l2, DL_RELEASE_IND, skb);
1662         else
1663                 dev_kfree_skb(skb);
1664 }
1665
1666 static void
1667 l2_st5_persistent_da(struct FsmInst *fi, int event, void *arg)
1668 {
1669         struct layer2 *l2 = fi->userdata;
1670         struct sk_buff *skb = arg;
1671
1672         skb_queue_purge(&l2->i_queue);
1673         skb_queue_purge(&l2->ui_queue);
1674         freewin(l2);
1675         stop_t200(l2, 19);
1676         st5_dl_release_l2l3(l2);
1677         mISDN_FsmChangeState(fi, ST_L2_4);
1678         if (l2->tm)
1679                 l2_tei(l2, MDL_STATUS_DOWN_IND, 0);
1680         dev_kfree_skb(skb);
1681 }
1682
1683 static void
1684 l2_st6_persistent_da(struct FsmInst *fi, int event, void *arg)
1685 {
1686         struct layer2 *l2 = fi->userdata;
1687         struct sk_buff *skb = arg;
1688
1689         skb_queue_purge(&l2->ui_queue);
1690         stop_t200(l2, 20);
1691         l2up(l2, DL_RELEASE_CNF, skb);
1692         mISDN_FsmChangeState(fi, ST_L2_4);
1693         if (l2->tm)
1694                 l2_tei(l2, MDL_STATUS_DOWN_IND, 0);
1695 }
1696
1697 static void
1698 l2_persistent_da(struct FsmInst *fi, int event, void *arg)
1699 {
1700         struct layer2 *l2 = fi->userdata;
1701         struct sk_buff *skb = arg;
1702
1703         skb_queue_purge(&l2->i_queue);
1704         skb_queue_purge(&l2->ui_queue);
1705         freewin(l2);
1706         stop_t200(l2, 19);
1707         mISDN_FsmDelTimer(&l2->t203, 19);
1708         l2up(l2, DL_RELEASE_IND, skb);
1709         mISDN_FsmChangeState(fi, ST_L2_4);
1710         if (l2->tm)
1711                 l2_tei(l2, MDL_STATUS_DOWN_IND, 0);
1712 }
1713
1714 static void
1715 l2_set_own_busy(struct FsmInst *fi, int event, void *arg)
1716 {
1717         struct layer2 *l2 = fi->userdata;
1718         struct sk_buff *skb = arg;
1719
1720         if (!test_and_set_bit(FLG_OWN_BUSY, &l2->flag)) {
1721                 enquiry_cr(l2, RNR, RSP, 0);
1722                 test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
1723         }
1724         dev_kfree_skb(skb);
1725 }
1726
1727 static void
1728 l2_clear_own_busy(struct FsmInst *fi, int event, void *arg)
1729 {
1730         struct layer2 *l2 = fi->userdata;
1731         struct sk_buff *skb = arg;
1732
1733         if (!test_and_clear_bit(FLG_OWN_BUSY, &l2->flag)) {
1734                 enquiry_cr(l2, RR, RSP, 0);
1735                 test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
1736         }
1737         dev_kfree_skb(skb);
1738 }
1739
1740 static void
1741 l2_frame_error(struct FsmInst *fi, int event, void *arg)
1742 {
1743         struct layer2 *l2 = fi->userdata;
1744
1745         l2mgr(l2, MDL_ERROR_IND, arg);
1746 }
1747
1748 static void
1749 l2_frame_error_reest(struct FsmInst *fi, int event, void *arg)
1750 {
1751         struct layer2 *l2 = fi->userdata;
1752
1753         l2mgr(l2, MDL_ERROR_IND, arg);
1754         establishlink(fi);
1755         test_and_clear_bit(FLG_L3_INIT, &l2->flag);
1756 }
1757
1758 static struct FsmNode L2FnList[] =
1759 {
1760         {ST_L2_1, EV_L2_DL_ESTABLISH_REQ, l2_mdl_assign},
1761         {ST_L2_2, EV_L2_DL_ESTABLISH_REQ, l2_go_st3},
1762         {ST_L2_4, EV_L2_DL_ESTABLISH_REQ, l2_establish},
1763         {ST_L2_5, EV_L2_DL_ESTABLISH_REQ, l2_discard_i_setl3},
1764         {ST_L2_7, EV_L2_DL_ESTABLISH_REQ, l2_l3_reestablish},
1765         {ST_L2_8, EV_L2_DL_ESTABLISH_REQ, l2_l3_reestablish},
1766         {ST_L2_4, EV_L2_DL_RELEASE_REQ, l2_release},
1767         {ST_L2_5, EV_L2_DL_RELEASE_REQ, l2_pend_rel},
1768         {ST_L2_7, EV_L2_DL_RELEASE_REQ, l2_disconnect},
1769         {ST_L2_8, EV_L2_DL_RELEASE_REQ, l2_disconnect},
1770         {ST_L2_5, EV_L2_DL_DATA, l2_feed_i_if_reest},
1771         {ST_L2_7, EV_L2_DL_DATA, l2_feed_i_pull},
1772         {ST_L2_8, EV_L2_DL_DATA, l2_feed_iqueue},
1773         {ST_L2_1, EV_L2_DL_UNITDATA, l2_queue_ui_assign},
1774         {ST_L2_2, EV_L2_DL_UNITDATA, l2_queue_ui},
1775         {ST_L2_3, EV_L2_DL_UNITDATA, l2_queue_ui},
1776         {ST_L2_4, EV_L2_DL_UNITDATA, l2_send_ui},
1777         {ST_L2_5, EV_L2_DL_UNITDATA, l2_send_ui},
1778         {ST_L2_6, EV_L2_DL_UNITDATA, l2_send_ui},
1779         {ST_L2_7, EV_L2_DL_UNITDATA, l2_send_ui},
1780         {ST_L2_8, EV_L2_DL_UNITDATA, l2_send_ui},
1781         {ST_L2_1, EV_L2_MDL_ASSIGN, l2_got_tei},
1782         {ST_L2_2, EV_L2_MDL_ASSIGN, l2_got_tei},
1783         {ST_L2_3, EV_L2_MDL_ASSIGN, l2_got_tei},
1784         {ST_L2_2, EV_L2_MDL_ERROR, l2_st24_tei_remove},
1785         {ST_L2_3, EV_L2_MDL_ERROR, l2_st3_tei_remove},
1786         {ST_L2_4, EV_L2_MDL_REMOVE, l2_st24_tei_remove},
1787         {ST_L2_5, EV_L2_MDL_REMOVE, l2_st5_tei_remove},
1788         {ST_L2_6, EV_L2_MDL_REMOVE, l2_st6_tei_remove},
1789         {ST_L2_7, EV_L2_MDL_REMOVE, l2_tei_remove},
1790         {ST_L2_8, EV_L2_MDL_REMOVE, l2_tei_remove},
1791         {ST_L2_4, EV_L2_SABME, l2_start_multi},
1792         {ST_L2_5, EV_L2_SABME, l2_send_UA},
1793         {ST_L2_6, EV_L2_SABME, l2_send_DM},
1794         {ST_L2_7, EV_L2_SABME, l2_restart_multi},
1795         {ST_L2_8, EV_L2_SABME, l2_restart_multi},
1796         {ST_L2_4, EV_L2_DISC, l2_send_DM},
1797         {ST_L2_5, EV_L2_DISC, l2_send_DM},
1798         {ST_L2_6, EV_L2_DISC, l2_send_UA},
1799         {ST_L2_7, EV_L2_DISC, l2_stop_multi},
1800         {ST_L2_8, EV_L2_DISC, l2_stop_multi},
1801         {ST_L2_4, EV_L2_UA, l2_mdl_error_ua},
1802         {ST_L2_5, EV_L2_UA, l2_connected},
1803         {ST_L2_6, EV_L2_UA, l2_released},
1804         {ST_L2_7, EV_L2_UA, l2_mdl_error_ua},
1805         {ST_L2_8, EV_L2_UA, l2_mdl_error_ua},
1806         {ST_L2_4, EV_L2_DM, l2_reestablish},
1807         {ST_L2_5, EV_L2_DM, l2_st5_dm_release},
1808         {ST_L2_6, EV_L2_DM, l2_st6_dm_release},
1809         {ST_L2_7, EV_L2_DM, l2_mdl_error_dm},
1810         {ST_L2_8, EV_L2_DM, l2_st8_mdl_error_dm},
1811         {ST_L2_1, EV_L2_UI, l2_got_ui},
1812         {ST_L2_2, EV_L2_UI, l2_got_ui},
1813         {ST_L2_3, EV_L2_UI, l2_got_ui},
1814         {ST_L2_4, EV_L2_UI, l2_got_ui},
1815         {ST_L2_5, EV_L2_UI, l2_got_ui},
1816         {ST_L2_6, EV_L2_UI, l2_got_ui},
1817         {ST_L2_7, EV_L2_UI, l2_got_ui},
1818         {ST_L2_8, EV_L2_UI, l2_got_ui},
1819         {ST_L2_7, EV_L2_FRMR, l2_got_FRMR},
1820         {ST_L2_8, EV_L2_FRMR, l2_got_FRMR},
1821         {ST_L2_7, EV_L2_SUPER, l2_st7_got_super},
1822         {ST_L2_8, EV_L2_SUPER, l2_st8_got_super},
1823         {ST_L2_7, EV_L2_I, l2_got_iframe},
1824         {ST_L2_8, EV_L2_I, l2_got_iframe},
1825         {ST_L2_5, EV_L2_T200, l2_timeout},
1826         {ST_L2_6, EV_L2_T200, l2_timeout},
1827         {ST_L2_7, EV_L2_T200, l2_timeout},
1828         {ST_L2_8, EV_L2_T200, l2_timeout},
1829         {ST_L2_7, EV_L2_T203, l2_timeout},
1830         {ST_L2_5, EV_L2_T200I, l2_st5_tout_200},
1831         {ST_L2_6, EV_L2_T200I, l2_st6_tout_200},
1832         {ST_L2_7, EV_L2_T200I, l2_st7_tout_200},
1833         {ST_L2_8, EV_L2_T200I, l2_st8_tout_200},
1834         {ST_L2_7, EV_L2_T203I, l2_st7_tout_203},
1835         {ST_L2_7, EV_L2_ACK_PULL, l2_pull_iqueue},
1836         {ST_L2_7, EV_L2_SET_OWN_BUSY, l2_set_own_busy},
1837         {ST_L2_8, EV_L2_SET_OWN_BUSY, l2_set_own_busy},
1838         {ST_L2_7, EV_L2_CLEAR_OWN_BUSY, l2_clear_own_busy},
1839         {ST_L2_8, EV_L2_CLEAR_OWN_BUSY, l2_clear_own_busy},
1840         {ST_L2_4, EV_L2_FRAME_ERROR, l2_frame_error},
1841         {ST_L2_5, EV_L2_FRAME_ERROR, l2_frame_error},
1842         {ST_L2_6, EV_L2_FRAME_ERROR, l2_frame_error},
1843         {ST_L2_7, EV_L2_FRAME_ERROR, l2_frame_error_reest},
1844         {ST_L2_8, EV_L2_FRAME_ERROR, l2_frame_error_reest},
1845         {ST_L2_1, EV_L1_DEACTIVATE, l2_st14_persistent_da},
1846         {ST_L2_2, EV_L1_DEACTIVATE, l2_st24_tei_remove},
1847         {ST_L2_3, EV_L1_DEACTIVATE, l2_st3_tei_remove},
1848         {ST_L2_4, EV_L1_DEACTIVATE, l2_st14_persistent_da},
1849         {ST_L2_5, EV_L1_DEACTIVATE, l2_st5_persistent_da},
1850         {ST_L2_6, EV_L1_DEACTIVATE, l2_st6_persistent_da},
1851         {ST_L2_7, EV_L1_DEACTIVATE, l2_persistent_da},
1852         {ST_L2_8, EV_L1_DEACTIVATE, l2_persistent_da},
1853 };
1854
1855 static int
1856 ph_data_indication(struct layer2 *l2, struct mISDNhead *hh, struct sk_buff *skb)
1857 {
1858         u_char  *datap = skb->data;
1859         int     ret = -EINVAL;
1860         int     psapi, ptei;
1861         u_int   l;
1862         int     c = 0;
1863
1864         l = l2addrsize(l2);
1865         if (skb->len <= l) {
1866                 mISDN_FsmEvent(&l2->l2m, EV_L2_FRAME_ERROR, (void *) 'N');
1867                 return ret;
1868         }
1869         if (test_bit(FLG_LAPD, &l2->flag)) { /* Maybe not needed */
1870                 psapi = *datap++;
1871                 ptei = *datap++;
1872                 if ((psapi & 1) || !(ptei & 1)) {
1873                         printk(KERN_WARNING
1874                                "%s l2 D-channel frame wrong EA0/EA1\n",
1875                                mISDNDevName4ch(&l2->ch));
1876                         return ret;
1877                 }
1878                 psapi >>= 2;
1879                 ptei >>= 1;
1880                 if (psapi != l2->sapi) {
1881                         /* not our business */
1882                         if (*debug & DEBUG_L2)
1883                                 printk(KERN_DEBUG "%s: sapi %d/%d mismatch\n",
1884                                        mISDNDevName4ch(&l2->ch), psapi,
1885                                        l2->sapi);
1886                         dev_kfree_skb(skb);
1887                         return 0;
1888                 }
1889                 if ((ptei != l2->tei) && (ptei != GROUP_TEI)) {
1890                         /* not our business */
1891                         if (*debug & DEBUG_L2)
1892                                 printk(KERN_DEBUG "%s: tei %d/%d mismatch\n",
1893                                        mISDNDevName4ch(&l2->ch), ptei, l2->tei);
1894                         dev_kfree_skb(skb);
1895                         return 0;
1896                 }
1897         } else
1898                 datap += l;
1899         if (!(*datap & 1)) {    /* I-Frame */
1900                 c = iframe_error(l2, skb);
1901                 if (!c)
1902                         ret = mISDN_FsmEvent(&l2->l2m, EV_L2_I, skb);
1903         } else if (IsSFrame(datap, l2)) {       /* S-Frame */
1904                 c = super_error(l2, skb);
1905                 if (!c)
1906                         ret = mISDN_FsmEvent(&l2->l2m, EV_L2_SUPER, skb);
1907         } else if (IsUI(datap)) {
1908                 c = UI_error(l2, skb);
1909                 if (!c)
1910                         ret = mISDN_FsmEvent(&l2->l2m, EV_L2_UI, skb);
1911         } else if (IsSABME(datap, l2)) {
1912                 c = unnum_error(l2, skb, CMD);
1913                 if (!c)
1914                         ret = mISDN_FsmEvent(&l2->l2m, EV_L2_SABME, skb);
1915         } else if (IsUA(datap)) {
1916                 c = unnum_error(l2, skb, RSP);
1917                 if (!c)
1918                         ret = mISDN_FsmEvent(&l2->l2m, EV_L2_UA, skb);
1919         } else if (IsDISC(datap)) {
1920                 c = unnum_error(l2, skb, CMD);
1921                 if (!c)
1922                         ret = mISDN_FsmEvent(&l2->l2m, EV_L2_DISC, skb);
1923         } else if (IsDM(datap)) {
1924                 c = unnum_error(l2, skb, RSP);
1925                 if (!c)
1926                         ret = mISDN_FsmEvent(&l2->l2m, EV_L2_DM, skb);
1927         } else if (IsFRMR(datap)) {
1928                 c = FRMR_error(l2, skb);
1929                 if (!c)
1930                         ret = mISDN_FsmEvent(&l2->l2m, EV_L2_FRMR, skb);
1931         } else
1932                 c = 'L';
1933         if (c) {
1934                 printk(KERN_WARNING "%s:l2 D-channel frame error %c\n",
1935                        mISDNDevName4ch(&l2->ch), c);
1936                 mISDN_FsmEvent(&l2->l2m, EV_L2_FRAME_ERROR, (void *)(long)c);
1937         }
1938         return ret;
1939 }
1940
1941 static int
1942 l2_send(struct mISDNchannel *ch, struct sk_buff *skb)
1943 {
1944         struct layer2           *l2 = container_of(ch, struct layer2, ch);
1945         struct mISDNhead        *hh =  mISDN_HEAD_P(skb);
1946         int                     ret = -EINVAL;
1947
1948         if (*debug & DEBUG_L2_RECV)
1949                 printk(KERN_DEBUG "%s: %s prim(%x) id(%x) sapi(%d) tei(%d)\n",
1950                        __func__, mISDNDevName4ch(&l2->ch), hh->prim, hh->id,
1951                        l2->sapi, l2->tei);
1952         if (hh->prim == DL_INTERN_MSG) {
1953                 struct mISDNhead *chh = hh + 1; /* saved copy */
1954
1955                 *hh = *chh;
1956                 if (*debug & DEBUG_L2_RECV)
1957                         printk(KERN_DEBUG "%s: prim(%x) id(%x) internal msg\n",
1958                                 mISDNDevName4ch(&l2->ch), hh->prim, hh->id);
1959         }
1960         switch (hh->prim) {
1961         case PH_DATA_IND:
1962                 ret = ph_data_indication(l2, hh, skb);
1963                 break;
1964         case PH_DATA_CNF:
1965                 ret = ph_data_confirm(l2, hh, skb);
1966                 break;
1967         case PH_ACTIVATE_IND:
1968                 test_and_set_bit(FLG_L1_ACTIV, &l2->flag);
1969                 l2up_create(l2, MPH_ACTIVATE_IND, 0, NULL);
1970                 if (test_and_clear_bit(FLG_ESTAB_PEND, &l2->flag))
1971                         ret = mISDN_FsmEvent(&l2->l2m,
1972                                              EV_L2_DL_ESTABLISH_REQ, skb);
1973                 break;
1974         case PH_DEACTIVATE_IND:
1975                 test_and_clear_bit(FLG_L1_ACTIV, &l2->flag);
1976                 l2up_create(l2, MPH_DEACTIVATE_IND, 0, NULL);
1977                 ret = mISDN_FsmEvent(&l2->l2m, EV_L1_DEACTIVATE, skb);
1978                 break;
1979         case MPH_INFORMATION_IND:
1980                 if (!l2->up)
1981                         break;
1982                 ret = l2->up->send(l2->up, skb);
1983                 break;
1984         case DL_DATA_REQ:
1985                 ret = mISDN_FsmEvent(&l2->l2m, EV_L2_DL_DATA, skb);
1986                 break;
1987         case DL_UNITDATA_REQ:
1988                 ret = mISDN_FsmEvent(&l2->l2m, EV_L2_DL_UNITDATA, skb);
1989                 break;
1990         case DL_ESTABLISH_REQ:
1991                 if (test_bit(FLG_LAPB, &l2->flag))
1992                         test_and_set_bit(FLG_ORIG, &l2->flag);
1993                 if (test_bit(FLG_L1_ACTIV, &l2->flag)) {
1994                         if (test_bit(FLG_LAPD, &l2->flag) ||
1995                             test_bit(FLG_ORIG, &l2->flag))
1996                                 ret = mISDN_FsmEvent(&l2->l2m,
1997                                                      EV_L2_DL_ESTABLISH_REQ, skb);
1998                 } else {
1999                         if (test_bit(FLG_LAPD, &l2->flag) ||
2000                             test_bit(FLG_ORIG, &l2->flag)) {
2001                                 test_and_set_bit(FLG_ESTAB_PEND,
2002                                                  &l2->flag);
2003                         }
2004                         ret = l2down(l2, PH_ACTIVATE_REQ, l2_newid(l2),
2005                                      skb);
2006                 }
2007                 break;
2008         case DL_RELEASE_REQ:
2009                 if (test_bit(FLG_LAPB, &l2->flag))
2010                         l2down_create(l2, PH_DEACTIVATE_REQ,
2011                                       l2_newid(l2), 0, NULL);
2012                 ret = mISDN_FsmEvent(&l2->l2m, EV_L2_DL_RELEASE_REQ,
2013                                      skb);
2014                 break;
2015         case DL_TIMER200_IND:
2016                 mISDN_FsmEvent(&l2->l2m, EV_L2_T200I, NULL);
2017                 break;
2018         case DL_TIMER203_IND:
2019                 mISDN_FsmEvent(&l2->l2m, EV_L2_T203I, NULL);
2020                 break;
2021         default:
2022                 if (*debug & DEBUG_L2)
2023                         l2m_debug(&l2->l2m, "l2 unknown pr %04x",
2024                                   hh->prim);
2025         }
2026         if (ret) {
2027                 dev_kfree_skb(skb);
2028                 ret = 0;
2029         }
2030         return ret;
2031 }
2032
2033 int
2034 tei_l2(struct layer2 *l2, u_int cmd, u_long arg)
2035 {
2036         int             ret = -EINVAL;
2037
2038         if (*debug & DEBUG_L2_TEI)
2039                 printk(KERN_DEBUG "%s: cmd(%x) in %s\n",
2040                        mISDNDevName4ch(&l2->ch), cmd, __func__);
2041         switch (cmd) {
2042         case (MDL_ASSIGN_REQ):
2043                 ret = mISDN_FsmEvent(&l2->l2m, EV_L2_MDL_ASSIGN, (void *)arg);
2044                 break;
2045         case (MDL_REMOVE_REQ):
2046                 ret = mISDN_FsmEvent(&l2->l2m, EV_L2_MDL_REMOVE, NULL);
2047                 break;
2048         case (MDL_ERROR_IND):
2049                 ret = mISDN_FsmEvent(&l2->l2m, EV_L2_MDL_ERROR, NULL);
2050                 break;
2051         case (MDL_ERROR_RSP):
2052                 /* ETS 300-125 5.3.2.1 Test: TC13010 */
2053                 printk(KERN_NOTICE "%s: MDL_ERROR|REQ (tei_l2)\n",
2054                        mISDNDevName4ch(&l2->ch));
2055                 ret = mISDN_FsmEvent(&l2->l2m, EV_L2_MDL_ERROR, NULL);
2056                 break;
2057         }
2058         return ret;
2059 }
2060
2061 static void
2062 release_l2(struct layer2 *l2)
2063 {
2064         mISDN_FsmDelTimer(&l2->t200, 21);
2065         mISDN_FsmDelTimer(&l2->t203, 16);
2066         skb_queue_purge(&l2->i_queue);
2067         skb_queue_purge(&l2->ui_queue);
2068         skb_queue_purge(&l2->down_queue);
2069         ReleaseWin(l2);
2070         if (test_bit(FLG_LAPD, &l2->flag)) {
2071                 TEIrelease(l2);
2072                 if (l2->ch.st)
2073                         l2->ch.st->dev->D.ctrl(&l2->ch.st->dev->D,
2074                                                CLOSE_CHANNEL, NULL);
2075         }
2076         kfree(l2);
2077 }
2078
2079 static int
2080 l2_ctrl(struct mISDNchannel *ch, u_int cmd, void *arg)
2081 {
2082         struct layer2           *l2 = container_of(ch, struct layer2, ch);
2083         u_int                   info;
2084
2085         if (*debug & DEBUG_L2_CTRL)
2086                 printk(KERN_DEBUG "%s: %s cmd(%x)\n",
2087                        mISDNDevName4ch(ch), __func__, cmd);
2088
2089         switch (cmd) {
2090         case OPEN_CHANNEL:
2091                 if (test_bit(FLG_LAPD, &l2->flag)) {
2092                         set_channel_address(&l2->ch, l2->sapi, l2->tei);
2093                         info = DL_INFO_L2_CONNECT;
2094                         l2up_create(l2, DL_INFORMATION_IND,
2095                                     sizeof(info), &info);
2096                 }
2097                 break;
2098         case CLOSE_CHANNEL:
2099                 if (l2->ch.peer)
2100                         l2->ch.peer->ctrl(l2->ch.peer, CLOSE_CHANNEL, NULL);
2101                 release_l2(l2);
2102                 break;
2103         }
2104         return 0;
2105 }
2106
2107 struct layer2 *
2108 create_l2(struct mISDNchannel *ch, u_int protocol, u_long options, int tei,
2109           int sapi)
2110 {
2111         struct layer2           *l2;
2112         struct channel_req      rq;
2113
2114         l2 = kzalloc(sizeof(struct layer2), GFP_KERNEL);
2115         if (!l2) {
2116                 printk(KERN_ERR "kzalloc layer2 failed\n");
2117                 return NULL;
2118         }
2119         l2->next_id = 1;
2120         l2->down_id = MISDN_ID_NONE;
2121         l2->up = ch;
2122         l2->ch.st = ch->st;
2123         l2->ch.send = l2_send;
2124         l2->ch.ctrl = l2_ctrl;
2125         switch (protocol) {
2126         case ISDN_P_LAPD_NT:
2127                 test_and_set_bit(FLG_LAPD, &l2->flag);
2128                 test_and_set_bit(FLG_LAPD_NET, &l2->flag);
2129                 test_and_set_bit(FLG_MOD128, &l2->flag);
2130                 l2->sapi = sapi;
2131                 l2->maxlen = MAX_DFRAME_LEN;
2132                 if (test_bit(OPTION_L2_PMX, &options))
2133                         l2->window = 7;
2134                 else
2135                         l2->window = 1;
2136                 if (test_bit(OPTION_L2_PTP, &options))
2137                         test_and_set_bit(FLG_PTP, &l2->flag);
2138                 if (test_bit(OPTION_L2_FIXEDTEI, &options))
2139                         test_and_set_bit(FLG_FIXED_TEI, &l2->flag);
2140                 l2->tei = tei;
2141                 l2->T200 = 1000;
2142                 l2->N200 = 3;
2143                 l2->T203 = 10000;
2144                 if (test_bit(OPTION_L2_PMX, &options))
2145                         rq.protocol = ISDN_P_NT_E1;
2146                 else
2147                         rq.protocol = ISDN_P_NT_S0;
2148                 rq.adr.channel = 0;
2149                 l2->ch.st->dev->D.ctrl(&l2->ch.st->dev->D, OPEN_CHANNEL, &rq);
2150                 break;
2151         case ISDN_P_LAPD_TE:
2152                 test_and_set_bit(FLG_LAPD, &l2->flag);
2153                 test_and_set_bit(FLG_MOD128, &l2->flag);
2154                 test_and_set_bit(FLG_ORIG, &l2->flag);
2155                 l2->sapi = sapi;
2156                 l2->maxlen = MAX_DFRAME_LEN;
2157                 if (test_bit(OPTION_L2_PMX, &options))
2158                         l2->window = 7;
2159                 else
2160                         l2->window = 1;
2161                 if (test_bit(OPTION_L2_PTP, &options))
2162                         test_and_set_bit(FLG_PTP, &l2->flag);
2163                 if (test_bit(OPTION_L2_FIXEDTEI, &options))
2164                         test_and_set_bit(FLG_FIXED_TEI, &l2->flag);
2165                 l2->tei = tei;
2166                 l2->T200 = 1000;
2167                 l2->N200 = 3;
2168                 l2->T203 = 10000;
2169                 if (test_bit(OPTION_L2_PMX, &options))
2170                         rq.protocol = ISDN_P_TE_E1;
2171                 else
2172                         rq.protocol = ISDN_P_TE_S0;
2173                 rq.adr.channel = 0;
2174                 l2->ch.st->dev->D.ctrl(&l2->ch.st->dev->D, OPEN_CHANNEL, &rq);
2175                 break;
2176         case ISDN_P_B_X75SLP:
2177                 test_and_set_bit(FLG_LAPB, &l2->flag);
2178                 l2->window = 7;
2179                 l2->maxlen = MAX_DATA_SIZE;
2180                 l2->T200 = 1000;
2181                 l2->N200 = 4;
2182                 l2->T203 = 5000;
2183                 l2->addr.A = 3;
2184                 l2->addr.B = 1;
2185                 break;
2186         default:
2187                 printk(KERN_ERR "layer2 create failed prt %x\n",
2188                        protocol);
2189                 kfree(l2);
2190                 return NULL;
2191         }
2192         skb_queue_head_init(&l2->i_queue);
2193         skb_queue_head_init(&l2->ui_queue);
2194         skb_queue_head_init(&l2->down_queue);
2195         skb_queue_head_init(&l2->tmp_queue);
2196         InitWin(l2);
2197         l2->l2m.fsm = &l2fsm;
2198         if (test_bit(FLG_LAPB, &l2->flag) ||
2199             test_bit(FLG_FIXED_TEI, &l2->flag) ||
2200             test_bit(FLG_LAPD_NET, &l2->flag))
2201                 l2->l2m.state = ST_L2_4;
2202         else
2203                 l2->l2m.state = ST_L2_1;
2204         l2->l2m.debug = *debug;
2205         l2->l2m.userdata = l2;
2206         l2->l2m.userint = 0;
2207         l2->l2m.printdebug = l2m_debug;
2208
2209         mISDN_FsmInitTimer(&l2->l2m, &l2->t200);
2210         mISDN_FsmInitTimer(&l2->l2m, &l2->t203);
2211         return l2;
2212 }
2213
2214 static int
2215 x75create(struct channel_req *crq)
2216 {
2217         struct layer2   *l2;
2218
2219         if (crq->protocol != ISDN_P_B_X75SLP)
2220                 return -EPROTONOSUPPORT;
2221         l2 = create_l2(crq->ch, crq->protocol, 0, 0, 0);
2222         if (!l2)
2223                 return -ENOMEM;
2224         crq->ch = &l2->ch;
2225         crq->protocol = ISDN_P_B_HDLC;
2226         return 0;
2227 }
2228
2229 static struct Bprotocol X75SLP = {
2230         .Bprotocols = (1 << (ISDN_P_B_X75SLP & ISDN_P_B_MASK)),
2231         .name = "X75SLP",
2232         .create = x75create
2233 };
2234
2235 int
2236 Isdnl2_Init(u_int *deb)
2237 {
2238         int res;
2239         debug = deb;
2240         mISDN_register_Bprotocol(&X75SLP);
2241         l2fsm.state_count = L2_STATE_COUNT;
2242         l2fsm.event_count = L2_EVENT_COUNT;
2243         l2fsm.strEvent = strL2Event;
2244         l2fsm.strState = strL2State;
2245         res = mISDN_FsmNew(&l2fsm, L2FnList, ARRAY_SIZE(L2FnList));
2246         if (res)
2247                 goto error;
2248         res = TEIInit(deb);
2249         if (res)
2250                 goto error_fsm;
2251         return 0;
2252
2253 error_fsm:
2254         mISDN_FsmFree(&l2fsm);
2255 error:
2256         mISDN_unregister_Bprotocol(&X75SLP);
2257         return res;
2258 }
2259
2260 void
2261 Isdnl2_cleanup(void)
2262 {
2263         mISDN_unregister_Bprotocol(&X75SLP);
2264         TEIFree();
2265         mISDN_FsmFree(&l2fsm);
2266 }