kernel/acpi/aml/
mod.rs

1mod display;
2pub mod execution;
3mod parser;
4mod structured;
5
6use execution::{AmlExecutionError, DataObject, ExecutionContext};
7use parser::UnresolvedDataObject;
8
9pub use parser::{AmlCode, AmlParseError};
10use structured::StructuredAml;
11
12#[derive(Debug, Clone)]
13#[allow(dead_code)]
14pub struct Aml {
15    code: AmlCode,
16    structured: StructuredAml,
17}
18
19impl Aml {
20    pub fn parse(body: &[u8]) -> Result<Self, AmlParseError> {
21        let code = parser::parse_aml(body)?;
22        Ok(Self {
23            structured: StructuredAml::parse(&code),
24            code,
25        })
26    }
27
28    #[allow(dead_code)]
29    pub fn code(&self) -> &AmlCode {
30        &self.code
31    }
32
33    #[allow(dead_code)]
34    pub fn structured(&self) -> &StructuredAml {
35        &self.structured
36    }
37
38    #[allow(dead_code)]
39    pub fn execute(
40        &self,
41        ctx: &mut ExecutionContext,
42        label: &str,
43        args: &[UnresolvedDataObject],
44    ) -> Result<DataObject, AmlExecutionError> {
45        ctx.execute(&self.structured, label, args)
46    }
47}