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
|
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> {
|
pub fn read_dword(&self, page: PageNum, offset: u16) -> Result<DWord, MemAccessFault> {
|
||||||
if page_in_range(page, self.ram_start, self.ram.pages) {
|
if page_in_range(page, self.ram_start, self.ram.pages) {
|
||||||
self.ram.read_dword(page - self.ram_start, offset)
|
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
|
page >= start && page - start < pages
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
|
pub enum MemoryMappingType {
|
||||||
|
MMIO,
|
||||||
|
RAM,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Ram {
|
pub struct Ram {
|
||||||
buf: MmapMut,
|
buf: MmapMut,
|
||||||
pages: PageNum,
|
pages: PageNum,
|
||||||
|
|||||||
Reference in New Issue
Block a user