console/main/trap: enable interrupts, handle UART interrupt
authorKit Rhett Aultman <kit@kitaultman.com>
Mon, 2 Sep 2024 23:56:39 +0000 (19:56 -0400)
committerKit Rhett Aultman <kit@kitaultman.com>
Mon, 2 Sep 2024 23:56:39 +0000 (19:56 -0400)
commit23c07e794e23f84105391b99b8132bf4c9b394a3
tree1bfe7e50b90b111b383788f669b933b8cf3ddc6c
parenta915a2977f20b45de0a115e399113206a258f919
console/main/trap: enable interrupts, handle UART interrupt

This commit enables interrupts and configures the RISC-V PLIC to deliver
interrupts for the UART (interrupt 10 for qemu).  To do this:

* mstatus and mie are configured for m-mode interrupts (mstatus also
  likely has s-mode turned on, but we won't use s-mode until we have
  to).
* The MmioSerialPort didn't have its init function called; doing so sets
  the interrupt enable bits on the UART.
* Configures the PLIC to deliver interrupt 10 on priority 1.
* Adds code to the exception handler to claim, handle, and complete the
  interrupt.

A few notes here:
* There's only one interrupt source right now...the UART.  So servicing
  the interrupt is done right in the handler.  There's no need to
  determine any other interrupt sources or worry about timing beyond
  this, for now.
* Because the MmioSerialPort was really mostly set up for the benefit of
  console output, it's not really set up to be used by the interrupt
  handler.  The code's a bit messy to ensure we read the pending byte
  and just echo it back to the terminal.  Future commits should address
  the awkwardness going on here.
Cargo.lock
Cargo.toml
src/console.rs
src/main.rs
src/trap.rs