46,17 → 46,19 |
static serial_t sconf[SERIAL_MAX]; |
static bool kb_enabled; |
|
static void serial_write(chardev_t *d, const char ch) |
static void serial_write(chardev_t *d, const char ch, bool silent) |
{ |
if (!silent) { |
serial_t *sd = (serial_t *)d->data; |
|
if (ch == '\n') |
serial_write(d, '\r'); |
serial_write(d, '\r', false); |
|
/* Wait until transmit buffer empty */ |
while (! (SERIAL_READ_LSR(sd->port) & (1<<TRANSMIT_EMPTY_BIT))) |
; |
while (!(SERIAL_READ_LSR(sd->port) & (1 << TRANSMIT_EMPTY_BIT))); |
SERIAL_WRITE(sd->port, ch); |
} |
} |
|
static void serial_enable(chardev_t *d) |
{ |
134,7 → 136,6 |
{ |
serial_t *sd = &sconf[0]; |
|
|
chardev_initialize("serial_console", &console, &serial_ops); |
console.data = sd; |
kb_enabled = true; |
147,8 → 148,7 |
irq_register(&serial_irq); |
|
/* I don't know why, but the serial interrupts simply |
* don't work on simics |
*/ |
don't work on simics */ |
virtual_timer_fnc = &serial_handler; |
|
stdin = &console; |