Lines Matching refs:port
204 struct tty_port port; member
267 static void raise_dtr(struct isi_port *port) in raise_dtr() argument
269 struct isi_board *card = port->card; in raise_dtr()
271 u16 channel = port->channel; in raise_dtr()
279 port->status |= ISI_DTR; in raise_dtr()
283 static inline void drop_dtr(struct isi_port *port) in drop_dtr() argument
285 struct isi_board *card = port->card; in drop_dtr()
287 u16 channel = port->channel; in drop_dtr()
295 port->status &= ~ISI_DTR; in drop_dtr()
299 static inline void raise_rts(struct isi_port *port) in raise_rts() argument
301 struct isi_board *card = port->card; in raise_rts()
303 u16 channel = port->channel; in raise_rts()
311 port->status |= ISI_RTS; in raise_rts()
315 static inline void drop_rts(struct isi_port *port) in drop_rts() argument
317 struct isi_board *card = port->card; in drop_rts()
319 u16 channel = port->channel; in drop_rts()
327 port->status &= ~ISI_RTS; in drop_rts()
332 static void isicom_dtr_rts(struct tty_port *port, int on) in isicom_dtr_rts() argument
334 struct isi_port *ip = container_of(port, struct isi_port, port); in isicom_dtr_rts()
357 static void drop_dtr_rts(struct isi_port *port) in drop_dtr_rts() argument
359 struct isi_board *card = port->card; in drop_dtr_rts()
361 u16 channel = port->channel; in drop_dtr_rts()
369 port->status &= ~(ISI_RTS | ISI_DTR); in drop_dtr_rts()
377 static inline int __isicom_paranoia_check(struct isi_port const *port, in __isicom_paranoia_check() argument
380 if (!port) { in __isicom_paranoia_check()
385 if (port->magic != ISICOM_MAGIC) { in __isicom_paranoia_check()
407 struct isi_port *port; in isicom_tx() local
423 port = isi_card[card].ports; in isicom_tx()
435 tty = tty_port_tty_get(&port->port); in isicom_tx()
439 for (; count > 0; count--, port++) { in isicom_tx()
441 if (!(port->port.flags & ASYNC_INITIALIZED) || in isicom_tx()
442 !(port->status & ISI_TXOK)) in isicom_tx()
445 txcount = min_t(short, TX_SIZE, port->xmit_cnt); in isicom_tx()
449 if (!(inw(base + 0x02) & (1 << port->channel))) in isicom_tx()
453 txcount, port->channel + 1); in isicom_tx()
454 outw((port->channel << isi_card[card].shift_count) | txcount, in isicom_tx()
460 - port->xmit_tail)); in isicom_tx()
464 wrd |= (port->port.xmit_buf[port->xmit_tail] in isicom_tx()
466 port->xmit_tail = (port->xmit_tail + 1) in isicom_tx()
468 port->xmit_cnt--; in isicom_tx()
480 outsw(base, port->port.xmit_buf+port->xmit_tail, word_count); in isicom_tx()
481 port->xmit_tail = (port->xmit_tail in isicom_tx()
484 port->xmit_cnt -= (word_count << 1); in isicom_tx()
487 wrd = port->port.xmit_buf[port->xmit_tail]; in isicom_tx()
488 port->xmit_tail = (port->xmit_tail + 1) in isicom_tx()
490 port->xmit_cnt--; in isicom_tx()
496 if (port->xmit_cnt <= 0) in isicom_tx()
497 port->status &= ~ISI_TXOK; in isicom_tx()
498 if (port->xmit_cnt <= WAKEUP_CHARS) in isicom_tx()
518 struct isi_port *port; in isicom_interrupt() local
555 port = card->ports + channel; in isicom_interrupt()
556 if (!(port->port.flags & ASYNC_INITIALIZED)) { in isicom_interrupt()
562 tty = tty_port_tty_get(&port->port); in isicom_interrupt()
580 if (port->port.flags & ASYNC_CHECK_CD) { in isicom_interrupt()
581 if (port->status & ISI_DCD) { in isicom_interrupt()
586 port->status &= ~ISI_DCD; in isicom_interrupt()
593 port->status |= ISI_DCD; in isicom_interrupt()
594 wake_up_interruptible(&port->port.open_wait); in isicom_interrupt()
598 port->status |= ISI_DCD; in isicom_interrupt()
600 port->status &= ~ISI_DCD; in isicom_interrupt()
603 if (tty_port_cts_enabled(&port->port)) { in isicom_interrupt()
608 port->status |= (ISI_TXOK in isicom_interrupt()
615 port->status &= ~(ISI_TXOK | ISI_CTS); in isicom_interrupt()
619 port->status |= ISI_CTS; in isicom_interrupt()
621 port->status &= ~ISI_CTS; in isicom_interrupt()
625 port->status |= ISI_DSR; in isicom_interrupt()
627 port->status &= ~ISI_DSR; in isicom_interrupt()
630 port->status |= ISI_RI; in isicom_interrupt()
632 port->status &= ~ISI_RI; in isicom_interrupt()
637 tty_insert_flip_char(&port->port, 0, TTY_BREAK); in isicom_interrupt()
638 if (port->port.flags & ASYNC_SAK) in isicom_interrupt()
640 tty_flip_buffer_push(&port->port); in isicom_interrupt()
653 count = tty_prepare_flip_string(&port->port, &rp, in isicom_interrupt()
661 tty_insert_flip_char(&port->port, inw(base) & 0xff, in isicom_interrupt()
674 tty_flip_buffer_push(&port->port); in isicom_interrupt()
685 struct isi_port *port = tty->driver_data; in isicom_config_port() local
686 struct isi_board *card = port->card; in isicom_config_port()
689 u16 channel_setup, channel = port->channel, in isicom_config_port()
716 if ((port->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) in isicom_config_port()
718 if ((port->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) in isicom_config_port()
720 if ((port->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI) in isicom_config_port()
722 if ((port->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP) in isicom_config_port()
727 drop_dtr(port); in isicom_config_port()
730 raise_dtr(port); in isicom_config_port()
762 port->port.flags &= ~ASYNC_CHECK_CD; in isicom_config_port()
764 port->port.flags |= ASYNC_CHECK_CD; in isicom_config_port()
768 port->port.flags &= ~ASYNC_CTS_FLOW; in isicom_config_port()
770 port->port.flags |= ASYNC_CTS_FLOW; in isicom_config_port()
797 struct isi_port *port; in isicom_setup_board() local
801 port = bp->ports; in isicom_setup_board()
802 for (channel = 0; channel < bp->port_count; channel++, port++) in isicom_setup_board()
803 drop_dtr_rts(port); in isicom_setup_board()
813 struct isi_port *port = container_of(tport, struct isi_port, port); in isicom_activate() local
814 struct isi_board *card = port->card; in isicom_activate()
823 port->xmit_cnt = port->xmit_head = port->xmit_tail = 0; in isicom_activate()
827 outw(0x8000 | (port->channel << card->shift_count) | 0x02, in isicom_activate()
838 static int isicom_carrier_raised(struct tty_port *port) in isicom_carrier_raised() argument
840 struct isi_port *ip = container_of(port, struct isi_port, port); in isicom_carrier_raised()
846 struct isi_port *port; in isicom_find_port() local
861 port = &isi_ports[line]; in isicom_find_port()
862 if (isicom_paranoia_check(port, tty->name, "isicom_open")) in isicom_find_port()
865 return &port->port; in isicom_find_port()
870 struct isi_port *port; in isicom_open() local
876 port = container_of(tport, struct isi_port, port); in isicom_open()
878 tty->driver_data = port; in isicom_open()
885 static void isicom_shutdown_port(struct isi_port *port) in isicom_shutdown_port() argument
887 struct isi_board *card = port->card; in isicom_shutdown_port()
901 struct isi_port *port = tty->driver_data; in isicom_flush_buffer() local
902 struct isi_board *card = port->card; in isicom_flush_buffer()
905 if (isicom_paranoia_check(port, tty->name, "isicom_flush_buffer")) in isicom_flush_buffer()
909 port->xmit_cnt = port->xmit_head = port->xmit_tail = 0; in isicom_flush_buffer()
915 static void isicom_shutdown(struct tty_port *port) in isicom_shutdown() argument
917 struct isi_port *ip = container_of(port, struct isi_port, port); in isicom_shutdown()
928 tty_port_free_xmit_buf(port); in isicom_shutdown()
934 struct tty_port *port; in isicom_close() local
939 port = &ip->port; in isicom_close()
942 tty_port_close(port, tty, filp); in isicom_close()
949 struct isi_port *port = tty->driver_data; in isicom_write() local
950 struct isi_board *card = port->card; in isicom_write()
954 if (isicom_paranoia_check(port, tty->name, "isicom_write")) in isicom_write()
960 cnt = min_t(int, count, min(SERIAL_XMIT_SIZE - port->xmit_cnt in isicom_write()
961 - 1, SERIAL_XMIT_SIZE - port->xmit_head)); in isicom_write()
965 memcpy(port->port.xmit_buf + port->xmit_head, buf, cnt); in isicom_write()
966 port->xmit_head = (port->xmit_head + cnt) & (SERIAL_XMIT_SIZE in isicom_write()
968 port->xmit_cnt += cnt; in isicom_write()
973 if (port->xmit_cnt && !tty->stopped && !tty->hw_stopped) in isicom_write()
974 port->status |= ISI_TXOK; in isicom_write()
982 struct isi_port *port = tty->driver_data; in isicom_put_char() local
983 struct isi_board *card = port->card; in isicom_put_char()
986 if (isicom_paranoia_check(port, tty->name, "isicom_put_char")) in isicom_put_char()
990 if (port->xmit_cnt >= SERIAL_XMIT_SIZE - 1) { in isicom_put_char()
995 port->port.xmit_buf[port->xmit_head++] = ch; in isicom_put_char()
996 port->xmit_head &= (SERIAL_XMIT_SIZE - 1); in isicom_put_char()
997 port->xmit_cnt++; in isicom_put_char()
1005 struct isi_port *port = tty->driver_data; in isicom_flush_chars() local
1007 if (isicom_paranoia_check(port, tty->name, "isicom_flush_chars")) in isicom_flush_chars()
1010 if (port->xmit_cnt <= 0 || tty->stopped || tty->hw_stopped || in isicom_flush_chars()
1011 !port->port.xmit_buf) in isicom_flush_chars()
1016 port->status |= ISI_TXOK; in isicom_flush_chars()
1022 struct isi_port *port = tty->driver_data; in isicom_write_room() local
1025 if (isicom_paranoia_check(port, tty->name, "isicom_write_room")) in isicom_write_room()
1028 free = SERIAL_XMIT_SIZE - port->xmit_cnt - 1; in isicom_write_room()
1037 struct isi_port *port = tty->driver_data; in isicom_chars_in_buffer() local
1038 if (isicom_paranoia_check(port, tty->name, "isicom_chars_in_buffer")) in isicom_chars_in_buffer()
1040 return port->xmit_cnt; in isicom_chars_in_buffer()
1046 struct isi_port *port = tty->driver_data; in isicom_send_break() local
1047 struct isi_board *card = port->card; in isicom_send_break()
1056 outw(0x8000 | ((port->channel) << (card->shift_count)) | 0x3, base); in isicom_send_break()
1067 struct isi_port *port = tty->driver_data; in isicom_tiocmget() local
1069 u16 status = port->status; in isicom_tiocmget()
1071 if (isicom_paranoia_check(port, tty->name, "isicom_ioctl")) in isicom_tiocmget()
1085 struct isi_port *port = tty->driver_data; in isicom_tiocmset() local
1088 if (isicom_paranoia_check(port, tty->name, "isicom_ioctl")) in isicom_tiocmset()
1091 spin_lock_irqsave(&port->card->card_lock, flags); in isicom_tiocmset()
1093 raise_rts(port); in isicom_tiocmset()
1095 raise_dtr(port); in isicom_tiocmset()
1098 drop_rts(port); in isicom_tiocmset()
1100 drop_dtr(port); in isicom_tiocmset()
1101 spin_unlock_irqrestore(&port->card->card_lock, flags); in isicom_tiocmset()
1109 struct isi_port *port = tty->driver_data; in isicom_set_serial_info() local
1116 mutex_lock(&port->port.mutex); in isicom_set_serial_info()
1117 reconfig_port = ((port->port.flags & ASYNC_SPD_MASK) != in isicom_set_serial_info()
1121 if ((newinfo.close_delay != port->port.close_delay) || in isicom_set_serial_info()
1122 (newinfo.closing_wait != port->port.closing_wait) || in isicom_set_serial_info()
1124 (port->port.flags & ~ASYNC_USR_MASK))) { in isicom_set_serial_info()
1125 mutex_unlock(&port->port.mutex); in isicom_set_serial_info()
1128 port->port.flags = ((port->port.flags & ~ASYNC_USR_MASK) | in isicom_set_serial_info()
1131 port->port.close_delay = newinfo.close_delay; in isicom_set_serial_info()
1132 port->port.closing_wait = newinfo.closing_wait; in isicom_set_serial_info()
1133 port->port.flags = ((port->port.flags & ~ASYNC_FLAGS) | in isicom_set_serial_info()
1138 spin_lock_irqsave(&port->card->card_lock, flags); in isicom_set_serial_info()
1140 spin_unlock_irqrestore(&port->card->card_lock, flags); in isicom_set_serial_info()
1142 mutex_unlock(&port->port.mutex); in isicom_set_serial_info()
1146 static int isicom_get_serial_info(struct isi_port *port, in isicom_get_serial_info() argument
1151 mutex_lock(&port->port.mutex); in isicom_get_serial_info()
1154 out_info.line = port - isi_ports; in isicom_get_serial_info()
1155 out_info.port = port->card->base; in isicom_get_serial_info()
1156 out_info.irq = port->card->irq; in isicom_get_serial_info()
1157 out_info.flags = port->port.flags; in isicom_get_serial_info()
1159 out_info.close_delay = port->port.close_delay; in isicom_get_serial_info()
1160 out_info.closing_wait = port->port.closing_wait; in isicom_get_serial_info()
1161 mutex_unlock(&port->port.mutex); in isicom_get_serial_info()
1170 struct isi_port *port = tty->driver_data; in isicom_ioctl() local
1173 if (isicom_paranoia_check(port, tty->name, "isicom_ioctl")) in isicom_ioctl()
1178 return isicom_get_serial_info(port, argp); in isicom_ioctl()
1193 struct isi_port *port = tty->driver_data; in isicom_set_termios() local
1196 if (isicom_paranoia_check(port, tty->name, "isicom_set_termios")) in isicom_set_termios()
1203 spin_lock_irqsave(&port->card->card_lock, flags); in isicom_set_termios()
1205 spin_unlock_irqrestore(&port->card->card_lock, flags); in isicom_set_termios()
1217 struct isi_port *port = tty->driver_data; in isicom_throttle() local
1218 struct isi_board *card = port->card; in isicom_throttle()
1220 if (isicom_paranoia_check(port, tty->name, "isicom_throttle")) in isicom_throttle()
1224 card->port_status &= ~(1 << port->channel); in isicom_throttle()
1231 struct isi_port *port = tty->driver_data; in isicom_unthrottle() local
1232 struct isi_board *card = port->card; in isicom_unthrottle()
1234 if (isicom_paranoia_check(port, tty->name, "isicom_unthrottle")) in isicom_unthrottle()
1238 card->port_status |= (1 << port->channel); in isicom_unthrottle()
1245 struct isi_port *port = tty->driver_data; in isicom_stop() local
1247 if (isicom_paranoia_check(port, tty->name, "isicom_stop")) in isicom_stop()
1252 port->status &= ~ISI_TXOK; in isicom_stop()
1258 struct isi_port *port = tty->driver_data; in isicom_start() local
1260 if (isicom_paranoia_check(port, tty->name, "isicom_start")) in isicom_start()
1265 port->status |= ISI_TXOK; in isicom_start()
1270 struct isi_port *port = tty->driver_data; in isicom_hangup() local
1272 if (isicom_paranoia_check(port, tty->name, "isicom_hangup")) in isicom_hangup()
1274 tty_port_hangup(&port->port); in isicom_hangup()
1614 struct tty_port *tport = &board->ports[index].port; in isicom_probe()
1645 tty_port_destroy(&board->ports[i].port); in isicom_remove()
1658 struct isi_port *port; in isicom_init() local
1661 port = &isi_ports[idx * 16]; in isicom_init()
1662 isi_card[idx].ports = port; in isicom_init()
1664 for (channel = 0; channel < 16; channel++, port++) { in isicom_init()
1665 port->magic = ISICOM_MAGIC; in isicom_init()
1666 port->card = &isi_card[idx]; in isicom_init()
1667 port->channel = channel; in isicom_init()
1668 port->status = 0; in isicom_init()