Skip to main content

DeviceMmio

Trait DeviceMmio 

Source
pub trait DeviceMmio {
    // Required methods
    fn mmio_read(
        &self,
        base: MmioAddress,
        offset: MmioAddressOffset,
        data: &mut [u8],
    );
    fn mmio_write(
        &self,
        base: MmioAddress,
        offset: MmioAddressOffset,
        data: &[u8],
    );
}
Expand description

Allows a device to be attached to a MMIO bus.

§Example

struct DummyDevice {
    config: Mutex<u32>,
}

impl DeviceMmio for DummyDevice {
    fn mmio_read(&self, _base: MmioAddress, _offset: MmioAddressOffset, data: &mut [u8]) {
        if data.len() > 4 {
            return;
        }
        for (idx, iter) in data.iter_mut().enumerate() {
            let config = self.config.lock().expect("failed to acquire lock");
            *iter = (*config >> (idx * 8) & 0xff) as u8;
        }
    }

    fn mmio_write(&self, _base: MmioAddress, _offset: MmioAddressOffset, data: &[u8]) {
        let mut config = self.config.lock().expect("failed to acquire lock");
        *config = u32::from(data[0]) & 0xff;
    }
}

Required Methods§

Source

fn mmio_read( &self, base: MmioAddress, offset: MmioAddressOffset, data: &mut [u8], )

Handle a read operation on the device.

§Arguments
  • base: base address on a MMIO bus
  • offset: base address’ offset
  • data: a buffer provided by the caller to store the read data
Source

fn mmio_write(&self, base: MmioAddress, offset: MmioAddressOffset, data: &[u8])

Handle a write operation to the device.

§Arguments
  • base: base address on a MMIO bus
  • offset: base address’ offset
  • data: a buffer provided by the caller holding the data to write

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<T: DeviceMmio + ?Sized> DeviceMmio for Arc<T>

Source§

fn mmio_read( &self, base: MmioAddress, offset: MmioAddressOffset, data: &mut [u8], )

Source§

fn mmio_write(&self, base: MmioAddress, offset: MmioAddressOffset, data: &[u8])

Source§

impl<T: MutDeviceMmio + ?Sized> DeviceMmio for Mutex<T>

Source§

fn mmio_read( &self, base: MmioAddress, offset: MmioAddressOffset, data: &mut [u8], )

Source§

fn mmio_write(&self, base: MmioAddress, offset: MmioAddressOffset, data: &[u8])

Implementors§