acpi 6.1.1

A pure-Rust library for interacting with ACPI
Documentation
use crate::aml::{AmlError, namespace::AmlName};

#[derive(Clone, Debug)]
pub struct OpRegion {
    pub space: RegionSpace,
    pub base: u64,
    pub length: u64,
    pub parent_device_path: AmlName,
}

pub trait RegionHandler {
    fn read_u8(&self, region: &OpRegion) -> Result<u8, AmlError>;
    fn read_u16(&self, region: &OpRegion) -> Result<u16, AmlError>;
    fn read_u32(&self, region: &OpRegion) -> Result<u32, AmlError>;
    fn read_u64(&self, region: &OpRegion) -> Result<u64, AmlError>;

    fn write_u8(&self, region: &OpRegion, value: u8) -> Result<(), AmlError>;
    fn write_u16(&self, region: &OpRegion, value: u16) -> Result<(), AmlError>;
    fn write_u32(&self, region: &OpRegion, value: u32) -> Result<(), AmlError>;
    fn write_u64(&self, region: &OpRegion, value: u64) -> Result<(), AmlError>;
}

#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)]
pub enum RegionSpace {
    SystemMemory,
    SystemIO,
    PciConfig,
    EmbeddedControl,
    SmBus,
    SystemCmos,
    PciBarTarget,
    Ipmi,
    GeneralPurposeIo,
    GenericSerialBus,
    Pcc,
    Oem(u8),
}

impl From<u8> for RegionSpace {
    fn from(value: u8) -> Self {
        match value {
            0 => RegionSpace::SystemMemory,
            1 => RegionSpace::SystemIO,
            2 => RegionSpace::PciConfig,
            3 => RegionSpace::EmbeddedControl,
            4 => RegionSpace::SmBus,
            5 => RegionSpace::SystemCmos,
            6 => RegionSpace::PciBarTarget,
            7 => RegionSpace::Ipmi,
            8 => RegionSpace::GeneralPurposeIo,
            9 => RegionSpace::GenericSerialBus,
            10 => RegionSpace::Pcc,
            _ => RegionSpace::Oem(value),
        }
    }
}