static int uart_write_room(struct tty_struct *tty) { struct uart_state *state = tty->driver_data; unsigned long flags; int ret; spin_lock_irqsave(&state->uart_port->lock, flags); ret = uart_circ_chars_free(&state->xmit); spin_unlock_irqrestore(&state->uart_port->lock, flags); return ret; }
static void serial_m3110_con_putchar(struct uart_port *port, int ch) { struct uart_max3110 *max = container_of(port, struct uart_max3110, port); struct circ_buf *xmit = &max->con_xmit; if (uart_circ_chars_free(xmit)) { xmit->buf[xmit->head] = (char)ch; xmit->head = (xmit->head + 1) & (PAGE_SIZE - 1); } }
static void serial_m3110_con_putchar(struct uart_port *port, int ch) { struct uart_max3110 *max = container_of(port, struct uart_max3110, port); struct circ_buf *xmit = &max->con_xmit; if (uart_circ_chars_free(xmit)) { xmit->buf[xmit->head] = (char)ch; xmit->head = (xmit->head + 1) & (PAGE_SIZE - 1); } if (!test_and_set_bit(CON_TX_NEEDED, &max->uart_flags)) wake_up_process(max->main_thread); }
static inline int __uart_put_char(struct uart_port *port, struct circ_buf *circ, unsigned char c) { unsigned long flags; int ret = 0; if (!circ->buf) return 0; spin_lock_irqsave(&port->lock, flags); if (uart_circ_chars_free(circ) != 0) { circ->buf[circ->head] = c; circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1); ret = 1; } spin_unlock_irqrestore(&port->lock, flags); return ret; }