summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k/mvme167
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/m68k/mvme167
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/m68k/mvme167')
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/console/console.c62
1 files changed, 32 insertions, 30 deletions
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;