From: Will Sowerbutts Date: Mon, 2 Feb 2015 22:19:54 +0000 (+0000) Subject: Kernel: tty_writeready: change return type from bool to new enum ttyready_t X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=1df8cda6c9051bef7bbf07398d65569d23503084;p=FUZIX.git Kernel: tty_writeready: change return type from bool to new enum ttyready_t --- diff --git a/Kernel/include/tty.h b/Kernel/include/tty.h index 84803bfb..6638a13c 100644 --- a/Kernel/include/tty.h +++ b/Kernel/include/tty.h @@ -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); diff --git a/Kernel/platform-6502test/devtty.c b/Kernel/platform-6502test/devtty.c index 2abb5146..d2995cf6 100644 --- a/Kernel/platform-6502test/devtty.c +++ b/Kernel/platform-6502test/devtty.c @@ -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) diff --git a/Kernel/platform-6809test/devtty.c b/Kernel/platform-6809test/devtty.c index c46f3a7f..bfaca91f 100644 --- a/Kernel/platform-6809test/devtty.c +++ b/Kernel/platform-6809test/devtty.c @@ -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) diff --git a/Kernel/platform-8086test/devtty.c b/Kernel/platform-8086test/devtty.c index 2abb5146..d2995cf6 100644 --- a/Kernel/platform-8086test/devtty.c +++ b/Kernel/platform-8086test/devtty.c @@ -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) diff --git a/Kernel/platform-atarist/devtty.c b/Kernel/platform-atarist/devtty.c index de7b760b..2a27ffc9 100644 --- a/Kernel/platform-atarist/devtty.c +++ b/Kernel/platform-atarist/devtty.c @@ -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) */ diff --git a/Kernel/platform-dragon/devtty.c b/Kernel/platform-dragon/devtty.c index f7789234..86ce33ad 100644 --- a/Kernel/platform-dragon/devtty.c +++ b/Kernel/platform-dragon/devtty.c @@ -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) */ diff --git a/Kernel/platform-msx1/devtty.c b/Kernel/platform-msx1/devtty.c index e83f618e..45559996 100644 --- a/Kernel/platform-msx1/devtty.c +++ b/Kernel/platform-msx1/devtty.c @@ -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) diff --git a/Kernel/platform-msx2/devtty.c b/Kernel/platform-msx2/devtty.c index 0787b3b9..2a64dfa9 100644 --- a/Kernel/platform-msx2/devtty.c +++ b/Kernel/platform-msx2/devtty.c @@ -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) diff --git a/Kernel/platform-mtx/devtty.c b/Kernel/platform-mtx/devtty.c index 217f6675..cd1c90a4 100644 --- a/Kernel/platform-mtx/devtty.c +++ b/Kernel/platform-mtx/devtty.c @@ -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) diff --git a/Kernel/platform-n8vem-mark4/devtty.c b/Kernel/platform-n8vem-mark4/devtty.c index 0dcf11c5..6c868966 100644 --- a/Kernel/platform-n8vem-mark4/devtty.c +++ b/Kernel/platform-n8vem-mark4/devtty.c @@ -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! */ diff --git a/Kernel/platform-n8vem-mark4/devtty.h b/Kernel/platform-n8vem-mark4/devtty.h index ea9f1c87..30f7020b 100644 --- a/Kernel/platform-n8vem-mark4/devtty.h +++ b/Kernel/platform-n8vem-mark4/devtty.h @@ -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); diff --git a/Kernel/platform-nc100/devtty.c b/Kernel/platform-nc100/devtty.c index c8e5fab5..3631d221 100644 --- a/Kernel/platform-nc100/devtty.c +++ b/Kernel/platform-nc100/devtty.c @@ -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) diff --git a/Kernel/platform-p112/devtty.c b/Kernel/platform-p112/devtty.c index 51e126dd..ecf0c492 100644 --- a/Kernel/platform-p112/devtty.c +++ b/Kernel/platform-p112/devtty.c @@ -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! */ diff --git a/Kernel/platform-p112/devtty.h b/Kernel/platform-p112/devtty.h index 2a428de8..9417ced8 100644 --- a/Kernel/platform-p112/devtty.h +++ b/Kernel/platform-p112/devtty.h @@ -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); diff --git a/Kernel/platform-pcw8256/devtty.c b/Kernel/platform-pcw8256/devtty.c index e885a279..603a8762 100644 --- a/Kernel/platform-pcw8256/devtty.c +++ b/Kernel/platform-pcw8256/devtty.c @@ -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); diff --git a/Kernel/platform-pcw8256/devtty.h b/Kernel/platform-pcw8256/devtty.h index fc8fd8ef..7bbe65c1 100644 --- a/Kernel/platform-pcw8256/devtty.h +++ b/Kernel/platform-pcw8256/devtty.h @@ -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); diff --git a/Kernel/platform-px4plus/devtty.c b/Kernel/platform-px4plus/devtty.c index 16cfe7a3..2682250f 100644 --- a/Kernel/platform-px4plus/devtty.c +++ b/Kernel/platform-px4plus/devtty.c @@ -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) diff --git a/Kernel/platform-px4plus/devtty.h b/Kernel/platform-px4plus/devtty.h index 4638611d..7345b5b9 100644 --- a/Kernel/platform-px4plus/devtty.h +++ b/Kernel/platform-px4plus/devtty.h @@ -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 diff --git a/Kernel/platform-tgl6502/devtty.c b/Kernel/platform-tgl6502/devtty.c index 9332f894..1308d028 100644 --- a/Kernel/platform-tgl6502/devtty.c +++ b/Kernel/platform-tgl6502/devtty.c @@ -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) diff --git a/Kernel/platform-trs80/devtty.c b/Kernel/platform-trs80/devtty.c index e609c2b2..1746c1d8 100644 --- a/Kernel/platform-trs80/devtty.c +++ b/Kernel/platform-trs80/devtty.c @@ -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) diff --git a/Kernel/platform-ubee/devtty.c b/Kernel/platform-ubee/devtty.c index 9ec6ac5d..90d50a86 100644 --- a/Kernel/platform-ubee/devtty.c +++ b/Kernel/platform-ubee/devtty.c @@ -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) diff --git a/Kernel/platform-zx128/devtty.c b/Kernel/platform-zx128/devtty.c index d7c5b3b5..0d81c041 100644 --- a/Kernel/platform-zx128/devtty.c +++ b/Kernel/platform-zx128/devtty.c @@ -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) diff --git a/Kernel/tty.c b/Kernel/tty.c index ad3ca08a..5317fed9 100644 --- a/Kernel/tty.c +++ b/Kernel/tty.c @@ -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);