summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/bfin
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-06-24 17:29:11 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-06-25 17:03:21 +0200
commite18db9f0cffcb143e5fdec27539efb417cb4ebf3 (patch)
tree804edba552541bea8d5ea5c38680903373bf6c27 /c/src/lib/libcpu/bfin
parentbsps/arm: Rename function (diff)
downloadrtems-e18db9f0cffcb143e5fdec27539efb417cb4ebf3.tar.bz2
termios: Update due to API changes
Termios notifies now the driver about an inactive transmit with the length argument set to zero.
Diffstat (limited to 'c/src/lib/libcpu/bfin')
-rw-r--r--c/src/lib/libcpu/bfin/serial/uart.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/c/src/lib/libcpu/bfin/serial/uart.c b/c/src/lib/libcpu/bfin/serial/uart.c
index 36ea3497bd..a264d9e8e4 100644
--- a/c/src/lib/libcpu/bfin/serial/uart.c
+++ b/c/src/lib/libcpu/bfin/serial/uart.c
@@ -323,12 +323,14 @@ static int setAttributes(int minor, const struct termios *termios) {
static ssize_t uart_interruptWrite(int minor, const char *buf, size_t len) {
uint32_t base = 0;
bfin_uart_channel_t* channel = NULL;
- rtems_interrupt_level isrLevel;
/**
* Sanity Check
*/
- if (NULL == buf || NULL == channel || NULL == uartsConfig || minor < 0) {
+ if (
+ NULL == buf || NULL == channel || NULL == uartsConfig
+ || minor < 0 || 0 == len
+ ) {
return 0;
}
@@ -338,8 +340,6 @@ static ssize_t uart_interruptWrite(int minor, const char *buf, size_t len) {
return 0;
}
- rtems_interrupt_disable(isrLevel);
-
base = channel->uart_baseAddress;
channel->flags |= BFIN_UART_XMIT_BUSY;
@@ -347,8 +347,6 @@ static ssize_t uart_interruptWrite(int minor, const char *buf, size_t len) {
*(uint16_t volatile *) (base + UART_THR_OFFSET) = *buf;
*(uint16_t volatile *) (base + UART_IER_OFFSET) = UART_IER_ETBEI;
- rtems_interrupt_enable(isrLevel);
-
return 0;
}
@@ -412,12 +410,11 @@ static ssize_t uart_DmaWrite(int minor, const char *buf, size_t len) {
uint32_t base = 0;
bfin_uart_channel_t* channel = NULL;
uint32_t tx_dma_base = 0;
- rtems_interrupt_level isrLevel;
/**
* Sanity Check
*/
- if ( NULL == buf || 0 > minor || NULL == uartsConfig ) {
+ if ( NULL == buf || 0 > minor || NULL == uartsConfig || 0 == len ) {
return 0;
}
@@ -430,8 +427,6 @@ static ssize_t uart_DmaWrite(int minor, const char *buf, size_t len) {
return 0;
}
- rtems_interrupt_disable(isrLevel);
-
base = channel->uart_baseAddress;
tx_dma_base = channel->uart_txDmaBaseAddress;
@@ -445,8 +440,6 @@ static ssize_t uart_DmaWrite(int minor, const char *buf, size_t len) {
*(uint16_t volatile *) (tx_dma_base + DMA_CONFIG_OFFSET) |= DMA_CONFIG_DMAEN;
*(uint16_t volatile *) (base + UART_IER_OFFSET) = UART_IER_ETBEI;
- rtems_interrupt_enable(isrLevel);
-
return 0;
}