Lines Matching refs:info
61 isdn_tty_try_read(modem_info *info, struct sk_buff *skb) in isdn_tty_try_read() argument
63 struct tty_port *port = &info->port; in isdn_tty_try_read()
68 if (!info->online) in isdn_tty_try_read()
71 if (!(info->mcr & UART_MCR_RTS)) in isdn_tty_try_read()
104 if (info->emu.mdmreg[REG_CPPP] & BIT_CPPP) in isdn_tty_try_read()
125 modem_info *info; in isdn_tty_readmodem() local
132 info = &dev->mdm.info[midx]; in isdn_tty_readmodem()
133 if (!info->online) in isdn_tty_readmodem()
138 isdn_audio_eval_dtmf(info); in isdn_tty_readmodem()
139 if ((info->vonline & 1) && (info->emu.vpar[1])) in isdn_tty_readmodem()
140 isdn_audio_eval_silence(info); in isdn_tty_readmodem()
142 if (info->mcr & UART_MCR_RTS) { in isdn_tty_readmodem()
144 if (!(info->emu.mdmreg[REG_CPPP] & BIT_CPPP)) in isdn_tty_readmodem()
145 r = isdn_readbchan_tty(info->isdn_driver, in isdn_tty_readmodem()
146 info->isdn_channel, in isdn_tty_readmodem()
147 &info->port, 0); in isdn_tty_readmodem()
149 r = isdn_readbchan_tty(info->isdn_driver, in isdn_tty_readmodem()
150 info->isdn_channel, in isdn_tty_readmodem()
151 &info->port, 1); in isdn_tty_readmodem()
153 tty_flip_buffer_push(&info->port); in isdn_tty_readmodem()
158 info->rcvsched = 0; in isdn_tty_readmodem()
161 info->rcvsched = 1; in isdn_tty_readmodem()
175 modem_info *info; in isdn_tty_rcv_skb() local
181 info = &dev->mdm.info[midx]; in isdn_tty_rcv_skb()
185 if ((info->vonline) && (!info->emu.vpar[4])) in isdn_tty_rcv_skb()
186 isdn_audio_calc_dtmf(info, skb->data, skb->len, ifmt); in isdn_tty_rcv_skb()
187 if ((info->vonline & 1) && (info->emu.vpar[1])) in isdn_tty_rcv_skb()
188 isdn_audio_calc_silence(info, skb->data, skb->len, ifmt); in isdn_tty_rcv_skb()
190 if ((info->online < 2) in isdn_tty_rcv_skb()
192 && (!(info->vonline & 1)) in isdn_tty_rcv_skb()
199 if (info->emu.mdmreg[REG_T70] & BIT_T70) { in isdn_tty_rcv_skb()
200 if (info->emu.mdmreg[REG_T70] & BIT_T70_EXT) { in isdn_tty_rcv_skb()
215 if (info->vonline & 1) { in isdn_tty_rcv_skb()
217 switch (info->emu.vpar[3]) { in isdn_tty_rcv_skb()
225 skb_trim(skb, isdn_audio_xlaw2adpcm(info->adpcmr, in isdn_tty_rcv_skb()
247 if (info->faxonline & 2) { in isdn_tty_rcv_skb()
248 isdn_tty_fax_bitorder(info, skb); in isdn_tty_rcv_skb()
256 spin_lock_irqsave(&info->readlock, flags); in isdn_tty_rcv_skb()
258 if (isdn_tty_try_read(info, skb)) { in isdn_tty_rcv_skb()
259 spin_unlock_irqrestore(&info->readlock, flags); in isdn_tty_rcv_skb()
272 spin_unlock_irqrestore(&info->readlock, flags); in isdn_tty_rcv_skb()
274 if ((dev->modempoll) && (info->rcvsched)) in isdn_tty_rcv_skb()
280 isdn_tty_cleanup_xmit(modem_info *info) in isdn_tty_cleanup_xmit() argument
282 skb_queue_purge(&info->xmit_queue); in isdn_tty_cleanup_xmit()
284 skb_queue_purge(&info->dtmf_queue); in isdn_tty_cleanup_xmit()
289 isdn_tty_tint(modem_info *info) in isdn_tty_tint() argument
291 struct sk_buff *skb = skb_dequeue(&info->xmit_queue); in isdn_tty_tint()
297 if ((slen = isdn_writebuf_skb_stub(info->isdn_driver, in isdn_tty_tint()
298 info->isdn_channel, 1, skb)) == len) { in isdn_tty_tint()
299 struct tty_struct *tty = info->port.tty; in isdn_tty_tint()
300 info->send_outstanding++; in isdn_tty_tint()
301 info->msr &= ~UART_MSR_CTS; in isdn_tty_tint()
302 info->lsr &= ~UART_LSR_TEMT; in isdn_tty_tint()
311 skb_queue_head(&info->xmit_queue, skb); in isdn_tty_tint()
330 isdn_tty_handleDLEdown(modem_info *info, atemu *m, int len) in isdn_tty_handleDLEdown() argument
332 unsigned char *p = &info->port.xmit_buf[info->xmit_count]; in isdn_tty_handleDLEdown()
348 info->vonline |= 4; in isdn_tty_handleDLEdown()
352 info->vonline &= ~1; in isdn_tty_handleDLEdown()
356 info->line); in isdn_tty_handleDLEdown()
358 isdn_tty_at_cout("\020\003", info); in isdn_tty_handleDLEdown()
359 if (!info->vonline) { in isdn_tty_handleDLEdown()
363 info->line); in isdn_tty_handleDLEdown()
365 isdn_tty_at_cout("\r\nVCON\r\n", info); in isdn_tty_handleDLEdown()
421 isdn_tty_senddown(modem_info *info) in isdn_tty_senddown() argument
431 if (info->vonline & 4) { in isdn_tty_senddown()
432 info->vonline &= ~6; in isdn_tty_senddown()
433 if (!info->vonline) { in isdn_tty_senddown()
437 info->line); in isdn_tty_senddown()
439 isdn_tty_at_cout("\r\nVCON\r\n", info); in isdn_tty_senddown()
443 if (!(buflen = info->xmit_count)) in isdn_tty_senddown()
445 if ((info->emu.mdmreg[REG_CTS] & BIT_CTS) != 0) in isdn_tty_senddown()
446 info->msr &= ~UART_MSR_CTS; in isdn_tty_senddown()
447 info->lsr &= ~UART_LSR_TEMT; in isdn_tty_senddown()
452 atomic_inc(&info->xmit_lock); in isdn_tty_senddown()
453 if (!(atomic_dec_and_test(&info->xmit_lock))) in isdn_tty_senddown()
455 if (info->isdn_driver < 0) { in isdn_tty_senddown()
456 info->xmit_count = 0; in isdn_tty_senddown()
459 skb_res = dev->drv[info->isdn_driver]->interface->hl_hdrlen + 4; in isdn_tty_senddown()
461 if (info->vonline & 2) in isdn_tty_senddown()
462 audio_len = buflen * voice_cf[info->emu.vpar[3]]; in isdn_tty_senddown()
472 info->line); in isdn_tty_senddown()
476 memcpy(skb_put(skb, buflen), info->port.xmit_buf, buflen); in isdn_tty_senddown()
477 info->xmit_count = 0; in isdn_tty_senddown()
479 if (info->vonline & 2) { in isdn_tty_senddown()
489 switch (info->emu.vpar[3]) { in isdn_tty_senddown()
496 audio_len = isdn_audio_adpcm2xlaw(info->adpcms, in isdn_tty_senddown()
519 if (info->emu.mdmreg[REG_T70] & BIT_T70) { in isdn_tty_senddown()
521 if (info->emu.mdmreg[REG_T70] & BIT_T70_EXT) in isdn_tty_senddown()
526 skb_queue_tail(&info->xmit_queue, skb); in isdn_tty_senddown()
545 modem_info *info = (modem_info *) data; in isdn_tty_modem_do_ncarrier() local
546 isdn_tty_modem_result(RESULT_NO_CARRIER, info); in isdn_tty_modem_do_ncarrier()
555 isdn_tty_modem_ncarrier(modem_info *info) in isdn_tty_modem_ncarrier() argument
557 if (info->ncarrier) { in isdn_tty_modem_ncarrier()
558 info->nc_timer.expires = jiffies + HZ; in isdn_tty_modem_ncarrier()
559 add_timer(&info->nc_timer); in isdn_tty_modem_ncarrier()
596 isdn_tty_dial(char *n, modem_info *info, atemu *m) in isdn_tty_dial() argument
628 isdn_tty_modem_result(RESULT_NO_DIALTONE, info); in isdn_tty_dial()
630 info->isdn_driver = dev->drvmap[i]; in isdn_tty_dial()
631 info->isdn_channel = dev->chanmap[i]; in isdn_tty_dial()
632 info->drv_index = i; in isdn_tty_dial()
633 dev->m_idx[i] = info->line; in isdn_tty_dial()
635 info->last_dir = 1; in isdn_tty_dial()
636 strcpy(info->last_num, n); in isdn_tty_dial()
639 cmd.driver = info->isdn_driver; in isdn_tty_dial()
640 cmd.arg = info->isdn_channel; in isdn_tty_dial()
643 strcpy(cmd.parm.num, isdn_map_eaz2msn(m->msn, info->isdn_driver)); in isdn_tty_dial()
644 cmd.driver = info->isdn_driver; in isdn_tty_dial()
647 cmd.driver = info->isdn_driver; in isdn_tty_dial()
649 info->last_l2 = l2; in isdn_tty_dial()
650 cmd.arg = info->isdn_channel + (l2 << 8); in isdn_tty_dial()
652 cmd.driver = info->isdn_driver; in isdn_tty_dial()
654 cmd.arg = info->isdn_channel + (m->mdmreg[REG_L3PROT] << 8); in isdn_tty_dial()
657 cmd.parm.fax = info->fax; in isdn_tty_dial()
658 info->fax->direction = ISDN_TTY_FAX_CONN_OUT; in isdn_tty_dial()
662 cmd.driver = info->isdn_driver; in isdn_tty_dial()
663 cmd.arg = info->isdn_channel; in isdn_tty_dial()
666 isdn_map_eaz2msn(m->msn, info->isdn_driver)); in isdn_tty_dial()
670 info->dialing = 1; in isdn_tty_dial()
671 info->emu.carrierwait = 0; in isdn_tty_dial()
684 isdn_tty_modem_hup(modem_info *info, int local) in isdn_tty_modem_hup() argument
689 if (!info) in isdn_tty_modem_hup()
692 di = info->isdn_driver; in isdn_tty_modem_hup()
693 ch = info->isdn_channel; in isdn_tty_modem_hup()
697 info->isdn_driver = -1; in isdn_tty_modem_hup()
698 info->isdn_channel = -1; in isdn_tty_modem_hup()
701 printk(KERN_DEBUG "Mhup ttyI%d\n", info->line); in isdn_tty_modem_hup()
703 info->rcvsched = 0; in isdn_tty_modem_hup()
704 isdn_tty_flush_buffer(info->port.tty); in isdn_tty_modem_hup()
705 if (info->online) { in isdn_tty_modem_hup()
706 info->last_lhup = local; in isdn_tty_modem_hup()
707 info->online = 0; in isdn_tty_modem_hup()
708 isdn_tty_modem_result(RESULT_NO_CARRIER, info); in isdn_tty_modem_hup()
711 info->vonline = 0; in isdn_tty_modem_hup()
713 info->faxonline = 0; in isdn_tty_modem_hup()
714 info->fax->phase = ISDN_FAX_PHASE_IDLE; in isdn_tty_modem_hup()
716 info->emu.vpar[4] = 0; in isdn_tty_modem_hup()
717 info->emu.vpar[5] = 8; in isdn_tty_modem_hup()
718 kfree(info->dtmf_state); in isdn_tty_modem_hup()
719 info->dtmf_state = NULL; in isdn_tty_modem_hup()
720 kfree(info->silence_state); in isdn_tty_modem_hup()
721 info->silence_state = NULL; in isdn_tty_modem_hup()
722 kfree(info->adpcms); in isdn_tty_modem_hup()
723 info->adpcms = NULL; in isdn_tty_modem_hup()
724 kfree(info->adpcmr); in isdn_tty_modem_hup()
725 info->adpcmr = NULL; in isdn_tty_modem_hup()
727 if ((info->msr & UART_MSR_RI) && in isdn_tty_modem_hup()
728 (info->emu.mdmreg[REG_RUNG] & BIT_RUNG)) in isdn_tty_modem_hup()
729 isdn_tty_modem_result(RESULT_RUNG, info); in isdn_tty_modem_hup()
730 info->msr &= ~(UART_MSR_DCD | UART_MSR_RI); in isdn_tty_modem_hup()
731 info->lsr |= UART_LSR_TEMT; in isdn_tty_modem_hup()
741 info->emu.mdmreg[REG_RINGCNT] = 0; in isdn_tty_modem_hup()
744 if (info->drv_index >= 0) { in isdn_tty_modem_hup()
745 dev->m_idx[info->drv_index] = -1; in isdn_tty_modem_hup()
746 info->drv_index = -1; in isdn_tty_modem_hup()
765 isdn_tty_suspend(char *id, modem_info *info, atemu *m) in isdn_tty_suspend() argument
771 if (!info) in isdn_tty_suspend()
775 printk(KERN_DEBUG "Msusp ttyI%d\n", info->line); in isdn_tty_suspend()
778 if ((info->isdn_driver >= 0)) { in isdn_tty_suspend()
782 cmd.parm.cmsg.adr.Controller = info->isdn_driver + 1; in isdn_tty_suspend()
791 cmd.driver = info->isdn_driver; in isdn_tty_suspend()
792 cmd.arg = info->isdn_channel; in isdn_tty_suspend()
805 isdn_tty_resume(char *id, modem_info *info, atemu *m) in isdn_tty_resume() argument
839 isdn_tty_modem_result(RESULT_NO_DIALTONE, info); in isdn_tty_resume()
841 info->isdn_driver = dev->drvmap[i]; in isdn_tty_resume()
842 info->isdn_channel = dev->chanmap[i]; in isdn_tty_resume()
843 info->drv_index = i; in isdn_tty_resume()
844 dev->m_idx[i] = info->line; in isdn_tty_resume()
846 info->last_dir = 1; in isdn_tty_resume()
850 cmd.driver = info->isdn_driver; in isdn_tty_resume()
851 cmd.arg = info->isdn_channel; in isdn_tty_resume()
854 strcpy(cmd.parm.num, isdn_map_eaz2msn(m->msn, info->isdn_driver)); in isdn_tty_resume()
855 cmd.driver = info->isdn_driver; in isdn_tty_resume()
858 cmd.driver = info->isdn_driver; in isdn_tty_resume()
860 info->last_l2 = l2; in isdn_tty_resume()
861 cmd.arg = info->isdn_channel + (l2 << 8); in isdn_tty_resume()
863 cmd.driver = info->isdn_driver; in isdn_tty_resume()
865 cmd.arg = info->isdn_channel + (m->mdmreg[REG_L3PROT] << 8); in isdn_tty_resume()
867 cmd.driver = info->isdn_driver; in isdn_tty_resume()
868 cmd.arg = info->isdn_channel; in isdn_tty_resume()
872 cmd.parm.cmsg.adr.Controller = info->isdn_driver + 1; in isdn_tty_resume()
881 info->dialing = 1; in isdn_tty_resume()
894 isdn_tty_send_msg(modem_info *info, atemu *m, char *msg) in isdn_tty_send_msg() argument
909 isdn_tty_modem_result(RESULT_ERROR, info); in isdn_tty_send_msg()
934 isdn_tty_modem_result(RESULT_NO_DIALTONE, info); in isdn_tty_send_msg()
936 info->isdn_driver = dev->drvmap[i]; in isdn_tty_send_msg()
937 info->isdn_channel = dev->chanmap[i]; in isdn_tty_send_msg()
938 info->drv_index = i; in isdn_tty_send_msg()
939 dev->m_idx[i] = info->line; in isdn_tty_send_msg()
941 info->last_dir = 1; in isdn_tty_send_msg()
944 cmd.driver = info->isdn_driver; in isdn_tty_send_msg()
945 cmd.arg = info->isdn_channel; in isdn_tty_send_msg()
948 strcpy(cmd.parm.num, isdn_map_eaz2msn(m->msn, info->isdn_driver)); in isdn_tty_send_msg()
949 cmd.driver = info->isdn_driver; in isdn_tty_send_msg()
952 cmd.driver = info->isdn_driver; in isdn_tty_send_msg()
954 info->last_l2 = l2; in isdn_tty_send_msg()
955 cmd.arg = info->isdn_channel + (l2 << 8); in isdn_tty_send_msg()
957 cmd.driver = info->isdn_driver; in isdn_tty_send_msg()
959 cmd.arg = info->isdn_channel + (m->mdmreg[REG_L3PROT] << 8); in isdn_tty_send_msg()
961 cmd.driver = info->isdn_driver; in isdn_tty_send_msg()
962 cmd.arg = info->isdn_channel; in isdn_tty_send_msg()
966 cmd.parm.cmsg.adr.Controller = info->isdn_driver + 1; in isdn_tty_send_msg()
980 isdn_tty_paranoia_check(modem_info *info, char *name, const char *routine) in isdn_tty_paranoia_check() argument
983 if (!info) { in isdn_tty_paranoia_check()
988 if (info->magic != ISDN_ASYNC_MAGIC) { in isdn_tty_paranoia_check()
1002 isdn_tty_change_speed(modem_info *info) in isdn_tty_change_speed() argument
1004 struct tty_port *port = &info->port; in isdn_tty_change_speed()
1023 info->mcr |= UART_MCR_DTR; in isdn_tty_change_speed()
1024 isdn_tty_modem_ncarrier(info); in isdn_tty_change_speed()
1026 info->mcr &= ~UART_MCR_DTR; in isdn_tty_change_speed()
1027 if (info->emu.mdmreg[REG_DTRHUP] & BIT_DTRHUP) { in isdn_tty_change_speed()
1031 if (info->online) in isdn_tty_change_speed()
1032 info->ncarrier = 1; in isdn_tty_change_speed()
1033 isdn_tty_modem_reset_regs(info, 0); in isdn_tty_change_speed()
1034 isdn_tty_modem_hup(info, 1); in isdn_tty_change_speed()
1054 isdn_tty_startup(modem_info *info) in isdn_tty_startup() argument
1056 if (info->port.flags & ASYNC_INITIALIZED) in isdn_tty_startup()
1060 printk(KERN_DEBUG "starting up ttyi%d ...\n", info->line); in isdn_tty_startup()
1065 info->mcr = UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2; in isdn_tty_startup()
1066 if (info->port.tty) in isdn_tty_startup()
1067 clear_bit(TTY_IO_ERROR, &info->port.tty->flags); in isdn_tty_startup()
1071 isdn_tty_change_speed(info); in isdn_tty_startup()
1073 info->port.flags |= ASYNC_INITIALIZED; in isdn_tty_startup()
1074 info->msr |= (UART_MSR_DSR | UART_MSR_CTS); in isdn_tty_startup()
1075 info->send_outstanding = 0; in isdn_tty_startup()
1084 isdn_tty_shutdown(modem_info *info) in isdn_tty_shutdown() argument
1086 if (!(info->port.flags & ASYNC_INITIALIZED)) in isdn_tty_shutdown()
1089 printk(KERN_DEBUG "Shutting down isdnmodem port %d ....\n", info->line); in isdn_tty_shutdown()
1092 info->msr &= ~UART_MSR_RI; in isdn_tty_shutdown()
1093 if (!info->port.tty || (info->port.tty->termios.c_cflag & HUPCL)) { in isdn_tty_shutdown()
1094 info->mcr &= ~(UART_MCR_DTR | UART_MCR_RTS); in isdn_tty_shutdown()
1095 if (info->emu.mdmreg[REG_DTRHUP] & BIT_DTRHUP) { in isdn_tty_shutdown()
1096 isdn_tty_modem_reset_regs(info, 0); in isdn_tty_shutdown()
1100 isdn_tty_modem_hup(info, 1); in isdn_tty_shutdown()
1103 if (info->port.tty) in isdn_tty_shutdown()
1104 set_bit(TTY_IO_ERROR, &info->port.tty->flags); in isdn_tty_shutdown()
1106 info->port.flags &= ~ASYNC_INITIALIZED; in isdn_tty_shutdown()
1123 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_write() local
1124 atemu *m = &info->emu; in isdn_tty_write()
1126 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_write")) in isdn_tty_write()
1129 atomic_inc(&info->xmit_lock); in isdn_tty_write()
1132 if (c > info->xmit_size - info->xmit_count) in isdn_tty_write()
1133 c = info->xmit_size - info->xmit_count; in isdn_tty_write()
1134 if (info->isdn_driver >= 0 && c > dev->drv[info->isdn_driver]->maxbufsize) in isdn_tty_write()
1135 c = dev->drv[info->isdn_driver]->maxbufsize; in isdn_tty_write()
1138 if ((info->online > 1) in isdn_tty_write()
1140 || (info->vonline & 3) in isdn_tty_write()
1144 if (!info->vonline) in isdn_tty_write()
1149 memcpy(&info->port.xmit_buf[info->xmit_count], buf, c); in isdn_tty_write()
1151 if (info->vonline) { in isdn_tty_write()
1152 int cc = isdn_tty_handleDLEdown(info, m, c); in isdn_tty_write()
1153 if (info->vonline & 2) { in isdn_tty_write()
1159 info->msr |= UART_MSR_CTS; in isdn_tty_write()
1160 info->lsr |= UART_LSR_TEMT; in isdn_tty_write()
1162 info->xmit_count += cc; in isdn_tty_write()
1164 if ((info->vonline & 3) == 1) { in isdn_tty_write()
1169 info->vonline &= ~1; in isdn_tty_write()
1173 info->line); in isdn_tty_write()
1175 isdn_tty_at_cout("\020\003\r\nVCON\r\n", info); in isdn_tty_write()
1179 if (TTY_IS_FCLASS1(info)) { in isdn_tty_write()
1180 int cc = isdn_tty_handleDLEdown(info, m, c); in isdn_tty_write()
1182 if (info->vonline & 4) { /* ETX seen */ in isdn_tty_write()
1186 c.driver = info->isdn_driver; in isdn_tty_write()
1187 c.arg = info->isdn_channel; in isdn_tty_write()
1192 info->vonline = 0; in isdn_tty_write()
1196 info->xmit_count += cc; in isdn_tty_write()
1199 info->xmit_count += c; in isdn_tty_write()
1201 info->msr |= UART_MSR_CTS; in isdn_tty_write()
1202 info->lsr |= UART_LSR_TEMT; in isdn_tty_write()
1203 if (info->dialing) { in isdn_tty_write()
1204 info->dialing = 0; in isdn_tty_write()
1208 isdn_tty_modem_result(RESULT_NO_CARRIER, info); in isdn_tty_write()
1209 isdn_tty_modem_hup(info, 1); in isdn_tty_write()
1211 c = isdn_tty_edit_at(buf, c, info); in isdn_tty_write()
1217 atomic_dec(&info->xmit_lock); in isdn_tty_write()
1218 if ((info->xmit_count) || !skb_queue_empty(&info->xmit_queue)) { in isdn_tty_write()
1220 isdn_tty_senddown(info); in isdn_tty_write()
1221 isdn_tty_tint(info); in isdn_tty_write()
1231 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_write_room() local
1234 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_write_room")) in isdn_tty_write_room()
1236 if (!info->online) in isdn_tty_write_room()
1237 return info->xmit_size; in isdn_tty_write_room()
1238 ret = info->xmit_size - info->xmit_count; in isdn_tty_write_room()
1245 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_chars_in_buffer() local
1247 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_chars_in_buffer")) in isdn_tty_chars_in_buffer()
1249 if (!info->online) in isdn_tty_chars_in_buffer()
1251 return (info->xmit_count); in isdn_tty_chars_in_buffer()
1257 modem_info *info; in isdn_tty_flush_buffer() local
1262 info = (modem_info *) tty->driver_data; in isdn_tty_flush_buffer()
1263 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_flush_buffer")) { in isdn_tty_flush_buffer()
1266 isdn_tty_cleanup_xmit(info); in isdn_tty_flush_buffer()
1267 info->xmit_count = 0; in isdn_tty_flush_buffer()
1274 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_flush_chars() local
1276 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_flush_chars")) in isdn_tty_flush_chars()
1278 if ((info->xmit_count) || !skb_queue_empty(&info->xmit_queue)) in isdn_tty_flush_chars()
1293 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_throttle() local
1295 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_throttle")) in isdn_tty_throttle()
1298 info->x_char = STOP_CHAR(tty); in isdn_tty_throttle()
1299 info->mcr &= ~UART_MCR_RTS; in isdn_tty_throttle()
1305 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_unthrottle() local
1307 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_unthrottle")) in isdn_tty_unthrottle()
1310 if (info->x_char) in isdn_tty_unthrottle()
1311 info->x_char = 0; in isdn_tty_unthrottle()
1313 info->x_char = START_CHAR(tty); in isdn_tty_unthrottle()
1315 info->mcr |= UART_MCR_RTS; in isdn_tty_unthrottle()
1335 isdn_tty_get_lsr_info(modem_info *info, uint __user *value) in isdn_tty_get_lsr_info() argument
1340 status = info->lsr; in isdn_tty_get_lsr_info()
1349 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_tiocmget() local
1352 if (isdn_tty_paranoia_check(info, tty->name, __func__)) in isdn_tty_tiocmget()
1359 printk(KERN_DEBUG "ttyI%d ioctl TIOCMGET\n", info->line); in isdn_tty_tiocmget()
1362 control = info->mcr; in isdn_tty_tiocmget()
1363 status = info->msr; in isdn_tty_tiocmget()
1377 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_tiocmset() local
1379 if (isdn_tty_paranoia_check(info, tty->name, __func__)) in isdn_tty_tiocmset()
1385 printk(KERN_DEBUG "ttyI%d ioctl TIOCMxxx: %x %x\n", info->line, set, clear); in isdn_tty_tiocmset()
1390 info->mcr |= UART_MCR_RTS; in isdn_tty_tiocmset()
1392 info->mcr |= UART_MCR_DTR; in isdn_tty_tiocmset()
1393 isdn_tty_modem_ncarrier(info); in isdn_tty_tiocmset()
1397 info->mcr &= ~UART_MCR_RTS; in isdn_tty_tiocmset()
1399 info->mcr &= ~UART_MCR_DTR; in isdn_tty_tiocmset()
1400 if (info->emu.mdmreg[REG_DTRHUP] & BIT_DTRHUP) { in isdn_tty_tiocmset()
1401 isdn_tty_modem_reset_regs(info, 0); in isdn_tty_tiocmset()
1405 if (info->online) in isdn_tty_tiocmset()
1406 info->ncarrier = 1; in isdn_tty_tiocmset()
1407 isdn_tty_modem_hup(info, 1); in isdn_tty_tiocmset()
1417 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_ioctl() local
1420 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_ioctl")) in isdn_tty_ioctl()
1427 printk(KERN_DEBUG "ttyI%d ioctl TCSBRK\n", info->line); in isdn_tty_ioctl()
1436 printk(KERN_DEBUG "ttyI%d ioctl TCSBRKP\n", info->line); in isdn_tty_ioctl()
1445 printk(KERN_DEBUG "ttyI%d ioctl TIOCSERGETLSR\n", info->line); in isdn_tty_ioctl()
1447 return isdn_tty_get_lsr_info(info, (uint __user *) arg); in isdn_tty_ioctl()
1450 printk(KERN_DEBUG "UNKNOWN ioctl 0x%08x on ttyi%d\n", cmd, info->line); in isdn_tty_ioctl()
1460 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_set_termios() local
1463 isdn_tty_change_speed(info); in isdn_tty_set_termios()
1469 isdn_tty_change_speed(info); in isdn_tty_set_termios()
1481 modem_info *info = &dev->mdm.info[tty->index]; in isdn_tty_install() local
1483 if (isdn_tty_paranoia_check(info, tty->name, __func__)) in isdn_tty_install()
1486 tty->driver_data = info; in isdn_tty_install()
1488 return tty_port_install(&info->port, driver, tty); in isdn_tty_install()
1500 modem_info *info = tty->driver_data; in isdn_tty_open() local
1501 struct tty_port *port = &info->port; in isdn_tty_open()
1513 retval = isdn_tty_startup(info); in isdn_tty_open()
1528 printk(KERN_DEBUG "isdn_tty_open ttyi%d successful...\n", info->line); in isdn_tty_open()
1540 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_close() local
1541 struct tty_port *port = &info->port; in isdn_tty_close()
1544 if (!info || isdn_tty_paranoia_check(info, tty->name, "isdn_tty_close")) in isdn_tty_close()
1566 info->line, port->count); in isdn_tty_close()
1592 while (!(info->lsr & UART_LSR_TEMT)) { in isdn_tty_close()
1599 isdn_tty_shutdown(info); in isdn_tty_close()
1603 info->ncarrier = 0; in isdn_tty_close()
1617 modem_info *info = (modem_info *) tty->driver_data; in isdn_tty_hangup() local
1618 struct tty_port *port = &info->port; in isdn_tty_hangup()
1620 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_hangup")) in isdn_tty_hangup()
1622 isdn_tty_shutdown(info); in isdn_tty_hangup()
1675 isdn_tty_modem_reset_faxpar(modem_info *info) in isdn_tty_modem_reset_faxpar() argument
1677 T30_s *f = info->fax; in isdn_tty_modem_reset_faxpar()
1708 isdn_tty_modem_reset_regs(modem_info *info, int force) in isdn_tty_modem_reset_regs() argument
1710 atemu *m = &info->emu; in isdn_tty_modem_reset_regs()
1715 info->xmit_size = m->mdmreg[REG_PSIZE] * 16; in isdn_tty_modem_reset_regs()
1721 isdn_tty_modem_reset_faxpar(info); in isdn_tty_modem_reset_regs()
1756 modem_info *info = container_of(port, modem_info, port); in isdn_tty_carrier_raised() local
1757 return info->msr & UART_MSR_DCD; in isdn_tty_carrier_raised()
1769 modem_info *info; in isdn_tty_modem_init() local
1791 info = &m->info[i]; in isdn_tty_modem_init()
1793 if (!(info->fax = kmalloc(sizeof(T30_s), GFP_KERNEL))) { in isdn_tty_modem_init()
1799 tty_port_init(&info->port); in isdn_tty_modem_init()
1800 info->port.ops = &isdn_tty_port_ops; in isdn_tty_modem_init()
1801 spin_lock_init(&info->readlock); in isdn_tty_modem_init()
1802 sprintf(info->last_cause, "0000"); in isdn_tty_modem_init()
1803 sprintf(info->last_num, "none"); in isdn_tty_modem_init()
1804 info->last_dir = 0; in isdn_tty_modem_init()
1805 info->last_lhup = 1; in isdn_tty_modem_init()
1806 info->last_l2 = -1; in isdn_tty_modem_init()
1807 info->last_si = 0; in isdn_tty_modem_init()
1808 isdn_tty_reset_profile(&info->emu); in isdn_tty_modem_init()
1809 isdn_tty_modem_reset_regs(info, 1); in isdn_tty_modem_init()
1810 info->magic = ISDN_ASYNC_MAGIC; in isdn_tty_modem_init()
1811 info->line = i; in isdn_tty_modem_init()
1812 info->x_char = 0; in isdn_tty_modem_init()
1813 info->isdn_driver = -1; in isdn_tty_modem_init()
1814 info->isdn_channel = -1; in isdn_tty_modem_init()
1815 info->drv_index = -1; in isdn_tty_modem_init()
1816 info->xmit_size = ISDN_SERIAL_XMIT_SIZE; in isdn_tty_modem_init()
1817 init_timer(&info->nc_timer); in isdn_tty_modem_init()
1818 info->nc_timer.function = isdn_tty_modem_do_ncarrier; in isdn_tty_modem_init()
1819 info->nc_timer.data = (unsigned long) info; in isdn_tty_modem_init()
1820 skb_queue_head_init(&info->xmit_queue); in isdn_tty_modem_init()
1822 skb_queue_head_init(&info->dtmf_queue); in isdn_tty_modem_init()
1824 info->port.xmit_buf = kmalloc(ISDN_SERIAL_XMIT_MAX + 5, in isdn_tty_modem_init()
1826 if (!info->port.xmit_buf) { in isdn_tty_modem_init()
1832 info->port.xmit_buf += 4; in isdn_tty_modem_init()
1837 info = &m->info[i]; in isdn_tty_modem_init()
1839 kfree(info->fax); in isdn_tty_modem_init()
1841 kfree(info->port.xmit_buf - 4); in isdn_tty_modem_init()
1842 info->port.xmit_buf = NULL; in isdn_tty_modem_init()
1843 tty_port_destroy(&info->port); in isdn_tty_modem_init()
1855 modem_info *info; in isdn_tty_exit() local
1859 info = &dev->mdm.info[i]; in isdn_tty_exit()
1860 isdn_tty_cleanup_xmit(info); in isdn_tty_exit()
1862 kfree(info->fax); in isdn_tty_exit()
1864 kfree(info->port.xmit_buf - 4); in isdn_tty_exit()
1865 info->port.xmit_buf = NULL; in isdn_tty_exit()
1866 tty_port_destroy(&info->port); in isdn_tty_exit()
1966 modem_info *info = &dev->mdm.info[i]; in isdn_tty_find_icall() local
1968 if (info->port.count == 0) in isdn_tty_find_icall()
1970 if ((info->emu.mdmreg[REG_SI1] & si2bit[si1]) && /* SI1 is matching */ in isdn_tty_find_icall()
1971 (info->emu.mdmreg[REG_SI2] == si2)) { /* SI2 is matching */ in isdn_tty_find_icall()
1976 info->port.flags, info->isdn_driver, in isdn_tty_find_icall()
1977 info->isdn_channel, dev->usage[idx]); in isdn_tty_find_icall()
1981 (info->port.flags & ASYNC_NORMAL_ACTIVE) && in isdn_tty_find_icall()
1983 (info->isdn_driver == -1) && in isdn_tty_find_icall()
1984 (info->isdn_channel == -1) && in isdn_tty_find_icall()
1988 if ((matchret = isdn_tty_match_icall(eaz, &info->emu, di)) > wret) in isdn_tty_find_icall()
1991 info->isdn_driver = di; in isdn_tty_find_icall()
1992 info->isdn_channel = ch; in isdn_tty_find_icall()
1993 info->drv_index = idx; in isdn_tty_find_icall()
1994 dev->m_idx[idx] = info->line; in isdn_tty_find_icall()
1996 dev->usage[idx] |= isdn_calc_usage(si1, info->emu.mdmreg[REG_L2PROT]); in isdn_tty_find_icall()
1998 strcpy(info->emu.cpn, eaz); in isdn_tty_find_icall()
1999 info->emu.mdmreg[REG_SI1I] = si2bit[si1]; in isdn_tty_find_icall()
2000 info->emu.mdmreg[REG_PLAN] = setup->plan; in isdn_tty_find_icall()
2001 info->emu.mdmreg[REG_SCREEN] = setup->screen; in isdn_tty_find_icall()
2005 info->line); in isdn_tty_find_icall()
2006 info->msr |= UART_MSR_RI; in isdn_tty_find_icall()
2007 isdn_tty_modem_result(RESULT_RING, info); in isdn_tty_find_icall()
2020 #define TTY_IS_ACTIVE(info) (info->port.flags & ASYNC_NORMAL_ACTIVE) argument
2026 modem_info *info; in isdn_tty_stat_callback() local
2032 info = &dev->mdm.info[mi]; in isdn_tty_stat_callback()
2035 printk(KERN_DEBUG "CHARGEINFO on ttyI%d: %ld %s\n", info->line, c->arg, c->parm.num); in isdn_tty_stat_callback()
2036 info->emu.charge = (unsigned) simple_strtoul(c->parm.num, &e, 10); in isdn_tty_stat_callback()
2038 info->emu.charge = 0; in isdn_tty_stat_callback()
2043 printk(KERN_DEBUG "tty_STAT_BSENT ttyI%d\n", info->line); in isdn_tty_stat_callback()
2045 if ((info->isdn_driver == c->driver) && in isdn_tty_stat_callback()
2046 (info->isdn_channel == c->arg)) { in isdn_tty_stat_callback()
2047 info->msr |= UART_MSR_CTS; in isdn_tty_stat_callback()
2048 if (info->send_outstanding) in isdn_tty_stat_callback()
2049 if (!(--info->send_outstanding)) in isdn_tty_stat_callback()
2050 info->lsr |= UART_LSR_TEMT; in isdn_tty_stat_callback()
2051 isdn_tty_tint(info); in isdn_tty_stat_callback()
2057 printk(KERN_DEBUG "tty_STAT_CAUSE ttyI%d\n", info->line); in isdn_tty_stat_callback()
2060 strncpy(info->last_cause, c->parm.num, 5); in isdn_tty_stat_callback()
2064 printk(KERN_DEBUG "tty_STAT_DISPLAY ttyI%d\n", info->line); in isdn_tty_stat_callback()
2067 if ((info->emu.mdmreg[REG_DISPLAY] & BIT_DISPLAY) && in isdn_tty_stat_callback()
2068 !(info->emu.mdmreg[REG_RESPNUM] & BIT_RESPNUM)) { in isdn_tty_stat_callback()
2069 isdn_tty_at_cout("\r\n", info); in isdn_tty_stat_callback()
2070 isdn_tty_at_cout("DISPLAY: ", info); in isdn_tty_stat_callback()
2071 isdn_tty_at_cout(c->parm.display, info); in isdn_tty_stat_callback()
2072 isdn_tty_at_cout("\r\n", info); in isdn_tty_stat_callback()
2077 printk(KERN_DEBUG "tty_STAT_DCONN ttyI%d\n", info->line); in isdn_tty_stat_callback()
2079 if (TTY_IS_ACTIVE(info)) { in isdn_tty_stat_callback()
2080 if (info->dialing == 1) { in isdn_tty_stat_callback()
2081 info->dialing = 2; in isdn_tty_stat_callback()
2088 printk(KERN_DEBUG "tty_STAT_DHUP ttyI%d\n", info->line); in isdn_tty_stat_callback()
2090 if (TTY_IS_ACTIVE(info)) { in isdn_tty_stat_callback()
2091 if (info->dialing == 1) in isdn_tty_stat_callback()
2092 isdn_tty_modem_result(RESULT_BUSY, info); in isdn_tty_stat_callback()
2093 if (info->dialing > 1) in isdn_tty_stat_callback()
2094 isdn_tty_modem_result(RESULT_NO_CARRIER, info); in isdn_tty_stat_callback()
2095 info->dialing = 0; in isdn_tty_stat_callback()
2099 isdn_tty_modem_hup(info, 0); in isdn_tty_stat_callback()
2105 printk(KERN_DEBUG "tty_STAT_BCONN ttyI%d\n", info->line); in isdn_tty_stat_callback()
2111 if (info->port.blocked_open && in isdn_tty_stat_callback()
2112 (info->emu.mdmreg[REG_DCD] & BIT_DCD)) { in isdn_tty_stat_callback()
2113 wake_up_interruptible(&info->port.open_wait); in isdn_tty_stat_callback()
2120 if (TTY_IS_ACTIVE(info) || in isdn_tty_stat_callback()
2121 (info->port.blocked_open && in isdn_tty_stat_callback()
2122 (info->emu.mdmreg[REG_DCD] & BIT_DCD))) { in isdn_tty_stat_callback()
2123 info->msr |= UART_MSR_DCD; in isdn_tty_stat_callback()
2124 info->emu.charge = 0; in isdn_tty_stat_callback()
2125 if (info->dialing & 0xf) in isdn_tty_stat_callback()
2126 info->last_dir = 1; in isdn_tty_stat_callback()
2128 info->last_dir = 0; in isdn_tty_stat_callback()
2129 info->dialing = 0; in isdn_tty_stat_callback()
2130 info->rcvsched = 1; in isdn_tty_stat_callback()
2132 if (info->emu.mdmreg[REG_L2PROT] == ISDN_PROTO_L2_MODEM) { in isdn_tty_stat_callback()
2133 strcpy(info->emu.connmsg, c->parm.num); in isdn_tty_stat_callback()
2134 isdn_tty_modem_result(RESULT_CONNECT, info); in isdn_tty_stat_callback()
2136 isdn_tty_modem_result(RESULT_CONNECT64000, info); in isdn_tty_stat_callback()
2139 isdn_tty_modem_result(RESULT_VCON, info); in isdn_tty_stat_callback()
2145 printk(KERN_DEBUG "tty_STAT_BHUP ttyI%d\n", info->line); in isdn_tty_stat_callback()
2147 if (TTY_IS_ACTIVE(info)) { in isdn_tty_stat_callback()
2151 isdn_tty_modem_hup(info, 0); in isdn_tty_stat_callback()
2157 printk(KERN_DEBUG "tty_STAT_NODCH ttyI%d\n", info->line); in isdn_tty_stat_callback()
2159 if (TTY_IS_ACTIVE(info)) { in isdn_tty_stat_callback()
2160 if (info->dialing) { in isdn_tty_stat_callback()
2161 info->dialing = 0; in isdn_tty_stat_callback()
2162 info->last_l2 = -1; in isdn_tty_stat_callback()
2163 info->last_si = 0; in isdn_tty_stat_callback()
2164 sprintf(info->last_cause, "0000"); in isdn_tty_stat_callback()
2165 isdn_tty_modem_result(RESULT_NO_DIALTONE, info); in isdn_tty_stat_callback()
2167 isdn_tty_modem_hup(info, 0); in isdn_tty_stat_callback()
2173 printk(KERN_DEBUG "tty_STAT_UNLOAD ttyI%d\n", info->line); in isdn_tty_stat_callback()
2176 info = &dev->mdm.info[i]; in isdn_tty_stat_callback()
2177 if (info->isdn_driver == c->driver) { in isdn_tty_stat_callback()
2178 if (info->online) in isdn_tty_stat_callback()
2179 isdn_tty_modem_hup(info, 1); in isdn_tty_stat_callback()
2185 if (TTY_IS_ACTIVE(info)) { in isdn_tty_stat_callback()
2186 isdn_tty_fax_command(info, c); in isdn_tty_stat_callback()
2192 if (TTY_IS_ACTIVE(info)) { in isdn_tty_stat_callback()
2195 if (info->vonline) { in isdn_tty_stat_callback()
2196 isdn_audio_put_dle_code(info, in isdn_tty_stat_callback()
2220 isdn_tty_at_cout(char *msg, modem_info *info) in isdn_tty_at_cout() argument
2222 struct tty_port *port = &info->port; in isdn_tty_at_cout()
2223 atemu *m = &info->emu; in isdn_tty_at_cout()
2238 spin_lock_irqsave(&info->readlock, flags); in isdn_tty_at_cout()
2240 spin_unlock_irqrestore(&info->readlock, flags); in isdn_tty_at_cout()
2246 if (info->online && ((tty_buffer_request_room(port, l) < l) || in isdn_tty_at_cout()
2247 !skb_queue_empty(&dev->drv[info->isdn_driver]->rpqueue[info->isdn_channel]))) { in isdn_tty_at_cout()
2250 spin_unlock_irqrestore(&info->readlock, flags); in isdn_tty_at_cout()
2282 __skb_queue_tail(&dev->drv[info->isdn_driver]->rpqueue[info->isdn_channel], skb); in isdn_tty_at_cout()
2283 dev->drv[info->isdn_driver]->rcvcount[info->isdn_channel] += skb->len; in isdn_tty_at_cout()
2284 spin_unlock_irqrestore(&info->readlock, flags); in isdn_tty_at_cout()
2286 if (dev->modempoll && info->rcvsched) in isdn_tty_at_cout()
2290 spin_unlock_irqrestore(&info->readlock, flags); in isdn_tty_at_cout()
2299 isdn_tty_on_hook(modem_info *info) in isdn_tty_on_hook() argument
2301 if (info->isdn_channel >= 0) { in isdn_tty_on_hook()
2305 isdn_tty_modem_hup(info, 1); in isdn_tty_on_hook()
2370 isdn_tty_modem_result(int code, modem_info *info) in isdn_tty_modem_result() argument
2372 atemu *m = &info->emu; in isdn_tty_modem_result()
2384 isdn_tty_cmd_ATA(info); in isdn_tty_modem_result()
2389 (info->port.flags & ASYNC_CLOSING), in isdn_tty_modem_result()
2390 (!info->port.tty)); in isdn_tty_modem_result()
2393 del_timer(&info->nc_timer); in isdn_tty_modem_result()
2394 info->ncarrier = 0; in isdn_tty_modem_result()
2395 if ((info->port.flags & ASYNC_CLOSING) || (!info->port.tty)) in isdn_tty_modem_result()
2399 if (info->vonline & 1) { in isdn_tty_modem_result()
2402 info->line); in isdn_tty_modem_result()
2405 isdn_tty_at_cout("\020\003", info); in isdn_tty_modem_result()
2407 if (info->vonline & 2) { in isdn_tty_modem_result()
2410 info->line); in isdn_tty_modem_result()
2413 isdn_tty_at_cout("\020\024", info); in isdn_tty_modem_result()
2419 sprintf(info->last_cause, "0000"); in isdn_tty_modem_result()
2420 if (!info->online) in isdn_tty_modem_result()
2421 info->online = 2; in isdn_tty_modem_result()
2426 info->line); in isdn_tty_modem_result()
2428 sprintf(info->last_cause, "0000"); in isdn_tty_modem_result()
2429 if (!info->online) in isdn_tty_modem_result()
2430 info->online = 1; in isdn_tty_modem_result()
2439 isdn_tty_at_cout(s, info); in isdn_tty_modem_result()
2448 isdn_tty_at_cout("\r\nCALLER NUMBER: ", info); in isdn_tty_modem_result()
2449 isdn_tty_at_cout(dev->num[info->drv_index], info); in isdn_tty_modem_result()
2451 isdn_tty_at_cout("\r\nCALLED NUMBER: ", info); in isdn_tty_modem_result()
2452 isdn_tty_at_cout(info->emu.cpn, info); in isdn_tty_modem_result()
2456 isdn_tty_at_cout("\r\n", info); in isdn_tty_modem_result()
2457 isdn_tty_at_cout(msg[code], info); in isdn_tty_modem_result()
2462 isdn_tty_at_cout(" ", info); in isdn_tty_modem_result()
2463 isdn_tty_at_cout(m->connmsg, info); in isdn_tty_modem_result()
2471 isdn_tty_at_cout(s, info); in isdn_tty_modem_result()
2476 isdn_tty_at_cout("\r\n", info); in isdn_tty_modem_result()
2477 isdn_tty_at_cout("CALLER NUMBER: ", info); in isdn_tty_modem_result()
2478 isdn_tty_at_cout(dev->num[info->drv_index], info); in isdn_tty_modem_result()
2480 isdn_tty_at_cout("\r\nCALLED NUMBER: ", info); in isdn_tty_modem_result()
2481 isdn_tty_at_cout(info->emu.cpn, info); in isdn_tty_modem_result()
2492 sprintf(s, "/%s", info->last_cause); in isdn_tty_modem_result()
2493 isdn_tty_at_cout(s, info); in isdn_tty_modem_result()
2502 isdn_tty_at_cout("/X.75", info); in isdn_tty_modem_result()
2505 isdn_tty_at_cout("/HDLC", info); in isdn_tty_modem_result()
2508 isdn_tty_at_cout("/V110/9600", info); in isdn_tty_modem_result()
2511 isdn_tty_at_cout("/V110/19200", info); in isdn_tty_modem_result()
2514 isdn_tty_at_cout("/V110/38400", info); in isdn_tty_modem_result()
2518 isdn_tty_at_cout("/T.70", info); in isdn_tty_modem_result()
2520 isdn_tty_at_cout("+", info); in isdn_tty_modem_result()
2524 isdn_tty_at_cout("\r\n", info); in isdn_tty_modem_result()
2528 if ((info->port.flags & ASYNC_CLOSING) || (!info->port.tty)) in isdn_tty_modem_result()
2531 if (info->port.flags & ASYNC_CHECK_CD) in isdn_tty_modem_result()
2532 tty_hangup(info->port.tty); in isdn_tty_modem_result()
2541 isdn_tty_show_profile(int ridx, modem_info *info) in isdn_tty_show_profile() argument
2545 sprintf(v, "\r\n%d", info->emu.mdmreg[ridx]); in isdn_tty_show_profile()
2546 isdn_tty_at_cout(v, info); in isdn_tty_show_profile()
2590 #define PARSE_ERROR { isdn_tty_modem_result(RESULT_ERROR, info); return; }
2591 #define PARSE_ERROR1 { isdn_tty_modem_result(RESULT_ERROR, info); return 1; }
2594 isdn_tty_report(modem_info *info) in isdn_tty_report() argument
2596 atemu *m = &info->emu; in isdn_tty_report()
2599 isdn_tty_at_cout("\r\nStatistics of last connection:\r\n\r\n", info); in isdn_tty_report()
2600 sprintf(s, " Remote Number: %s\r\n", info->last_num); in isdn_tty_report()
2601 isdn_tty_at_cout(s, info); in isdn_tty_report()
2602 sprintf(s, " Direction: %s\r\n", info->last_dir ? "outgoing" : "incoming"); in isdn_tty_report()
2603 isdn_tty_at_cout(s, info); in isdn_tty_report()
2604 isdn_tty_at_cout(" Layer-2 Protocol: ", info); in isdn_tty_report()
2605 switch (info->last_l2) { in isdn_tty_report()
2607 isdn_tty_at_cout("X.75i", info); in isdn_tty_report()
2610 isdn_tty_at_cout("X.75ui", info); in isdn_tty_report()
2613 isdn_tty_at_cout("X.75bui", info); in isdn_tty_report()
2616 isdn_tty_at_cout("HDLC", info); in isdn_tty_report()
2619 isdn_tty_at_cout("V.110 9600 Baud", info); in isdn_tty_report()
2622 isdn_tty_at_cout("V.110 19200 Baud", info); in isdn_tty_report()
2625 isdn_tty_at_cout("V.110 38400 Baud", info); in isdn_tty_report()
2628 isdn_tty_at_cout("transparent", info); in isdn_tty_report()
2631 isdn_tty_at_cout("modem", info); in isdn_tty_report()
2634 isdn_tty_at_cout("fax", info); in isdn_tty_report()
2637 isdn_tty_at_cout("unknown", info); in isdn_tty_report()
2641 isdn_tty_at_cout("/T.70", info); in isdn_tty_report()
2643 isdn_tty_at_cout("+", info); in isdn_tty_report()
2645 isdn_tty_at_cout("\r\n", info); in isdn_tty_report()
2646 isdn_tty_at_cout(" Service: ", info); in isdn_tty_report()
2647 switch (info->last_si) { in isdn_tty_report()
2649 isdn_tty_at_cout("audio\r\n", info); in isdn_tty_report()
2652 isdn_tty_at_cout("btx\r\n", info); in isdn_tty_report()
2655 isdn_tty_at_cout("data\r\n", info); in isdn_tty_report()
2658 sprintf(s, "%d\r\n", info->last_si); in isdn_tty_report()
2659 isdn_tty_at_cout(s, info); in isdn_tty_report()
2662 sprintf(s, " Hangup location: %s\r\n", info->last_lhup ? "local" : "remote"); in isdn_tty_report()
2663 isdn_tty_at_cout(s, info); in isdn_tty_report()
2664 sprintf(s, " Last cause: %s\r\n", info->last_cause); in isdn_tty_report()
2665 isdn_tty_at_cout(s, info); in isdn_tty_report()
2672 isdn_tty_cmd_ATand(char **p, modem_info *info) in isdn_tty_cmd_ATand() argument
2674 atemu *m = &info->emu; in isdn_tty_cmd_ATand()
2692 info->xmit_size = m->mdmreg[REG_PSIZE] * 16; in isdn_tty_cmd_ATand()
2697 info->xmit_size /= 10; in isdn_tty_cmd_ATand()
2742 if (info->msr & UART_MSR_DCD) in isdn_tty_cmd_ATand()
2745 isdn_tty_modem_reset_regs(info, 1); in isdn_tty_cmd_ATand()
2773 info->xmit_size = m->mdmreg[REG_PSIZE] * 16; in isdn_tty_cmd_ATand()
2778 info->xmit_size = m->mdmreg[REG_PSIZE] * 16 / 10; in isdn_tty_cmd_ATand()
2783 info->xmit_size = m->mdmreg[REG_PSIZE] * 16 / 10; in isdn_tty_cmd_ATand()
2788 info->xmit_size = m->mdmreg[REG_PSIZE] * 16 / 10; in isdn_tty_cmd_ATand()
2810 isdn_tty_at_cout("\r\n", info); in isdn_tty_cmd_ATand()
2814 isdn_tty_at_cout(rb, info); in isdn_tty_cmd_ATand()
2818 isdn_tty_at_cout(rb, info); in isdn_tty_cmd_ATand()
2820 isdn_tty_at_cout("\r\nListen: ", info); in isdn_tty_cmd_ATand()
2821 isdn_tty_at_cout(m->lmsn, info); in isdn_tty_cmd_ATand()
2822 isdn_tty_at_cout("\r\n", info); in isdn_tty_cmd_ATand()
2843 info->xmit_size = m->mdmreg[REG_PSIZE] * 16; in isdn_tty_cmd_ATand()
2849 info->xmit_size = 112; in isdn_tty_cmd_ATand()
2856 info->xmit_size = 112; in isdn_tty_cmd_ATand()
2871 isdn_tty_check_ats(int mreg, int mval, modem_info *info, atemu *m) in isdn_tty_check_ats() argument
2886 info->xmit_size = mval * 16; in isdn_tty_check_ats()
2891 info->xmit_size /= 10; in isdn_tty_check_ats()
2907 isdn_tty_cmd_ATS(char **p, modem_info *info) in isdn_tty_cmd_ATS() argument
2909 atemu *m = &info->emu; in isdn_tty_cmd_ATS()
2924 if (isdn_tty_check_ats(mreg, mval, info, m)) in isdn_tty_cmd_ATS()
2944 if (isdn_tty_check_ats(mreg, mval, info, m)) in isdn_tty_cmd_ATS()
2950 isdn_tty_at_cout("\r\n", info); in isdn_tty_cmd_ATS()
2952 info); in isdn_tty_cmd_ATS()
2960 isdn_tty_show_profile(mreg, info); in isdn_tty_cmd_ATS()
2973 isdn_tty_cmd_ATA(modem_info *info) in isdn_tty_cmd_ATA() argument
2975 atemu *m = &info->emu; in isdn_tty_cmd_ATA()
2979 if (info->msr & UART_MSR_RI) { in isdn_tty_cmd_ATA()
2981 info->last_dir = 0; in isdn_tty_cmd_ATA()
2982 strcpy(info->last_num, dev->num[info->drv_index]); in isdn_tty_cmd_ATA()
2984 info->msr &= ~UART_MSR_RI; in isdn_tty_cmd_ATA()
2996 cmd.driver = info->isdn_driver; in isdn_tty_cmd_ATA()
2998 cmd.arg = info->isdn_channel + (l2 << 8); in isdn_tty_cmd_ATA()
2999 info->last_l2 = l2; in isdn_tty_cmd_ATA()
3001 cmd.driver = info->isdn_driver; in isdn_tty_cmd_ATA()
3003 cmd.arg = info->isdn_channel + (m->mdmreg[REG_L3PROT] << 8); in isdn_tty_cmd_ATA()
3006 cmd.parm.fax = info->fax; in isdn_tty_cmd_ATA()
3007 info->fax->direction = ISDN_TTY_FAX_CONN_IN; in isdn_tty_cmd_ATA()
3011 cmd.driver = info->isdn_driver; in isdn_tty_cmd_ATA()
3012 cmd.arg = info->isdn_channel; in isdn_tty_cmd_ATA()
3014 info->dialing = 16; in isdn_tty_cmd_ATA()
3015 info->emu.carrierwait = 0; in isdn_tty_cmd_ATA()
3019 isdn_tty_modem_result(RESULT_NO_ANSWER, info); in isdn_tty_cmd_ATA()
3027 isdn_tty_cmd_PLUSF(char **p, modem_info *info) in isdn_tty_cmd_PLUSF() argument
3029 atemu *m = &info->emu; in isdn_tty_cmd_PLUSF()
3040 if (TTY_IS_FCLASS2(info)) in isdn_tty_cmd_PLUSF()
3042 else if (TTY_IS_FCLASS1(info)) in isdn_tty_cmd_PLUSF()
3045 isdn_tty_at_cout(rs, info); in isdn_tty_cmd_PLUSF()
3055 info->xmit_size = in isdn_tty_cmd_PLUSF()
3067 info->xmit_size = in isdn_tty_cmd_PLUSF()
3078 info->xmit_size = in isdn_tty_cmd_PLUSF()
3088 info->xmit_size = VBUF; in isdn_tty_cmd_PLUSF()
3102 isdn_tty_at_cout(rs, info); in isdn_tty_cmd_PLUSF()
3114 return (isdn_tty_cmd_PLUSF_FAX(p, info)); in isdn_tty_cmd_PLUSF()
3124 isdn_tty_cmd_PLUSV(char **p, modem_info *info) in isdn_tty_cmd_PLUSV() argument
3126 atemu *m = &info->emu; in isdn_tty_cmd_PLUSV()
3149 isdn_tty_at_cout("\r\n1", info); in isdn_tty_cmd_PLUSV()
3159 isdn_tty_at_cout("\r\n1", info); in isdn_tty_cmd_PLUSV()
3179 isdn_tty_at_cout(rs, info); in isdn_tty_cmd_PLUSV()
3194 isdn_tty_at_cout("\r\n0,2", info); in isdn_tty_cmd_PLUSV()
3208 if (info->online != 1) { in isdn_tty_cmd_PLUSV()
3209 isdn_tty_modem_result(RESULT_NO_ANSWER, info); in isdn_tty_cmd_PLUSV()
3212 info->dtmf_state = isdn_audio_dtmf_init(info->dtmf_state); in isdn_tty_cmd_PLUSV()
3213 if (!info->dtmf_state) { in isdn_tty_cmd_PLUSV()
3217 info->silence_state = isdn_audio_silence_init(info->silence_state); in isdn_tty_cmd_PLUSV()
3218 if (!info->silence_state) { in isdn_tty_cmd_PLUSV()
3223 info->adpcmr = isdn_audio_adpcm_init(info->adpcmr, m->vpar[3]); in isdn_tty_cmd_PLUSV()
3224 if (!info->adpcmr) { in isdn_tty_cmd_PLUSV()
3232 info->vonline |= 1; in isdn_tty_cmd_PLUSV()
3233 isdn_tty_modem_result(RESULT_CONNECT, info); in isdn_tty_cmd_PLUSV()
3244 isdn_tty_at_cout(rs, info); in isdn_tty_cmd_PLUSV()
3265 info); in isdn_tty_cmd_PLUSV()
3282 isdn_tty_at_cout(rs, info); in isdn_tty_cmd_PLUSV()
3300 info); in isdn_tty_cmd_PLUSV()
3302 info); in isdn_tty_cmd_PLUSV()
3304 info); in isdn_tty_cmd_PLUSV()
3306 info); in isdn_tty_cmd_PLUSV()
3308 info); in isdn_tty_cmd_PLUSV()
3322 if (info->online != 1) { in isdn_tty_cmd_PLUSV()
3323 isdn_tty_modem_result(RESULT_NO_ANSWER, info); in isdn_tty_cmd_PLUSV()
3326 info->dtmf_state = isdn_audio_dtmf_init(info->dtmf_state); in isdn_tty_cmd_PLUSV()
3327 if (!info->dtmf_state) { in isdn_tty_cmd_PLUSV()
3332 info->adpcms = isdn_audio_adpcm_init(info->adpcms, m->vpar[3]); in isdn_tty_cmd_PLUSV()
3333 if (!info->adpcms) { in isdn_tty_cmd_PLUSV()
3342 info->vonline |= 2; in isdn_tty_cmd_PLUSV()
3343 isdn_tty_modem_result(RESULT_CONNECT, info); in isdn_tty_cmd_PLUSV()
3354 isdn_tty_at_cout(rs, info); in isdn_tty_cmd_PLUSV()
3359 if (info->online != 1) in isdn_tty_cmd_PLUSV()
3372 cmd.driver = info->isdn_driver; in isdn_tty_cmd_PLUSV()
3374 cmd.arg = info->isdn_channel + (ISDN_AUDIO_SETDD << 8); in isdn_tty_cmd_PLUSV()
3383 info); in isdn_tty_cmd_PLUSV()
3403 isdn_tty_parse_at(modem_info *info) in isdn_tty_parse_at() argument
3405 atemu *m = &info->emu; in isdn_tty_parse_at()
3420 isdn_tty_cmd_ATA(info); in isdn_tty_parse_at()
3424 if (info->msr & UART_MSR_DCD) in isdn_tty_parse_at()
3426 if (info->msr & UART_MSR_RI) { in isdn_tty_parse_at()
3427 isdn_tty_modem_result(RESULT_NO_CARRIER, info); in isdn_tty_parse_at()
3433 isdn_tty_modem_result(RESULT_NO_MSN_EAZ, info); in isdn_tty_parse_at()
3435 isdn_tty_dial(ds, info, m); in isdn_tty_parse_at()
3459 isdn_tty_on_hook(info); in isdn_tty_parse_at()
3466 isdn_tty_on_hook(info); in isdn_tty_parse_at()
3473 isdn_tty_at_cout("\r\nLinux ISDN", info); in isdn_tty_parse_at()
3481 isdn_tty_report(info); in isdn_tty_parse_at()
3485 snprintf(ds, sizeof(ds), "\r\n%d", info->emu.charge); in isdn_tty_parse_at()
3486 isdn_tty_at_cout(ds, info); in isdn_tty_parse_at()
3503 if (info->msr & UART_MSR_DCD) in isdn_tty_parse_at()
3505 …esult((m->mdmreg[REG_L2PROT] == ISDN_PROTO_L2_MODEM) ? RESULT_CONNECT : RESULT_CONNECT64000, info); in isdn_tty_parse_at()
3507 isdn_tty_modem_result(RESULT_NO_CARRIER, info); in isdn_tty_parse_at()
3526 if (isdn_tty_cmd_ATS(&p, info)) in isdn_tty_parse_at()
3546 if (info->msr & UART_MSR_DCD) { in isdn_tty_parse_at()
3547 info->online = 0; in isdn_tty_parse_at()
3548 isdn_tty_on_hook(info); in isdn_tty_parse_at()
3550 isdn_tty_modem_reset_regs(info, 1); in isdn_tty_parse_at()
3558 if (isdn_tty_cmd_PLUSF(&p, info)) in isdn_tty_parse_at()
3566 if (isdn_tty_cmd_PLUSV(&p, info)) in isdn_tty_parse_at()
3573 isdn_tty_suspend(ds, info, m); in isdn_tty_parse_at()
3578 isdn_tty_resume(ds, info, m); in isdn_tty_parse_at()
3582 isdn_tty_send_msg(info, m, p); in isdn_tty_parse_at()
3590 if (isdn_tty_cmd_ATand(&p, info)) in isdn_tty_parse_at()
3598 if (!info->vonline) in isdn_tty_parse_at()
3600 isdn_tty_modem_result(RESULT_OK, info); in isdn_tty_parse_at()
3617 isdn_tty_edit_at(const char *p, int count, modem_info *info) in isdn_tty_edit_at() argument
3619 atemu *m = &info->emu; in isdn_tty_edit_at()
3634 isdn_tty_at_cout(eb, info); in isdn_tty_edit_at()
3637 isdn_tty_parse_at(info); in isdn_tty_edit_at()
3647 isdn_tty_at_cout("\b", info); in isdn_tty_edit_at()
3655 isdn_tty_at_cout(eb, info); in isdn_tty_edit_at()
3699 modem_info *info = &dev->mdm.info[midx]; in isdn_tty_modem_escape() local
3700 if (info->online) { in isdn_tty_modem_escape()
3702 if ((info->emu.pluscount == 3) && in isdn_tty_modem_escape()
3704 info->emu.lastplus + PLUSWAIT2)) { in isdn_tty_modem_escape()
3705 info->emu.pluscount = 0; in isdn_tty_modem_escape()
3706 info->online = 0; in isdn_tty_modem_escape()
3707 isdn_tty_modem_result(RESULT_OK, info); in isdn_tty_modem_escape()
3726 modem_info *info = &dev->mdm.info[i]; in isdn_tty_modem_ring() local
3727 if (info->msr & UART_MSR_RI) { in isdn_tty_modem_ring()
3729 isdn_tty_modem_result(RESULT_RING, info); in isdn_tty_modem_ring()
3746 modem_info *info = &dev->mdm.info[i]; in isdn_tty_modem_xmit() local
3747 if (info->online) { in isdn_tty_modem_xmit()
3749 isdn_tty_senddown(info); in isdn_tty_modem_xmit()
3750 isdn_tty_tint(info); in isdn_tty_modem_xmit()
3767 modem_info *info = &dev->mdm.info[i]; in isdn_tty_carrier_timeout() local
3768 if (!info->dialing) in isdn_tty_carrier_timeout()
3770 if (info->emu.carrierwait++ > info->emu.mdmreg[REG_WAITC]) { in isdn_tty_carrier_timeout()
3771 info->dialing = 0; in isdn_tty_carrier_timeout()
3772 isdn_tty_modem_result(RESULT_NO_CARRIER, info); in isdn_tty_carrier_timeout()
3773 isdn_tty_modem_hup(info, 1); in isdn_tty_carrier_timeout()