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

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§