![]() | |||||||||||
Messages in this thread |
Hi all! I just inlined your second patch for commenting. On Thursday 03 April 2008, Michael Trimarchi wrote: > Hi, ... > http://it.docs.yahoo.com/mail/overview/index.html > diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c > index 9f58eb3..511a0cc 100644 > --- a/drivers/serial/atmel_serial.c > +++ b/drivers/serial/atmel_serial.c > @@ -123,6 +123,7 @@ struct atmel_uart_char { > }; > > #define ATMEL_SERIAL_RINGSIZE 1024 > +#define ATMEL_SERIAL_TXSIZE 32 > > /* > * We wrap our port structure around the generic uart_port. > @@ -426,6 +427,7 @@ static void atmel_rx_chars(struct uart_port *port) > static void atmel_tx_chars(struct uart_port *port) > { > struct circ_buf *xmit = &port->info->xmit; > + int count = 0; > if (port->x_char && UART_GET_CSR(port) & ATMEL_US_TXRDY) { > UART_PUT_CHAR(port, port->x_char); > @@ -435,10 +437,12 @@ static void atmel_tx_chars(struct uart_port *port) > if (uart_circ_empty(xmit) || uart_tx_stopped(port)) > return; > > - while (UART_GET_CSR(port) & ATMEL_US_TXRDY) { > + while (UART_GET_CSR(port) & ATMEL_US_TXRDY && > + count < ATMEL_SERIAL_TXSIZE) { > UART_PUT_CHAR(port, xmit->buf[xmit->tail]); > xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); > port->icount.tx++; > + count++; > if (uart_circ_empty(xmit)) > break; > } For me this loop will never run more than 2-3 times. The CPU is much faster than the serial transmitter, so after 2 loops UART_GET_CSR(port) & ATMEL_US_TXRDY will be false and the loop will exit. If your patch does something, I can't understand how! Best regards Marc | ||||||||||
| Last update: 2008-04-08 10:35 [from the cache] ©2003-2008 | |||||||||||