def madt.typed
bend-osdev-acpi@0.1.1.0 · madt.bend:122
import bend-osdev-acpi@0.1.1.0/madt.bend as Madt
import Base
import bend-osdev-bytes@0.1.1.0/bytes.bend as B
import bend-osdev-acpi@0.1.1.0/fields.bend as F
122def madt.typed(k: Nat, +d: B.Octets) -> AcpiMadtEntry:
123 match k:
124 case 0n:
125 AcpiMadtLapic{F.AcpiF.u8(d, 2n), F.AcpiF.u8(d, 3n), F.AcpiF.u32(d, 4n)}
126 case 1n:
127 AcpiMadtIoApic{F.AcpiF.u8(d, 2n), F.AcpiF.u32(d, 4n), F.AcpiF.u32(d, 8n)}
128 case 2n:
129 AcpiMadtIso{F.AcpiF.u8(d, 2n), F.AcpiF.u8(d, 3n), F.AcpiF.u32(d, 4n), F.AcpiF.u16(d, 8n)}
130 case 3n:
131 AcpiMadtNmiSource{F.AcpiF.u16(d, 2n), F.AcpiF.u32(d, 4n)}
132 case 4n:
133 AcpiMadtLapicNmi{F.AcpiF.u8(d, 2n), F.AcpiF.u16(d, 3n), F.AcpiF.u8(d, 5n)}
134 case 5n:
135 AcpiMadtLapicOverride{F.AcpiF.u64(d, 4n)}
136 case 9n:
137 AcpiMadtX2apic{F.AcpiF.u32(d, 4n), F.AcpiF.u32(d, 8n), F.AcpiF.u32(d, 12n)}
138 case 10n:
139 AcpiMadtX2apicNmi{F.AcpiF.u16(d, 2n), F.AcpiF.u32(d, 4n), F.AcpiF.u8(d, 8n)}
140 case 11n:
141 madt.gicc(d)
142 case 12n:
143 AcpiMadtGicd{F.AcpiF.u32(d, 4n), F.AcpiF.u64(d, 8n), F.AcpiF.u8(d, 20n)}
144 case 13n:
145 AcpiMadtGicMsi{F.AcpiF.u32(d, 4n), F.AcpiF.u64(d, 8n), F.AcpiF.u32(d, 16n), F.AcpiF.u16(d, 20n), F.AcpiF.u16(d, 22n)}
146 case 14n:
147 AcpiMadtGicr{F.AcpiF.u64(d, 4n), F.AcpiF.u32(d, 12n)}
148 case 15n:
149 AcpiMadtGicIts{F.AcpiF.u32(d, 4n), F.AcpiF.u64(d, 8n)}
150 case 16n:
151 AcpiMadtWakeup{F.AcpiF.u16(d, 2n), F.AcpiF.u64(d, 8n)}
152 case _:
153 AcpiMadtOther{F.AcpiF.u8(d, 0n), B.Octets.drop(2n, d)}