summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/serial.c7
-rw-r--r--src/core/serial_console.c9
-rw-r--r--src/include/ipxe/serial.h1
3 files changed, 13 insertions, 4 deletions
diff --git a/src/core/serial.c b/src/core/serial.c
index a5551b136..8f5a159c4 100644
--- a/src/core/serial.c
+++ b/src/core/serial.c
@@ -93,6 +93,9 @@ FILE_LICENCE ( GPL2_OR_LATER );
#define uart_writeb(val,addr) outb((val),(addr))
#endif
+/* Boolean for the state of serial driver initialization */
+int serial_initialized = 0;
+
/*
* void serial_putc(int ch);
* Write character `ch' to port UART_BASE.
@@ -207,7 +210,6 @@ static void serial_init ( void ) {
/* Set clear to send, so flow control works... */
uart_writeb((1<<1), UART_BASE + UART_MCR);
-
/* Flush the input buffer. */
do {
/* rx buffer reg
@@ -217,6 +219,9 @@ static void serial_init ( void ) {
/* line status reg */
status = uart_readb(UART_BASE + UART_LSR);
} while(status & UART_LSR_DR);
+
+ /* Note that serial support has been initialized */
+ serial_initialized = 1;
out:
return;
}
diff --git a/src/core/serial_console.c b/src/core/serial_console.c
index bbddd6b29..3852a308c 100644
--- a/src/core/serial_console.c
+++ b/src/core/serial_console.c
@@ -18,9 +18,12 @@
struct console_driver serial_console __console_driver;
static void serial_console_init ( void ) {
- /* Serial driver initialization should already be done,
- * time to enable the serial console. */
- serial_console.disabled = 0;
+ /*
+ * Check if serial driver initialization is done.
+ * If so, it's time to enable the serial console.
+ */
+ if ( serial_initialized )
+ serial_console.disabled = 0;
}
struct console_driver serial_console __console_driver = {
diff --git a/src/include/ipxe/serial.h b/src/include/ipxe/serial.h
index c16e56ae6..b47b1d125 100644
--- a/src/include/ipxe/serial.h
+++ b/src/include/ipxe/serial.h
@@ -12,5 +12,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
extern void serial_putc ( int ch );
extern int serial_getc ( void );
extern int serial_ischar ( void );
+extern int serial_initialized;
#endif /* _IPXE_SERIAL_H */