Lines Matching refs:info

268 	const struct mxser_cardinfo *info;  member
357 static void mxser_set_must_fifo_value(struct mxser_port *info) in mxser_set_must_fifo_value() argument
362 oldlcr = inb(info->ioaddr + UART_LCR); in mxser_set_must_fifo_value()
363 outb(MOXA_MUST_ENTER_ENCHANCE, info->ioaddr + UART_LCR); in mxser_set_must_fifo_value()
365 efr = inb(info->ioaddr + MOXA_MUST_EFR_REGISTER); in mxser_set_must_fifo_value()
369 outb(efr, info->ioaddr + MOXA_MUST_EFR_REGISTER); in mxser_set_must_fifo_value()
370 outb((u8)info->rx_high_water, info->ioaddr + MOXA_MUST_RBRTH_REGISTER); in mxser_set_must_fifo_value()
371 outb((u8)info->rx_trigger, info->ioaddr + MOXA_MUST_RBRTI_REGISTER); in mxser_set_must_fifo_value()
372 outb((u8)info->rx_low_water, info->ioaddr + MOXA_MUST_RBRTL_REGISTER); in mxser_set_must_fifo_value()
373 outb(oldlcr, info->ioaddr + UART_LCR); in mxser_set_must_fifo_value()
514 static void process_txrx_fifo(struct mxser_port *info) in process_txrx_fifo() argument
518 if ((info->type == PORT_16450) || (info->type == PORT_8250)) { in process_txrx_fifo()
519 info->rx_trigger = 1; in process_txrx_fifo()
520 info->rx_high_water = 1; in process_txrx_fifo()
521 info->rx_low_water = 1; in process_txrx_fifo()
522 info->xmit_fifo_size = 1; in process_txrx_fifo()
525 if (info->board->chip_flag == Gpci_uart_info[i].type) { in process_txrx_fifo()
526 info->rx_trigger = Gpci_uart_info[i].rx_trigger; in process_txrx_fifo()
527 info->rx_low_water = Gpci_uart_info[i].rx_low_water; in process_txrx_fifo()
528 info->rx_high_water = Gpci_uart_info[i].rx_high_water; in process_txrx_fifo()
529 info->xmit_fifo_size = Gpci_uart_info[i].xmit_fifo_size; in process_txrx_fifo()
573 struct mxser_port *info = tty->driver_data; in mxser_set_baud() local
577 if (!info->ioaddr) in mxser_set_baud()
580 if (newspd > info->max_baud) in mxser_set_baud()
584 quot = 2 * info->baud_base / 269; in mxser_set_baud()
587 quot = info->baud_base / newspd; in mxser_set_baud()
590 baud = info->baud_base/quot; in mxser_set_baud()
596 info->timeout = ((info->xmit_fifo_size * HZ * 10 * quot) / info->baud_base); in mxser_set_baud()
597 info->timeout += HZ / 50; /* Add .02 seconds of slop */ in mxser_set_baud()
600 info->MCR |= UART_MCR_DTR; in mxser_set_baud()
601 outb(info->MCR, info->ioaddr + UART_MCR); in mxser_set_baud()
603 info->MCR &= ~UART_MCR_DTR; in mxser_set_baud()
604 outb(info->MCR, info->ioaddr + UART_MCR); in mxser_set_baud()
608 cval = inb(info->ioaddr + UART_LCR); in mxser_set_baud()
610 outb(cval | UART_LCR_DLAB, info->ioaddr + UART_LCR); /* set DLAB */ in mxser_set_baud()
612 outb(quot & 0xff, info->ioaddr + UART_DLL); /* LS of divisor */ in mxser_set_baud()
613 outb(quot >> 8, info->ioaddr + UART_DLM); /* MS of divisor */ in mxser_set_baud()
614 outb(cval, info->ioaddr + UART_LCR); /* reset DLAB */ in mxser_set_baud()
618 quot = info->baud_base % newspd; in mxser_set_baud()
626 mxser_set_must_enum_value(info->ioaddr, quot); in mxser_set_baud()
629 mxser_set_must_enum_value(info->ioaddr, 0); in mxser_set_baud()
641 struct mxser_port *info = tty->driver_data; in mxser_change_speed() local
647 if (!info->ioaddr) in mxser_change_speed()
680 if ((info->type == PORT_8250) || (info->type == PORT_16450)) { in mxser_change_speed()
681 if (info->board->chip_flag) { in mxser_change_speed()
684 mxser_set_must_fifo_value(info); in mxser_change_speed()
689 if (info->board->chip_flag) { in mxser_change_speed()
691 mxser_set_must_fifo_value(info); in mxser_change_speed()
693 switch (info->rx_trigger) { in mxser_change_speed()
711 info->IER &= ~UART_IER_MSI; in mxser_change_speed()
712 info->MCR &= ~UART_MCR_AFE; in mxser_change_speed()
714 info->port.flags |= ASYNC_CTS_FLOW; in mxser_change_speed()
715 info->IER |= UART_IER_MSI; in mxser_change_speed()
716 if ((info->type == PORT_16550A) || (info->board->chip_flag)) { in mxser_change_speed()
717 info->MCR |= UART_MCR_AFE; in mxser_change_speed()
719 status = inb(info->ioaddr + UART_MSR); in mxser_change_speed()
723 if (info->type != PORT_16550A && in mxser_change_speed()
724 !info->board->chip_flag) { in mxser_change_speed()
725 outb(info->IER & ~UART_IER_THRI, in mxser_change_speed()
726 info->ioaddr + in mxser_change_speed()
728 info->IER |= UART_IER_THRI; in mxser_change_speed()
729 outb(info->IER, info->ioaddr + in mxser_change_speed()
737 if ((info->type != PORT_16550A) && in mxser_change_speed()
738 (!info->board->chip_flag)) { in mxser_change_speed()
739 info->IER &= ~UART_IER_THRI; in mxser_change_speed()
740 outb(info->IER, info->ioaddr + in mxser_change_speed()
747 info->port.flags &= ~ASYNC_CTS_FLOW; in mxser_change_speed()
749 outb(info->MCR, info->ioaddr + UART_MCR); in mxser_change_speed()
751 info->port.flags &= ~ASYNC_CHECK_CD; in mxser_change_speed()
753 info->port.flags |= ASYNC_CHECK_CD; in mxser_change_speed()
754 info->IER |= UART_IER_MSI; in mxser_change_speed()
756 outb(info->IER, info->ioaddr + UART_IER); in mxser_change_speed()
761 info->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; in mxser_change_speed()
763 info->read_status_mask |= UART_LSR_FE | UART_LSR_PE; in mxser_change_speed()
765 info->read_status_mask |= UART_LSR_BI; in mxser_change_speed()
767 info->ignore_status_mask = 0; in mxser_change_speed()
770 info->ignore_status_mask |= UART_LSR_BI; in mxser_change_speed()
771 info->read_status_mask |= UART_LSR_BI; in mxser_change_speed()
777 info->ignore_status_mask |= in mxser_change_speed()
781 info->read_status_mask |= in mxser_change_speed()
787 if (info->board->chip_flag) { in mxser_change_speed()
788 mxser_set_must_xon1_value(info->ioaddr, START_CHAR(tty)); in mxser_change_speed()
789 mxser_set_must_xoff1_value(info->ioaddr, STOP_CHAR(tty)); in mxser_change_speed()
792 info->ioaddr); in mxser_change_speed()
795 info->ioaddr); in mxser_change_speed()
799 info->ioaddr); in mxser_change_speed()
802 info->ioaddr); in mxser_change_speed()
807 outb(fcr, info->ioaddr + UART_FCR); /* set fcr */ in mxser_change_speed()
808 outb(cval, info->ioaddr + UART_LCR); in mxser_change_speed()
864 struct mxser_port *info = container_of(port, struct mxser_port, port); in mxser_activate() local
872 spin_lock_irqsave(&info->slock, flags); in mxser_activate()
874 if (!info->ioaddr || !info->type) { in mxser_activate()
877 spin_unlock_irqrestore(&info->slock, flags); in mxser_activate()
880 info->port.xmit_buf = (unsigned char *) page; in mxser_activate()
886 if (info->board->chip_flag) in mxser_activate()
889 MOXA_MUST_FCR_GDA_MODE_ENABLE), info->ioaddr + UART_FCR); in mxser_activate()
892 info->ioaddr + UART_FCR); in mxser_activate()
899 if (inb(info->ioaddr + UART_LSR) == 0xff) { in mxser_activate()
900 spin_unlock_irqrestore(&info->slock, flags); in mxser_activate()
911 (void) inb(info->ioaddr + UART_LSR); in mxser_activate()
912 (void) inb(info->ioaddr + UART_RX); in mxser_activate()
913 (void) inb(info->ioaddr + UART_IIR); in mxser_activate()
914 (void) inb(info->ioaddr + UART_MSR); in mxser_activate()
919 outb(UART_LCR_WLEN8, info->ioaddr + UART_LCR); /* reset DLAB */ in mxser_activate()
920 info->MCR = UART_MCR_DTR | UART_MCR_RTS; in mxser_activate()
921 outb(info->MCR, info->ioaddr + UART_MCR); in mxser_activate()
926 info->IER = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI; in mxser_activate()
928 if (info->board->chip_flag) in mxser_activate()
929 info->IER |= MOXA_MUST_IER_EGDAI; in mxser_activate()
930 outb(info->IER, info->ioaddr + UART_IER); /* enable interrupts */ in mxser_activate()
935 (void) inb(info->ioaddr + UART_LSR); in mxser_activate()
936 (void) inb(info->ioaddr + UART_RX); in mxser_activate()
937 (void) inb(info->ioaddr + UART_IIR); in mxser_activate()
938 (void) inb(info->ioaddr + UART_MSR); in mxser_activate()
941 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; in mxser_activate()
947 spin_unlock_irqrestore(&info->slock, flags); in mxser_activate()
957 struct mxser_port *info = container_of(port, struct mxser_port, port); in mxser_shutdown_port() local
960 spin_lock_irqsave(&info->slock, flags); in mxser_shutdown_port()
966 wake_up_interruptible(&info->port.delta_msr_wait); in mxser_shutdown_port()
971 if (info->port.xmit_buf) { in mxser_shutdown_port()
972 free_page((unsigned long) info->port.xmit_buf); in mxser_shutdown_port()
973 info->port.xmit_buf = NULL; in mxser_shutdown_port()
976 info->IER = 0; in mxser_shutdown_port()
977 outb(0x00, info->ioaddr + UART_IER); in mxser_shutdown_port()
980 if (info->board->chip_flag) in mxser_shutdown_port()
983 info->ioaddr + UART_FCR); in mxser_shutdown_port()
986 info->ioaddr + UART_FCR); in mxser_shutdown_port()
989 (void) inb(info->ioaddr + UART_RX); in mxser_shutdown_port()
992 if (info->board->chip_flag) in mxser_shutdown_port()
993 SET_MOXA_MUST_NO_SOFTWARE_FLOW_CONTROL(info->ioaddr); in mxser_shutdown_port()
995 spin_unlock_irqrestore(&info->slock, flags); in mxser_shutdown_port()
1006 struct mxser_port *info; in mxser_open() local
1012 info = &mxser_boards[line / MXSER_PORTS_PER_BOARD].ports[line % MXSER_PORTS_PER_BOARD]; in mxser_open()
1013 if (!info->ioaddr) in mxser_open()
1016 tty->driver_data = info; in mxser_open()
1017 return tty_port_open(&info->port, tty, filp); in mxser_open()
1022 struct mxser_port *info = tty->driver_data; in mxser_flush_buffer() local
1027 spin_lock_irqsave(&info->slock, flags); in mxser_flush_buffer()
1028 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; in mxser_flush_buffer()
1030 fcr = inb(info->ioaddr + UART_FCR); in mxser_flush_buffer()
1032 info->ioaddr + UART_FCR); in mxser_flush_buffer()
1033 outb(fcr, info->ioaddr + UART_FCR); in mxser_flush_buffer()
1035 spin_unlock_irqrestore(&info->slock, flags); in mxser_flush_buffer()
1043 struct mxser_port *info = container_of(port, struct mxser_port, port); in mxser_close_port() local
1051 info->IER &= ~UART_IER_RLSI; in mxser_close_port()
1052 if (info->board->chip_flag) in mxser_close_port()
1053 info->IER &= ~MOXA_MUST_RECV_ISR; in mxser_close_port()
1055 outb(info->IER, info->ioaddr + UART_IER); in mxser_close_port()
1062 while (!(inb(info->ioaddr + UART_LSR) & UART_LSR_TEMT)) { in mxser_close_port()
1077 struct mxser_port *info = tty->driver_data; in mxser_close() local
1078 struct tty_port *port = &info->port; in mxser_close()
1080 if (tty->index == MXSER_PORTS || info == NULL) in mxser_close()
1103 struct mxser_port *info = tty->driver_data; in mxser_write() local
1106 if (!info->port.xmit_buf) in mxser_write()
1110 c = min_t(int, count, min(SERIAL_XMIT_SIZE - info->xmit_cnt - 1, in mxser_write()
1111 SERIAL_XMIT_SIZE - info->xmit_head)); in mxser_write()
1115 memcpy(info->port.xmit_buf + info->xmit_head, buf, c); in mxser_write()
1116 spin_lock_irqsave(&info->slock, flags); in mxser_write()
1117 info->xmit_head = (info->xmit_head + c) & in mxser_write()
1119 info->xmit_cnt += c; in mxser_write()
1120 spin_unlock_irqrestore(&info->slock, flags); in mxser_write()
1127 if (info->xmit_cnt && !tty->stopped) { in mxser_write()
1129 (info->type == PORT_16550A) || in mxser_write()
1130 (info->board->chip_flag)) { in mxser_write()
1131 spin_lock_irqsave(&info->slock, flags); in mxser_write()
1132 outb(info->IER & ~UART_IER_THRI, info->ioaddr + in mxser_write()
1134 info->IER |= UART_IER_THRI; in mxser_write()
1135 outb(info->IER, info->ioaddr + UART_IER); in mxser_write()
1136 spin_unlock_irqrestore(&info->slock, flags); in mxser_write()
1144 struct mxser_port *info = tty->driver_data; in mxser_put_char() local
1147 if (!info->port.xmit_buf) in mxser_put_char()
1150 if (info->xmit_cnt >= SERIAL_XMIT_SIZE - 1) in mxser_put_char()
1153 spin_lock_irqsave(&info->slock, flags); in mxser_put_char()
1154 info->port.xmit_buf[info->xmit_head++] = ch; in mxser_put_char()
1155 info->xmit_head &= SERIAL_XMIT_SIZE - 1; in mxser_put_char()
1156 info->xmit_cnt++; in mxser_put_char()
1157 spin_unlock_irqrestore(&info->slock, flags); in mxser_put_char()
1160 (info->type == PORT_16550A) || in mxser_put_char()
1161 info->board->chip_flag) { in mxser_put_char()
1162 spin_lock_irqsave(&info->slock, flags); in mxser_put_char()
1163 outb(info->IER & ~UART_IER_THRI, info->ioaddr + UART_IER); in mxser_put_char()
1164 info->IER |= UART_IER_THRI; in mxser_put_char()
1165 outb(info->IER, info->ioaddr + UART_IER); in mxser_put_char()
1166 spin_unlock_irqrestore(&info->slock, flags); in mxser_put_char()
1175 struct mxser_port *info = tty->driver_data; in mxser_flush_chars() local
1178 if (info->xmit_cnt <= 0 || tty->stopped || !info->port.xmit_buf || in mxser_flush_chars()
1179 (tty->hw_stopped && info->type != PORT_16550A && in mxser_flush_chars()
1180 !info->board->chip_flag)) in mxser_flush_chars()
1183 spin_lock_irqsave(&info->slock, flags); in mxser_flush_chars()
1185 outb(info->IER & ~UART_IER_THRI, info->ioaddr + UART_IER); in mxser_flush_chars()
1186 info->IER |= UART_IER_THRI; in mxser_flush_chars()
1187 outb(info->IER, info->ioaddr + UART_IER); in mxser_flush_chars()
1189 spin_unlock_irqrestore(&info->slock, flags); in mxser_flush_chars()
1194 struct mxser_port *info = tty->driver_data; in mxser_write_room() local
1197 ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1; in mxser_write_room()
1203 struct mxser_port *info = tty->driver_data; in mxser_chars_in_buffer() local
1204 return info->xmit_cnt; in mxser_chars_in_buffer()
1215 struct mxser_port *info = tty->driver_data; in mxser_get_serial_info() local
1217 .type = info->type, in mxser_get_serial_info()
1219 .port = info->ioaddr, in mxser_get_serial_info()
1220 .irq = info->board->irq, in mxser_get_serial_info()
1221 .flags = info->port.flags, in mxser_get_serial_info()
1222 .baud_base = info->baud_base, in mxser_get_serial_info()
1223 .close_delay = info->port.close_delay, in mxser_get_serial_info()
1224 .closing_wait = info->port.closing_wait, in mxser_get_serial_info()
1225 .custom_divisor = info->custom_divisor, in mxser_get_serial_info()
1236 struct mxser_port *info = tty->driver_data; in mxser_set_serial_info() local
1237 struct tty_port *port = &info->port; in mxser_set_serial_info()
1244 if (!new_info || !info->ioaddr) in mxser_set_serial_info()
1249 if (new_serial.irq != info->board->irq || in mxser_set_serial_info()
1250 new_serial.port != info->ioaddr) in mxser_set_serial_info()
1256 if ((new_serial.baud_base != info->baud_base) || in mxser_set_serial_info()
1257 (new_serial.close_delay != info->port.close_delay) || in mxser_set_serial_info()
1258 ((new_serial.flags & ~ASYNC_USR_MASK) != (info->port.flags & ~ASYNC_USR_MASK))) in mxser_set_serial_info()
1260 info->port.flags = ((info->port.flags & ~ASYNC_USR_MASK) | in mxser_set_serial_info()
1273 (new_serial.baud_base != info->baud_base || in mxser_set_serial_info()
1275 info->custom_divisor)) { in mxser_set_serial_info()
1283 info->type = new_serial.type; in mxser_set_serial_info()
1285 process_txrx_fifo(info); in mxser_set_serial_info()
1289 spin_lock_irqsave(&info->slock, sl_flags); in mxser_set_serial_info()
1291 spin_unlock_irqrestore(&info->slock, sl_flags); in mxser_set_serial_info()
1311 static int mxser_get_lsr_info(struct mxser_port *info, in mxser_get_lsr_info() argument
1318 spin_lock_irqsave(&info->slock, flags); in mxser_get_lsr_info()
1319 status = inb(info->ioaddr + UART_LSR); in mxser_get_lsr_info()
1320 spin_unlock_irqrestore(&info->slock, flags); in mxser_get_lsr_info()
1327 struct mxser_port *info = tty->driver_data; in mxser_tiocmget() local
1337 control = info->MCR; in mxser_tiocmget()
1339 spin_lock_irqsave(&info->slock, flags); in mxser_tiocmget()
1340 status = inb(info->ioaddr + UART_MSR); in mxser_tiocmget()
1342 mxser_check_modem_status(tty, info, status); in mxser_tiocmget()
1343 spin_unlock_irqrestore(&info->slock, flags); in mxser_tiocmget()
1355 struct mxser_port *info = tty->driver_data; in mxser_tiocmset() local
1364 spin_lock_irqsave(&info->slock, flags); in mxser_tiocmset()
1367 info->MCR |= UART_MCR_RTS; in mxser_tiocmset()
1369 info->MCR |= UART_MCR_DTR; in mxser_tiocmset()
1372 info->MCR &= ~UART_MCR_RTS; in mxser_tiocmset()
1374 info->MCR &= ~UART_MCR_DTR; in mxser_tiocmset()
1376 outb(info->MCR, info->ioaddr + UART_MCR); in mxser_tiocmset()
1377 spin_unlock_irqrestore(&info->slock, flags); in mxser_tiocmset()
1642 static int mxser_cflags_changed(struct mxser_port *info, unsigned long arg, in mxser_cflags_changed() argument
1649 spin_lock_irqsave(&info->slock, flags); in mxser_cflags_changed()
1650 cnow = info->icount; /* atomic copy */ in mxser_cflags_changed()
1651 spin_unlock_irqrestore(&info->slock, flags); in mxser_cflags_changed()
1666 struct mxser_port *info = tty->driver_data; in mxser_ioctl() local
1667 struct tty_port *port = &info->port; in mxser_ioctl()
1683 if (info->board->chip_flag != MOXA_MUST_MU860_HWID) in mxser_ioctl()
1697 spin_lock_irq(&info->slock); in mxser_ioctl()
1698 val = inb(info->opmode_ioaddr); in mxser_ioctl()
1701 outb(val, info->opmode_ioaddr); in mxser_ioctl()
1702 spin_unlock_irq(&info->slock); in mxser_ioctl()
1705 spin_lock_irq(&info->slock); in mxser_ioctl()
1706 opmode = inb(info->opmode_ioaddr) >> shiftbit; in mxser_ioctl()
1707 spin_unlock_irq(&info->slock); in mxser_ioctl()
1731 return mxser_get_lsr_info(info, argp); in mxser_ioctl()
1739 spin_lock_irqsave(&info->slock, flags); in mxser_ioctl()
1740 cnow = info->icount; /* note the counters on entry */ in mxser_ioctl()
1741 spin_unlock_irqrestore(&info->slock, flags); in mxser_ioctl()
1743 return wait_event_interruptible(info->port.delta_msr_wait, in mxser_ioctl()
1744 mxser_cflags_changed(info, arg, &cnow)); in mxser_ioctl()
1746 return put_user(info->baud_base != 115200 ? 1 : 0, (int __user *)argp); in mxser_ioctl()
1748 spin_lock_irq(&info->slock); in mxser_ioctl()
1749 info->mon_data.rxcnt = 0; in mxser_ioctl()
1750 info->mon_data.txcnt = 0; in mxser_ioctl()
1751 spin_unlock_irq(&info->slock); in mxser_ioctl()
1758 spin_lock_irq(&info->slock); in mxser_ioctl()
1759 lsr = inb(info->ioaddr + UART_LSR) & UART_LSR_THRE; in mxser_ioctl()
1760 spin_unlock_irq(&info->slock); in mxser_ioctl()
1768 spin_lock_irq(&info->slock); in mxser_ioctl()
1769 status = mxser_get_msr(info->ioaddr, 1, tty->index); in mxser_ioctl()
1770 mxser_check_modem_status(tty, info, status); in mxser_ioctl()
1772 mcr = inb(info->ioaddr + UART_MCR); in mxser_ioctl()
1773 spin_unlock_irq(&info->slock); in mxser_ioctl()
1776 info->mon_data.hold_reason &= ~NPPI_NOTIFY_XOFFHOLD; in mxser_ioctl()
1778 info->mon_data.hold_reason |= NPPI_NOTIFY_XOFFHOLD; in mxser_ioctl()
1781 info->mon_data.hold_reason &= ~NPPI_NOTIFY_XOFFXENT; in mxser_ioctl()
1783 info->mon_data.hold_reason |= NPPI_NOTIFY_XOFFXENT; in mxser_ioctl()
1786 info->mon_data.hold_reason |= NPPI_NOTIFY_CTSHOLD; in mxser_ioctl()
1788 info->mon_data.hold_reason &= ~NPPI_NOTIFY_CTSHOLD; in mxser_ioctl()
1790 if (copy_to_user(argp, &info->mon_data, in mxser_ioctl()
1797 if (put_user(info->err_shadow, (unsigned char __user *)argp)) in mxser_ioctl()
1800 info->err_shadow = 0; in mxser_ioctl()
1828 struct mxser_port *info = tty->driver_data; in mxser_get_icount() local
1832 spin_lock_irqsave(&info->slock, flags); in mxser_get_icount()
1833 cnow = info->icount; in mxser_get_icount()
1834 spin_unlock_irqrestore(&info->slock, flags); in mxser_get_icount()
1852 struct mxser_port *info = tty->driver_data; in mxser_stoprx() local
1854 info->ldisc_stop_rx = 1; in mxser_stoprx()
1856 if (info->board->chip_flag) { in mxser_stoprx()
1857 info->IER &= ~MOXA_MUST_RECV_ISR; in mxser_stoprx()
1858 outb(info->IER, info->ioaddr + UART_IER); in mxser_stoprx()
1860 info->x_char = STOP_CHAR(tty); in mxser_stoprx()
1861 outb(0, info->ioaddr + UART_IER); in mxser_stoprx()
1862 info->IER |= UART_IER_THRI; in mxser_stoprx()
1863 outb(info->IER, info->ioaddr + UART_IER); in mxser_stoprx()
1868 info->MCR &= ~UART_MCR_RTS; in mxser_stoprx()
1869 outb(info->MCR, info->ioaddr + UART_MCR); in mxser_stoprx()
1884 struct mxser_port *info = tty->driver_data; in mxser_unthrottle() local
1887 info->ldisc_stop_rx = 0; in mxser_unthrottle()
1889 if (info->x_char) in mxser_unthrottle()
1890 info->x_char = 0; in mxser_unthrottle()
1892 if (info->board->chip_flag) { in mxser_unthrottle()
1893 info->IER |= MOXA_MUST_RECV_ISR; in mxser_unthrottle()
1894 outb(info->IER, info->ioaddr + UART_IER); in mxser_unthrottle()
1896 info->x_char = START_CHAR(tty); in mxser_unthrottle()
1897 outb(0, info->ioaddr + UART_IER); in mxser_unthrottle()
1898 info->IER |= UART_IER_THRI; in mxser_unthrottle()
1899 outb(info->IER, info->ioaddr + UART_IER); in mxser_unthrottle()
1905 info->MCR |= UART_MCR_RTS; in mxser_unthrottle()
1906 outb(info->MCR, info->ioaddr + UART_MCR); in mxser_unthrottle()
1918 struct mxser_port *info = tty->driver_data; in mxser_stop() local
1921 spin_lock_irqsave(&info->slock, flags); in mxser_stop()
1922 if (info->IER & UART_IER_THRI) { in mxser_stop()
1923 info->IER &= ~UART_IER_THRI; in mxser_stop()
1924 outb(info->IER, info->ioaddr + UART_IER); in mxser_stop()
1926 spin_unlock_irqrestore(&info->slock, flags); in mxser_stop()
1931 struct mxser_port *info = tty->driver_data; in mxser_start() local
1934 spin_lock_irqsave(&info->slock, flags); in mxser_start()
1935 if (info->xmit_cnt && info->port.xmit_buf) { in mxser_start()
1936 outb(info->IER & ~UART_IER_THRI, info->ioaddr + UART_IER); in mxser_start()
1937 info->IER |= UART_IER_THRI; in mxser_start()
1938 outb(info->IER, info->ioaddr + UART_IER); in mxser_start()
1940 spin_unlock_irqrestore(&info->slock, flags); in mxser_start()
1945 struct mxser_port *info = tty->driver_data; in mxser_set_termios() local
1948 spin_lock_irqsave(&info->slock, flags); in mxser_set_termios()
1950 spin_unlock_irqrestore(&info->slock, flags); in mxser_set_termios()
1963 if (info->board->chip_flag) { in mxser_set_termios()
1964 spin_lock_irqsave(&info->slock, flags); in mxser_set_termios()
1966 info->ioaddr); in mxser_set_termios()
1967 spin_unlock_irqrestore(&info->slock, flags); in mxser_set_termios()
1979 struct mxser_port *info = tty->driver_data; in mxser_wait_until_sent() local
1984 if (info->type == PORT_UNKNOWN) in mxser_wait_until_sent()
1987 if (info->xmit_fifo_size == 0) in mxser_wait_until_sent()
1999 char_time = (info->timeout - HZ / 50) / info->xmit_fifo_size; in mxser_wait_until_sent()
2014 if (!timeout || timeout > 2 * info->timeout) in mxser_wait_until_sent()
2015 timeout = 2 * info->timeout; in mxser_wait_until_sent()
2017 spin_lock_irqsave(&info->slock, flags); in mxser_wait_until_sent()
2018 while (!((lsr = inb(info->ioaddr + UART_LSR)) & UART_LSR_TEMT)) { in mxser_wait_until_sent()
2019 spin_unlock_irqrestore(&info->slock, flags); in mxser_wait_until_sent()
2021 spin_lock_irqsave(&info->slock, flags); in mxser_wait_until_sent()
2027 spin_unlock_irqrestore(&info->slock, flags); in mxser_wait_until_sent()
2036 struct mxser_port *info = tty->driver_data; in mxser_hangup() local
2039 tty_port_hangup(&info->port); in mxser_hangup()
2047 struct mxser_port *info = tty->driver_data; in mxser_rs_break() local
2050 spin_lock_irqsave(&info->slock, flags); in mxser_rs_break()
2052 outb(inb(info->ioaddr + UART_LCR) | UART_LCR_SBC, in mxser_rs_break()
2053 info->ioaddr + UART_LCR); in mxser_rs_break()
2055 outb(inb(info->ioaddr + UART_LCR) & ~UART_LCR_SBC, in mxser_rs_break()
2056 info->ioaddr + UART_LCR); in mxser_rs_break()
2057 spin_unlock_irqrestore(&info->slock, flags); in mxser_rs_break()
2236 max = brd->info->nports; in mxser_interrupt()
2359 brd->vector < brd->ports[0].ioaddr + 8 * brd->info->nports; in mxser_overlapping_vector()
2378 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); in mxser_release_ISA_res()
2385 struct mxser_port *info; in mxser_initbrd() local
2392 for (i = 0; i < brd->info->nports; i++) { in mxser_initbrd()
2393 info = &brd->ports[i]; in mxser_initbrd()
2394 tty_port_init(&info->port); in mxser_initbrd()
2395 info->port.ops = &mxser_port_ops; in mxser_initbrd()
2396 info->board = brd; in mxser_initbrd()
2397 info->stop_rx = 0; in mxser_initbrd()
2398 info->ldisc_stop_rx = 0; in mxser_initbrd()
2402 mxser_enable_must_enchance_mode(info->ioaddr); in mxser_initbrd()
2404 info->port.flags = ASYNC_SHARE_IRQ; in mxser_initbrd()
2405 info->type = brd->uart_type; in mxser_initbrd()
2407 process_txrx_fifo(info); in mxser_initbrd()
2409 info->custom_divisor = info->baud_base * 16; in mxser_initbrd()
2410 info->port.close_delay = 5 * HZ / 10; in mxser_initbrd()
2411 info->port.closing_wait = 30 * HZ; in mxser_initbrd()
2412 info->normal_termios = mxvar_sdriver->init_termios; in mxser_initbrd()
2413 memset(&info->mon_data, 0, sizeof(struct mxser_mon)); in mxser_initbrd()
2414 info->err_shadow = 0; in mxser_initbrd()
2415 spin_lock_init(&info->slock); in mxser_initbrd()
2418 outb(inb(info->ioaddr + UART_IER) & 0xf0, in mxser_initbrd()
2419 info->ioaddr + UART_IER); in mxser_initbrd()
2425 for (i = 0; i < brd->info->nports; i++) in mxser_initbrd()
2429 brd->info->name, brd->irq); in mxser_initbrd()
2439 for (i = 0; i < brd->info->nports; i++) { in mxser_board_remove()
2457 brd->info = &mxser_cards[0]; in mxser_get_ISA_conf()
2460 brd->info = &mxser_cards[1]; in mxser_get_ISA_conf()
2463 brd->info = &mxser_cards[2]; in mxser_get_ISA_conf()
2466 brd->info = &mxser_cards[5]; in mxser_get_ISA_conf()
2469 brd->info = &mxser_cards[6]; in mxser_get_ISA_conf()
2472 brd->info = &mxser_cards[7]; in mxser_get_ISA_conf()
2481 if (brd->info->nports == 2 || (brd->info->flags & MXSER_HAS2)) { in mxser_get_ISA_conf()
2486 } else if (brd->info->nports == 4) { in mxser_get_ISA_conf()
2492 } else if (brd->info->nports == 8) { in mxser_get_ISA_conf()
2536 if (!request_region(brd->ports[0].ioaddr, 8 * brd->info->nports, in mxser_get_ISA_conf()
2541 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2547 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); in mxser_get_ISA_conf()
2551 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2554 return brd->info->nports; in mxser_get_ISA_conf()
2572 if (mxser_boards[i].info == NULL) in mxser_probe()
2599 brd->info = &mxser_cards[ent->driver_data]; in mxser_probe()
2600 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2617 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2624 if (brd->info->flags & MXSER_HIGHBAUD) in mxser_probe()
2632 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2642 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2652 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2668 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2674 brd->info = NULL; in mxser_probe()
2695 brd->info = NULL; in mxser_remove()
2746 brd->info = NULL; in mxser_module_init()
2751 brd->info->name, ioaddr[b]); in mxser_module_init()
2756 brd->info = NULL; in mxser_module_init()
2761 for (i = 0; i < brd->info->nports; i++) { in mxser_module_init()
2768 for (i = 0; i < brd->info->nports; i++) in mxser_module_init()
2772 brd->info = NULL; in mxser_module_init()
2776 if (brd->info == NULL) in mxser_module_init()
2806 if (mxser_boards[i].info != NULL) in mxser_module_exit()
2812 if (mxser_boards[i].info != NULL) in mxser_module_exit()