MCPcopy Create free account
hub / github.com/LPC4/Full-Stack / MemoryAccess

Interface MemoryAccess

crates/virtual-machine/src/memory.rs:19–50  ·  view source on GitHub ↗

Every component in the memory hierarchy must implement this.

Source from the content-addressed store, hash-verified

17pub trait RamImage {
18 fn ram_len(&self) -> usize;
19 fn ram_base(&self) -> u64;
20 fn write_image_into(&self, buf: &mut [u8]);
21 fn load_image(&mut self, bytes: &[u8]);
22}
23
24/// Every component in the memory hierarchy must implement this.
25pub trait MemoryAccess {
26 fn read_byte(&mut self, addr: u64) -> Result<u8, VmError>;
27 fn read_halfword(&mut self, addr: u64) -> Result<u16, VmError> {
28 let lo = self.read_byte(addr)? as u16;
29 let hi = self.read_byte(addr + 1)? as u16;
30 Ok(lo | (hi << 8))
31 }
32 fn read_word(&mut self, addr: u64) -> Result<u32, VmError> {
33 let lo = self.read_halfword(addr)? as u32;
34 let hi = self.read_halfword(addr + 2)? as u32;
35 Ok(lo | (hi << 16))
36 }
37 fn read_doubleword(&mut self, addr: u64) -> Result<u64, VmError> {
38 let lo = self.read_word(addr)? as u64;
39 let hi = self.read_word(addr + 4)? as u64;
40 Ok(lo | (hi << 32))
41 }
42
43 fn write_byte(&mut self, addr: u64, data: u8) -> Result<(), VmError>;
44 fn write_halfword(&mut self, addr: u64, data: u16) -> Result<(), VmError> {
45 self.write_byte(addr, data as u8)?;
46 self.write_byte(addr + 1, (data >> 8) as u8)
47 }
48 fn write_word(&mut self, addr: u64, data: u32) -> Result<(), VmError> {
49 self.write_halfword(addr, data as u16)?;
50 self.write_halfword(addr + 2, (data >> 16) as u16)
51 }
52 fn write_doubleword(&mut self, addr: u64, data: u64) -> Result<(), VmError> {
53 self.write_word(addr, data as u32)?;

Callers 4

read_wordMethod · 0.45
read_doublewordMethod · 0.45
write_wordMethod · 0.45
write_doublewordMethod · 0.45

Implementers 11

bus.rscrates/virtual-machine/src/bus.rs
memory.rscrates/virtual-machine/src/memory.rs
keyboard.rscrates/virtual-machine/src/devices/key
framebuffer.rscrates/virtual-machine/src/devices/fra
clint.rscrates/virtual-machine/src/devices/cli
plic.rscrates/virtual-machine/src/devices/pli
uart.rscrates/virtual-machine/src/devices/uar
ram.rscrates/virtual-machine/src/memory/ram.
rom.rscrates/virtual-machine/src/memory/rom.
cache.rscrates/virtual-machine/src/memory/cach
vm_mmu.rscrates/virtual-machine/tests/vm_mmu.rs

Calls

no outgoing calls

Tested by

no test coverage detected