summaryrefslogtreecommitdiff
path: root/src/mem.rs
diff options
context:
space:
mode:
authortaitep <taitep@taitep.se>2025-12-31 13:16:32 +0100
committertaitep <taitep@taitep.se>2025-12-31 13:16:32 +0100
commit21a8479ce99f54012150cc948ed7e5bb066c61e0 (patch)
tree49c5e5fa8736f7990016e410f2714d6e1b0db8ee /src/mem.rs
parent09fe12f5165d582c7b83537e38ef8e5d85716f8b (diff)
Make MMIO devices not have control of the address of exceptions
Diffstat (limited to 'src/mem.rs')
-rw-r--r--src/mem.rs80
1 files changed, 32 insertions, 48 deletions
diff --git a/src/mem.rs b/src/mem.rs
index a3b087c..607f2d4 100644
--- a/src/mem.rs
+++ b/src/mem.rs
@@ -49,7 +49,7 @@ impl MemConfig {
addr,
})?;
- interface.read_dword(addr)
+ interface.read_dword(addr).map_err(|e| e.with_addr(addr))
}
}
pub fn read_word(&self, addr: u64) -> Result<u32, MemoryException> {
@@ -67,7 +67,7 @@ impl MemConfig {
addr,
})?;
- interface.read_word(addr)
+ interface.read_word(addr).map_err(|e| e.with_addr(addr))
}
}
pub fn read_hword(&self, addr: u64) -> Result<u16, MemoryException> {
@@ -84,7 +84,7 @@ impl MemConfig {
type_: MemoryExceptionType::AccessFault,
addr,
})?;
- interface.read_hword(addr)
+ interface.read_hword(addr).map_err(|e| e.with_addr(addr))
}
}
pub fn read_byte(&self, addr: u64) -> Result<u8, MemoryException> {
@@ -95,7 +95,7 @@ impl MemConfig {
type_: MemoryExceptionType::AccessFault,
addr,
})?;
- interface.read_byte(addr)
+ interface.read_byte(addr).map_err(|e| e.with_addr(addr))
}
}
@@ -113,7 +113,9 @@ impl MemConfig {
type_: MemoryExceptionType::AccessFault,
addr,
})?;
- interface.write_dword(addr, value)
+ interface
+ .write_dword(addr, value)
+ .map_err(|e| e.with_addr(addr))
}
}
pub fn write_word(&self, addr: u64, value: u32) -> Result<(), MemoryException> {
@@ -130,7 +132,9 @@ impl MemConfig {
type_: MemoryExceptionType::AccessFault,
addr,
})?;
- interface.write_word(addr, value)
+ interface
+ .write_word(addr, value)
+ .map_err(|e| e.with_addr(addr))
}
}
pub fn write_hword(&self, addr: u64, value: u16) -> Result<(), MemoryException> {
@@ -147,7 +151,9 @@ impl MemConfig {
type_: MemoryExceptionType::AccessFault,
addr,
})?;
- interface.write_hword(addr, value)
+ interface
+ .write_hword(addr, value)
+ .map_err(|e| e.with_addr(addr))
}
}
pub fn write_byte(&self, addr: u64, value: u8) -> Result<(), MemoryException> {
@@ -158,7 +164,9 @@ impl MemConfig {
type_: MemoryExceptionType::AccessFault,
addr,
})?;
- interface.write_byte(addr, value)
+ interface
+ .write_byte(addr, value)
+ .map_err(|e| e.with_addr(addr))
}
}
@@ -531,53 +539,29 @@ impl Default for MmioSecondLevel {
#[allow(unused_variables)]
pub trait MemDeviceInterface {
- fn write_dword(&self, addr: u64, value: u64) -> Result<(), MemoryException> {
- Err(MemoryException {
- type_: MemoryExceptionType::AccessFault,
- addr,
- })
+ fn write_dword(&self, addr: u64, value: u64) -> Result<(), MemoryExceptionType> {
+ Err(MemoryExceptionType::AccessFault)
}
- fn write_word(&self, addr: u64, value: u32) -> Result<(), MemoryException> {
- Err(MemoryException {
- type_: MemoryExceptionType::AccessFault,
- addr,
- })
+ fn write_word(&self, addr: u64, value: u32) -> Result<(), MemoryExceptionType> {
+ Err(MemoryExceptionType::AccessFault)
}
- fn write_hword(&self, addr: u64, value: u16) -> Result<(), MemoryException> {
- Err(MemoryException {
- type_: MemoryExceptionType::AccessFault,
- addr,
- })
+ fn write_hword(&self, addr: u64, value: u16) -> Result<(), MemoryExceptionType> {
+ Err(MemoryExceptionType::AccessFault)
}
- fn write_byte(&self, addr: u64, value: u8) -> Result<(), MemoryException> {
- Err(MemoryException {
- type_: MemoryExceptionType::AccessFault,
- addr,
- })
+ fn write_byte(&self, addr: u64, value: u8) -> Result<(), MemoryExceptionType> {
+ Err(MemoryExceptionType::AccessFault)
}
- fn read_dword(&self, addr: u64) -> Result<u64, MemoryException> {
- Err(MemoryException {
- type_: MemoryExceptionType::AccessFault,
- addr,
- })
+ fn read_dword(&self, addr: u64) -> Result<u64, MemoryExceptionType> {
+ Err(MemoryExceptionType::AccessFault)
}
- fn read_word(&self, addr: u64) -> Result<u32, MemoryException> {
- Err(MemoryException {
- type_: MemoryExceptionType::AccessFault,
- addr,
- })
+ fn read_word(&self, addr: u64) -> Result<u32, MemoryExceptionType> {
+ Err(MemoryExceptionType::AccessFault)
}
- fn read_hword(&self, addr: u64) -> Result<u16, MemoryException> {
- Err(MemoryException {
- type_: MemoryExceptionType::AccessFault,
- addr,
- })
+ fn read_hword(&self, addr: u64) -> Result<u16, MemoryExceptionType> {
+ Err(MemoryExceptionType::AccessFault)
}
- fn read_byte(&self, addr: u64) -> Result<u8, MemoryException> {
- Err(MemoryException {
- type_: MemoryExceptionType::AccessFault,
- addr,
- })
+ fn read_byte(&self, addr: u64) -> Result<u8, MemoryExceptionType> {
+ Err(MemoryExceptionType::AccessFault)
}
}