aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/icn/icn.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/isdn/icn/icn.c')
-rw-r--r--drivers/isdn/icn/icn.c806
1 files changed, 403 insertions, 403 deletions
diff --git a/drivers/isdn/icn/icn.c b/drivers/isdn/icn/icn.c
index 1f355bb85e54..e74df7c4658f 100644
--- a/drivers/isdn/icn/icn.c
+++ b/drivers/isdn/icn/icn.c
@@ -54,7 +54,7 @@ static int icn_addcard(int, char *, char *);
54 * channel = channel number 54 * channel = channel number
55 */ 55 */
56static void 56static void
57icn_free_queue(icn_card * card, int channel) 57icn_free_queue(icn_card *card, int channel)
58{ 58{
59 struct sk_buff_head *queue = &card->spqueue[channel]; 59 struct sk_buff_head *queue = &card->spqueue[channel];
60 struct sk_buff *skb; 60 struct sk_buff *skb;
@@ -93,7 +93,7 @@ icn_shiftout(unsigned short port,
93 * disable a cards shared memory 93 * disable a cards shared memory
94 */ 94 */
95static inline void 95static inline void
96icn_disable_ram(icn_card * card) 96icn_disable_ram(icn_card *card)
97{ 97{
98 OUTB_P(0, ICN_MAPRAM); 98 OUTB_P(0, ICN_MAPRAM);
99} 99}
@@ -102,7 +102,7 @@ icn_disable_ram(icn_card * card)
102 * enable a cards shared memory 102 * enable a cards shared memory
103 */ 103 */
104static inline void 104static inline void
105icn_enable_ram(icn_card * card) 105icn_enable_ram(icn_card *card)
106{ 106{
107 OUTB_P(0xff, ICN_MAPRAM); 107 OUTB_P(0xff, ICN_MAPRAM);
108} 108}
@@ -113,7 +113,7 @@ icn_enable_ram(icn_card * card)
113 * must called with holding the devlock 113 * must called with holding the devlock
114 */ 114 */
115static inline void 115static inline void
116icn_map_channel(icn_card * card, int channel) 116icn_map_channel(icn_card *card, int channel)
117{ 117{
118#ifdef MAP_DEBUG 118#ifdef MAP_DEBUG
119 printk(KERN_DEBUG "icn_map_channel %d %d\n", dev.channel, channel); 119 printk(KERN_DEBUG "icn_map_channel %d %d\n", dev.channel, channel);
@@ -139,7 +139,7 @@ icn_map_channel(icn_card * card, int channel)
139 * must called with holding the devlock 139 * must called with holding the devlock
140 */ 140 */
141static inline int 141static inline int
142icn_lock_channel(icn_card * card, int channel) 142icn_lock_channel(icn_card *card, int channel)
143{ 143{
144 register int retval; 144 register int retval;
145 145
@@ -194,7 +194,7 @@ icn_release_channel(void)
194 * Return 1 on success, 0 on failure. 194 * Return 1 on success, 0 on failure.
195 */ 195 */
196static inline int 196static inline int
197icn_trymaplock_channel(icn_card * card, int channel) 197icn_trymaplock_channel(icn_card *card, int channel)
198{ 198{
199 ulong flags; 199 ulong flags;
200 200
@@ -225,7 +225,7 @@ icn_trymaplock_channel(icn_card * card, int channel)
225 * then map same or other channel without locking. 225 * then map same or other channel without locking.
226 */ 226 */
227static inline void 227static inline void
228icn_maprelease_channel(icn_card * card, int channel) 228icn_maprelease_channel(icn_card *card, int channel)
229{ 229{
230 ulong flags; 230 ulong flags;
231 231
@@ -246,7 +246,7 @@ icn_maprelease_channel(icn_card * card, int channel)
246 */ 246 */
247 247
248static void 248static void
249icn_pollbchan_receive(int channel, icn_card * card) 249icn_pollbchan_receive(int channel, icn_card *card)
250{ 250{
251 int mch = channel + ((card->secondhalf) ? 2 : 0); 251 int mch = channel + ((card->secondhalf) ? 2 : 0);
252 int eflag; 252 int eflag;
@@ -297,7 +297,7 @@ icn_pollbchan_receive(int channel, icn_card * card)
297 */ 297 */
298 298
299static void 299static void
300icn_pollbchan_send(int channel, icn_card * card) 300icn_pollbchan_send(int channel, icn_card *card)
301{ 301{
302 int mch = channel + ((card->secondhalf) ? 2 : 0); 302 int mch = channel + ((card->secondhalf) ? 2 : 0);
303 int cnt; 303 int cnt;
@@ -309,7 +309,7 @@ icn_pollbchan_send(int channel, icn_card * card)
309 !skb_queue_empty(&card->spqueue[channel]))) 309 !skb_queue_empty(&card->spqueue[channel])))
310 return; 310 return;
311 if (icn_trymaplock_channel(card, mch)) { 311 if (icn_trymaplock_channel(card, mch)) {
312 while (sbfree && 312 while (sbfree &&
313 (card->sndcount[channel] || 313 (card->sndcount[channel] ||
314 !skb_queue_empty(&card->spqueue[channel]) || 314 !skb_queue_empty(&card->spqueue[channel]) ||
315 card->xskb[channel])) { 315 card->xskb[channel])) {
@@ -327,7 +327,7 @@ icn_pollbchan_send(int channel, icn_card * card)
327 /* Pop ACK-flag off skb. 327 /* Pop ACK-flag off skb.
328 * Store length to xlen. 328 * Store length to xlen.
329 */ 329 */
330 if (*(skb_pull(skb,1))) 330 if (*(skb_pull(skb, 1)))
331 card->xlen[channel] = skb->len; 331 card->xlen[channel] = skb->len;
332 else 332 else
333 card->xlen[channel] = 0; 333 card->xlen[channel] = 0;
@@ -396,7 +396,7 @@ icn_pollbchan(unsigned long data)
396 if (card->flags & (ICN_FLAGS_B1ACTIVE | ICN_FLAGS_B2ACTIVE)) { 396 if (card->flags & (ICN_FLAGS_B1ACTIVE | ICN_FLAGS_B2ACTIVE)) {
397 /* schedule b-channel polling again */ 397 /* schedule b-channel polling again */
398 spin_lock_irqsave(&card->lock, flags); 398 spin_lock_irqsave(&card->lock, flags);
399 mod_timer(&card->rb_timer, jiffies+ICN_TIMER_BCREAD); 399 mod_timer(&card->rb_timer, jiffies + ICN_TIMER_BCREAD);
400 card->flags |= ICN_FLAGS_RBTIMER; 400 card->flags |= ICN_FLAGS_RBTIMER;
401 spin_unlock_irqrestore(&card->lock, flags); 401 spin_unlock_irqrestore(&card->lock, flags);
402 } else 402 } else
@@ -428,7 +428,7 @@ static icn_stat icn_stat_table[] =
428 {"E_L1: ACT FAIL", ISDN_STAT_BHUP, 8}, /* Layer-1 activation failed */ 428 {"E_L1: ACT FAIL", ISDN_STAT_BHUP, 8}, /* Layer-1 activation failed */
429 {"E_L2: DATA LIN", ISDN_STAT_BHUP, 8}, /* Layer-2 data link lost */ 429 {"E_L2: DATA LIN", ISDN_STAT_BHUP, 8}, /* Layer-2 data link lost */
430 {"E_L1: ACTIVATION FAILED", 430 {"E_L1: ACTIVATION FAILED",
431 ISDN_STAT_BHUP, 8}, /* Layer-1 activation failed */ 431 ISDN_STAT_BHUP, 8}, /* Layer-1 activation failed */
432 {NULL, 0, -1} 432 {NULL, 0, -1}
433}; 433};
434/* *INDENT-ON* */ 434/* *INDENT-ON* */
@@ -445,7 +445,7 @@ static icn_stat icn_stat_table[] =
445 */ 445 */
446 446
447static void 447static void
448icn_parse_status(u_char * status, int channel, icn_card * card) 448icn_parse_status(u_char *status, int channel, icn_card *card)
449{ 449{
450 icn_stat *s = icn_stat_table; 450 icn_stat *s = icn_stat_table;
451 int action = -1; 451 int action = -1;
@@ -465,128 +465,128 @@ icn_parse_status(u_char * status, int channel, icn_card * card)
465 cmd.driver = card->myid; 465 cmd.driver = card->myid;
466 cmd.arg = channel; 466 cmd.arg = channel;
467 switch (action) { 467 switch (action) {
468 case 11: 468 case 11:
469 spin_lock_irqsave(&card->lock, flags); 469 spin_lock_irqsave(&card->lock, flags);
470 icn_free_queue(card,channel); 470 icn_free_queue(card, channel);
471 card->rcvidx[channel] = 0; 471 card->rcvidx[channel] = 0;
472 472
473 if (card->flags & 473 if (card->flags &
474 ((channel)?ICN_FLAGS_B2ACTIVE:ICN_FLAGS_B1ACTIVE)) { 474 ((channel) ? ICN_FLAGS_B2ACTIVE : ICN_FLAGS_B1ACTIVE)) {
475 475
476 isdn_ctrl ncmd; 476 isdn_ctrl ncmd;
477 477
478 card->flags &= ~((channel)?
479 ICN_FLAGS_B2ACTIVE:ICN_FLAGS_B1ACTIVE);
480
481 memset(&ncmd, 0, sizeof(ncmd));
482
483 ncmd.driver = card->myid;
484 ncmd.arg = channel;
485 ncmd.command = ISDN_STAT_BHUP;
486 spin_unlock_irqrestore(&card->lock, flags);
487 card->interface.statcallb(&cmd);
488 } else
489 spin_unlock_irqrestore(&card->lock, flags);
490 break;
491 case 1:
492 spin_lock_irqsave(&card->lock, flags);
493 icn_free_queue(card,channel);
494 card->flags |= (channel) ?
495 ICN_FLAGS_B2ACTIVE : ICN_FLAGS_B1ACTIVE;
496 spin_unlock_irqrestore(&card->lock, flags);
497 break;
498 case 2:
499 spin_lock_irqsave(&card->lock, flags);
500 card->flags &= ~((channel) ? 478 card->flags &= ~((channel) ?
501 ICN_FLAGS_B2ACTIVE : ICN_FLAGS_B1ACTIVE); 479 ICN_FLAGS_B2ACTIVE : ICN_FLAGS_B1ACTIVE);
502 icn_free_queue(card, channel); 480
503 card->rcvidx[channel] = 0; 481 memset(&ncmd, 0, sizeof(ncmd));
504 spin_unlock_irqrestore(&card->lock, flags); 482
505 break; 483 ncmd.driver = card->myid;
506 case 3: 484 ncmd.arg = channel;
507 { 485 ncmd.command = ISDN_STAT_BHUP;
508 char *t = status + 6;
509 char *s = strchr(t, ',');
510
511 *s++ = '\0';
512 strlcpy(cmd.parm.setup.phone, t,
513 sizeof(cmd.parm.setup.phone));
514 s = strchr(t = s, ',');
515 *s++ = '\0';
516 if (!strlen(t))
517 cmd.parm.setup.si1 = 0;
518 else
519 cmd.parm.setup.si1 =
520 simple_strtoul(t, NULL, 10);
521 s = strchr(t = s, ',');
522 *s++ = '\0';
523 if (!strlen(t))
524 cmd.parm.setup.si2 = 0;
525 else
526 cmd.parm.setup.si2 =
527 simple_strtoul(t, NULL, 10);
528 strlcpy(cmd.parm.setup.eazmsn, s,
529 sizeof(cmd.parm.setup.eazmsn));
530 }
531 cmd.parm.setup.plan = 0;
532 cmd.parm.setup.screen = 0;
533 break;
534 case 4:
535 sprintf(cmd.parm.setup.phone, "LEASED%d", card->myid);
536 sprintf(cmd.parm.setup.eazmsn, "%d", channel + 1);
537 cmd.parm.setup.si1 = 7;
538 cmd.parm.setup.si2 = 0;
539 cmd.parm.setup.plan = 0;
540 cmd.parm.setup.screen = 0;
541 break;
542 case 5:
543 strlcpy(cmd.parm.num, status + 3, sizeof(cmd.parm.num));
544 break;
545 case 6:
546 snprintf(cmd.parm.num, sizeof(cmd.parm.num), "%d",
547 (int) simple_strtoul(status + 7, NULL, 16));
548 break;
549 case 7:
550 status += 3;
551 if (strlen(status) == 4)
552 snprintf(cmd.parm.num, sizeof(cmd.parm.num), "%s%c%c",
553 status + 2, *status, *(status + 1));
554 else
555 strlcpy(cmd.parm.num, status + 1, sizeof(cmd.parm.num));
556 break;
557 case 8:
558 spin_lock_irqsave(&card->lock, flags);
559 card->flags &= ~ICN_FLAGS_B1ACTIVE;
560 icn_free_queue(card, 0);
561 card->rcvidx[0] = 0;
562 spin_unlock_irqrestore(&card->lock, flags); 486 spin_unlock_irqrestore(&card->lock, flags);
563 cmd.arg = 0;
564 cmd.driver = card->myid;
565 card->interface.statcallb(&cmd);
566 cmd.command = ISDN_STAT_DHUP;
567 cmd.arg = 0;
568 cmd.driver = card->myid;
569 card->interface.statcallb(&cmd); 487 card->interface.statcallb(&cmd);
570 cmd.command = ISDN_STAT_BHUP; 488 } else
571 spin_lock_irqsave(&card->lock, flags);
572 card->flags &= ~ICN_FLAGS_B2ACTIVE;
573 icn_free_queue(card, 1);
574 card->rcvidx[1] = 0;
575 spin_unlock_irqrestore(&card->lock, flags); 489 spin_unlock_irqrestore(&card->lock, flags);
576 cmd.arg = 1; 490 break;
577 cmd.driver = card->myid; 491 case 1:
578 card->interface.statcallb(&cmd); 492 spin_lock_irqsave(&card->lock, flags);
579 cmd.command = ISDN_STAT_DHUP; 493 icn_free_queue(card, channel);
580 cmd.arg = 1; 494 card->flags |= (channel) ?
581 cmd.driver = card->myid; 495 ICN_FLAGS_B2ACTIVE : ICN_FLAGS_B1ACTIVE;
582 break; 496 spin_unlock_irqrestore(&card->lock, flags);
497 break;
498 case 2:
499 spin_lock_irqsave(&card->lock, flags);
500 card->flags &= ~((channel) ?
501 ICN_FLAGS_B2ACTIVE : ICN_FLAGS_B1ACTIVE);
502 icn_free_queue(card, channel);
503 card->rcvidx[channel] = 0;
504 spin_unlock_irqrestore(&card->lock, flags);
505 break;
506 case 3:
507 {
508 char *t = status + 6;
509 char *s = strchr(t, ',');
510
511 *s++ = '\0';
512 strlcpy(cmd.parm.setup.phone, t,
513 sizeof(cmd.parm.setup.phone));
514 s = strchr(t = s, ',');
515 *s++ = '\0';
516 if (!strlen(t))
517 cmd.parm.setup.si1 = 0;
518 else
519 cmd.parm.setup.si1 =
520 simple_strtoul(t, NULL, 10);
521 s = strchr(t = s, ',');
522 *s++ = '\0';
523 if (!strlen(t))
524 cmd.parm.setup.si2 = 0;
525 else
526 cmd.parm.setup.si2 =
527 simple_strtoul(t, NULL, 10);
528 strlcpy(cmd.parm.setup.eazmsn, s,
529 sizeof(cmd.parm.setup.eazmsn));
530 }
531 cmd.parm.setup.plan = 0;
532 cmd.parm.setup.screen = 0;
533 break;
534 case 4:
535 sprintf(cmd.parm.setup.phone, "LEASED%d", card->myid);
536 sprintf(cmd.parm.setup.eazmsn, "%d", channel + 1);
537 cmd.parm.setup.si1 = 7;
538 cmd.parm.setup.si2 = 0;
539 cmd.parm.setup.plan = 0;
540 cmd.parm.setup.screen = 0;
541 break;
542 case 5:
543 strlcpy(cmd.parm.num, status + 3, sizeof(cmd.parm.num));
544 break;
545 case 6:
546 snprintf(cmd.parm.num, sizeof(cmd.parm.num), "%d",
547 (int) simple_strtoul(status + 7, NULL, 16));
548 break;
549 case 7:
550 status += 3;
551 if (strlen(status) == 4)
552 snprintf(cmd.parm.num, sizeof(cmd.parm.num), "%s%c%c",
553 status + 2, *status, *(status + 1));
554 else
555 strlcpy(cmd.parm.num, status + 1, sizeof(cmd.parm.num));
556 break;
557 case 8:
558 spin_lock_irqsave(&card->lock, flags);
559 card->flags &= ~ICN_FLAGS_B1ACTIVE;
560 icn_free_queue(card, 0);
561 card->rcvidx[0] = 0;
562 spin_unlock_irqrestore(&card->lock, flags);
563 cmd.arg = 0;
564 cmd.driver = card->myid;
565 card->interface.statcallb(&cmd);
566 cmd.command = ISDN_STAT_DHUP;
567 cmd.arg = 0;
568 cmd.driver = card->myid;
569 card->interface.statcallb(&cmd);
570 cmd.command = ISDN_STAT_BHUP;
571 spin_lock_irqsave(&card->lock, flags);
572 card->flags &= ~ICN_FLAGS_B2ACTIVE;
573 icn_free_queue(card, 1);
574 card->rcvidx[1] = 0;
575 spin_unlock_irqrestore(&card->lock, flags);
576 cmd.arg = 1;
577 cmd.driver = card->myid;
578 card->interface.statcallb(&cmd);
579 cmd.command = ISDN_STAT_DHUP;
580 cmd.arg = 1;
581 cmd.driver = card->myid;
582 break;
583 } 583 }
584 card->interface.statcallb(&cmd); 584 card->interface.statcallb(&cmd);
585 return; 585 return;
586} 586}
587 587
588static void 588static void
589icn_putmsg(icn_card * card, unsigned char c) 589icn_putmsg(icn_card *card, unsigned char c)
590{ 590{
591 ulong flags; 591 ulong flags;
592 592
@@ -688,7 +688,7 @@ icn_polldchan(unsigned long data)
688 add_timer(&card->rb_timer); 688 add_timer(&card->rb_timer);
689 } 689 }
690 /* schedule again */ 690 /* schedule again */
691 mod_timer(&card->st_timer, jiffies+ICN_TIMER_DCREAD); 691 mod_timer(&card->st_timer, jiffies + ICN_TIMER_DCREAD);
692 spin_unlock_irqrestore(&card->lock, flags); 692 spin_unlock_irqrestore(&card->lock, flags);
693} 693}
694 694
@@ -702,7 +702,7 @@ icn_polldchan(unsigned long data)
702 */ 702 */
703 703
704static int 704static int
705icn_sendbuf(int channel, int ack, struct sk_buff *skb, icn_card * card) 705icn_sendbuf(int channel, int ack, struct sk_buff *skb, icn_card *card)
706{ 706{
707 int len = skb->len; 707 int len = skb->len;
708 unsigned long flags; 708 unsigned long flags;
@@ -718,13 +718,13 @@ icn_sendbuf(int channel, int ack, struct sk_buff *skb, icn_card * card)
718 return 0; 718 return 0;
719 if (card->sndcount[channel] > ICN_MAX_SQUEUE) 719 if (card->sndcount[channel] > ICN_MAX_SQUEUE)
720 return 0; 720 return 0;
721 #warning TODO test headroom or use skb->nb to flag ACK 721#warning TODO test headroom or use skb->nb to flag ACK
722 nskb = skb_clone(skb, GFP_ATOMIC); 722 nskb = skb_clone(skb, GFP_ATOMIC);
723 if (nskb) { 723 if (nskb) {
724 /* Push ACK flag as one 724 /* Push ACK flag as one
725 * byte in front of data. 725 * byte in front of data.
726 */ 726 */
727 *(skb_push(nskb, 1)) = ack?1:0; 727 *(skb_push(nskb, 1)) = ack ? 1 : 0;
728 skb_queue_tail(&card->spqueue[channel], nskb); 728 skb_queue_tail(&card->spqueue[channel], nskb);
729 dev_kfree_skb(skb); 729 dev_kfree_skb(skb);
730 } else 730 } else
@@ -785,20 +785,20 @@ icn_check_loader(int cardnumber)
785 */ 785 */
786 786
787#ifdef BOOT_DEBUG 787#ifdef BOOT_DEBUG
788#define SLEEP(sec) { \ 788#define SLEEP(sec) { \
789int slsec = sec; \ 789 int slsec = sec; \
790 printk(KERN_DEBUG "SLEEP(%d)\n",slsec); \ 790 printk(KERN_DEBUG "SLEEP(%d)\n", slsec); \
791 while (slsec) { \ 791 while (slsec) { \
792 msleep_interruptible(1000); \ 792 msleep_interruptible(1000); \
793 slsec--; \ 793 slsec--; \
794 } \ 794 } \
795} 795 }
796#else 796#else
797#define SLEEP(sec) 797#define SLEEP(sec)
798#endif 798#endif
799 799
800static int 800static int
801icn_loadboot(u_char __user * buffer, icn_card * card) 801icn_loadboot(u_char __user *buffer, icn_card *card)
802{ 802{
803 int ret; 803 int ret;
804 u_char *codebuf; 804 u_char *codebuf;
@@ -896,14 +896,14 @@ icn_loadboot(u_char __user * buffer, icn_card * card)
896 SLEEP(1); 896 SLEEP(1);
897 ret = (icn_check_loader(1)); 897 ret = (icn_check_loader(1));
898 898
899 out_kfree: 899out_kfree:
900 kfree(codebuf); 900 kfree(codebuf);
901 out: 901out:
902 return ret; 902 return ret;
903} 903}
904 904
905static int 905static int
906icn_loadproto(u_char __user * buffer, icn_card * card) 906icn_loadproto(u_char __user *buffer, icn_card *card)
907{ 907{
908 register u_char __user *p = buffer; 908 register u_char __user *p = buffer;
909 u_char codebuf[256]; 909 u_char codebuf[256];
@@ -1004,7 +1004,7 @@ icn_loadproto(u_char __user * buffer, icn_card * card)
1004 1004
1005/* Read the Status-replies from the Interface */ 1005/* Read the Status-replies from the Interface */
1006static int 1006static int
1007icn_readstatus(u_char __user *buf, int len, icn_card * card) 1007icn_readstatus(u_char __user *buf, int len, icn_card *card)
1008{ 1008{
1009 int count; 1009 int count;
1010 u_char __user *p; 1010 u_char __user *p;
@@ -1022,7 +1022,7 @@ icn_readstatus(u_char __user *buf, int len, icn_card * card)
1022 1022
1023/* Put command-strings into the command-queue of the Interface */ 1023/* Put command-strings into the command-queue of the Interface */
1024static int 1024static int
1025icn_writecmd(const u_char * buf, int len, int user, icn_card * card) 1025icn_writecmd(const u_char *buf, int len, int user, icn_card *card)
1026{ 1026{
1027 int mch = card->secondhalf ? 2 : 0; 1027 int mch = card->secondhalf ? 2 : 0;
1028 int pp; 1028 int pp;
@@ -1057,9 +1057,9 @@ icn_writecmd(const u_char * buf, int len, int user, icn_card * card)
1057 1057
1058 icn_putmsg(card, '>'); 1058 icn_putmsg(card, '>');
1059 for (p = msg, pp = readb(&cmd_i), i = count; i > 0; i--, p++, pp 1059 for (p = msg, pp = readb(&cmd_i), i = count; i > 0; i--, p++, pp
1060 ++) { 1060 ++) {
1061 writeb((*p == '\n') ? 0xff : *p, 1061 writeb((*p == '\n') ? 0xff : *p,
1062 &dev.shmem->comm_buffers.pcio_buf[pp & 0xff]); 1062 &dev.shmem->comm_buffers.pcio_buf[pp & 0xff]);
1063 len--; 1063 len--;
1064 xcount++; 1064 xcount++;
1065 icn_putmsg(card, *p); 1065 icn_putmsg(card, *p);
@@ -1093,7 +1093,7 @@ icn_writecmd(const u_char * buf, int len, int user, icn_card * card)
1093 * Delete card's pending timers, send STOP to linklevel 1093 * Delete card's pending timers, send STOP to linklevel
1094 */ 1094 */
1095static void 1095static void
1096icn_stopcard(icn_card * card) 1096icn_stopcard(icn_card *card)
1097{ 1097{
1098 unsigned long flags; 1098 unsigned long flags;
1099 isdn_ctrl cmd; 1099 isdn_ctrl cmd;
@@ -1150,7 +1150,7 @@ icn_disable_cards(void)
1150} 1150}
1151 1151
1152static int 1152static int
1153icn_command(isdn_ctrl * c, icn_card * card) 1153icn_command(isdn_ctrl *c, icn_card *card)
1154{ 1154{
1155 ulong a; 1155 ulong a;
1156 ulong flags; 1156 ulong flags;
@@ -1161,275 +1161,275 @@ icn_command(isdn_ctrl * c, icn_card * card)
1161 char __user *arg; 1161 char __user *arg;
1162 1162
1163 switch (c->command) { 1163 switch (c->command) {
1164 case ISDN_CMD_IOCTL: 1164 case ISDN_CMD_IOCTL:
1165 memcpy(&a, c->parm.num, sizeof(ulong)); 1165 memcpy(&a, c->parm.num, sizeof(ulong));
1166 arg = (char __user *)a; 1166 arg = (char __user *)a;
1167 switch (c->arg) { 1167 switch (c->arg) {
1168 case ICN_IOCTL_SETMMIO: 1168 case ICN_IOCTL_SETMMIO:
1169 if (dev.memaddr != (a & 0x0ffc000)) { 1169 if (dev.memaddr != (a & 0x0ffc000)) {
1170 if (!request_mem_region(a & 0x0ffc000, 0x4000, "icn-isdn (all cards)")) { 1170 if (!request_mem_region(a & 0x0ffc000, 0x4000, "icn-isdn (all cards)")) {
1171 printk(KERN_WARNING 1171 printk(KERN_WARNING
1172 "icn: memory at 0x%08lx in use.\n", 1172 "icn: memory at 0x%08lx in use.\n",
1173 a & 0x0ffc000); 1173 a & 0x0ffc000);
1174 return -EINVAL; 1174 return -EINVAL;
1175 } 1175 }
1176 release_mem_region(a & 0x0ffc000, 0x4000); 1176 release_mem_region(a & 0x0ffc000, 0x4000);
1177 icn_stopallcards(); 1177 icn_stopallcards();
1178 spin_lock_irqsave(&card->lock, flags); 1178 spin_lock_irqsave(&card->lock, flags);
1179 if (dev.mvalid) { 1179 if (dev.mvalid) {
1180 iounmap(dev.shmem); 1180 iounmap(dev.shmem);
1181 release_mem_region(dev.memaddr, 0x4000); 1181 release_mem_region(dev.memaddr, 0x4000);
1182 } 1182 }
1183 dev.mvalid = 0; 1183 dev.mvalid = 0;
1184 dev.memaddr = a & 0x0ffc000; 1184 dev.memaddr = a & 0x0ffc000;
1185 spin_unlock_irqrestore(&card->lock, flags); 1185 spin_unlock_irqrestore(&card->lock, flags);
1186 printk(KERN_INFO 1186 printk(KERN_INFO
1187 "icn: (%s) mmio set to 0x%08lx\n", 1187 "icn: (%s) mmio set to 0x%08lx\n",
1188 CID, 1188 CID,
1189 dev.memaddr); 1189 dev.memaddr);
1190 } 1190 }
1191 break; 1191 break;
1192 case ICN_IOCTL_GETMMIO: 1192 case ICN_IOCTL_GETMMIO:
1193 return (long) dev.memaddr; 1193 return (long) dev.memaddr;
1194 case ICN_IOCTL_SETPORT: 1194 case ICN_IOCTL_SETPORT:
1195 if (a == 0x300 || a == 0x310 || a == 0x320 || a == 0x330 1195 if (a == 0x300 || a == 0x310 || a == 0x320 || a == 0x330
1196 || a == 0x340 || a == 0x350 || a == 0x360 || 1196 || a == 0x340 || a == 0x350 || a == 0x360 ||
1197 a == 0x308 || a == 0x318 || a == 0x328 || a == 0x338 1197 a == 0x308 || a == 0x318 || a == 0x328 || a == 0x338
1198 || a == 0x348 || a == 0x358 || a == 0x368) { 1198 || a == 0x348 || a == 0x358 || a == 0x368) {
1199 if (card->port != (unsigned short) a) { 1199 if (card->port != (unsigned short) a) {
1200 if (!request_region((unsigned short) a, ICN_PORTLEN, "icn-isdn")) { 1200 if (!request_region((unsigned short) a, ICN_PORTLEN, "icn-isdn")) {
1201 printk(KERN_WARNING 1201 printk(KERN_WARNING
1202 "icn: (%s) ports 0x%03x-0x%03x in use.\n", 1202 "icn: (%s) ports 0x%03x-0x%03x in use.\n",
1203 CID, (int) a, (int) a + ICN_PORTLEN); 1203 CID, (int) a, (int) a + ICN_PORTLEN);
1204 return -EINVAL;
1205 }
1206 release_region((unsigned short) a, ICN_PORTLEN);
1207 icn_stopcard(card);
1208 spin_lock_irqsave(&card->lock, flags);
1209 if (card->rvalid)
1210 release_region(card->port, ICN_PORTLEN);
1211 card->port = (unsigned short) a;
1212 card->rvalid = 0;
1213 if (card->doubleS0) {
1214 card->other->port = (unsigned short) a;
1215 card->other->rvalid = 0;
1216 }
1217 spin_unlock_irqrestore(&card->lock, flags);
1218 printk(KERN_INFO
1219 "icn: (%s) port set to 0x%03x\n",
1220 CID, card->port);
1221 }
1222 } else
1223 return -EINVAL; 1204 return -EINVAL;
1224 break;
1225 case ICN_IOCTL_GETPORT:
1226 return (int) card->port;
1227 case ICN_IOCTL_GETDOUBLE:
1228 return (int) card->doubleS0;
1229 case ICN_IOCTL_DEBUGVAR:
1230 if (copy_to_user(arg,
1231 &card,
1232 sizeof(ulong)))
1233 return -EFAULT;
1234 a += sizeof(ulong);
1235 {
1236 ulong l = (ulong) & dev;
1237 if (copy_to_user(arg,
1238 &l,
1239 sizeof(ulong)))
1240 return -EFAULT;
1241 } 1205 }
1242 return 0; 1206 release_region((unsigned short) a, ICN_PORTLEN);
1243 case ICN_IOCTL_LOADBOOT:
1244 if (dev.firstload) {
1245 icn_disable_cards();
1246 dev.firstload = 0;
1247 }
1248 icn_stopcard(card);
1249 return (icn_loadboot(arg, card));
1250 case ICN_IOCTL_LOADPROTO:
1251 icn_stopcard(card); 1207 icn_stopcard(card);
1252 if ((i = (icn_loadproto(arg, card)))) 1208 spin_lock_irqsave(&card->lock, flags);
1253 return i; 1209 if (card->rvalid)
1254 if (card->doubleS0) 1210 release_region(card->port, ICN_PORTLEN);
1255 i = icn_loadproto(arg + ICN_CODE_STAGE2, card->other); 1211 card->port = (unsigned short) a;
1256 return i; 1212 card->rvalid = 0;
1257 break; 1213 if (card->doubleS0) {
1258 case ICN_IOCTL_ADDCARD: 1214 card->other->port = (unsigned short) a;
1259 if (!dev.firstload) 1215 card->other->rvalid = 0;
1260 return -EBUSY;
1261 if (copy_from_user(&cdef,
1262 arg,
1263 sizeof(cdef)))
1264 return -EFAULT;
1265 return (icn_addcard(cdef.port, cdef.id1, cdef.id2));
1266 break;
1267 case ICN_IOCTL_LEASEDCFG:
1268 if (a) {
1269 if (!card->leased) {
1270 card->leased = 1;
1271 while (card->ptype == ISDN_PTYPE_UNKNOWN) {
1272 msleep_interruptible(ICN_BOOT_TIMEOUT1);
1273 }
1274 msleep_interruptible(ICN_BOOT_TIMEOUT1);
1275 sprintf(cbuf, "00;FV2ON\n01;EAZ%c\n02;EAZ%c\n",
1276 (a & 1)?'1':'C', (a & 2)?'2':'C');
1277 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1278 printk(KERN_INFO
1279 "icn: (%s) Leased-line mode enabled\n",
1280 CID);
1281 cmd.command = ISDN_STAT_RUN;
1282 cmd.driver = card->myid;
1283 cmd.arg = 0;
1284 card->interface.statcallb(&cmd);
1285 }
1286 } else {
1287 if (card->leased) {
1288 card->leased = 0;
1289 sprintf(cbuf, "00;FV2OFF\n");
1290 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1291 printk(KERN_INFO
1292 "icn: (%s) Leased-line mode disabled\n",
1293 CID);
1294 cmd.command = ISDN_STAT_RUN;
1295 cmd.driver = card->myid;
1296 cmd.arg = 0;
1297 card->interface.statcallb(&cmd);
1298 }
1299 } 1216 }
1300 return 0; 1217 spin_unlock_irqrestore(&card->lock, flags);
1301 default: 1218 printk(KERN_INFO
1302 return -EINVAL; 1219 "icn: (%s) port set to 0x%03x\n",
1303 } 1220 CID, card->port);
1221 }
1222 } else
1223 return -EINVAL;
1304 break; 1224 break;
1305 case ISDN_CMD_DIAL: 1225 case ICN_IOCTL_GETPORT:
1306 if (!(card->flags & ICN_FLAGS_RUNNING)) 1226 return (int) card->port;
1307 return -ENODEV; 1227 case ICN_IOCTL_GETDOUBLE:
1308 if (card->leased) 1228 return (int) card->doubleS0;
1309 break; 1229 case ICN_IOCTL_DEBUGVAR:
1310 if ((c->arg & 255) < ICN_BCH) { 1230 if (copy_to_user(arg,
1311 char *p; 1231 &card,
1312 char dial[50]; 1232 sizeof(ulong)))
1313 char dcode[4]; 1233 return -EFAULT;
1314 1234 a += sizeof(ulong);
1315 a = c->arg; 1235 {
1316 p = c->parm.setup.phone; 1236 ulong l = (ulong)&dev;
1317 if (*p == 's' || *p == 'S') { 1237 if (copy_to_user(arg,
1318 /* Dial for SPV */ 1238 &l,
1319 p++; 1239 sizeof(ulong)))
1320 strcpy(dcode, "SCA"); 1240 return -EFAULT;
1321 } else
1322 /* Normal Dial */
1323 strcpy(dcode, "CAL");
1324 strcpy(dial, p);
1325 sprintf(cbuf, "%02d;D%s_R%s,%02d,%02d,%s\n", (int) (a + 1),
1326 dcode, dial, c->parm.setup.si1,
1327 c->parm.setup.si2, c->parm.setup.eazmsn);
1328 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1329 } 1241 }
1242 return 0;
1243 case ICN_IOCTL_LOADBOOT:
1244 if (dev.firstload) {
1245 icn_disable_cards();
1246 dev.firstload = 0;
1247 }
1248 icn_stopcard(card);
1249 return (icn_loadboot(arg, card));
1250 case ICN_IOCTL_LOADPROTO:
1251 icn_stopcard(card);
1252 if ((i = (icn_loadproto(arg, card))))
1253 return i;
1254 if (card->doubleS0)
1255 i = icn_loadproto(arg + ICN_CODE_STAGE2, card->other);
1256 return i;
1257 break;
1258 case ICN_IOCTL_ADDCARD:
1259 if (!dev.firstload)
1260 return -EBUSY;
1261 if (copy_from_user(&cdef,
1262 arg,
1263 sizeof(cdef)))
1264 return -EFAULT;
1265 return (icn_addcard(cdef.port, cdef.id1, cdef.id2));
1330 break; 1266 break;
1331 case ISDN_CMD_ACCEPTD: 1267 case ICN_IOCTL_LEASEDCFG:
1332 if (!(card->flags & ICN_FLAGS_RUNNING)) 1268 if (a) {
1333 return -ENODEV; 1269 if (!card->leased) {
1334 if (c->arg < ICN_BCH) { 1270 card->leased = 1;
1335 a = c->arg + 1; 1271 while (card->ptype == ISDN_PTYPE_UNKNOWN) {
1336 if (card->fw_rev >= 300) { 1272 msleep_interruptible(ICN_BOOT_TIMEOUT1);
1337 switch (card->l2_proto[a - 1]) {
1338 case ISDN_PROTO_L2_X75I:
1339 sprintf(cbuf, "%02d;BX75\n", (int) a);
1340 break;
1341 case ISDN_PROTO_L2_HDLC:
1342 sprintf(cbuf, "%02d;BTRA\n", (int) a);
1343 break;
1344 } 1273 }
1274 msleep_interruptible(ICN_BOOT_TIMEOUT1);
1275 sprintf(cbuf, "00;FV2ON\n01;EAZ%c\n02;EAZ%c\n",
1276 (a & 1) ? '1' : 'C', (a & 2) ? '2' : 'C');
1345 i = icn_writecmd(cbuf, strlen(cbuf), 0, card); 1277 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1278 printk(KERN_INFO
1279 "icn: (%s) Leased-line mode enabled\n",
1280 CID);
1281 cmd.command = ISDN_STAT_RUN;
1282 cmd.driver = card->myid;
1283 cmd.arg = 0;
1284 card->interface.statcallb(&cmd);
1285 }
1286 } else {
1287 if (card->leased) {
1288 card->leased = 0;
1289 sprintf(cbuf, "00;FV2OFF\n");
1290 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1291 printk(KERN_INFO
1292 "icn: (%s) Leased-line mode disabled\n",
1293 CID);
1294 cmd.command = ISDN_STAT_RUN;
1295 cmd.driver = card->myid;
1296 cmd.arg = 0;
1297 card->interface.statcallb(&cmd);
1346 } 1298 }
1347 sprintf(cbuf, "%02d;DCON_R\n", (int) a);
1348 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1349 } 1299 }
1300 return 0;
1301 default:
1302 return -EINVAL;
1303 }
1304 break;
1305 case ISDN_CMD_DIAL:
1306 if (!(card->flags & ICN_FLAGS_RUNNING))
1307 return -ENODEV;
1308 if (card->leased)
1350 break; 1309 break;
1351 case ISDN_CMD_ACCEPTB: 1310 if ((c->arg & 255) < ICN_BCH) {
1352 if (!(card->flags & ICN_FLAGS_RUNNING)) 1311 char *p;
1353 return -ENODEV; 1312 char dial[50];
1354 if (c->arg < ICN_BCH) { 1313 char dcode[4];
1355 a = c->arg + 1; 1314
1356 if (card->fw_rev >= 300) 1315 a = c->arg;
1357 switch (card->l2_proto[a - 1]) { 1316 p = c->parm.setup.phone;
1358 case ISDN_PROTO_L2_X75I: 1317 if (*p == 's' || *p == 'S') {
1359 sprintf(cbuf, "%02d;BCON_R,BX75\n", (int) a); 1318 /* Dial for SPV */
1360 break; 1319 p++;
1361 case ISDN_PROTO_L2_HDLC: 1320 strcpy(dcode, "SCA");
1362 sprintf(cbuf, "%02d;BCON_R,BTRA\n", (int) a); 1321 } else
1363 break; 1322 /* Normal Dial */
1364 } else 1323 strcpy(dcode, "CAL");
1365 sprintf(cbuf, "%02d;BCON_R\n", (int) a); 1324 strcpy(dial, p);
1325 sprintf(cbuf, "%02d;D%s_R%s,%02d,%02d,%s\n", (int) (a + 1),
1326 dcode, dial, c->parm.setup.si1,
1327 c->parm.setup.si2, c->parm.setup.eazmsn);
1328 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1329 }
1330 break;
1331 case ISDN_CMD_ACCEPTD:
1332 if (!(card->flags & ICN_FLAGS_RUNNING))
1333 return -ENODEV;
1334 if (c->arg < ICN_BCH) {
1335 a = c->arg + 1;
1336 if (card->fw_rev >= 300) {
1337 switch (card->l2_proto[a - 1]) {
1338 case ISDN_PROTO_L2_X75I:
1339 sprintf(cbuf, "%02d;BX75\n", (int) a);
1340 break;
1341 case ISDN_PROTO_L2_HDLC:
1342 sprintf(cbuf, "%02d;BTRA\n", (int) a);
1343 break;
1344 }
1366 i = icn_writecmd(cbuf, strlen(cbuf), 0, card); 1345 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1367 } 1346 }
1347 sprintf(cbuf, "%02d;DCON_R\n", (int) a);
1348 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1349 }
1350 break;
1351 case ISDN_CMD_ACCEPTB:
1352 if (!(card->flags & ICN_FLAGS_RUNNING))
1353 return -ENODEV;
1354 if (c->arg < ICN_BCH) {
1355 a = c->arg + 1;
1356 if (card->fw_rev >= 300)
1357 switch (card->l2_proto[a - 1]) {
1358 case ISDN_PROTO_L2_X75I:
1359 sprintf(cbuf, "%02d;BCON_R,BX75\n", (int) a);
1360 break;
1361 case ISDN_PROTO_L2_HDLC:
1362 sprintf(cbuf, "%02d;BCON_R,BTRA\n", (int) a);
1363 break;
1364 } else
1365 sprintf(cbuf, "%02d;BCON_R\n", (int) a);
1366 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1367 }
1368 break;
1369 case ISDN_CMD_HANGUP:
1370 if (!(card->flags & ICN_FLAGS_RUNNING))
1371 return -ENODEV;
1372 if (c->arg < ICN_BCH) {
1373 a = c->arg + 1;
1374 sprintf(cbuf, "%02d;BDIS_R\n%02d;DDIS_R\n", (int) a, (int) a);
1375 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1376 }
1377 break;
1378 case ISDN_CMD_SETEAZ:
1379 if (!(card->flags & ICN_FLAGS_RUNNING))
1380 return -ENODEV;
1381 if (card->leased)
1368 break; 1382 break;
1369 case ISDN_CMD_HANGUP: 1383 if (c->arg < ICN_BCH) {
1370 if (!(card->flags & ICN_FLAGS_RUNNING)) 1384 a = c->arg + 1;
1371 return -ENODEV; 1385 if (card->ptype == ISDN_PTYPE_EURO) {
1372 if (c->arg < ICN_BCH) { 1386 sprintf(cbuf, "%02d;MS%s%s\n", (int) a,
1373 a = c->arg + 1; 1387 c->parm.num[0] ? "N" : "ALL", c->parm.num);
1374 sprintf(cbuf, "%02d;BDIS_R\n%02d;DDIS_R\n", (int) a, (int) a); 1388 } else
1375 i = icn_writecmd(cbuf, strlen(cbuf), 0, card); 1389 sprintf(cbuf, "%02d;EAZ%s\n", (int) a,
1376 } 1390 c->parm.num[0] ? (char *)(c->parm.num) : "0123456789");
1391 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1392 }
1393 break;
1394 case ISDN_CMD_CLREAZ:
1395 if (!(card->flags & ICN_FLAGS_RUNNING))
1396 return -ENODEV;
1397 if (card->leased)
1377 break; 1398 break;
1378 case ISDN_CMD_SETEAZ: 1399 if (c->arg < ICN_BCH) {
1379 if (!(card->flags & ICN_FLAGS_RUNNING)) 1400 a = c->arg + 1;
1380 return -ENODEV; 1401 if (card->ptype == ISDN_PTYPE_EURO)
1381 if (card->leased) 1402 sprintf(cbuf, "%02d;MSNC\n", (int) a);
1403 else
1404 sprintf(cbuf, "%02d;EAZC\n", (int) a);
1405 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1406 }
1407 break;
1408 case ISDN_CMD_SETL2:
1409 if (!(card->flags & ICN_FLAGS_RUNNING))
1410 return -ENODEV;
1411 if ((c->arg & 255) < ICN_BCH) {
1412 a = c->arg;
1413 switch (a >> 8) {
1414 case ISDN_PROTO_L2_X75I:
1415 sprintf(cbuf, "%02d;BX75\n", (int) (a & 255) + 1);
1382 break; 1416 break;
1383 if (c->arg < ICN_BCH) { 1417 case ISDN_PROTO_L2_HDLC:
1384 a = c->arg + 1; 1418 sprintf(cbuf, "%02d;BTRA\n", (int) (a & 255) + 1);
1385 if (card->ptype == ISDN_PTYPE_EURO) {
1386 sprintf(cbuf, "%02d;MS%s%s\n", (int) a,
1387 c->parm.num[0] ? "N" : "ALL", c->parm.num);
1388 } else
1389 sprintf(cbuf, "%02d;EAZ%s\n", (int) a,
1390 c->parm.num[0] ? (char *)(c->parm.num) : "0123456789");
1391 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1392 }
1393 break;
1394 case ISDN_CMD_CLREAZ:
1395 if (!(card->flags & ICN_FLAGS_RUNNING))
1396 return -ENODEV;
1397 if (card->leased)
1398 break; 1419 break;
1399 if (c->arg < ICN_BCH) { 1420 default:
1400 a = c->arg + 1; 1421 return -EINVAL;
1401 if (card->ptype == ISDN_PTYPE_EURO)
1402 sprintf(cbuf, "%02d;MSNC\n", (int) a);
1403 else
1404 sprintf(cbuf, "%02d;EAZC\n", (int) a);
1405 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1406 }
1407 break;
1408 case ISDN_CMD_SETL2:
1409 if (!(card->flags & ICN_FLAGS_RUNNING))
1410 return -ENODEV;
1411 if ((c->arg & 255) < ICN_BCH) {
1412 a = c->arg;
1413 switch (a >> 8) {
1414 case ISDN_PROTO_L2_X75I:
1415 sprintf(cbuf, "%02d;BX75\n", (int) (a & 255) + 1);
1416 break;
1417 case ISDN_PROTO_L2_HDLC:
1418 sprintf(cbuf, "%02d;BTRA\n", (int) (a & 255) + 1);
1419 break;
1420 default:
1421 return -EINVAL;
1422 }
1423 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1424 card->l2_proto[a & 255] = (a >> 8);
1425 } 1422 }
1426 break; 1423 i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
1427 case ISDN_CMD_SETL3: 1424 card->l2_proto[a & 255] = (a >> 8);
1428 if (!(card->flags & ICN_FLAGS_RUNNING)) 1425 }
1429 return -ENODEV; 1426 break;
1430 return 0; 1427 case ISDN_CMD_SETL3:
1431 default: 1428 if (!(card->flags & ICN_FLAGS_RUNNING))
1432 return -EINVAL; 1429 return -ENODEV;
1430 return 0;
1431 default:
1432 return -EINVAL;
1433 } 1433 }
1434 return 0; 1434 return 0;
1435} 1435}
@@ -1454,7 +1454,7 @@ icn_findcard(int driverid)
1454 * Wrapper functions for interface to linklevel 1454 * Wrapper functions for interface to linklevel
1455 */ 1455 */
1456static int 1456static int
1457if_command(isdn_ctrl * c) 1457if_command(isdn_ctrl *c)
1458{ 1458{
1459 icn_card *card = icn_findcard(c->driver); 1459 icn_card *card = icn_findcard(c->driver);
1460 1460
@@ -1537,9 +1537,9 @@ icn_initcard(int port, char *id)
1537 card->interface.writecmd = if_writecmd; 1537 card->interface.writecmd = if_writecmd;
1538 card->interface.readstat = if_readstatus; 1538 card->interface.readstat = if_readstatus;
1539 card->interface.features = ISDN_FEATURE_L2_X75I | 1539 card->interface.features = ISDN_FEATURE_L2_X75I |
1540 ISDN_FEATURE_L2_HDLC | 1540 ISDN_FEATURE_L2_HDLC |
1541 ISDN_FEATURE_L3_TRANS | 1541 ISDN_FEATURE_L3_TRANS |
1542 ISDN_FEATURE_P_UNKNOWN; 1542 ISDN_FEATURE_P_UNKNOWN;
1543 card->ptype = ISDN_PTYPE_UNKNOWN; 1543 card->ptype = ISDN_PTYPE_UNKNOWN;
1544 strlcpy(card->interface.id, id, sizeof(card->interface.id)); 1544 strlcpy(card->interface.id, id, sizeof(card->interface.id));
1545 card->msg_buf_write = card->msg_buf; 1545 card->msg_buf_write = card->msg_buf;
@@ -1619,7 +1619,7 @@ icn_setup(char *line)
1619 icn_id2 = sid2; 1619 icn_id2 = sid2;
1620 } 1620 }
1621 } 1621 }
1622 return(1); 1622 return (1);
1623} 1623}
1624__setup("icn=", icn_setup); 1624__setup("icn=", icn_setup);
1625#endif /* MODULE */ 1625#endif /* MODULE */