From: Alice Ryhl <aliceryhl@google.com>
To: Alexandre Courbot <acourbot@nvidia.com>
Cc: "Danilo Krummrich" <dakr@kernel.org>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Miguel Ojeda" <ojeda@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Boqun Feng" <boqun@kernel.org>,
"Yury Norov" <yury.norov@gmail.com>,
"John Hubbard" <jhubbard@nvidia.com>,
"Alistair Popple" <apopple@nvidia.com>,
"Joel Fernandes" <joelagnelf@nvidia.com>,
"Timur Tabi" <ttabi@nvidia.com>, "Edwin Peer" <epeer@nvidia.com>,
"Eliot Courtney" <ecourtney@nvidia.com>,
"Dirk Behme" <dirk.behme@de.bosch.com>,
"Steven Price" <steven.price@arm.com>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 5/9] rust: io: add IoRef and IoWrite types
Date: Mon, 16 Feb 2026 09:01:05 +0000 [thread overview]
Message-ID: <aZLc0YMHd8C0bVD2@google.com> (raw)
In-Reply-To: <20260216-register-v6-5-eec9a4de9e9e@nvidia.com>
On Mon, Feb 16, 2026 at 05:04:41PM +0900, Alexandre Courbot wrote:
> I/O accesses are defined by the following properties:
>
> - For reads, a start address, a width, and a type to interpret the read
> value as,
> - For writes, the same as above, and a value to write.
>
> Introduce the `IoRef` trait, which allows implementing types to specify
> the address a type expects to be accessed at, as well as the width of
> the access, and the user-facing type used to perform the access.
>
> This allows read operations to be made generic with the `read` method
> over an `IoRef` argument.
>
> Write operations need a value to write on top of the `IoRef`: fulfill
> that purpose with the `IoWrite`, which is the combination of an `IoRef`
> and a value of the type it expects. This allows write operations to be
> made generic with the `write` method over a single `IoWrite` argument.
>
> The main purpose of these new entities is to allow register types to be
> written using these generic `read` and `write` methods of `Io`.
>
> Co-developed-by: Gary Guo <gary@garyguo.net>
> Signed-off-by: Gary Guo <gary@garyguo.net>
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> ---
> rust/kernel/io.rs | 243 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 243 insertions(+)
>
> diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs
> index b150743ffa4f..6da8593f7858 100644
> --- a/rust/kernel/io.rs
> +++ b/rust/kernel/io.rs
> @@ -173,6 +173,160 @@ pub trait IoCapable<T> {
> unsafe fn io_write(&self, value: T, address: usize);
> }
>
> +/// Reference to an I/O location, describing the offset, width, and return type of an access.
In the next patch you implement this for usize, but here you say it's a
reference to an I/O location. I'm pretty sure usize is not a reference
to an I/O location.
> +/// This trait is the key abstraction allowing [`Io::read`], [`Io::write`], and [`Io::update`]
> +/// to work uniformly with both raw `usize` offsets (for primitive types like `u32`) and typed
> +/// references.
> +///
> +/// An `IoRef<T>` carries three pieces of information:
> +///
> +/// - The offset to access (returned by [`IoRef::offset`]),
> +/// - The width of the access (determined by [`IoRef::IoType`]),
> +/// - The type `T` in which data is returned or provided.
> +///
> +/// `T` and `IoType` may differ: for instance, a typed register has `T` = the register type with
> +/// its bitfields, and `IoType` = its backing primitive (e.g. `u32`), with `From`/`Into`
> +/// conversions between them.
> +///
> +/// An `IoRef` can be passed directly to [`Io::read`] or [`Io::try_read`] to obtain a value, or
> +/// turned into an [`IoWrite`] via [`IoRef::set`] to be passed to [`Io::write`] or
> +/// [`Io::try_write`].
> +pub trait IoRef<T>: Copy
> +where
> + T: From<Self::IoType> + Into<Self::IoType>,
Prefer to use Into for trait bounds:
where
T: Into<Self::IoType>,
Self::IoType: Into<T>,
Alice
next prev parent reply other threads:[~2026-02-16 9:01 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-16 8:04 [PATCH v6 0/9] rust: add `register!` macro Alexandre Courbot
2026-02-16 8:04 ` [PATCH v6 1/9] rust: enable the `generic_arg_infer` feature Alexandre Courbot
2026-02-16 8:04 ` [PATCH v6 2/9] rust: num: add `shr` and `shl` methods to `Bounded` Alexandre Courbot
2026-02-16 8:55 ` Alice Ryhl
2026-02-16 8:04 ` [PATCH v6 3/9] rust: num: add `into_bool` method " Alexandre Courbot
2026-02-16 8:04 ` [PATCH v6 4/9] rust: num: make Bounded::get const Alexandre Courbot
2026-02-16 8:56 ` Alice Ryhl
2026-02-16 9:16 ` Gary Guo
2026-02-16 8:04 ` [PATCH v6 5/9] rust: io: add IoRef and IoWrite types Alexandre Courbot
2026-02-16 9:01 ` Alice Ryhl [this message]
2026-02-16 9:36 ` Alexandre Courbot
2026-02-16 10:35 ` Alice Ryhl
2026-02-16 10:52 ` Alexandre Courbot
2026-02-20 6:38 ` Alexandre Courbot
2026-02-20 8:18 ` Alice Ryhl
2026-02-20 14:45 ` Alexandre Courbot
2026-02-21 8:43 ` Alice Ryhl
2026-02-16 8:04 ` [PATCH v6 6/9] rust: io: use generic read/write accessors for primitive accesses Alexandre Courbot
2026-02-16 8:04 ` [PATCH v6 7/9] rust: io: add `register!` macro Alexandre Courbot
2026-02-16 8:04 ` [PATCH v6 8/9] sample: rust: pci: use " Alexandre Courbot
2026-02-16 8:04 ` [PATCH FOR REFERENCE v6 9/9] gpu: nova-core: use the kernel " Alexandre Courbot
2026-02-20 13:20 ` [PATCH v6 0/9] rust: add " Dirk Behme
2026-02-22 13:25 ` Alexandre Courbot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aZLc0YMHd8C0bVD2@google.com \
--to=aliceryhl@google.com \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=apopple@nvidia.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dirk.behme@de.bosch.com \
--cc=ecourtney@nvidia.com \
--cc=epeer@nvidia.com \
--cc=gary@garyguo.net \
--cc=jhubbard@nvidia.com \
--cc=joelagnelf@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=steven.price@arm.com \
--cc=tmgross@umich.edu \
--cc=ttabi@nvidia.com \
--cc=yury.norov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.