dsdt.bend
bend-osdev-acpi@0.1.1.0 · 53 lines · 9 definitions
1
2
3
4
5
6
7import Base
8import bend-osdev-bytes@0.1.1.0/bytes.bend as B
9import bend-osdev-acpi@0.1.1.0/error.bend as E
10import bend-osdev-acpi@0.1.1.0/header.bend as H
11
12type AcpiAml is Data:
13 AcpiAml{header: H.AcpiHeader, aml: B.Octets}
14
15def AcpiAml.header(t: AcpiAml) -> H.AcpiHeader:
16 match t:
17 case AcpiAml{h, a}:
18 h
19
20def AcpiAml.aml(t: AcpiAml) -> B.Octets:
21 match t:
22 case AcpiAml{h, a}:
23 a
24
25
26def AcpiAml.wide(t: AcpiAml) -> Bool:
27 U32.is_le(2, H.AcpiHeader.revision(AcpiAml.header(t)))
28
29def AcpiAml.of_sdt(t: H.AcpiSdt) -> Result<&2, &2, E.AcpiError, AcpiAml>:
30 match t:
31 case H.AcpiSdt{h, body}:
32 Done{AcpiAml{h, body}}
33
34def aml.parse(r: Result<&2, &2, E.AcpiError, H.AcpiSdt>) -> Result<&2, &2, E.AcpiError, AcpiAml>:
35 match r:
36 case Fail{e}:
37 Fail{e}
38 case Done{t}:
39 AcpiAml.of_sdt(t)
40
41
42def AcpiAml.parse(+o: B.Octets) -> Result<&2, &2, E.AcpiError, AcpiAml>:
43 aml.parse(H.AcpiSdt.parse(o))
44
45def AcpiAml.parse_dsdt(+o: B.Octets) -> Result<&2, &2, E.AcpiError, AcpiAml>:
46 aml.parse(H.AcpiSdt.parse_sig(B.Octets.of_string("DSDT"), o))
47
48
49
50def AcpiAml.build(t: AcpiAml) -> B.Octets:
51 match t:
52 case AcpiAml{h, a}:
53 H.AcpiSdt.build(h, a)