]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
rust: io: separate generic I/O helpers from MMIO implementation
authorZhi Wang <zhiw@nvidia.com>
Wed, 21 Jan 2026 20:22:08 +0000 (22:22 +0200)
committerDanilo Krummrich <dakr@kernel.org>
Fri, 23 Jan 2026 20:20:11 +0000 (21:20 +0100)
commit121d87b28e1d9061d3aaa156c43a627d3cb5e620
treec0f45e4b093d2525dea5648ddd52105ae5f4ae99
parent7043698aee6b6f61415ebb49b7e95fdfb9373a77
rust: io: separate generic I/O helpers from MMIO implementation

The previous Io<SIZE> type combined both the generic I/O access helpers
and MMIO implementation details in a single struct. This coupling prevented
reusing the I/O helpers for other backends, such as PCI configuration
space.

Establish a clean separation between the I/O interface and concrete
backends by separating generic I/O helpers from MMIO implementation.

Introduce a new trait hierarchy to handle different access capabilities:

- IoCapable<T>: A marker trait indicating that a backend supports I/O
  operations of a certain type (u8, u16, u32, or u64).

- Io trait: Defines fallible (try_read8, try_write8, etc.) and infallibile
  (read8, write8, etc.) I/O methods with runtime bounds checking and
  compile-time bounds checking.

- IoKnownSize trait: The marker trait for types support infallible I/O
  methods.

Move the MMIO-specific logic into a dedicated Mmio<SIZE> type that
implements the Io traits. Rename IoRaw to MmioRaw and update consumers to
use the new types.

Cc: Alexandre Courbot <acourbot@nvidia.com>
Cc: Alice Ryhl <aliceryhl@google.com>
Cc: Bjorn Helgaas <helgaas@kernel.org>
Cc: Gary Guo <gary@garyguo.net>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: John Hubbard <jhubbard@nvidia.com>
Signed-off-by: Zhi Wang <zhiw@nvidia.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Gary Guo <gary@garyguo.net>
Link: https://patch.msgid.link/20260121202212.4438-3-zhiw@nvidia.com
[ Add #[expect(unused)] to define_{read,write}!(). - Danilo ]
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
drivers/gpu/drm/tyr/regs.rs
drivers/gpu/nova-core/gsp/sequencer.rs
drivers/gpu/nova-core/regs/macros.rs
drivers/gpu/nova-core/vbios.rs
drivers/pwm/pwm_th1520.rs
rust/kernel/devres.rs
rust/kernel/io.rs
rust/kernel/io/mem.rs
rust/kernel/io/poll.rs
rust/kernel/pci/io.rs
samples/rust/rust_driver_pci.rs