Kernel: tty_writeready: change return type from bool to new enum ttyready_t
authorWill Sowerbutts <will@sowerbutts.com>
Mon, 2 Feb 2015 22:19:54 +0000 (22:19 +0000)
committerWill Sowerbutts <will@sowerbutts.com>
Mon, 2 Feb 2015 22:22:32 +0000 (22:22 +0000)
23 files changed:
Kernel/include/tty.h
Kernel/platform-6502test/devtty.c
Kernel/platform-6809test/devtty.c
Kernel/platform-8086test/devtty.c
Kernel/platform-atarist/devtty.c
Kernel/platform-dragon/devtty.c
Kernel/platform-msx1/devtty.c
Kernel/platform-msx2/devtty.c
Kernel/platform-mtx/devtty.c
Kernel/platform-n8vem-mark4/devtty.c
Kernel/platform-n8vem-mark4/devtty.h
Kernel/platform-nc100/devtty.c
Kernel/platform-p112/devtty.c
Kernel/platform-p112/devtty.h
Kernel/platform-pcw8256/devtty.c
Kernel/platform-pcw8256/devtty.h
Kernel/platform-px4plus/devtty.c
Kernel/platform-px4plus/devtty.h
Kernel/platform-tgl6502/devtty.c
Kernel/platform-trs80/devtty.c
Kernel/platform-ubee/devtty.c
Kernel/platform-zx128/devtty.c
Kernel/tty.c

index 84803bf..6638a13 100644 (file)
@@ -193,9 +193,15 @@ extern CODE1 void tty_echo(uint8_t minor, unsigned char c);
 extern CODE1 void tty_erase(uint8_t minor);
 extern CODE1 void tty_putc_wait(uint8_t minor, unsigned char c);
 
+typedef enum {
+    TTY_READY_NOW=1,    /* port is ready immediately */
+    TTY_READY_SOON=0,   /* we'll be ready shortly, kernel should spin, polling the port repeatedly */
+    TTY_READY_LATER=-1  /* we'll be a long time, put this process to sleep and schedule another */
+} ttyready_t;
+
 /* provided by platform */
 extern struct s_queue ttyinq[NUM_DEV_TTY + 1];
-extern CODE2 bool tty_writeready(uint8_t minor);
+extern CODE2 ttyready_t tty_writeready(uint8_t minor);
 extern CODE2 void tty_putc(uint8_t minor, unsigned char c);
 extern CODE2 void tty_setup(uint8_t minor);
 extern CODE2 int tty_carrier(uint8_t minor);
index 2abb514..d2995cf 100644 (file)
@@ -33,13 +33,13 @@ void kputchar(char c)
        tty_putc(1, c);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        uint8_t c;
        if (minor == 1)
-               return 1;
+               return TTY_READY_NOW;
        c = *uartb;
-       return c & 1;
+       return (c & 1) ? TTY_READY_NOW : TTY_READY_SOON;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index c46f3a7..bfaca91 100644 (file)
@@ -35,13 +35,13 @@ void kputchar(char c)
        tty_putc(1, c);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        uint8_t c;
        if (minor == 1)
-               return 1;
+               return TTY_READY_NOW;
        c = *uartb;
-       return c & 1;
+       return (c & 1) ? TTY_READY_NOW : TTY_READY_SOON;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index 2abb514..d2995cf 100644 (file)
@@ -33,13 +33,13 @@ void kputchar(char c)
        tty_putc(1, c);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        uint8_t c;
        if (minor == 1)
-               return 1;
+               return TTY_READY_NOW;
        c = *uartb;
-       return c & 1;
+       return (c & 1) ? TTY_READY_NOW : TTY_READY_SOON;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index de7b760..2a27ffc 100644 (file)
@@ -33,13 +33,13 @@ void kputchar(char c)
        tty_putc(1, c);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        uint8_t c;
        if (minor == 1)
-               return 1;
+               return TTY_READY_NOW;
        c = *uart_status;
-       return c & 16;  /* TX DATA empty */
+       return (c & 16) ? TTY_READY_NOW : TTY_READY_SOON; /* TX DATA empty */
 }
 
 /* For DragonPlus we should perhaps support both monitors 8) */
index f778923..86ce33a 100644 (file)
@@ -33,13 +33,13 @@ void kputchar(char c)
        tty_putc(1, c);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        uint8_t c;
        if (minor == 1)
-               return 1;
+               return TTY_READY_NOW;
        c = *uart_status;
-       return c & 16;  /* TX DATA empty */
+       return (c & 16) ? TTY_READY_NOW : TTY_READY_SOON; /* TX DATA empty */
 }
 
 /* For DragonPlus we should perhaps support both monitors 8) */
index e83f618..4555999 100644 (file)
@@ -31,10 +31,10 @@ void kputchar(char c)
 }
 
 /* Both console and debug port are always ready */
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        minor;
-       return 1;
+       return TTY_READY_NOW;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index 0787b3b..2a64dfa 100644 (file)
@@ -95,10 +95,10 @@ void kputchar(char c)
 }
 
 /* Both console and debug port are always ready */
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        minor;
-       return 1;
+       return TTY_READY_NOW;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index 217f667..cd1c90a 100644 (file)
@@ -45,14 +45,14 @@ void kputchar(char c)
        tty_putc(1, c);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        uint8_t reg = 0xFF;
        if (minor == 3)
                reg = serialAc;
        if (minor == 4)
                reg = serialBc;
-       return reg & 4;
+       return (reg & 4) ? TTY_READY_NOW : TTY_READY_SOON;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index 0dcf11c..6c86896 100644 (file)
@@ -75,10 +75,10 @@ void tty_putc(uint8_t minor, unsigned char c)
     }
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
     minor;
-    return 1;
+    return TTY_READY_NOW;
 }
 
 /* kernel writes to system console -- never sleep! */
index ea9f1c8..30f7020 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef __DEVTTY_DOT_H__
 #define __DEVTTY_DOT_H__
 void tty_putc(uint8_t minor, unsigned char c);
-bool tty_writeready(uint8_t minor);
 void tty_pollirq_asci0(void);
 void tty_pollirq_asci1(void);
 
index c8e5fab..3631d22 100644 (file)
@@ -86,13 +86,13 @@ void kputchar(char c)
        tty_putc(1, c);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        uint8_t c;
        if (minor == 1)
-               return 1;
+               return TTY_READY_NOW;
        c = uartb;
-       return c & 1;
+       return (c & 1) ? TTY_READY_NOW : TTY_READY_SOON;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index 51e126d..ecf0c49 100644 (file)
@@ -87,10 +87,10 @@ void tty_putc(uint8_t minor, unsigned char c)
     }
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
     minor;
-    return 1;
+    return TTY_READY_NOW;
 }
 
 /* kernel writes to system console -- never sleep! */
index 2a428de..9417ced 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef __DEVTTY_DOT_H__
 #define __DEVTTY_DOT_H__
 void tty_putc(uint8_t minor, unsigned char c);
-bool tty_writeready(uint8_t minor);
 void tty_pollirq_escc(void);
 void tty_pollirq_asci0(void);
 void tty_pollirq_asci1(void);
index e885a27..603a876 100644 (file)
@@ -70,12 +70,12 @@ static void dartwr(uint8_t minor, uint8_t r, uint8_t v)
     irqrestore(irq);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
     if (minor == 1)
-        return 1;      /* VT */
+        return TTY_READY_NOW;
     else
-        return dartrr(minor, 0) & 4;
+        return (dartrr(minor, 0) & 4) ? TTY_READY_NOW : TTY_READY_SOON;
 }
 
 extern void bugout(uint16_t c);
index fc8fd8e..7bbe65c 100644 (file)
@@ -2,7 +2,6 @@
 #define __DEVTTY_DOT_H__
 
 void tty_putc(uint8_t minor, char c);
-bool tty_writeready(uint8_t minor);
 void tty_init_port(void);
 void tty_irq(void);
 
index 16cfe7a..2682250 100644 (file)
@@ -24,10 +24,10 @@ void kputchar(char c)
 }
 
 /* It's the console display, always ready */
-static bool tty_writeready(uint8_t minor)
+static ttyready_t tty_writeready(uint8_t minor)
 {
     minor;
-    return 1;
+    return TTY_READY_NOW;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index 4638611..7345b5b 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef __DEVTTY_DOT_H__
 #define __DEVTTY_DOT_H__
 void tty_putc(uint8_t minor, unsigned char c);
-bool tty_writeready(uint8_t minor);
 void tty_pollirq(void);
 void tty_setup(uint8_t minor);
 #endif
index 9332f89..1308d02 100644 (file)
@@ -30,9 +30,9 @@ void kputchar(uint8_t c)
        tty_putc(1, c);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
-        return 1;
+        return TTY_READY_NOW;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index e609c2b..1746c1d 100644 (file)
@@ -29,15 +29,13 @@ void kputchar(char c)
     tty_putc(1, c);
 }
 
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
     uint8_t reg;
     if (minor == 1)
-        return 1;
+        return TTY_READY_NOW;
     reg = tr1865_status;
-    if (reg & 0x40)
-        return 1;
-    return 0;
+    return (reg & 0x40) ? TTY_READY_NOW : TTY_READY_SOON;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index 9ec6ac5..90d50a8 100644 (file)
@@ -29,10 +29,10 @@ void kputchar(char c)
        tty_putc(1, c);
 }
 
-static bool tty_writeready(uint8_t minor)
+static ttyready_t tty_writeready(uint8_t minor)
 {
        minor;
-       return 1;
+       return TTY_READY_NOW;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index d7c5b3b..0d81c04 100644 (file)
@@ -60,10 +60,10 @@ void kputchar(char c)
 }
 
 /* Both console and debug port are always ready */
-bool tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint8_t minor)
 {
        minor;
-       return 1;
+       return TTY_READY_NOW;
 }
 
 void tty_putc(uint8_t minor, unsigned char c)
index ad3ca08..5317fed 100644 (file)
@@ -384,11 +384,13 @@ void tty_putc_wait(uint8_t minor, unsigned char c)
            costs versus waiting a bit. A box with tx interrupts and sufficient
            performance can buffer or sleep in tty_putc instead.
 
-           The driver should return 1 - send bytes, 0 - spinning may be useful,
-           -1 - blocked, don't spin (eg flow controlled) */
+           The driver should return a value from the ttyready_t enum:
+            1 (TTY_READY_NOW) -- send bytes now
+            0 (TTY_READY_SOON) -- spinning may be useful
+           -1 (TTY_READY_LATER) -- blocked, don't spin (eg flow controlled) */
        if (!udata.u_ininterrupt) {
-               while ((t = tty_writeready(minor)) != 1)
-                       if (t || need_resched())
+               while ((t = tty_writeready(minor)) != TTY_READY_NOW)
+                       if (t != TTY_READY_SOON || need_resched())
                                psleep(&ttydata[minor]);
        }
        tty_putc(minor, c);