def slit.body

bend-osdev-acpi@0.1.1.0 · slit.bend:28

import bend-osdev-acpi@0.1.1.0/slit.bend as Slit
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/header.bend as H
import bend-osdev-acpi@0.1.1.0/fields.bend as F

28def slit.body(ok: Bool, +h: H.AcpiHeader, +body: B.Octets) -> Result<&2, &2, E.AcpiError, AcpiSlit>:
29  match ok:
30    case False{}:
31      Fail{E.AcpiTooShort{44n, Nat.add(36n, B.Octets.len(body))}}
32    case True{}:
33      +big = F.AcpiF.u64(body, 0n)
34      +n = U32.to_nat(W.W64.lo(big))
35      slit.mk(Bool.and(U32.is_eq(W.W64.hi(big), 0), Bool.and(U32.is_lt(W.W64.lo(big), 65536), Nat.is_le(Nat.add(8n, Nat.mul(n, n)), B.Octets.len(body)))), h, n, body)

Uses (18)

Used by (1)