aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/hisax/isdnl1.c
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
commit8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch)
treea8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/isdn/hisax/isdnl1.c
parent406089d01562f1e2bf9f089fd7637009ebaad589 (diff)
Patched in Tegra support.
Diffstat (limited to 'drivers/isdn/hisax/isdnl1.c')
-rw-r--r--drivers/isdn/hisax/isdnl1.c262
1 files changed, 131 insertions, 131 deletions
diff --git a/drivers/isdn/hisax/isdnl1.c b/drivers/isdn/hisax/isdnl1.c
index 800095781bf..d5eeacf565d 100644
--- a/drivers/isdn/hisax/isdnl1.c
+++ b/drivers/isdn/hisax/isdnl1.c
@@ -5,7 +5,7 @@
5 * Author Karsten Keil 5 * Author Karsten Keil
6 * based on the teles driver from Jan den Ouden 6 * based on the teles driver from Jan den Ouden
7 * Copyright by Karsten Keil <keil@isdn4linux.de> 7 * Copyright by Karsten Keil <keil@isdn4linux.de>
8 * 8 *
9 * This software may be used and distributed according to the terms 9 * This software may be used and distributed according to the terms
10 * of the GNU General Public License, incorporated herein by reference. 10 * of the GNU General Public License, incorporated herein by reference.
11 * 11 *
@@ -40,7 +40,7 @@ enum {
40 ST_L1_F8, 40 ST_L1_F8,
41}; 41};
42 42
43#define L1S_STATE_COUNT (ST_L1_F8 + 1) 43#define L1S_STATE_COUNT (ST_L1_F8+1)
44 44
45static char *strL1SState[] = 45static char *strL1SState[] =
46{ 46{
@@ -65,7 +65,7 @@ enum {
65 ST_L1_TRANS, 65 ST_L1_TRANS,
66}; 66};
67 67
68#define L1U_STATE_COUNT (ST_L1_TRANS + 1) 68#define L1U_STATE_COUNT (ST_L1_TRANS+1)
69 69
70static char *strL1UState[] = 70static char *strL1UState[] =
71{ 71{
@@ -83,7 +83,7 @@ enum {
83 ST_L1_ACTIV, 83 ST_L1_ACTIV,
84}; 84};
85 85
86#define L1B_STATE_COUNT (ST_L1_ACTIV + 1) 86#define L1B_STATE_COUNT (ST_L1_ACTIV+1)
87 87
88static char *strL1BState[] = 88static char *strL1BState[] =
89{ 89{
@@ -100,7 +100,7 @@ enum {
100 EV_DEACT_CNF, 100 EV_DEACT_CNF,
101 EV_DEACT_IND, 101 EV_DEACT_IND,
102 EV_POWER_UP, 102 EV_POWER_UP,
103 EV_RSYNC_IND, 103 EV_RSYNC_IND,
104 EV_INFO2_IND, 104 EV_INFO2_IND,
105 EV_INFO4_IND, 105 EV_INFO4_IND,
106 EV_TIMER_DEACT, 106 EV_TIMER_DEACT,
@@ -118,7 +118,7 @@ static char *strL1Event[] =
118 "EV_DEACT_CNF", 118 "EV_DEACT_CNF",
119 "EV_DEACT_IND", 119 "EV_DEACT_IND",
120 "EV_POWER_UP", 120 "EV_POWER_UP",
121 "EV_RSYNC_IND", 121 "EV_RSYNC_IND",
122 "EV_INFO2_IND", 122 "EV_INFO2_IND",
123 "EV_INFO4_IND", 123 "EV_INFO4_IND",
124 "EV_TIMER_DEACT", 124 "EV_TIMER_DEACT",
@@ -131,7 +131,7 @@ debugl1(struct IsdnCardState *cs, char *fmt, ...)
131{ 131{
132 va_list args; 132 va_list args;
133 char tmp[8]; 133 char tmp[8];
134 134
135 va_start(args, fmt); 135 va_start(args, fmt);
136 sprintf(tmp, "Card%d ", cs->cardnr + 1); 136 sprintf(tmp, "Card%d ", cs->cardnr + 1);
137 VHiSax_putstatus(cs, tmp, fmt, args); 137 VHiSax_putstatus(cs, tmp, fmt, args);
@@ -145,7 +145,7 @@ l1m_debug(struct FsmInst *fi, char *fmt, ...)
145 struct PStack *st = fi->userdata; 145 struct PStack *st = fi->userdata;
146 struct IsdnCardState *cs = st->l1.hardware; 146 struct IsdnCardState *cs = st->l1.hardware;
147 char tmp[8]; 147 char tmp[8];
148 148
149 va_start(args, fmt); 149 va_start(args, fmt);
150 sprintf(tmp, "Card%d ", cs->cardnr + 1); 150 sprintf(tmp, "Card%d ", cs->cardnr + 1);
151 VHiSax_putstatus(cs, tmp, fmt, args); 151 VHiSax_putstatus(cs, tmp, fmt, args);
@@ -209,19 +209,19 @@ DChannel_proc_rcv(struct IsdnCardState *cs)
209 209
210 if (stptr) 210 if (stptr)
211 if (test_bit(FLG_L1_ACTTIMER, &stptr->l1.Flags)) 211 if (test_bit(FLG_L1_ACTTIMER, &stptr->l1.Flags))
212 FsmEvent(&stptr->l1.l1m, EV_TIMER_ACT, NULL); 212 FsmEvent(&stptr->l1.l1m, EV_TIMER_ACT, NULL);
213 while ((skb = skb_dequeue(&cs->rq))) { 213 while ((skb = skb_dequeue(&cs->rq))) {
214#ifdef L2FRAME_DEBUG /* psa */ 214#ifdef L2FRAME_DEBUG /* psa */
215 if (cs->debug & L1_DEB_LAPD) 215 if (cs->debug & L1_DEB_LAPD)
216 Logl2Frame(cs, skb, "PH_DATA", 1); 216 Logl2Frame(cs, skb, "PH_DATA", 1);
217#endif 217#endif
218 stptr = cs->stlist; 218 stptr = cs->stlist;
219 if (skb->len < 3) { 219 if (skb->len<3) {
220 debugl1(cs, "D-channel frame too short(%d)", skb->len); 220 debugl1(cs, "D-channel frame too short(%d)",skb->len);
221 dev_kfree_skb(skb); 221 dev_kfree_skb(skb);
222 return; 222 return;
223 } 223 }
224 if ((skb->data[0] & 1) || !(skb->data[1] & 1)) { 224 if ((skb->data[0] & 1) || !(skb->data[1] &1)) {
225 debugl1(cs, "D-channel frame wrong EA0/EA1"); 225 debugl1(cs, "D-channel frame wrong EA0/EA1");
226 dev_kfree_skb(skb); 226 dev_kfree_skb(skb);
227 return; 227 return;
@@ -378,60 +378,60 @@ static char *
378l2cmd(u_char cmd) 378l2cmd(u_char cmd)
379{ 379{
380 switch (cmd & ~0x10) { 380 switch (cmd & ~0x10) {
381 case 1: 381 case 1:
382 return "RR"; 382 return "RR";
383 case 5: 383 case 5:
384 return "RNR"; 384 return "RNR";
385 case 9: 385 case 9:
386 return "REJ"; 386 return "REJ";
387 case 0x6f: 387 case 0x6f:
388 return "SABME"; 388 return "SABME";
389 case 0x0f: 389 case 0x0f:
390 return "DM"; 390 return "DM";
391 case 3: 391 case 3:
392 return "UI"; 392 return "UI";
393 case 0x43: 393 case 0x43:
394 return "DISC"; 394 return "DISC";
395 case 0x63: 395 case 0x63:
396 return "UA"; 396 return "UA";
397 case 0x87: 397 case 0x87:
398 return "FRMR"; 398 return "FRMR";
399 case 0xaf: 399 case 0xaf:
400 return "XID"; 400 return "XID";
401 default: 401 default:
402 if (!(cmd & 1)) 402 if (!(cmd & 1))
403 return "I"; 403 return "I";
404 else 404 else
405 return "invalid command"; 405 return "invalid command";
406 } 406 }
407} 407}
408 408
409static char tmpdeb[32]; 409static char tmpdeb[32];
410 410
411static char * 411static char *
412l2frames(u_char *ptr) 412l2frames(u_char * ptr)
413{ 413{
414 switch (ptr[2] & ~0x10) { 414 switch (ptr[2] & ~0x10) {
415 case 1: 415 case 1:
416 case 5: 416 case 5:
417 case 9: 417 case 9:
418 sprintf(tmpdeb, "%s[%d](nr %d)", l2cmd(ptr[2]), ptr[3] & 1, ptr[3] >> 1); 418 sprintf(tmpdeb, "%s[%d](nr %d)", l2cmd(ptr[2]), ptr[3] & 1, ptr[3] >> 1);
419 break;
420 case 0x6f:
421 case 0x0f:
422 case 3:
423 case 0x43:
424 case 0x63:
425 case 0x87:
426 case 0xaf:
427 sprintf(tmpdeb, "%s[%d]", l2cmd(ptr[2]), (ptr[2] & 0x10) >> 4);
428 break;
429 default:
430 if (!(ptr[2] & 1)) {
431 sprintf(tmpdeb, "I[%d](ns %d, nr %d)", ptr[3] & 1, ptr[2] >> 1, ptr[3] >> 1);
432 break; 419 break;
433 } else 420 case 0x6f:
434 return "invalid command"; 421 case 0x0f:
422 case 3:
423 case 0x43:
424 case 0x63:
425 case 0x87:
426 case 0xaf:
427 sprintf(tmpdeb, "%s[%d]", l2cmd(ptr[2]), (ptr[2] & 0x10) >> 4);
428 break;
429 default:
430 if (!(ptr[2] & 1)) {
431 sprintf(tmpdeb, "I[%d](ns %d, nr %d)", ptr[3] & 1, ptr[2] >> 1, ptr[3] >> 1);
432 break;
433 } else
434 return "invalid command";
435 } 435 }
436 436
437 437
@@ -547,24 +547,24 @@ l1_timer3(struct FsmInst *fi, int event, void *arg)
547{ 547{
548 struct PStack *st = fi->userdata; 548 struct PStack *st = fi->userdata;
549 549
550 test_and_clear_bit(FLG_L1_T3RUN, &st->l1.Flags); 550 test_and_clear_bit(FLG_L1_T3RUN, &st->l1.Flags);
551 if (test_and_clear_bit(FLG_L1_ACTIVATING, &st->l1.Flags)) 551 if (test_and_clear_bit(FLG_L1_ACTIVATING, &st->l1.Flags))
552 L1deactivated(st->l1.hardware); 552 L1deactivated(st->l1.hardware);
553 553
554#ifdef HISAX_UINTERFACE 554#ifdef HISAX_UINTERFACE
555 if (!test_bit(FLG_L1_UINT, &st->l1.Flags)) 555 if (!test_bit(FLG_L1_UINT, &st->l1.Flags))
556#endif 556#endif
557 if (st->l1.l1m.state != ST_L1_F6) { 557 if (st->l1.l1m.state != ST_L1_F6) {
558 FsmChangeState(fi, ST_L1_F3); 558 FsmChangeState(fi, ST_L1_F3);
559 st->l1.l1hw(st, HW_ENABLE | REQUEST, NULL); 559 st->l1.l1hw(st, HW_ENABLE | REQUEST, NULL);
560 } 560 }
561} 561}
562 562
563static void 563static void
564l1_timer_act(struct FsmInst *fi, int event, void *arg) 564l1_timer_act(struct FsmInst *fi, int event, void *arg)
565{ 565{
566 struct PStack *st = fi->userdata; 566 struct PStack *st = fi->userdata;
567 567
568 test_and_clear_bit(FLG_L1_ACTTIMER, &st->l1.Flags); 568 test_and_clear_bit(FLG_L1_ACTTIMER, &st->l1.Flags);
569 test_and_set_bit(FLG_L1_ACTIVATED, &st->l1.Flags); 569 test_and_set_bit(FLG_L1_ACTIVATED, &st->l1.Flags);
570 L1activated(st->l1.hardware); 570 L1activated(st->l1.hardware);
@@ -574,7 +574,7 @@ static void
574l1_timer_deact(struct FsmInst *fi, int event, void *arg) 574l1_timer_deact(struct FsmInst *fi, int event, void *arg)
575{ 575{
576 struct PStack *st = fi->userdata; 576 struct PStack *st = fi->userdata;
577 577
578 test_and_clear_bit(FLG_L1_DEACTTIMER, &st->l1.Flags); 578 test_and_clear_bit(FLG_L1_DEACTTIMER, &st->l1.Flags);
579 test_and_clear_bit(FLG_L1_ACTIVATED, &st->l1.Flags); 579 test_and_clear_bit(FLG_L1_ACTIVATED, &st->l1.Flags);
580 L1deactivated(st->l1.hardware); 580 L1deactivated(st->l1.hardware);
@@ -585,7 +585,7 @@ static void
585l1_activate_s(struct FsmInst *fi, int event, void *arg) 585l1_activate_s(struct FsmInst *fi, int event, void *arg)
586{ 586{
587 struct PStack *st = fi->userdata; 587 struct PStack *st = fi->userdata;
588 588
589 st->l1.l1hw(st, HW_RESET | REQUEST, NULL); 589 st->l1.l1hw(st, HW_RESET | REQUEST, NULL);
590} 590}
591 591
@@ -679,7 +679,7 @@ static void
679l1_activate_u(struct FsmInst *fi, int event, void *arg) 679l1_activate_u(struct FsmInst *fi, int event, void *arg)
680{ 680{
681 struct PStack *st = fi->userdata; 681 struct PStack *st = fi->userdata;
682 682
683 st->l1.l1hw(st, HW_INFO1 | REQUEST, NULL); 683 st->l1.l1hw(st, HW_INFO1 | REQUEST, NULL);
684} 684}
685 685
@@ -751,7 +751,7 @@ static struct FsmNode L1BFnList[] __initdata =
751 {ST_L1_WAIT_DEACT, EV_TIMER_DEACT, l1b_timer_deact}, 751 {ST_L1_WAIT_DEACT, EV_TIMER_DEACT, l1b_timer_deact},
752}; 752};
753 753
754int __init 754int __init
755Isdnl1New(void) 755Isdnl1New(void)
756{ 756{
757 int retval; 757 int retval;
@@ -803,35 +803,35 @@ dch_l2l1(struct PStack *st, int pr, void *arg)
803 struct IsdnCardState *cs = (struct IsdnCardState *) st->l1.hardware; 803 struct IsdnCardState *cs = (struct IsdnCardState *) st->l1.hardware;
804 804
805 switch (pr) { 805 switch (pr) {
806 case (PH_DATA | REQUEST): 806 case (PH_DATA | REQUEST):
807 case (PH_PULL | REQUEST): 807 case (PH_PULL | REQUEST):
808 case (PH_PULL | INDICATION): 808 case (PH_PULL |INDICATION):
809 st->l1.l1hw(st, pr, arg); 809 st->l1.l1hw(st, pr, arg);
810 break; 810 break;
811 case (PH_ACTIVATE | REQUEST): 811 case (PH_ACTIVATE | REQUEST):
812 if (cs->debug) 812 if (cs->debug)
813 debugl1(cs, "PH_ACTIVATE_REQ %s", 813 debugl1(cs, "PH_ACTIVATE_REQ %s",
814 st->l1.l1m.fsm->strState[st->l1.l1m.state]); 814 st->l1.l1m.fsm->strState[st->l1.l1m.state]);
815 if (test_bit(FLG_L1_ACTIVATED, &st->l1.Flags)) 815 if (test_bit(FLG_L1_ACTIVATED, &st->l1.Flags))
816 st->l1.l1l2(st, PH_ACTIVATE | CONFIRM, NULL); 816 st->l1.l1l2(st, PH_ACTIVATE | CONFIRM, NULL);
817 else { 817 else {
818 test_and_set_bit(FLG_L1_ACTIVATING, &st->l1.Flags); 818 test_and_set_bit(FLG_L1_ACTIVATING, &st->l1.Flags);
819 FsmEvent(&st->l1.l1m, EV_PH_ACTIVATE, arg); 819 FsmEvent(&st->l1.l1m, EV_PH_ACTIVATE, arg);
820 } 820 }
821 break; 821 break;
822 case (PH_TESTLOOP | REQUEST): 822 case (PH_TESTLOOP | REQUEST):
823 if (1 & (long) arg) 823 if (1 & (long) arg)
824 debugl1(cs, "PH_TEST_LOOP B1"); 824 debugl1(cs, "PH_TEST_LOOP B1");
825 if (2 & (long) arg) 825 if (2 & (long) arg)
826 debugl1(cs, "PH_TEST_LOOP B2"); 826 debugl1(cs, "PH_TEST_LOOP B2");
827 if (!(3 & (long) arg)) 827 if (!(3 & (long) arg))
828 debugl1(cs, "PH_TEST_LOOP DISABLED"); 828 debugl1(cs, "PH_TEST_LOOP DISABLED");
829 st->l1.l1hw(st, HW_TESTLOOP | REQUEST, arg); 829 st->l1.l1hw(st, HW_TESTLOOP | REQUEST, arg);
830 break; 830 break;
831 default: 831 default:
832 if (cs->debug) 832 if (cs->debug)
833 debugl1(cs, "dch_l2l1 msg %04X unhandled", pr); 833 debugl1(cs, "dch_l2l1 msg %04X unhandled", pr);
834 break; 834 break;
835 } 835 }
836} 836}
837 837
@@ -840,35 +840,35 @@ l1_msg(struct IsdnCardState *cs, int pr, void *arg) {
840 struct PStack *st; 840 struct PStack *st;
841 841
842 st = cs->stlist; 842 st = cs->stlist;
843 843
844 while (st) { 844 while (st) {
845 switch (pr) { 845 switch(pr) {
846 case (HW_RESET | INDICATION): 846 case (HW_RESET | INDICATION):
847 FsmEvent(&st->l1.l1m, EV_RESET_IND, arg); 847 FsmEvent(&st->l1.l1m, EV_RESET_IND, arg);
848 break; 848 break;
849 case (HW_DEACTIVATE | CONFIRM): 849 case (HW_DEACTIVATE | CONFIRM):
850 FsmEvent(&st->l1.l1m, EV_DEACT_CNF, arg); 850 FsmEvent(&st->l1.l1m, EV_DEACT_CNF, arg);
851 break; 851 break;
852 case (HW_DEACTIVATE | INDICATION): 852 case (HW_DEACTIVATE | INDICATION):
853 FsmEvent(&st->l1.l1m, EV_DEACT_IND, arg); 853 FsmEvent(&st->l1.l1m, EV_DEACT_IND, arg);
854 break; 854 break;
855 case (HW_POWERUP | CONFIRM): 855 case (HW_POWERUP | CONFIRM):
856 FsmEvent(&st->l1.l1m, EV_POWER_UP, arg); 856 FsmEvent(&st->l1.l1m, EV_POWER_UP, arg);
857 break; 857 break;
858 case (HW_RSYNC | INDICATION): 858 case (HW_RSYNC | INDICATION):
859 FsmEvent(&st->l1.l1m, EV_RSYNC_IND, arg); 859 FsmEvent(&st->l1.l1m, EV_RSYNC_IND, arg);
860 break; 860 break;
861 case (HW_INFO2 | INDICATION): 861 case (HW_INFO2 | INDICATION):
862 FsmEvent(&st->l1.l1m, EV_INFO2_IND, arg); 862 FsmEvent(&st->l1.l1m, EV_INFO2_IND, arg);
863 break; 863 break;
864 case (HW_INFO4_P8 | INDICATION): 864 case (HW_INFO4_P8 | INDICATION):
865 case (HW_INFO4_P10 | INDICATION): 865 case (HW_INFO4_P10 | INDICATION):
866 FsmEvent(&st->l1.l1m, EV_INFO4_IND, arg); 866 FsmEvent(&st->l1.l1m, EV_INFO4_IND, arg);
867 break; 867 break;
868 default: 868 default:
869 if (cs->debug) 869 if (cs->debug)
870 debugl1(cs, "l1msg %04X unhandled", pr); 870 debugl1(cs, "l1msg %04X unhandled", pr);
871 break; 871 break;
872 } 872 }
873 st = st->next; 873 st = st->next;
874 } 874 }
@@ -876,13 +876,13 @@ l1_msg(struct IsdnCardState *cs, int pr, void *arg) {
876 876
877void 877void
878l1_msg_b(struct PStack *st, int pr, void *arg) { 878l1_msg_b(struct PStack *st, int pr, void *arg) {
879 switch (pr) { 879 switch(pr) {
880 case (PH_ACTIVATE | REQUEST): 880 case (PH_ACTIVATE | REQUEST):
881 FsmEvent(&st->l1.l1m, EV_PH_ACTIVATE, NULL); 881 FsmEvent(&st->l1.l1m, EV_PH_ACTIVATE, NULL);
882 break; 882 break;
883 case (PH_DEACTIVATE | REQUEST): 883 case (PH_DEACTIVATE | REQUEST):
884 FsmEvent(&st->l1.l1m, EV_PH_DEACTIVATE, NULL); 884 FsmEvent(&st->l1.l1m, EV_PH_DEACTIVATE, NULL);
885 break; 885 break;
886 } 886 }
887} 887}
888 888