mirror of
https://github.com/ipxe/ipxe
synced 2026-02-14 02:31:26 +03:00
[serial] Don't enable serial console without serial support
serial_console_init() would enable serial console support without knowing if the serial driver succeeded or not. As a result, the serial console would interfere with a normal keyboard on a system lacking serial support. Reported-by: Jan ONDREJ (SAL) <ondrejj(at)salstar.sk> Signed-off-by: Shao Miller <sha0.miller@gmail.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
committed by
Michael Brown
parent
fcdfe81764
commit
a712dae709
@@ -93,6 +93,9 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||||||
#define uart_writeb(val,addr) outb((val),(addr))
|
#define uart_writeb(val,addr) outb((val),(addr))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Boolean for the state of serial driver initialization */
|
||||||
|
int serial_initialized = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* void serial_putc(int ch);
|
* void serial_putc(int ch);
|
||||||
* Write character `ch' to port UART_BASE.
|
* Write character `ch' to port UART_BASE.
|
||||||
@@ -207,7 +210,6 @@ static void serial_init ( void ) {
|
|||||||
/* Set clear to send, so flow control works... */
|
/* Set clear to send, so flow control works... */
|
||||||
uart_writeb((1<<1), UART_BASE + UART_MCR);
|
uart_writeb((1<<1), UART_BASE + UART_MCR);
|
||||||
|
|
||||||
|
|
||||||
/* Flush the input buffer. */
|
/* Flush the input buffer. */
|
||||||
do {
|
do {
|
||||||
/* rx buffer reg
|
/* rx buffer reg
|
||||||
@@ -217,6 +219,9 @@ static void serial_init ( void ) {
|
|||||||
/* line status reg */
|
/* line status reg */
|
||||||
status = uart_readb(UART_BASE + UART_LSR);
|
status = uart_readb(UART_BASE + UART_LSR);
|
||||||
} while(status & UART_LSR_DR);
|
} while(status & UART_LSR_DR);
|
||||||
|
|
||||||
|
/* Note that serial support has been initialized */
|
||||||
|
serial_initialized = 1;
|
||||||
out:
|
out:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,9 +18,12 @@
|
|||||||
struct console_driver serial_console __console_driver;
|
struct console_driver serial_console __console_driver;
|
||||||
|
|
||||||
static void serial_console_init ( void ) {
|
static void serial_console_init ( void ) {
|
||||||
/* Serial driver initialization should already be done,
|
/*
|
||||||
* time to enable the serial console. */
|
* Check if serial driver initialization is done.
|
||||||
serial_console.disabled = 0;
|
* If so, it's time to enable the serial console.
|
||||||
|
*/
|
||||||
|
if ( serial_initialized )
|
||||||
|
serial_console.disabled = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct console_driver serial_console __console_driver = {
|
struct console_driver serial_console __console_driver = {
|
||||||
|
|||||||
@@ -12,5 +12,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||||||
extern void serial_putc ( int ch );
|
extern void serial_putc ( int ch );
|
||||||
extern int serial_getc ( void );
|
extern int serial_getc ( void );
|
||||||
extern int serial_ischar ( void );
|
extern int serial_ischar ( void );
|
||||||
|
extern int serial_initialized;
|
||||||
|
|
||||||
#endif /* _IPXE_SERIAL_H */
|
#endif /* _IPXE_SERIAL_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user