Lines Matching refs:up

313 static int default_serial_dl_read(struct uart_8250_port *up)  in default_serial_dl_read()  argument
316 unsigned char dll = serial_in(up, UART_DLL); in default_serial_dl_read()
317 unsigned char dlm = serial_in(up, UART_DLM); in default_serial_dl_read()
323 static void default_serial_dl_write(struct uart_8250_port *up, int value) in default_serial_dl_write() argument
325 serial_out(up, UART_DLL, value & 0xff); in default_serial_dl_write()
326 serial_out(up, UART_DLM, value >> 8 & 0xff); in default_serial_dl_write()
375 static int au_serial_dl_read(struct uart_8250_port *up) in au_serial_dl_read() argument
377 return __raw_readl(up->port.membase + 0x28); in au_serial_dl_read()
380 static void au_serial_dl_write(struct uart_8250_port *up, int value) in au_serial_dl_write() argument
382 __raw_writel(value, up->port.membase + 0x28); in au_serial_dl_write()
465 struct uart_8250_port *up = up_to_u8250p(p); in set_io_from_upio() local
467 up->dl_read = default_serial_dl_read; in set_io_from_upio()
468 up->dl_write = default_serial_dl_write; in set_io_from_upio()
500 up->dl_read = au_serial_dl_read; in set_io_from_upio()
501 up->dl_write = au_serial_dl_write; in set_io_from_upio()
511 up->cur_iotype = p->iotype; in set_io_from_upio()
535 static void serial_icr_write(struct uart_8250_port *up, int offset, int value) in serial_icr_write() argument
537 serial_out(up, UART_SCR, offset); in serial_icr_write()
538 serial_out(up, UART_ICR, value); in serial_icr_write()
541 static unsigned int serial_icr_read(struct uart_8250_port *up, int offset) in serial_icr_read() argument
545 serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD); in serial_icr_read()
546 serial_out(up, UART_SCR, offset); in serial_icr_read()
547 value = serial_in(up, UART_ICR); in serial_icr_read()
548 serial_icr_write(up, UART_ACR, up->acr); in serial_icr_read()
674 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_em485_config() local
698 int ret = serial8250_em485_init(up); in serial8250_em485_config()
707 serial8250_em485_destroy(up); in serial8250_em485_config()
781 static int __enable_rsa(struct uart_8250_port *up) in __enable_rsa() argument
786 mode = serial_in(up, UART_RSA_MSR); in __enable_rsa()
790 serial_out(up, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO); in __enable_rsa()
791 mode = serial_in(up, UART_RSA_MSR); in __enable_rsa()
796 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16; in __enable_rsa()
801 static void enable_rsa(struct uart_8250_port *up) in enable_rsa() argument
803 if (up->port.type == PORT_RSA) { in enable_rsa()
804 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) { in enable_rsa()
805 spin_lock_irq(&up->port.lock); in enable_rsa()
806 __enable_rsa(up); in enable_rsa()
807 spin_unlock_irq(&up->port.lock); in enable_rsa()
809 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) in enable_rsa()
810 serial_out(up, UART_RSA_FRR, 0); in enable_rsa()
820 static void disable_rsa(struct uart_8250_port *up) in disable_rsa() argument
825 if (up->port.type == PORT_RSA && in disable_rsa()
826 up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) { in disable_rsa()
827 spin_lock_irq(&up->port.lock); in disable_rsa()
829 mode = serial_in(up, UART_RSA_MSR); in disable_rsa()
833 serial_out(up, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO); in disable_rsa()
834 mode = serial_in(up, UART_RSA_MSR); in disable_rsa()
839 up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16; in disable_rsa()
840 spin_unlock_irq(&up->port.lock); in disable_rsa()
849 static int size_fifo(struct uart_8250_port *up) in size_fifo() argument
855 old_lcr = serial_in(up, UART_LCR); in size_fifo()
856 serial_out(up, UART_LCR, 0); in size_fifo()
857 old_fcr = serial_in(up, UART_FCR); in size_fifo()
858 old_mcr = serial8250_in_MCR(up); in size_fifo()
859 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | in size_fifo()
861 serial8250_out_MCR(up, UART_MCR_LOOP); in size_fifo()
862 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in size_fifo()
863 old_dl = serial_dl_read(up); in size_fifo()
864 serial_dl_write(up, 0x0001); in size_fifo()
865 serial_out(up, UART_LCR, 0x03); in size_fifo()
867 serial_out(up, UART_TX, count); in size_fifo()
869 for (count = 0; (serial_in(up, UART_LSR) & UART_LSR_DR) && in size_fifo()
871 serial_in(up, UART_RX); in size_fifo()
872 serial_out(up, UART_FCR, old_fcr); in size_fifo()
873 serial8250_out_MCR(up, old_mcr); in size_fifo()
874 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in size_fifo()
875 serial_dl_write(up, old_dl); in size_fifo()
876 serial_out(up, UART_LCR, old_lcr); in size_fifo()
913 static void autoconfig_has_efr(struct uart_8250_port *up) in autoconfig_has_efr() argument
920 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_has_efr()
939 up->acr = 0; in autoconfig_has_efr()
940 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in autoconfig_has_efr()
941 serial_out(up, UART_EFR, UART_EFR_ECB); in autoconfig_has_efr()
942 serial_out(up, UART_LCR, 0x00); in autoconfig_has_efr()
943 id1 = serial_icr_read(up, UART_ID1); in autoconfig_has_efr()
944 id2 = serial_icr_read(up, UART_ID2); in autoconfig_has_efr()
945 id3 = serial_icr_read(up, UART_ID3); in autoconfig_has_efr()
946 rev = serial_icr_read(up, UART_REV); in autoconfig_has_efr()
952 up->port.type = PORT_16C950; in autoconfig_has_efr()
960 up->bugs |= UART_BUG_QUOT; in autoconfig_has_efr()
972 id1 = autoconfig_read_divisor_id(up); in autoconfig_has_efr()
977 up->port.type = PORT_16850; in autoconfig_has_efr()
990 if (size_fifo(up) == 64) in autoconfig_has_efr()
991 up->port.type = PORT_16654; in autoconfig_has_efr()
993 up->port.type = PORT_16650V2; in autoconfig_has_efr()
1001 static void autoconfig_8250(struct uart_8250_port *up) in autoconfig_8250() argument
1005 up->port.type = PORT_8250; in autoconfig_8250()
1007 scratch = serial_in(up, UART_SCR); in autoconfig_8250()
1008 serial_out(up, UART_SCR, 0xa5); in autoconfig_8250()
1009 status1 = serial_in(up, UART_SCR); in autoconfig_8250()
1010 serial_out(up, UART_SCR, 0x5a); in autoconfig_8250()
1011 status2 = serial_in(up, UART_SCR); in autoconfig_8250()
1012 serial_out(up, UART_SCR, scratch); in autoconfig_8250()
1015 up->port.type = PORT_16450; in autoconfig_8250()
1018 static int broken_efr(struct uart_8250_port *up) in broken_efr() argument
1025 if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16) in broken_efr()
1037 static void autoconfig_16550a(struct uart_8250_port *up) in autoconfig_16550a() argument
1042 up->port.type = PORT_16550A; in autoconfig_16550a()
1043 up->capabilities |= UART_CAP_FIFO; in autoconfig_16550a()
1052 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in autoconfig_16550a()
1053 if (serial_in(up, UART_EFR) == 0) { in autoconfig_16550a()
1054 serial_out(up, UART_EFR, 0xA8); in autoconfig_16550a()
1055 if (serial_in(up, UART_EFR) != 0) { in autoconfig_16550a()
1057 up->port.type = PORT_16650; in autoconfig_16550a()
1058 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_16550a()
1060 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1061 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | in autoconfig_16550a()
1063 status1 = serial_in(up, UART_IIR) >> 5; in autoconfig_16550a()
1064 serial_out(up, UART_FCR, 0); in autoconfig_16550a()
1065 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1068 up->port.type = PORT_16550A_FSL64; in autoconfig_16550a()
1072 serial_out(up, UART_EFR, 0); in autoconfig_16550a()
1080 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in autoconfig_16550a()
1081 if (serial_in(up, UART_EFR) == 0 && !broken_efr(up)) { in autoconfig_16550a()
1083 autoconfig_has_efr(up); in autoconfig_16550a()
1094 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1095 status1 = serial8250_in_MCR(up); in autoconfig_16550a()
1096 serial_out(up, UART_LCR, 0xE0); in autoconfig_16550a()
1097 status2 = serial_in(up, 0x02); /* EXCR1 */ in autoconfig_16550a()
1100 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1101 serial8250_out_MCR(up, status1 ^ UART_MCR_LOOP); in autoconfig_16550a()
1102 serial_out(up, UART_LCR, 0xE0); in autoconfig_16550a()
1103 status2 = serial_in(up, 0x02); /* EXCR1 */ in autoconfig_16550a()
1104 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1105 serial8250_out_MCR(up, status1); in autoconfig_16550a()
1110 serial_out(up, UART_LCR, 0xE0); in autoconfig_16550a()
1112 quot = serial_dl_read(up); in autoconfig_16550a()
1115 if (ns16550a_goto_highspeed(up)) in autoconfig_16550a()
1116 serial_dl_write(up, quot); in autoconfig_16550a()
1118 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1120 up->port.uartclk = 921600*16; in autoconfig_16550a()
1121 up->port.type = PORT_NS16550A; in autoconfig_16550a()
1122 up->capabilities |= UART_NATSEMI; in autoconfig_16550a()
1133 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1134 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); in autoconfig_16550a()
1135 status1 = serial_in(up, UART_IIR) >> 5; in autoconfig_16550a()
1136 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO); in autoconfig_16550a()
1137 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in autoconfig_16550a()
1138 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); in autoconfig_16550a()
1139 status2 = serial_in(up, UART_IIR) >> 5; in autoconfig_16550a()
1140 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO); in autoconfig_16550a()
1141 serial_out(up, UART_LCR, 0); in autoconfig_16550a()
1146 up->port.type = PORT_16750; in autoconfig_16550a()
1147 up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP; in autoconfig_16550a()
1159 iersave = serial_in(up, UART_IER); in autoconfig_16550a()
1160 serial_out(up, UART_IER, iersave & ~UART_IER_UUE); in autoconfig_16550a()
1161 if (!(serial_in(up, UART_IER) & UART_IER_UUE)) { in autoconfig_16550a()
1166 serial_out(up, UART_IER, iersave | UART_IER_UUE); in autoconfig_16550a()
1167 if (serial_in(up, UART_IER) & UART_IER_UUE) { in autoconfig_16550a()
1173 up->port.type = PORT_XSCALE; in autoconfig_16550a()
1174 up->capabilities |= UART_CAP_UUE | UART_CAP_RTOIE; in autoconfig_16550a()
1184 serial_out(up, UART_IER, iersave); in autoconfig_16550a()
1190 if (up->port.type == PORT_16550A && size_fifo(up) == 64) { in autoconfig_16550a()
1191 up->port.type = PORT_U6_16550A; in autoconfig_16550a()
1192 up->capabilities |= UART_CAP_AFE; in autoconfig_16550a()
1203 static void autoconfig(struct uart_8250_port *up) in autoconfig() argument
1207 struct uart_port *port = &up->port; in autoconfig()
1223 up->capabilities = 0; in autoconfig()
1224 up->bugs = 0; in autoconfig()
1240 scratch = serial_in(up, UART_IER); in autoconfig()
1241 serial_out(up, UART_IER, 0); in autoconfig()
1249 scratch2 = serial_in(up, UART_IER) & 0x0f; in autoconfig()
1250 serial_out(up, UART_IER, 0x0F); in autoconfig()
1254 scratch3 = serial_in(up, UART_IER) & 0x0f; in autoconfig()
1255 serial_out(up, UART_IER, scratch); in autoconfig()
1267 save_mcr = serial8250_in_MCR(up); in autoconfig()
1268 save_lcr = serial_in(up, UART_LCR); in autoconfig()
1280 serial8250_out_MCR(up, UART_MCR_LOOP | 0x0A); in autoconfig()
1281 status1 = serial_in(up, UART_MSR) & 0xF0; in autoconfig()
1282 serial8250_out_MCR(up, save_mcr); in autoconfig()
1300 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in autoconfig()
1301 serial_out(up, UART_EFR, 0); in autoconfig()
1302 serial_out(up, UART_LCR, 0); in autoconfig()
1304 serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO); in autoconfig()
1307 scratch = serial_in(up, UART_IIR); in autoconfig()
1311 autoconfig_8250(up); in autoconfig()
1320 autoconfig_16550a(up); in autoconfig()
1328 if (port->type == PORT_16550A && up->probe & UART_PROBE_RSA && in autoconfig()
1329 __enable_rsa(up)) in autoconfig()
1333 serial_out(up, UART_LCR, save_lcr); in autoconfig()
1335 port->fifosize = uart_config[up->port.type].fifo_size; in autoconfig()
1336 old_capabilities = up->capabilities; in autoconfig()
1337 up->capabilities = uart_config[port->type].flags; in autoconfig()
1338 up->tx_loadsz = uart_config[port->type].tx_loadsz; in autoconfig()
1348 serial_out(up, UART_RSA_FRR, 0); in autoconfig()
1350 serial8250_out_MCR(up, save_mcr); in autoconfig()
1351 serial8250_clear_fifos(up); in autoconfig()
1352 serial_in(up, UART_RX); in autoconfig()
1353 if (up->capabilities & UART_CAP_UUE) in autoconfig()
1354 serial_out(up, UART_IER, UART_IER_UUE); in autoconfig()
1356 serial_out(up, UART_IER, 0); in autoconfig()
1365 fintek_8250_probe(up); in autoconfig()
1367 if (up->capabilities != old_capabilities) { in autoconfig()
1369 old_capabilities, up->capabilities); in autoconfig()
1376 static void autoconfig_irq(struct uart_8250_port *up) in autoconfig_irq() argument
1378 struct uart_port *port = &up->port; in autoconfig_irq()
1397 save_mcr = serial8250_in_MCR(up); in autoconfig_irq()
1398 save_ier = serial_in(up, UART_IER); in autoconfig_irq()
1399 serial8250_out_MCR(up, UART_MCR_OUT1 | UART_MCR_OUT2); in autoconfig_irq()
1402 serial8250_out_MCR(up, 0); in autoconfig_irq()
1405 serial8250_out_MCR(up, UART_MCR_DTR | UART_MCR_RTS); in autoconfig_irq()
1407 serial8250_out_MCR(up, in autoconfig_irq()
1410 serial_out(up, UART_IER, 0x0f); /* enable all intrs */ in autoconfig_irq()
1411 serial_in(up, UART_LSR); in autoconfig_irq()
1412 serial_in(up, UART_RX); in autoconfig_irq()
1413 serial_in(up, UART_IIR); in autoconfig_irq()
1414 serial_in(up, UART_MSR); in autoconfig_irq()
1415 serial_out(up, UART_TX, 0xFF); in autoconfig_irq()
1419 serial8250_out_MCR(up, save_mcr); in autoconfig_irq()
1420 serial_out(up, UART_IER, save_ier); in autoconfig_irq()
1433 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_stop_rx() local
1435 serial8250_rpm_get(up); in serial8250_stop_rx()
1437 up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); in serial8250_stop_rx()
1438 up->port.read_status_mask &= ~UART_LSR_DR; in serial8250_stop_rx()
1439 serial_port_out(port, UART_IER, up->ier); in serial8250_stop_rx()
1441 serial8250_rpm_put(up); in serial8250_stop_rx()
1546 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_stop_tx() local
1548 serial8250_rpm_get(up); in serial8250_stop_tx()
1549 __stop_tx(up); in serial8250_stop_tx()
1555 up->acr |= UART_ACR_TXDIS; in serial8250_stop_tx()
1556 serial_icr_write(up, UART_ACR, up->acr); in serial8250_stop_tx()
1558 serial8250_rpm_put(up); in serial8250_stop_tx()
1563 struct uart_8250_port *up = up_to_u8250p(port); in __start_tx() local
1565 if (up->dma && !up->dma->tx_dma(up)) in __start_tx()
1568 if (serial8250_set_THRI(up)) { in __start_tx()
1569 if (up->bugs & UART_BUG_TXEN) { in __start_tx()
1572 lsr = serial_in(up, UART_LSR); in __start_tx()
1573 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; in __start_tx()
1575 serial8250_tx_chars(up); in __start_tx()
1582 if (port->type == PORT_16C950 && up->acr & UART_ACR_TXDIS) { in __start_tx()
1583 up->acr &= ~UART_ACR_TXDIS; in __start_tx()
1584 serial_icr_write(up, UART_ACR, up->acr); in __start_tx()
1598 void serial8250_em485_start_tx(struct uart_8250_port *up) in serial8250_em485_start_tx() argument
1600 unsigned char mcr = serial8250_in_MCR(up); in serial8250_em485_start_tx()
1602 if (!(up->port.rs485.flags & SER_RS485_RX_DURING_TX)) in serial8250_em485_start_tx()
1603 serial8250_stop_rx(&up->port); in serial8250_em485_start_tx()
1605 if (up->port.rs485.flags & SER_RS485_RTS_ON_SEND) in serial8250_em485_start_tx()
1609 serial8250_out_MCR(up, mcr); in serial8250_em485_start_tx()
1615 struct uart_8250_port *up = up_to_u8250p(port); in start_tx_rs485() local
1616 struct uart_8250_em485 *em485 = up->em485; in start_tx_rs485()
1623 up->rs485_start_tx(up); in start_tx_rs485()
1625 if (up->port.rs485.delay_rts_before_send > 0) { in start_tx_rs485()
1628 up->port.rs485.delay_rts_before_send); in start_tx_rs485()
1655 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_start_tx() local
1656 struct uart_8250_em485 *em485 = up->em485; in serial8250_start_tx()
1658 serial8250_rpm_get_tx(up); in serial8250_start_tx()
1682 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_disable_ms() local
1685 if (up->bugs & UART_BUG_NOMSR) in serial8250_disable_ms()
1688 mctrl_gpio_disable_ms(up->gpios); in serial8250_disable_ms()
1690 up->ier &= ~UART_IER_MSI; in serial8250_disable_ms()
1691 serial_port_out(port, UART_IER, up->ier); in serial8250_disable_ms()
1696 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_enable_ms() local
1699 if (up->bugs & UART_BUG_NOMSR) in serial8250_enable_ms()
1702 mctrl_gpio_enable_ms(up->gpios); in serial8250_enable_ms()
1704 up->ier |= UART_IER_MSI; in serial8250_enable_ms()
1706 serial8250_rpm_get(up); in serial8250_enable_ms()
1707 serial_port_out(port, UART_IER, up->ier); in serial8250_enable_ms()
1708 serial8250_rpm_put(up); in serial8250_enable_ms()
1711 void serial8250_read_char(struct uart_8250_port *up, unsigned char lsr) in serial8250_read_char() argument
1713 struct uart_port *port = &up->port; in serial8250_read_char()
1718 ch = serial_in(up, UART_RX); in serial8250_read_char()
1731 lsr |= up->lsr_saved_flags; in serial8250_read_char()
1732 up->lsr_saved_flags = 0; in serial8250_read_char()
1778 unsigned char serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr) in serial8250_rx_chars() argument
1780 struct uart_port *port = &up->port; in serial8250_rx_chars()
1784 serial8250_read_char(up, lsr); in serial8250_rx_chars()
1787 lsr = serial_in(up, UART_LSR); in serial8250_rx_chars()
1795 void serial8250_tx_chars(struct uart_8250_port *up) in serial8250_tx_chars() argument
1797 struct uart_port *port = &up->port; in serial8250_tx_chars()
1802 serial_out(up, UART_TX, port->x_char); in serial8250_tx_chars()
1812 __stop_tx(up); in serial8250_tx_chars()
1816 count = up->tx_loadsz; in serial8250_tx_chars()
1818 serial_out(up, UART_TX, xmit->buf[xmit->tail]); in serial8250_tx_chars()
1819 if (up->bugs & UART_BUG_TXRACE) { in serial8250_tx_chars()
1829 serial_in(up, UART_SCR); in serial8250_tx_chars()
1835 if ((up->capabilities & UART_CAP_HFIFO) && in serial8250_tx_chars()
1836 (serial_in(up, UART_LSR) & BOTH_EMPTY) != BOTH_EMPTY) in serial8250_tx_chars()
1839 if ((up->capabilities & UART_CAP_MINI) && in serial8250_tx_chars()
1840 !(serial_in(up, UART_LSR) & UART_LSR_THRE)) in serial8250_tx_chars()
1852 if (uart_circ_empty(xmit) && !(up->capabilities & UART_CAP_RPM)) in serial8250_tx_chars()
1853 __stop_tx(up); in serial8250_tx_chars()
1858 unsigned int serial8250_modem_status(struct uart_8250_port *up) in serial8250_modem_status() argument
1860 struct uart_port *port = &up->port; in serial8250_modem_status()
1861 unsigned int status = serial_in(up, UART_MSR); in serial8250_modem_status()
1863 status |= up->msr_saved_flags; in serial8250_modem_status()
1864 up->msr_saved_flags = 0; in serial8250_modem_status()
1865 if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI && in serial8250_modem_status()
1883 static bool handle_rx_dma(struct uart_8250_port *up, unsigned int iir) in handle_rx_dma() argument
1887 serial8250_rx_dma_flush(up); in handle_rx_dma()
1892 return up->dma->rx_dma(up); in handle_rx_dma()
1901 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_handle_irq() local
1926 if (!up->dma || handle_rx_dma(up, iir)) in serial8250_handle_irq()
1927 status = serial8250_rx_chars(up, status); in serial8250_handle_irq()
1929 serial8250_modem_status(up); in serial8250_handle_irq()
1930 if ((!up->dma || up->dma->tx_err) && (status & UART_LSR_THRE) && in serial8250_handle_irq()
1931 (up->ier & UART_IER_THRI)) in serial8250_handle_irq()
1932 serial8250_tx_chars(up); in serial8250_handle_irq()
1942 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_default_handle_irq() local
1946 serial8250_rpm_get(up); in serial8250_default_handle_irq()
1951 serial8250_rpm_put(up); in serial8250_default_handle_irq()
1968 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_tx_threshold_handle_irq() local
1971 serial8250_tx_chars(up); in serial8250_tx_threshold_handle_irq()
1981 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_tx_empty() local
1985 serial8250_rpm_get(up); in serial8250_tx_empty()
1989 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; in serial8250_tx_empty()
1992 serial8250_rpm_put(up); in serial8250_tx_empty()
1999 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_get_mctrl() local
2003 serial8250_rpm_get(up); in serial8250_do_get_mctrl()
2004 status = serial8250_modem_status(up); in serial8250_do_get_mctrl()
2005 serial8250_rpm_put(up); in serial8250_do_get_mctrl()
2008 if (up->gpios) in serial8250_do_get_mctrl()
2009 return mctrl_gpio_get(up->gpios, &val); in serial8250_do_get_mctrl()
2024 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_set_mctrl() local
2029 mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr; in serial8250_do_set_mctrl()
2031 serial8250_out_MCR(up, mcr); in serial8250_do_set_mctrl()
2045 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_break_ctl() local
2048 serial8250_rpm_get(up); in serial8250_break_ctl()
2051 up->lcr |= UART_LCR_SBC; in serial8250_break_ctl()
2053 up->lcr &= ~UART_LCR_SBC; in serial8250_break_ctl()
2054 serial_port_out(port, UART_LCR, up->lcr); in serial8250_break_ctl()
2056 serial8250_rpm_put(up); in serial8250_break_ctl()
2062 static void wait_for_xmitr(struct uart_8250_port *up, int bits) in wait_for_xmitr() argument
2068 status = serial_in(up, UART_LSR); in wait_for_xmitr()
2070 up->lsr_saved_flags |= status & LSR_SAVE_FLAGS; in wait_for_xmitr()
2081 if (up->port.flags & UPF_CONS_FLOW) { in wait_for_xmitr()
2083 unsigned int msr = serial_in(up, UART_MSR); in wait_for_xmitr()
2084 up->msr_saved_flags |= msr & MSR_SAVE_FLAGS; in wait_for_xmitr()
2101 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_get_poll_char() local
2105 serial8250_rpm_get(up); in serial8250_get_poll_char()
2116 serial8250_rpm_put(up); in serial8250_get_poll_char()
2125 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_put_poll_char() local
2127 serial8250_rpm_get(up); in serial8250_put_poll_char()
2132 if (up->capabilities & UART_CAP_UUE) in serial8250_put_poll_char()
2137 wait_for_xmitr(up, BOTH_EMPTY); in serial8250_put_poll_char()
2147 wait_for_xmitr(up, BOTH_EMPTY); in serial8250_put_poll_char()
2149 serial8250_rpm_put(up); in serial8250_put_poll_char()
2156 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_startup() local
2163 if (!up->tx_loadsz) in serial8250_do_startup()
2164 up->tx_loadsz = uart_config[port->type].tx_loadsz; in serial8250_do_startup()
2165 if (!up->capabilities) in serial8250_do_startup()
2166 up->capabilities = uart_config[port->type].flags; in serial8250_do_startup()
2167 up->mcr = 0; in serial8250_do_startup()
2169 if (port->iotype != up->cur_iotype) in serial8250_do_startup()
2172 serial8250_rpm_get(up); in serial8250_do_startup()
2175 up->acr = 0; in serial8250_do_startup()
2180 serial_icr_write(up, UART_CSR, 0); /* Reset the UART */ in serial8250_do_startup()
2213 enable_rsa(up); in serial8250_do_startup()
2220 serial8250_clear_fifos(up); in serial8250_do_startup()
2248 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in serial8250_do_startup()
2250 fctr = serial_in(up, UART_FCTR) & ~(UART_FCTR_RX|UART_FCTR_TX); in serial8250_do_startup()
2268 if ((up->tx_loadsz < 2) || (up->tx_loadsz > port->fifosize)) { in serial8250_do_startup()
2274 port->fifosize - up->tx_loadsz); in serial8250_do_startup()
2280 if (port->irq && (up->port.flags & UPF_SHARE_IRQ)) in serial8250_do_startup()
2281 up->port.irqflags |= IRQF_SHARED; in serial8250_do_startup()
2283 if (port->irq && !(up->port.flags & UPF_NO_THRE_TEST)) { in serial8250_do_startup()
2299 wait_for_xmitr(up, UART_LSR_THRE); in serial8250_do_startup()
2320 up->port.flags & UPF_BUG_THRE) { in serial8250_do_startup()
2321 up->bugs |= UART_BUG_THRE; in serial8250_do_startup()
2325 retval = up->ops->setup_irq(up); in serial8250_do_startup()
2335 if (up->port.flags & UPF_FOURPORT) { in serial8250_do_startup()
2336 if (!up->port.irq) in serial8250_do_startup()
2337 up->port.mctrl |= TIOCM_OUT1; in serial8250_do_startup()
2343 up->port.mctrl |= TIOCM_OUT2; in serial8250_do_startup()
2358 if (up->port.quirks & UPQ_NO_TXEN_TEST) in serial8250_do_startup()
2371 if (!(up->bugs & UART_BUG_TXEN)) { in serial8250_do_startup()
2372 up->bugs |= UART_BUG_TXEN; in serial8250_do_startup()
2376 up->bugs &= ~UART_BUG_TXEN; in serial8250_do_startup()
2391 up->lsr_saved_flags = 0; in serial8250_do_startup()
2392 up->msr_saved_flags = 0; in serial8250_do_startup()
2397 if (up->dma) { in serial8250_do_startup()
2402 else if (serial8250_request_dma(up)) in serial8250_do_startup()
2406 up->dma = NULL; in serial8250_do_startup()
2415 up->ier = UART_IER_RLSI | UART_IER_RDI; in serial8250_do_startup()
2428 serial8250_rpm_put(up); in serial8250_do_startup()
2442 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_shutdown() local
2445 serial8250_rpm_get(up); in serial8250_do_shutdown()
2450 up->ier = 0; in serial8250_do_shutdown()
2456 if (up->dma) in serial8250_do_shutdown()
2457 serial8250_release_dma(up); in serial8250_do_shutdown()
2475 serial8250_clear_fifos(up); in serial8250_do_shutdown()
2481 disable_rsa(up); in serial8250_do_shutdown()
2489 serial8250_rpm_put(up); in serial8250_do_shutdown()
2491 up->ops->release_irq(up); in serial8250_do_shutdown()
2504 static unsigned int npcm_get_divisor(struct uart_8250_port *up, in npcm_get_divisor() argument
2507 struct uart_port *port = &up->port; in npcm_get_divisor()
2517 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_get_divisor() local
2556 else if (up->port.type == PORT_NPCM) in serial8250_do_get_divisor()
2557 quot = npcm_get_divisor(up, baud); in serial8250_do_get_divisor()
2564 if (up->bugs & UART_BUG_QUOT && (quot & 0xff) == 0) in serial8250_do_get_divisor()
2580 static unsigned char serial8250_compute_lcr(struct uart_8250_port *up, in serial8250_compute_lcr() argument
2605 if (up->bugs & UART_BUG_PARITY) in serial8250_compute_lcr()
2606 up->fifo_bug = true; in serial8250_compute_lcr()
2621 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_set_divisor() local
2624 if (is_omap1510_8250(up)) { in serial8250_do_set_divisor()
2636 if (up->capabilities & UART_NATSEMI) in serial8250_do_set_divisor()
2639 serial_port_out(port, UART_LCR, up->lcr | UART_LCR_DLAB); in serial8250_do_set_divisor()
2641 serial_dl_write(up, quot); in serial8250_do_set_divisor()
2691 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_update_uartclk() local
2722 serial8250_rpm_get(up); in serial8250_update_uartclk()
2728 serial_port_out(port, UART_LCR, up->lcr); in serial8250_update_uartclk()
2731 serial8250_rpm_put(up); in serial8250_update_uartclk()
2744 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_do_set_termios() local
2749 if (up->capabilities & UART_CAP_MINI) { in serial8250_do_set_termios()
2755 cval = serial8250_compute_lcr(up, termios->c_cflag); in serial8250_do_set_termios()
2764 serial8250_rpm_get(up); in serial8250_do_set_termios()
2767 up->lcr = cval; /* Save computed LCR */ in serial8250_do_set_termios()
2769 if (up->capabilities & UART_CAP_FIFO && port->fifosize > 1) { in serial8250_do_set_termios()
2771 if ((baud < 2400 && !up->dma) || up->fifo_bug) { in serial8250_do_set_termios()
2772 up->fcr &= ~UART_FCR_TRIGGER_MASK; in serial8250_do_set_termios()
2773 up->fcr |= UART_FCR_TRIGGER_1; in serial8250_do_set_termios()
2782 if (up->capabilities & UART_CAP_AFE) { in serial8250_do_set_termios()
2783 up->mcr &= ~UART_MCR_AFE; in serial8250_do_set_termios()
2785 up->mcr |= UART_MCR_AFE; in serial8250_do_set_termios()
2824 up->ier &= ~UART_IER_MSI; in serial8250_do_set_termios()
2825 if (!(up->bugs & UART_BUG_NOMSR) && in serial8250_do_set_termios()
2826 UART_ENABLE_MS(&up->port, termios->c_cflag)) in serial8250_do_set_termios()
2827 up->ier |= UART_IER_MSI; in serial8250_do_set_termios()
2828 if (up->capabilities & UART_CAP_UUE) in serial8250_do_set_termios()
2829 up->ier |= UART_IER_UUE; in serial8250_do_set_termios()
2830 if (up->capabilities & UART_CAP_RTOIE) in serial8250_do_set_termios()
2831 up->ier |= UART_IER_RTOIE; in serial8250_do_set_termios()
2833 serial_port_out(port, UART_IER, up->ier); in serial8250_do_set_termios()
2835 if (up->capabilities & UART_CAP_EFR) { in serial8250_do_set_termios()
2859 serial_port_out(port, UART_FCR, up->fcr); in serial8250_do_set_termios()
2861 serial_port_out(port, UART_LCR, up->lcr); /* reset DLAB */ in serial8250_do_set_termios()
2864 if (up->fcr & UART_FCR_ENABLE_FIFO) in serial8250_do_set_termios()
2866 serial_port_out(port, UART_FCR, up->fcr); /* set fcr */ in serial8250_do_set_termios()
2870 serial8250_rpm_put(up); in serial8250_do_set_termios()
2952 static int serial8250_request_std_resource(struct uart_8250_port *up) in serial8250_request_std_resource() argument
2954 unsigned int size = serial8250_port_size(up); in serial8250_request_std_resource()
2955 struct uart_port *port = &up->port; in serial8250_request_std_resource()
2991 static void serial8250_release_std_resource(struct uart_8250_port *up) in serial8250_release_std_resource() argument
2993 unsigned int size = serial8250_port_size(up); in serial8250_release_std_resource()
2994 struct uart_port *port = &up->port; in serial8250_release_std_resource()
3023 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_release_port() local
3025 serial8250_release_std_resource(up); in serial8250_release_port()
3030 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_request_port() local
3032 return serial8250_request_std_resource(up); in serial8250_request_port()
3035 static int fcr_get_rxtrig_bytes(struct uart_8250_port *up) in fcr_get_rxtrig_bytes() argument
3037 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in fcr_get_rxtrig_bytes()
3040 bytes = conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(up->fcr)]; in fcr_get_rxtrig_bytes()
3045 static int bytes_to_fcr_rxtrig(struct uart_8250_port *up, unsigned char bytes) in bytes_to_fcr_rxtrig() argument
3047 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in bytes_to_fcr_rxtrig()
3066 struct uart_8250_port *up = up_to_u8250p(uport); in do_get_rxtrig() local
3068 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1) in do_get_rxtrig()
3071 return fcr_get_rxtrig_bytes(up); in do_get_rxtrig()
3102 struct uart_8250_port *up = up_to_u8250p(uport); in do_set_rxtrig() local
3105 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1 || in do_set_rxtrig()
3106 up->fifo_bug) in do_set_rxtrig()
3109 rxtrig = bytes_to_fcr_rxtrig(up, bytes); in do_set_rxtrig()
3113 serial8250_clear_fifos(up); in do_set_rxtrig()
3114 up->fcr &= ~UART_FCR_TRIGGER_MASK; in do_set_rxtrig()
3115 up->fcr |= (unsigned char)rxtrig; in do_set_rxtrig()
3116 serial_out(up, UART_FCR, up->fcr); in do_set_rxtrig()
3163 static void register_dev_spec_attr_grp(struct uart_8250_port *up) in register_dev_spec_attr_grp() argument
3165 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in register_dev_spec_attr_grp()
3168 up->port.attr_group = &serial8250_dev_attr_group; in register_dev_spec_attr_grp()
3173 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_config_port() local
3180 ret = serial8250_request_std_resource(up); in serial8250_config_port()
3184 if (port->iotype != up->cur_iotype) in serial8250_config_port()
3188 autoconfig(up); in serial8250_config_port()
3195 up->bugs |= UART_BUG_NOMSR; in serial8250_config_port()
3199 up->bugs |= UART_BUG_NOMSR; in serial8250_config_port()
3202 autoconfig_irq(up); in serial8250_config_port()
3205 serial8250_release_std_resource(up); in serial8250_config_port()
3207 register_dev_spec_attr_grp(up); in serial8250_config_port()
3208 up->fcr = uart_config[up->port.type].fcr; in serial8250_config_port()
3258 void serial8250_init_port(struct uart_8250_port *up) in serial8250_init_port() argument
3260 struct uart_port *port = &up->port; in serial8250_init_port()
3266 up->cur_iotype = 0xFF; in serial8250_init_port()
3270 void serial8250_set_defaults(struct uart_8250_port *up) in serial8250_set_defaults() argument
3272 struct uart_port *port = &up->port; in serial8250_set_defaults()
3274 if (up->port.flags & UPF_FIXED_TYPE) { in serial8250_set_defaults()
3275 unsigned int type = up->port.type; in serial8250_set_defaults()
3277 if (!up->port.fifosize) in serial8250_set_defaults()
3278 up->port.fifosize = uart_config[type].fifo_size; in serial8250_set_defaults()
3279 if (!up->tx_loadsz) in serial8250_set_defaults()
3280 up->tx_loadsz = uart_config[type].tx_loadsz; in serial8250_set_defaults()
3281 if (!up->capabilities) in serial8250_set_defaults()
3282 up->capabilities = uart_config[type].flags; in serial8250_set_defaults()
3288 if (up->dma) { in serial8250_set_defaults()
3289 if (!up->dma->tx_dma) in serial8250_set_defaults()
3290 up->dma->tx_dma = serial8250_tx_dma; in serial8250_set_defaults()
3291 if (!up->dma->rx_dma) in serial8250_set_defaults()
3292 up->dma->rx_dma = serial8250_rx_dma; in serial8250_set_defaults()
3301 struct uart_8250_port *up = up_to_u8250p(port); in serial8250_console_putchar() local
3303 wait_for_xmitr(up, UART_LSR_THRE); in serial8250_console_putchar()
3310 static void serial8250_console_restore(struct uart_8250_port *up) in serial8250_console_restore() argument
3312 struct uart_port *port = &up->port; in serial8250_console_restore()
3324 serial_port_out(port, UART_LCR, up->lcr); in serial8250_console_restore()
3325 serial8250_out_MCR(up, UART_MCR_DTR | UART_MCR_RTS); in serial8250_console_restore()
3337 void serial8250_console_write(struct uart_8250_port *up, const char *s, in serial8250_console_write() argument
3340 struct uart_8250_em485 *em485 = up->em485; in serial8250_console_write()
3341 struct uart_port *port = &up->port; in serial8250_console_write()
3358 if (up->capabilities & UART_CAP_UUE) 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); in serial8250_console_write()
3381 wait_for_xmitr(up, BOTH_EMPTY); in serial8250_console_write()
3386 up->rs485_stop_tx(up); in serial8250_console_write()
3398 if (up->msr_saved_flags) in serial8250_console_write()
3399 serial8250_modem_status(up); in serial8250_console_write()