Allow identification of the type of memory (ram or mmio) backing a specific page
This commit is contained in:
15
src/mem.rs
15
src/mem.rs
@@ -30,6 +30,15 @@ impl MemConfig {
|
||||
None
|
||||
}
|
||||
|
||||
pub fn memory_mapping_type(&self, page: PageNum) -> Option<MemoryMappingType> {
|
||||
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<DWord, MemAccessFault> {
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user