diff options
Diffstat (limited to 'src/basic_uart.rs')
| -rw-r--r-- | src/basic_uart.rs | 77 |
1 files changed, 9 insertions, 68 deletions
diff --git a/src/basic_uart.rs b/src/basic_uart.rs index ec687e3..4632b11 100644 --- a/src/basic_uart.rs +++ b/src/basic_uart.rs @@ -13,9 +13,9 @@ use std::time::Duration; use nix::fcntl::fcntl; use nix::fcntl::{FcntlArg, OFlag}; -use trve::consts::{Byte, DWord, HWord, Word}; -use trve::exceptions::ExceptionType; -use trve::mem::{MemDeviceInterface, PageNum}; +use trve::consts::{Addr, Byte}; +use trve::exceptions::MemoryExceptionType; +use trve::mem::MemDeviceInterface; /// byte 0: rx/tx /// byte 1: status (------rt, r=rxready, t=txready)/none @@ -78,79 +78,20 @@ impl BasicUart { } impl MemDeviceInterface for BasicUart { - fn write_dword( - &self, - _page: PageNum, - _offset: u16, - _value: DWord, - ) -> Result<(), ExceptionType> { - Err(ExceptionType::StoreAmoAccessFault) - } - - fn write_word(&self, _page: PageNum, _offset: u16, _value: Word) -> Result<(), ExceptionType> { - Err(ExceptionType::StoreAmoAccessFault) - } - - fn write_hword( - &self, - _page: PageNum, - _offset: u16, - _value: HWord, - ) -> Result<(), ExceptionType> { - Err(ExceptionType::StoreAmoAccessFault) - } - - fn write_byte(&self, page: PageNum, offset: u16, value: Byte) -> Result<(), ExceptionType> { - if page > 0 { - return Err(ExceptionType::StoreAmoAccessFault); - } - - match offset { + fn write_byte(&self, addr: Addr, value: Byte) -> Result<(), MemoryExceptionType> { + match addr { 0 => { self.write(value); Ok(()) } - _ => Err(ExceptionType::StoreAmoAccessFault), + _ => Err(MemoryExceptionType::AccessFault), } } - - fn read_dword(&self, _page: PageNum, _offset: u16) -> Result<DWord, ExceptionType> { - Err(ExceptionType::LoadAccessFault) - } - - fn read_word(&self, _page: PageNum, _offset: u16) -> Result<Word, ExceptionType> { - Err(ExceptionType::LoadAccessFault) - } - - fn read_hword(&self, _page: PageNum, _offset: u16) -> Result<HWord, ExceptionType> { - Err(ExceptionType::LoadAccessFault) - } - - fn read_byte(&self, page: PageNum, offset: u16) -> Result<Byte, ExceptionType> { - if page > 0 { - return Err(ExceptionType::LoadAccessFault); - } - - match offset { + fn read_byte(&self, addr: Addr) -> Result<Byte, MemoryExceptionType> { + match addr { 0 => Ok(self.read()), 1 => Ok(1 | (self.can_read() as u8) << 1), - _ => Err(ExceptionType::LoadAccessFault), + _ => Err(MemoryExceptionType::AccessFault), } } - - fn get_atomic_word( - &self, - _page: PageNum, - _offset: u16, - ) -> Result<&std::sync::atomic::AtomicU32, ExceptionType> { - Err(ExceptionType::StoreAmoAccessFault) - } - - fn get_atomic_dword( - &self, - _page: PageNum, - _offset: u16, - ) -> Result<&std::sync::atomic::AtomicU64, ExceptionType> { - Err(ExceptionType::StoreAmoAccessFault) - } } |
