def in.read_obj

bend-osdev-acpi@0.1.1.0 · aml_interp.bend:590

import bend-osdev-acpi@0.1.1.0/aml_interp.bend as AmlInterp
import Base
import bend-osdev-acpi@0.1.1.0/error.bend as E
import bend-osdev-acpi@0.1.1.0/aml_value.bend as V
import bend-osdev-acpi@0.1.1.0/aml_ns.bend as S
import bend-osdev-acpi@0.1.1.0/aml_host.bend as Hs

590# the value of a named object (alias followed): a field unit is read
591# through the host
592def in.read_obj(~H: Data, ~io: H -> Hs.AmlHostOp -> Result<&2, &2, E.AcpiError, Hs.AmlHostAns<H>>, +w: AmlWorld<H>, +p: String, o: Maybe<&2, S.AmlObject>) -> Result<&2, &2, E.AcpiError, AmlRead<H>>:
593  match o:
594    case None{}:
595      Fail{E.AcpiAmlUndefined{p}}
596    case Some{S.AmlOData{v}}:
597      Done{AmlRead{w, v}}
598    case Some{S.AmlOField{r, +off, +bits, +flags}}:
599      in.field.rd(~H, ~io, Nat.is_le(bits, 64n), w, in.desc(AmlWorld.ns(H, w), r, off, bits, flags))
600    case Some{S.AmlOIndexField{i, d, +off, +bits, +flags}}:
601      in.ixfield.rd(~H, ~io, in.fdesc(S.AmlNs.get(AmlWorld.ns(H, w), i), AmlWorld.ns(H, w)), in.fdesc(S.AmlNs.get(AmlWorld.ns(H, w), d), AmlWorld.ns(H, w)), in.ix.desc(AmlWorld.ns(H, w), off, bits, flags), w)
602    case Some{S.AmlOBufField{l, +off, +bits}}:
603      in.bf.rd(H, in.wide(H, w), w, in.read_data(H, w, l), off, bits)
604    case Some{+obj}:
605      Done{AmlRead{w, V.AmlObj{p, S.AmlObject.type(obj)}}}

Uses (22)

Used by (3)