• Home
  • Raw
  • Download

Lines Matching refs:uart

69 static void bfin_serial_dma_tx_chars(struct bfin_serial_port *uart);
71 static void bfin_serial_tx_chars(struct bfin_serial_port *uart);
74 static void bfin_serial_mctrl_check(struct bfin_serial_port *uart);
83 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_stop_tx() local
85 struct circ_buf *xmit = &uart->port.info->xmit; in bfin_serial_stop_tx()
88 while (!(UART_GET_LSR(uart) & TEMT)) in bfin_serial_stop_tx()
92 disable_dma(uart->tx_dma_channel); in bfin_serial_stop_tx()
93 xmit->tail = (xmit->tail + uart->tx_count) & (UART_XMIT_SIZE - 1); in bfin_serial_stop_tx()
94 uart->port.icount.tx += uart->tx_count; in bfin_serial_stop_tx()
95 uart->tx_count = 0; in bfin_serial_stop_tx()
96 uart->tx_done = 1; in bfin_serial_stop_tx()
100 UART_PUT_LSR(uart, TFI); in bfin_serial_stop_tx()
102 UART_CLEAR_IER(uart, ETBEI); in bfin_serial_stop_tx()
111 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_start_tx() local
112 struct tty_struct *tty = uart->port.info->port.tty; in bfin_serial_start_tx()
122 if (uart->tx_done) in bfin_serial_start_tx()
123 bfin_serial_dma_tx_chars(uart); in bfin_serial_start_tx()
125 UART_SET_IER(uart, ETBEI); in bfin_serial_start_tx()
126 bfin_serial_tx_chars(uart); in bfin_serial_start_tx()
135 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_stop_rx() local
137 UART_CLEAR_IER(uart, ERBFI); in bfin_serial_stop_rx()
149 # define UART_GET_ANOMALY_THRESHOLD(uart) ((uart)->anomaly_threshold) argument
150 # define UART_SET_ANOMALY_THRESHOLD(uart, v) ((uart)->anomaly_threshold = (v)) argument
152 # define UART_GET_ANOMALY_THRESHOLD(uart) 0 argument
153 # define UART_SET_ANOMALY_THRESHOLD(uart, v) argument
157 static void bfin_serial_rx_chars(struct bfin_serial_port *uart) in bfin_serial_rx_chars() argument
163 status = UART_GET_LSR(uart); in bfin_serial_rx_chars()
164 UART_CLEAR_LSR(uart); in bfin_serial_rx_chars()
166 ch = UART_GET_CHAR(uart); in bfin_serial_rx_chars()
167 uart->port.icount.rx++; in bfin_serial_rx_chars()
171 if (kgdb_connected && kgdboc_port_line == uart->port.line) in bfin_serial_rx_chars()
177 if (!uart->port.info || !uart->port.info->tty) in bfin_serial_rx_chars()
180 tty = uart->port.info->tty; in bfin_serial_rx_chars()
211 if (usecs > UART_GET_ANOMALY_THRESHOLD(uart)) in bfin_serial_rx_chars()
231 uart->port.icount.brk++; in bfin_serial_rx_chars()
232 if (uart_handle_break(&uart->port)) in bfin_serial_rx_chars()
237 uart->port.icount.parity++; in bfin_serial_rx_chars()
239 uart->port.icount.overrun++; in bfin_serial_rx_chars()
241 uart->port.icount.frame++; in bfin_serial_rx_chars()
243 status &= uart->port.read_status_mask; in bfin_serial_rx_chars()
254 if (uart_handle_sysrq_char(&uart->port, ch)) in bfin_serial_rx_chars()
257 uart_insert_char(&uart->port, status, OE, ch, flg); in bfin_serial_rx_chars()
263 static void bfin_serial_tx_chars(struct bfin_serial_port *uart) in bfin_serial_tx_chars() argument
265 struct circ_buf *xmit = &uart->port.info->xmit; in bfin_serial_tx_chars()
271 bfin_serial_mctrl_check(uart); in bfin_serial_tx_chars()
273 if (uart_circ_empty(xmit) || uart_tx_stopped(&uart->port)) { in bfin_serial_tx_chars()
276 UART_PUT_LSR(uart, TFI); in bfin_serial_tx_chars()
278 UART_CLEAR_IER(uart, ETBEI); in bfin_serial_tx_chars()
282 if (uart->port.x_char) { in bfin_serial_tx_chars()
283 UART_PUT_CHAR(uart, uart->port.x_char); in bfin_serial_tx_chars()
284 uart->port.icount.tx++; in bfin_serial_tx_chars()
285 uart->port.x_char = 0; in bfin_serial_tx_chars()
288 while ((UART_GET_LSR(uart) & THRE) && xmit->tail != xmit->head) { in bfin_serial_tx_chars()
289 UART_PUT_CHAR(uart, xmit->buf[xmit->tail]); in bfin_serial_tx_chars()
291 uart->port.icount.tx++; in bfin_serial_tx_chars()
296 uart_write_wakeup(&uart->port); in bfin_serial_tx_chars()
301 struct bfin_serial_port *uart = dev_id; in bfin_serial_rx_int() local
303 spin_lock(&uart->port.lock); in bfin_serial_rx_int()
304 while (UART_GET_LSR(uart) & DR) in bfin_serial_rx_int()
305 bfin_serial_rx_chars(uart); in bfin_serial_rx_int()
306 spin_unlock(&uart->port.lock); in bfin_serial_rx_int()
313 struct bfin_serial_port *uart = dev_id; in bfin_serial_tx_int() local
315 spin_lock(&uart->port.lock); in bfin_serial_tx_int()
316 if (UART_GET_LSR(uart) & THRE) in bfin_serial_tx_int()
317 bfin_serial_tx_chars(uart); in bfin_serial_tx_int()
318 spin_unlock(&uart->port.lock); in bfin_serial_tx_int()
325 static void bfin_serial_dma_tx_chars(struct bfin_serial_port *uart) in bfin_serial_dma_tx_chars() argument
327 struct circ_buf *xmit = &uart->port.info->xmit; in bfin_serial_dma_tx_chars()
329 uart->tx_done = 0; in bfin_serial_dma_tx_chars()
335 bfin_serial_mctrl_check(uart); in bfin_serial_dma_tx_chars()
337 if (uart_circ_empty(xmit) || uart_tx_stopped(&uart->port)) { in bfin_serial_dma_tx_chars()
338 uart->tx_count = 0; in bfin_serial_dma_tx_chars()
339 uart->tx_done = 1; in bfin_serial_dma_tx_chars()
343 if (uart->port.x_char) { in bfin_serial_dma_tx_chars()
344 UART_PUT_CHAR(uart, uart->port.x_char); in bfin_serial_dma_tx_chars()
345 uart->port.icount.tx++; in bfin_serial_dma_tx_chars()
346 uart->port.x_char = 0; in bfin_serial_dma_tx_chars()
349 uart->tx_count = CIRC_CNT(xmit->head, xmit->tail, UART_XMIT_SIZE); in bfin_serial_dma_tx_chars()
350 if (uart->tx_count > (UART_XMIT_SIZE - xmit->tail)) in bfin_serial_dma_tx_chars()
351 uart->tx_count = UART_XMIT_SIZE - xmit->tail; in bfin_serial_dma_tx_chars()
353 (unsigned long)(xmit->buf+xmit->tail+uart->tx_count)); in bfin_serial_dma_tx_chars()
354 set_dma_config(uart->tx_dma_channel, in bfin_serial_dma_tx_chars()
360 set_dma_start_addr(uart->tx_dma_channel, (unsigned long)(xmit->buf+xmit->tail)); in bfin_serial_dma_tx_chars()
361 set_dma_x_count(uart->tx_dma_channel, uart->tx_count); in bfin_serial_dma_tx_chars()
362 set_dma_x_modify(uart->tx_dma_channel, 1); in bfin_serial_dma_tx_chars()
363 enable_dma(uart->tx_dma_channel); in bfin_serial_dma_tx_chars()
365 UART_SET_IER(uart, ETBEI); in bfin_serial_dma_tx_chars()
368 static void bfin_serial_dma_rx_chars(struct bfin_serial_port *uart) in bfin_serial_dma_rx_chars() argument
370 struct tty_struct *tty = uart->port.info->port.tty; in bfin_serial_dma_rx_chars()
373 status = UART_GET_LSR(uart); in bfin_serial_dma_rx_chars()
374 UART_CLEAR_LSR(uart); in bfin_serial_dma_rx_chars()
376 uart->port.icount.rx += in bfin_serial_dma_rx_chars()
377 CIRC_CNT(uart->rx_dma_buf.head, uart->rx_dma_buf.tail, in bfin_serial_dma_rx_chars()
381 uart->port.icount.brk++; in bfin_serial_dma_rx_chars()
382 if (uart_handle_break(&uart->port)) in bfin_serial_dma_rx_chars()
387 uart->port.icount.parity++; in bfin_serial_dma_rx_chars()
389 uart->port.icount.overrun++; in bfin_serial_dma_rx_chars()
391 uart->port.icount.frame++; in bfin_serial_dma_rx_chars()
393 status &= uart->port.read_status_mask; in bfin_serial_dma_rx_chars()
404 for (i = uart->rx_dma_buf.tail; i != uart->rx_dma_buf.head; i++) { in bfin_serial_dma_rx_chars()
407 if (!uart_handle_sysrq_char(&uart->port, uart->rx_dma_buf.buf[i])) in bfin_serial_dma_rx_chars()
408 uart_insert_char(&uart->port, status, OE, in bfin_serial_dma_rx_chars()
409 uart->rx_dma_buf.buf[i], flg); in bfin_serial_dma_rx_chars()
416 void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart) in bfin_serial_rx_dma_timeout() argument
420 spin_lock_irqsave(&uart->port.lock, flags); in bfin_serial_rx_dma_timeout()
422 uart->rx_dma_nrows = get_dma_curr_ycount(uart->rx_dma_channel); in bfin_serial_rx_dma_timeout()
423 x_pos = get_dma_curr_xcount(uart->rx_dma_channel); in bfin_serial_rx_dma_timeout()
424 uart->rx_dma_nrows = DMA_RX_YCOUNT - uart->rx_dma_nrows; in bfin_serial_rx_dma_timeout()
425 if (uart->rx_dma_nrows == DMA_RX_YCOUNT) in bfin_serial_rx_dma_timeout()
426 uart->rx_dma_nrows = 0; in bfin_serial_rx_dma_timeout()
431 pos = uart->rx_dma_nrows * DMA_RX_XCOUNT + x_pos; in bfin_serial_rx_dma_timeout()
432 if (pos != uart->rx_dma_buf.tail) { in bfin_serial_rx_dma_timeout()
433 uart->rx_dma_buf.head = pos; in bfin_serial_rx_dma_timeout()
434 bfin_serial_dma_rx_chars(uart); in bfin_serial_rx_dma_timeout()
435 uart->rx_dma_buf.tail = uart->rx_dma_buf.head; in bfin_serial_rx_dma_timeout()
438 spin_unlock_irqrestore(&uart->port.lock, flags); in bfin_serial_rx_dma_timeout()
440 mod_timer(&(uart->rx_dma_timer), jiffies + DMA_RX_FLUSH_JIFFIES); in bfin_serial_rx_dma_timeout()
445 struct bfin_serial_port *uart = dev_id; in bfin_serial_dma_tx_int() local
446 struct circ_buf *xmit = &uart->port.info->xmit; in bfin_serial_dma_tx_int()
448 spin_lock(&uart->port.lock); in bfin_serial_dma_tx_int()
449 if (!(get_dma_curr_irqstat(uart->tx_dma_channel)&DMA_RUN)) { in bfin_serial_dma_tx_int()
450 disable_dma(uart->tx_dma_channel); in bfin_serial_dma_tx_int()
451 clear_dma_irqstat(uart->tx_dma_channel); in bfin_serial_dma_tx_int()
452 UART_CLEAR_IER(uart, ETBEI); in bfin_serial_dma_tx_int()
453 xmit->tail = (xmit->tail + uart->tx_count) & (UART_XMIT_SIZE - 1); in bfin_serial_dma_tx_int()
454 uart->port.icount.tx += uart->tx_count; in bfin_serial_dma_tx_int()
457 uart_write_wakeup(&uart->port); in bfin_serial_dma_tx_int()
459 bfin_serial_dma_tx_chars(uart); in bfin_serial_dma_tx_int()
462 spin_unlock(&uart->port.lock); in bfin_serial_dma_tx_int()
468 struct bfin_serial_port *uart = dev_id; in bfin_serial_dma_rx_int() local
471 spin_lock(&uart->port.lock); in bfin_serial_dma_rx_int()
472 irqstat = get_dma_curr_irqstat(uart->rx_dma_channel); in bfin_serial_dma_rx_int()
473 clear_dma_irqstat(uart->rx_dma_channel); in bfin_serial_dma_rx_int()
474 bfin_serial_dma_rx_chars(uart); in bfin_serial_dma_rx_int()
475 spin_unlock(&uart->port.lock); in bfin_serial_dma_rx_int()
486 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_tx_empty() local
489 lsr = UART_GET_LSR(uart); in bfin_serial_tx_empty()
499 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_get_mctrl() local
500 if (uart->cts_pin < 0) in bfin_serial_get_mctrl()
503 if (UART_GET_CTS(uart)) in bfin_serial_get_mctrl()
513 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_set_mctrl() local
514 if (uart->rts_pin < 0) in bfin_serial_set_mctrl()
518 UART_CLEAR_RTS(uart); in bfin_serial_set_mctrl()
520 UART_SET_RTS(uart); in bfin_serial_set_mctrl()
527 static void bfin_serial_mctrl_check(struct bfin_serial_port *uart) in bfin_serial_mctrl_check() argument
531 struct uart_info *info = uart->port.info; in bfin_serial_mctrl_check()
534 status = bfin_serial_get_mctrl(&uart->port); in bfin_serial_mctrl_check()
535 uart_handle_cts_change(&uart->port, status & TIOCM_CTS); in bfin_serial_mctrl_check()
538 uart->cts_timer.data = (unsigned long)(uart); in bfin_serial_mctrl_check()
539 uart->cts_timer.function = (void *)bfin_serial_mctrl_check; in bfin_serial_mctrl_check()
540 uart->cts_timer.expires = jiffies + CTS_CHECK_JIFFIES; in bfin_serial_mctrl_check()
541 add_timer(&(uart->cts_timer)); in bfin_serial_mctrl_check()
553 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_break_ctl() local
554 u16 lcr = UART_GET_LCR(uart); in bfin_serial_break_ctl()
559 UART_PUT_LCR(uart, lcr); in bfin_serial_break_ctl()
565 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_startup() local
570 if (request_dma(uart->rx_dma_channel, "BFIN_UART_RX") < 0) { in bfin_serial_startup()
575 if (request_dma(uart->tx_dma_channel, "BFIN_UART_TX") < 0) { in bfin_serial_startup()
577 free_dma(uart->rx_dma_channel); in bfin_serial_startup()
581 set_dma_callback(uart->rx_dma_channel, bfin_serial_dma_rx_int, uart); in bfin_serial_startup()
582 set_dma_callback(uart->tx_dma_channel, bfin_serial_dma_tx_int, uart); in bfin_serial_startup()
584 uart->rx_dma_buf.buf = (unsigned char *)dma_alloc_coherent(NULL, PAGE_SIZE, &dma_handle, GFP_DMA); in bfin_serial_startup()
585 uart->rx_dma_buf.head = 0; in bfin_serial_startup()
586 uart->rx_dma_buf.tail = 0; in bfin_serial_startup()
587 uart->rx_dma_nrows = 0; in bfin_serial_startup()
589 set_dma_config(uart->rx_dma_channel, in bfin_serial_startup()
594 set_dma_x_count(uart->rx_dma_channel, DMA_RX_XCOUNT); in bfin_serial_startup()
595 set_dma_x_modify(uart->rx_dma_channel, 1); in bfin_serial_startup()
596 set_dma_y_count(uart->rx_dma_channel, DMA_RX_YCOUNT); in bfin_serial_startup()
597 set_dma_y_modify(uart->rx_dma_channel, 1); in bfin_serial_startup()
598 set_dma_start_addr(uart->rx_dma_channel, (unsigned long)uart->rx_dma_buf.buf); in bfin_serial_startup()
599 enable_dma(uart->rx_dma_channel); in bfin_serial_startup()
601 uart->rx_dma_timer.data = (unsigned long)(uart); in bfin_serial_startup()
602 uart->rx_dma_timer.function = (void *)bfin_serial_rx_dma_timeout; in bfin_serial_startup()
603 uart->rx_dma_timer.expires = jiffies + DMA_RX_FLUSH_JIFFIES; in bfin_serial_startup()
604 add_timer(&(uart->rx_dma_timer)); in bfin_serial_startup()
608 if (kgdboc_port_line == uart->port.line && kgdboc_break_enabled) in bfin_serial_startup()
612 if (request_irq(uart->port.irq, bfin_serial_rx_int, IRQF_DISABLED, in bfin_serial_startup()
613 "BFIN_UART_RX", uart)) { in bfin_serial_startup()
619 (uart->port.irq+1, bfin_serial_tx_int, IRQF_DISABLED, in bfin_serial_startup()
620 "BFIN_UART_TX", uart)) { in bfin_serial_startup()
622 free_irq(uart->port.irq, uart); in bfin_serial_startup()
630 switch (uart->port.irq) { in bfin_serial_startup()
647 free_irq(uart->port.irq, uart); in bfin_serial_startup()
648 free_irq(uart->port.irq + 1, uart); in bfin_serial_startup()
655 free_irq(uart->port.irq, uart); in bfin_serial_startup()
656 free_irq(uart->port.irq + 1, uart); in bfin_serial_startup()
666 UART_SET_IER(uart, ERBFI); in bfin_serial_startup()
672 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_shutdown() local
675 disable_dma(uart->tx_dma_channel); in bfin_serial_shutdown()
676 free_dma(uart->tx_dma_channel); in bfin_serial_shutdown()
677 disable_dma(uart->rx_dma_channel); in bfin_serial_shutdown()
678 free_dma(uart->rx_dma_channel); in bfin_serial_shutdown()
679 del_timer(&(uart->rx_dma_timer)); in bfin_serial_shutdown()
680 dma_free_coherent(NULL, PAGE_SIZE, uart->rx_dma_buf.buf, 0); in bfin_serial_shutdown()
683 switch (uart->port.irq) { in bfin_serial_shutdown()
696 free_irq(uart->port.irq, uart); in bfin_serial_shutdown()
697 free_irq(uart->port.irq+1, uart); in bfin_serial_shutdown()
705 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_set_termios() local
761 spin_lock_irqsave(&uart->port.lock, flags); in bfin_serial_set_termios()
763 UART_SET_ANOMALY_THRESHOLD(uart, USEC_PER_SEC / baud * 15); in bfin_serial_set_termios()
766 ier = UART_GET_IER(uart); in bfin_serial_set_termios()
767 UART_DISABLE_INTS(uart); in bfin_serial_set_termios()
770 UART_SET_DLAB(uart); in bfin_serial_set_termios()
772 UART_PUT_DLL(uart, quot & 0xFF); in bfin_serial_set_termios()
773 UART_PUT_DLH(uart, (quot >> 8) & 0xFF); in bfin_serial_set_termios()
777 UART_CLEAR_DLAB(uart); in bfin_serial_set_termios()
779 UART_PUT_LCR(uart, lcr); in bfin_serial_set_termios()
782 UART_ENABLE_INTS(uart, ier); in bfin_serial_set_termios()
784 val = UART_GET_GCTL(uart); in bfin_serial_set_termios()
786 UART_PUT_GCTL(uart, val); in bfin_serial_set_termios()
791 spin_unlock_irqrestore(&uart->port.lock, flags); in bfin_serial_set_termios()
796 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_type() local
798 return uart->port.type == PORT_BFIN ? "BFIN-UART" : NULL; in bfin_serial_type()
821 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_config_port() local
824 bfin_serial_request_port(&uart->port) == 0) in bfin_serial_config_port()
825 uart->port.type = PORT_BFIN; in bfin_serial_config_port()
867 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_poll_put_char() local
869 while (!(UART_GET_LSR(uart) & THRE)) in bfin_serial_poll_put_char()
872 UART_CLEAR_DLAB(uart); in bfin_serial_poll_put_char()
873 UART_PUT_CHAR(uart, (unsigned char)chr); in bfin_serial_poll_put_char()
878 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_poll_get_char() local
881 while (!(UART_GET_LSR(uart) & DR)) in bfin_serial_poll_get_char()
884 UART_CLEAR_DLAB(uart); in bfin_serial_poll_get_char()
885 chr = UART_GET_CHAR(uart); in bfin_serial_poll_get_char()
1001 bfin_serial_console_get_options(struct bfin_serial_port *uart, int *baud, in bfin_serial_console_get_options() argument
1006 status = UART_GET_IER(uart) & (ERBFI | ETBEI); in bfin_serial_console_get_options()
1011 lcr = UART_GET_LCR(uart); in bfin_serial_console_get_options()
1027 UART_SET_DLAB(uart); in bfin_serial_console_get_options()
1029 dll = UART_GET_DLL(uart); in bfin_serial_console_get_options()
1030 dlh = UART_GET_DLH(uart); in bfin_serial_console_get_options()
1033 UART_CLEAR_DLAB(uart); in bfin_serial_console_get_options()
1045 struct bfin_serial_port *uart; in bfin_serial_console_setup() local
1062 uart = &bfin_serial_ports[co->index]; in bfin_serial_console_setup()
1067 bfin_serial_console_get_options(uart, &baud, &parity, &bits); in bfin_serial_console_setup()
1069 return uart_set_options(&uart->port, co, baud, parity, bits, flow); in bfin_serial_console_setup()
1077 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in bfin_serial_console_putchar() local
1078 while (!(UART_GET_LSR(uart) & THRE)) in bfin_serial_console_putchar()
1080 UART_PUT_CHAR(uart, ch); in bfin_serial_console_putchar()
1090 struct bfin_serial_port *uart = &bfin_serial_ports[co->index]; in bfin_serial_console_write() local
1093 spin_lock_irqsave(&uart->port.lock, flags); in bfin_serial_console_write()
1094 uart_console_write(&uart->port, s, count, bfin_serial_console_putchar); in bfin_serial_console_write()
1095 spin_unlock_irqrestore(&uart->port.lock, flags); in bfin_serial_console_write()
1128 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; in early_serial_putc() local
1130 while ((!(UART_GET_LSR(uart) & THRE)) && --timeout) in early_serial_putc()
1132 UART_PUT_CHAR(uart, ch); in early_serial_putc()
1138 struct bfin_serial_port *uart = &bfin_serial_ports[con->index]; in early_serial_write() local
1143 early_serial_putc(&uart->port, '\r'); in early_serial_write()
1144 early_serial_putc(&uart->port, *s); in early_serial_write()
1161 struct bfin_serial_port *uart; in bfin_earlyserial_init() local
1168 uart = &bfin_serial_ports[port]; in bfin_earlyserial_init()
1174 bfin_serial_set_termios(&uart->port, &t, &t); in bfin_earlyserial_init()