[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250620154334.298320-1-igor.korotin.linux@gmail.com>
Date: Fri, 20 Jun 2025 16:43:34 +0100
From: Igor Korotin <igor.korotin.linux@...il.com>
To: "Rafael J . Wysocki" <rafael@...nel.org>,
Alex Gaynor <alex.gaynor@...il.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Miguel Ojeda <ojeda@...nel.org>,
Rob Herring <robh@...nel.org>,
Saravana Kannan <saravanak@...gle.com>
Cc: Alex Hung <alex.hung@....com>,
Andrew Morton <akpm@...ux-foundation.org>,
Igor Korotin <igor.korotin.linux@...il.com>,
Jakub Kicinski <kuba@...nel.org>,
Jonathan Cameron <Jonathan.Cameron@...wei.com>,
Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>,
Mauro Carvalho Chehab <mchehab+huawei@...nel.org>,
Remo Senekowitsch <remo@...nzli.dev>,
Tamir Duberstein <tamird@...il.com>,
Viresh Kumar <viresh.kumar@...aro.org>,
Wedson Almeida Filho <wedsonaf@...il.com>,
Xiangfei Ding <dingxiangfei2009@...il.com>,
devicetree@...r.kernel.org,
linux-acpi@...r.kernel.org,
linux-kernel@...r.kernel.org,
rust-for-linux@...r.kernel.org,
Björn Roy Baron <bjorn3_gh@...tonmail.com>,
Alice Ryhl <aliceryhl@...gle.com>,
Andreas Hindborg <a.hindborg@...nel.org>,
Benno Lossin <lossin@...nel.org>,
Boqun Feng <boqun.feng@...il.com>,
Danilo Krummrich <dakr@...nel.org>,
Gary Guo <gary@...yguo.net>,
Len Brown <lenb@...nel.org>,
Trevor Gross <tmgross@...ch.edu>
Subject: [PATCH v8 8/9] rust: platform: Add ACPI match table support to `Driver` trait
Extend the `platform::Driver` trait to support ACPI device matching by
adding the `ACPI_ID_TABLE` constant.
This allows Rust platform drivers to define ACPI match tables alongside
their existing OF match tables. These changes mirror the existing OF
support and allow Rust platform drivers to match devices based on ACPI
identifiers.
Signed-off-by: Igor Korotin <igor.korotin.linux@...il.com>
---
rust/kernel/platform.rs | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/platform.rs b/rust/kernel/platform.rs
index 2436f55b579b..0d00ab9acef7 100644
--- a/rust/kernel/platform.rs
+++ b/rust/kernel/platform.rs
@@ -37,12 +37,18 @@ unsafe fn register(
None => core::ptr::null(),
};
+ let acpi_table = match T::ACPI_ID_TABLE {
+ Some(table) => table.as_ptr(),
+ None => core::ptr::null(),
+ };
+
// SAFETY: It's safe to set the fields of `struct platform_driver` on initialization.
unsafe {
(*pdrv.get()).driver.name = name.as_char_ptr();
(*pdrv.get()).probe = Some(Self::probe_callback);
(*pdrv.get()).remove = Some(Self::remove_callback);
(*pdrv.get()).driver.of_match_table = of_table;
+ (*pdrv.get()).driver.acpi_match_table = acpi_table;
}
// SAFETY: `pdrv` is guaranteed to be a valid `RegType`.
@@ -96,7 +102,7 @@ fn of_id_table() -> Option<of::IdTable<Self::IdInfo>> {
}
fn acpi_id_table() -> Option<acpi::IdTable<Self::IdInfo>> {
- None
+ T::ACPI_ID_TABLE
}
}
@@ -127,7 +133,7 @@ macro_rules! module_platform_driver {
/// # Example
///
///```
-/// # use kernel::{bindings, c_str, device::Core, of, platform};
+/// # use kernel::{acpi, bindings, c_str, device::Core, of, platform};
///
/// struct MyDriver;
///
@@ -140,9 +146,19 @@ macro_rules! module_platform_driver {
/// ]
/// );
///
+/// kernel::acpi_device_table!(
+/// ACPI_TABLE,
+/// MODULE_ACPI_TABLE,
+/// <MyDriver as platform::Driver>::IdInfo,
+/// [
+/// (acpi::DeviceId::new(b"TST0001"), ())
+/// ]
+/// );
+///
/// impl platform::Driver for MyDriver {
/// type IdInfo = ();
/// const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = Some(&OF_TABLE);
+/// const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = Some(&ACPI_TABLE);
///
/// fn probe(
/// _pdev: &platform::Device<Core>,
@@ -164,6 +180,9 @@ pub trait Driver: Send {
/// The table of OF device ids supported by the driver.
const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = None;
+ /// The table of ACPI device ids supported by the driver.
+ const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = None;
+
/// Platform driver probe.
///
/// Called when a new platform device is added or discovered.
--
2.43.0
Powered by blists - more mailing lists