From 039afedbc80eea82266c324b6548d59dcd746098 Mon Sep 17 00:00:00 2001 From: Nathan Lee Date: Wed, 17 Jun 2026 13:03:33 -0500 Subject: fix memory issues and add basic device discovery discuss: pci/dtb device discovery? now that the x0 issue is fixed it is entirely possible. --- src/mem.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/mem.rs') diff --git a/src/mem.rs b/src/mem.rs index 7458c67..2043aa1 100644 --- a/src/mem.rs +++ b/src/mem.rs @@ -38,10 +38,11 @@ impl Memory { return Some(i); } } + eprintln!("tried to allocate {:X} but there are no more pages!", virtual_addr); None } - pub fn lookup_page(&mut self, virtual_addr: usize, permission: usize) -> Option { + fn lookup_page(&mut self, virtual_addr: usize, permission: usize) -> Option { for (i, page) in self.pages.iter().enumerate() { if page.virtual_addr == virtual_addr && permission >= page.permission @@ -50,7 +51,7 @@ impl Memory { return Some(i); } } - return self.create_page(virtual_addr, permission); + self.create_page(virtual_addr, permission) } pub fn ro_lookup(&self, virtual_addr: usize, permission: usize) -> Option { @@ -62,6 +63,7 @@ impl Memory { return Some(i); } } + println!("virtual_addr {:X} is not allocated", virtual_addr); None } @@ -69,21 +71,22 @@ impl Memory { let page = address & PAGE_MASK; let offset = address - page; - if let Some(page) = self.lookup_page(address, permission) { + if let Some(page) = self.lookup_page(page, permission) { self.memory[self.pages[page].real_addr + offset] = value; - Ok(()) - } else { - Err(()) + return Ok(()); } + Err(()) } pub fn read(&self, address: usize, permission: usize) -> Result { let page = address & PAGE_MASK; let offset = address - page; - if let Some(page) = self.ro_lookup(address, permission) { + if let Some(page) = self.ro_lookup(page, permission) { Ok(self.memory[self.pages[page].real_addr + offset]) } else { + println!("address {:X} is not allocated", address); + Err(()) } } -- cgit v1.2.3