def fld.bytes.rd

bend-osdev-acpi@0.1.1.0 · aml_field.bend:236

import bend-osdev-acpi@0.1.1.0/aml_field.bend as AmlField
import Base
import bend-osdev-word64@0.1.1.0/word64.bend as W
import bend-osdev-bytes@0.1.1.0/bytes.bend as B
import bend-osdev-acpi@0.1.1.0/error.bend as E
import bend-osdev-acpi@0.1.1.0/aml_host.bend as Hs

236# bytes j .. j + n of the field; r: the read of byte j - 1
237def fld.bytes.rd(~H: Data, ~io: H -> Hs.AmlHostOp -> Result<&2, &2, E.AcpiError, Hs.AmlHostAns<H>>, n: Nat, +f: AmlFieldDesc, +j: Nat, r: Result<&2, &2, E.AcpiError, Hs.AmlHostAns<H>>, acc: List<&2, U32>) -> Result<&2, &2, E.AcpiError, AmlFieldBuf<H>>:
238  match n:
239    case 0n:
240      match r:
241        case Fail{e}:
242          Fail{e}
243        case Done{Hs.AmlHostAns{h, v}}:
244          Done{AmlFieldBuf{h, B.Octets.of_list(fld.rev(Con{W.W64.lo(v), acc}, Nil{}))}}
245    case 1n+p:
246      match r:
247        case Fail{e}:
248          Fail{e}
249        case Done{Hs.AmlHostAns{h, v}}:
250          fld.bytes.rd(~H, ~io, p, f, 1n+j, AmlField.read_int(~H, ~io, fld.byte(f, j), h), Con{W.W64.lo(v), acc})

Uses (14)

Used by (1)