Polling mode busy-waits for the serial port to become free
before writing to it. It's slow, but until interrupts have
been initialized it's all we can do. */
-void
-serial_init_poll (void)
+static void
+init_poll (void)
{
ASSERT (mode == UNINIT);
outb (IER_REG, 0); /* Turn off all interrupts. */
{
enum intr_level old_level;
+ if (mode == UNINIT)
+ init_poll ();
ASSERT (mode == POLL);
intr_register_ext (0x20 + 4, serial_interrupt, "serial");
{
enum intr_level old_level = intr_disable ();
- if (mode == POLL)
+ if (mode != QUEUE)
{
/* If we're not set up for interrupt-driven I/O yet,
use dumb polling to transmit a byte. */
+ if (mode == UNINIT)
+ init_poll ();
putc_poll (byte);
}
else
serial_interrupt (struct intr_frame *f UNUSED)
{
/* Inquire about interrupt in UART. Without this, we can
- occasionally miss an interrupt running under qemu. */
+ occasionally miss an interrupt running under QEMU. */
inb (IIR_REG);
/* As long as we have room to receive a byte, and the hardware