Trait probe_rs::MemoryInterface
source · [−]pub trait MemoryInterface {
Show 17 methods
fn supports_native_64bit_access(&mut self) -> bool;
fn read_word_64(&mut self, address: u64) -> Result<u64, Error>;
fn read_word_32(&mut self, address: u64) -> Result<u32, Error>;
fn read_word_8(&mut self, address: u64) -> Result<u8, Error>;
fn read_64(&mut self, address: u64, data: &mut [u64]) -> Result<(), Error>;
fn read_32(&mut self, address: u64, data: &mut [u32]) -> Result<(), Error>;
fn read_8(&mut self, address: u64, data: &mut [u8]) -> Result<(), Error>;
fn write_word_64(&mut self, address: u64, data: u64) -> Result<(), Error>;
fn write_word_32(&mut self, address: u64, data: u32) -> Result<(), Error>;
fn write_word_8(&mut self, address: u64, data: u8) -> Result<(), Error>;
fn write_64(&mut self, address: u64, data: &[u64]) -> Result<(), Error>;
fn write_32(&mut self, address: u64, data: &[u32]) -> Result<(), Error>;
fn write_8(&mut self, address: u64, data: &[u8]) -> Result<(), Error>;
fn flush(&mut self) -> Result<(), Error>;
fn read_mem_64bit(
&mut self,
address: u64,
data: &mut [u8]
) -> Result<(), Error> { ... }
fn read_mem_32bit(
&mut self,
address: u64,
data: &mut [u8]
) -> Result<(), Error> { ... }
fn read(&mut self, address: u64, data: &mut [u8]) -> Result<(), Error> { ... }
}
Expand description
An interface to be implemented for drivers that allow target memory access.
Required Methods
fn supports_native_64bit_access(&mut self) -> bool
fn supports_native_64bit_access(&mut self) -> bool
Does this interface support native 64-bit wide accesses
If false all 64-bit operations may be split into 32 or 8 bit operations. Most callers will not need to pivot on this but it can be useful for picking the fastest bulk data transfer method.
Read a 64bit word of at address
.
The address where the read should be performed at has to be word aligned.
Returns AccessPortError::MemoryNotAligned
if this does not hold true.
Read a 32bit word of at address
.
The address where the read should be performed at has to be word aligned.
Returns AccessPortError::MemoryNotAligned
if this does not hold true.
Read a block of 64bit words at address
.
The number of words read is data.len()
.
The address where the read should be performed at has to be word aligned.
Returns AccessPortError::MemoryNotAligned
if this does not hold true.
Read a block of 32bit words at address
.
The number of words read is data.len()
.
The address where the read should be performed at has to be word aligned.
Returns AccessPortError::MemoryNotAligned
if this does not hold true.
Read a block of 8bit words at address
.
Write a 64bit word at address
.
The address where the write should be performed at has to be word aligned.
Returns AccessPortError::MemoryNotAligned
if this does not hold true.
Write a 32bit word at address
.
The address where the write should be performed at has to be word aligned.
Returns AccessPortError::MemoryNotAligned
if this does not hold true.
Write an 8bit word at address
.
Write a block of 64bit words at address
.
The number of words written is data.len()
.
The address where the write should be performed at has to be word aligned.
Returns AccessPortError::MemoryNotAligned
if this does not hold true.
Write a block of 32bit words at address
.
The number of words written is data.len()
.
The address where the write should be performed at has to be word aligned.
Returns AccessPortError::MemoryNotAligned
if this does not hold true.
Write a block of 8bit words at address
.
Flush any outstanding operations.
For performance, debug probe implementations may choose to batch writes;
to assure that any such batched writes have in fact been issued, flush
can be called. Takes no arguments, but may return failure if a batched
operation fails.
Provided Methods
Reads bytes using 64 bit memory access. Address must be 64 bit aligned and data must be an exact multiple of 8.
Reads bytes using 32 bit memory access. Address must be 32 bit aligned and data must be an exact multiple of 4.