summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/uart_buffering.c60
1 files changed, 10 insertions, 50 deletions
diff --git a/common/uart_buffering.c b/common/uart_buffering.c
index c750a1ef6e..b81c8cf065 100644
--- a/common/uart_buffering.c
+++ b/common/uart_buffering.c
@@ -27,9 +27,6 @@
#define TX_BUF_DIFF(i, j) (((i) - (j)) & (CONFIG_UART_TX_BUF_SIZE - 1))
#define RX_BUF_DIFF(i, j) (((i) - (j)) & (CONFIG_UART_RX_BUF_SIZE - 1))
-/* ASCII control character; for example, CTRL('C') = ^C */
-#define CTRL(c) ((c) - '@')
-
/*
* Interval between rechecking the receive DMA head pointer, after a character
* of input has been detected by the normal tick task. There will be
@@ -49,7 +46,6 @@ static int tx_snapshot_head;
static int tx_snapshot_tail;
static int tx_last_snapshot_head;
static int tx_next_snapshot_head;
-static int uart_suspended;
/**
* Put a single character into the transmit buffer.
@@ -115,9 +111,6 @@ void uart_process_output(void)
*/
int head = tx_buf_head;
- if (uart_suspended)
- return;
-
/* If DMA is still busy, nothing to do. */
if (!uart_tx_dma_ready())
return;
@@ -149,9 +142,6 @@ void uart_process_output(void)
void uart_process_output(void)
{
- if (uart_suspended)
- return;
-
/* Copy output from buffer until TX fifo full or output buffer empty */
while (uart_tx_ready() && (tx_buf_head != tx_buf_tail)) {
uart_write_char(tx_buf[tx_buf_tail]);
@@ -166,6 +156,9 @@ void uart_process_output(void)
#endif /* !CONFIG_UART_TX_DMA */
#ifdef CONFIG_UART_RX_DMA
+#ifdef CONFIG_UART_INPUT_FILTER /* TODO(crosbug.com/p/36745): */
+#error "Filtering the UART input with DMA enabled is NOT SUPPORTED!"
+#endif
void uart_process_input(void);
DECLARE_DEFERRED(uart_process_input);
@@ -175,30 +168,9 @@ void uart_process_input(void)
static int fast_rechecks;
int cur_head = rx_buf_head;
- int i;
-
/* Update receive buffer head from current DMA receive pointer */
rx_buf_head = uart_rx_dma_head();
- /* Handle software flow control characters */
- for (i = cur_head; i != rx_buf_head; i = RX_BUF_NEXT(i)) {
- int c = rx_buf[i];
-
-#ifdef CONFIG_UART_INPUT_FILTER /* TODO(crosbug.com/p/36745): */
-#error "Filtering the UART input with DMA enabled is NOT SUPPORTED!"
-#endif
-
- if (c == CTRL('S')) {
- /* Software flow control - XOFF */
- uart_suspended = 1;
- uart_tx_stop();
- } else if (c == CTRL('Q')) {
- /* Software flow control - XON */
- uart_suspended = 0;
- uart_tx_start();
- }
- }
-
if (rx_buf_head != cur_head) {
console_has_input();
fast_rechecks = CONFIG_UART_RX_DMA_RECHECKS;
@@ -234,15 +206,7 @@ void uart_process_input(void)
continue;
#endif
- if (c == CTRL('S')) {
- /* Software flow control - XOFF */
- uart_suspended = 1;
- uart_tx_stop();
- } else if (c == CTRL('Q')) {
- /* Software flow control - XON */
- uart_suspended = 0;
- uart_tx_start();
- } else if (rx_buf_next != rx_buf_tail) {
+ if (rx_buf_next != rx_buf_tail) {
/* Buffer all other input */
rx_buf[rx_buf_head] = c;
rx_buf_head = rx_buf_next;
@@ -260,8 +224,7 @@ int uart_putc(int c)
{
int rv = __tx_char(NULL, c);
- if (!uart_suspended)
- uart_tx_start();
+ uart_tx_start();
return rv ? EC_ERROR_OVERFLOW : EC_SUCCESS;
}
@@ -274,8 +237,7 @@ int uart_puts(const char *outstr)
break;
}
- if (!uart_suspended)
- uart_tx_start();
+ uart_tx_start();
/* Successful if we consumed all output */
return *outstr ? EC_ERROR_OVERFLOW : EC_SUCCESS;
@@ -285,8 +247,7 @@ int uart_vprintf(const char *format, va_list args)
{
int rv = vfnprintf(__tx_char, NULL, format, args);
- if (!uart_suspended)
- uart_tx_start();
+ uart_tx_start();
return rv;
}
@@ -304,8 +265,8 @@ int uart_printf(const char *format, ...)
void uart_flush_output(void)
{
- /* If UART not initialized or is suspended, ignore flush request. */
- if (!uart_init_done() || uart_suspended)
+ /* If UART not initialized ignore flush request. */
+ if (!uart_init_done())
return;
/* Loop until buffer is empty */
@@ -342,8 +303,7 @@ int uart_getc(void)
int c = rx_buf[rx_buf_tail];
rx_buf_tail = RX_BUF_NEXT(rx_buf_tail);
- if (c != CTRL('Q') && c != CTRL('S'))
- return c;
+ return c;
}
/* If we're still here, no input */