Lines Matching refs:st
148 freewin(struct PStack *st) in freewin() argument
150 freewin1(&st->l2); in freewin()
163 cansend(struct PStack *st) in cansend() argument
167 if (test_bit(FLG_MOD128, &st->l2.flag)) in cansend()
168 p1 = (st->l2.vs - st->l2.va) % 128; in cansend()
170 p1 = (st->l2.vs - st->l2.va) % 8; in cansend()
171 return ((p1 < st->l2.window) && !test_bit(FLG_PEER_BUSY, &st->l2.flag)); in cansend()
218 enqueue_super(struct PStack *st, in enqueue_super() argument
221 if (test_bit(FLG_LAPB, &st->l2.flag)) in enqueue_super()
222 st->l1.bcs->tx_cnt += skb->len; in enqueue_super()
223 st->l2.l2l1(st, PH_DATA | REQUEST, skb); in enqueue_super()
253 IsSFrame(u_char *data, struct PStack *st) in IsSFrame() argument
257 if (!test_bit(FLG_MOD128, &st->l2.flag)) in IsSFrame()
263 IsSABME(u_char *data, struct PStack *st) in IsSABME() argument
267 return (test_bit(FLG_MOD128, &st->l2.flag) ? d == SABME : d == SABM); in IsSABME()
271 IsREJ(u_char *data, struct PStack *st) in IsREJ() argument
273 return (test_bit(FLG_MOD128, &st->l2.flag) ? data[0] == REJ : (data[0] & 0xf) == REJ); in IsREJ()
283 IsRNR(u_char *data, struct PStack *st) in IsRNR() argument
285 return (test_bit(FLG_MOD128, &st->l2.flag) ? data[0] == RNR : (data[0] & 0xf) == RNR); in IsRNR()
289 iframe_error(struct PStack *st, struct sk_buff *skb) in iframe_error() argument
291 int i = l2addrsize(&st->l2) + (test_bit(FLG_MOD128, &st->l2.flag) ? 2 : 1); in iframe_error()
294 if (test_bit(FLG_ORIG, &st->l2.flag)) in iframe_error()
304 if ((skb->len - i) > st->l2.maxlen) in iframe_error()
312 super_error(struct PStack *st, struct sk_buff *skb) in super_error() argument
314 if (skb->len != l2addrsize(&st->l2) + in super_error()
315 (test_bit(FLG_MOD128, &st->l2.flag) ? 2 : 1)) in super_error()
322 unnum_error(struct PStack *st, struct sk_buff *skb, int wantrsp) in unnum_error() argument
325 if (test_bit(FLG_ORIG, &st->l2.flag)) in unnum_error()
331 if (skb->len != l2addrsize(&st->l2) + 1) in unnum_error()
338 UI_error(struct PStack *st, struct sk_buff *skb) in UI_error() argument
341 if (test_bit(FLG_ORIG, &st->l2.flag)) in UI_error()
347 if (skb->len > st->l2.maxlen + l2addrsize(&st->l2) + 1) in UI_error()
354 FRMR_error(struct PStack *st, struct sk_buff *skb) in FRMR_error() argument
356 int headers = l2addrsize(&st->l2) + 1; in FRMR_error()
360 if (test_bit(FLG_ORIG, &st->l2.flag)) in FRMR_error()
366 if (test_bit(FLG_MOD128, &st->l2.flag)) { in FRMR_error()
370 l2m_debug(&st->l2.l2m, "FRMR information %2x %2x %2x %2x %2x", in FRMR_error()
377 l2m_debug(&st->l2.l2m, "FRMR information %2x %2x %2x", in FRMR_error()
385 legalnr(struct PStack *st, unsigned int nr) in legalnr() argument
387 struct Layer2 *l2 = &st->l2; in legalnr()
396 setva(struct PStack *st, unsigned int nr) in setva() argument
398 struct Layer2 *l2 = &st->l2; in setva()
416 if (test_bit(FLG_LLI_L2WAKEUP, &st->lli.flag) && (len >= 0)) in setva()
417 lli_writewakeup(st, len); in setva()
424 send_uframe(struct PStack *st, u_char cmd, u_char cr) in send_uframe() argument
430 i = sethdraddr(&st->l2, tmp, cr); in send_uframe()
437 enqueue_super(st, skb); in send_uframe()
441 get_PollFlag(struct PStack *st, struct sk_buff *skb) in get_PollFlag() argument
443 return (skb->data[l2addrsize(&(st->l2))] & 0x10); in get_PollFlag()
447 get_PollFlagFree(struct PStack *st, struct sk_buff *skb) in get_PollFlagFree() argument
451 PF = get_PollFlag(st, skb); in get_PollFlagFree()
457 start_t200(struct PStack *st, int i) in start_t200() argument
459 FsmAddTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, NULL, i); in start_t200()
460 test_and_set_bit(FLG_T200_RUN, &st->l2.flag); in start_t200()
464 restart_t200(struct PStack *st, int i) in restart_t200() argument
466 FsmRestartTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, NULL, i); in restart_t200()
467 test_and_set_bit(FLG_T200_RUN, &st->l2.flag); in restart_t200()
471 stop_t200(struct PStack *st, int i) in stop_t200() argument
473 if (test_and_clear_bit(FLG_T200_RUN, &st->l2.flag)) in stop_t200()
474 FsmDelTimer(&st->l2.t200, i); in stop_t200()
478 st5_dl_release_l2l3(struct PStack *st) in st5_dl_release_l2l3() argument
482 if (test_and_clear_bit(FLG_PEND_REL, &st->l2.flag)) in st5_dl_release_l2l3()
487 st->l2.l2l3(st, pr, NULL); in st5_dl_release_l2l3()
491 lapb_dl_release_l2l3(struct PStack *st, int f) in lapb_dl_release_l2l3() argument
493 if (test_bit(FLG_LAPB, &st->l2.flag)) in lapb_dl_release_l2l3()
494 st->l2.l2l1(st, PH_DEACTIVATE | REQUEST, NULL); in lapb_dl_release_l2l3()
495 st->l2.l2l3(st, DL_RELEASE | f, NULL); in lapb_dl_release_l2l3()
501 struct PStack *st = fi->userdata; in establishlink() local
504 clear_exception(&st->l2); in establishlink()
505 st->l2.rc = 0; in establishlink()
506 cmd = (test_bit(FLG_MOD128, &st->l2.flag) ? SABME : SABM) | 0x10; in establishlink()
507 send_uframe(st, cmd, CMD); in establishlink()
508 FsmDelTimer(&st->l2.t203, 1); in establishlink()
509 restart_t200(st, 1); in establishlink()
510 test_and_clear_bit(FLG_PEND_REL, &st->l2.flag); in establishlink()
511 freewin(st); in establishlink()
519 struct PStack *st = fi->userdata; in l2_mdl_error_ua() local
521 if (get_PollFlagFree(st, skb)) in l2_mdl_error_ua()
522 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'C'); in l2_mdl_error_ua()
524 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'D'); in l2_mdl_error_ua()
531 struct PStack *st = fi->userdata; in l2_mdl_error_dm() local
533 if (get_PollFlagFree(st, skb)) in l2_mdl_error_dm()
534 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'B'); in l2_mdl_error_dm()
536 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'E'); in l2_mdl_error_dm()
538 test_and_clear_bit(FLG_L3_INIT, &st->l2.flag); in l2_mdl_error_dm()
546 struct PStack *st = fi->userdata; in l2_st8_mdl_error_dm() local
548 if (get_PollFlagFree(st, skb)) in l2_st8_mdl_error_dm()
549 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'B'); in l2_st8_mdl_error_dm()
551 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'E'); in l2_st8_mdl_error_dm()
554 test_and_clear_bit(FLG_L3_INIT, &st->l2.flag); in l2_st8_mdl_error_dm()
566 struct PStack *st = fi->userdata; in l2_mdl_assign() local
569 st->l2.l2tei(st, MDL_ASSIGN | INDICATION, NULL); in l2_mdl_assign()
575 struct PStack *st = fi->userdata; in l2_queue_ui_assign() local
578 skb_queue_tail(&st->l2.ui_queue, skb); in l2_queue_ui_assign()
580 st->l2.l2tei(st, MDL_ASSIGN | INDICATION, NULL); in l2_queue_ui_assign()
586 struct PStack *st = fi->userdata; in l2_queue_ui() local
589 skb_queue_tail(&st->l2.ui_queue, skb); in l2_queue_ui()
593 tx_ui(struct PStack *st) in tx_ui() argument
599 i = sethdraddr(&(st->l2), header, CMD); in tx_ui()
601 while ((skb = skb_dequeue(&st->l2.ui_queue))) { in tx_ui()
603 enqueue_ui(st, skb); in tx_ui()
610 struct PStack *st = fi->userdata; in l2_send_ui() local
613 skb_queue_tail(&st->l2.ui_queue, skb); in l2_send_ui()
614 tx_ui(st); in l2_send_ui()
620 struct PStack *st = fi->userdata; in l2_got_ui() local
623 skb_pull(skb, l2headersize(&st->l2, 1)); in l2_got_ui()
624 st->l2.l2l3(st, DL_UNIT_DATA | INDICATION, skb); in l2_got_ui()
635 struct PStack *st = fi->userdata; in l2_establish() local
638 test_and_set_bit(FLG_L3_INIT, &st->l2.flag); in l2_establish()
644 struct PStack *st = fi->userdata; in l2_discard_i_setl3() local
646 skb_queue_purge(&st->l2.i_queue); in l2_discard_i_setl3()
647 test_and_set_bit(FLG_L3_INIT, &st->l2.flag); in l2_discard_i_setl3()
648 test_and_clear_bit(FLG_PEND_REL, &st->l2.flag); in l2_discard_i_setl3()
654 struct PStack *st = fi->userdata; in l2_l3_reestablish() local
656 skb_queue_purge(&st->l2.i_queue); in l2_l3_reestablish()
658 test_and_set_bit(FLG_L3_INIT, &st->l2.flag); in l2_l3_reestablish()
664 struct PStack *st = fi->userdata; in l2_release() local
666 st->l2.l2l3(st, DL_RELEASE | CONFIRM, NULL); in l2_release()
672 struct PStack *st = fi->userdata; in l2_pend_rel() local
674 test_and_set_bit(FLG_PEND_REL, &st->l2.flag); in l2_pend_rel()
680 struct PStack *st = fi->userdata; in l2_disconnect() local
682 skb_queue_purge(&st->l2.i_queue); in l2_disconnect()
683 freewin(st); in l2_disconnect()
685 st->l2.rc = 0; in l2_disconnect()
686 send_uframe(st, DISC | 0x10, CMD); in l2_disconnect()
687 FsmDelTimer(&st->l2.t203, 1); in l2_disconnect()
688 restart_t200(st, 2); in l2_disconnect()
694 struct PStack *st = fi->userdata; in l2_start_multi() local
697 send_uframe(st, UA | get_PollFlagFree(st, skb), RSP); in l2_start_multi()
699 clear_exception(&st->l2); in l2_start_multi()
700 st->l2.vs = 0; in l2_start_multi()
701 st->l2.va = 0; in l2_start_multi()
702 st->l2.vr = 0; in l2_start_multi()
703 st->l2.sow = 0; in l2_start_multi()
705 FsmAddTimer(&st->l2.t203, st->l2.T203, EV_L2_T203, NULL, 3); in l2_start_multi()
707 st->l2.l2l3(st, DL_ESTABLISH | INDICATION, NULL); in l2_start_multi()
713 struct PStack *st = fi->userdata; in l2_send_UA() local
716 send_uframe(st, UA | get_PollFlagFree(st, skb), RSP); in l2_send_UA()
722 struct PStack *st = fi->userdata; in l2_send_DM() local
725 send_uframe(st, DM | get_PollFlagFree(st, skb), RSP); in l2_send_DM()
731 struct PStack *st = fi->userdata; in l2_restart_multi() local
737 send_uframe(st, UA | get_PollFlagFree(st, skb), RSP); in l2_restart_multi()
739 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'F'); in l2_restart_multi()
741 if (st->l2.vs != st->l2.va) { in l2_restart_multi()
742 skb_queue_purge(&st->l2.i_queue); in l2_restart_multi()
746 clear_exception(&st->l2); in l2_restart_multi()
747 st->l2.vs = 0; in l2_restart_multi()
748 st->l2.va = 0; in l2_restart_multi()
749 st->l2.vr = 0; in l2_restart_multi()
750 st->l2.sow = 0; in l2_restart_multi()
752 stop_t200(st, 3); in l2_restart_multi()
753 FsmRestartTimer(&st->l2.t203, st->l2.T203, EV_L2_T203, NULL, 3); in l2_restart_multi()
756 st->l2.l2l3(st, DL_ESTABLISH | INDICATION, NULL); in l2_restart_multi()
759 if (!skb_queue_empty(&st->l2.i_queue) && cansend(st)) in l2_restart_multi()
760 st->l2.l2l1(st, PH_PULL | REQUEST, NULL); in l2_restart_multi()
766 struct PStack *st = fi->userdata; in l2_stop_multi() local
770 FsmDelTimer(&st->l2.t203, 3); in l2_stop_multi()
771 stop_t200(st, 4); in l2_stop_multi()
773 send_uframe(st, UA | get_PollFlagFree(st, skb), RSP); in l2_stop_multi()
775 skb_queue_purge(&st->l2.i_queue); in l2_stop_multi()
776 freewin(st); in l2_stop_multi()
777 lapb_dl_release_l2l3(st, INDICATION); in l2_stop_multi()
783 struct PStack *st = fi->userdata; in l2_connected() local
787 if (!get_PollFlag(st, skb)) { in l2_connected()
793 if (test_and_clear_bit(FLG_PEND_REL, &st->l2.flag)) in l2_connected()
796 if (test_and_clear_bit(FLG_L3_INIT, &st->l2.flag)) { in l2_connected()
798 } else if (st->l2.vs != st->l2.va) { in l2_connected()
799 skb_queue_purge(&st->l2.i_queue); in l2_connected()
803 stop_t200(st, 5); in l2_connected()
805 st->l2.vr = 0; in l2_connected()
806 st->l2.vs = 0; in l2_connected()
807 st->l2.va = 0; in l2_connected()
808 st->l2.sow = 0; in l2_connected()
810 FsmAddTimer(&st->l2.t203, st->l2.T203, EV_L2_T203, NULL, 4); in l2_connected()
813 st->l2.l2l3(st, pr, NULL); in l2_connected()
815 if (!skb_queue_empty(&st->l2.i_queue) && cansend(st)) in l2_connected()
816 st->l2.l2l1(st, PH_PULL | REQUEST, NULL); in l2_connected()
822 struct PStack *st = fi->userdata; in l2_released() local
825 if (!get_PollFlag(st, skb)) { in l2_released()
831 stop_t200(st, 6); in l2_released()
832 lapb_dl_release_l2l3(st, CONFIRM); in l2_released()
839 struct PStack *st = fi->userdata; in l2_reestablish() local
842 if (!get_PollFlagFree(st, skb)) { in l2_reestablish()
844 test_and_set_bit(FLG_L3_INIT, &st->l2.flag); in l2_reestablish()
851 struct PStack *st = fi->userdata; in l2_st5_dm_release() local
854 if (get_PollFlagFree(st, skb)) { in l2_st5_dm_release()
855 stop_t200(st, 7); in l2_st5_dm_release()
856 if (!test_bit(FLG_L3_INIT, &st->l2.flag)) in l2_st5_dm_release()
857 skb_queue_purge(&st->l2.i_queue); in l2_st5_dm_release()
858 if (test_bit(FLG_LAPB, &st->l2.flag)) in l2_st5_dm_release()
859 st->l2.l2l1(st, PH_DEACTIVATE | REQUEST, NULL); in l2_st5_dm_release()
860 st5_dl_release_l2l3(st); in l2_st5_dm_release()
868 struct PStack *st = fi->userdata; in l2_st6_dm_release() local
871 if (get_PollFlagFree(st, skb)) { in l2_st6_dm_release()
872 stop_t200(st, 8); in l2_st6_dm_release()
873 lapb_dl_release_l2l3(st, CONFIRM); in l2_st6_dm_release()
879 enquiry_cr(struct PStack *st, u_char typ, u_char cr, u_char pf) in enquiry_cr() argument
886 l2 = &st->l2; in enquiry_cr()
898 enqueue_super(st, skb); in enquiry_cr()
902 enquiry_response(struct PStack *st) in enquiry_response() argument
904 if (test_bit(FLG_OWN_BUSY, &st->l2.flag)) in enquiry_response()
905 enquiry_cr(st, RNR, RSP, 1); in enquiry_response()
907 enquiry_cr(st, RR, RSP, 1); in enquiry_response()
908 test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag); in enquiry_response()
912 transmit_enquiry(struct PStack *st) in transmit_enquiry() argument
914 if (test_bit(FLG_OWN_BUSY, &st->l2.flag)) in transmit_enquiry()
915 enquiry_cr(st, RNR, CMD, 1); in transmit_enquiry()
917 enquiry_cr(st, RR, CMD, 1); in transmit_enquiry()
918 test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag); in transmit_enquiry()
919 start_t200(st, 9); in transmit_enquiry()
926 struct PStack *st = fi->userdata; in nrerrorrecovery() local
928 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'J'); in nrerrorrecovery()
930 test_and_clear_bit(FLG_L3_INIT, &st->l2.flag); in nrerrorrecovery()
934 invoke_retransmission(struct PStack *st, unsigned int nr) in invoke_retransmission() argument
936 struct Layer2 *l2 = &st->l2; in invoke_retransmission()
953 st->l1.bcs->tx_cnt += l2->windowar[p1]->len + l2headersize(l2, 0); in invoke_retransmission()
958 st->l2.l2l1(st, PH_PULL | REQUEST, NULL); in invoke_retransmission()
967 struct PStack *st = fi->userdata; in l2_st7_got_super() local
971 struct Layer2 *l2 = &st->l2; in l2_st7_got_super()
978 if (IsRNR(skb->data, st)) { in l2_st7_got_super()
983 if (IsREJ(skb->data, st)) in l2_st7_got_super()
997 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'A'); in l2_st7_got_super()
999 enquiry_response(st); in l2_st7_got_super()
1001 if (legalnr(st, nr)) { in l2_st7_got_super()
1003 setva(st, nr); in l2_st7_got_super()
1004 invoke_retransmission(st, nr); in l2_st7_got_super()
1005 stop_t200(st, 10); in l2_st7_got_super()
1006 if (FsmAddTimer(&st->l2.t203, st->l2.T203, in l2_st7_got_super()
1008 l2m_debug(&st->l2.l2m, "Restart T203 ST7 REJ"); in l2_st7_got_super()
1010 setva(st, nr); in l2_st7_got_super()
1011 stop_t200(st, 11); in l2_st7_got_super()
1012 FsmRestartTimer(&st->l2.t203, st->l2.T203, in l2_st7_got_super()
1015 setva(st, nr); in l2_st7_got_super()
1016 if (typ != RR) FsmDelTimer(&st->l2.t203, 9); in l2_st7_got_super()
1017 restart_t200(st, 12); in l2_st7_got_super()
1019 if (!skb_queue_empty(&st->l2.i_queue) && (typ == RR)) in l2_st7_got_super()
1020 st->l2.l2l1(st, PH_PULL | REQUEST, NULL); in l2_st7_got_super()
1028 struct PStack *st = fi->userdata; in l2_feed_i_if_reest() local
1031 if (test_bit(FLG_LAPB, &st->l2.flag)) in l2_feed_i_if_reest()
1032 st->l1.bcs->tx_cnt += skb->len + l2headersize(&st->l2, 0); in l2_feed_i_if_reest()
1033 if (!test_bit(FLG_L3_INIT, &st->l2.flag)) in l2_feed_i_if_reest()
1034 skb_queue_tail(&st->l2.i_queue, skb); in l2_feed_i_if_reest()
1042 struct PStack *st = fi->userdata; in l2_feed_i_pull() local
1045 if (test_bit(FLG_LAPB, &st->l2.flag)) in l2_feed_i_pull()
1046 st->l1.bcs->tx_cnt += skb->len + l2headersize(&st->l2, 0); in l2_feed_i_pull()
1047 skb_queue_tail(&st->l2.i_queue, skb); in l2_feed_i_pull()
1048 st->l2.l2l1(st, PH_PULL | REQUEST, NULL); in l2_feed_i_pull()
1054 struct PStack *st = fi->userdata; in l2_feed_iqueue() local
1057 if (test_bit(FLG_LAPB, &st->l2.flag)) in l2_feed_iqueue()
1058 st->l1.bcs->tx_cnt += skb->len + l2headersize(&st->l2, 0); in l2_feed_iqueue()
1059 skb_queue_tail(&st->l2.i_queue, skb); in l2_feed_iqueue()
1065 struct PStack *st = fi->userdata; in l2_got_iframe() local
1067 struct Layer2 *l2 = &(st->l2); in l2_got_iframe()
1083 if (PollFlag) enquiry_response(st); in l2_got_iframe()
1093 enquiry_response(st); in l2_got_iframe()
1097 st->l2.l2l3(st, DL_DATA | INDICATION, skb); in l2_got_iframe()
1103 enquiry_response(st); in l2_got_iframe()
1105 enquiry_cr(st, REJ, RSP, PollFlag); in l2_got_iframe()
1110 if (legalnr(st, nr)) { in l2_got_iframe()
1111 if (!test_bit(FLG_PEER_BUSY, &st->l2.flag) && (fi->state == ST_L2_7)) { in l2_got_iframe()
1112 if (nr == st->l2.vs) { in l2_got_iframe()
1113 stop_t200(st, 13); in l2_got_iframe()
1114 FsmRestartTimer(&st->l2.t203, st->l2.T203, in l2_got_iframe()
1116 } else if (nr != st->l2.va) in l2_got_iframe()
1117 restart_t200(st, 14); in l2_got_iframe()
1119 setva(st, nr); in l2_got_iframe()
1125 if (!skb_queue_empty(&st->l2.i_queue) && (fi->state == ST_L2_7)) in l2_got_iframe()
1126 st->l2.l2l1(st, PH_PULL | REQUEST, NULL); in l2_got_iframe()
1127 if (test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag)) in l2_got_iframe()
1128 enquiry_cr(st, RR, RSP, 0); in l2_got_iframe()
1134 struct PStack *st = fi->userdata; in l2_got_tei() local
1136 st->l2.tei = (long) arg; in l2_got_tei()
1140 test_and_set_bit(FLG_L3_INIT, &st->l2.flag); in l2_got_tei()
1143 if (!skb_queue_empty(&st->l2.ui_queue)) in l2_got_tei()
1144 tx_ui(st); in l2_got_tei()
1150 struct PStack *st = fi->userdata; in l2_st5_tout_200() local
1152 if (test_bit(FLG_LAPD, &st->l2.flag) && in l2_st5_tout_200()
1153 test_bit(FLG_DCHAN_BUSY, &st->l2.flag)) { in l2_st5_tout_200()
1154 FsmAddTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, NULL, 9); in l2_st5_tout_200()
1155 } else if (st->l2.rc == st->l2.N200) { in l2_st5_tout_200()
1157 test_and_clear_bit(FLG_T200_RUN, &st->l2.flag); in l2_st5_tout_200()
1158 skb_queue_purge(&st->l2.i_queue); in l2_st5_tout_200()
1159 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'G'); in l2_st5_tout_200()
1160 if (test_bit(FLG_LAPB, &st->l2.flag)) in l2_st5_tout_200()
1161 st->l2.l2l1(st, PH_DEACTIVATE | REQUEST, NULL); in l2_st5_tout_200()
1162 st5_dl_release_l2l3(st); in l2_st5_tout_200()
1164 st->l2.rc++; in l2_st5_tout_200()
1165 FsmAddTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, NULL, 9); in l2_st5_tout_200()
1166 send_uframe(st, (test_bit(FLG_MOD128, &st->l2.flag) ? SABME : SABM) in l2_st5_tout_200()
1174 struct PStack *st = fi->userdata; in l2_st6_tout_200() local
1176 if (test_bit(FLG_LAPD, &st->l2.flag) && in l2_st6_tout_200()
1177 test_bit(FLG_DCHAN_BUSY, &st->l2.flag)) { in l2_st6_tout_200()
1178 FsmAddTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, NULL, 9); in l2_st6_tout_200()
1179 } else if (st->l2.rc == st->l2.N200) { in l2_st6_tout_200()
1181 test_and_clear_bit(FLG_T200_RUN, &st->l2.flag); in l2_st6_tout_200()
1182 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'H'); in l2_st6_tout_200()
1183 lapb_dl_release_l2l3(st, CONFIRM); in l2_st6_tout_200()
1185 st->l2.rc++; in l2_st6_tout_200()
1186 FsmAddTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, in l2_st6_tout_200()
1188 send_uframe(st, DISC | 0x10, CMD); in l2_st6_tout_200()
1195 struct PStack *st = fi->userdata; in l2_st7_tout_200() local
1197 if (test_bit(FLG_LAPD, &st->l2.flag) && in l2_st7_tout_200()
1198 test_bit(FLG_DCHAN_BUSY, &st->l2.flag)) { in l2_st7_tout_200()
1199 FsmAddTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, NULL, 9); in l2_st7_tout_200()
1202 test_and_clear_bit(FLG_T200_RUN, &st->l2.flag); in l2_st7_tout_200()
1203 st->l2.rc = 0; in l2_st7_tout_200()
1206 transmit_enquiry(st); in l2_st7_tout_200()
1207 st->l2.rc++; in l2_st7_tout_200()
1213 struct PStack *st = fi->userdata; in l2_st8_tout_200() local
1215 if (test_bit(FLG_LAPD, &st->l2.flag) && in l2_st8_tout_200()
1216 test_bit(FLG_DCHAN_BUSY, &st->l2.flag)) { in l2_st8_tout_200()
1217 FsmAddTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, NULL, 9); in l2_st8_tout_200()
1220 test_and_clear_bit(FLG_T200_RUN, &st->l2.flag); in l2_st8_tout_200()
1221 if (st->l2.rc == st->l2.N200) { in l2_st8_tout_200()
1222 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'I'); in l2_st8_tout_200()
1224 test_and_clear_bit(FLG_L3_INIT, &st->l2.flag); in l2_st8_tout_200()
1226 transmit_enquiry(st); in l2_st8_tout_200()
1227 st->l2.rc++; in l2_st8_tout_200()
1234 struct PStack *st = fi->userdata; in l2_st7_tout_203() local
1236 if (test_bit(FLG_LAPD, &st->l2.flag) && in l2_st7_tout_203()
1237 test_bit(FLG_DCHAN_BUSY, &st->l2.flag)) { in l2_st7_tout_203()
1238 FsmAddTimer(&st->l2.t203, st->l2.T203, EV_L2_T203, NULL, 9); in l2_st7_tout_203()
1242 transmit_enquiry(st); in l2_st7_tout_203()
1243 st->l2.rc = 0; in l2_st7_tout_203()
1249 struct PStack *st = fi->userdata; in l2_pull_iqueue() local
1251 struct Layer2 *l2 = &st->l2; in l2_pull_iqueue()
1257 if (!cansend(st)) in l2_pull_iqueue()
1283 i = sethdraddr(&st->l2, header, CMD); in l2_pull_iqueue()
1295 st->l2.l2l1(st, PH_PULL | INDICATION, nskb); in l2_pull_iqueue()
1296 test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag); in l2_pull_iqueue()
1297 if (!test_and_set_bit(FLG_T200_RUN, &st->l2.flag)) { in l2_pull_iqueue()
1298 FsmDelTimer(&st->l2.t203, 13); in l2_pull_iqueue()
1299 FsmAddTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, NULL, 11); in l2_pull_iqueue()
1301 if (!skb_queue_empty(&l2->i_queue) && cansend(st)) in l2_pull_iqueue()
1302 st->l2.l2l1(st, PH_PULL | REQUEST, NULL); in l2_pull_iqueue()
1308 struct PStack *st = fi->userdata; in l2_st8_got_super() local
1312 struct Layer2 *l2 = &st->l2; in l2_st8_got_super()
1320 if (IsRNR(skb->data, st)) { in l2_st8_got_super()
1336 if (legalnr(st, nr)) { in l2_st8_got_super()
1338 restart_t200(st, 15); in l2_st8_got_super()
1340 stop_t200(st, 16); in l2_st8_got_super()
1343 setva(st, nr); in l2_st8_got_super()
1345 invoke_retransmission(st, nr); in l2_st8_got_super()
1347 if (!skb_queue_empty(&l2->i_queue) && cansend(st)) in l2_st8_got_super()
1348 st->l2.l2l1(st, PH_PULL | REQUEST, NULL); in l2_st8_got_super()
1353 enquiry_response(st); in l2_st8_got_super()
1354 if (legalnr(st, nr)) { in l2_st8_got_super()
1355 setva(st, nr); in l2_st8_got_super()
1364 struct PStack *st = fi->userdata; in l2_got_FRMR() local
1367 skb_pull(skb, l2addrsize(&st->l2) + 1); in l2_got_FRMR()
1371 st->ma.layer(st, MDL_ERROR | INDICATION, (void *) 'K'); in l2_got_FRMR()
1373 test_and_clear_bit(FLG_L3_INIT, &st->l2.flag); in l2_got_FRMR()
1381 struct PStack *st = fi->userdata; in l2_st24_tei_remove() local
1383 skb_queue_purge(&st->l2.ui_queue); in l2_st24_tei_remove()
1384 st->l2.tei = -1; in l2_st24_tei_remove()
1391 struct PStack *st = fi->userdata; in l2_st3_tei_remove() local
1393 skb_queue_purge(&st->l2.ui_queue); in l2_st3_tei_remove()
1394 st->l2.tei = -1; in l2_st3_tei_remove()
1395 st->l2.l2l3(st, DL_RELEASE | INDICATION, NULL); in l2_st3_tei_remove()
1402 struct PStack *st = fi->userdata; in l2_st5_tei_remove() local
1404 skb_queue_purge(&st->l2.i_queue); in l2_st5_tei_remove()
1405 skb_queue_purge(&st->l2.ui_queue); in l2_st5_tei_remove()
1406 freewin(st); in l2_st5_tei_remove()
1407 st->l2.tei = -1; in l2_st5_tei_remove()
1408 stop_t200(st, 17); in l2_st5_tei_remove()
1409 st5_dl_release_l2l3(st); in l2_st5_tei_remove()
1416 struct PStack *st = fi->userdata; in l2_st6_tei_remove() local
1418 skb_queue_purge(&st->l2.ui_queue); in l2_st6_tei_remove()
1419 st->l2.tei = -1; in l2_st6_tei_remove()
1420 stop_t200(st, 18); in l2_st6_tei_remove()
1421 st->l2.l2l3(st, DL_RELEASE | CONFIRM, NULL); in l2_st6_tei_remove()
1428 struct PStack *st = fi->userdata; in l2_tei_remove() local
1430 skb_queue_purge(&st->l2.i_queue); in l2_tei_remove()
1431 skb_queue_purge(&st->l2.ui_queue); in l2_tei_remove()
1432 freewin(st); in l2_tei_remove()
1433 st->l2.tei = -1; in l2_tei_remove()
1434 stop_t200(st, 17); in l2_tei_remove()
1435 FsmDelTimer(&st->l2.t203, 19); in l2_tei_remove()
1436 st->l2.l2l3(st, DL_RELEASE | INDICATION, NULL); in l2_tei_remove()
1443 struct PStack *st = fi->userdata; in l2_st14_persistent_da() local
1445 skb_queue_purge(&st->l2.i_queue); in l2_st14_persistent_da()
1446 skb_queue_purge(&st->l2.ui_queue); in l2_st14_persistent_da()
1447 if (test_and_clear_bit(FLG_ESTAB_PEND, &st->l2.flag)) in l2_st14_persistent_da()
1448 st->l2.l2l3(st, DL_RELEASE | INDICATION, NULL); in l2_st14_persistent_da()
1454 struct PStack *st = fi->userdata; in l2_st5_persistent_da() local
1456 skb_queue_purge(&st->l2.i_queue); in l2_st5_persistent_da()
1457 skb_queue_purge(&st->l2.ui_queue); in l2_st5_persistent_da()
1458 freewin(st); in l2_st5_persistent_da()
1459 stop_t200(st, 19); in l2_st5_persistent_da()
1460 st5_dl_release_l2l3(st); in l2_st5_persistent_da()
1467 struct PStack *st = fi->userdata; in l2_st6_persistent_da() local
1469 skb_queue_purge(&st->l2.ui_queue); in l2_st6_persistent_da()
1470 stop_t200(st, 20); in l2_st6_persistent_da()
1471 st->l2.l2l3(st, DL_RELEASE | CONFIRM, NULL); in l2_st6_persistent_da()
1478 struct PStack *st = fi->userdata; in l2_persistent_da() local
1480 skb_queue_purge(&st->l2.i_queue); in l2_persistent_da()
1481 skb_queue_purge(&st->l2.ui_queue); in l2_persistent_da()
1482 freewin(st); in l2_persistent_da()
1483 stop_t200(st, 19); in l2_persistent_da()
1484 FsmDelTimer(&st->l2.t203, 19); in l2_persistent_da()
1485 st->l2.l2l3(st, DL_RELEASE | INDICATION, NULL); in l2_persistent_da()
1492 struct PStack *st = fi->userdata; in l2_set_own_busy() local
1494 if (!test_and_set_bit(FLG_OWN_BUSY, &st->l2.flag)) { in l2_set_own_busy()
1495 enquiry_cr(st, RNR, RSP, 0); in l2_set_own_busy()
1496 test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag); in l2_set_own_busy()
1503 struct PStack *st = fi->userdata; in l2_clear_own_busy() local
1505 if (!test_and_clear_bit(FLG_OWN_BUSY, &st->l2.flag)) { in l2_clear_own_busy()
1506 enquiry_cr(st, RR, RSP, 0); in l2_clear_own_busy()
1507 test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag); in l2_clear_own_busy()
1514 struct PStack *st = fi->userdata; in l2_frame_error() local
1516 st->ma.layer(st, MDL_ERROR | INDICATION, arg); in l2_frame_error()
1522 struct PStack *st = fi->userdata; in l2_frame_error_reest() local
1524 st->ma.layer(st, MDL_ERROR | INDICATION, arg); in l2_frame_error_reest()
1526 test_and_clear_bit(FLG_L3_INIT, &st->l2.flag); in l2_frame_error_reest()
1622 isdnl2_l1l2(struct PStack *st, int pr, void *arg) in isdnl2_l1l2() argument
1632 len = l2addrsize(&st->l2); in isdnl2_l1l2()
1636 FsmEvent(&st->l2.l2m, EV_L2_FRAME_ERROR, (void *) 'N'); in isdnl2_l1l2()
1641 if (!(c = iframe_error(st, skb))) in isdnl2_l1l2()
1642 ret = FsmEvent(&st->l2.l2m, EV_L2_I, skb); in isdnl2_l1l2()
1643 } else if (IsSFrame(datap, st)) { /* S-Frame */ in isdnl2_l1l2()
1644 if (!(c = super_error(st, skb))) in isdnl2_l1l2()
1645 ret = FsmEvent(&st->l2.l2m, EV_L2_SUPER, skb); in isdnl2_l1l2()
1647 if (!(c = UI_error(st, skb))) in isdnl2_l1l2()
1648 ret = FsmEvent(&st->l2.l2m, EV_L2_UI, skb); in isdnl2_l1l2()
1649 } else if (IsSABME(datap, st)) { in isdnl2_l1l2()
1650 if (!(c = unnum_error(st, skb, CMD))) in isdnl2_l1l2()
1651 ret = FsmEvent(&st->l2.l2m, EV_L2_SABME, skb); in isdnl2_l1l2()
1653 if (!(c = unnum_error(st, skb, RSP))) in isdnl2_l1l2()
1654 ret = FsmEvent(&st->l2.l2m, EV_L2_UA, skb); in isdnl2_l1l2()
1656 if (!(c = unnum_error(st, skb, CMD))) in isdnl2_l1l2()
1657 ret = FsmEvent(&st->l2.l2m, EV_L2_DISC, skb); in isdnl2_l1l2()
1659 if (!(c = unnum_error(st, skb, RSP))) in isdnl2_l1l2()
1660 ret = FsmEvent(&st->l2.l2m, EV_L2_DM, skb); in isdnl2_l1l2()
1662 if (!(c = FRMR_error(st, skb))) in isdnl2_l1l2()
1663 ret = FsmEvent(&st->l2.l2m, EV_L2_FRMR, skb); in isdnl2_l1l2()
1665 FsmEvent(&st->l2.l2m, EV_L2_FRAME_ERROR, (void *) 'L'); in isdnl2_l1l2()
1671 FsmEvent(&st->l2.l2m, EV_L2_FRAME_ERROR, (void *)(long)c); in isdnl2_l1l2()
1678 FsmEvent(&st->l2.l2m, EV_L2_ACK_PULL, arg); in isdnl2_l1l2()
1681 test_and_set_bit(FLG_DCHAN_BUSY, &st->l2.flag); in isdnl2_l1l2()
1684 test_and_clear_bit(FLG_DCHAN_BUSY, &st->l2.flag); in isdnl2_l1l2()
1688 test_and_set_bit(FLG_L1_ACTIV, &st->l2.flag); in isdnl2_l1l2()
1689 if (test_and_clear_bit(FLG_ESTAB_PEND, &st->l2.flag)) in isdnl2_l1l2()
1690 FsmEvent(&st->l2.l2m, EV_L2_DL_ESTABLISH_REQ, arg); in isdnl2_l1l2()
1694 test_and_clear_bit(FLG_L1_ACTIV, &st->l2.flag); in isdnl2_l1l2()
1695 FsmEvent(&st->l2.l2m, EV_L1_DEACTIVATE, arg); in isdnl2_l1l2()
1698 l2m_debug(&st->l2.l2m, "l2 unknown pr %04x", pr); in isdnl2_l1l2()
1704 isdnl2_l3l2(struct PStack *st, int pr, void *arg) in isdnl2_l3l2() argument
1708 if (FsmEvent(&st->l2.l2m, EV_L2_DL_DATA, arg)) { in isdnl2_l3l2()
1713 if (FsmEvent(&st->l2.l2m, EV_L2_DL_UNIT_DATA, arg)) { in isdnl2_l3l2()
1718 if (test_bit(FLG_L1_ACTIV, &st->l2.flag)) { in isdnl2_l3l2()
1719 if (test_bit(FLG_LAPD, &st->l2.flag) || in isdnl2_l3l2()
1720 test_bit(FLG_ORIG, &st->l2.flag)) { in isdnl2_l3l2()
1721 FsmEvent(&st->l2.l2m, EV_L2_DL_ESTABLISH_REQ, arg); in isdnl2_l3l2()
1724 if (test_bit(FLG_LAPD, &st->l2.flag) || in isdnl2_l3l2()
1725 test_bit(FLG_ORIG, &st->l2.flag)) { in isdnl2_l3l2()
1726 test_and_set_bit(FLG_ESTAB_PEND, &st->l2.flag); in isdnl2_l3l2()
1728 st->l2.l2l1(st, PH_ACTIVATE, NULL); in isdnl2_l3l2()
1732 if (test_bit(FLG_LAPB, &st->l2.flag)) { in isdnl2_l3l2()
1733 st->l2.l2l1(st, PH_DEACTIVATE, NULL); in isdnl2_l3l2()
1735 FsmEvent(&st->l2.l2m, EV_L2_DL_RELEASE_REQ, arg); in isdnl2_l3l2()
1738 FsmEvent(&st->l2.l2m, EV_L2_MDL_ASSIGN, arg); in isdnl2_l3l2()
1741 FsmEvent(&st->l2.l2m, EV_L2_MDL_REMOVE, arg); in isdnl2_l3l2()
1744 FsmEvent(&st->l2.l2m, EV_L2_MDL_ERROR, arg); in isdnl2_l3l2()
1750 releasestack_isdnl2(struct PStack *st) in releasestack_isdnl2() argument
1752 FsmDelTimer(&st->l2.t200, 21); in releasestack_isdnl2()
1753 FsmDelTimer(&st->l2.t203, 16); in releasestack_isdnl2()
1754 skb_queue_purge(&st->l2.i_queue); in releasestack_isdnl2()
1755 skb_queue_purge(&st->l2.ui_queue); in releasestack_isdnl2()
1756 ReleaseWin(&st->l2); in releasestack_isdnl2()
1763 struct PStack *st = fi->userdata; in l2m_debug() local
1766 VHiSax_putstatus(st->l1.hardware, st->l2.debug_id, fmt, args); in l2m_debug()
1771 setstack_isdnl2(struct PStack *st, char *debug_id) in setstack_isdnl2() argument
1773 spin_lock_init(&st->l2.lock); in setstack_isdnl2()
1774 st->l1.l1l2 = isdnl2_l1l2; in setstack_isdnl2()
1775 st->l3.l3l2 = isdnl2_l3l2; in setstack_isdnl2()
1777 skb_queue_head_init(&st->l2.i_queue); in setstack_isdnl2()
1778 skb_queue_head_init(&st->l2.ui_queue); in setstack_isdnl2()
1779 InitWin(&st->l2); in setstack_isdnl2()
1780 st->l2.debug = 0; in setstack_isdnl2()
1782 st->l2.l2m.fsm = &l2fsm; in setstack_isdnl2()
1783 if (test_bit(FLG_LAPB, &st->l2.flag)) in setstack_isdnl2()
1784 st->l2.l2m.state = ST_L2_4; in setstack_isdnl2()
1786 st->l2.l2m.state = ST_L2_1; in setstack_isdnl2()
1787 st->l2.l2m.debug = 0; in setstack_isdnl2()
1788 st->l2.l2m.userdata = st; in setstack_isdnl2()
1789 st->l2.l2m.userint = 0; in setstack_isdnl2()
1790 st->l2.l2m.printdebug = l2m_debug; in setstack_isdnl2()
1791 strcpy(st->l2.debug_id, debug_id); in setstack_isdnl2()
1793 FsmInitTimer(&st->l2.l2m, &st->l2.t200); in setstack_isdnl2()
1794 FsmInitTimer(&st->l2.l2m, &st->l2.t203); in setstack_isdnl2()
1798 transl2_l3l2(struct PStack *st, int pr, void *arg) in transl2_l3l2() argument
1803 st->l2.l2l1(st, PH_DATA | REQUEST, arg); in transl2_l3l2()
1806 st->l2.l2l1(st, PH_ACTIVATE | REQUEST, NULL); in transl2_l3l2()
1809 st->l2.l2l1(st, PH_DEACTIVATE | REQUEST, NULL); in transl2_l3l2()
1815 setstack_transl2(struct PStack *st) in setstack_transl2() argument
1817 st->l3.l3l2 = transl2_l3l2; in setstack_transl2()
1821 releasestack_transl2(struct PStack *st) in releasestack_transl2() argument