Lines Matching refs:up

224 static unsigned int sio_in(struct uart_sio_port *up, int offset)  in sio_in()  argument
226 return __sio_in(up->port.iobase + offset); in sio_in()
229 static void sio_out(struct uart_sio_port *up, int offset, int value) in sio_out() argument
231 __sio_out(value, up->port.iobase + offset); in sio_out()
234 static unsigned int serial_in(struct uart_sio_port *up, int offset) in serial_in() argument
242 static void serial_out(struct uart_sio_port *up, int offset, int value) in serial_out() argument
252 struct uart_sio_port *up = in m32r_sio_stop_tx() local
255 if (up->ier & UART_IER_THRI) { in m32r_sio_stop_tx()
256 up->ier &= ~UART_IER_THRI; in m32r_sio_stop_tx()
257 serial_out(up, UART_IER, up->ier); in m32r_sio_stop_tx()
264 struct uart_sio_port *up = in m32r_sio_start_tx() local
266 struct circ_buf *xmit = &up->port.state->xmit; in m32r_sio_start_tx()
268 if (!(up->ier & UART_IER_THRI)) { in m32r_sio_start_tx()
269 up->ier |= UART_IER_THRI; in m32r_sio_start_tx()
270 serial_out(up, UART_IER, up->ier); in m32r_sio_start_tx()
272 serial_out(up, UART_TX, xmit->buf[xmit->tail]); in m32r_sio_start_tx()
274 up->port.icount.tx++; in m32r_sio_start_tx()
277 while((serial_in(up, UART_LSR) & UART_EMPTY) != UART_EMPTY); in m32r_sio_start_tx()
279 struct uart_sio_port *up = in m32r_sio_start_tx()
282 if (!(up->ier & UART_IER_THRI)) { in m32r_sio_start_tx()
283 up->ier |= UART_IER_THRI; in m32r_sio_start_tx()
284 serial_out(up, UART_IER, up->ier); in m32r_sio_start_tx()
291 struct uart_sio_port *up = in m32r_sio_stop_rx() local
294 up->ier &= ~UART_IER_RLSI; in m32r_sio_stop_rx()
295 up->port.read_status_mask &= ~UART_LSR_DR; in m32r_sio_stop_rx()
296 serial_out(up, UART_IER, up->ier); in m32r_sio_stop_rx()
301 struct uart_sio_port *up = in m32r_sio_enable_ms() local
304 up->ier |= UART_IER_MSI; in m32r_sio_enable_ms()
305 serial_out(up, UART_IER, up->ier); in m32r_sio_enable_ms()
308 static void receive_chars(struct uart_sio_port *up, int *status) in receive_chars() argument
310 struct tty_port *port = &up->port.state->port; in receive_chars()
316 ch = sio_in(up, SIORXB); in receive_chars()
318 up->port.icount.rx++; in receive_chars()
327 up->port.icount.brk++; in receive_chars()
334 if (uart_handle_break(&up->port)) in receive_chars()
337 up->port.icount.parity++; in receive_chars()
339 up->port.icount.frame++; in receive_chars()
341 up->port.icount.overrun++; in receive_chars()
346 *status &= up->port.read_status_mask; in receive_chars()
348 if (up->port.line == up->port.cons->index) { in receive_chars()
350 *status |= up->lsr_break_flag; in receive_chars()
351 up->lsr_break_flag = 0; in receive_chars()
362 if (uart_handle_sysrq_char(&up->port, ch)) in receive_chars()
364 if ((*status & up->port.ignore_status_mask) == 0) in receive_chars()
376 *status = serial_in(up, UART_LSR); in receive_chars()
379 spin_unlock(&up->port.lock); in receive_chars()
381 spin_lock(&up->port.lock); in receive_chars()
384 static void transmit_chars(struct uart_sio_port *up) in transmit_chars() argument
386 struct circ_buf *xmit = &up->port.state->xmit; in transmit_chars()
389 if (up->port.x_char) { in transmit_chars()
391 serial_out(up, UART_TX, up->port.x_char); in transmit_chars()
393 up->port.icount.tx++; in transmit_chars()
394 up->port.x_char = 0; in transmit_chars()
397 if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) { in transmit_chars()
398 m32r_sio_stop_tx(&up->port); in transmit_chars()
402 count = up->port.fifosize; in transmit_chars()
404 serial_out(up, UART_TX, xmit->buf[xmit->tail]); in transmit_chars()
406 up->port.icount.tx++; in transmit_chars()
409 while (!(serial_in(up, UART_LSR) & UART_LSR_THRE)); in transmit_chars()
414 uart_write_wakeup(&up->port); in transmit_chars()
419 m32r_sio_stop_tx(&up->port); in transmit_chars()
425 static inline void m32r_sio_handle_port(struct uart_sio_port *up, in m32r_sio_handle_port() argument
431 receive_chars(up, &status); in m32r_sio_handle_port()
433 transmit_chars(up); in m32r_sio_handle_port()
470 struct uart_sio_port *up; in m32r_sio_interrupt() local
473 up = list_entry(l, struct uart_sio_port, list); in m32r_sio_interrupt()
475 sts = sio_in(up, SIOSTS); in m32r_sio_interrupt()
477 spin_lock(&up->port.lock); in m32r_sio_interrupt()
478 m32r_sio_handle_port(up, sts); in m32r_sio_interrupt()
479 spin_unlock(&up->port.lock); in m32r_sio_interrupt()
508 static void serial_do_unlink(struct irq_info *i, struct uart_sio_port *up) in serial_do_unlink() argument
513 if (i->head == &up->list) in serial_do_unlink()
515 list_del(&up->list); in serial_do_unlink()
517 BUG_ON(i->head != &up->list); in serial_do_unlink()
524 static int serial_link_irq_chain(struct uart_sio_port *up) in serial_link_irq_chain() argument
526 struct irq_info *i = irq_lists + up->port.irq; in serial_link_irq_chain()
532 list_add(&up->list, i->head); in serial_link_irq_chain()
537 INIT_LIST_HEAD(&up->list); in serial_link_irq_chain()
538 i->head = &up->list; in serial_link_irq_chain()
541 ret = request_irq(up->port.irq, m32r_sio_interrupt, in serial_link_irq_chain()
543 ret |= request_irq(up->port.irq + 1, m32r_sio_interrupt, in serial_link_irq_chain()
546 serial_do_unlink(i, up); in serial_link_irq_chain()
552 static void serial_unlink_irq_chain(struct uart_sio_port *up) in serial_unlink_irq_chain() argument
554 struct irq_info *i = irq_lists + up->port.irq; in serial_unlink_irq_chain()
559 free_irq(up->port.irq, i); in serial_unlink_irq_chain()
560 free_irq(up->port.irq + 1, i); in serial_unlink_irq_chain()
563 serial_do_unlink(i, up); in serial_unlink_irq_chain()
571 struct uart_sio_port *up = (struct uart_sio_port *)data; in m32r_sio_timeout() local
575 sts = sio_in(up, SIOSTS); in m32r_sio_timeout()
577 spin_lock(&up->port.lock); in m32r_sio_timeout()
578 m32r_sio_handle_port(up, sts); in m32r_sio_timeout()
579 spin_unlock(&up->port.lock); in m32r_sio_timeout()
582 timeout = up->port.timeout; in m32r_sio_timeout()
584 mod_timer(&up->timer, jiffies + timeout); in m32r_sio_timeout()
589 struct uart_sio_port *up = in m32r_sio_tx_empty() local
594 spin_lock_irqsave(&up->port.lock, flags); in m32r_sio_tx_empty()
595 ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; in m32r_sio_tx_empty()
596 spin_unlock_irqrestore(&up->port.lock, flags); in m32r_sio_tx_empty()
618 struct uart_sio_port *up = in m32r_sio_startup() local
629 if (!up->port.irq) { in m32r_sio_startup()
630 unsigned int timeout = up->port.timeout; in m32r_sio_startup()
634 up->timer.data = (unsigned long)up; in m32r_sio_startup()
635 mod_timer(&up->timer, jiffies + timeout); in m32r_sio_startup()
637 retval = serial_link_irq_chain(up); in m32r_sio_startup()
649 up->ier = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI; in m32r_sio_startup()
650 sio_out(up, SIOTRCR, up->ier); in m32r_sio_startup()
662 struct uart_sio_port *up = in m32r_sio_shutdown() local
668 up->ier = 0; in m32r_sio_shutdown()
669 sio_out(up, SIOTRCR, 0); in m32r_sio_shutdown()
677 if (!up->port.irq) in m32r_sio_shutdown()
678 del_timer_sync(&up->timer); in m32r_sio_shutdown()
680 serial_unlink_irq_chain(up); in m32r_sio_shutdown()
692 struct uart_sio_port *up = in m32r_sio_set_termios() local
739 spin_lock_irqsave(&up->port.lock, flags); in m32r_sio_set_termios()
748 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; in m32r_sio_set_termios()
750 up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE; in m32r_sio_set_termios()
752 up->port.read_status_mask |= UART_LSR_BI; in m32r_sio_set_termios()
757 up->port.ignore_status_mask = 0; in m32r_sio_set_termios()
759 up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE; in m32r_sio_set_termios()
761 up->port.ignore_status_mask |= UART_LSR_BI; in m32r_sio_set_termios()
767 up->port.ignore_status_mask |= UART_LSR_OE; in m32r_sio_set_termios()
774 up->port.ignore_status_mask |= UART_LSR_DR; in m32r_sio_set_termios()
779 up->ier &= ~UART_IER_MSI; in m32r_sio_set_termios()
780 if (UART_ENABLE_MS(&up->port, termios->c_cflag)) in m32r_sio_set_termios()
781 up->ier |= UART_IER_MSI; in m32r_sio_set_termios()
783 serial_out(up, UART_IER, up->ier); in m32r_sio_set_termios()
785 up->lcr = cval; /* Save LCR */ in m32r_sio_set_termios()
786 spin_unlock_irqrestore(&up->port.lock, flags); in m32r_sio_set_termios()
792 struct uart_sio_port *up = in m32r_sio_pm() local
795 if (up->pm) in m32r_sio_pm()
796 up->pm(port, state, oldstate); in m32r_sio_pm()
805 m32r_sio_request_std_resource(struct uart_sio_port *up, struct resource **res) in m32r_sio_request_std_resource() argument
807 unsigned int size = 8 << up->port.regshift; in m32r_sio_request_std_resource()
813 switch (up->port.iotype) { in m32r_sio_request_std_resource()
815 if (up->port.mapbase) { in m32r_sio_request_std_resource()
817 *res = request_mem_region(up->port.mapbase, size, "serial"); in m32r_sio_request_std_resource()
819 start = up->port.mapbase; in m32r_sio_request_std_resource()
828 *res = request_region(up->port.iobase, size, "serial"); in m32r_sio_request_std_resource()
838 struct uart_sio_port *up = in m32r_sio_release_port() local
842 size <<= up->port.regshift; in m32r_sio_release_port()
844 switch (up->port.iotype) { in m32r_sio_release_port()
846 if (up->port.mapbase) { in m32r_sio_release_port()
850 iounmap(up->port.membase); in m32r_sio_release_port()
851 up->port.membase = NULL; in m32r_sio_release_port()
853 start = up->port.mapbase; in m32r_sio_release_port()
857 release_mem_region(start, 8 << up->port.regshift); in m32r_sio_release_port()
862 start = up->port.iobase; in m32r_sio_release_port()
866 release_region(start + offset, 8 << up->port.regshift); in m32r_sio_release_port()
876 struct uart_sio_port *up = in m32r_sio_request_port() local
881 ret = m32r_sio_request_std_resource(up, &res); in m32r_sio_request_port()
886 if (ret == 0 && up->port.flags & UPF_IOREMAP) { in m32r_sio_request_port()
889 up->port.membase = ioremap(up->port.mapbase, size); in m32r_sio_request_port()
890 if (!up->port.membase) in m32r_sio_request_port()
904 struct uart_sio_port *up = in m32r_sio_config_port() local
908 spin_lock_irqsave(&up->port.lock, flags); in m32r_sio_config_port()
910 up->port.fifosize = 1; in m32r_sio_config_port()
912 spin_unlock_irqrestore(&up->port.lock, flags); in m32r_sio_config_port()
946 struct uart_sio_port *up; in m32r_sio_init_ports() local
954 for (i = 0, up = m32r_sio_ports; i < ARRAY_SIZE(old_serial_port); in m32r_sio_init_ports()
955 i++, up++) { in m32r_sio_init_ports()
956 up->port.iobase = old_serial_port[i].port; in m32r_sio_init_ports()
957 up->port.irq = irq_canonicalize(old_serial_port[i].irq); in m32r_sio_init_ports()
958 up->port.uartclk = old_serial_port[i].baud_base * 16; in m32r_sio_init_ports()
959 up->port.flags = old_serial_port[i].flags; in m32r_sio_init_ports()
960 up->port.membase = old_serial_port[i].iomem_base; in m32r_sio_init_ports()
961 up->port.iotype = old_serial_port[i].io_type; in m32r_sio_init_ports()
962 up->port.regshift = old_serial_port[i].iomem_reg_shift; in m32r_sio_init_ports()
963 up->port.ops = &m32r_sio_pops; in m32r_sio_init_ports()
974 struct uart_sio_port *up = &m32r_sio_ports[i]; in m32r_sio_register_ports() local
976 up->port.line = i; in m32r_sio_register_ports()
977 up->port.ops = &m32r_sio_pops; in m32r_sio_register_ports()
978 init_timer(&up->timer); in m32r_sio_register_ports()
979 up->timer.function = m32r_sio_timeout; in m32r_sio_register_ports()
981 up->mcr_mask = ~0; in m32r_sio_register_ports()
982 up->mcr_force = 0; in m32r_sio_register_ports()
984 uart_add_one_port(drv, &up->port); in m32r_sio_register_ports()
993 static inline void wait_for_xmitr(struct uart_sio_port *up) in wait_for_xmitr() argument
999 status = sio_in(up, SIOSTS); in wait_for_xmitr()
1007 if (up->port.flags & UPF_CONS_FLOW) { in wait_for_xmitr()
1016 struct uart_sio_port *up = in m32r_sio_console_putchar() local
1019 wait_for_xmitr(up); in m32r_sio_console_putchar()
1020 sio_out(up, SIOTXB, ch); in m32r_sio_console_putchar()
1032 struct uart_sio_port *up = &m32r_sio_ports[co->index]; in m32r_sio_console_write() local
1038 ier = sio_in(up, SIOTRCR); in m32r_sio_console_write()
1039 sio_out(up, SIOTRCR, 0); in m32r_sio_console_write()
1041 uart_console_write(&up->port, s, count, m32r_sio_console_putchar); in m32r_sio_console_write()
1047 wait_for_xmitr(up); in m32r_sio_console_write()
1048 sio_out(up, SIOTRCR, ier); in m32r_sio_console_write()