From 21a8479ce99f54012150cc948ed7e5bb066c61e0 Mon Sep 17 00:00:00 2001 From: taitep Date: Wed, 31 Dec 2025 13:16:32 +0100 Subject: Make MMIO devices not have control of the address of exceptions --- src/mem.rs | 80 +++++++++++++++++++++++++------------------------------------- 1 file changed, 32 insertions(+), 48 deletions(-) (limited to 'src/mem.rs') 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 { @@ -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 { @@ -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 { @@ -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 { - Err(MemoryException { - type_: MemoryExceptionType::AccessFault, - addr, - }) + fn read_dword(&self, addr: u64) -> Result { + Err(MemoryExceptionType::AccessFault) } - fn read_word(&self, addr: u64) -> Result { - Err(MemoryException { - type_: MemoryExceptionType::AccessFault, - addr, - }) + fn read_word(&self, addr: u64) -> Result { + Err(MemoryExceptionType::AccessFault) } - fn read_hword(&self, addr: u64) -> Result { - Err(MemoryException { - type_: MemoryExceptionType::AccessFault, - addr, - }) + fn read_hword(&self, addr: u64) -> Result { + Err(MemoryExceptionType::AccessFault) } - fn read_byte(&self, addr: u64) -> Result { - Err(MemoryException { - type_: MemoryExceptionType::AccessFault, - addr, - }) + fn read_byte(&self, addr: u64) -> Result { + Err(MemoryExceptionType::AccessFault) } } -- cgit v1.2.3