Lines Matching refs:up
275 static int default_serial_dl_read(struct uart_8250_port *up) in default_serial_dl_read() argument
277 return serial_in(up, UART_DLL) | serial_in(up, UART_DLM) << 8; in default_serial_dl_read()
281 static void default_serial_dl_write(struct uart_8250_port *up, int value) in default_serial_dl_write() argument
283 serial_out(up, UART_DLL, value & 0xff); in default_serial_dl_write()
284 serial_out(up, UART_DLM, value >> 8 & 0xff); in default_serial_dl_write()
333 static int au_serial_dl_read(struct uart_8250_port *up) in au_serial_dl_read() argument
335 return __raw_readl(up->port.membase + 0x28); in au_serial_dl_read()
338 static void au_serial_dl_write(struct uart_8250_port *up, int value) in au_serial_dl_write() argument
340 __raw_writel(value, up->port.membase + 0x28); in au_serial_dl_write()
412 struct uart_8250_port *up = up_to_u8250p(p); in set_io_from_upio() local
414 up->dl_read = default_serial_dl_read; in set_io_from_upio()
415 up->dl_write = default_serial_dl_write; in set_io_from_upio()
442 up->dl_read = au_serial_dl_read; in set_io_from_upio()
443 up->dl_write = au_serial_dl_write; in set_io_from_upio()
453 up->cur_iotype = p->iotype; in set_io_from_upio()
476 static void serial_icr_write(struct uart_8250_port *up, int offset, int value) in serial_icr_write() argument
478 serial_out(up, UART_SCR, offset); in serial_icr_write()
479 serial_out(up, UART_ICR, value); in serial_icr_write()
482 static unsigned int serial_icr_read(struct uart_8250_port *up, int offset) in serial_icr_read() argument
486 serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD); in serial_icr_read()
487 serial_out(up, UART_SCR, offset); in serial_icr_read()
488 value = serial_in(up, UART_ICR); in serial_icr_read()
489 serial_icr_write(up, UART_ACR, up->acr); in serial_icr_read()
609 static int __enable_rsa(struct uart_8250_port *up) in __enable_rsa() argument
614 mode = serial_in(up, UART_RSA_MSR); in __enable_rsa()
618 serial_out(up, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO); in __enable_rsa()
619 mode = serial_in(up, UART_RSA_MSR); in __enable_rsa()
624 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16; in __enable_rsa()
629 static void enable_rsa(struct uart_8250_port *up) in enable_rsa() argument
631 if (up->port.type == PORT_RSA) { in enable_rsa()
632 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) { in enable_rsa()
633 spin_lock_irq(&up->port.lock); in enable_rsa()
634 __enable_rsa(up); in enable_rsa()
635 spin_unlock_irq(&up->port.lock); in enable_rsa()
637 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) in enable_rsa()
638 serial_out(up, UART_RSA_FRR, 0); in enable_rsa()
648 static void disable_rsa(struct uart_8250_port *up) in disable_rsa() argument
653 if (up->port.type == PORT_RSA && in disable_rsa()
654 up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) { in disable_rsa()
655 spin_lock_irq(&up->port.lock); in disable_rsa()
657 mode = serial_in(up, UART_RSA_MSR); in disable_rsa()
661 serial_out(up, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO); in disable_rsa()
662 mode = serial_in(up, UART_RSA_MSR); in disable_rsa()
667 up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16; in disable_rsa()
668 spin_unlock_irq(&up->port.lock); in disable_rsa()
677 static int size_fifo(struct uart_8250_port *up) in size_fifo() argument
683 old_lcr = serial_in(up, UART_LCR); in size_fifo()
684 serial_out(up, UART_LCR, 0); in size_fifo()
685 old_fcr = serial_in(up, UART_FCR); in size_fifo()
686 old_mcr = serial_in(up, UART_MCR); in size_fifo()
687 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | in size_fifo()
689 serial_out(up, UART_MCR, UART_MCR_LOOP); in size_fifo()
690 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in size_fifo()
691 old_dl = serial_dl_read(up); in size_fifo()
692 serial_dl_write(up, 0x0001); in size_fifo()
693 serial_out(up, UART_LCR, 0x03); in size_fifo()
695 serial_out(up, UART_TX, count); in size_fifo()
697 for (count = 0; (serial_in(up, UART_LSR) & UART_LSR_DR) && in size_fifo()
699 serial_in(up, UART_RX); in size_fifo()
700 serial_out(up, UART_FCR, old_fcr); in size_fifo()
701 serial_out(up, UART_MCR, old_mcr); in size_fifo()
702 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in size_fifo()
703 serial_dl_write(up, old_dl); in size_fifo()
704 serial_out(up, UART_LCR, old_lcr); in size_fifo()
741 static void autoconfig_has_efr(struct uart_8250_port *up) in autoconfig_has_efr() argument
748 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_has_efr()
767 up->acr = 0; in autoconfig_has_efr()
768 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in autoconfig_has_efr()
769 serial_out(up, UART_EFR, UART_EFR_ECB); in autoconfig_has_efr()
770 serial_out(up, UART_LCR, 0x00); in autoconfig_has_efr()
771 id1 = serial_icr_read(up, UART_ID1); in autoconfig_has_efr()
772 id2 = serial_icr_read(up, UART_ID2); in autoconfig_has_efr()
773 id3 = serial_icr_read(up, UART_ID3); in autoconfig_has_efr()
774 rev = serial_icr_read(up, UART_REV); in autoconfig_has_efr()
780 up->port.type = PORT_16C950; in autoconfig_has_efr()
788 up->bugs |= UART_BUG_QUOT; in autoconfig_has_efr()
800 id1 = autoconfig_read_divisor_id(up); in autoconfig_has_efr()
805 up->port.type = PORT_16850; in autoconfig_has_efr()
818 if (size_fifo(up) == 64) in autoconfig_has_efr()
819 up->port.type = PORT_16654; in autoconfig_has_efr()
821 up->port.type = PORT_16650V2; in autoconfig_has_efr()
829 static void autoconfig_8250(struct uart_8250_port *up) in autoconfig_8250() argument
833 up->port.type = PORT_8250; in autoconfig_8250()
835 scratch = serial_in(up, UART_SCR); in autoconfig_8250()
836 serial_out(up, UART_SCR, 0xa5); in autoconfig_8250()
837 status1 = serial_in(up, UART_SCR); in autoconfig_8250()
838 serial_out(up, UART_SCR, 0x5a); in autoconfig_8250()
839 status2 = serial_in(up, UART_SCR); in autoconfig_8250()
840 serial_out(up, UART_SCR, scratch); in autoconfig_8250()
843 up->port.type = PORT_16450; in autoconfig_8250()
846 static int broken_efr(struct uart_8250_port *up) in broken_efr() argument
853 if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16) in broken_efr()
865 static void autoconfig_16550a(struct uart_8250_port *up) in autoconfig_16550a() argument
870 up->port.type = PORT_16550A; in autoconfig_16550a()
871 up->capabilities |= UART_CAP_FIFO; in autoconfig_16550a()
881 if (up->port.flags & UPF_EXAR_EFR) { in autoconfig_16550a()
882 status1 = serial_in(up, UART_EXAR_DVID); in autoconfig_16550a()
885 up->port.type = PORT_XR17V35X; in autoconfig_16550a()
886 up->capabilities |= UART_CAP_AFE | UART_CAP_EFR | in autoconfig_16550a()
898 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in autoconfig_16550a()
899 if (serial_in(up, UART_EFR) == 0) { in autoconfig_16550a()
900 serial_out(up, UART_EFR, 0xA8); in autoconfig_16550a()
901 if (serial_in(up, UART_EFR) != 0) { in autoconfig_16550a()
903 up->port.type = PORT_16650; in autoconfig_16550a()
904 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_16550a()
906 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
907 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | in autoconfig_16550a()
909 status1 = serial_in(up, UART_IIR) >> 5; in autoconfig_16550a()
910 serial_out(up, UART_FCR, 0); in autoconfig_16550a()
911 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
914 up->port.type = PORT_16550A_FSL64; in autoconfig_16550a()
918 serial_out(up, UART_EFR, 0); in autoconfig_16550a()
926 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in autoconfig_16550a()
927 if (serial_in(up, UART_EFR) == 0 && !broken_efr(up)) { in autoconfig_16550a()
929 autoconfig_has_efr(up); in autoconfig_16550a()
940 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
941 status1 = serial_in(up, UART_MCR); in autoconfig_16550a()
942 serial_out(up, UART_LCR, 0xE0); in autoconfig_16550a()
943 status2 = serial_in(up, 0x02); /* EXCR1 */ in autoconfig_16550a()
946 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
947 serial_out(up, UART_MCR, status1 ^ UART_MCR_LOOP); in autoconfig_16550a()
948 serial_out(up, UART_LCR, 0xE0); in autoconfig_16550a()
949 status2 = serial_in(up, 0x02); /* EXCR1 */ in autoconfig_16550a()
950 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
951 serial_out(up, UART_MCR, status1); in autoconfig_16550a()
956 serial_out(up, UART_LCR, 0xE0); in autoconfig_16550a()
958 quot = serial_dl_read(up); in autoconfig_16550a()
961 if (ns16550a_goto_highspeed(up)) in autoconfig_16550a()
962 serial_dl_write(up, quot); in autoconfig_16550a()
964 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
966 up->port.uartclk = 921600*16; in autoconfig_16550a()
967 up->port.type = PORT_NS16550A; in autoconfig_16550a()
968 up->capabilities |= UART_NATSEMI; in autoconfig_16550a()
979 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
980 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); in autoconfig_16550a()
981 status1 = serial_in(up, UART_IIR) >> 5; in autoconfig_16550a()
982 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO); in autoconfig_16550a()
983 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in autoconfig_16550a()
984 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); in autoconfig_16550a()
985 status2 = serial_in(up, UART_IIR) >> 5; in autoconfig_16550a()
986 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO); in autoconfig_16550a()
987 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
992 up->port.type = PORT_16750; in autoconfig_16550a()
993 up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP; in autoconfig_16550a()
1005 iersave = serial_in(up, UART_IER); in autoconfig_16550a()
1006 serial_out(up, UART_IER, iersave & ~UART_IER_UUE); in autoconfig_16550a()
1007 if (!(serial_in(up, UART_IER) & UART_IER_UUE)) { in autoconfig_16550a()
1012 serial_out(up, UART_IER, iersave | UART_IER_UUE); in autoconfig_16550a()
1013 if (serial_in(up, UART_IER) & UART_IER_UUE) { in autoconfig_16550a()
1019 up->port.type = PORT_XSCALE; in autoconfig_16550a()
1020 up->capabilities |= UART_CAP_UUE | UART_CAP_RTOIE; in autoconfig_16550a()
1030 serial_out(up, UART_IER, iersave); in autoconfig_16550a()
1035 if (up->port.flags & UPF_EXAR_EFR) { in autoconfig_16550a()
1037 up->port.type = PORT_XR17D15X; in autoconfig_16550a()
1038 up->capabilities |= UART_CAP_AFE | UART_CAP_EFR | in autoconfig_16550a()
1048 if (up->port.type == PORT_16550A && size_fifo(up) == 64) { in autoconfig_16550a()
1049 up->port.type = PORT_U6_16550A; in autoconfig_16550a()
1050 up->capabilities |= UART_CAP_AFE; in autoconfig_16550a()
1061 static void autoconfig(struct uart_8250_port *up) in autoconfig() argument
1065 struct uart_port *port = &up->port; in autoconfig()
1081 up->capabilities = 0; in autoconfig()
1082 up->bugs = 0; in autoconfig()
1098 scratch = serial_in(up, UART_IER); in autoconfig()
1099 serial_out(up, UART_IER, 0); in autoconfig()
1107 scratch2 = serial_in(up, UART_IER) & 0x0f; in autoconfig()
1108 serial_out(up, UART_IER, 0x0F); in autoconfig()
1112 scratch3 = serial_in(up, UART_IER) & 0x0f; in autoconfig()
1113 serial_out(up, UART_IER, scratch); in autoconfig()
1125 save_mcr = serial_in(up, UART_MCR); in autoconfig()
1126 save_lcr = serial_in(up, UART_LCR); in autoconfig()
1138 serial_out(up, UART_MCR, UART_MCR_LOOP | 0x0A); in autoconfig()
1139 status1 = serial_in(up, UART_MSR) & 0xF0; in autoconfig()
1140 serial_out(up, UART_MCR, save_mcr); in autoconfig()
1158 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in autoconfig()
1159 serial_out(up, UART_EFR, 0); in autoconfig()
1160 serial_out(up, UART_LCR, 0); in autoconfig()
1162 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO); in autoconfig()
1163 scratch = serial_in(up, UART_IIR) >> 6; in autoconfig()
1167 autoconfig_8250(up); in autoconfig()
1176 autoconfig_16550a(up); in autoconfig()
1184 if (port->type == PORT_16550A && up->probe & UART_PROBE_RSA && in autoconfig()
1185 __enable_rsa(up)) in autoconfig()
1189 serial_out(up, UART_LCR, save_lcr); in autoconfig()
1191 port->fifosize = uart_config[up->port.type].fifo_size; in autoconfig()
1192 old_capabilities = up->capabilities; in autoconfig()
1193 up->capabilities = uart_config[port->type].flags; in autoconfig()
1194 up->tx_loadsz = uart_config[port->type].tx_loadsz; in autoconfig()
1204 serial_out(up, UART_RSA_FRR, 0); in autoconfig()
1206 serial_out(up, UART_MCR, save_mcr); in autoconfig()
1207 serial8250_clear_fifos(up); in autoconfig()
1208 serial_in(up, UART_RX); in autoconfig()
1209 if (up->capabilities & UART_CAP_UUE) in autoconfig()
1210 serial_out(up, UART_IER, UART_IER_UUE); in autoconfig()
1212 serial_out(up, UART_IER, 0); in autoconfig()
1216 if (up->capabilities != old_capabilities) { in autoconfig()
1220 up->capabilities); in autoconfig()
1227 static void autoconfig_irq(struct uart_8250_port *up) in autoconfig_irq() argument
1229 struct uart_port *port = &up->port; in autoconfig_irq()
1248 save_mcr = serial_in(up, UART_MCR); in autoconfig_irq()
1249 save_ier = serial_in(up, UART_IER); in autoconfig_irq()
1250 serial_out(up, UART_MCR, UART_MCR_OUT1 | UART_MCR_OUT2); in autoconfig_irq()
1253 serial_out(up, UART_MCR, 0); in autoconfig_irq()
1256 serial_out(up, UART_MCR, in autoconfig_irq()
1259 serial_out(up, UART_MCR, in autoconfig_irq()
1262 serial_out(up, UART_IER, 0x0f); /* enable all intrs */ in autoconfig_irq()
1263 serial_in(up, UART_LSR); in autoconfig_irq()
1264 serial_in(up, UART_RX); in autoconfig_irq()
1265 serial_in(up, UART_IIR); in autoconfig_irq()
1266 serial_in(up, UART_MSR); in autoconfig_irq()
1267 serial_out(up, UART_TX, 0xFF); in autoconfig_irq()
1271 serial_out(up, UART_MCR, save_mcr); in autoconfig_irq()
1272 serial_out(up, UART_IER, save_ier); in autoconfig_irq()
1294 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_stop_tx() local
1296 serial8250_rpm_get(up); in serial8250_stop_tx()
1297 __stop_tx(up); in serial8250_stop_tx()
1303 up->acr |= UART_ACR_TXDIS; in serial8250_stop_tx()
1304 serial_icr_write(up, UART_ACR, up->acr); in serial8250_stop_tx()
1306 serial8250_rpm_put(up); in serial8250_stop_tx()
1311 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_start_tx() local
1313 serial8250_rpm_get_tx(up); in serial8250_start_tx()
1315 if (up->dma && !up->dma->tx_dma(up)) in serial8250_start_tx()
1318 if (!(up->ier & UART_IER_THRI)) { in serial8250_start_tx()
1319 up->ier |= UART_IER_THRI; in serial8250_start_tx()
1320 serial_port_out(port, UART_IER, up->ier); in serial8250_start_tx()
1322 if (up->bugs & UART_BUG_TXEN) { in serial8250_start_tx()
1324 lsr = serial_in(up, UART_LSR); in serial8250_start_tx()
1325 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; in serial8250_start_tx()
1327 serial8250_tx_chars(up); in serial8250_start_tx()
1334 if (port->type == PORT_16C950 && up->acr & UART_ACR_TXDIS) { in serial8250_start_tx()
1335 up->acr &= ~UART_ACR_TXDIS; in serial8250_start_tx()
1336 serial_icr_write(up, UART_ACR, up->acr); in serial8250_start_tx()
1352 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_stop_rx() local
1354 serial8250_rpm_get(up); in serial8250_stop_rx()
1356 up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); in serial8250_stop_rx()
1357 up->port.read_status_mask &= ~UART_LSR_DR; in serial8250_stop_rx()
1358 serial_port_out(port, UART_IER, up->ier); in serial8250_stop_rx()
1360 serial8250_rpm_put(up); in serial8250_stop_rx()
1365 struct uart_8250_port *up = in serial8250_disable_ms() local
1369 if (up->bugs & UART_BUG_NOMSR) in serial8250_disable_ms()
1372 up->ier &= ~UART_IER_MSI; in serial8250_disable_ms()
1373 serial_port_out(port, UART_IER, up->ier); in serial8250_disable_ms()
1378 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_enable_ms() local
1381 if (up->bugs & UART_BUG_NOMSR) in serial8250_enable_ms()
1384 up->ier |= UART_IER_MSI; in serial8250_enable_ms()
1386 serial8250_rpm_get(up); in serial8250_enable_ms()
1387 serial_port_out(port, UART_IER, up->ier); in serial8250_enable_ms()
1388 serial8250_rpm_put(up); in serial8250_enable_ms()
1397 serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr) in serial8250_rx_chars() argument
1399 struct uart_port *port = &up->port; in serial8250_rx_chars()
1406 ch = serial_in(up, UART_RX); in serial8250_rx_chars()
1420 lsr |= up->lsr_saved_flags; in serial8250_rx_chars()
1421 up->lsr_saved_flags = 0; in serial8250_rx_chars()
1461 lsr = serial_in(up, UART_LSR); in serial8250_rx_chars()
1470 void serial8250_tx_chars(struct uart_8250_port *up) in serial8250_tx_chars() argument
1472 struct uart_port *port = &up->port; in serial8250_tx_chars()
1477 serial_out(up, UART_TX, port->x_char); in serial8250_tx_chars()
1487 __stop_tx(up); in serial8250_tx_chars()
1491 count = up->tx_loadsz; in serial8250_tx_chars()
1493 serial_out(up, UART_TX, xmit->buf[xmit->tail]); in serial8250_tx_chars()
1498 if (up->capabilities & UART_CAP_HFIFO) { in serial8250_tx_chars()
1515 if (uart_circ_empty(xmit) && !(up->capabilities & UART_CAP_RPM)) in serial8250_tx_chars()
1516 __stop_tx(up); in serial8250_tx_chars()
1521 unsigned int serial8250_modem_status(struct uart_8250_port *up) in serial8250_modem_status() argument
1523 struct uart_port *port = &up->port; in serial8250_modem_status()
1524 unsigned int status = serial_in(up, UART_MSR); in serial8250_modem_status()
1526 status |= up->msr_saved_flags; in serial8250_modem_status()
1527 up->msr_saved_flags = 0; in serial8250_modem_status()
1528 if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI && in serial8250_modem_status()
1553 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_handle_irq() local
1566 if (up->dma) in serial8250_handle_irq()
1567 dma_err = up->dma->rx_dma(up, iir); in serial8250_handle_irq()
1569 if (!up->dma || dma_err) in serial8250_handle_irq()
1570 status = serial8250_rx_chars(up, status); in serial8250_handle_irq()
1572 serial8250_modem_status(up); in serial8250_handle_irq()
1573 if ((!up->dma || (up->dma && up->dma->tx_err)) && in serial8250_handle_irq()
1575 serial8250_tx_chars(up); in serial8250_handle_irq()
1584 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_default_handle_irq() local
1588 serial8250_rpm_get(up); in serial8250_default_handle_irq()
1593 serial8250_rpm_put(up); in serial8250_default_handle_irq()
1624 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_tx_empty() local
1628 serial8250_rpm_get(up); in serial8250_tx_empty()
1632 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; in serial8250_tx_empty()
1635 serial8250_rpm_put(up); in serial8250_tx_empty()
1642 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_get_mctrl() local
1646 serial8250_rpm_get(up); in serial8250_get_mctrl()
1647 status = serial8250_modem_status(up); in serial8250_get_mctrl()
1648 serial8250_rpm_put(up); in serial8250_get_mctrl()
1664 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_set_mctrl() local
1678 mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr; in serial8250_do_set_mctrl()
1694 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_break_ctl() local
1697 serial8250_rpm_get(up); in serial8250_break_ctl()
1700 up->lcr |= UART_LCR_SBC; in serial8250_break_ctl()
1702 up->lcr &= ~UART_LCR_SBC; in serial8250_break_ctl()
1703 serial_port_out(port, UART_LCR, up->lcr); in serial8250_break_ctl()
1705 serial8250_rpm_put(up); in serial8250_break_ctl()
1711 static void wait_for_xmitr(struct uart_8250_port *up, int bits) in wait_for_xmitr() argument
1717 status = serial_in(up, UART_LSR); in wait_for_xmitr()
1719 up->lsr_saved_flags |= status & LSR_SAVE_FLAGS; in wait_for_xmitr()
1729 if (up->port.flags & UPF_CONS_FLOW) { in wait_for_xmitr()
1732 unsigned int msr = serial_in(up, UART_MSR); in wait_for_xmitr()
1733 up->msr_saved_flags |= msr & MSR_SAVE_FLAGS; in wait_for_xmitr()
1750 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_get_poll_char() local
1754 serial8250_rpm_get(up); in serial8250_get_poll_char()
1765 serial8250_rpm_put(up); in serial8250_get_poll_char()
1774 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_put_poll_char() local
1776 serial8250_rpm_get(up); in serial8250_put_poll_char()
1781 if (up->capabilities & UART_CAP_UUE) in serial8250_put_poll_char()
1786 wait_for_xmitr(up, BOTH_EMPTY); in serial8250_put_poll_char()
1796 wait_for_xmitr(up, BOTH_EMPTY); in serial8250_put_poll_char()
1798 serial8250_rpm_put(up); in serial8250_put_poll_char()
1805 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_startup() local
1812 if (!up->tx_loadsz) in serial8250_do_startup()
1813 up->tx_loadsz = uart_config[port->type].tx_loadsz; in serial8250_do_startup()
1814 if (!up->capabilities) in serial8250_do_startup()
1815 up->capabilities = uart_config[port->type].flags; in serial8250_do_startup()
1816 up->mcr = 0; in serial8250_do_startup()
1818 if (port->iotype != up->cur_iotype) in serial8250_do_startup()
1821 serial8250_rpm_get(up); in serial8250_do_startup()
1824 up->acr = 0; in serial8250_do_startup()
1829 serial_icr_write(up, UART_CSR, 0); /* Reset the UART */ in serial8250_do_startup()
1840 enable_rsa(up); in serial8250_do_startup()
1861 serial8250_clear_fifos(up); in serial8250_do_startup()
1890 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in serial8250_do_startup()
1892 fctr = serial_in(up, UART_FCTR) & ~(UART_FCTR_RX|UART_FCTR_TX); in serial8250_do_startup()
1914 if (up->port.irqflags & IRQF_SHARED) in serial8250_do_startup()
1917 wait_for_xmitr(up, UART_LSR_THRE); in serial8250_do_startup()
1937 up->port.flags & UPF_BUG_THRE) { in serial8250_do_startup()
1938 up->bugs |= UART_BUG_THRE; in serial8250_do_startup()
1942 retval = up->ops->setup_irq(up); in serial8250_do_startup()
1952 if (up->port.flags & UPF_FOURPORT) { in serial8250_do_startup()
1953 if (!up->port.irq) in serial8250_do_startup()
1954 up->port.mctrl |= TIOCM_OUT1; in serial8250_do_startup()
1960 up->port.mctrl |= TIOCM_OUT2; in serial8250_do_startup()
1975 if (up->port.flags & UPF_NO_TXEN_TEST) in serial8250_do_startup()
1988 if (!(up->bugs & UART_BUG_TXEN)) { in serial8250_do_startup()
1989 up->bugs |= UART_BUG_TXEN; in serial8250_do_startup()
1994 up->bugs &= ~UART_BUG_TXEN; in serial8250_do_startup()
2009 up->lsr_saved_flags = 0; in serial8250_do_startup()
2010 up->msr_saved_flags = 0; in serial8250_do_startup()
2015 if (up->dma) { in serial8250_do_startup()
2016 retval = serial8250_request_dma(up); in serial8250_do_startup()
2020 up->dma = NULL; in serial8250_do_startup()
2029 up->ier = UART_IER_RLSI | UART_IER_RDI; in serial8250_do_startup()
2042 serial8250_rpm_put(up); in serial8250_do_startup()
2056 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_shutdown() local
2059 serial8250_rpm_get(up); in serial8250_do_shutdown()
2063 up->ier = 0; in serial8250_do_shutdown()
2066 if (up->dma) in serial8250_do_shutdown()
2067 serial8250_release_dma(up); in serial8250_do_shutdown()
2085 serial8250_clear_fifos(up); in serial8250_do_shutdown()
2091 disable_rsa(up); in serial8250_do_shutdown()
2099 serial8250_rpm_put(up); in serial8250_do_shutdown()
2101 up->ops->release_irq(up); in serial8250_do_shutdown()
2117 static unsigned int xr17v35x_get_divisor(struct uart_8250_port *up, in xr17v35x_get_divisor() argument
2121 struct uart_port *port = &up->port; in xr17v35x_get_divisor()
2130 static unsigned int serial8250_get_divisor(struct uart_8250_port *up, in serial8250_get_divisor() argument
2134 struct uart_port *port = &up->port; in serial8250_get_divisor()
2148 else if (up->port.type == PORT_XR17V35X) in serial8250_get_divisor()
2149 quot = xr17v35x_get_divisor(up, baud, frac); in serial8250_get_divisor()
2156 if (up->bugs & UART_BUG_QUOT && (quot & 0xff) == 0) in serial8250_get_divisor()
2162 static unsigned char serial8250_compute_lcr(struct uart_8250_port *up, in serial8250_compute_lcr() argument
2187 if (up->bugs & UART_BUG_PARITY) in serial8250_compute_lcr()
2188 up->fifo_bug = true; in serial8250_compute_lcr()
2203 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_set_divisor() local
2206 if (is_omap1510_8250(up)) { in serial8250_set_divisor()
2218 if (up->capabilities & UART_NATSEMI) in serial8250_set_divisor()
2221 serial_port_out(port, UART_LCR, up->lcr | UART_LCR_DLAB); in serial8250_set_divisor()
2223 serial_dl_write(up, quot); in serial8250_set_divisor()
2226 if (up->port.type == PORT_XR17V35X) in serial8250_set_divisor()
2251 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_set_termios() local
2256 cval = serial8250_compute_lcr(up, termios->c_cflag); in serial8250_do_set_termios()
2259 quot = serial8250_get_divisor(up, baud, &frac); in serial8250_do_set_termios()
2265 serial8250_rpm_get(up); in serial8250_do_set_termios()
2268 up->lcr = cval; /* Save computed LCR */ in serial8250_do_set_termios()
2270 if (up->capabilities & UART_CAP_FIFO && port->fifosize > 1) { in serial8250_do_set_termios()
2272 if ((baud < 2400 && !up->dma) || up->fifo_bug) { in serial8250_do_set_termios()
2273 up->fcr &= ~UART_FCR_TRIGGER_MASK; in serial8250_do_set_termios()
2274 up->fcr |= UART_FCR_TRIGGER_1; in serial8250_do_set_termios()
2286 if (up->capabilities & UART_CAP_AFE && port->fifosize >= 32) { in serial8250_do_set_termios()
2287 up->mcr &= ~UART_MCR_AFE; in serial8250_do_set_termios()
2289 up->mcr |= UART_MCR_AFE; in serial8250_do_set_termios()
2328 up->ier &= ~UART_IER_MSI; in serial8250_do_set_termios()
2329 if (!(up->bugs & UART_BUG_NOMSR) && in serial8250_do_set_termios()
2330 UART_ENABLE_MS(&up->port, termios->c_cflag)) in serial8250_do_set_termios()
2331 up->ier |= UART_IER_MSI; in serial8250_do_set_termios()
2332 if (up->capabilities & UART_CAP_UUE) in serial8250_do_set_termios()
2333 up->ier |= UART_IER_UUE; in serial8250_do_set_termios()
2334 if (up->capabilities & UART_CAP_RTOIE) in serial8250_do_set_termios()
2335 up->ier |= UART_IER_RTOIE; in serial8250_do_set_termios()
2337 serial_port_out(port, UART_IER, up->ier); in serial8250_do_set_termios()
2339 if (up->capabilities & UART_CAP_EFR) { in serial8250_do_set_termios()
2363 serial_port_out(port, UART_FCR, up->fcr); in serial8250_do_set_termios()
2365 serial_port_out(port, UART_LCR, up->lcr); /* reset DLAB */ in serial8250_do_set_termios()
2368 if (up->fcr & UART_FCR_ENABLE_FIFO) in serial8250_do_set_termios()
2370 serial_port_out(port, UART_FCR, up->fcr); /* set fcr */ in serial8250_do_set_termios()
2374 serial8250_rpm_put(up); in serial8250_do_set_termios()
2448 static int serial8250_request_std_resource(struct uart_8250_port *up) in serial8250_request_std_resource() argument
2450 unsigned int size = serial8250_port_size(up); in serial8250_request_std_resource()
2451 struct uart_port *port = &up->port; in serial8250_request_std_resource()
2486 static void serial8250_release_std_resource(struct uart_8250_port *up) in serial8250_release_std_resource() argument
2488 unsigned int size = serial8250_port_size(up); in serial8250_release_std_resource()
2489 struct uart_port *port = &up->port; in serial8250_release_std_resource()
2517 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_release_port() local
2519 serial8250_release_std_resource(up); in serial8250_release_port()
2524 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_request_port() local
2526 return serial8250_request_std_resource(up); in serial8250_request_port()
2529 static int fcr_get_rxtrig_bytes(struct uart_8250_port *up) in fcr_get_rxtrig_bytes() argument
2531 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in fcr_get_rxtrig_bytes()
2534 bytes = conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(up->fcr)]; in fcr_get_rxtrig_bytes()
2539 static int bytes_to_fcr_rxtrig(struct uart_8250_port *up, unsigned char bytes) in bytes_to_fcr_rxtrig() argument
2541 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in bytes_to_fcr_rxtrig()
2560 struct uart_8250_port *up = in do_get_rxtrig() local
2563 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1) in do_get_rxtrig()
2566 return fcr_get_rxtrig_bytes(up); in do_get_rxtrig()
2597 struct uart_8250_port *up = in do_set_rxtrig() local
2601 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1 || in do_set_rxtrig()
2602 up->fifo_bug) in do_set_rxtrig()
2605 rxtrig = bytes_to_fcr_rxtrig(up, bytes); in do_set_rxtrig()
2609 serial8250_clear_fifos(up); in do_set_rxtrig()
2610 up->fcr &= ~UART_FCR_TRIGGER_MASK; in do_set_rxtrig()
2611 up->fcr |= (unsigned char)rxtrig; in do_set_rxtrig()
2612 serial_out(up, UART_FCR, up->fcr); in do_set_rxtrig()
2661 static void register_dev_spec_attr_grp(struct uart_8250_port *up) in register_dev_spec_attr_grp() argument
2663 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in register_dev_spec_attr_grp()
2666 up->port.attr_group = &serial8250_dev_attr_group; in register_dev_spec_attr_grp()
2671 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_config_port() local
2678 ret = serial8250_request_std_resource(up); in serial8250_config_port()
2682 if (port->iotype != up->cur_iotype) in serial8250_config_port()
2686 autoconfig(up); in serial8250_config_port()
2690 up->bugs |= UART_BUG_NOMSR; in serial8250_config_port()
2694 up->bugs |= UART_BUG_NOMSR; in serial8250_config_port()
2697 autoconfig_irq(up); in serial8250_config_port()
2700 serial8250_release_std_resource(up); in serial8250_config_port()
2707 register_dev_spec_attr_grp(up); in serial8250_config_port()
2708 up->fcr = uart_config[up->port.type].fcr; in serial8250_config_port()
2759 void serial8250_init_port(struct uart_8250_port *up) in serial8250_init_port() argument
2761 struct uart_port *port = &up->port; in serial8250_init_port()
2766 up->cur_iotype = 0xFF; in serial8250_init_port()
2770 void serial8250_set_defaults(struct uart_8250_port *up) in serial8250_set_defaults() argument
2772 struct uart_port *port = &up->port; in serial8250_set_defaults()
2774 if (up->port.flags & UPF_FIXED_TYPE) { in serial8250_set_defaults()
2775 unsigned int type = up->port.type; in serial8250_set_defaults()
2777 if (!up->port.fifosize) in serial8250_set_defaults()
2778 up->port.fifosize = uart_config[type].fifo_size; in serial8250_set_defaults()
2779 if (!up->tx_loadsz) in serial8250_set_defaults()
2780 up->tx_loadsz = uart_config[type].tx_loadsz; in serial8250_set_defaults()
2781 if (!up->capabilities) in serial8250_set_defaults()
2782 up->capabilities = uart_config[type].flags; in serial8250_set_defaults()
2788 if (up->dma) { in serial8250_set_defaults()
2789 if (!up->dma->tx_dma) in serial8250_set_defaults()
2790 up->dma->tx_dma = serial8250_tx_dma; in serial8250_set_defaults()
2791 if (!up->dma->rx_dma) in serial8250_set_defaults()
2792 up->dma->rx_dma = serial8250_rx_dma; in serial8250_set_defaults()
2801 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_console_putchar() local
2803 wait_for_xmitr(up, UART_LSR_THRE); in serial8250_console_putchar()
2810 static void serial8250_console_restore(struct uart_8250_port *up) in serial8250_console_restore() argument
2812 struct uart_port *port = &up->port; in serial8250_console_restore()
2821 quot = serial8250_get_divisor(up, baud, &frac); in serial8250_console_restore()
2824 serial_port_out(port, UART_LCR, up->lcr); in serial8250_console_restore()
2834 void serial8250_console_write(struct uart_8250_port *up, const char *s, in serial8250_console_write() argument
2837 struct uart_port *port = &up->port; in serial8250_console_write()
2844 serial8250_rpm_get(up); in serial8250_console_write()
2858 if (up->capabilities & UART_CAP_UUE) in serial8250_console_write()
2864 if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { in serial8250_console_write()
2865 serial8250_console_restore(up); in serial8250_console_write()
2866 up->canary = 0; in serial8250_console_write()
2875 wait_for_xmitr(up, BOTH_EMPTY); in serial8250_console_write()
2885 if (up->msr_saved_flags) in serial8250_console_write()
2886 serial8250_modem_status(up); in serial8250_console_write()
2890 serial8250_rpm_put(up); in serial8250_console_write()