diff options
Diffstat (limited to 'payloads/libpayload/drivers/serial.c')
-rw-r--r-- | payloads/libpayload/drivers/serial.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/payloads/libpayload/drivers/serial.c b/payloads/libpayload/drivers/serial.c index 95f5b4855e..7a6590cb16 100644 --- a/payloads/libpayload/drivers/serial.c +++ b/payloads/libpayload/drivers/serial.c @@ -58,15 +58,27 @@ void serial_hardware_init(int port, int speed, int word_bits, int parity, int st outb(reg &= ~0x80, port + 0x03); } +static struct console_input_driver consin = { + .havekey = serial_havechar, + .getchar = serial_getchar +}; + +static struct console_output_driver consout = { + .putchar = serial_putchar +}; + void serial_init(void) { #ifdef CONFIG_SERIAL_SET_SPEED serial_hardware_init(IOBASE, CONFIG_SERIAL_BAUD_RATE, 8, 0, 1); #endif + console_add_input_driver(&consin); + console_add_output_driver(&consout); } -void serial_putchar(unsigned char c) +void serial_putchar(unsigned int c) { + c &= 0xff; while ((inb(IOBASE + 0x05) & 0x20) == 0) ; outb(c, IOBASE); } |