summaryrefslogtreecommitdiff
path: root/rust/kernel/device.rs
diff options
context:
space:
mode:
authorDanilo Krummrich <dakr@kernel.org>2025-04-13 19:36:57 +0200
committerDanilo Krummrich <dakr@kernel.org>2025-04-17 15:21:27 +0200
commitfbb92b6a534081cabd75861ac9c7a8d29d8effda (patch)
treedabca481e3313c4be4a3badb3cba61d0db20b5c1 /rust/kernel/device.rs
parentcb271c2edfd0ab7204d5ef3c9d5ae9a0710f5bf2 (diff)
rust: device: implement impl_device_context_into_aref!
Implement a macro to implement all From conversions of a certain device to ARef<Device>. This avoids unnecessary boiler plate code for every device implementation. Reviewed-by: Benno Lossin <benno.lossin@proton.me> Link: https://lore.kernel.org/r/20250413173758.12068-3-dakr@kernel.org [ Add missing `::` prefix in macros. - Danilo ] Signed-off-by: Danilo Krummrich <dakr@kernel.org>
Diffstat (limited to 'rust/kernel/device.rs')
-rw-r--r--rust/kernel/device.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/rust/kernel/device.rs b/rust/kernel/device.rs
index 9520e054996d..7b96c99879a6 100644
--- a/rust/kernel/device.rs
+++ b/rust/kernel/device.rs
@@ -281,6 +281,27 @@ macro_rules! impl_device_context_deref {
#[doc(hidden)]
#[macro_export]
+macro_rules! __impl_device_context_into_aref {
+ ($src:ty, $device:tt) => {
+ impl ::core::convert::From<&$device<$src>> for $crate::types::ARef<$device> {
+ fn from(dev: &$device<$src>) -> Self {
+ (&**dev).into()
+ }
+ }
+ };
+}
+
+/// Implement [`core::convert::From`], such that all `&Device<Ctx>` can be converted to an
+/// `ARef<Device>`.
+#[macro_export]
+macro_rules! impl_device_context_into_aref {
+ ($device:tt) => {
+ ::kernel::__impl_device_context_into_aref!($crate::device::Core, $device);
+ };
+}
+
+#[doc(hidden)]
+#[macro_export]
macro_rules! dev_printk {
($method:ident, $dev:expr, $($f:tt)*) => {
{