diff --git a/src/mem.rs b/src/mem.rs index bbaaf38..3ee2791 100644 --- a/src/mem.rs +++ b/src/mem.rs @@ -30,6 +30,15 @@ impl MemConfig { None } + pub fn memory_mapping_type(&self, page: PageNum) -> Option { + if page_in_range(page, self.ram_start, self.ram.pages) { + Some(MemoryMappingType::RAM) + } else { + self.find_device_by_page(page) + .map(|_x| MemoryMappingType::MMIO) + } + } + pub fn read_dword(&self, page: PageNum, offset: u16) -> Result { if page_in_range(page, self.ram_start, self.ram.pages) { self.ram.read_dword(page - self.ram_start, offset) @@ -168,6 +177,12 @@ fn page_in_range(page: PageNum, start: PageNum, pages: PageNum) -> bool { page >= start && page - start < pages } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum MemoryMappingType { + MMIO, + RAM, +} + pub struct Ram { buf: MmapMut, pages: PageNum,