virtfw-libhw 0.2.0

library for direct hardware access
Documentation
use crate::fwcfg::FwCfg;
use crate::mmio;

const MMIO_OFFSET_ITEM: u64 = 0x08;
const MMIO_OFFSET_DATA: u64 = 0x00;
const MMIO_OFFSET_DMA: u64 = 0x10;

pub struct FwCfgMmio {
    base: u64,
}

impl FwCfgMmio {
    pub const fn new(base: u64) -> Self {
        Self { base }
    }
}

impl FwCfg for FwCfgMmio {
    fn select(&self, item: u16) {
        mmio::writew(self.base + MMIO_OFFSET_ITEM, u16::swap_bytes(item));
    }

    fn read8(&self) -> u8 {
        mmio::readb(self.base + MMIO_OFFSET_DATA)
    }

    fn trigger_dma(&self, addr: usize) {
        mmio::writeq(
            self.base + MMIO_OFFSET_DMA,
            u64::swap_bytes(addr.try_into().unwrap()),
        );
    }
}