Lines Matching refs:info
265 const struct mxser_cardinfo *info;
354 static void mxser_set_must_fifo_value(struct mxser_port *info)
359 oldlcr = inb(info->ioaddr + UART_LCR);
360 outb(MOXA_MUST_ENTER_ENCHANCE, info->ioaddr + UART_LCR);
362 efr = inb(info->ioaddr + MOXA_MUST_EFR_REGISTER);
366 outb(efr, info->ioaddr + MOXA_MUST_EFR_REGISTER);
367 outb((u8)info->rx_high_water, info->ioaddr + MOXA_MUST_RBRTH_REGISTER);
368 outb((u8)info->rx_trigger, info->ioaddr + MOXA_MUST_RBRTI_REGISTER);
369 outb((u8)info->rx_low_water, info->ioaddr + MOXA_MUST_RBRTL_REGISTER);
370 outb(oldlcr, info->ioaddr + UART_LCR);
511 static void process_txrx_fifo(struct mxser_port *info)
515 if ((info->type == PORT_16450) || (info->type == PORT_8250)) {
516 info->rx_trigger = 1;
517 info->rx_high_water = 1;
518 info->rx_low_water = 1;
519 info->xmit_fifo_size = 1;
522 if (info->board->chip_flag == Gpci_uart_info[i].type) {
523 info->rx_trigger = Gpci_uart_info[i].rx_trigger;
524 info->rx_low_water = Gpci_uart_info[i].rx_low_water;
525 info->rx_high_water = Gpci_uart_info[i].rx_high_water;
526 info->xmit_fifo_size = Gpci_uart_info[i].xmit_fifo_size;
570 struct mxser_port *info = tty->driver_data;
575 if (!info->ioaddr)
578 if (newspd > info->max_baud)
582 quot = 2 * info->baud_base / 269;
585 quot = info->baud_base / newspd;
588 baud = info->baud_base/quot;
598 timeout = (u64)info->xmit_fifo_size * HZ * 10 * quot;
599 do_div(timeout, info->baud_base);
600 info->timeout = timeout + HZ / 50; /* Add .02 seconds of slop */
603 info->MCR |= UART_MCR_DTR;
604 outb(info->MCR, info->ioaddr + UART_MCR);
606 info->MCR &= ~UART_MCR_DTR;
607 outb(info->MCR, info->ioaddr + UART_MCR);
611 cval = inb(info->ioaddr + UART_LCR);
613 outb(cval | UART_LCR_DLAB, info->ioaddr + UART_LCR); /* set DLAB */
615 outb(quot & 0xff, info->ioaddr + UART_DLL); /* LS of divisor */
616 outb(quot >> 8, info->ioaddr + UART_DLM); /* MS of divisor */
617 outb(cval, info->ioaddr + UART_LCR); /* reset DLAB */
621 quot = info->baud_base % newspd;
629 mxser_set_must_enum_value(info->ioaddr, quot);
632 mxser_set_must_enum_value(info->ioaddr, 0);
643 struct mxser_port *info = tty->driver_data;
648 if (!info->ioaddr)
681 if ((info->type == PORT_8250) || (info->type == PORT_16450)) {
682 if (info->board->chip_flag) {
685 mxser_set_must_fifo_value(info);
690 if (info->board->chip_flag) {
692 mxser_set_must_fifo_value(info);
694 switch (info->rx_trigger) {
712 info->IER &= ~UART_IER_MSI;
713 info->MCR &= ~UART_MCR_AFE;
714 tty_port_set_cts_flow(&info->port, cflag & CRTSCTS);
716 info->IER |= UART_IER_MSI;
717 if ((info->type == PORT_16550A) || (info->board->chip_flag)) {
718 info->MCR |= UART_MCR_AFE;
720 status = inb(info->ioaddr + UART_MSR);
724 if (info->type != PORT_16550A &&
725 !info->board->chip_flag) {
726 outb(info->IER & ~UART_IER_THRI,
727 info->ioaddr +
729 info->IER |= UART_IER_THRI;
730 outb(info->IER, info->ioaddr +
738 if ((info->type != PORT_16550A) &&
739 (!info->board->chip_flag)) {
740 info->IER &= ~UART_IER_THRI;
741 outb(info->IER, info->ioaddr +
748 outb(info->MCR, info->ioaddr + UART_MCR);
749 tty_port_set_check_carrier(&info->port, ~cflag & CLOCAL);
751 info->IER |= UART_IER_MSI;
752 outb(info->IER, info->ioaddr + UART_IER);
757 info->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
759 info->read_status_mask |= UART_LSR_FE | UART_LSR_PE;
761 info->read_status_mask |= UART_LSR_BI;
763 info->ignore_status_mask = 0;
766 info->ignore_status_mask |= UART_LSR_BI;
767 info->read_status_mask |= UART_LSR_BI;
773 info->ignore_status_mask |=
777 info->read_status_mask |=
783 if (info->board->chip_flag) {
784 mxser_set_must_xon1_value(info->ioaddr, START_CHAR(tty));
785 mxser_set_must_xoff1_value(info->ioaddr, STOP_CHAR(tty));
788 info->ioaddr);
791 info->ioaddr);
795 info->ioaddr);
798 info->ioaddr);
803 outb(fcr, info->ioaddr + UART_FCR); /* set fcr */
804 outb(cval, info->ioaddr + UART_LCR);
858 struct mxser_port *info = container_of(port, struct mxser_port, port);
867 spin_lock_irqsave(&info->slock, flags);
869 if (!info->ioaddr || !info->type) {
871 spin_unlock_irqrestore(&info->slock, flags);
875 info->port.xmit_buf = (unsigned char *) page;
881 if (info->board->chip_flag)
884 MOXA_MUST_FCR_GDA_MODE_ENABLE), info->ioaddr + UART_FCR);
887 info->ioaddr + UART_FCR);
894 if (inb(info->ioaddr + UART_LSR) == 0xff) {
895 spin_unlock_irqrestore(&info->slock, flags);
908 (void) inb(info->ioaddr + UART_LSR);
909 (void) inb(info->ioaddr + UART_RX);
910 (void) inb(info->ioaddr + UART_IIR);
911 (void) inb(info->ioaddr + UART_MSR);
916 outb(UART_LCR_WLEN8, info->ioaddr + UART_LCR); /* reset DLAB */
917 info->MCR = UART_MCR_DTR | UART_MCR_RTS;
918 outb(info->MCR, info->ioaddr + UART_MCR);
923 info->IER = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI;
925 if (info->board->chip_flag)
926 info->IER |= MOXA_MUST_IER_EGDAI;
927 outb(info->IER, info->ioaddr + UART_IER); /* enable interrupts */
932 (void) inb(info->ioaddr + UART_LSR);
933 (void) inb(info->ioaddr + UART_RX);
934 (void) inb(info->ioaddr + UART_IIR);
935 (void) inb(info->ioaddr + UART_MSR);
938 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
944 spin_unlock_irqrestore(&info->slock, flags);
949 info->port.xmit_buf = NULL;
958 struct mxser_port *info = container_of(port, struct mxser_port, port);
961 spin_lock_irqsave(&info->slock, flags);
967 wake_up_interruptible(&info->port.delta_msr_wait);
972 if (info->port.xmit_buf) {
973 free_page((unsigned long) info->port.xmit_buf);
974 info->port.xmit_buf = NULL;
977 info->IER = 0;
978 outb(0x00, info->ioaddr + UART_IER);
981 if (info->board->chip_flag)
984 info->ioaddr + UART_FCR);
987 info->ioaddr + UART_FCR);
990 (void) inb(info->ioaddr + UART_RX);
993 if (info->board->chip_flag)
994 SET_MOXA_MUST_NO_SOFTWARE_FLOW_CONTROL(info->ioaddr);
996 spin_unlock_irqrestore(&info->slock, flags);
1007 struct mxser_port *info;
1013 info = &mxser_boards[line / MXSER_PORTS_PER_BOARD].ports[line % MXSER_PORTS_PER_BOARD];
1014 if (!info->ioaddr)
1017 tty->driver_data = info;
1018 return tty_port_open(&info->port, tty, filp);
1023 struct mxser_port *info = tty->driver_data;
1028 spin_lock_irqsave(&info->slock, flags);
1029 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
1031 fcr = inb(info->ioaddr + UART_FCR);
1033 info->ioaddr + UART_FCR);
1034 outb(fcr, info->ioaddr + UART_FCR);
1036 spin_unlock_irqrestore(&info->slock, flags);
1044 struct mxser_port *info = container_of(port, struct mxser_port, port);
1052 info->IER &= ~UART_IER_RLSI;
1053 if (info->board->chip_flag)
1054 info->IER &= ~MOXA_MUST_RECV_ISR;
1056 outb(info->IER, info->ioaddr + UART_IER);
1063 while (!(inb(info->ioaddr + UART_LSR) & UART_LSR_TEMT)) {
1078 struct mxser_port *info = tty->driver_data;
1079 struct tty_port *port = &info->port;
1081 if (tty->index == MXSER_PORTS || info == NULL)
1085 info->closing = 1;
1094 info->closing = 0;
1104 struct mxser_port *info = tty->driver_data;
1107 if (!info->port.xmit_buf)
1111 c = min_t(int, count, min(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
1112 SERIAL_XMIT_SIZE - info->xmit_head));
1116 memcpy(info->port.xmit_buf + info->xmit_head, buf, c);
1117 spin_lock_irqsave(&info->slock, flags);
1118 info->xmit_head = (info->xmit_head + c) &
1120 info->xmit_cnt += c;
1121 spin_unlock_irqrestore(&info->slock, flags);
1128 if (info->xmit_cnt && !tty->stopped) {
1130 (info->type == PORT_16550A) ||
1131 (info->board->chip_flag)) {
1132 spin_lock_irqsave(&info->slock, flags);
1133 outb(info->IER & ~UART_IER_THRI, info->ioaddr +
1135 info->IER |= UART_IER_THRI;
1136 outb(info->IER, info->ioaddr + UART_IER);
1137 spin_unlock_irqrestore(&info->slock, flags);
1145 struct mxser_port *info = tty->driver_data;
1148 if (!info->port.xmit_buf)
1151 if (info->xmit_cnt >= SERIAL_XMIT_SIZE - 1)
1154 spin_lock_irqsave(&info->slock, flags);
1155 info->port.xmit_buf[info->xmit_head++] = ch;
1156 info->xmit_head &= SERIAL_XMIT_SIZE - 1;
1157 info->xmit_cnt++;
1158 spin_unlock_irqrestore(&info->slock, flags);
1161 (info->type == PORT_16550A) ||
1162 info->board->chip_flag) {
1163 spin_lock_irqsave(&info->slock, flags);
1164 outb(info->IER & ~UART_IER_THRI, info->ioaddr + UART_IER);
1165 info->IER |= UART_IER_THRI;
1166 outb(info->IER, info->ioaddr + UART_IER);
1167 spin_unlock_irqrestore(&info->slock, flags);
1176 struct mxser_port *info = tty->driver_data;
1179 if (info->xmit_cnt <= 0 || tty->stopped || !info->port.xmit_buf ||
1180 (tty->hw_stopped && info->type != PORT_16550A &&
1181 !info->board->chip_flag))
1184 spin_lock_irqsave(&info->slock, flags);
1186 outb(info->IER & ~UART_IER_THRI, info->ioaddr + UART_IER);
1187 info->IER |= UART_IER_THRI;
1188 outb(info->IER, info->ioaddr + UART_IER);
1190 spin_unlock_irqrestore(&info->slock, flags);
1195 struct mxser_port *info = tty->driver_data;
1198 ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1;
1204 struct mxser_port *info = tty->driver_data;
1205 return info->xmit_cnt;
1216 struct mxser_port *info = tty->driver_data;
1217 struct tty_port *port = &info->port;
1223 ss->type = info->type,
1225 ss->port = info->ioaddr,
1226 ss->irq = info->board->irq,
1227 ss->flags = info->port.flags,
1228 ss->baud_base = info->baud_base,
1229 ss->close_delay = info->port.close_delay,
1230 ss->closing_wait = info->port.closing_wait,
1231 ss->custom_divisor = info->custom_divisor,
1239 struct mxser_port *info = tty->driver_data;
1240 struct tty_port *port = &info->port;
1252 if (!info->ioaddr) {
1257 if (ss->irq != info->board->irq ||
1258 ss->port != info->ioaddr) {
1266 if ((ss->baud_base != info->baud_base) ||
1267 (ss->close_delay != info->port.close_delay) ||
1268 ((ss->flags & ~ASYNC_USR_MASK) != (info->port.flags & ~ASYNC_USR_MASK))) {
1272 info->port.flags = ((info->port.flags & ~ASYNC_USR_MASK) |
1285 (ss->baud_base != info->baud_base ||
1287 info->custom_divisor)) {
1297 info->type = ss->type;
1299 process_txrx_fifo(info);
1303 spin_lock_irqsave(&info->slock, sl_flags);
1305 spin_unlock_irqrestore(&info->slock, sl_flags);
1317 * mxser_get_lsr_info - get line status register info
1319 * Purpose: Let user call ioctl() to get info when the UART physically
1326 static int mxser_get_lsr_info(struct mxser_port *info,
1333 spin_lock_irqsave(&info->slock, flags);
1334 status = inb(info->ioaddr + UART_LSR);
1335 spin_unlock_irqrestore(&info->slock, flags);
1342 struct mxser_port *info = tty->driver_data;
1352 control = info->MCR;
1354 spin_lock_irqsave(&info->slock, flags);
1355 status = inb(info->ioaddr + UART_MSR);
1357 mxser_check_modem_status(tty, info, status);
1358 spin_unlock_irqrestore(&info->slock, flags);
1370 struct mxser_port *info = tty->driver_data;
1379 spin_lock_irqsave(&info->slock, flags);
1382 info->MCR |= UART_MCR_RTS;
1384 info->MCR |= UART_MCR_DTR;
1387 info->MCR &= ~UART_MCR_RTS;
1389 info->MCR &= ~UART_MCR_DTR;
1391 outb(info->MCR, info->ioaddr + UART_MCR);
1392 spin_unlock_irqrestore(&info->slock, flags);
1657 static int mxser_cflags_changed(struct mxser_port *info, unsigned long arg,
1664 spin_lock_irqsave(&info->slock, flags);
1665 cnow = info->icount; /* atomic copy */
1666 spin_unlock_irqrestore(&info->slock, flags);
1681 struct mxser_port *info = tty->driver_data;
1696 if (info->board->chip_flag != MOXA_MUST_MU860_HWID)
1710 spin_lock_irq(&info->slock);
1711 val = inb(info->opmode_ioaddr);
1714 outb(val, info->opmode_ioaddr);
1715 spin_unlock_irq(&info->slock);
1718 spin_lock_irq(&info->slock);
1719 opmode = inb(info->opmode_ioaddr) >> shiftbit;
1720 spin_unlock_irq(&info->slock);
1733 return mxser_get_lsr_info(info, argp);
1741 spin_lock_irqsave(&info->slock, flags);
1742 cnow = info->icount; /* note the counters on entry */
1743 spin_unlock_irqrestore(&info->slock, flags);
1745 return wait_event_interruptible(info->port.delta_msr_wait,
1746 mxser_cflags_changed(info, arg, &cnow));
1748 return put_user(info->baud_base != 115200 ? 1 : 0, (int __user *)argp);
1750 spin_lock_irq(&info->slock);
1751 info->mon_data.rxcnt = 0;
1752 info->mon_data.txcnt = 0;
1753 spin_unlock_irq(&info->slock);
1760 spin_lock_irq(&info->slock);
1761 lsr = inb(info->ioaddr + UART_LSR) & UART_LSR_THRE;
1762 spin_unlock_irq(&info->slock);
1770 spin_lock_irq(&info->slock);
1771 status = mxser_get_msr(info->ioaddr, 1, tty->index);
1772 mxser_check_modem_status(tty, info, status);
1774 mcr = inb(info->ioaddr + UART_MCR);
1775 spin_unlock_irq(&info->slock);
1778 info->mon_data.hold_reason &= ~NPPI_NOTIFY_XOFFHOLD;
1780 info->mon_data.hold_reason |= NPPI_NOTIFY_XOFFHOLD;
1783 info->mon_data.hold_reason &= ~NPPI_NOTIFY_XOFFXENT;
1785 info->mon_data.hold_reason |= NPPI_NOTIFY_XOFFXENT;
1788 info->mon_data.hold_reason |= NPPI_NOTIFY_CTSHOLD;
1790 info->mon_data.hold_reason &= ~NPPI_NOTIFY_CTSHOLD;
1792 if (copy_to_user(argp, &info->mon_data,
1799 if (put_user(info->err_shadow, (unsigned char __user *)argp))
1802 info->err_shadow = 0;
1830 struct mxser_port *info = tty->driver_data;
1834 spin_lock_irqsave(&info->slock, flags);
1835 cnow = info->icount;
1836 spin_unlock_irqrestore(&info->slock, flags);
1854 struct mxser_port *info = tty->driver_data;
1856 info->ldisc_stop_rx = 1;
1858 if (info->board->chip_flag) {
1859 info->IER &= ~MOXA_MUST_RECV_ISR;
1860 outb(info->IER, info->ioaddr + UART_IER);
1862 info->x_char = STOP_CHAR(tty);
1863 outb(0, info->ioaddr + UART_IER);
1864 info->IER |= UART_IER_THRI;
1865 outb(info->IER, info->ioaddr + UART_IER);
1870 info->MCR &= ~UART_MCR_RTS;
1871 outb(info->MCR, info->ioaddr + UART_MCR);
1886 struct mxser_port *info = tty->driver_data;
1889 info->ldisc_stop_rx = 0;
1891 if (info->x_char)
1892 info->x_char = 0;
1894 if (info->board->chip_flag) {
1895 info->IER |= MOXA_MUST_RECV_ISR;
1896 outb(info->IER, info->ioaddr + UART_IER);
1898 info->x_char = START_CHAR(tty);
1899 outb(0, info->ioaddr + UART_IER);
1900 info->IER |= UART_IER_THRI;
1901 outb(info->IER, info->ioaddr + UART_IER);
1907 info->MCR |= UART_MCR_RTS;
1908 outb(info->MCR, info->ioaddr + UART_MCR);
1920 struct mxser_port *info = tty->driver_data;
1923 spin_lock_irqsave(&info->slock, flags);
1924 if (info->IER & UART_IER_THRI) {
1925 info->IER &= ~UART_IER_THRI;
1926 outb(info->IER, info->ioaddr + UART_IER);
1928 spin_unlock_irqrestore(&info->slock, flags);
1933 struct mxser_port *info = tty->driver_data;
1936 spin_lock_irqsave(&info->slock, flags);
1937 if (info->xmit_cnt && info->port.xmit_buf) {
1938 outb(info->IER & ~UART_IER_THRI, info->ioaddr + UART_IER);
1939 info->IER |= UART_IER_THRI;
1940 outb(info->IER, info->ioaddr + UART_IER);
1942 spin_unlock_irqrestore(&info->slock, flags);
1947 struct mxser_port *info = tty->driver_data;
1950 spin_lock_irqsave(&info->slock, flags);
1952 spin_unlock_irqrestore(&info->slock, flags);
1963 if (info->board->chip_flag) {
1964 spin_lock_irqsave(&info->slock, flags);
1966 info->ioaddr);
1967 spin_unlock_irqrestore(&info->slock, flags);
1979 struct mxser_port *info = tty->driver_data;
1984 if (info->type == PORT_UNKNOWN)
1987 if (info->xmit_fifo_size == 0)
1999 char_time = (info->timeout - HZ / 50) / info->xmit_fifo_size;
2010 * takes longer than info->timeout, this is probably due to a
2012 * 2*info->timeout.
2014 if (!timeout || timeout > 2 * info->timeout)
2015 timeout = 2 * info->timeout;
2017 spin_lock_irqsave(&info->slock, flags);
2018 while (!((lsr = inb(info->ioaddr + UART_LSR)) & UART_LSR_TEMT)) {
2019 spin_unlock_irqrestore(&info->slock, flags);
2021 spin_lock_irqsave(&info->slock, flags);
2027 spin_unlock_irqrestore(&info->slock, flags);
2036 struct mxser_port *info = tty->driver_data;
2039 tty_port_hangup(&info->port);
2047 struct mxser_port *info = tty->driver_data;
2050 spin_lock_irqsave(&info->slock, flags);
2052 outb(inb(info->ioaddr + UART_LCR) | UART_LCR_SBC,
2053 info->ioaddr + UART_LCR);
2055 outb(inb(info->ioaddr + UART_LCR) & ~UART_LCR_SBC,
2056 info->ioaddr + UART_LCR);
2057 spin_unlock_irqrestore(&info->slock, flags);
2236 max = brd->info->nports;
2359 brd->vector < brd->ports[0].ioaddr + 8 * brd->info->nports;
2378 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports);
2384 struct mxser_port *info;
2391 for (i = 0; i < brd->info->nports; i++) {
2392 info = &brd->ports[i];
2393 tty_port_init(&info->port);
2394 info->port.ops = &mxser_port_ops;
2395 info->board = brd;
2396 info->stop_rx = 0;
2397 info->ldisc_stop_rx = 0;
2401 mxser_enable_must_enchance_mode(info->ioaddr);
2403 info->type = brd->uart_type;
2405 process_txrx_fifo(info);
2407 info->custom_divisor = info->baud_base * 16;
2408 info->port.close_delay = 5 * HZ / 10;
2409 info->port.closing_wait = 30 * HZ;
2410 info->normal_termios = mxvar_sdriver->init_termios;
2411 memset(&info->mon_data, 0, sizeof(struct mxser_mon));
2412 info->err_shadow = 0;
2413 spin_lock_init(&info->slock);
2416 outb(inb(info->ioaddr + UART_IER) & 0xf0,
2417 info->ioaddr + UART_IER);
2423 for (i = 0; i < brd->info->nports; i++)
2427 brd->info->name, brd->irq);
2437 for (i = 0; i < brd->info->nports; i++) {
2455 brd->info = &mxser_cards[0];
2458 brd->info = &mxser_cards[1];
2461 brd->info = &mxser_cards[2];
2464 brd->info = &mxser_cards[5];
2467 brd->info = &mxser_cards[6];
2470 brd->info = &mxser_cards[7];
2479 if (brd->info->nports == 2 || (brd->info->flags & MXSER_HAS2)) {
2484 } else if (brd->info->nports == 4) {
2490 } else if (brd->info->nports == 8) {
2534 if (!request_region(brd->ports[0].ioaddr, 8 * brd->info->nports,
2539 8 * brd->info->nports - 1);
2545 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports);
2549 8 * brd->info->nports - 1);
2552 return brd->info->nports;
2570 if (mxser_boards[i].info == NULL)
2597 brd->info = &mxser_cards[ent->driver_data];
2598 for (i = 0; i < brd->info->nports; i++)
2615 for (i = 0; i < brd->info->nports; i++) {
2622 if (brd->info->flags & MXSER_HIGHBAUD)
2630 for (i = 0; i < brd->info->nports; i++) {
2640 for (i = 0; i < brd->info->nports; i++) {
2650 for (i = 0; i < brd->info->nports; i++) {
2666 for (i = 0; i < brd->info->nports; i++)
2672 brd->info = NULL;
2693 brd->info = NULL;
2744 brd->info = NULL;
2749 brd->info->name, ioaddr[b]);
2754 brd->info = NULL;
2759 for (i = 0; i < brd->info->nports; i++) {
2766 for (i = 0; i < brd->info->nports; i++)
2770 brd->info = NULL;
2774 if (brd->info == NULL)
2804 if (mxser_boards[i].info != NULL)
2810 if (mxser_boards[i].info != NULL)