Add beginning basic serial driver

This commit is contained in:
Justin C. Miller
2018-05-03 00:08:22 -07:00
parent 59700b07db
commit d9fe457b44
6 changed files with 128 additions and 38 deletions

View File

@@ -130,7 +130,7 @@ set_idt_entry(uint8_t i, uint64_t addr, uint16_t selector, uint8_t flags)
g_idt_table[i].reserved = 0;
}
void
static void
disable_legacy_pic()
{
@@ -154,6 +154,13 @@ disable_legacy_pic()
outb(PIC2+1, 0x02); io_wait();
}
static void
enable_serial_interrupts()
{
uint8_t ier = inb(COM1+1);
outb(COM1+1, ier | 0x1);
}
void
interrupts_init()
{
@@ -186,6 +193,7 @@ interrupts_init()
idt_write();
disable_legacy_pic();
enable_serial_interrupts();
log::info(logs::interrupt, "Interrupts enabled.");
}
@@ -288,6 +296,11 @@ irq_handler(registers regs)
cons->set_color();
break;
case 4:
// TODO: move this to a real serial driver
cons->echo();
break;
default:
cons->set_color(11);
cons->printf("\nReceived IRQ interrupt: %d (vec %d)\n",