Lines Matching refs:info

294 static inline int rocket_paranoia_check(struct r_port *info,  in rocket_paranoia_check()  argument
298 if (!info) in rocket_paranoia_check()
300 if (info->magic != RPORT_MAGIC) { in rocket_paranoia_check()
314 static void rp_do_receive(struct r_port *info, CHANNEL_t *cp, in rp_do_receive() argument
351 info->ignore_status_mask, info->read_status_mask); in rp_do_receive()
362 if (CharNStat & info->ignore_status_mask) { in rp_do_receive()
366 CharNStat &= info->read_status_mask; in rp_do_receive()
377 tty_insert_flip_char(&info->port, CharNStat & 0xff, in rp_do_receive()
398 space = tty_prepare_flip_string(&info->port, &cbuf, ToRecv); in rp_do_receive()
414 tty_flip_buffer_push(&info->port); in rp_do_receive()
423 static void rp_do_transmit(struct r_port *info) in rp_do_transmit() argument
426 CHANNEL_t *cp = &info->channel; in rp_do_transmit()
433 if (!info) in rp_do_transmit()
435 tty = tty_port_tty_get(&info->port); in rp_do_transmit()
439 clear_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]); in rp_do_transmit()
443 spin_lock_irqsave(&info->slock, flags); in rp_do_transmit()
444 info->xmit_fifo_room = TXFIFO_SIZE - sGetTxCnt(cp); in rp_do_transmit()
450 c = min(info->xmit_fifo_room, info->xmit_cnt); in rp_do_transmit()
451 c = min(c, XMIT_BUF_SIZE - info->xmit_tail); in rp_do_transmit()
452 if (c <= 0 || info->xmit_fifo_room <= 0) in rp_do_transmit()
454 sOutStrW(sGetTxRxDataIO(cp), (unsigned short *) (info->xmit_buf + info->xmit_tail), c / 2); in rp_do_transmit()
456 sOutB(sGetTxRxDataIO(cp), info->xmit_buf[info->xmit_tail + c - 1]); in rp_do_transmit()
457 info->xmit_tail += c; in rp_do_transmit()
458 info->xmit_tail &= XMIT_BUF_SIZE - 1; in rp_do_transmit()
459 info->xmit_cnt -= c; in rp_do_transmit()
460 info->xmit_fifo_room -= c; in rp_do_transmit()
466 if (info->xmit_cnt == 0) in rp_do_transmit()
467 clear_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]); in rp_do_transmit()
469 if (info->xmit_cnt < WAKEUP_CHARS) { in rp_do_transmit()
476 spin_unlock_irqrestore(&info->slock, flags); in rp_do_transmit()
480 printk(KERN_DEBUG "(%d,%d,%d,%d)...\n", info->xmit_cnt, info->xmit_head, in rp_do_transmit()
481 info->xmit_tail, info->xmit_fifo_room); in rp_do_transmit()
490 static void rp_handle_port(struct r_port *info) in rp_handle_port() argument
495 if (!info) in rp_handle_port()
498 if ((info->port.flags & ASYNC_INITIALIZED) == 0) { in rp_handle_port()
504 cp = &info->channel; in rp_handle_port()
506 IntMask = sGetChanIntID(cp) & info->intmask; in rp_handle_port()
512 rp_do_receive(info, cp, ChanStatus); in rp_handle_port()
516 printk(KERN_INFO "ttyR%d CD now %s...\n", info->line, in rp_handle_port()
519 if (!(ChanStatus & CD_ACT) && info->cd_status) { in rp_handle_port()
523 tty_port_tty_hangup(&info->port, false); in rp_handle_port()
525 info->cd_status = (ChanStatus & CD_ACT) ? 1 : 0; in rp_handle_port()
526 wake_up_interruptible(&info->port.open_wait); in rp_handle_port()
621 struct r_port *info; in init_r_port() local
631 info = kzalloc(sizeof (struct r_port), GFP_KERNEL); in init_r_port()
632 if (!info) { in init_r_port()
638 info->magic = RPORT_MAGIC; in init_r_port()
639 info->line = line; in init_r_port()
640 info->ctlp = ctlp; in init_r_port()
641 info->board = board; in init_r_port()
642 info->aiop = aiop; in init_r_port()
643 info->chan = chan; in init_r_port()
644 tty_port_init(&info->port); in init_r_port()
645 info->port.ops = &rocket_port_ops; in init_r_port()
646 init_completion(&info->close_wait); in init_r_port()
647 info->flags &= ~ROCKET_MODE_MASK; in init_r_port()
650 info->flags |= ROCKET_MODE_RS422; in init_r_port()
653 info->flags |= ROCKET_MODE_RS485; in init_r_port()
657 info->flags |= ROCKET_MODE_RS232; in init_r_port()
661 info->intmask = RXF_TRIG | TXFIFO_MT | SRC_INT | DELTA_CD | DELTA_CTS | DELTA_DSR; in init_r_port()
662 if (sInitChan(ctlp, &info->channel, aiop, chan) == 0) { in init_r_port()
665 tty_port_destroy(&info->port); in init_r_port()
666 kfree(info); in init_r_port()
670 rocketMode = info->flags & ROCKET_MODE_MASK; in init_r_port()
672 if ((info->flags & ROCKET_RTS_TOGGLE) || (rocketMode == ROCKET_MODE_RS485)) in init_r_port()
673 sEnRTSToggle(&info->channel); in init_r_port()
675 sDisRTSToggle(&info->channel); in init_r_port()
680 sSetInterfaceMode(&info->channel, InterfaceModeRS485); in init_r_port()
683 sSetInterfaceMode(&info->channel, InterfaceModeRS422); in init_r_port()
687 if (info->flags & ROCKET_RTS_TOGGLE) in init_r_port()
688 sSetInterfaceMode(&info->channel, InterfaceModeRS232T); in init_r_port()
690 sSetInterfaceMode(&info->channel, InterfaceModeRS232); in init_r_port()
694 spin_lock_init(&info->slock); in init_r_port()
695 mutex_init(&info->write_mtx); in init_r_port()
696 rp_table[line] = info; in init_r_port()
697 tty_port_register_device(&info->port, rocket_driver, line, in init_r_port()
705 static void configure_r_port(struct tty_struct *tty, struct r_port *info, in configure_r_port() argument
715 cp = &info->channel; in configure_r_port()
749 divisor = ((rp_baud_base[info->board] + (baud >> 1)) / baud) - 1; in configure_r_port()
754 divisor = (rp_baud_base[info->board] / baud) - 1; in configure_r_port()
758 divisor = (rp_baud_base[info->board] / baud) - 1; in configure_r_port()
760 info->cps = baud / bits; in configure_r_port()
767 info->intmask |= DELTA_CTS; in configure_r_port()
770 info->intmask &= ~DELTA_CTS; in configure_r_port()
774 info->intmask &= ~DELTA_CD; in configure_r_port()
776 spin_lock_irqsave(&info->slock, flags); in configure_r_port()
778 info->cd_status = 1; in configure_r_port()
780 info->cd_status = 0; in configure_r_port()
781 info->intmask |= DELTA_CD; in configure_r_port()
782 spin_unlock_irqrestore(&info->slock, flags); in configure_r_port()
808 info->read_status_mask = STMRCVROVRH | 0xFF; in configure_r_port()
810 info->read_status_mask |= STMFRAMEH | STMPARITYH; in configure_r_port()
812 info->read_status_mask |= STMBREAKH; in configure_r_port()
817 info->ignore_status_mask = 0; in configure_r_port()
819 info->ignore_status_mask |= STMFRAMEH | STMPARITYH; in configure_r_port()
821 info->ignore_status_mask |= STMBREAKH; in configure_r_port()
827 info->ignore_status_mask |= STMRCVROVRH; in configure_r_port()
830 rocketMode = info->flags & ROCKET_MODE_MASK; in configure_r_port()
832 if ((info->flags & ROCKET_RTS_TOGGLE) in configure_r_port()
838 sSetRTS(&info->channel); in configure_r_port()
850 if (info->flags & ROCKET_RTS_TOGGLE) in configure_r_port()
861 struct r_port *info = container_of(port, struct r_port, port); in carrier_raised() local
862 return (sGetChanStatusLo(&info->channel) & CD_ACT) ? 1 : 0; in carrier_raised()
867 struct r_port *info = container_of(port, struct r_port, port); in dtr_rts() local
869 sSetDTR(&info->channel); in dtr_rts()
870 sSetRTS(&info->channel); in dtr_rts()
872 sClrDTR(&info->channel); in dtr_rts()
873 sClrRTS(&info->channel); in dtr_rts()
883 struct r_port *info; in rp_open() local
889 info = rp_table[tty->index]; in rp_open()
890 if (info == NULL) in rp_open()
892 port = &info->port; in rp_open()
899 retval = wait_for_completion_interruptible(&info->close_wait); in rp_open()
909 if (info->xmit_buf) in rp_open()
912 info->xmit_buf = (unsigned char *) page; in rp_open()
914 tty->driver_data = info; in rp_open()
926 printk(KERN_INFO "rp_open ttyR%d, count=%d\n", info->line, info->port.count); in rp_open()
933 cp = &info->channel; in rp_open()
936 info->cd_status = 1; in rp_open()
938 info->cd_status = 0; in rp_open()
956 set_bit(ASYNCB_INITIALIZED, &info->port.flags); in rp_open()
961 if ((info->flags & ROCKET_SPD_MASK) == ROCKET_SPD_HI) in rp_open()
963 if ((info->flags & ROCKET_SPD_MASK) == ROCKET_SPD_VHI) in rp_open()
965 if ((info->flags & ROCKET_SPD_MASK) == ROCKET_SPD_SHI) in rp_open()
967 if ((info->flags & ROCKET_SPD_MASK) == ROCKET_SPD_WARP) in rp_open()
970 configure_r_port(tty, info, NULL); in rp_open()
994 struct r_port *info = tty->driver_data; in rp_close() local
995 struct tty_port *port = &info->port; in rp_close()
999 if (rocket_paranoia_check(info, "rp_close")) in rp_close()
1003 printk(KERN_INFO "rp_close ttyR%d, count = %d\n", info->line, info->port.count); in rp_close()
1010 cp = &info->channel; in rp_close()
1016 timeout = (sGetTxCnt(cp) + 1) * HZ / info->cps; in rp_close()
1020 clear_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]); in rp_close()
1037 clear_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]); in rp_close()
1048 if (info->xmit_buf) { in rp_close()
1049 free_page((unsigned long) info->xmit_buf); in rp_close()
1050 info->xmit_buf = NULL; in rp_close()
1054 info->port.flags &= ~(ASYNC_INITIALIZED | ASYNC_CLOSING | ASYNC_NORMAL_ACTIVE); in rp_close()
1061 complete_all(&info->close_wait); in rp_close()
1067 printk(KERN_INFO "rp_close ttyR%d complete shutdown\n", info->line); in rp_close()
1075 struct r_port *info = tty->driver_data; in rp_set_termios() local
1079 if (rocket_paranoia_check(info, "rp_set_termios")) in rp_set_termios()
1093 configure_r_port(tty, info, old_termios); in rp_set_termios()
1095 cp = &info->channel; in rp_set_termios()
1115 struct r_port *info = tty->driver_data; in rp_break() local
1118 if (rocket_paranoia_check(info, "rp_break")) in rp_break()
1121 spin_lock_irqsave(&info->slock, flags); in rp_break()
1123 sSendBreak(&info->channel); in rp_break()
1125 sClrBreak(&info->channel); in rp_break()
1126 spin_unlock_irqrestore(&info->slock, flags); in rp_break()
1161 struct r_port *info = tty->driver_data; in rp_tiocmget() local
1164 ChanStatus = sGetChanStatusLo(&info->channel); in rp_tiocmget()
1165 control = info->channel.TxControl[3]; in rp_tiocmget()
1169 (sGetChanRI(&info->channel) ? TIOCM_RNG : 0) | in rp_tiocmget()
1182 struct r_port *info = tty->driver_data; in rp_tiocmset() local
1185 info->channel.TxControl[3] |= SET_RTS; in rp_tiocmset()
1187 info->channel.TxControl[3] |= SET_DTR; in rp_tiocmset()
1189 info->channel.TxControl[3] &= ~SET_RTS; in rp_tiocmset()
1191 info->channel.TxControl[3] &= ~SET_DTR; in rp_tiocmset()
1193 out32(info->channel.IndexAddr, info->channel.TxControl); in rp_tiocmset()
1197 static int get_config(struct r_port *info, struct rocket_config __user *retinfo) in get_config() argument
1204 mutex_lock(&info->port.mutex); in get_config()
1205 tmp.line = info->line; in get_config()
1206 tmp.flags = info->flags; in get_config()
1207 tmp.close_delay = info->port.close_delay; in get_config()
1208 tmp.closing_wait = info->port.closing_wait; in get_config()
1209 tmp.port = rcktpt_io_addr[(info->line >> 5) & 3]; in get_config()
1210 mutex_unlock(&info->port.mutex); in get_config()
1217 static int set_config(struct tty_struct *tty, struct r_port *info, in set_config() argument
1225 mutex_lock(&info->port.mutex); in set_config()
1228 if ((new_serial.flags & ~ROCKET_USR_MASK) != (info->flags & ~ROCKET_USR_MASK)) { in set_config()
1229 mutex_unlock(&info->port.mutex); in set_config()
1232 info->flags = ((info->flags & ~ROCKET_USR_MASK) | (new_serial.flags & ROCKET_USR_MASK)); in set_config()
1233 configure_r_port(tty, info, NULL); in set_config()
1234 mutex_unlock(&info->port.mutex); in set_config()
1238 info->flags = ((info->flags & ~ROCKET_FLAGS) | (new_serial.flags & ROCKET_FLAGS)); in set_config()
1239 info->port.close_delay = new_serial.close_delay; in set_config()
1240 info->port.closing_wait = new_serial.closing_wait; in set_config()
1242 if ((info->flags & ROCKET_SPD_MASK) == ROCKET_SPD_HI) in set_config()
1244 if ((info->flags & ROCKET_SPD_MASK) == ROCKET_SPD_VHI) in set_config()
1246 if ((info->flags & ROCKET_SPD_MASK) == ROCKET_SPD_SHI) in set_config()
1248 if ((info->flags & ROCKET_SPD_MASK) == ROCKET_SPD_WARP) in set_config()
1250 mutex_unlock(&info->port.mutex); in set_config()
1252 configure_r_port(tty, info, NULL); in set_config()
1262 static int get_ports(struct r_port *info, struct rocket_ports __user *retports) in get_ports() argument
1284 static int reset_rm2(struct r_port *info, void __user *arg) in reset_rm2() argument
1296 if (rcktpt_type[info->board] != ROCKET_TYPE_MODEMII && in reset_rm2()
1297 rcktpt_type[info->board] != ROCKET_TYPE_MODEMIII) in reset_rm2()
1300 if (info->ctlp->BusType == isISA) in reset_rm2()
1301 sModemReset(info->ctlp, info->chan, reset); in reset_rm2()
1303 sPCIModemReset(info->ctlp, info->chan, reset); in reset_rm2()
1308 static int get_version(struct r_port *info, struct rocket_version __user *retvers) in get_version() argument
1319 struct r_port *info = tty->driver_data; in rp_ioctl() local
1323 if (cmd != RCKP_GET_PORTS && rocket_paranoia_check(info, "rp_ioctl")) in rp_ioctl()
1328 if (copy_to_user(argp, info, sizeof (struct r_port))) in rp_ioctl()
1332 ret = get_config(info, argp); in rp_ioctl()
1335 ret = set_config(tty, info, argp); in rp_ioctl()
1338 ret = get_ports(info, argp); in rp_ioctl()
1341 ret = reset_rm2(info, argp); in rp_ioctl()
1344 ret = get_version(info, argp); in rp_ioctl()
1354 struct r_port *info = tty->driver_data; in rp_send_xchar() local
1357 if (rocket_paranoia_check(info, "rp_send_xchar")) in rp_send_xchar()
1360 cp = &info->channel; in rp_send_xchar()
1369 struct r_port *info = tty->driver_data; in rp_throttle() local
1376 if (rocket_paranoia_check(info, "rp_throttle")) in rp_throttle()
1382 sClrRTS(&info->channel); in rp_throttle()
1387 struct r_port *info = tty->driver_data; in rp_unthrottle() local
1393 if (rocket_paranoia_check(info, "rp_unthrottle")) in rp_unthrottle()
1399 sSetRTS(&info->channel); in rp_unthrottle()
1412 struct r_port *info = tty->driver_data; in rp_stop() local
1416 info->xmit_cnt, info->xmit_fifo_room); in rp_stop()
1419 if (rocket_paranoia_check(info, "rp_stop")) in rp_stop()
1422 if (sGetTxCnt(&info->channel)) in rp_stop()
1423 sDisTransmit(&info->channel); in rp_stop()
1428 struct r_port *info = tty->driver_data; in rp_start() local
1432 info->xmit_cnt, info->xmit_fifo_room); in rp_start()
1435 if (rocket_paranoia_check(info, "rp_stop")) in rp_start()
1438 sEnTransmit(&info->channel); in rp_start()
1439 set_bit((info->aiop * 8) + info->chan, in rp_start()
1440 (void *) &xmit_flags[info->board]); in rp_start()
1448 struct r_port *info = tty->driver_data; in rp_wait_until_sent() local
1454 if (rocket_paranoia_check(info, "rp_wait_until_sent")) in rp_wait_until_sent()
1457 cp = &info->channel; in rp_wait_until_sent()
1463 printk(KERN_INFO "cps=%d...\n", info->cps); in rp_wait_until_sent()
1470 check_time = (HZ / info->cps) / 5; in rp_wait_until_sent()
1472 check_time = HZ * txcnt / info->cps; in rp_wait_until_sent()
1503 struct r_port *info = tty->driver_data; in rp_hangup() local
1506 if (rocket_paranoia_check(info, "rp_hangup")) in rp_hangup()
1510 printk(KERN_INFO "rp_hangup of ttyR%d...\n", info->line); in rp_hangup()
1513 spin_lock_irqsave(&info->port.lock, flags); in rp_hangup()
1514 if (info->port.flags & ASYNC_CLOSING) { in rp_hangup()
1515 spin_unlock_irqrestore(&info->port.lock, flags); in rp_hangup()
1518 if (info->port.count) in rp_hangup()
1520 clear_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]); in rp_hangup()
1521 spin_unlock_irqrestore(&info->port.lock, flags); in rp_hangup()
1523 tty_port_hangup(&info->port); in rp_hangup()
1525 cp = &info->channel; in rp_hangup()
1532 clear_bit(ASYNCB_INITIALIZED, &info->port.flags); in rp_hangup()
1534 wake_up_interruptible(&info->port.open_wait); in rp_hangup()
1546 struct r_port *info = tty->driver_data; in rp_put_char() local
1550 if (rocket_paranoia_check(info, "rp_put_char")) in rp_put_char()
1557 mutex_lock(&info->write_mtx); in rp_put_char()
1563 spin_lock_irqsave(&info->slock, flags); in rp_put_char()
1564 cp = &info->channel; in rp_put_char()
1566 if (!tty->stopped && info->xmit_fifo_room == 0) in rp_put_char()
1567 info->xmit_fifo_room = TXFIFO_SIZE - sGetTxCnt(cp); in rp_put_char()
1569 if (tty->stopped || info->xmit_fifo_room == 0 || info->xmit_cnt != 0) { in rp_put_char()
1570 info->xmit_buf[info->xmit_head++] = ch; in rp_put_char()
1571 info->xmit_head &= XMIT_BUF_SIZE - 1; in rp_put_char()
1572 info->xmit_cnt++; in rp_put_char()
1573 set_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]); in rp_put_char()
1576 info->xmit_fifo_room--; in rp_put_char()
1578 spin_unlock_irqrestore(&info->slock, flags); in rp_put_char()
1579 mutex_unlock(&info->write_mtx); in rp_put_char()
1593 struct r_port *info = tty->driver_data; in rp_write() local
1599 if (count <= 0 || rocket_paranoia_check(info, "rp_write")) in rp_write()
1602 if (mutex_lock_interruptible(&info->write_mtx)) in rp_write()
1608 cp = &info->channel; in rp_write()
1610 if (!tty->stopped && info->xmit_fifo_room < count) in rp_write()
1611 info->xmit_fifo_room = TXFIFO_SIZE - sGetTxCnt(cp); in rp_write()
1617 if (!tty->stopped && info->xmit_cnt == 0 && info->xmit_fifo_room > 0) { in rp_write()
1618 c = min(count, info->xmit_fifo_room); in rp_write()
1632 spin_lock_irqsave(&info->slock, flags); in rp_write()
1633 info->xmit_fifo_room -= c; in rp_write()
1634 spin_unlock_irqrestore(&info->slock, flags); in rp_write()
1644 if (!test_bit(ASYNCB_NORMAL_ACTIVE, &info->port.flags)) in rp_write()
1646 c = min(count, XMIT_BUF_SIZE - info->xmit_cnt - 1); in rp_write()
1647 c = min(c, XMIT_BUF_SIZE - info->xmit_head); in rp_write()
1652 memcpy(info->xmit_buf + info->xmit_head, b, c); in rp_write()
1654 spin_lock_irqsave(&info->slock, flags); in rp_write()
1655 info->xmit_head = in rp_write()
1656 (info->xmit_head + c) & (XMIT_BUF_SIZE - 1); in rp_write()
1657 info->xmit_cnt += c; in rp_write()
1658 spin_unlock_irqrestore(&info->slock, flags); in rp_write()
1666 set_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]); in rp_write()
1669 if (info->xmit_cnt < WAKEUP_CHARS) { in rp_write()
1675 mutex_unlock(&info->write_mtx); in rp_write()
1686 struct r_port *info = tty->driver_data; in rp_write_room() local
1689 if (rocket_paranoia_check(info, "rp_write_room")) in rp_write_room()
1692 ret = XMIT_BUF_SIZE - info->xmit_cnt - 1; in rp_write_room()
1707 struct r_port *info = tty->driver_data; in rp_chars_in_buffer() local
1709 if (rocket_paranoia_check(info, "rp_chars_in_buffer")) in rp_chars_in_buffer()
1713 printk(KERN_INFO "rp_chars_in_buffer returns %d...\n", info->xmit_cnt); in rp_chars_in_buffer()
1715 return info->xmit_cnt; in rp_chars_in_buffer()
1725 struct r_port *info = tty->driver_data; in rp_flush_buffer() local
1729 if (rocket_paranoia_check(info, "rp_flush_buffer")) in rp_flush_buffer()
1732 spin_lock_irqsave(&info->slock, flags); in rp_flush_buffer()
1733 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; in rp_flush_buffer()
1734 spin_unlock_irqrestore(&info->slock, flags); in rp_flush_buffer()
1741 cp = &info->channel; in rp_flush_buffer()