def fld.unit

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

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

64def fld.unit(+f: AmlFieldDesc, +k: Nat) -> AmlUnit:
65  match f:
66    case AmlFieldDesc{sp, +base, +rlen, +off, +bits, +flags}:
67      +w = AmlField.unit(flags)
68      +ubits = Nat.mul(w, 8n)
69      +start = Nat.mul(k, ubits)
70      +lo = fld.max(off, start)
71      +hi = fld.min(Nat.add(off, bits), Nat.add(start, ubits))
72      AmlUnit{W.W64.add(base, W.W64.from_nat(Nat.mul(k, w))), Nat.sub(lo, start), Nat.sub(hi, lo), Nat.sub(lo, off), W.W64.is_le(W.W64.from_nat(Nat.mul(Nat.add(k, 1n), w)), rlen)}

Uses (12)

Used by (4)