Re: [PATCH v2 05/11] rust: io: restrict untyped IO access and `register!` to `Region`

Andreas Hindborg
2026-04-28T09:02:54Z

Gary Guo <gary@garyguo.net> writes:

> Currently the `Io` trait exposes a bunch of untyped IO accesses, but if the
> `Io` region itself is typed, then it might be weird to have
>
> let io: Mmio<u32> = /* ... */;
> io.read8(1);
>
> while not unsound, it is surely strange. Thus, restrict the untyped methods
> and also the register macro to `Region` type only.
>
> The way it is implemented is by adding a generic type to `IoLoc`. This also
> paves the way to add typed register blocks in the future; for example, we
> could use this mechanism to block driver A's `register!()` generated macro
> from being used on driver B's MMIO. The same mechanism could be used for
> relative IO registers. These are future opoortunities, and for this patch I
> just restricted everything to require `IoLoc<Region<SIZE>, _>`.

Does this not prevent `usize` from being used to index anything but
`Mmio<Region<_>>`?

It is my understanding that the following would work before this patch:

fn do_read(io: &Mmio<u32>) -> Result {
let v: u32 = io.try_read(8usize)?;
Ok(())
}

But I think this will no longer work with this patch. Is that the intention?

Best regards,
Andreas Hindborg