From nobody Sat Feb 7 11:56:16 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 814AB1DCB09; Fri, 6 Jun 2025 17:07:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749229623; cv=none; b=L6exO6xAJUKj2dgikmM/Pn6zB3LSiQr1dMp7IusiVy2QDxkaf8wbOn7lgepdMWrAQhcRA5pCx2MUc+dpEG/MC+Ky5pf8vFBXfLVoNDjKn5/u2AEdq8FqW103zpvRruiWrJSK3pmtRSe0mqyThRv9rIkifhYdR8uAthIjm5SrCu0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749229623; c=relaxed/simple; bh=KEJ/UuLwWvSWrDMoCKZXu93CmoLNfIFRbJTlWuBegGQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OdzSgnJGGRCq/+1v4B+eddJ/oZSxhKKAXDti0vxQVexRr6MzoDltcUkphGIJctpQpAMur/JmIbNmDi2uBltpKKPTIa7UYfUCW16lQQiMSuO74Z8GZIbw+jxp9EvfKiiqzW17PrlHSPFBTwewSMbaJzkejX2chhDre8XxAfEDM/I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UwzctFfU; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UwzctFfU" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-450cf0120cdso22079695e9.2; Fri, 06 Jun 2025 10:07:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749229620; x=1749834420; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HYO+eGQfYOWOdEYORTE/WzWP16MU86w5cp2kZkMSGJI=; b=UwzctFfUgtWMoV9H7bP4P9fvMXL+DJYSSa2Z2BzJr+4nF+Tzhq5qrKQixGsfR8UdBi 6IsJjaTEunUOZkgUNBwtOr5j0EEjk55QvKGNVFT++d+F6+RVFKGSj3hVxyZhbGZaSAb4 zCiA+JQV1g7PfkxS8+SZa60luEXZ7QmlaaB0VR/vzjFGxZpi+Yrrd7o0pHmS70mV5OKE O/dSq61nn0dvuAW3+0Q6gpec4F3O4e4Mzzyf6mgwOETMcvImzDmSUPe5EzKcV9e5IAUP Tb8A2my5PjLKmY+/AsJ9yahMblYJOhMhPfrAoFz5CUCPc7HuHCE4d6hC12alIIdZsdjY 9hUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749229620; x=1749834420; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HYO+eGQfYOWOdEYORTE/WzWP16MU86w5cp2kZkMSGJI=; b=LZI0GK6d8KpP3CaMHWXDes5YEKSVZv9d3CduPw18CCJy/Y+Irweu1hEsXuWt4PHyFi JSHNdS/VhWSTQB+nQC1xirJqQ58U5II+mViiMgD8kPZ4R7bzhEdrsRIahjLn05XRI4ru MrnnVSqPMLXsGc5wtBLIrI9da0SXP+xkUx1kLXunRyWos8TO/seVHR62QIUhqLPMddOv xXXjEL/1WHAxN+sjvgNvRuMZBVW20O+/x7qXbgUeEChZ762HLWIDP1jFe7jvWhc4oooo +NRZL6lmsBMJL3MTWL6DvhWHuKT/LLUO2UUuipp8y7mpGmpezBU7lCE4TF3orChm25IT hmhA== X-Forwarded-Encrypted: i=1; AJvYcCUV8wweoAnOvI3k57QRmmCgLh5p7PLET8lBLBjUUOFVx3zPvexQt3L4OARWdC4DWREH7fMz7QxgCAW6SEcd@vger.kernel.org, AJvYcCVtbCS8O+ksIWoD8xBn7ToKS5NNrNhGHZNxISJrJuViDvQcdJwzk7QmSIK6NPMhIm5d2agRbjN7cVBg@vger.kernel.org, AJvYcCW1GD4wSZ9VvbSTrUvcIhpzytS7fn198+1ffNSSRD5j1OGcbmiE8aUDWzTL6Y7L37N0OyipAewYty3ogDvYb2w=@vger.kernel.org X-Gm-Message-State: AOJu0YzN4x4dpW8kWRd+oJ/yX01FKWLVpoxvNYNMu1i85ISy9AVgxFtv 6oDQmBsC+b6K9Yeg7X/SCMCIJcTF36dQ27LIzg8CdYG5XGbNrcoSikYc X-Gm-Gg: ASbGncsglRfOjcWAawilJSNObsO8GESgoud4vxIxAfcFvClS65w8gSZOVuQr7HA8H2S axx1rirYH1I406ELrJ9MRQR0NkklA/Z9LYJqxPJedjmiUjXOQAhZntyHY8mQX2Jddznvu/Romwr dLDkt0STe+ecnGHyrixEx2u5Rc/3tw7JWVzTLDG8vOzeSq3uEKTjGWs7Ww52pCpl+TW2nhUyXQI rAiwGDD95bwvn51YzlDtyxvk4vBb4pwlCJf90d/EAD+uxqRIT7926LZMT9KmIPJGdQVdPmfINiy U9k2DcEcnstbDkmzG4BXpQnEpn4AIb8r753xL+Ecry4gGkj45YpRN54686yHr7PdU/JMzNZBZso v4yqoYAIRbyP1tpFd+GiUZuM= X-Google-Smtp-Source: AGHT+IFSmXlCB/lezpaS2SYphJkVZyW5SY5HLRtTzO6PHhKNjwdwIfDncmWXtOXDNG4/yqMyZLmA5A== X-Received: by 2002:a05:600c:34d2:b0:450:c20d:64c3 with SMTP id 5b1f17b1804b1-4520137cba3mr49852725e9.18.1749229619393; Fri, 06 Jun 2025 10:06:59 -0700 (PDT) Received: from igor-korotin-Precision-Tower-3620.. ([188.39.32.4]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e163447sm27671315e9.17.2025.06.06.10.06.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 10:06:59 -0700 (PDT) From: Igor Korotin To: ojeda@kernel.org, alex.gaynor@gmail.com, rafael@kernel.org, gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-acpi@vger.kernel.org Cc: boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, benno.lossin@proton.me, a.hindborg@kernel.org, aliceryhl@google.com, tmgross@umich.edu, dakr@kernel.org, lenb@kernel.org, wedsonaf@gmail.com, viresh.kumar@linaro.org, alex.hung@amd.com, dingxiangfei2009@gmail.com Subject: [PATCH v3 1/4] rust: acpi: add `acpi::DeviceId` abstraction Date: Fri, 6 Jun 2025 18:06:41 +0100 Message-ID: <20250606170641.3881401-1-igor.korotin.linux@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250606170341.3880941-1-igor.korotin.linux@gmail.com> References: <20250606170341.3880941-1-igor.korotin.linux@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" `acpi::DeviceId` is an abstraction around `struct acpi_device_id`. This is used by subsequent patches, in particular the i2c driver abstractions, to create ACPI device ID tables. Signed-off-by: Igor Korotin --- MAINTAINERS | 1 + rust/kernel/acpi.rs | 61 +++++++++++++++++++++++++++++++++++++++++++++ rust/kernel/lib.rs | 1 + 3 files changed, 63 insertions(+) create mode 100644 rust/kernel/acpi.rs diff --git a/MAINTAINERS b/MAINTAINERS index 731f09909a92..44ae63e4b3b8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -302,6 +302,7 @@ F: include/linux/acpi.h F: include/linux/fwnode.h F: include/linux/fw_table.h F: lib/fw_table.c +F: rust/kernel/acpi.rs F: tools/power/acpi/ =20 ACPI APEI diff --git a/rust/kernel/acpi.rs b/rust/kernel/acpi.rs new file mode 100644 index 000000000000..f9a98dc4eb8a --- /dev/null +++ b/rust/kernel/acpi.rs @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Advanced Configuration and Power Interface abstractions. + +use crate::{bindings, device_id::RawDeviceId, prelude::*}; + +/// IdTable type for ACPI drivers. +pub type IdTable =3D &'static dyn kernel::device_id::IdTable; + +/// An ACPI device id. +#[repr(transparent)] +#[derive(Clone, Copy)] +pub struct DeviceId(bindings::acpi_device_id); + +// SAFETY: +// * `DeviceId` is a `#[repr(transparent)` wrapper of `struct acpi_device_= id` and does not add +// additional invariants, so it's safe to transmute to `RawType`. +// * `DRIVER_DATA_OFFSET` is the offset to the `data` field. +unsafe impl RawDeviceId for DeviceId { + type RawType =3D bindings::acpi_device_id; + + const DRIVER_DATA_OFFSET: usize =3D core::mem::offset_of!(bindings::ac= pi_device_id, driver_data); + + fn index(&self) -> usize { + self.0.driver_data as _ + } +} + +impl DeviceId { + const ACPI_ID_LEN: usize =3D 16; + + /// Create a new device id from an ACPI 'id' string. + pub const fn new(id: &'static CStr) -> Self { + assert!(id.len() <=3D Self::ACPI_ID_LEN, "ID exceeds 16 bytes"); + let src =3D id.as_bytes_with_nul(); + // Replace with `bindings::acpi_device_id::default()` once stabili= zed for `const`. + // SAFETY: FFI type is valid to be zero-initialized. + let mut acpi: bindings::acpi_device_id =3D unsafe { core::mem::zer= oed() }; + let mut i =3D 0; + while i < src.len() { + acpi.id[i] =3D src[i]; + i +=3D 1; + } + + Self(acpi) + } +} + +/// Create an ACPI `IdTable` with an "alias" for modpost. +#[macro_export] +macro_rules! acpi_device_table { + ($table_name:ident, $module_table_name:ident, $id_info_type: ty, $tabl= e_data: expr) =3D> { + const $table_name: $crate::device_id::IdArray< + $crate::acpi::DeviceId, + $id_info_type, + { $table_data.len() }, + > =3D $crate::device_id::IdArray::new($table_data); + + $crate::module_device_table!("acpi", $module_table_name, $table_na= me); + }; +} diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs index de07aadd1ff5..3c17e60e3093 100644 --- a/rust/kernel/lib.rs +++ b/rust/kernel/lib.rs @@ -37,6 +37,7 @@ =20 pub use ffi; =20 +pub mod acpi; pub mod alloc; #[cfg(CONFIG_BLOCK)] pub mod block; --=20 2.43.0 From nobody Sat Feb 7 11:56:16 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94C031DCB09; Fri, 6 Jun 2025 17:08:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749229705; cv=none; b=LcBQOxE/X+GfSM0gcLc9JGylW8VGFjSHY3WpeKICL9NSmWhs1LQTZWA27qxpmLHocSYX1fnrAwf8L4vXg9fWOsjDBnbD/QU0QkbSOGfazEtTl7iR2gn0XXSP30vybnUXpdr67k6PDL9y7p7QOLC+u1o21P+rc9F6kjPkBtPmYZs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749229705; c=relaxed/simple; bh=0n6dKNaXjAtpClMuqrF6yIV1Y2xk3819lpUQzbOxuqM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OMR2JcdsixDUvgumKF2HxQyS0jiSK+Ef3PTPKnrDAnIr6bYbJiRQoUiiyShOkcnN9N+pVBDOnhVkeBsekpAnU6sGxGnmibVFn3R83QxxkOqW4/vuSZK8P9N4KMMdj31BgIRbbkXQCCqnL1fkdmzGZVX2aktGM9LAJHWaQi8+hEw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MNg7bG3S; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MNg7bG3S" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3a4f379662cso1996863f8f.0; Fri, 06 Jun 2025 10:08:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749229702; x=1749834502; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=GRYCAFkO2zcpC+e8ef4KzR9UwAmJFdk1MxOth/JzNs4=; b=MNg7bG3SThDWAN5m6WlH8UjtUGPIhKUnCLvrq+ypxlFz/l2V4XRhIQ/NIKZHp/lB7y xr0Q7VnecrCy3o2GXEAk4Z8bO+FHJ6Z4NsoUF508HFnvBOXqbd3qEOIDJ0IH/Z7+CYt2 QMWPaettJV+5+gmv7bno/IaC2m0B+WYbL9YLn+s+F7cilEBr3bd9deR6GGB5ilnvsPJ7 mfaQ0Ie3LUrA/inGHmBCv88rGJkkW5f8zn76r2wN8Vtgi99hHxsO0AvhRjbCSHN3ZHko wKhOj+BDCH4Zr+2aTj9ydP2Melk5a5K+hdW6cD23bbHvB0UF5o/ivIS5UGagPP/0yCXq xVww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749229702; x=1749834502; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=GRYCAFkO2zcpC+e8ef4KzR9UwAmJFdk1MxOth/JzNs4=; b=LJCXMG23Bv2cSlhMWnYSmf973KdwcT61ZgCbPVfOZEzhlw3COgwsEzVWZ4TyCOFEJP rLDlAhRXl+qJiUQ85ZhN4d2g6RQOpmqK0GEKLpqQ8E/TLJmKeCi421CZY4l0sUZqv2m0 ckVn4QmZLc7v7hAIpA3F3UCPGYluG4jYYMpJAHna4U8pmXj859xrmz1OKDKoEVOCNtYR AMkvOv2sM7mk5Ox2aMmwSO+3jxnkpKRl+5bxgEHNg4Tu8VJKk9pQvR31CJ+0+nA4whIv yCDuxZMLKxmgtE1d62xlbThI00W7WLuWK7JMwLd+FsqwHoap2VFK76MG2tj33ngkVK5b 37sQ== X-Forwarded-Encrypted: i=1; AJvYcCUSiHPQw/dJYS9RkPhzNRZFMAmkSC1OW1KnjV7pDEqTXE9CA1p+Mk0iL18KArJtsmvfGJYEWTgFv7qIn6FdqOw=@vger.kernel.org, AJvYcCW5XT+9ANBO9DCrp/MONXgXjgPO5REhHSlKH5nfbc+s2vZeyPDAmVnjGKR/K+aRyxT9kgEP7wuJRR8zoPY1@vger.kernel.org, AJvYcCXdjZpLBaDQRAhOp3QbBrBRf8skMoaK3tXbmzSnZI5wDt8IxC8EjrnBkXJoTDt075AymKywqsDK+EGN@vger.kernel.org X-Gm-Message-State: AOJu0YyKXiTX5LQNfCGlMRdJgN01TYen1YswZccC4Nb+U8FjwucyzFnM /fKV1B/UFwKUHRu73czDuCdfBw+Fe5CN6qvwopFgeROxq6RJmafksSt0 X-Gm-Gg: ASbGncsFs/1d+Lr6gJ/1Ac4g0bwjseFE28RISBDEwpZN3WNK1pB/FAqvGY3YD47VIhl LwllMfsVU7YEiPpc1no5+pRsz1lPQ7Sr3PpL05zUhmLgEoqPPVFMAvV4XQsqHcBbkNHkJ4Vs+pQ GtolBBVBK+D6k7F3vRpgLXsA889CfamTGp4IcaHJMH3eWfO1utTn5MUfQ64mVw7JrwoXOlF/izx DI7+Bp80WGTBWwQS9iKgKxYng8Wc2BPMZW1Dn8kE+oBjqxOx9dp4y9gWs1QB2PrT1p/RbtoQzVj eN85N/3w2Rdep5Fuwdxp40pitQFwpIv95GcQEpfYIc5OnBxJR0gDC2mrVySmDcMMurgR6gxSyDH Q0YxJ9lwsqR2KK6s2PmuPjn8MrOesRxtNTA== X-Google-Smtp-Source: AGHT+IEYJB/T6htKMIfvolJfKo2jkiliEKcvmU8R2tHOeMj6rr+QbYiU7LHeXV+HkIofpKDb5tBpOg== X-Received: by 2002:a05:6000:144b:b0:3a4:e706:52f5 with SMTP id ffacd0b85a97d-3a531ca6afemr3843032f8f.13.1749229701638; Fri, 06 Jun 2025 10:08:21 -0700 (PDT) Received: from igor-korotin-Precision-Tower-3620.. ([188.39.32.4]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a53244ee34sm2433606f8f.72.2025.06.06.10.08.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 10:08:20 -0700 (PDT) Sender: Igor Korotin From: Igor Korotin To: ojeda@kernel.org, alex.gaynor@gmail.com, rafael@kernel.org, gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-acpi@vger.kernel.org Cc: boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, benno.lossin@proton.me, a.hindborg@kernel.org, aliceryhl@google.com, tmgross@umich.edu, dakr@kernel.org, lenb@kernel.org, wedsonaf@gmail.com, viresh.kumar@linaro.org, alex.hung@amd.com, dingxiangfei2009@gmail.com Subject: [PATCH v3 2/4] rust: driver: Add ACPI id table support to Adapter trait Date: Fri, 6 Jun 2025 18:08:17 +0100 Message-ID: <20250606170817.3881748-1-igor.korotin.linux@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250606170341.3880941-1-igor.korotin.linux@gmail.com> References: <20250606170341.3880941-1-igor.korotin.linux@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend the `Adapter` trait to support ACPI device identification. This mirrors the existing Open Firmware (OF) support (`of_id_table`) and enables Rust drivers to match and retrieve ACPI-specific device data when `CONFIG_ACPI` is enabled. To avoid breaking compilation, a stub implementation of `acpi_id_table()` is added to the Platform adapter; the full implementation will be provided in a subsequent patch. Signed-off-by: Igor Korotin --- rust/bindings/bindings_helper.h | 1 + rust/kernel/driver.rs | 39 ++++++++++++++++++++++++++++++++- rust/kernel/platform.rs | 6 ++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helpe= r.h index ab37e1d35c70..002d84f06b42 100644 --- a/rust/bindings/bindings_helper.h +++ b/rust/bindings/bindings_helper.h @@ -6,6 +6,7 @@ * Sorted alphabetically. */ =20 +#include #include #include #include diff --git a/rust/kernel/driver.rs b/rust/kernel/driver.rs index ec9166cedfa7..638f1d270af8 100644 --- a/rust/kernel/driver.rs +++ b/rust/kernel/driver.rs @@ -6,7 +6,7 @@ //! register using the [`Registration`] class. =20 use crate::error::{Error, Result}; -use crate::{device, of, str::CStr, try_pin_init, types::Opaque, ThisModule= }; +use crate::{acpi, device, of, str::CStr, try_pin_init, types::Opaque, This= Module}; use core::pin::Pin; use pin_init::{pin_data, pinned_drop, PinInit}; =20 @@ -141,6 +141,38 @@ pub trait Adapter { /// The type holding driver private data about each device id supporte= d by the driver. type IdInfo: 'static; =20 + /// The [`acpi::IdTable`] of the corresponding driver + fn acpi_id_table() -> Option>; + + /// Returns the driver's private data from the matching entry in the [= `acpi::IdTable`], if any. + /// + /// If this returns `None`, it means there is no match with an entry i= n the [`acpi::IdTable`]. + #[cfg(CONFIG_ACPI)] + fn acpi_id_info(dev: &device::Device) -> Option<&'static Self::IdInfo>= { + let table =3D Self::acpi_id_table()?; + + // SAFETY: + // - `table` has static lifetime, hence it's valid for read, + // - `dev` is guaranteed to be valid while it's alive, and so is `= pdev.as_ref().as_raw()`. + let raw_id =3D unsafe { bindings::acpi_match_device(table.as_ptr()= , dev.as_raw()) }; + + if raw_id.is_null() { + None + } else { + // SAFETY: `DeviceId` is a `#[repr(transparent)` wrapper of `s= truct of_device_id` and + // does not add additional invariants, so it's safe to transmu= te. + let id =3D unsafe { &*raw_id.cast::() }; + + Some(table.info(::index(id))) + } + } + + #[cfg(not(CONFIG_ACPI))] + #[allow(missing_docs)] + fn acpi_id_info(_dev: &device::Device) -> Option<&'static Self::IdInfo= > { + None + } + /// The [`of::IdTable`] of the corresponding driver. fn of_id_table() -> Option>; =20 @@ -178,6 +210,11 @@ fn of_id_info(_dev: &device::Device) -> Option<&'stati= c Self::IdInfo> { /// If this returns `None`, it means that there is no match in any of = the ID tables directly /// associated with a [`device::Device`]. fn id_info(dev: &device::Device) -> Option<&'static Self::IdInfo> { + let id =3D Self::acpi_id_info(dev); + if id.is_some() { + return id; + } + let id =3D Self::of_id_info(dev); if id.is_some() { return id; diff --git a/rust/kernel/platform.rs b/rust/kernel/platform.rs index 4917cb34e2fe..dd77934937d3 100644 --- a/rust/kernel/platform.rs +++ b/rust/kernel/platform.rs @@ -5,7 +5,7 @@ //! C header: [`include/linux/platform_device.h`](srctree/include/linux/pl= atform_device.h) =20 use crate::{ - bindings, device, driver, + acpi, bindings, device, driver, error::{to_result, Result}, of, prelude::*, @@ -95,6 +95,10 @@ impl driver::Adapter for Adapter= { fn of_id_table() -> Option> { T::OF_ID_TABLE } + + fn acpi_id_table() -> Option> { + None + } } =20 /// Declares a kernel module that exposes a single platform driver. --=20 2.43.0 From nobody Sat Feb 7 11:56:16 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D1831289E0B; Fri, 6 Jun 2025 17:09:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749229755; cv=none; b=Np5eiKTBBD71Sz0EO3VgowqMwrBhk1qE8JhHVpGBA/lcRq8/qSyzvJDFLldMrZPcWczaT3F66F3r83dMFNEJKei/XT6KM2+bYi3ZaXdjhcGuyYyuVkFBO0njfB6b6fU19QfZGI76VT8PJM0zIOd4a1V4pn1PVjhyPEqEvunbo3E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749229755; c=relaxed/simple; bh=4B3tJHQ0zjlLU8gpzpYofkTTqkCGGUIIR2t43dYz79g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DjFs1suHOMDMjBqXbWLp1VtrOoUiRXaCMjXt55/CmKwtGFnzH6f/mtXjLzVxfgjMkcgo0iOJ6YLrvQP7T+BEZoCoBeh9RFNNzJ6WWD+6jDBZlrnlCrVTysm7Nav82TC1dpRHiwUocSH2vRVKLaNZweAH/03q0oSkaIrGXLjWhE4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lyfrSp+5; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lyfrSp+5" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-442f9043f56so13029755e9.0; Fri, 06 Jun 2025 10:09:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749229752; x=1749834552; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=IRzkq7o17FupNHBNiNCKXwDcUfVhYZAdS3v3dhCCeoM=; b=lyfrSp+59z8Isprymbr83A9x6FLEcpBPB/VU+97S/FMhPk6iLyOTTgjVLLYHUX6HO7 w7TX3xREjLIRaNnoYz1SNT+OELJQcl0XPoS+UbMeM+24CXZ+XELu6xrpmV9BqGM7cHAj PgmjawvCSsIeak9Z+zuKHVsxJQ4spe+5NR2e/lKlaXjLVEOY7QOR1EpUJZCGQ9ql5gEm Gnx1JKMlJY0sTCpR6X7tfK04FI1kvqjCkxLji185amZiFkrGF1bBSe3JkB7x1nnr3w6k E00dSrfK8X0vwHNwDg5hncXLcPKDK7vF3NoCXtPwWMocCmQPxsF8AHa0ZSyaow3jXuMh G9Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749229752; x=1749834552; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=IRzkq7o17FupNHBNiNCKXwDcUfVhYZAdS3v3dhCCeoM=; b=OJpKvd5rAB1P/lUVDJ75/hpN+ShCjUn0f2yhzz8Ez76rXCk2338AujrGmtfWW23pvu Awv/VkbNlOGgEUtFOKCZlEp7L6mMBgY91BmgE3Lcww6ucj++VGuVH3hpGqNSTGMAnnzr CzomBg8D1K/VNjJnXajy4ZElalCoTdHLgwQc0B34nn9CK0mcSbrThe+NzhiMR/CnpB8D xDoLeSZ80j7l7U1HsB8SQj/JRQV0Yu+m0H/FrUC29OQCVGY/GTvFg3DuJqoSfeJ3nnxY vjzy3ixyLhv35Nr87wCWEhvPIaHu1f3cJ7YzpqvFC0KVil5kmG1V8m/JggKIth4j5ygQ 4kDg== X-Forwarded-Encrypted: i=1; AJvYcCU6/WM4lkyr09/UMUbioy0Y7JCvpZLGnBOThowVjdUpsvtkLPh2qdYHZZKD4ya5+bupW81RLhTWyKef@vger.kernel.org, AJvYcCWYB9XFm9VsbUeT9wf4bzIJofiLgq54IshfYjtNFJWzSwy3HSHbI7/XAEyWTs4pQnwrOZz9ggV0DdhWVKLAnU8=@vger.kernel.org, AJvYcCXqXPXqCb9/xnxOKKafebNUrrGPXc9nz/rfbk+XSBScr1J9VfwVwj6EutMR74KYpc1XC2OfHwW/6e2zLNuS@vger.kernel.org X-Gm-Message-State: AOJu0YxUz7wgIoFpz0VZf5WcYsaucTSEusjarPe6OsfKyR1gTZM5gcdW zh+ENJakH2wS/lJtWp34n6Uvy4e1zGHHqZxnEJ0FVJ+6/KJruJEa3RO2 X-Gm-Gg: ASbGncsrm5ndFwql+WOt/kffFMtDqB+NgJhgbDWJKAHQ1uPgA32D4e+L+iSxxI4VQKH qXEouz2l7TOQwK+E+stV8iQGpCjtDWBzijQSy1PMvAJ5Qg0A81Ucv83G2vSfJCTzsoFsWAOzXZw oD5ySyrdQfA+tZC1ghCto/jmVo2rQcQsSo1Rb5HZd+QVPbm6KJqftMe3lfsaMsDuQ69/Zrj1giU gLbW1Hek059JyvoLTfVe3j8tel89l7tFLaRX6Itu9mbxX6fxYg66Aid90Ymc8ChgBQXeKvLcPsB MRazWf5s17Gza1e5zejdOKAVrZLiJPzDELIQonSx/j58UadLupPwm1zkza4tX07wrhDwgWgSude GlY+Ro6ZrVZzMR8N8k6FQBbEeWw== X-Google-Smtp-Source: AGHT+IHTVX90u5t14UbVPQj1KYfbmllG+s7EVZetpQpxVSlaRZkmTPsWtlNle7T6w+Ln3IzQs6Nodg== X-Received: by 2002:a05:600c:8716:b0:442:f4a3:8c5c with SMTP id 5b1f17b1804b1-4520139a4b8mr53445835e9.10.1749229751747; Fri, 06 Jun 2025 10:09:11 -0700 (PDT) Received: from igor-korotin-Precision-Tower-3620.. ([188.39.32.4]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-452ec06d9aesm24563515e9.15.2025.06.06.10.09.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 10:09:11 -0700 (PDT) Sender: Igor Korotin From: Igor Korotin To: ojeda@kernel.org, alex.gaynor@gmail.com, rafael@kernel.org, gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-acpi@vger.kernel.org Cc: boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, benno.lossin@proton.me, a.hindborg@kernel.org, aliceryhl@google.com, tmgross@umich.edu, dakr@kernel.org, lenb@kernel.org, wedsonaf@gmail.com, viresh.kumar@linaro.org, alex.hung@amd.com, dingxiangfei2009@gmail.com Subject: [PATCH v3 3/4] rust: platform: Add ACPI match table support to `Driver` trait Date: Fri, 6 Jun 2025 18:09:05 +0100 Message-ID: <20250606170905.3881900-1-igor.korotin.linux@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250606170341.3880941-1-igor.korotin.linux@gmail.com> References: <20250606170341.3880941-1-igor.korotin.linux@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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. To avoid breaking compilation, a stub ACPI match table definition is added to the Rust sample platform driver. Functional support for ACPI matching in the sample driver will be provided in a follow-up patch. Signed-off-by: Igor Korotin --- rust/kernel/platform.rs | 14 ++++++++++++-- samples/rust/rust_driver_platform.rs | 3 ++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/rust/kernel/platform.rs b/rust/kernel/platform.rs index dd77934937d3..78010a613c54 100644 --- a/rust/kernel/platform.rs +++ b/rust/kernel/platform.rs @@ -38,12 +38,18 @@ unsafe fn register( None =3D> core::ptr::null(), }; =20 + let acpi_table =3D match T::ACPI_ID_TABLE { + Some(table) =3D> table.as_ptr(), + None =3D> core::ptr::null(), + }; + // SAFETY: It's safe to set the fields of `struct platform_driver`= on initialization. unsafe { (*pdrv.get()).driver.name =3D name.as_char_ptr(); (*pdrv.get()).probe =3D Some(Self::probe_callback); (*pdrv.get()).remove =3D Some(Self::remove_callback); (*pdrv.get()).driver.of_match_table =3D of_table; + (*pdrv.get()).driver.acpi_match_table =3D acpi_table; } =20 // SAFETY: `pdrv` is guaranteed to be a valid `RegType`. @@ -97,7 +103,7 @@ fn of_id_table() -> Option> { } =20 fn acpi_id_table() -> Option> { - None + T::ACPI_ID_TABLE } } =20 @@ -128,7 +134,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; /// @@ -144,6 +150,7 @@ macro_rules! module_platform_driver { /// impl platform::Driver for MyDriver { /// type IdInfo =3D (); /// const OF_ID_TABLE: Option> =3D Some(&OF_= TABLE); +/// const ACPI_ID_TABLE: Option> =3D Some(= &ACPI_TABLE); /// /// fn probe( /// _pdev: &platform::Device, @@ -164,6 +171,9 @@ pub trait Driver: Send { /// The table of OF device ids supported by the driver. const OF_ID_TABLE: Option>; =20 + /// The table of ACPI device ids supported by the driver. + const ACPI_ID_TABLE: Option>; + /// Platform driver probe. /// /// Called when a new platform device is added or discovered. diff --git a/samples/rust/rust_driver_platform.rs b/samples/rust/rust_drive= r_platform.rs index 8b42b3cfb363..e3992e7a71e9 100644 --- a/samples/rust/rust_driver_platform.rs +++ b/samples/rust/rust_driver_platform.rs @@ -2,7 +2,7 @@ =20 //! Rust Platform driver sample. =20 -use kernel::{c_str, device::Core, of, platform, prelude::*, types::ARef}; +use kernel::{acpi, c_str, device::Core, of, platform, prelude::*, types::A= Ref}; =20 struct SampleDriver { pdev: ARef, @@ -20,6 +20,7 @@ struct SampleDriver { impl platform::Driver for SampleDriver { type IdInfo =3D Info; const OF_ID_TABLE: Option> =3D Some(&OF_TABL= E); + const ACPI_ID_TABLE: Option> =3D None; =20 fn probe( pdev: &platform::Device, --=20 2.43.0 From nobody Sat Feb 7 11:56:16 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E0111AC44D; Fri, 6 Jun 2025 17:10:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749229841; cv=none; b=VCodB4mv5IQeGOQOZG/01HWPGM8g3KSYufO5vnuo5m+MH8R99eY/oFGKqAiQF5e/44NC+abQjMnH/VY1XmuFlQDaAx2RxJAs88CtSOc4WadE1i13Qm27eQomLSpzHeJtesMhKE/eUgdDanWRmIM/6r56E68ZFtPozE1nq/C1vpI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749229841; c=relaxed/simple; bh=BSMddBCJ41Ilbd2FWYJhzQ/QPewb+Wq1Q5rcDoc8ck8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CU2rb5DoIFSqnC57b3xM6evKxsDvWkug7w1bCYNcG7xnLP2K8Weq9Hf5LS42VnVyEnFlAQsx2WJvKmnH1EmHxHry+Q1lAMeSdBPXUA8FN8OkbOz3fa5gHfoGO1dp4nrKJ09ljHDDYmjcAuTioW9g/fyNYtEDzYbhDU0OY9HFNls= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UrjCs8N7; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UrjCs8N7" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-450cf0120cdso22105445e9.2; Fri, 06 Jun 2025 10:10:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749229838; x=1749834638; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=gV0kqico3uMlw+LKBx7wC9FFLyMg8FZyPDHUacfhBv0=; b=UrjCs8N7e8KVUXXDtGD04wil/po2PON+tKzBosKjvYzF1m60xwrEPfd7NMJRj9ftoL IRoBlmLz4vn+kFAKyXHWMDnsaomSaRirM+7YjIQO1XfCZsJ1dD43PY4QQv5xZiZDEGxV YVpFSgK+BiUVPi2o4D+C9oAEHWUTb0CZl6Cwtmhlu1b2quwJgVLmnZICoMETVWiiYka3 CeJI2YlQ48D8iY+fz3cCm/ochDLndj8sERvoOAWvnUJa+jaf/2KOddtf82eIJpH8x3js rqJSyyWrcoZI9+ivQmrm0xtjui6z8S0tmW+iSlJ9fDu9QnztHK5nDa/IV8CU6VmP1hih VfFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749229838; x=1749834638; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=gV0kqico3uMlw+LKBx7wC9FFLyMg8FZyPDHUacfhBv0=; b=ffWOAjxXWnpUUQnFXHSKFZNE5lmiXRwoAxNFajR9NyT7YpP0J+vYvs55WUFRriIGPr Cv1DHNnlerjL6FuU7fXjszoRDOtqGLWUB3YzG8nw73zQUe4dyxERzp1nGahpGC35yXuS rXIXo1xZkSOaojvdlb6dBk1XMcKKwUFJS+bJmsf0AghGXhyGkjIg42maVmfOxc904WeA ISbKG4FCq2BuYH+4CtSc8IQN34b6mpk7M6rPEaCVngNSkEpbC3aS6sY9jaQwkRYAlSqX qXgxjpBAIWF+pdLuMGL0Dy2NiC/ig06LhSBM8QH0r3QpXAT7DzoCFNFD67b/D1xXzhWz T2Ng== X-Forwarded-Encrypted: i=1; AJvYcCUyC4O6iwQ78tS0ohaAC/GZLzRGeyjegDu6NFo0LwRd4ypDbitfshNoLX6ZdIIs3OI46iY8qixmsoYt@vger.kernel.org, AJvYcCWRptTS+ChKDxiGDJqxDP1wAUnL3V24SQrCe5aQXWh5E+vZOMwUvWvQbe3HC/RC3fRJXuWbEuNPpvsvsro3@vger.kernel.org, AJvYcCWly/+smI9y4RVHTHFz8CpgCvUd/VSfcj/VcseGbRXMVwGxG+0NBFUCQEdvO1CkGZ9ah4s5ho220G6Gb3N/hk4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9BkSDifl9H/r/2I+iqPSqy0XdxhEkwMt09qysA36j/gNAypnd vQDcJ3gkO7YqtQRVudLTIL7hxuQ1j1+DqF4TVAFC8BvTu+oK7+De0pFj X-Gm-Gg: ASbGncv13fzuFMisNgdWDXGeI05mmJvb+b9Ci09/N8Ioq9HjkRvBupLIqy/3pBcbsO/ rU+sxGKiACca1OT94XG29E+R7aMmxH8ubCg4mejAXMR5SVU1uX1T4KwL9MnBi5mOtkBflN1JEom RsWhXAU3iWvaC09/bj+XIr1T97v79DtOvbtGBNJI1kpJKnMRQ+423nYKoEVknudiQkQsLXtYjrV doJRTYjk0lDOhnpYWf0uO0bzUNAzIVgSCLRHDW+Gv8Dpfb8F9YizSopK2W6U1/kAkZ9Avxv4j97 cLTpeWGs3dwqvVy1DND6tXfiSrZgnCB/G3u5LXpb9eTksMC19Ihcnh7ME8XHrulGWfit1ezDw+K 1tZXnbbrJDpN0 X-Google-Smtp-Source: AGHT+IGre1DzsJsOknujs9mDOmhMZQMaGS4A0WKDhGwFd4n2uetUZU5P4xfB3pK5rJjYQ/YrR6WQ0A== X-Received: by 2002:a05:6000:25c2:b0:3a3:648d:aa84 with SMTP id ffacd0b85a97d-3a5319b8ac6mr4174578f8f.5.1749229837424; Fri, 06 Jun 2025 10:10:37 -0700 (PDT) Received: from igor-korotin-Precision-Tower-3620.. ([188.39.32.4]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e0563cesm29798395e9.1.2025.06.06.10.10.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 10:10:37 -0700 (PDT) Sender: Igor Korotin From: Igor Korotin To: ojeda@kernel.org, alex.gaynor@gmail.com, rafael@kernel.org, gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-acpi@vger.kernel.org Cc: boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, benno.lossin@proton.me, a.hindborg@kernel.org, aliceryhl@google.com, tmgross@umich.edu, dakr@kernel.org, lenb@kernel.org, wedsonaf@gmail.com, viresh.kumar@linaro.org, alex.hung@amd.com, dingxiangfei2009@gmail.com Subject: [PATCH v3 4/4] samples: rust: add ACPI match table example to platform driver Date: Fri, 6 Jun 2025 18:10:33 +0100 Message-ID: <20250606171033.3882079-1-igor.korotin.linux@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250606170341.3880941-1-igor.korotin.linux@gmail.com> References: <20250606170341.3880941-1-igor.korotin.linux@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend the Rust sample platform driver to probe using device/driver name matching, OF ID table matching, or ACPI ID table matching. Signed-off-by: Igor Korotin --- samples/rust/rust_driver_platform.rs | 96 +++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/samples/rust/rust_driver_platform.rs b/samples/rust/rust_drive= r_platform.rs index e3992e7a71e9..be7c311dca07 100644 --- a/samples/rust/rust_driver_platform.rs +++ b/samples/rust/rust_driver_platform.rs @@ -17,10 +17,104 @@ struct SampleDriver { [(of::DeviceId::new(c_str!("test,rust-device")), Info(42))] ); =20 +// ACPI match table test +// +// This demonstrates how to test an ACPI-based Rust platform driver using = QEMU +// with a custom SSDT. +// +// Steps: +// +// 1. **Create an SSDT source file** (`ssdt.dsl`) with the following conte= nt: +// +// ```asl +// DefinitionBlock ("", "SSDT", 2, "TEST", "VIRTACPI", 0x00000001) +// { +// Scope (\_SB) +// { +// Device (T432) +// { +// Name (_HID, "TEST4321") // ACPI hardware ID to match +// Name (_UID, 1) +// Name (_STA, 0x0F) // Device present, enabled +// Name (_CRS, ResourceTemplate () +// { +// Memory32Fixed (ReadWrite, 0xFED00000, 0x1000) +// }) +// } +// } +// } +// ``` +// +// 2. **Compile the table**: +// +// ```sh +// iasl -tc ssdt.dsl +// ``` +// +// This generates `ssdt.aml` +// +// 3. **Run QEMU** with the compiled AML file: +// +// ```sh +// qemu-system-x86_64 -m 512M \ +// -enable-kvm \ +// -kernel path/to/bzImage \ +// -append "root=3D/dev/sda console=3DttyS0" \ +// -hda rootfs.img \ +// -serial stdio \ +// -acpitable file=3Dssdt.aml +// ``` +// +// Requirements: +// - The `rust_driver_platform` must be present either: +// - built directly into the kernel (`bzImage`), or +// - available as a `.ko` file and loadable from `rootfs.img` +// +// 4. **Verify it worked** by checking `dmesg`: +// +// ``` +// rust_driver_platform TEST4321:00: Probed with info: '0'. +// ``` +// +// This demonstrates ACPI table matching using a custom ID in QEMU with a = minimal SSDT + +kernel::acpi_device_table!( + ACPI_TABLE, + MODULE_ACPI_TABLE, + ::IdInfo, + [(acpi::DeviceId::new(c_str!("TEST4321")), Info(0))] +); + +/// OF/ACPI match tables for Platform Driver implementation +/// +/// The platform::Driver requires declaration of both OF_ID_TABLE and +/// ACPI_ID_TABLE, but if driver is not going to use either of them +/// it can implement one of them or both as None. +/// +/// # Example: +/// +/// ```ignore +/// impl platform::Driver for SampleDriver { +/// type IdInfo =3D (); +/// const OF_ID_TABLE: Option> =3D None; +/// const ACPI_ID_TABLE: Option> =3D None; +/// +/// fn probe( +/// pdev: &platform::Device, +/// _info: Option<&Self::IdInfo>, +/// ) -> Result>> { +/// dev_dbg!(pdev.as_ref(), "Probe Rust Platform driver sample.\n"= ); +/// +/// let drvdata =3D KBox::new(Self { pdev: pdev.into() }, GFP_KERN= EL)?; +/// +/// Ok(drvdata.into()) +/// } +/// } +/// ``` impl platform::Driver for SampleDriver { type IdInfo =3D Info; const OF_ID_TABLE: Option> =3D Some(&OF_TABL= E); - const ACPI_ID_TABLE: Option> =3D None; + const ACPI_ID_TABLE: Option> =3D Some(&ACP= I_TABLE); =20 fn probe( pdev: &platform::Device, --=20 2.43.0