Lines Matching refs:port

308 static int set_baud(struct ioc3_port *port, int baud)  in set_baud()  argument
339 uart = port->ip_uart_regs; in set_baud()
380 static int inline port_init(struct ioc3_port *port) in port_init() argument
383 struct port_hooks *hooks = port->ip_hooks; in port_init()
386 struct ioc3_driver_data *idd = port->ip_idd; in port_init()
389 writel(SSCR_RESET, &port->ip_serial_regs->sscr); in port_init()
407 writel(0, &port->ip_serial_regs->sscr); in port_init()
412 port->ip_tx_prod = readl(&port->ip_serial_regs->stcir) & PROD_CONS_MASK; in port_init()
413 writel(port->ip_tx_prod, &port->ip_serial_regs->stpir); in port_init()
414 port->ip_rx_cons = readl(&port->ip_serial_regs->srpir) & PROD_CONS_MASK; in port_init()
415 writel(port->ip_rx_cons | SRCIR_ARM, &port->ip_serial_regs->srcir); in port_init()
418 uart = port->ip_uart_regs; in port_init()
423 set_baud(port, port->ip_baud); in port_init()
439 writel(0, &port->ip_serial_regs->shadow); in port_init()
442 if (port->ip_hooks == &hooks_array[0]) { in port_init()
448 ring_pci_addr = (unsigned long __iomem)port->ip_dma_ringbuf; in port_init()
457 writel(SRTR_HZ / 100, &port->ip_serial_regs->srtr); in port_init()
461 port->ip_sscr = (ENTRIES_PER_RING * 3 / 4); in port_init()
468 port->ip_sscr |= SSCR_HIGH_SPD; in port_init()
470 writel(port->ip_sscr, &port->ip_serial_regs->sscr); in port_init()
473 port->ip_card->ic_enable &= ~hooks->intr_clear; in port_init()
474 ioc3_disable(port->ip_is, idd, hooks->intr_clear); in port_init()
475 ioc3_ack(port->ip_is, idd, hooks->intr_clear); in port_init()
484 static void enable_intrs(struct ioc3_port *port, uint32_t mask) in enable_intrs() argument
486 if ((port->ip_card->ic_enable & mask) != mask) { in enable_intrs()
487 port->ip_card->ic_enable |= mask; in enable_intrs()
488 ioc3_enable(port->ip_is, port->ip_idd, mask); in enable_intrs()
496 static inline int local_open(struct ioc3_port *port) in local_open() argument
500 port->ip_flags = INPUT_ENABLE; in local_open()
503 if (port->ip_sscr & SSCR_DMA_EN) { in local_open()
504 writel(port->ip_sscr | SSCR_DMA_PAUSE, in local_open()
505 &port->ip_serial_regs->sscr); in local_open()
506 while ((readl(&port->ip_serial_regs->sscr) in local_open()
522 &port->ip_uart_regs->iu_fcr); in local_open()
524 writeb(UART_LCR_WLEN8, &port->ip_uart_regs->iu_lcr); in local_open()
530 port->ip_sscr &= ~SSCR_RX_THRESHOLD; in local_open()
531 port->ip_sscr |= 1; /* default threshold */ in local_open()
536 writel(port->ip_sscr, &port->ip_serial_regs->sscr); in local_open()
537 port->ip_tx_lowat = 1; in local_open()
546 static inline int set_rx_timeout(struct ioc3_port *port, int timeout) in set_rx_timeout() argument
550 port->ip_rx_timeout = timeout; in set_rx_timeout()
559 threshold = timeout * port->ip_baud / 4000; in set_rx_timeout()
566 port->ip_sscr &= ~SSCR_RX_THRESHOLD; in set_rx_timeout()
567 port->ip_sscr |= threshold; in set_rx_timeout()
568 writel(port->ip_sscr, &port->ip_serial_regs->sscr); in set_rx_timeout()
576 writel(timeout, &port->ip_serial_regs->srtr); in set_rx_timeout()
590 config_port(struct ioc3_port *port, in config_port() argument
598 __func__, ((struct uart_port *)port->ip_port)->line, in config_port()
601 if (set_baud(port, baud)) in config_port()
622 if (port->ip_sscr & SSCR_DMA_EN) { in config_port()
623 writel(port->ip_sscr | SSCR_DMA_PAUSE, in config_port()
624 &port->ip_serial_regs->sscr); in config_port()
625 while ((readl(&port->ip_serial_regs->sscr) in config_port()
634 lcr = readb(&port->ip_uart_regs->iu_lcr); in config_port()
652 writeb(lcr, &port->ip_uart_regs->iu_lcr); in config_port()
655 if (port->ip_sscr & SSCR_DMA_EN) { in config_port()
656 writel(port->ip_sscr, &port->ip_serial_regs->sscr); in config_port()
658 port->ip_baud = baud; in config_port()
664 port->ip_tx_lowat = (TX_LOWAT_CHARS(baud) + 3) / 4; in config_port()
665 if (port->ip_tx_lowat == 0) in config_port()
666 port->ip_tx_lowat = 1; in config_port()
668 set_rx_timeout(port, 2); in config_port()
679 static inline int do_write(struct ioc3_port *port, char *buf, int len) in do_write() argument
684 struct port_hooks *hooks = port->ip_hooks; in do_write()
688 prod_ptr = port->ip_tx_prod; in do_write()
689 cons_ptr = readl(&port->ip_serial_regs->stcir) & PROD_CONS_MASK; in do_write()
690 outring = port->ip_outring; in do_write()
722 if (!(port->ip_flags & LOWAT_WRITTEN) && in do_write()
724 <= port->ip_tx_lowat * (int)sizeof(struct ring_entry)) { in do_write()
725 port->ip_flags |= LOWAT_WRITTEN; in do_write()
735 if (total > 0 && !(port->ip_sscr & SSCR_DMA_EN)) { in do_write()
736 port->ip_sscr |= SSCR_DMA_EN; in do_write()
737 writel(port->ip_sscr, &port->ip_serial_regs->sscr); in do_write()
743 if (!uart_tx_stopped(port->ip_port)) { in do_write()
744 writel(prod_ptr, &port->ip_serial_regs->stpir); in do_write()
750 enable_intrs(port, hooks->intr_tx_mt); in do_write()
752 port->ip_tx_prod = prod_ptr; in do_write()
762 static inline void disable_intrs(struct ioc3_port *port, uint32_t mask) in disable_intrs() argument
764 if (port->ip_card->ic_enable & mask) { in disable_intrs()
765 ioc3_disable(port->ip_is, port->ip_idd, mask); in disable_intrs()
766 port->ip_card->ic_enable &= ~mask; in disable_intrs()
776 static int set_notification(struct ioc3_port *port, int mask, int set_on) in set_notification() argument
778 struct port_hooks *hooks = port->ip_hooks; in set_notification()
797 enable_intrs(port, intrbits); in set_notification()
798 port->ip_notify |= mask; in set_notification()
799 port->ip_sscr |= sscrbits; in set_notification()
801 disable_intrs(port, intrbits); in set_notification()
802 port->ip_notify &= ~mask; in set_notification()
803 port->ip_sscr &= ~sscrbits; in set_notification()
810 if (port->ip_notify & (N_DATA_READY | N_DDCD)) in set_notification()
811 port->ip_sscr |= SSCR_DMA_EN; in set_notification()
812 else if (!(port->ip_card->ic_enable & hooks->intr_tx_mt)) in set_notification()
813 port->ip_sscr &= ~SSCR_DMA_EN; in set_notification()
815 writel(port->ip_sscr, &port->ip_serial_regs->sscr); in set_notification()
828 struct ioc3_port *port = get_ioc3_port(the_port); in set_mcr() local
833 if (!port) in set_mcr()
837 if (port->ip_sscr & SSCR_DMA_EN) { in set_mcr()
838 writel(port->ip_sscr | SSCR_DMA_PAUSE, in set_mcr()
839 &port->ip_serial_regs->sscr); in set_mcr()
840 while ((readl(&port->ip_serial_regs->sscr) in set_mcr()
847 shadow = readl(&port->ip_serial_regs->shadow); in set_mcr()
853 writeb(mcr, &port->ip_uart_regs->iu_mcr); in set_mcr()
854 writel(shadow, &port->ip_serial_regs->shadow); in set_mcr()
857 if (port->ip_sscr & SSCR_DMA_EN) { in set_mcr()
858 writel(port->ip_sscr, &port->ip_serial_regs->sscr); in set_mcr()
868 static int ioc3_set_proto(struct ioc3_port *port, int proto) in ioc3_set_proto() argument
870 struct port_hooks *hooks = port->ip_hooks; in ioc3_set_proto()
877 writel(0, (&port->ip_idd->vma->gppr[0] in ioc3_set_proto()
884 writel(1, (&port->ip_idd->vma->gppr[0] in ioc3_set_proto()
901 struct ioc3_port *port = get_ioc3_port(the_port); in transmit_chars() local
906 if (!port) in transmit_chars()
910 tty = state->port.tty; in transmit_chars()
914 set_notification(port, N_ALL_OUTPUT, 0); in transmit_chars()
925 result = do_write(port, start, xmit_count); in transmit_chars()
941 set_notification(port, N_OUTPUT_LOWAT, 0); in transmit_chars()
943 set_notification(port, N_OUTPUT_LOWAT, 1); in transmit_chars()
957 struct ioc3_port *port = get_ioc3_port(the_port); in ioc3_change_speed() local
1003 state->port.low_latency = 1; in ioc3_change_speed()
1020 port->ip_sscr |= SSCR_HFC_EN; in ioc3_change_speed()
1024 port->ip_sscr &= ~SSCR_HFC_EN; in ioc3_change_speed()
1026 writel(port->ip_sscr, &port->ip_serial_regs->sscr); in ioc3_change_speed()
1032 __func__, (void *)port, the_port->line, cflag, baud, in ioc3_change_speed()
1036 if ((config_port(port, baud, /* baud */ in ioc3_change_speed()
1041 set_notification(port, the_port->ignore_status_mask, 1); in ioc3_change_speed()
1051 struct ioc3_port *port; in ic3_startup_local() local
1058 port = get_ioc3_port(the_port); in ic3_startup_local()
1059 if (!port) { in ic3_startup_local()
1064 local_open(port); in ic3_startup_local()
1067 ioc3_set_proto(port, IS_RS232(the_port->line) ? PROTO_RS232 : in ic3_startup_local()
1076 static void ioc3_cb_output_lowat(struct ioc3_port *port) in ioc3_cb_output_lowat() argument
1081 if (port->ip_port) { in ioc3_cb_output_lowat()
1082 spin_lock_irqsave(&port->ip_port->lock, pflags); in ioc3_cb_output_lowat()
1083 transmit_chars(port->ip_port); in ioc3_cb_output_lowat()
1084 spin_unlock_irqrestore(&port->ip_port->lock, pflags); in ioc3_cb_output_lowat()
1120 struct ioc3_port *port = get_ioc3_port(the_port); in do_read() local
1129 BUG_ON(!port); in do_read()
1130 hooks = port->ip_hooks; in do_read()
1154 writel(port->ip_rx_cons | SRCIR_ARM, &port->ip_serial_regs->srcir); in do_read()
1156 prod_ptr = readl(&port->ip_serial_regs->srpir) & PROD_CONS_MASK; in do_read()
1157 cons_ptr = port->ip_rx_cons; in do_read()
1165 if (!(port->ip_sscr & SSCR_DMA_EN)) { in do_read()
1166 port->ip_sscr |= SSCR_DMA_EN; in do_read()
1176 writel(port->ip_sscr | SSCR_RX_DRAIN, in do_read()
1177 &port->ip_serial_regs->sscr); in do_read()
1178 prod_ptr = readl(&port->ip_serial_regs->srpir) & PROD_CONS_MASK; in do_read()
1189 while (readl(&port->ip_serial_regs->sscr) & in do_read()
1199 prod_ptr = readl(&port->ip_serial_regs->srpir) in do_read()
1203 port->ip_sscr &= ~SSCR_DMA_EN; in do_read()
1204 writel(port->ip_sscr, &port->ip_serial_regs->sscr); in do_read()
1207 inring = port->ip_inring; in do_read()
1208 port->ip_flags &= ~READ_ABORTED; in do_read()
1235 port->ip_flags |= READ_ABORTED; in do_read()
1246 && (port->ip_notify & N_DDCD)) { in do_read()
1248 if ((port->ip_flags & DCD_ON) in do_read()
1261 port->ip_flags &= ~DCD_ON; in do_read()
1284 &port->ip_serial_regs->srcir); in do_read()
1285 port->ip_rx_cons = cons_ptr; in do_read()
1288 if ((port->ip_notify & N_DDCD) in do_read()
1289 && port->ip_port) { in do_read()
1291 (port->ip_port, 0); in do_read()
1294 port.delta_msr_wait); in do_read()
1306 && (port->ip_notify & N_OVERRUN_ERROR)) { in do_read()
1317 && (port->ip_notify & (N_PARITY_ERROR in do_read()
1332 (port-> in do_read()
1338 (port-> in do_read()
1344 && (port->ip_notify & N_BREAK)) { in do_read()
1372 writel(cons_ptr, &port->ip_serial_regs->srcir); in do_read()
1373 port->ip_rx_cons = cons_ptr; in do_read()
1378 if ((port->ip_flags & INPUT_HIGH) && (((prod_ptr - cons_ptr) in do_read()
1380 ((port-> in do_read()
1384 port->ip_flags &= ~INPUT_HIGH; in do_read()
1385 enable_intrs(port, hooks->intr_rx_high); in do_read()
1399 struct ioc3_port *port = get_ioc3_port(the_port); in receive_chars() local
1406 if (!(port->ip_flags & INPUT_ENABLE)) in receive_chars()
1414 read_room = tty_insert_flip_string(&state->port, ch, in receive_chars()
1421 tty_flip_buffer_push(&state->port); in receive_chars()
1443 struct ioc3_port *port; in ioc3uart_intr_one() local
1449 port = card_ptr->ic_port[port_num].icp_port; in ioc3uart_intr_one()
1450 hooks = port->ip_hooks; in ioc3uart_intr_one()
1468 spin_lock_irqsave(&port->ip_lock, flags); in ioc3uart_intr_one()
1479 ((struct uart_port *)port->ip_port)->line); in ioc3uart_intr_one()
1485 shadow = readl(&port->ip_serial_regs->shadow); in ioc3uart_intr_one()
1487 if ((port->ip_notify & N_DDCD) in ioc3uart_intr_one()
1489 && (port->ip_port)) { in ioc3uart_intr_one()
1490 the_port = port->ip_port; in ioc3uart_intr_one()
1494 (&the_port->state->port.delta_msr_wait); in ioc3uart_intr_one()
1495 } else if ((port->ip_notify & N_DDCD) in ioc3uart_intr_one()
1498 uart_handle_dcd_change(port->ip_port, in ioc3uart_intr_one()
1500 port->ip_flags |= DCD_ON; in ioc3uart_intr_one()
1507 shadow = readl(&port->ip_serial_regs->shadow); in ioc3uart_intr_one()
1509 if ((port->ip_notify & N_DCTS) && (port->ip_port)) { in ioc3uart_intr_one()
1510 the_port = port->ip_port; in ioc3uart_intr_one()
1514 (&the_port->state->port.delta_msr_wait); in ioc3uart_intr_one()
1524 if ((port->ip_notify & N_DATA_READY) in ioc3uart_intr_one()
1525 && (port->ip_port)) { in ioc3uart_intr_one()
1526 receive_chars(port->ip_port); in ioc3uart_intr_one()
1533 if ((port->ip_notify & N_DATA_READY) && port->ip_port) { in ioc3uart_intr_one()
1534 receive_chars(port->ip_port); in ioc3uart_intr_one()
1548 if (port->ip_flags & READ_ABORTED) { in ioc3uart_intr_one()
1553 port->ip_flags |= INPUT_HIGH; in ioc3uart_intr_one()
1563 port->ip_flags &= ~LOWAT_WRITTEN; in ioc3uart_intr_one()
1565 if (port->ip_notify & N_OUTPUT_LOWAT) in ioc3uart_intr_one()
1566 ioc3_cb_output_lowat(port); in ioc3uart_intr_one()
1578 if (port->ip_notify & N_OUTPUT_LOWAT) { in ioc3uart_intr_one()
1579 ioc3_cb_output_lowat(port); in ioc3uart_intr_one()
1597 if (!(port->ip_notify in ioc3uart_intr_one()
1599 BUG_ON(!(port->ip_sscr in ioc3uart_intr_one()
1601 port->ip_sscr &= ~SSCR_DMA_EN; in ioc3uart_intr_one()
1602 writel(port->ip_sscr, in ioc3uart_intr_one()
1603 &port->ip_serial_regs->sscr); in ioc3uart_intr_one()
1620 spin_unlock_irqrestore(&port->ip_lock, flags); in ioc3uart_intr_one()
1673 struct ioc3_port *port = get_ioc3_port(the_port); in ic3_tx_empty() local
1675 if (readl(&port->ip_serial_regs->shadow) & SHADOW_TEMT) in ic3_tx_empty()
1687 struct ioc3_port *port = get_ioc3_port(the_port); in ic3_stop_tx() local
1689 if (port) in ic3_stop_tx()
1690 set_notification(port, N_OUTPUT_LOWAT, 0); in ic3_stop_tx()
1700 struct ioc3_port *port = get_ioc3_port(the_port); in ic3_stop_rx() local
1702 if (port) in ic3_stop_rx()
1703 port->ip_flags &= ~INPUT_ENABLE; in ic3_stop_rx()
1723 struct ioc3_port *port; in ic3_shutdown() local
1726 port = get_ioc3_port(the_port); in ic3_shutdown()
1727 if (!port) in ic3_shutdown()
1731 wake_up_interruptible(&state->port.delta_msr_wait); in ic3_shutdown()
1734 set_notification(port, N_ALL, 0); in ic3_shutdown()
1769 struct ioc3_port *port = get_ioc3_port(the_port); in ic3_get_mctrl() local
1773 if (!port) in ic3_get_mctrl()
1776 shadow = readl(&port->ip_serial_regs->shadow); in ic3_get_mctrl()
1793 struct ioc3_port *port = get_ioc3_port(the_port); in ic3_start_tx() local
1795 if (port) { in ic3_start_tx()
1796 set_notification(port, N_OUTPUT_LOWAT, 1); in ic3_start_tx()
1797 enable_intrs(port, port->ip_hooks->intr_tx_mt); in ic3_start_tx()
1819 struct ioc3_port *port; in ic3_startup() local
1827 port = get_ioc3_port(the_port); in ic3_startup()
1828 if (!port) { in ic3_startup()
1832 card_ptr = port->ip_card; in ic3_startup()
1833 port->ip_port = the_port; in ic3_startup()
1870 static int ic3_request_port(struct uart_port *port) in ic3_request_port() argument
1914 struct ioc3_port *port; in ioc3_serial_core_attach() local
1931 port = card_ptr->ic_port[phys_port].icp_port; in ioc3_serial_core_attach()
1932 port->ip_port = the_port; in ioc3_serial_core_attach()
1935 __func__, (void *)the_port, (void *)port, in ioc3_serial_core_attach()
1960 ioc3_set_proto(port, PROTO_RS232); in ioc3_serial_core_attach()
1976 struct ioc3_port *port; in ioc3uart_remove() local
1985 port = card_ptr->ic_port[GET_PHYSICAL_PORT(ii)].icp_port; in ioc3uart_remove()
1986 if (port && IS_PHYSICAL_PORT(ii) in ioc3uart_remove()
1988 pci_free_consistent(port->ip_idd->pdev, in ioc3uart_remove()
1990 (void *)port->ip_cpu_ringbuf, in ioc3uart_remove()
1991 port->ip_dma_ringbuf); in ioc3uart_remove()
1992 kfree(port); in ioc3uart_remove()
2015 struct ioc3_port *port; in ioc3uart_probe() local
2042 port = kzalloc(sizeof(struct ioc3_port), GFP_KERNEL); in ioc3uart_probe()
2043 if (!port) { in ioc3uart_probe()
2049 spin_lock_init(&port->ip_lock); in ioc3uart_probe()
2054 ports[phys_port] = port; in ioc3uart_probe()
2057 card_ptr->ic_port[phys_port].icp_port = port; in ioc3uart_probe()
2058 port->ip_is = is; in ioc3uart_probe()
2059 port->ip_idd = idd; in ioc3uart_probe()
2060 port->ip_baud = 9600; in ioc3uart_probe()
2061 port->ip_card = card_ptr; in ioc3uart_probe()
2062 port->ip_hooks = &hooks_array[phys_port]; in ioc3uart_probe()
2066 port->ip_serial_regs = &idd->vma->port_a; in ioc3uart_probe()
2067 port->ip_uart_regs = &idd->vma->sregs.uarta; in ioc3uart_probe()
2072 (void *)port->ip_serial_regs, in ioc3uart_probe()
2073 (void *)port->ip_uart_regs)); in ioc3uart_probe()
2076 port->ip_cpu_ringbuf = pci_alloc_consistent(pdev, in ioc3uart_probe()
2077 TOTAL_RING_BUF_SIZE, &port->ip_dma_ringbuf); in ioc3uart_probe()
2079 BUG_ON(!((((int64_t) port->ip_dma_ringbuf) & in ioc3uart_probe()
2081 port->ip_inring = RING(port, RX_A); in ioc3uart_probe()
2082 port->ip_outring = RING(port, TX_A); in ioc3uart_probe()
2087 (void *)port->ip_cpu_ringbuf, in ioc3uart_probe()
2088 (void *)port->ip_dma_ringbuf, in ioc3uart_probe()
2089 (void *)port->ip_inring, in ioc3uart_probe()
2090 (void *)port->ip_outring)); in ioc3uart_probe()
2093 port->ip_serial_regs = &idd->vma->port_b; in ioc3uart_probe()
2094 port->ip_uart_regs = &idd->vma->sregs.uartb; in ioc3uart_probe()
2099 (void *)port->ip_serial_regs, in ioc3uart_probe()
2100 (void *)port->ip_uart_regs)); in ioc3uart_probe()
2103 port->ip_dma_ringbuf = in ioc3uart_probe()
2105 port->ip_cpu_ringbuf = in ioc3uart_probe()
2107 port->ip_inring = RING(port, RX_B); in ioc3uart_probe()
2108 port->ip_outring = RING(port, TX_B); in ioc3uart_probe()
2113 (void *)port->ip_cpu_ringbuf, in ioc3uart_probe()
2114 (void *)port->ip_dma_ringbuf, in ioc3uart_probe()
2115 (void *)port->ip_inring, in ioc3uart_probe()
2116 (void *)port->ip_outring)); in ioc3uart_probe()
2121 phys_port, (void *)port, (void *)card_ptr)); in ioc3uart_probe()
2123 (void *)port->ip_serial_regs, in ioc3uart_probe()
2124 (void *)port->ip_uart_regs)); in ioc3uart_probe()
2127 port_init(port); in ioc3uart_probe()
2132 phys_port, (void *)port, in ioc3uart_probe()
2133 (void *)port->ip_inring, in ioc3uart_probe()
2134 (void *)port->ip_outring)); in ioc3uart_probe()