From: Alice Ryhl <aliceryhl@google.com>
To: Danilo Krummrich <dakr@kernel.org>
Cc: akpm@linux-foundation.org, ojeda@kernel.org,
alex.gaynor@gmail.com, boqun.feng@gmail.com, gary@garyguo.net,
bjorn3_gh@protonmail.com, lossin@kernel.org,
a.hindborg@kernel.org, tmgross@umich.edu,
abdiel.janulgue@gmail.com, acourbot@nvidia.com, jgg@ziepe.ca,
lyude@redhat.com, robin.murphy@arm.com,
daniel.almeida@collabora.com, rust-for-linux@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/4] rust: dma: implement DataDirection
Date: Mon, 18 Aug 2025 09:34:38 +0000 [thread overview]
Message-ID: <aKLzrp0m00J6CCYz@google.com> (raw)
In-Reply-To: <20250815171058.299270-2-dakr@kernel.org>
On Fri, Aug 15, 2025 at 07:10:02PM +0200, Danilo Krummrich wrote:
> Add the `DataDirection` struct, a newtype wrapper around the C
> `enum dma_data_direction`.
>
> This provides a type-safe Rust interface for specifying the direction of
> DMA transfers.
>
> Signed-off-by: Danilo Krummrich <dakr@kernel.org>
> +/// DMA data direction.
> +///
> +/// Corresponds to the C [`enum dma_data_direction`].
> +///
> +/// [`enum dma_data_direction`]: srctree/include/linux/dma-direction.h
> +#[derive(Copy, Clone, PartialEq, Eq)]
> +pub struct DataDirection(bindings::dma_data_direction);
Perhaps this should be a real Rust enum so that you can do an exhaustive
match?
> +impl DataDirection {
> + /// The DMA mapping is for bidirectional data transfer.
> + ///
> + /// This is used when the buffer can be both read from and written to by the device.
> + /// The cache for the corresponding memory region is both flushed and invalidated.
> + pub const BIDIRECTIONAL: DataDirection =
> + DataDirection(bindings::dma_data_direction_DMA_BIDIRECTIONAL);
> +
> + /// The DMA mapping is for data transfer from memory to the device (write).
> + ///
> + /// The CPU has prepared data in the buffer, and the device will read it.
> + /// The cache for the corresponding memory region is flushed.
> + pub const TO_DEVICE: DataDirection = DataDirection(bindings::dma_data_direction_DMA_TO_DEVICE);
> +
> + /// The DMA mapping is for data transfer from the device to memory (read).
> + ///
> + /// The device will write data into the buffer for the CPU to read.
> + /// The cache for the corresponding memory region is invalidated before CPU access.
> + pub const FROM_DEVICE: DataDirection =
> + DataDirection(bindings::dma_data_direction_DMA_FROM_DEVICE);
> +
> + /// The DMA mapping is not for data transfer.
> + ///
> + /// This is primarily for debugging purposes. With this direction, the DMA mapping API
> + /// will not perform any cache coherency operations.
> + pub const NONE: DataDirection = DataDirection(bindings::dma_data_direction_DMA_NONE);
> +
> + /// Returns the raw representation of [`enum dma_data_direction`].
> + pub fn as_raw(self) -> bindings::dma_data_direction {
> + self.0
> + }
> +}
next prev parent reply other threads:[~2025-08-18 9:34 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-15 17:10 [PATCH 0/4] Rust infrastructure for sg_table and scatterlist Danilo Krummrich
2025-08-15 17:10 ` [PATCH 1/4] rust: dma: implement DataDirection Danilo Krummrich
2025-08-18 9:34 ` Alice Ryhl [this message]
2025-08-18 11:27 ` Danilo Krummrich
2025-08-18 11:56 ` Miguel Ojeda
2025-08-18 12:24 ` Miguel Ojeda
2025-08-18 20:42 ` Danilo Krummrich
2025-08-18 12:22 ` Alice Ryhl
2025-08-18 12:57 ` Danilo Krummrich
2025-08-18 14:00 ` Alice Ryhl
2025-08-18 17:23 ` Danilo Krummrich
2025-08-18 18:47 ` Alice Ryhl
2025-08-18 21:03 ` Danilo Krummrich
2025-08-20 13:17 ` Daniel Almeida
2025-08-20 13:40 ` Danilo Krummrich
2025-08-15 17:10 ` [PATCH 2/4] rust: scatterlist: Add type-state abstraction for sg_table Danilo Krummrich
2025-08-18 9:52 ` Alice Ryhl
2025-08-18 11:16 ` Danilo Krummrich
2025-08-18 12:21 ` Danilo Krummrich
2025-08-18 13:12 ` Danilo Krummrich
2025-08-18 12:27 ` Alice Ryhl
2025-08-18 12:37 ` Danilo Krummrich
2025-08-20 17:08 ` Daniel Almeida
2025-08-20 18:59 ` Danilo Krummrich
2025-08-15 17:10 ` [PATCH 3/4] samples: rust: dma: add sample code for SGTable Danilo Krummrich
2025-08-15 17:10 ` [PATCH 4/4] MAINTAINERS: rust: dma: add scatterlist files Danilo Krummrich
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=aKLzrp0m00J6CCYz@google.com \
--to=aliceryhl@google.com \
--cc=a.hindborg@kernel.org \
--cc=abdiel.janulgue@gmail.com \
--cc=acourbot@nvidia.com \
--cc=akpm@linux-foundation.org \
--cc=alex.gaynor@gmail.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=gary@garyguo.net \
--cc=jgg@ziepe.ca \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=lyude@redhat.com \
--cc=ojeda@kernel.org \
--cc=robin.murphy@arm.com \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
/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.