Lines Matching refs:card
37 isdnloop_free_queue(isdnloop_card *card, int channel) in isdnloop_free_queue() argument
39 struct sk_buff_head *queue = &card->bqueue[channel]; in isdnloop_free_queue()
42 card->sndcount[channel] = 0; in isdnloop_free_queue()
54 isdnloop_bchan_send(isdnloop_card *card, int ch) in isdnloop_bchan_send() argument
56 isdnloop_card *rcard = card->rcard[ch]; in isdnloop_bchan_send()
57 int rch = card->rch[ch], len, ack; in isdnloop_bchan_send()
61 while (card->sndcount[ch]) { in isdnloop_bchan_send()
62 skb = skb_dequeue(&card->bqueue[ch]); in isdnloop_bchan_send()
65 card->sndcount[ch] -= len; in isdnloop_bchan_send()
67 cmd.driver = card->myid; in isdnloop_bchan_send()
78 card->interface.statcallb(&cmd); in isdnloop_bchan_send()
80 card->sndcount[ch] = 0; in isdnloop_bchan_send()
95 isdnloop_card *card = (isdnloop_card *) data; in isdnloop_pollbchan() local
98 if (card->flags & ISDNLOOP_FLAGS_B1ACTIVE) in isdnloop_pollbchan()
99 isdnloop_bchan_send(card, 0); in isdnloop_pollbchan()
100 if (card->flags & ISDNLOOP_FLAGS_B2ACTIVE) in isdnloop_pollbchan()
101 isdnloop_bchan_send(card, 1); in isdnloop_pollbchan()
102 if (card->flags & (ISDNLOOP_FLAGS_B1ACTIVE | ISDNLOOP_FLAGS_B2ACTIVE)) { in isdnloop_pollbchan()
104 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_pollbchan()
105 card->rb_timer.expires = jiffies + ISDNLOOP_TIMER_BCREAD; in isdnloop_pollbchan()
106 add_timer(&card->rb_timer); in isdnloop_pollbchan()
107 card->flags |= ISDNLOOP_FLAGS_RBTIMER; in isdnloop_pollbchan()
108 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_pollbchan()
110 card->flags &= ~ISDNLOOP_FLAGS_RBTIMER; in isdnloop_pollbchan()
185 isdnloop_parse_status(u_char *status, int channel, isdnloop_card *card) in isdnloop_parse_status() argument
201 cmd.driver = card->myid; in isdnloop_parse_status()
206 card->flags |= (channel) ? in isdnloop_parse_status()
211 card->flags &= ~((channel) ? in isdnloop_parse_status()
213 isdnloop_free_queue(card, channel); in isdnloop_parse_status()
221 sprintf(cmd.parm.setup.phone, "LEASED%d", card->myid); in isdnloop_parse_status()
248 card->flags &= ~ISDNLOOP_FLAGS_B1ACTIVE; in isdnloop_parse_status()
249 isdnloop_free_queue(card, 0); in isdnloop_parse_status()
251 cmd.driver = card->myid; in isdnloop_parse_status()
252 card->interface.statcallb(&cmd); in isdnloop_parse_status()
255 cmd.driver = card->myid; in isdnloop_parse_status()
256 card->interface.statcallb(&cmd); in isdnloop_parse_status()
258 card->flags &= ~ISDNLOOP_FLAGS_B2ACTIVE; in isdnloop_parse_status()
259 isdnloop_free_queue(card, 1); in isdnloop_parse_status()
261 cmd.driver = card->myid; in isdnloop_parse_status()
262 card->interface.statcallb(&cmd); in isdnloop_parse_status()
265 cmd.driver = card->myid; in isdnloop_parse_status()
268 card->interface.statcallb(&cmd); in isdnloop_parse_status()
279 isdnloop_putmsg(isdnloop_card *card, unsigned char c) in isdnloop_putmsg() argument
283 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_putmsg()
284 *card->msg_buf_write++ = (c == 0xff) ? '\n' : c; in isdnloop_putmsg()
285 if (card->msg_buf_write == card->msg_buf_read) { in isdnloop_putmsg()
286 if (++card->msg_buf_read > card->msg_buf_end) in isdnloop_putmsg()
287 card->msg_buf_read = card->msg_buf; in isdnloop_putmsg()
289 if (card->msg_buf_write > card->msg_buf_end) in isdnloop_putmsg()
290 card->msg_buf_write = card->msg_buf; in isdnloop_putmsg()
291 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_putmsg()
310 isdnloop_card *card = (isdnloop_card *) data; in isdnloop_polldchan() local
320 skb = skb_dequeue(&card->dqueue); in isdnloop_polldchan()
328 isdnloop_putmsg(card, c); in isdnloop_polldchan()
329 card->imsg[card->iptr] = c; in isdnloop_polldchan()
330 if (card->iptr < 59) in isdnloop_polldchan()
331 card->iptr++; in isdnloop_polldchan()
334 isdnloop_putmsg(card, '\n'); in isdnloop_polldchan()
335 card->imsg[card->iptr] = 0; in isdnloop_polldchan()
336 card->iptr = 0; in isdnloop_polldchan()
337 if (card->imsg[0] == '0' && card->imsg[1] >= '0' && in isdnloop_polldchan()
338 card->imsg[1] <= '2' && card->imsg[2] == ';') { in isdnloop_polldchan()
339 ch = (card->imsg[1] - '0') - 1; in isdnloop_polldchan()
340 p = &card->imsg[3]; in isdnloop_polldchan()
341 isdnloop_parse_status(p, ch, card); in isdnloop_polldchan()
343 p = card->imsg; in isdnloop_polldchan()
347 card->ptype = ISDN_PTYPE_1TR6; in isdnloop_polldchan()
348 card->interface.features |= ISDN_FEATURE_P_1TR6; in isdnloop_polldchan()
353 card->ptype = ISDN_PTYPE_EURO; in isdnloop_polldchan()
354 card->interface.features |= ISDN_FEATURE_P_EURO; in isdnloop_polldchan()
366 cmd.driver = card->myid; in isdnloop_polldchan()
368 card->interface.statcallb(&cmd); in isdnloop_polldchan()
370 if (card->flags & (ISDNLOOP_FLAGS_B1ACTIVE | ISDNLOOP_FLAGS_B2ACTIVE)) in isdnloop_polldchan()
371 if (!(card->flags & ISDNLOOP_FLAGS_RBTIMER)) { in isdnloop_polldchan()
373 card->flags |= ISDNLOOP_FLAGS_RBTIMER; in isdnloop_polldchan()
374 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_polldchan()
375 del_timer(&card->rb_timer); in isdnloop_polldchan()
376 card->rb_timer.function = isdnloop_pollbchan; in isdnloop_polldchan()
377 card->rb_timer.data = (unsigned long) card; in isdnloop_polldchan()
378 card->rb_timer.expires = jiffies + ISDNLOOP_TIMER_BCREAD; in isdnloop_polldchan()
379 add_timer(&card->rb_timer); in isdnloop_polldchan()
380 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_polldchan()
383 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_polldchan()
384 card->st_timer.expires = jiffies + ISDNLOOP_TIMER_DCREAD; in isdnloop_polldchan()
385 add_timer(&card->st_timer); in isdnloop_polldchan()
386 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_polldchan()
400 isdnloop_sendbuf(int channel, struct sk_buff *skb, isdnloop_card *card) in isdnloop_sendbuf() argument
412 if (!(card->flags & (channel) ? ISDNLOOP_FLAGS_B2ACTIVE : ISDNLOOP_FLAGS_B1ACTIVE)) in isdnloop_sendbuf()
414 if (card->sndcount[channel] > ISDNLOOP_MAX_SQUEUE) in isdnloop_sendbuf()
416 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_sendbuf()
421 skb_queue_tail(&card->bqueue[channel], nskb); in isdnloop_sendbuf()
425 card->sndcount[channel] += len; in isdnloop_sendbuf()
426 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_sendbuf()
443 isdnloop_readstatus(u_char __user *buf, int len, isdnloop_card *card) in isdnloop_readstatus() argument
449 if (card->msg_buf_read == card->msg_buf_write) in isdnloop_readstatus()
451 if (put_user(*card->msg_buf_read++, p)) in isdnloop_readstatus()
453 if (card->msg_buf_read > card->msg_buf_end) in isdnloop_readstatus()
454 card->msg_buf_read = card->msg_buf; in isdnloop_readstatus()
471 isdnloop_fake(isdnloop_card *card, char *s, int ch) in isdnloop_fake() argument
483 skb_queue_tail(&card->dqueue, skb); in isdnloop_fake()
519 isdnloop_fake_err(isdnloop_card *card) in isdnloop_fake_err() argument
523 snprintf(buf, sizeof(buf), "E%s", card->omsg); in isdnloop_fake_err()
524 isdnloop_fake(card, buf, -1); in isdnloop_fake_err()
525 isdnloop_fake(card, "NAK", -1); in isdnloop_fake_err()
543 isdnloop_unicause(isdnloop_card *card, int loc, int cau) in isdnloop_unicause() argument
547 switch (card->ptype) { in isdnloop_unicause()
569 isdnloop_atimeout(isdnloop_card *card, int ch) in isdnloop_atimeout() argument
574 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_atimeout()
575 if (card->rcard) { in isdnloop_atimeout()
576 isdnloop_fake(card->rcard[ch], "DDIS_I", card->rch[ch] + 1); in isdnloop_atimeout()
577 card->rcard[ch]->rcard[card->rch[ch]] = NULL; in isdnloop_atimeout()
578 card->rcard[ch] = NULL; in isdnloop_atimeout()
580 isdnloop_fake(card, "DDIS_I", ch + 1); in isdnloop_atimeout()
582 sprintf(buf, "CAU%s", isdnloop_unicause(card, 1, 3)); in isdnloop_atimeout()
583 isdnloop_fake(card, buf, ch + 1); in isdnloop_atimeout()
584 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_atimeout()
593 isdnloop_card *card = (isdnloop_card *) data; in isdnloop_atimeout0() local
594 isdnloop_atimeout(card, 0); in isdnloop_atimeout0()
603 isdnloop_card *card = (isdnloop_card *) data; in isdnloop_atimeout1() local
604 isdnloop_atimeout(card, 1); in isdnloop_atimeout1()
615 isdnloop_start_ctimer(isdnloop_card *card, int ch) in isdnloop_start_ctimer() argument
619 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_start_ctimer()
620 init_timer(&card->c_timer[ch]); in isdnloop_start_ctimer()
621 card->c_timer[ch].expires = jiffies + ISDNLOOP_TIMER_ALERTWAIT; in isdnloop_start_ctimer()
623 card->c_timer[ch].function = isdnloop_atimeout1; in isdnloop_start_ctimer()
625 card->c_timer[ch].function = isdnloop_atimeout0; in isdnloop_start_ctimer()
626 card->c_timer[ch].data = (unsigned long) card; in isdnloop_start_ctimer()
627 add_timer(&card->c_timer[ch]); in isdnloop_start_ctimer()
628 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_start_ctimer()
639 isdnloop_kill_ctimer(isdnloop_card *card, int ch) in isdnloop_kill_ctimer() argument
643 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_kill_ctimer()
644 del_timer(&card->c_timer[ch]); in isdnloop_kill_ctimer()
645 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_kill_ctimer()
666 isdnloop_try_call(isdnloop_card *card, char *p, int lch, isdn_ctrl *cmd) in isdnloop_try_call() argument
680 if ((cc == card) && (ch == lch)) in isdnloop_try_call()
699 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_try_call()
704 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_try_call()
708 cc->rcard[ch] = card; in isdnloop_try_call()
710 card->rcard[lch] = cc; in isdnloop_try_call()
711 card->rch[lch] = ch; in isdnloop_try_call()
712 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_try_call()
715 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_try_call()
739 isdnloop_vstphone(isdnloop_card *card, char *phone, int caller) in isdnloop_vstphone() argument
744 if (!card) { in isdnloop_vstphone()
748 switch (card->ptype) { in isdnloop_vstphone()
752 if (!(strcmp(card->s0num[i], phone))) in isdnloop_vstphone()
754 return card->s0num[0]; in isdnloop_vstphone()
760 sprintf(nphone, "%s%c", card->s0num[0], phone[0]); in isdnloop_vstphone()
777 isdnloop_parse_cmd(isdnloop_card *card) in isdnloop_parse_cmd() argument
779 char *p = card->omsg; in isdnloop_parse_cmd()
787 if ((card->omsg[0] != '0') && (card->omsg[2] != ';')) { in isdnloop_parse_cmd()
788 isdnloop_fake_err(card); in isdnloop_parse_cmd()
791 ch = card->omsg[1] - '0'; in isdnloop_parse_cmd()
793 isdnloop_fake_err(card); in isdnloop_parse_cmd()
801 isdnloop_fake_err(card); in isdnloop_parse_cmd()
813 if (card->rcard[ch - 1]) { in isdnloop_parse_cmd()
814 isdnloop_fake(card->rcard[ch - 1], "BCON_I", in isdnloop_parse_cmd()
815 card->rch[ch - 1] + 1); in isdnloop_parse_cmd()
816 isdnloop_fake(card, "BCON_C", ch); in isdnloop_parse_cmd()
821 if (card->rcard[ch - 1]) { in isdnloop_parse_cmd()
822 isdnloop_fake(card->rcard[ch - 1], "BCON_C", in isdnloop_parse_cmd()
823 card->rch[ch - 1] + 1); in isdnloop_parse_cmd()
828 isdnloop_fake(card, "BDIS_C", ch); in isdnloop_parse_cmd()
829 if (card->rcard[ch - 1]) { in isdnloop_parse_cmd()
830 isdnloop_fake(card->rcard[ch - 1], "BDIS_I", in isdnloop_parse_cmd()
831 card->rch[ch - 1] + 1); in isdnloop_parse_cmd()
836 isdnloop_kill_ctimer(card, ch - 1); in isdnloop_parse_cmd()
837 if (card->rcard[ch - 1]) { in isdnloop_parse_cmd()
838 isdnloop_kill_ctimer(card->rcard[ch - 1], card->rch[ch - 1]); in isdnloop_parse_cmd()
839 isdnloop_fake(card->rcard[ch - 1], "DCON_C", in isdnloop_parse_cmd()
840 card->rch[ch - 1] + 1); in isdnloop_parse_cmd()
841 isdnloop_fake(card, "DCON_C", ch); in isdnloop_parse_cmd()
846 isdnloop_kill_ctimer(card, ch - 1); in isdnloop_parse_cmd()
847 if (card->rcard[ch - 1]) { in isdnloop_parse_cmd()
848 isdnloop_kill_ctimer(card->rcard[ch - 1], card->rch[ch - 1]); in isdnloop_parse_cmd()
849 isdnloop_fake(card->rcard[ch - 1], "DDIS_I", in isdnloop_parse_cmd()
850 card->rch[ch - 1] + 1); in isdnloop_parse_cmd()
851 card->rcard[ch - 1] = NULL; in isdnloop_parse_cmd()
853 isdnloop_fake(card, "DDIS_C", ch); in isdnloop_parse_cmd()
857 if (card->ptype != ISDN_PTYPE_1TR6) { in isdnloop_parse_cmd()
858 isdnloop_fake_err(card); in isdnloop_parse_cmd()
865 switch (isdnloop_try_call(card, p, ch - 1, &cmd)) { in isdnloop_parse_cmd()
870 isdnloop_vstphone(card, cmd.parm.setup.eazmsn, 1), in isdnloop_parse_cmd()
873 isdnloop_vstphone(card->rcard[ch - 1], in isdnloop_parse_cmd()
875 isdnloop_fake(card->rcard[ch - 1], buf, card->rch[ch - 1] + 1); in isdnloop_parse_cmd()
879 isdnloop_start_ctimer(card, ch - 1); in isdnloop_parse_cmd()
883 isdnloop_fake(card, "DDIS_I", ch); in isdnloop_parse_cmd()
884 sprintf(buf, "CAU%s", isdnloop_unicause(card, 1, 1)); in isdnloop_parse_cmd()
885 isdnloop_fake(card, buf, ch); in isdnloop_parse_cmd()
889 isdnloop_fake(card, "DDIS_I", ch); in isdnloop_parse_cmd()
890 sprintf(buf, "CAU%s", isdnloop_unicause(card, 1, 2)); in isdnloop_parse_cmd()
891 isdnloop_fake(card, buf, ch); in isdnloop_parse_cmd()
897 card->eazlist[ch - 1][0] = '\0'; in isdnloop_parse_cmd()
902 if (strlen(p) >= sizeof(card->eazlist[0])) in isdnloop_parse_cmd()
904 strcpy(card->eazlist[ch - 1], p); in isdnloop_parse_cmd()
908 sprintf(buf, "EAZ-LIST: %s", card->eazlist[ch - 1]); in isdnloop_parse_cmd()
909 isdnloop_fake(card, buf, ch + 1); in isdnloop_parse_cmd()
923 card->sil[ch - 1] |= si2bit[*p - '0']; in isdnloop_parse_cmd()
927 isdnloop_fake_err(card); in isdnloop_parse_cmd()
934 if (card->sil[ch - 1] & (1 << i)) in isdnloop_parse_cmd()
936 isdnloop_fake(card, buf, ch + 1); in isdnloop_parse_cmd()
940 card->sil[ch - 1] = 0; in isdnloop_parse_cmd()
966 isdnloop_writecmd(const u_char *buf, int len, int user, isdnloop_card *card) in isdnloop_writecmd() argument
984 isdnloop_putmsg(card, '>'); in isdnloop_writecmd()
988 isdnloop_putmsg(card, *p); in isdnloop_writecmd()
989 card->omsg[card->optr] = *p; in isdnloop_writecmd()
991 card->omsg[card->optr] = '\0'; in isdnloop_writecmd()
992 card->optr = 0; in isdnloop_writecmd()
993 isdnloop_parse_cmd(card); in isdnloop_writecmd()
995 isdnloop_putmsg(card, '>'); in isdnloop_writecmd()
999 if (card->optr < 59) in isdnloop_writecmd()
1000 card->optr++; in isdnloop_writecmd()
1006 cmd.driver = card->myid; in isdnloop_writecmd()
1008 card->interface.statcallb(&cmd); in isdnloop_writecmd()
1016 isdnloop_stopcard(isdnloop_card *card) in isdnloop_stopcard() argument
1021 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_stopcard()
1022 if (card->flags & ISDNLOOP_FLAGS_RUNNING) { in isdnloop_stopcard()
1023 card->flags &= ~ISDNLOOP_FLAGS_RUNNING; in isdnloop_stopcard()
1024 del_timer(&card->st_timer); in isdnloop_stopcard()
1025 del_timer(&card->rb_timer); in isdnloop_stopcard()
1026 del_timer(&card->c_timer[0]); in isdnloop_stopcard()
1027 del_timer(&card->c_timer[1]); in isdnloop_stopcard()
1029 cmd.driver = card->myid; in isdnloop_stopcard()
1030 card->interface.statcallb(&cmd); in isdnloop_stopcard()
1032 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_stopcard()
1061 isdnloop_start(isdnloop_card *card, isdnloop_sdef *sdefp) in isdnloop_start() argument
1067 if (card->flags & ISDNLOOP_FLAGS_RUNNING) in isdnloop_start()
1077 spin_lock_irqsave(&card->isdnloop_lock, flags); in isdnloop_start()
1080 if (isdnloop_fake(card, "DRV1.23EC-Q.931-CAPI-CNS-BASIS-20.02.96", in isdnloop_start()
1082 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_start()
1085 card->sil[0] = card->sil[1] = 4; in isdnloop_start()
1086 if (isdnloop_fake(card, "TEI OK", 0)) { in isdnloop_start()
1087 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_start()
1091 strlcpy(card->s0num[i], sdef.num[i], in isdnloop_start()
1092 sizeof(card->s0num[0])); in isdnloop_start()
1096 if (isdnloop_fake(card, "DRV1.04TC-1TR6-CAPI-CNS-BASIS-29.11.95", in isdnloop_start()
1098 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_start()
1101 card->sil[0] = card->sil[1] = 4; in isdnloop_start()
1102 if (isdnloop_fake(card, "TEI OK", 0)) { in isdnloop_start()
1103 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_start()
1106 strlcpy(card->s0num[0], sdef.num[0], sizeof(card->s0num[0])); in isdnloop_start()
1107 card->s0num[1][0] = '\0'; in isdnloop_start()
1108 card->s0num[2][0] = '\0'; in isdnloop_start()
1111 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_start()
1116 init_timer(&card->st_timer); in isdnloop_start()
1117 card->st_timer.expires = jiffies + ISDNLOOP_TIMER_DCREAD; in isdnloop_start()
1118 card->st_timer.function = isdnloop_polldchan; in isdnloop_start()
1119 card->st_timer.data = (unsigned long) card; in isdnloop_start()
1120 add_timer(&card->st_timer); in isdnloop_start()
1121 card->flags |= ISDNLOOP_FLAGS_RUNNING; in isdnloop_start()
1122 spin_unlock_irqrestore(&card->isdnloop_lock, flags); in isdnloop_start()
1130 isdnloop_command(isdn_ctrl *c, isdnloop_card *card) in isdnloop_command() argument
1143 return (ulong) card; in isdnloop_command()
1147 return isdnloop_start(card, (isdnloop_sdef *) a); in isdnloop_command()
1158 if (!card->leased) { in isdnloop_command()
1159 card->leased = 1; in isdnloop_command()
1160 while (card->ptype == ISDN_PTYPE_UNKNOWN) in isdnloop_command()
1164 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1169 cmd.driver = card->myid; in isdnloop_command()
1171 card->interface.statcallb(&cmd); in isdnloop_command()
1174 if (card->leased) { in isdnloop_command()
1175 card->leased = 0; in isdnloop_command()
1177 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1182 cmd.driver = card->myid; in isdnloop_command()
1184 card->interface.statcallb(&cmd); in isdnloop_command()
1193 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in isdnloop_command()
1195 if (card->leased) in isdnloop_command()
1214 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1218 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in isdnloop_command()
1223 switch (card->l2_proto[a - 1]) { in isdnloop_command()
1240 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1242 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1246 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in isdnloop_command()
1250 switch (card->l2_proto[a - 1]) { in isdnloop_command()
1269 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1272 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in isdnloop_command()
1277 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1281 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in isdnloop_command()
1283 if (card->leased) in isdnloop_command()
1287 if (card->ptype == ISDN_PTYPE_EURO) { in isdnloop_command()
1293 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1297 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in isdnloop_command()
1299 if (card->leased) in isdnloop_command()
1303 if (card->ptype == ISDN_PTYPE_EURO) in isdnloop_command()
1307 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1311 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in isdnloop_command()
1336 i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card); in isdnloop_command()
1337 card->l2_proto[a & 255] = (a >> 8); in isdnloop_command()
1341 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in isdnloop_command()
1373 isdnloop_card *card = isdnloop_findcard(c->driver); in if_command() local
1375 if (card) in if_command()
1376 return isdnloop_command(c, card); in if_command()
1385 isdnloop_card *card = isdnloop_findcard(id); in if_writecmd() local
1387 if (card) { in if_writecmd()
1388 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in if_writecmd()
1390 return isdnloop_writecmd(buf, len, 1, card); in if_writecmd()
1400 isdnloop_card *card = isdnloop_findcard(id); in if_readstatus() local
1402 if (card) { in if_readstatus()
1403 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in if_readstatus()
1405 return isdnloop_readstatus(buf, len, card); in if_readstatus()
1415 isdnloop_card *card = isdnloop_findcard(id); in if_sendbuf() local
1417 if (card) { in if_sendbuf()
1418 if (!(card->flags & ISDNLOOP_FLAGS_RUNNING)) in if_sendbuf()
1422 return isdnloop_sendbuf(channel, skb, card); in if_sendbuf()
1436 isdnloop_card *card; in isdnloop_initcard() local
1438 card = kzalloc(sizeof(isdnloop_card), GFP_KERNEL); in isdnloop_initcard()
1439 if (!card) { in isdnloop_initcard()
1444 card->interface.owner = THIS_MODULE; in isdnloop_initcard()
1445 card->interface.channels = ISDNLOOP_BCH; in isdnloop_initcard()
1446 card->interface.hl_hdrlen = 1; /* scratch area for storing ack flag*/ in isdnloop_initcard()
1447 card->interface.maxbufsize = 4000; in isdnloop_initcard()
1448 card->interface.command = if_command; in isdnloop_initcard()
1449 card->interface.writebuf_skb = if_sendbuf; in isdnloop_initcard()
1450 card->interface.writecmd = if_writecmd; in isdnloop_initcard()
1451 card->interface.readstat = if_readstatus; in isdnloop_initcard()
1452 card->interface.features = ISDN_FEATURE_L2_X75I | in isdnloop_initcard()
1460 card->ptype = ISDN_PTYPE_UNKNOWN; in isdnloop_initcard()
1461 strlcpy(card->interface.id, id, sizeof(card->interface.id)); in isdnloop_initcard()
1462 card->msg_buf_write = card->msg_buf; in isdnloop_initcard()
1463 card->msg_buf_read = card->msg_buf; in isdnloop_initcard()
1464 card->msg_buf_end = &card->msg_buf[sizeof(card->msg_buf) - 1]; in isdnloop_initcard()
1466 card->l2_proto[i] = ISDN_PROTO_L2_X75I; in isdnloop_initcard()
1467 skb_queue_head_init(&card->bqueue[i]); in isdnloop_initcard()
1469 skb_queue_head_init(&card->dqueue); in isdnloop_initcard()
1470 spin_lock_init(&card->isdnloop_lock); in isdnloop_initcard()
1471 card->next = cards; in isdnloop_initcard()
1472 cards = card; in isdnloop_initcard()
1473 if (!register_isdn(&card->interface)) { in isdnloop_initcard()
1477 kfree(card); in isdnloop_initcard()
1480 card->myid = card->interface.channels; in isdnloop_initcard()
1481 return card; in isdnloop_initcard()
1487 isdnloop_card *card; in isdnloop_addcard() local
1488 card = isdnloop_initcard(id1); in isdnloop_addcard()
1489 if (!card) { in isdnloop_addcard()
1494 card->interface.id); in isdnloop_addcard()
1511 isdnloop_card *card = cards; in isdnloop_exit() local
1516 while (card) { in isdnloop_exit()
1518 cmd.driver = card->myid; in isdnloop_exit()
1519 card->interface.statcallb(&cmd); in isdnloop_exit()
1521 isdnloop_free_queue(card, i); in isdnloop_exit()
1522 card = card->next; in isdnloop_exit()
1524 card = cards; in isdnloop_exit()
1525 while (card) { in isdnloop_exit()
1526 last = card; in isdnloop_exit()
1527 skb_queue_purge(&card->dqueue); in isdnloop_exit()
1528 card = card->next; in isdnloop_exit()