summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp
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/libbsp
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/libbsp')
-rw-r--r--c/src/lib/libbsp/arm/csb336/console/uart.c10
-rw-r--r--c/src/lib/libbsp/arm/shared/comm/uart.c4
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_console/console.c7
-rw-r--r--c/src/lib/libbsp/m68k/av5282/console/console.c17
-rw-r--r--c/src/lib/libbsp/m68k/gen68340/console/console.c12
-rw-r--r--c/src/lib/libbsp/m68k/gen68360/console/console.c9
-rw-r--r--c/src/lib/libbsp/m68k/genmcf548x/console/console.c17
-rw-r--r--c/src/lib/libbsp/m68k/mcf52235/console/console.c17
-rw-r--r--c/src/lib/libbsp/m68k/mcf5225x/console/console.c17
-rw-r--r--c/src/lib/libbsp/m68k/mcf5235/console/console.c17
-rw-r--r--c/src/lib/libbsp/m68k/mcf5329/console/console.c17
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/console/console.c62
-rw-r--r--c/src/lib/libbsp/m68k/uC5282/console/console.c17
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/console/console.c40
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c44
-rw-r--r--c/src/lib/libbsp/powerpc/shared/console/uart.c3
-rw-r--r--c/src/lib/libbsp/powerpc/tqm8xx/console/console.c37
-rw-r--r--c/src/lib/libbsp/sparc/erc32/console/erc32_console.c34
-rw-r--r--c/src/lib/libbsp/sparc/leon3/console/console.c29
19 files changed, 198 insertions, 212 deletions
diff --git a/c/src/lib/libbsp/arm/csb336/console/uart.c b/c/src/lib/libbsp/arm/csb336/console/uart.c
index 4dc409b40c..4c64832b23 100644
--- a/c/src/lib/libbsp/arm/csb336/console/uart.c
+++ b/c/src/lib/libbsp/arm/csb336/console/uart.c
@@ -294,11 +294,13 @@ static ssize_t imx_uart_poll_write(int minor, const char *buf, size_t len)
#if defined(USE_INTERRUPTS)
static ssize_t imx_uart_intr_write(int minor, const char *buf, size_t len)
{
- imx_uart_data[minor].buf = buf;
- imx_uart_data[minor].len = len;
- imx_uart_data[minor].idx = 0;
+ if (len > 0) {
+ imx_uart_data[minor].buf = buf;
+ imx_uart_data[minor].len = len;
+ imx_uart_data[minor].idx = 0;
- imx_uart_data[minor].regs->cr1 |= MC9328MXL_UART_CR1_TXMPTYEN;
+ imx_uart_data[minor].regs->cr1 |= MC9328MXL_UART_CR1_TXMPTYEN;
+ }
return 1;
}
diff --git a/c/src/lib/libbsp/arm/shared/comm/uart.c b/c/src/lib/libbsp/arm/shared/comm/uart.c
index 6015e0d11b..390a07d028 100644
--- a/c/src/lib/libbsp/arm/shared/comm/uart.c
+++ b/c/src/lib/libbsp/arm/shared/comm/uart.c
@@ -371,8 +371,6 @@ BSP_uart_termios_set(int uart, void *ttyp)
int
BSP_uart_termios_write_com1(int minor, const char *buf, int len)
{
- assert(buf != NULL);
-
if(len <= 0)
{
return 0;
@@ -410,8 +408,6 @@ BSP_uart_termios_write_com1(int minor, const char *buf, int len)
int
BSP_uart_termios_write_com2(int minor, const char *buf, int len)
{
- assert(buf != NULL);
-
if(len <= 0)
{
return 0;
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c b/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c
index 1abde5f8c1..a7c3a29493 100644
--- a/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c
+++ b/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c
@@ -114,11 +114,10 @@ static int mmconsole_set_attributes(int minor, const struct termios *t)
static ssize_t mmconsole_write(int minor, const char *buf, size_t n)
{
- rtems_interrupt_level level;
+ if (n > 0) {
+ MM_WRITE(MM_UART_RXTX, *buf);
+ }
- rtems_interrupt_disable(level);
- MM_WRITE(MM_UART_RXTX, *buf);
- rtems_interrupt_enable(level);
return 0;
}
diff --git a/c/src/lib/libbsp/m68k/av5282/console/console.c b/c/src/lib/libbsp/m68k/av5282/console/console.c
index 25f012237e..85ec37fcc0 100644
--- a/c/src/lib/libbsp/m68k/av5282/console/console.c
+++ b/c/src/lib/libbsp/m68k/av5282/console/console.c
@@ -382,18 +382,15 @@ static ssize_t IntUartInterruptWrite(
size_t len
)
{
- rtems_interrupt_level level;
-
- rtems_interrupt_disable(level);
+ if (len > 0) {
+ /* write out character */
+ MCF5282_UART_UTB(minor) = *buf;
- /* write out character */
- MCF5282_UART_UTB(minor) = *buf;
-
- /* enable tx interrupt */
- IntUartInfo[minor].uimr |= MCF5282_UART_UIMR_TXRDY;
- MCF5282_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ /* enable tx interrupt */
+ IntUartInfo[minor].uimr |= MCF5282_UART_UIMR_TXRDY;
+ MCF5282_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ }
- rtems_interrupt_enable(level);
return 0;
}
diff --git a/c/src/lib/libbsp/m68k/gen68340/console/console.c b/c/src/lib/libbsp/m68k/gen68340/console/console.c
index 17d4ef4707..d1fa02edf0 100644
--- a/c/src/lib/libbsp/m68k/gen68340/console/console.c
+++ b/c/src/lib/libbsp/m68k/gen68340/console/console.c
@@ -172,12 +172,16 @@ static ssize_t
InterruptWrite (int minor, const char *buf, size_t len)
{
if (minor==UART_CHANNEL_A) {
- if (len>0) DUTBA=*buf;
- Enable_Interrupts_Tx_A;
+ if (len>0) {
+ DUTBA=*buf;
+ Enable_Interrupts_Tx_A;
+ }
}
else if (minor==UART_CHANNEL_B) {
- if (len>0) DUTBB=*buf;
- Enable_Interrupts_Tx_B;
+ if (len>0) {
+ DUTBB=*buf;
+ Enable_Interrupts_Tx_B;
+ }
}
return 0;
}
diff --git a/c/src/lib/libbsp/m68k/gen68360/console/console.c b/c/src/lib/libbsp/m68k/gen68360/console/console.c
index 0c43317ef7..8233449003 100644
--- a/c/src/lib/libbsp/m68k/gen68360/console/console.c
+++ b/c/src/lib/libbsp/m68k/gen68360/console/console.c
@@ -231,9 +231,12 @@ smc1PollRead (int minor)
static ssize_t
smc1InterruptWrite (int minor, const char *buf, size_t len)
{
- smcTxBd->buffer = (char *)buf;
- smcTxBd->length = len;
- smcTxBd->status = M360_BD_READY | M360_BD_WRAP | M360_BD_INTERRUPT;
+ if (len > 0) {
+ smcTxBd->buffer = (char *)buf;
+ smcTxBd->length = len;
+ smcTxBd->status = M360_BD_READY | M360_BD_WRAP | M360_BD_INTERRUPT;
+ }
+
return 0;
}
diff --git a/c/src/lib/libbsp/m68k/genmcf548x/console/console.c b/c/src/lib/libbsp/m68k/genmcf548x/console/console.c
index af18e23d7e..5e85e208b9 100644
--- a/c/src/lib/libbsp/m68k/genmcf548x/console/console.c
+++ b/c/src/lib/libbsp/m68k/genmcf548x/console/console.c
@@ -528,18 +528,15 @@ IntUartInitialize(void)
static ssize_t
IntUartInterruptWrite (int minor, const char *buf, size_t len)
{
- int level;
-
- rtems_interrupt_disable(level);
+ if (len > 0) {
+ /* write out character */
+ *(volatile uint8_t *)(&MCF548X_PSC_TB(minor)) = *buf;
- /* write out character */
- *(volatile uint8_t *)(&MCF548X_PSC_TB(minor)) = *buf;
-
- /* enable tx interrupt */
- IntUartInfo[minor].imr |= MCF548X_PSC_IMR_TXRDY;
- MCF548X_PSC_IMR(minor) = IntUartInfo[minor].imr;
+ /* enable tx interrupt */
+ IntUartInfo[minor].imr |= MCF548X_PSC_IMR_TXRDY;
+ MCF548X_PSC_IMR(minor) = IntUartInfo[minor].imr;
+ }
- rtems_interrupt_enable(level);
return 0;
}
diff --git a/c/src/lib/libbsp/m68k/mcf52235/console/console.c b/c/src/lib/libbsp/m68k/mcf52235/console/console.c
index b0ac4f9949..0b508c5f75 100644
--- a/c/src/lib/libbsp/m68k/mcf52235/console/console.c
+++ b/c/src/lib/libbsp/m68k/mcf52235/console/console.c
@@ -341,18 +341,15 @@ static void IntUartInitialize(void)
***************************************************************************/
static ssize_t IntUartInterruptWrite(int minor, const char *buf, size_t len)
{
- int level;
-
- rtems_interrupt_disable(level);
+ if (len > 0) {
+ /* write out character */
+ MCF_UART_UTB(minor) = *buf;
- /* write out character */
- MCF_UART_UTB(minor) = *buf;
-
- /* enable tx interrupt */
- IntUartInfo[minor].uimr |= MCF_UART_UIMR_TXRDY;
- MCF_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ /* enable tx interrupt */
+ IntUartInfo[minor].uimr |= MCF_UART_UIMR_TXRDY;
+ MCF_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ }
- rtems_interrupt_enable(level);
return (0);
}
diff --git a/c/src/lib/libbsp/m68k/mcf5225x/console/console.c b/c/src/lib/libbsp/m68k/mcf5225x/console/console.c
index 1f81e40ce4..48fca9f2c4 100644
--- a/c/src/lib/libbsp/m68k/mcf5225x/console/console.c
+++ b/c/src/lib/libbsp/m68k/mcf5225x/console/console.c
@@ -366,18 +366,15 @@ static void IntUartInitialize(void)
***************************************************************************/
static ssize_t IntUartInterruptWrite(int minor, const char *buf, size_t len)
{
- rtems_interrupt_level level=UART0_IRQ_LEVEL;
-
- rtems_interrupt_disable(level);
+ if (len > 0) {
+ /* write out character */
+ MCF_UART_UTB(minor) = *buf;
- /* write out character */
- MCF_UART_UTB(minor) = *buf;
-
- /* enable tx interrupt */
- IntUartInfo[minor].uimr |= MCF_UART_UIMR_TXRDY;
- MCF_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ /* enable tx interrupt */
+ IntUartInfo[minor].uimr |= MCF_UART_UIMR_TXRDY;
+ MCF_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ }
- rtems_interrupt_enable(level);
return (0);
}
diff --git a/c/src/lib/libbsp/m68k/mcf5235/console/console.c b/c/src/lib/libbsp/m68k/mcf5235/console/console.c
index 5c00adf36a..d0e556c473 100644
--- a/c/src/lib/libbsp/m68k/mcf5235/console/console.c
+++ b/c/src/lib/libbsp/m68k/mcf5235/console/console.c
@@ -394,18 +394,15 @@ IntUartInitialize(void)
static ssize_t
IntUartInterruptWrite (int minor, const char *buf, size_t len)
{
- int level;
-
- rtems_interrupt_disable(level);
+ if (len > 0) {
+ /* write out character */
+ MCF5235_UART_UTB(minor) = *buf;
- /* write out character */
- MCF5235_UART_UTB(minor) = *buf;
-
- /* enable tx interrupt */
- IntUartInfo[minor].uimr |= MCF5235_UART_UIMR_TXRDY;
- MCF5235_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ /* enable tx interrupt */
+ IntUartInfo[minor].uimr |= MCF5235_UART_UIMR_TXRDY;
+ MCF5235_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ }
- rtems_interrupt_enable(level);
return( 0 );
}
diff --git a/c/src/lib/libbsp/m68k/mcf5329/console/console.c b/c/src/lib/libbsp/m68k/mcf5329/console/console.c
index f0c798029b..8f72270fa3 100644
--- a/c/src/lib/libbsp/m68k/mcf5329/console/console.c
+++ b/c/src/lib/libbsp/m68k/mcf5329/console/console.c
@@ -356,18 +356,15 @@ static void IntUartInitialize(void)
***************************************************************************/
static ssize_t IntUartInterruptWrite(int minor, const char *buf, size_t len)
{
- int level;
-
- rtems_interrupt_disable(level);
+ if (len > 0) {
+ /* write out character */
+ MCF_UART_UTB(minor) = *buf;
- /* write out character */
- MCF_UART_UTB(minor) = *buf;
-
- /* enable tx interrupt */
- IntUartInfo[minor].uimr |= MCF_UART_UIMR_TXRDY;
- MCF_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ /* enable tx interrupt */
+ IntUartInfo[minor].uimr |= MCF_UART_UIMR_TXRDY;
+ MCF_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ }
- rtems_interrupt_enable(level);
return (0);
}
diff --git a/c/src/lib/libbsp/m68k/mvme167/console/console.c b/c/src/lib/libbsp/m68k/mvme167/console/console.c
index a03eda8888..ca16631cec 100644
--- a/c/src/lib/libbsp/m68k/mvme167/console/console.c
+++ b/c/src/lib/libbsp/m68k/mvme167/console/console.c
@@ -1141,37 +1141,39 @@ ssize_t cd2401_write(
size_t len
)
{
- cd2401->car = minor; /* Select channel */
-
- if ( (cd2401->dmabsts & 0x08) == 0 ) {
- /* Next buffer is A. Wait for it to be ours. */
- while ( cd2401->atbsts & 0x01 );
-
- CD2401_Channel_Info[minor].own_buf_A = FALSE;
- CD2401_Channel_Info[minor].len = len;
- CD2401_Channel_Info[minor].buf = buf;
- cd2401->atbadru = (uint16_t)( ( (uint32_t) buf ) >> 16 );
- cd2401->atbadrl = (uint16_t)( (uint32_t) buf );
- cd2401->atbcnt = len;
- CD2401_RECORD_WRITE_INFO(( len, buf, 'A' ));
- cd2401->atbsts = 0x03; /* CD2401 owns buffer, int when empty */
- }
- else {
- /* Next buffer is B. Wait for it to be ours. */
- while ( cd2401->btbsts & 0x01 );
-
- CD2401_Channel_Info[minor].own_buf_B = FALSE;
- CD2401_Channel_Info[minor].len = len;
- CD2401_Channel_Info[minor].buf = buf;
- cd2401->btbadru = (uint16_t)( ( (uint32_t) buf ) >> 16 );
- cd2401->btbadrl = (uint16_t)( (uint32_t) buf );
- cd2401->btbcnt = len;
- CD2401_RECORD_WRITE_INFO(( len, buf, 'B' ));
- cd2401->btbsts = 0x03; /* CD2401 owns buffer, int when empty */
+ if (len > 0) {
+ cd2401->car = minor; /* Select channel */
+
+ if ( (cd2401->dmabsts & 0x08) == 0 ) {
+ /* Next buffer is A. Wait for it to be ours. */
+ while ( cd2401->atbsts & 0x01 );
+
+ CD2401_Channel_Info[minor].own_buf_A = FALSE;
+ CD2401_Channel_Info[minor].len = len;
+ CD2401_Channel_Info[minor].buf = buf;
+ cd2401->atbadru = (uint16_t)( ( (uint32_t) buf ) >> 16 );
+ cd2401->atbadrl = (uint16_t)( (uint32_t) buf );
+ cd2401->atbcnt = len;
+ CD2401_RECORD_WRITE_INFO(( len, buf, 'A' ));
+ cd2401->atbsts = 0x03; /* CD2401 owns buffer, int when empty */
+ }
+ else {
+ /* Next buffer is B. Wait for it to be ours. */
+ while ( cd2401->btbsts & 0x01 );
+
+ CD2401_Channel_Info[minor].own_buf_B = FALSE;
+ CD2401_Channel_Info[minor].len = len;
+ CD2401_Channel_Info[minor].buf = buf;
+ cd2401->btbadru = (uint16_t)( ( (uint32_t) buf ) >> 16 );
+ cd2401->btbadrl = (uint16_t)( (uint32_t) buf );
+ cd2401->btbcnt = len;
+ CD2401_RECORD_WRITE_INFO(( len, buf, 'B' ));
+ cd2401->btbsts = 0x03; /* CD2401 owns buffer, int when empty */
+ }
+ /* Nuts -- Need TxD ints */
+ CD2401_Channel_Info[minor].txEmpty = FALSE;
+ cd2401->ier |= 0x01;
}
- /* Nuts -- Need TxD ints */
- CD2401_Channel_Info[minor].txEmpty = FALSE;
- cd2401->ier |= 0x01;
/* Return something */
return len;
diff --git a/c/src/lib/libbsp/m68k/uC5282/console/console.c b/c/src/lib/libbsp/m68k/uC5282/console/console.c
index a213cbca2f..2c133d7bb7 100644
--- a/c/src/lib/libbsp/m68k/uC5282/console/console.c
+++ b/c/src/lib/libbsp/m68k/uC5282/console/console.c
@@ -409,18 +409,15 @@ IntUartInitialize(void)
static ssize_t
IntUartInterruptWrite (int minor, const char *buf, size_t len)
{
- int level;
-
- rtems_interrupt_disable(level);
+ if (len > 0) {
+ /* write out character */
+ MCF5282_UART_UTB(minor) = *buf;
- /* write out character */
- MCF5282_UART_UTB(minor) = *buf;
-
- /* enable tx interrupt */
- IntUartInfo[minor].uimr |= MCF5282_UART_UIMR_TXRDY;
- MCF5282_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ /* enable tx interrupt */
+ IntUartInfo[minor].uimr |= MCF5282_UART_UIMR_TXRDY;
+ MCF5282_UART_UIMR(minor) = IntUartInfo[minor].uimr;
+ }
- rtems_interrupt_enable(level);
return 0;
}
diff --git a/c/src/lib/libbsp/powerpc/gen5200/console/console.c b/c/src/lib/libbsp/powerpc/gen5200/console/console.c
index 93a3ab779a..a70e06d3e7 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/console/console.c
+++ b/c/src/lib/libbsp/powerpc/gen5200/console/console.c
@@ -581,33 +581,35 @@ ssize_t mpc5200_uart_write(
size_t len
)
{
- int frame_len = len;
- const char *frame_buf = buf;
- struct mpc5200_psc *psc =
- (struct mpc5200_psc *)(&mpc5200.psc[psc_minor_to_regset[minor]]);
+ if (len > 0) {
+ int frame_len = len;
+ const char *frame_buf = buf;
+ struct mpc5200_psc *psc =
+ (struct mpc5200_psc *)(&mpc5200.psc[psc_minor_to_regset[minor]]);
- /*
- * Check tx fifo space
- */
- if(len > (TX_FIFO_SIZE - psc->tfnum))
- frame_len = TX_FIFO_SIZE - psc->tfnum;
+ /*
+ * Check tx fifo space
+ */
+ if(len > (TX_FIFO_SIZE - psc->tfnum))
+ frame_len = TX_FIFO_SIZE - psc->tfnum;
#ifndef SINGLE_CHAR_MODE
- channel_info[minor].cur_tx_len = frame_len;
+ channel_info[minor].cur_tx_len = frame_len;
#else
- frame_len = 1;
+ frame_len = 1;
#endif
- /*rtems_cache_flush_multiple_data_lines( (void *)frame_buf, frame_len);*/
+ /*rtems_cache_flush_multiple_data_lines( (void *)frame_buf, frame_len);*/
- while (frame_len--)
- /* perform byte write to avoid extra NUL characters */
- (* (volatile char *)&(psc->rb_tb)) = *frame_buf++;
+ while (frame_len--)
+ /* perform byte write to avoid extra NUL characters */
+ (* (volatile char *)&(psc->rb_tb)) = *frame_buf++;
- /*
- * unmask interrupt
- */
- psc->isr_imr = channel_info[minor].shadow_imr |= IMR_TX_RDY;
+ /*
+ * unmask interrupt
+ */
+ psc->isr_imr = channel_info[minor].shadow_imr |= IMR_TX_RDY;
+ }
return 0;
}
diff --git a/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c b/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c
index 86f5de87a8..5fc0b95de1 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c
+++ b/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c
@@ -153,28 +153,30 @@ static int last_close(int major, int minor, void *arg)
static ssize_t write_with_interrupts(int minor, const char *buf, size_t len)
{
- rtems_status_code sc = RTEMS_SUCCESSFUL;
- console_tbl *ct = Console_Port_Tbl[minor];
- uart_bridge_slave_control *control = ct->pDeviceParams;
- intercom_packet *packet = qoriq_intercom_allocate_packet(
- control->type,
- INTERCOM_SIZE_64
- );
+ if (len > 0) {
+ rtems_status_code sc = RTEMS_SUCCESSFUL;
+ console_tbl *ct = Console_Port_Tbl[minor];
+ uart_bridge_slave_control *control = ct->pDeviceParams;
+ intercom_packet *packet = qoriq_intercom_allocate_packet(
+ control->type,
+ INTERCOM_SIZE_64
+ );
- packet->size = len;
- memcpy(packet->data, buf, len);
-
- /*
- * Due to the lovely Termios implementation we have to hand this over to
- * another context.
- */
- sc = rtems_chain_append_with_notification(
- &control->transmit_fifo,
- &packet->glue.node,
- control->transmit_task,
- TRANSMIT_EVENT
- );
- assert(sc == RTEMS_SUCCESSFUL);
+ packet->size = len;
+ memcpy(packet->data, buf, len);
+
+ /*
+ * Due to the lovely Termios implementation we have to hand this over to
+ * another context.
+ */
+ sc = rtems_chain_append_with_notification(
+ &control->transmit_fifo,
+ &packet->glue.node,
+ control->transmit_task,
+ TRANSMIT_EVENT
+ );
+ assert(sc == RTEMS_SUCCESSFUL);
+ }
return 0;
}
diff --git a/c/src/lib/libbsp/powerpc/shared/console/uart.c b/c/src/lib/libbsp/powerpc/shared/console/uart.c
index 1079af12ac..67816e38db 100644
--- a/c/src/lib/libbsp/powerpc/shared/console/uart.c
+++ b/c/src/lib/libbsp/powerpc/shared/console/uart.c
@@ -559,8 +559,6 @@ BSP_uart_termios_write_polled(int minor, const char *buf, size_t len)
int nwrite;
const char *b = buf;
- assert(buf != NULL);
-
for (nwrite=0 ; nwrite < len ; nwrite++) {
BSP_uart_polled_write(uart, *b++);
}
@@ -571,7 +569,6 @@ ssize_t
BSP_uart_termios_write_com(int minor, const char *buf, size_t len)
{
int uart=minor; /* could differ, theoretically */
- assert(buf != NULL);
if(len <= 0)
{
diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c b/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c
index 312bed2a87..b28987899e 100644
--- a/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c
+++ b/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c
@@ -778,26 +778,29 @@ sccPollRead (int minor)
static ssize_t
sccInterruptWrite (int minor, const char *buf, size_t len)
{
- int chan = minor;
+ if (len > 0) {
+ int chan = minor;
- if ((sccPrepTxBd[chan]->status & M8xx_BD_READY) == 0) {
- sccPrepTxBd[chan]->buffer = (char *)buf;
- sccPrepTxBd[chan]->length = len;
- rtems_cache_flush_multiple_data_lines((const void *)buf,len);
- /*
- * clear status, set ready bit
- */
- sccPrepTxBd[chan]->status =
- (sccPrepTxBd[chan]->status
- & M8xx_BD_WRAP)
- | M8xx_BD_READY | M8xx_BD_INTERRUPT;
- if ((sccPrepTxBd[chan]->status & M8xx_BD_WRAP) != 0) {
- sccPrepTxBd[chan] = sccFrstTxBd[chan];
- }
- else {
- sccPrepTxBd[chan]++;
+ if ((sccPrepTxBd[chan]->status & M8xx_BD_READY) == 0) {
+ sccPrepTxBd[chan]->buffer = (char *)buf;
+ sccPrepTxBd[chan]->length = len;
+ rtems_cache_flush_multiple_data_lines((const void *)buf,len);
+ /*
+ * clear status, set ready bit
+ */
+ sccPrepTxBd[chan]->status =
+ (sccPrepTxBd[chan]->status
+ & M8xx_BD_WRAP)
+ | M8xx_BD_READY | M8xx_BD_INTERRUPT;
+ if ((sccPrepTxBd[chan]->status & M8xx_BD_WRAP) != 0) {
+ sccPrepTxBd[chan] = sccFrstTxBd[chan];
+ }
+ else {
+ sccPrepTxBd[chan]++;
+ }
}
}
+
return 0;
}
diff --git a/c/src/lib/libbsp/sparc/erc32/console/erc32_console.c b/c/src/lib/libbsp/sparc/erc32/console/erc32_console.c
index 08606957d4..2acc72f156 100644
--- a/c/src/lib/libbsp/sparc/erc32/console/erc32_console.c
+++ b/c/src/lib/libbsp/sparc/erc32/console/erc32_console.c
@@ -149,28 +149,28 @@ static int erc32_console_first_open(int major, int minor, void *arg)
#if (CONSOLE_USE_INTERRUPTS)
static ssize_t erc32_console_write_support_int(int minor, const char *buf, size_t len)
{
- console_data *cd = &Console_Port_Data[minor];
- int k = 0;
+ if (len > 0) {
+ console_data *cd = &Console_Port_Data[minor];
+ int k = 0;
- if (minor == 0) { /* uart a */
- for (k = 0;
- k < len && (ERC32_MEC.UART_Status & ERC32_MEC_UART_STATUS_THEA); k ++) {
- ERC32_MEC.UART_Channel_A = (unsigned char)buf[k];
- }
- ERC32_Force_interrupt(ERC32_INTERRUPT_UART_A_RX_TX);
- } else { /* uart b */
- for (k = 0;
- k < len && (ERC32_MEC.UART_Status & ERC32_MEC_UART_STATUS_THEB); k ++) {
- ERC32_MEC.UART_Channel_B = (unsigned char)buf[k];
+ if (minor == 0) { /* uart a */
+ for (k = 0;
+ k < len && (ERC32_MEC.UART_Status & ERC32_MEC_UART_STATUS_THEA); k ++) {
+ ERC32_MEC.UART_Channel_A = (unsigned char)buf[k];
+ }
+ ERC32_Force_interrupt(ERC32_INTERRUPT_UART_A_RX_TX);
+ } else { /* uart b */
+ for (k = 0;
+ k < len && (ERC32_MEC.UART_Status & ERC32_MEC_UART_STATUS_THEB); k ++) {
+ ERC32_MEC.UART_Channel_B = (unsigned char)buf[k];
+ }
+ ERC32_Force_interrupt(ERC32_INTERRUPT_UART_B_RX_TX);
}
- ERC32_Force_interrupt(ERC32_INTERRUPT_UART_B_RX_TX);
- }
-
- if (len > 0) {
+
cd->pDeviceContext = (void *)k;
cd->bActive = true;
}
-
+
return 0;
}
diff --git a/c/src/lib/libbsp/sparc/leon3/console/console.c b/c/src/lib/libbsp/sparc/leon3/console/console.c
index 3870685b50..566b0581f6 100644
--- a/c/src/lib/libbsp/sparc/leon3/console/console.c
+++ b/c/src/lib/libbsp/sparc/leon3/console/console.c
@@ -117,27 +117,24 @@ void console_isr(void *arg)
*/
int console_write_interrupt(int minor, const char *buf, int len)
{
- struct apbuart_priv *uart;
- unsigned int oldLevel;
-
- if (minor == 0)
- uart = &apbuarts[syscon_uart_index];
- else
- uart = &apbuarts[minor - 1];
+ if (len > 0) {
+ struct apbuart_priv *uart;
- /* Remember what position in buffer */
+ if (minor == 0)
+ uart = &apbuarts[syscon_uart_index];
+ else
+ uart = &apbuarts[minor - 1];
- rtems_interrupt_disable(oldLevel);
+ /* Remember what position in buffer */
- /* Enable TX interrupt */
- uart->regs->ctrl |= LEON_REG_UART_CTRL_TI;
+ /* Enable TX interrupt */
+ uart->regs->ctrl |= LEON_REG_UART_CTRL_TI;
- /* start UART TX, this will result in an interrupt when done */
- uart->regs->data = *buf;
+ /* start UART TX, this will result in an interrupt when done */
+ uart->regs->data = *buf;
- uart->sending = 1;
-
- rtems_interrupt_enable(oldLevel);
+ uart->sending = 1;
+ }
return 0;
}