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. */
outb (FCR_REG, 0); /* Disable FIFO. */
- set_serial (115200); /* 115.2 kbps, N-8-1. */
+ set_serial (9600); /* 9.6 kbps, N-8-1. */
outb (MCR_REG, MCR_OUT2); /* Required to enable interrupts. */
intq_init (&txq);
mode = POLL;
{
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