Lines Matching full:up

316 static u32 default_serial_dl_read(struct uart_8250_port *up)  in default_serial_dl_read()  argument
319 unsigned char dll = serial_in(up, UART_DLL); in default_serial_dl_read()
320 unsigned char dlm = serial_in(up, UART_DLM); in default_serial_dl_read()
326 static void default_serial_dl_write(struct uart_8250_port *up, u32 value) in default_serial_dl_write() argument
328 serial_out(up, UART_DLL, value & 0xff); in default_serial_dl_write()
329 serial_out(up, UART_DLM, value >> 8 & 0xff); in default_serial_dl_write()
422 struct uart_8250_port *up = up_to_u8250p(p); in set_io_from_upio() local
424 up->dl_read = default_serial_dl_read; in set_io_from_upio()
425 up->dl_write = default_serial_dl_write; in set_io_from_upio()
467 up->cur_iotype = p->iotype; in set_io_from_upio()
620 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_em485_config() local
627 return serial8250_em485_init(up); in serial8250_em485_config()
629 serial8250_em485_destroy(up); in serial8250_em485_config()
708 static void serial8250_clear_IER(struct uart_8250_port *up) in serial8250_clear_IER() argument
710 if (up->capabilities & UART_CAP_UUE) in serial8250_clear_IER()
711 serial_out(up, UART_IER, UART_IER_UUE); in serial8250_clear_IER()
713 serial_out(up, UART_IER, 0); in serial8250_clear_IER()
720 static int size_fifo(struct uart_8250_port *up) in size_fifo() argument
726 old_lcr = serial_in(up, UART_LCR); in size_fifo()
727 serial_out(up, UART_LCR, 0); in size_fifo()
728 old_fcr = serial_in(up, UART_FCR); in size_fifo()
729 old_mcr = serial8250_in_MCR(up); in size_fifo()
730 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | in size_fifo()
732 serial8250_out_MCR(up, UART_MCR_LOOP); in size_fifo()
733 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in size_fifo()
734 old_dl = serial_dl_read(up); in size_fifo()
735 serial_dl_write(up, 0x0001); in size_fifo()
736 serial_out(up, UART_LCR, UART_LCR_WLEN8); in size_fifo()
738 serial_out(up, UART_TX, count); in size_fifo()
740 for (count = 0; (serial_in(up, UART_LSR) & UART_LSR_DR) && in size_fifo()
742 serial_in(up, UART_RX); in size_fifo()
743 serial_out(up, UART_FCR, old_fcr); in size_fifo()
744 serial8250_out_MCR(up, old_mcr); in size_fifo()
745 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in size_fifo()
746 serial_dl_write(up, old_dl); in size_fifo()
747 serial_out(up, UART_LCR, old_lcr); in size_fifo()
784 static void autoconfig_has_efr(struct uart_8250_port *up) in autoconfig_has_efr() argument
791 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_has_efr()
797 * Semiconductor clone chips lock up if you try writing to the in autoconfig_has_efr()
810 up->acr = 0; in autoconfig_has_efr()
811 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in autoconfig_has_efr()
812 serial_out(up, UART_EFR, UART_EFR_ECB); in autoconfig_has_efr()
813 serial_out(up, UART_LCR, 0x00); in autoconfig_has_efr()
814 id1 = serial_icr_read(up, UART_ID1); in autoconfig_has_efr()
815 id2 = serial_icr_read(up, UART_ID2); in autoconfig_has_efr()
816 id3 = serial_icr_read(up, UART_ID3); in autoconfig_has_efr()
817 rev = serial_icr_read(up, UART_REV); in autoconfig_has_efr()
821 up->port.type = PORT_16C950; in autoconfig_has_efr()
829 up->bugs |= UART_BUG_QUOT; in autoconfig_has_efr()
841 id1 = autoconfig_read_divisor_id(up); in autoconfig_has_efr()
845 up->port.type = PORT_16850; in autoconfig_has_efr()
858 if (size_fifo(up) == 64) in autoconfig_has_efr()
859 up->port.type = PORT_16654; in autoconfig_has_efr()
861 up->port.type = PORT_16650V2; in autoconfig_has_efr()
869 static void autoconfig_8250(struct uart_8250_port *up) in autoconfig_8250() argument
873 up->port.type = PORT_8250; in autoconfig_8250()
875 scratch = serial_in(up, UART_SCR); in autoconfig_8250()
876 serial_out(up, UART_SCR, 0xa5); in autoconfig_8250()
877 status1 = serial_in(up, UART_SCR); in autoconfig_8250()
878 serial_out(up, UART_SCR, 0x5a); in autoconfig_8250()
879 status2 = serial_in(up, UART_SCR); in autoconfig_8250()
880 serial_out(up, UART_SCR, scratch); in autoconfig_8250()
883 up->port.type = PORT_16450; in autoconfig_8250()
886 static int broken_efr(struct uart_8250_port *up) in broken_efr() argument
893 if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16) in broken_efr()
905 static void autoconfig_16550a(struct uart_8250_port *up) in autoconfig_16550a() argument
911 lockdep_assert_held_once(&up->port.lock); in autoconfig_16550a()
913 up->port.type = PORT_16550A; in autoconfig_16550a()
914 up->capabilities |= UART_CAP_FIFO; in autoconfig_16550a()
917 !(up->port.flags & UPF_FULL_PROBE)) in autoconfig_16550a()
924 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in autoconfig_16550a()
925 if (serial_in(up, UART_EFR) == 0) { in autoconfig_16550a()
926 serial_out(up, UART_EFR, 0xA8); in autoconfig_16550a()
927 if (serial_in(up, UART_EFR) != 0) { in autoconfig_16550a()
928 up->port.type = PORT_16650; in autoconfig_16550a()
929 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_16550a()
931 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
932 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | in autoconfig_16550a()
934 status1 = serial_in(up, UART_IIR) & UART_IIR_FIFO_ENABLED_16750; in autoconfig_16550a()
935 serial_out(up, UART_FCR, 0); in autoconfig_16550a()
936 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
939 up->port.type = PORT_16550A_FSL64; in autoconfig_16550a()
941 serial_out(up, UART_EFR, 0); in autoconfig_16550a()
949 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in autoconfig_16550a()
950 if (serial_in(up, UART_EFR) == 0 && !broken_efr(up)) { in autoconfig_16550a()
951 autoconfig_has_efr(up); in autoconfig_16550a()
962 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
963 status1 = serial8250_in_MCR(up); in autoconfig_16550a()
964 serial_out(up, UART_LCR, 0xE0); in autoconfig_16550a()
965 status2 = serial_in(up, 0x02); /* EXCR1 */ in autoconfig_16550a()
968 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
969 serial8250_out_MCR(up, status1 ^ UART_MCR_LOOP); in autoconfig_16550a()
970 serial_out(up, UART_LCR, 0xE0); in autoconfig_16550a()
971 status2 = serial_in(up, 0x02); /* EXCR1 */ in autoconfig_16550a()
972 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
973 serial8250_out_MCR(up, status1); in autoconfig_16550a()
978 serial_out(up, UART_LCR, 0xE0); in autoconfig_16550a()
980 quot = serial_dl_read(up); in autoconfig_16550a()
983 if (ns16550a_goto_highspeed(up)) in autoconfig_16550a()
984 serial_dl_write(up, quot); in autoconfig_16550a()
986 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
988 up->port.uartclk = 921600*16; in autoconfig_16550a()
989 up->port.type = PORT_NS16550A; in autoconfig_16550a()
990 up->capabilities |= UART_NATSEMI; in autoconfig_16550a()
1001 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1002 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); in autoconfig_16550a()
1003 status1 = serial_in(up, UART_IIR) & UART_IIR_FIFO_ENABLED_16750; in autoconfig_16550a()
1004 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO); in autoconfig_16550a()
1006 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in autoconfig_16550a()
1007 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); in autoconfig_16550a()
1008 status2 = serial_in(up, UART_IIR) & UART_IIR_FIFO_ENABLED_16750; in autoconfig_16550a()
1009 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO); in autoconfig_16550a()
1011 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1015 up->port.type = PORT_16750; in autoconfig_16550a()
1016 up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP; in autoconfig_16550a()
1028 iersave = serial_in(up, UART_IER); in autoconfig_16550a()
1029 serial_out(up, UART_IER, iersave & ~UART_IER_UUE); in autoconfig_16550a()
1030 if (!(serial_in(up, UART_IER) & UART_IER_UUE)) { in autoconfig_16550a()
1035 serial_out(up, UART_IER, iersave | UART_IER_UUE); in autoconfig_16550a()
1036 if (serial_in(up, UART_IER) & UART_IER_UUE) { in autoconfig_16550a()
1041 up->port.type = PORT_XSCALE; in autoconfig_16550a()
1042 up->capabilities |= UART_CAP_UUE | UART_CAP_RTOIE; in autoconfig_16550a()
1046 serial_out(up, UART_IER, iersave); in autoconfig_16550a()
1052 if (up->port.type == PORT_16550A && size_fifo(up) == 64) { in autoconfig_16550a()
1053 up->port.type = PORT_U6_16550A; in autoconfig_16550a()
1054 up->capabilities |= UART_CAP_AFE; in autoconfig_16550a()
1065 static void autoconfig(struct uart_8250_port *up) in autoconfig() argument
1069 struct uart_port *port = &up->port; in autoconfig()
1084 up->capabilities = 0; in autoconfig()
1085 up->bugs = 0; in autoconfig()
1101 scratch = serial_in(up, UART_IER); in autoconfig()
1102 serial_out(up, UART_IER, 0); in autoconfig()
1110 scratch2 = serial_in(up, UART_IER) & UART_IER_ALL_INTR; in autoconfig()
1111 serial_out(up, UART_IER, UART_IER_ALL_INTR); in autoconfig()
1115 scratch3 = serial_in(up, UART_IER) & UART_IER_ALL_INTR; in autoconfig()
1116 serial_out(up, UART_IER, scratch); in autoconfig()
1126 save_mcr = serial8250_in_MCR(up); in autoconfig()
1127 save_lcr = serial_in(up, UART_LCR); in autoconfig()
1139 serial8250_out_MCR(up, UART_MCR_LOOP | UART_MCR_OUT2 | UART_MCR_RTS); in autoconfig()
1140 status1 = serial_in(up, UART_MSR) & UART_MSR_STATUS_BITS; in autoconfig()
1141 serial8250_out_MCR(up, save_mcr); in autoconfig()
1157 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in autoconfig()
1158 serial_out(up, UART_EFR, 0); in autoconfig()
1159 serial_out(up, UART_LCR, 0); in autoconfig()
1161 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO); in autoconfig()
1163 switch (serial_in(up, UART_IIR) & UART_IIR_FIFO_ENABLED) { in autoconfig()
1165 autoconfig_8250(up); in autoconfig()
1171 autoconfig_16550a(up); in autoconfig()
1178 rsa_autoconfig(up); in autoconfig()
1180 serial_out(up, UART_LCR, save_lcr); in autoconfig()
1182 port->fifosize = uart_config[up->port.type].fifo_size; in autoconfig()
1183 old_capabilities = up->capabilities; in autoconfig()
1184 up->capabilities = uart_config[port->type].flags; in autoconfig()
1185 up->tx_loadsz = uart_config[port->type].tx_loadsz; in autoconfig()
1191 rsa_reset(up); in autoconfig()
1192 serial8250_out_MCR(up, save_mcr); in autoconfig()
1193 serial8250_clear_fifos(up); in autoconfig()
1194 serial_in(up, UART_RX); in autoconfig()
1195 serial8250_clear_IER(up); in autoconfig()
1204 fintek_8250_probe(up); in autoconfig()
1206 if (up->capabilities != old_capabilities) { in autoconfig()
1208 old_capabilities, up->capabilities); in autoconfig()
1212 static void autoconfig_irq(struct uart_8250_port *up) in autoconfig_irq() argument
1214 struct uart_port *port = &up->port; in autoconfig_irq()
1230 save_mcr = serial8250_in_MCR(up); in autoconfig_irq()
1233 save_ier = serial_in(up, UART_IER); in autoconfig_irq()
1235 serial8250_out_MCR(up, UART_MCR_OUT1 | UART_MCR_OUT2); in autoconfig_irq()
1238 serial8250_out_MCR(up, 0); in autoconfig_irq()
1241 serial8250_out_MCR(up, UART_MCR_DTR | UART_MCR_RTS); in autoconfig_irq()
1243 serial8250_out_MCR(up, in autoconfig_irq()
1248 serial_out(up, UART_IER, UART_IER_ALL_INTR); in autoconfig_irq()
1251 serial_out(up, UART_TX, 0xFF); in autoconfig_irq()
1255 serial8250_out_MCR(up, save_mcr); in autoconfig_irq()
1258 serial_out(up, UART_IER, save_ier); in autoconfig_irq()
1269 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_stop_rx() local
1274 serial8250_rpm_get(up); in serial8250_stop_rx()
1276 up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); in serial8250_stop_rx()
1277 serial_port_out(port, UART_IER, up->ier); in serial8250_stop_rx()
1279 serial8250_rpm_put(up); in serial8250_stop_rx()
1406 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_stop_tx() local
1408 serial8250_rpm_get(up); in serial8250_stop_tx()
1409 __stop_tx(up); in serial8250_stop_tx()
1415 up->acr |= UART_ACR_TXDIS; in serial8250_stop_tx()
1416 serial_icr_write(up, UART_ACR, up->acr); in serial8250_stop_tx()
1418 serial8250_rpm_put(up); in serial8250_stop_tx()
1423 struct uart_8250_port *up = up_to_u8250p(port); in __start_tx() local
1425 if (up->dma && !up->dma->tx_dma(up)) in __start_tx()
1428 if (serial8250_set_THRI(up)) { in __start_tx()
1429 if (up->bugs & UART_BUG_TXEN) { in __start_tx()
1430 u16 lsr = serial_lsr_in(up); in __start_tx()
1433 serial8250_tx_chars(up); in __start_tx()
1440 if (port->type == PORT_16C950 && up->acr & UART_ACR_TXDIS) { in __start_tx()
1441 up->acr &= ~UART_ACR_TXDIS; in __start_tx()
1442 serial_icr_write(up, UART_ACR, up->acr); in __start_tx()
1448 * @up: uart 8250 port
1457 void serial8250_em485_start_tx(struct uart_8250_port *up, bool toggle_ier) in serial8250_em485_start_tx() argument
1459 unsigned char mcr = serial8250_in_MCR(up); in serial8250_em485_start_tx()
1461 if (!(up->port.rs485.flags & SER_RS485_RX_DURING_TX) && toggle_ier) in serial8250_em485_start_tx()
1462 serial8250_stop_rx(&up->port); in serial8250_em485_start_tx()
1464 if (up->port.rs485.flags & SER_RS485_RTS_ON_SEND) in serial8250_em485_start_tx()
1468 serial8250_out_MCR(up, mcr); in serial8250_em485_start_tx()
1475 struct uart_8250_port *up = up_to_u8250p(port); in start_tx_rs485() local
1476 struct uart_8250_em485 *em485 = up->em485; in start_tx_rs485()
1495 up->rs485_start_tx(up, true); in start_tx_rs485()
1497 if (up->port.rs485.delay_rts_before_send > 0) { in start_tx_rs485()
1500 up->port.rs485.delay_rts_before_send); in start_tx_rs485()
1527 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_start_tx() local
1528 struct uart_8250_em485 *em485 = up->em485; in serial8250_start_tx()
1536 serial8250_rpm_get_tx(up); in serial8250_start_tx()
1558 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_disable_ms() local
1564 if (up->bugs & UART_BUG_NOMSR) in serial8250_disable_ms()
1567 mctrl_gpio_disable_ms_no_sync(up->gpios); in serial8250_disable_ms()
1569 up->ier &= ~UART_IER_MSI; in serial8250_disable_ms()
1570 serial_port_out(port, UART_IER, up->ier); in serial8250_disable_ms()
1575 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_enable_ms() local
1581 if (up->bugs & UART_BUG_NOMSR) in serial8250_enable_ms()
1584 mctrl_gpio_enable_ms(up->gpios); in serial8250_enable_ms()
1586 up->ier |= UART_IER_MSI; in serial8250_enable_ms()
1588 serial8250_rpm_get(up); in serial8250_enable_ms()
1589 serial_port_out(port, UART_IER, up->ier); in serial8250_enable_ms()
1590 serial8250_rpm_put(up); in serial8250_enable_ms()
1593 void serial8250_read_char(struct uart_8250_port *up, u16 lsr) in serial8250_read_char() argument
1595 struct uart_port *port = &up->port; in serial8250_read_char()
1599 ch = serial_in(up, UART_RX); in serial8250_read_char()
1612 lsr |= up->lsr_saved_flags; in serial8250_read_char()
1613 up->lsr_saved_flags = 0; in serial8250_read_char()
1661 u16 serial8250_rx_chars(struct uart_8250_port *up, u16 lsr) in serial8250_rx_chars() argument
1663 struct uart_port *port = &up->port; in serial8250_rx_chars()
1667 serial8250_read_char(up, lsr); in serial8250_rx_chars()
1670 lsr = serial_in(up, UART_LSR); in serial8250_rx_chars()
1678 void serial8250_tx_chars(struct uart_8250_port *up) in serial8250_tx_chars() argument
1680 struct uart_port *port = &up->port; in serial8250_tx_chars()
1693 __stop_tx(up); in serial8250_tx_chars()
1697 count = up->tx_loadsz; in serial8250_tx_chars()
1704 serial_out(up, UART_TX, c); in serial8250_tx_chars()
1705 if (up->bugs & UART_BUG_TXRACE) { in serial8250_tx_chars()
1715 serial_in(up, UART_SCR); in serial8250_tx_chars()
1718 if ((up->capabilities & UART_CAP_HFIFO) && in serial8250_tx_chars()
1719 !uart_lsr_tx_empty(serial_in(up, UART_LSR))) in serial8250_tx_chars()
1722 if ((up->capabilities & UART_CAP_MINI) && in serial8250_tx_chars()
1723 !(serial_in(up, UART_LSR) & UART_LSR_THRE)) in serial8250_tx_chars()
1736 !(up->capabilities & UART_CAP_RPM)) in serial8250_tx_chars()
1737 __stop_tx(up); in serial8250_tx_chars()
1742 unsigned int serial8250_modem_status(struct uart_8250_port *up) in serial8250_modem_status() argument
1744 struct uart_port *port = &up->port; in serial8250_modem_status()
1745 unsigned int status = serial_in(up, UART_MSR); in serial8250_modem_status()
1747 status |= up->msr_saved_flags; in serial8250_modem_status()
1748 up->msr_saved_flags = 0; in serial8250_modem_status()
1749 if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI && in serial8250_modem_status()
1767 static bool handle_rx_dma(struct uart_8250_port *up, unsigned int iir) in handle_rx_dma() argument
1782 if (!up->dma->rx_running) in handle_rx_dma()
1787 serial8250_rx_dma_flush(up); in handle_rx_dma()
1790 return up->dma->rx_dma(up); in handle_rx_dma()
1798 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_handle_irq() local
1809 status = serial_lsr_in(up); in serial8250_handle_irq()
1821 !(up->ier & (UART_IER_RLSI | UART_IER_RDI))) in serial8250_handle_irq()
1830 if (!up->dma || handle_rx_dma(up, iir)) in serial8250_handle_irq()
1831 status = serial8250_rx_chars(up, status); in serial8250_handle_irq()
1833 serial8250_modem_status(up); in serial8250_handle_irq()
1834 if ((status & UART_LSR_THRE) && (up->ier & UART_IER_THRI)) { in serial8250_handle_irq()
1835 if (!up->dma || up->dma->tx_err) in serial8250_handle_irq()
1836 serial8250_tx_chars(up); in serial8250_handle_irq()
1837 else if (!up->dma->tx_running) in serial8250_handle_irq()
1838 __stop_tx(up); in serial8250_handle_irq()
1849 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_default_handle_irq() local
1853 serial8250_rpm_get(up); in serial8250_default_handle_irq()
1858 serial8250_rpm_put(up); in serial8250_default_handle_irq()
1866 * has space available. Load it up with tx_loadsz bytes.
1873 /* TX Threshold IRQ triggered so load up FIFO */ in serial8250_tx_threshold_handle_irq()
1875 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_tx_threshold_handle_irq() local
1878 serial8250_tx_chars(up); in serial8250_tx_threshold_handle_irq()
1888 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_tx_empty() local
1892 serial8250_rpm_get(up); in serial8250_tx_empty()
1895 if (!serial8250_tx_dma_running(up) && uart_lsr_tx_empty(serial_lsr_in(up))) in serial8250_tx_empty()
1899 serial8250_rpm_put(up); in serial8250_tx_empty()
1906 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_get_mctrl() local
1910 serial8250_rpm_get(up); in serial8250_do_get_mctrl()
1911 status = serial8250_modem_status(up); in serial8250_do_get_mctrl()
1912 serial8250_rpm_put(up); in serial8250_do_get_mctrl()
1915 if (up->gpios) in serial8250_do_get_mctrl()
1916 return mctrl_gpio_get(up->gpios, &val); in serial8250_do_get_mctrl()
1931 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_set_mctrl() local
1936 mcr |= up->mcr; in serial8250_do_set_mctrl()
1938 serial8250_out_MCR(up, mcr); in serial8250_do_set_mctrl()
1955 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_break_ctl() local
1958 serial8250_rpm_get(up); in serial8250_break_ctl()
1961 up->lcr |= UART_LCR_SBC; in serial8250_break_ctl()
1963 up->lcr &= ~UART_LCR_SBC; in serial8250_break_ctl()
1964 serial_port_out(port, UART_LCR, up->lcr); in serial8250_break_ctl()
1966 serial8250_rpm_put(up); in serial8250_break_ctl()
1970 static bool wait_for_lsr(struct uart_8250_port *up, int bits) in wait_for_lsr() argument
1978 if (up->port.frame_time) in wait_for_lsr()
1979 tmout = up->port.frame_time * 2 / NSEC_PER_USEC; in wait_for_lsr()
1984 status = serial_lsr_in(up); in wait_for_lsr()
1998 static void wait_for_xmitr(struct uart_8250_port *up, int bits) in wait_for_xmitr() argument
2002 wait_for_lsr(up, bits); in wait_for_xmitr()
2004 /* Wait up to 1s for flow control if necessary */ in wait_for_xmitr()
2005 if (up->port.flags & UPF_CONS_FLOW) { in wait_for_xmitr()
2007 unsigned int msr = serial_in(up, UART_MSR); in wait_for_xmitr()
2008 up->msr_saved_flags |= msr & MSR_SAVE_FLAGS; in wait_for_xmitr()
2025 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_get_poll_char() local
2029 serial8250_rpm_get(up); in serial8250_get_poll_char()
2040 serial8250_rpm_put(up); in serial8250_get_poll_char()
2049 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_put_poll_char() local
2059 serial8250_rpm_get(up); in serial8250_put_poll_char()
2064 serial8250_clear_IER(up); in serial8250_put_poll_char()
2066 wait_for_xmitr(up, UART_LSR_BOTH_EMPTY); in serial8250_put_poll_char()
2076 wait_for_xmitr(up, UART_LSR_BOTH_EMPTY); in serial8250_put_poll_char()
2078 serial8250_rpm_put(up); in serial8250_put_poll_char()
2085 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_startup_special() local
2091 * Wake up and initialize UART in serial8250_startup_special()
2096 up->acr = 0; in serial8250_startup_special()
2101 serial_icr_write(up, UART_CSR, 0); /* Reset the UART */ in serial8250_startup_special()
2126 rsa_enable(up); in serial8250_startup_special()
2133 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_set_TRG_levels() local
2140 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in serial8250_set_TRG_levels()
2142 fctr = serial_in(up, UART_FCTR) & ~(UART_FCTR_RX|UART_FCTR_TX); in serial8250_set_TRG_levels()
2160 if (up->tx_loadsz < 2 || up->tx_loadsz > port->fifosize) { in serial8250_set_TRG_levels()
2165 serial_port_out(port, UART_ALTR_TX_LOW, port->fifosize - up->tx_loadsz); in serial8250_set_TRG_levels()
2173 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_THRE_test() local
2180 if (up->port.flags & UPF_NO_THRE_TEST) in serial8250_THRE_test()
2196 wait_for_xmitr(up, UART_LSR_THRE); in serial8250_THRE_test()
2215 if ((!iir_noint1 && iir_noint2) || up->port.flags & UPF_BUG_THRE) in serial8250_THRE_test()
2216 up->bugs |= UART_BUG_THRE; in serial8250_THRE_test()
2235 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_iir_txen_test() local
2257 if (!(up->bugs & UART_BUG_TXEN)) { in serial8250_iir_txen_test()
2258 up->bugs |= UART_BUG_TXEN; in serial8250_iir_txen_test()
2265 up->bugs &= ~UART_BUG_TXEN; in serial8250_iir_txen_test()
2282 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_startup() local
2287 if (!up->tx_loadsz) in serial8250_do_startup()
2288 up->tx_loadsz = uart_config[port->type].tx_loadsz; in serial8250_do_startup()
2289 if (!up->capabilities) in serial8250_do_startup()
2290 up->capabilities = uart_config[port->type].flags; in serial8250_do_startup()
2291 up->mcr = 0; in serial8250_do_startup()
2293 if (port->iotype != up->cur_iotype) in serial8250_do_startup()
2296 serial8250_rpm_get(up); in serial8250_do_startup()
2304 serial8250_clear_fifos(up); in serial8250_do_startup()
2323 if (port->irq && (up->port.flags & UPF_SHARE_IRQ)) in serial8250_do_startup()
2324 up->port.irqflags |= IRQF_SHARED; in serial8250_do_startup()
2326 retval = up->ops->setup_irq(up); in serial8250_do_startup()
2332 up->ops->setup_timer(up); in serial8250_do_startup()
2342 up->lsr_saved_flags = 0; in serial8250_do_startup()
2343 up->msr_saved_flags = 0; in serial8250_do_startup()
2348 if (up->dma) { in serial8250_do_startup()
2353 else if (serial8250_request_dma(up)) in serial8250_do_startup()
2357 up->dma = NULL; in serial8250_do_startup()
2366 up->ier = UART_IER_RLSI | UART_IER_RDI; in serial8250_do_startup()
2379 serial8250_rpm_put(up); in serial8250_do_startup()
2393 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_shutdown() local
2396 serial8250_rpm_get(up); in serial8250_do_shutdown()
2403 up->ier = 0; in serial8250_do_shutdown()
2409 if (up->dma) in serial8250_do_shutdown()
2410 serial8250_release_dma(up); in serial8250_do_shutdown()
2428 serial8250_clear_fifos(up); in serial8250_do_shutdown()
2430 rsa_disable(up); in serial8250_do_shutdown()
2437 serial8250_rpm_put(up); in serial8250_do_shutdown()
2439 up->ops->release_irq(up); in serial8250_do_shutdown()
2453 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_flush_buffer() local
2455 if (up->dma) in serial8250_flush_buffer()
2456 serial8250_tx_dma_flush(up); in serial8250_flush_buffer()
2462 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_get_divisor() local
2468 * up to clk/4 (0x8001) and clk/8 (0x8002) respectively. These in serial8250_do_get_divisor()
2507 if (up->bugs & UART_BUG_QUOT && (quot & 0xff) == 0) in serial8250_do_get_divisor()
2523 static unsigned char serial8250_compute_lcr(struct uart_8250_port *up, tcflag_t c_cflag) in serial8250_compute_lcr() argument
2542 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_set_divisor() local
2545 if (is_omap1510_8250(up)) { in serial8250_do_set_divisor()
2557 if (up->capabilities & UART_NATSEMI) in serial8250_do_set_divisor()
2560 serial_port_out(port, UART_LCR, up->lcr | UART_LCR_DLAB); in serial8250_do_set_divisor()
2562 serial_dl_write(up, quot); in serial8250_do_set_divisor()
2645 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_set_mini() local
2647 if (!(up->capabilities & UART_CAP_MINI)) in serial8250_set_mini()
2662 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_set_trigger_for_slow_speed() local
2664 if (!(up->capabilities & UART_CAP_FIFO)) in serial8250_set_trigger_for_slow_speed()
2670 if (up->dma) in serial8250_set_trigger_for_slow_speed()
2673 up->fcr &= ~UART_FCR_TRIGGER_MASK; in serial8250_set_trigger_for_slow_speed()
2674 up->fcr |= UART_FCR_TRIGGER_1; in serial8250_set_trigger_for_slow_speed()
2683 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_set_afe() local
2685 if (!(up->capabilities & UART_CAP_AFE)) in serial8250_set_afe()
2688 up->mcr &= ~UART_MCR_AFE; in serial8250_set_afe()
2690 up->mcr |= UART_MCR_AFE; in serial8250_set_afe()
2727 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_set_ier() local
2730 up->ier &= ~UART_IER_MSI; in serial8250_set_ier()
2731 if (!(up->bugs & UART_BUG_NOMSR) && UART_ENABLE_MS(&up->port, termios->c_cflag)) in serial8250_set_ier()
2732 up->ier |= UART_IER_MSI; in serial8250_set_ier()
2733 if (up->capabilities & UART_CAP_UUE) in serial8250_set_ier()
2734 up->ier |= UART_IER_UUE; in serial8250_set_ier()
2735 if (up->capabilities & UART_CAP_RTOIE) in serial8250_set_ier()
2736 up->ier |= UART_IER_RTOIE; in serial8250_set_ier()
2738 serial_port_out(port, UART_IER, up->ier); in serial8250_set_ier()
2743 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_set_efr() local
2747 if (!(up->capabilities & UART_CAP_EFR)) in serial8250_set_efr()
2767 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_set_fcr() local
2771 serial_port_out(port, UART_FCR, up->fcr); in serial8250_set_fcr()
2777 serial_port_out(port, UART_LCR, up->lcr); in serial8250_set_fcr()
2783 if (up->fcr & UART_FCR_ENABLE_FIFO) in serial8250_set_fcr()
2786 serial_port_out(port, UART_FCR, up->fcr); in serial8250_set_fcr()
2793 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_set_termios() local
2799 lcr = serial8250_compute_lcr(up, termios->c_cflag); in serial8250_do_set_termios()
2809 serial8250_rpm_get(up); in serial8250_do_set_termios()
2812 up->lcr = lcr; in serial8250_do_set_termios()
2824 serial8250_rpm_put(up); in serial8250_do_set_termios()
2901 static int serial8250_request_std_resource(struct uart_8250_port *up) in serial8250_request_std_resource() argument
2903 unsigned int size = serial8250_port_size(up); in serial8250_request_std_resource()
2904 struct uart_port *port = &up->port; in serial8250_request_std_resource()
2939 static void serial8250_release_std_resource(struct uart_8250_port *up) in serial8250_release_std_resource() argument
2941 unsigned int size = serial8250_port_size(up); in serial8250_release_std_resource()
2942 struct uart_port *port = &up->port; in serial8250_release_std_resource()
2973 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_release_port() local
2975 serial8250_release_std_resource(up); in serial8250_release_port()
2980 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_request_port() local
2982 return serial8250_request_std_resource(up); in serial8250_request_port()
2985 static int fcr_get_rxtrig_bytes(struct uart_8250_port *up) in fcr_get_rxtrig_bytes() argument
2987 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in fcr_get_rxtrig_bytes()
2990 bytes = conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(up->fcr)]; in fcr_get_rxtrig_bytes()
2995 static int bytes_to_fcr_rxtrig(struct uart_8250_port *up, unsigned char bytes) in bytes_to_fcr_rxtrig() argument
2997 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in bytes_to_fcr_rxtrig()
3016 struct uart_8250_port *up = up_to_u8250p(uport); in do_get_rxtrig() local
3018 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1) in do_get_rxtrig()
3021 return fcr_get_rxtrig_bytes(up); in do_get_rxtrig()
3052 struct uart_8250_port *up = up_to_u8250p(uport); in do_set_rxtrig() local
3055 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1) in do_set_rxtrig()
3058 rxtrig = bytes_to_fcr_rxtrig(up, bytes); in do_set_rxtrig()
3062 serial8250_clear_fifos(up); in do_set_rxtrig()
3063 up->fcr &= ~UART_FCR_TRIGGER_MASK; in do_set_rxtrig()
3064 up->fcr |= (unsigned char)rxtrig; in do_set_rxtrig()
3065 serial_out(up, UART_FCR, up->fcr); in do_set_rxtrig()
3112 static void register_dev_spec_attr_grp(struct uart_8250_port *up) in register_dev_spec_attr_grp() argument
3114 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in register_dev_spec_attr_grp()
3117 up->port.attr_group = &serial8250_dev_attr_group; in register_dev_spec_attr_grp()
3122 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_config_port() local
3129 ret = serial8250_request_std_resource(up); in serial8250_config_port()
3133 if (port->iotype != up->cur_iotype) in serial8250_config_port()
3137 autoconfig(up); in serial8250_config_port()
3141 up->bugs |= UART_BUG_NOMSR; in serial8250_config_port()
3144 autoconfig_irq(up); in serial8250_config_port()
3147 serial8250_release_std_resource(up); in serial8250_config_port()
3149 register_dev_spec_attr_grp(up); in serial8250_config_port()
3150 up->fcr = uart_config[up->port.type].fcr; in serial8250_config_port()
3201 void serial8250_init_port(struct uart_8250_port *up) in serial8250_init_port() argument
3203 struct uart_port *port = &up->port; in serial8250_init_port()
3211 up->cur_iotype = UPIO_UNKNOWN; in serial8250_init_port()
3215 void serial8250_set_defaults(struct uart_8250_port *up) in serial8250_set_defaults() argument
3217 struct uart_port *port = &up->port; in serial8250_set_defaults()
3219 if (up->port.flags & UPF_FIXED_TYPE) { in serial8250_set_defaults()
3220 unsigned int type = up->port.type; in serial8250_set_defaults()
3222 if (!up->port.fifosize) in serial8250_set_defaults()
3223 up->port.fifosize = uart_config[type].fifo_size; in serial8250_set_defaults()
3224 if (!up->tx_loadsz) in serial8250_set_defaults()
3225 up->tx_loadsz = uart_config[type].tx_loadsz; in serial8250_set_defaults()
3226 if (!up->capabilities) in serial8250_set_defaults()
3227 up->capabilities = uart_config[type].flags; in serial8250_set_defaults()
3233 if (up->dma) { in serial8250_set_defaults()
3234 if (!up->dma->tx_dma) in serial8250_set_defaults()
3235 up->dma->tx_dma = serial8250_tx_dma; in serial8250_set_defaults()
3236 if (!up->dma->rx_dma) in serial8250_set_defaults()
3237 up->dma->rx_dma = serial8250_rx_dma; in serial8250_set_defaults()
3251 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_console_wait_putchar() local
3253 wait_for_xmitr(up, UART_LSR_THRE); in serial8250_console_wait_putchar()
3260 static void serial8250_console_restore(struct uart_8250_port *up) in serial8250_console_restore() argument
3262 struct uart_port *port = &up->port; in serial8250_console_restore()
3279 serial_port_out(port, UART_LCR, up->lcr); in serial8250_console_restore()
3280 serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS); in serial8250_console_restore()
3283 static void fifo_wait_for_lsr(struct uart_8250_port *up, unsigned int count) in fifo_wait_for_lsr() argument
3288 if (wait_for_lsr(up, UART_LSR_THRE)) in fifo_wait_for_lsr()
3299 static void serial8250_console_fifo_write(struct uart_8250_port *up, in serial8250_console_fifo_write() argument
3303 unsigned int fifosize = up->tx_loadsz; in serial8250_console_fifo_write()
3304 struct uart_port *port = &up->port; in serial8250_console_fifo_write()
3311 fifo_wait_for_lsr(up, fifosize); in serial8250_console_fifo_write()
3329 fifo_wait_for_lsr(up, tx_count); in serial8250_console_fifo_write()
3339 * Thus, we assume the function is called when device is powered up.
3341 void serial8250_console_write(struct uart_8250_port *up, const char *s, in serial8250_console_write() argument
3344 struct uart_8250_em485 *em485 = up->em485; in serial8250_console_write()
3345 struct uart_port *port = &up->port; in serial8250_console_write()
3361 serial8250_clear_IER(up); in serial8250_console_write()
3364 if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { in serial8250_console_write()
3365 serial8250_console_restore(up); in serial8250_console_write()
3366 up->canary = 0; in serial8250_console_write()
3371 up->rs485_start_tx(up, false); in serial8250_console_write()
3375 use_fifo = (up->capabilities & UART_CAP_FIFO) && in serial8250_console_write()
3380 !(up->capabilities & UART_CAP_MINI) && in serial8250_console_write()
3384 up->tx_loadsz > 1 && in serial8250_console_write()
3385 (up->fcr & UART_FCR_ENABLE_FIFO) && in serial8250_console_write()
3393 !(up->port.flags & UPF_CONS_FLOW); in serial8250_console_write()
3396 serial8250_console_fifo_write(up, s, count); in serial8250_console_write()
3404 wait_for_xmitr(up, UART_LSR_BOTH_EMPTY); in serial8250_console_write()
3409 up->rs485_stop_tx(up, false); in serial8250_console_write()
3421 if (up->msr_saved_flags) in serial8250_console_write()
3422 serial8250_modem_status(up); in serial8250_console_write()