From nobody Sat Oct 4 00:32:14 2025 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2060.outbound.protection.outlook.com [40.107.243.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 468131C5D46; Fri, 22 Aug 2025 02:04:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828244; cv=fail; b=DJogrTMc3h/2YBeDpQTUPLoOSJI0mpUsi+7F/rHQgrsDkEkdH+PIOhx+j+XZ9pHH4yx6yxKdIt/SemSaX0LB/PCeTrSwhIAnXVFnza0Fy5zW2dvEKON5iKaIqH3Btk5aVvN86a4Ji+m0/wJTYOUhj58ftozEfNtS6BEe+JN0f1I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828244; c=relaxed/simple; bh=Rf4rDMMLpdSXGfp/bxHyjnLNnRZGFseZsNii5MewSMc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=qIN1io5OTts2orhghuS9kqBWSBHLM4t851Oxet02Cb0CW7WBhEFsWHhEo1vW8Kcr0JopisxewU1mVX6gNKznb/POA9coI9a0ljfn4Uc+CSm0B0jAecLhpEkpRCmSqCxACZ/IbKouY+pG1raXnB2R58AcD6I0gN8HwMMa7jAh8S4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=iJvGYnJB; arc=fail smtp.client-ip=40.107.243.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="iJvGYnJB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wfcs2Xp4lR+i60Y9Bve3xoX2cCsD3WwIjPTZMsL3oTql6ycqsJodqUxAHswHEmuOKEhNQnPyattv6kXlcJ1kSyCMe99sD9whAJ+uwoL1OwAXTGhKKMB07DZInLzgATD5/GaCFKP57ErE/cMmiyJtyxZ+U1nySFTwrLG+lENu9ogVIHYjQ0AEM/+fEB+nr283olsp20r54MMyK2oLaPPCUm/PpDZo61ToBNLToD6cstQHWR8k7g56/f5PmfESwxYnJ8NnP2RN1ADjCgb/mJBalmVyg2XKR4lO/o7PI3kaoWl0o2/1RQ+FCjBHdkq7pP2FuNveekGmdb6uH6pWpBQmOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gWt9+QqThqfG+dIcl9ZkwH7IrgTx0L5lrR28SNhCn6c=; b=PDkaM10U3i3VVNG5HRtMLHYq79blIQhOj/RLFTozwmtDTt7qKXLYlaambAq9jhKY5Zh9QOI5GsleCYlj5k5MatxE0jhx2AAECkMpv1PGzOQ/G+YzViTesZenMhRd4YHIGsaVe1OFBrgnsRIurEY5FcfmyWg8AfKN74hisAMQOj4EOHQuJOs+38wXobP2nRfjuU+KtWaFsN/OyDjF9T/EFVso8b7fxFNmcIJcoB4QnnCAkvpH2hvN4ROtbjDqtyoiA6ztOwOqIYz/5iHE/Pe78BYcmhXrB1fQcB33qGh1kzpUwkkH79V8sQU+vI3U4QBgxI5O37h02GJQmLm4vYj8nQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gWt9+QqThqfG+dIcl9ZkwH7IrgTx0L5lrR28SNhCn6c=; b=iJvGYnJByoKjemsZ1842V1yUDvOQ+epWv17hGjZRjzx0joG0Iw1Wydz2EI3jK02xjCueQgQrS17Qqj/U/lDbaFLwHIyeCf4LPvW4Rg30xMcJM+EaBdvagOZZiWOgTUor4cs114Oqdfzh1Zy0LcyTO0BcwP2j3WrRgt6Rn/38VLURyzWz1RSo8t0d2j2x0n9ikrnbptlqhv9Ay1gwdfo+JlLIDGR6rOICl1N4TyYTbpxXQWm5ct05jD2rx/K8lm7r//sTdLYINatnxJUn7WnxPn6QIAPuHSWfXEpSi0FbXkUlutRSI/jhu47fm8UPt+j09sxy5vGr64sE0JqoNHIajA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) by PH0PR12MB7907.namprd12.prod.outlook.com (2603:10b6:510:28d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.15; Fri, 22 Aug 2025 02:03:58 +0000 Received: from LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4]) by LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4%6]) with mapi id 15.20.9031.023; Fri, 22 Aug 2025 02:03:58 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , David Airlie , Simona Vetter , Bjorn Helgaas , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, linux-pci@vger.kernel.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard , Elle Rhumsaa Subject: [PATCH v6 1/5] rust: pci: provide access to PCI Class and Class-related items Date: Thu, 21 Aug 2025 19:03:50 -0700 Message-ID: <20250822020354.357406-2-jhubbard@nvidia.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250822020354.357406-1-jhubbard@nvidia.com> References: <20250822020354.357406-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0132.namprd13.prod.outlook.com (2603:10b6:a03:2c6::17) To LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV2PR12MB5968:EE_|PH0PR12MB7907:EE_ X-MS-Office365-Filtering-Correlation-Id: f7cef63c-8ac7-42b4-cef5-08dde1202810 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v+E5NCQhNuy367vh3yeBjUV6GlUCBiySJvS13ZbVUqzvQOXtsJw9kTJx494q?= =?us-ascii?Q?CzZUhjCawGMn6+pg6YNGe24eDflmHmKTQiU9BBZ95AGoRFVUvXnSN05RYRkQ?= =?us-ascii?Q?VP32ksqwoEzRk1c8tlvU/2d2OvZtxXhe3x5V/Oj1M453Zdr14+1DAc2/EQd1?= =?us-ascii?Q?dY19gIv5RgpgJryFBIMhrqksrGUoWkswexr8VsSW4Yj38ZI9ikyGuszE05F1?= =?us-ascii?Q?T4y+6lVcil2SCFb+tNtAD7nPiOKcFD/LtKYe3tUXLUGFE2DsOnp0x6qO0kHA?= =?us-ascii?Q?lpgBRd7NDZnvwJVPIJYwbW6SlFgOY+QUzmGsNAIHo49OKnASUYxBxMNqK/U5?= =?us-ascii?Q?ZNTovQfQL3nd6ZZZoBVltycYugufhZlz7c487t3eS7WUvEtOjQYOZgNQ6Ccb?= =?us-ascii?Q?DxyHXEe2vd2InHkW2X6sIivsSD66giM6pJ4trq8ofxhC9eweuaGCm9Mup/Tt?= =?us-ascii?Q?ecFzCZ8sJvBANAY/woMAdD2GtCER6bfrsL6iveO1KSZ5JQQ1xIvOlYdBFnBX?= =?us-ascii?Q?ji+xIJhshO91iwzkbtYDHF9/YWSOTqQqOi9dg5O25HLmzYA7vzMfcdM/Ugt+?= =?us-ascii?Q?UepbfVG8rTYK6wvpFs3RsgQK6vY/dCe8pgIVXvpbfmQsVN5B/3JRQZXL+K7/?= =?us-ascii?Q?+Q8da9BWUopi1+/LQORp5YawyL3uXbcFoTygZsAxuvJ7tyj60RXP1BJZyP0h?= =?us-ascii?Q?2w4fD2dictKwCvq9AjTXY0pbvXS+cE2EhMPbo0NPyTKch6Mxv0VDR3tdVFrZ?= =?us-ascii?Q?Mr+yqHuyjB1v72grI7IQtCKuNkzNAQRdAVRcQYLYsytP01jHnQL0zRirzkRH?= =?us-ascii?Q?tb0yKPvozSZqqKcaQn1aRMoxzwqY/Y5Hjy3AOsAFr3T06XQvsf0WNSmsqDIY?= =?us-ascii?Q?qKFNyDW95Q5xHDxKlQH3Div5ZSz+JOxNRi+pxtsY/wOXW22SZ+Z6fRuwkKQu?= =?us-ascii?Q?FYvP6N2c/uUQ9AbIMFIBJjRDQOjCcb8g/6U0aKRItER6NpXzvo52IW69R25E?= =?us-ascii?Q?PcGp9UUlLPwXlJNSYqWuFaF7ns2Ib+Y1Px4ULamuFTXroYgS4mkV3Ojar7Zi?= =?us-ascii?Q?bfC1dhbytU5HMt5gtu9tuL5e4mjHN87SDjwM41kOdTBGrpzCgDjThGdoaJXk?= =?us-ascii?Q?BxYskh7UN/npBd4BmRzbDCcN7HrcHq8ATMZcKdLeYKZrodQC4QQpaVCVJi48?= =?us-ascii?Q?aURd2EVCAtjMmx18CbWgMOJYqYA8EGxLIwTb34YXinsE/NPEmF2LN/QvR7Zf?= =?us-ascii?Q?JcrvjFTd/9iNMGXEqH1N90/+1PlB51qmg5jMC4B9afDnqRSTyZSCoCxDLrSF?= =?us-ascii?Q?N88tlVlwoO5r9q0IMIVdDqBcVC2AMZBud2R5s7XVHJ9vFyTgccwd5GAVMQab?= =?us-ascii?Q?RiCciVGLC3xnjXB/s7fchPChBZUnuQQbwFr3A9igE3NPEd08naCxM1QGokXv?= =?us-ascii?Q?vk0AxEzA2rA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV2PR12MB5968.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?plbgGPcyb1L+dTXI+HUIyr+IHpHlV1zR9wX+fKwQKwO7B/+KiYVFuaidFNkC?= =?us-ascii?Q?u2LVpKCmPTKgXpOqqThg764c1lPbONPBJF+d4e5yd2D8iNyQOyohV52MHeR8?= =?us-ascii?Q?ZZNrCNsUqVgeoophHMUtDrl04Udc2mYrOEcdLnAiM21v21g4O57VEpPvkq9q?= =?us-ascii?Q?OmMJIzekTm3IZXLeRYjknesig3O5FBU45RlsEtBGvW0DqEXtZlDrrP+on/ms?= =?us-ascii?Q?9q8LVBOTR59uoxNxeeaUHg9i39mgRfLMT6SSus1eB9zPgpH1GAN1ftS8HaKz?= =?us-ascii?Q?rNVj4uDhXC2VUnrAhgFMQ6a8AdZUdCF3YZ03W8cWAqenwSfUAhWb5U5x0Z/z?= =?us-ascii?Q?D/f/25jMAqCMY4P3vCtfmWvs4FCdnEYKa4L+s7SUhuoShFraThDISRMSc5v1?= =?us-ascii?Q?bIF069lSXw0mS7N1kUZ4WucsV3k+hafgJQiQtls9oAakxAbjM09goOdp22ZM?= =?us-ascii?Q?sWxOsxs6nk2R8iKpwQZpWS8jr2a8adMQF5CQAvZu2CGDalzIm6jK6z+zAdzp?= =?us-ascii?Q?GegCPhfE+yjCt3Q5gM8ISL6Bs092aeHtakKif9Bos/5/n2UllFLJwnD2FfVC?= =?us-ascii?Q?wORhS9a/E6ZQPEHWc8FVKXlY0xE+I2vHxuXQ2oAIXXh5neyAJgPiFStdkFcf?= =?us-ascii?Q?9xse3f0gu09mf6delA2wuHK7p6ANl0wp1BErEVw2aw+PZYABs/++e45Yz4L1?= =?us-ascii?Q?8O/NQkO7ANnmd3zbdGfZ8gDOLVeFhB1kbE3FPVB5wxbWzROPjMe9uBWk8+h/?= =?us-ascii?Q?+AQgTIFmG1ZbAulaL6COpDNcSVQVZPGo11xt8ATCfDqn92F5dTF2CEdfrcq5?= =?us-ascii?Q?fGLVCaQvRpgIFY0fqhaNytwHA7W+Ya3+BPNpEwlPNizx8ZQSOePDsWg0jmHx?= =?us-ascii?Q?x60rwahNNTMcma7MjoPVZDf7g1YUvyoUleW1gScJRhSzukhEdyl8YOCIHftE?= =?us-ascii?Q?8RDZ+RGLsAcN+XhyU4goqR3ntd2sCqWJvwSNgxbdvCe86hv3/T5uTVPkFzJ0?= =?us-ascii?Q?ex+X/zQpX2qrcWIQMdMXbahKwVjq9DvTG0wI6rXTVXofMjEKCNX/VJ2g3hVC?= =?us-ascii?Q?skpRYb+xpEYFCMSvw/5dCnRPcW91XvN/VdgFQvyqV6aetU5s3Mal1KU6ixHf?= =?us-ascii?Q?bkSWu9FIRrkyq73jCsHleFsHzD5K2IUwEFo37gY+iCvTQ4XO3QpNPb6QYMsm?= =?us-ascii?Q?wpQ2Up5SBGezqRhrrgpQeGlPADwXRn5MaecfVNC1CAibKSdxYcBOUcfOtB2a?= =?us-ascii?Q?iingR+nGVwieh0lWjs+ITayV6EUJWdSe/UgJvJlbsKBjJJJu0cM5W4ccqbGd?= =?us-ascii?Q?Lk2F/gCP94zzn3h+Yi/LKLrFMXexE9lETrQIsZJE6W4CRATG4RgOHjfK8L1s?= =?us-ascii?Q?myg18ss8JBMCTbth9C49uD3qyYW2Wf0qy93fE6h+GT3IdmYclVglYfqKjWzx?= =?us-ascii?Q?worojH/aQkncQakuCE+A1wfdwuxwyF4/WByJ2N20PnhKx9idAxszgCm3FrvU?= =?us-ascii?Q?Gj8hQBlvVTVgTCZfMpS1745HIzRHKpKANdqPox5tNskpM8Fvdv1LGHdhBfCP?= =?us-ascii?Q?xqWv9tApJzqOeUO6ZDsQX0Tdkw5NCQVhWXFHTgE7?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7cef63c-8ac7-42b4-cef5-08dde1202810 X-MS-Exchange-CrossTenant-AuthSource: LV2PR12MB5968.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2025 02:03:58.5557 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XyzJYVKepclGEZCbYRlqcD934BuzNHU7A7XihSAzsYIVvvJC01d6oeEJB2k5xFXyFtzewYE8rXyxtoNoW1N+qA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7907 Content-Type: text/plain; charset="utf-8" Allow callers to write Class::STORAGE_SCSI instead of bindings::PCI_CLASS_STORAGE_SCSI, for example. New APIs: Class::STORAGE_SCSI, Class::NETWORK_ETHERNET, etc. Class::as_raw() Class: From for Class ClassMask: Full, ClassSubclass Device::pci_class() Cc: Danilo Krummrich Cc: Alexandre Courbot Cc: Elle Rhumsaa Signed-off-by: John Hubbard --- MAINTAINERS | 1 + rust/kernel/pci.rs | 10 ++ rust/kernel/pci/id.rs | 239 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 250 insertions(+) create mode 100644 rust/kernel/pci/id.rs diff --git a/MAINTAINERS b/MAINTAINERS index f0d09f7e04e8..4576905a9148 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -19532,6 +19532,7 @@ C: irc://irc.oftc.net/linux-pci T: git git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git F: rust/helpers/pci.c F: rust/kernel/pci.rs +F: rust/kernel/pci/ F: samples/rust/rust_driver_pci.rs =20 PCIE BANDWIDTH CONTROLLER diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs index 887ee611b553..0faec49bf8a2 100644 --- a/rust/kernel/pci.rs +++ b/rust/kernel/pci.rs @@ -23,6 +23,10 @@ }; use kernel::prelude::*; =20 +mod id; + +pub use self::id::{Class, ClassMask}; + /// An adapter for the registration of PCI drivers. pub struct Adapter(T); =20 @@ -410,6 +414,12 @@ pub fn resource_len(&self, bar: u32) -> Result { // - by its type invariant `self.as_raw` is always a valid pointer= to a `struct pci_dev`. Ok(unsafe { bindings::pci_resource_len(self.as_raw(), bar.try_into= ()?) }) } + + /// Returns the PCI class as a `Class` struct. + pub fn pci_class(&self) -> Class { + // SAFETY: `self.as_raw` is a valid pointer to a `struct pci_dev`. + Class::new(unsafe { (*self.as_raw()).class }) + } } =20 impl Device { diff --git a/rust/kernel/pci/id.rs b/rust/kernel/pci/id.rs new file mode 100644 index 000000000000..1291553b4e15 --- /dev/null +++ b/rust/kernel/pci/id.rs @@ -0,0 +1,239 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! PCI device identifiers and related types. +//! +//! This module contains PCI class codes and supporting types. + +use crate::{bindings, error::code::EINVAL, error::Error, prelude::*}; +use core::fmt; + +/// PCI device class codes. Each entry contains the full 24-bit PCI +/// class code (base class in bits 23-16, subclass in bits 15-8, +/// programming interface in bits 7-0). +/// +/// # Examples +/// +/// ``` +/// # use kernel::{device::Core, pci::{self, Class}, prelude::*}; +/// fn probe_device(pdev: &pci::Device) -> Result<()> { +/// // Get the PCI class for this device +/// let pci_class =3D pdev.pci_class(); +/// dev_info!( +/// pdev.as_ref(), +/// "Detected PCI class: {}\n", +/// pci_class +/// ); +/// Ok(()) +/// } +/// ``` +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(transparent)] +pub struct Class(u32); + +/// PCI class mask constants for matching class codes. +#[repr(u32)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ClassMask { + /// Match the full 24-bit class code. + Full =3D 0xffffff, + /// Match the upper 16 bits of the class code (base class and subclass= only) + ClassSubclass =3D 0xffff00, +} + +macro_rules! define_all_pci_classes { + ( + $($variant:ident =3D $binding:expr,)+ + ) =3D> { + + impl Class { + $( + #[allow(missing_docs)] + pub const $variant: Self =3D Self(Self::to_24bit_class($bi= nding)); + )+ + } + + /// Convert a raw 24-bit class code value to a `Class`. + impl From for Class { + fn from(value: u32) -> Self { + match value { + $(x if x =3D=3D Self::$variant.0 =3D> Self::$variant,)+ + _ =3D> Self::UNKNOWN, + } + } + } + }; +} + +/// Once constructed, a `Class` contains a valid PCI Class code. +impl Class { + /// Create a new Class from a raw 24-bit class code. + pub fn new(class_code: u32) -> Self { + Self::from(class_code) + } + + /// Get the raw 24-bit class code value. + pub const fn as_raw(self) -> u32 { + self.0 + } + + // Converts a PCI class constant to 24-bit format. + // + // Many device drivers use only the upper 16 bits (base class and subc= lass), but some + // use the full 24 bits. In order to support both cases, store the cla= ss code as a 24-bit + // value, where 16-bit values are shifted up 8 bits. + const fn to_24bit_class(val: u32) -> u32 { + if val > 0xFFFF { + val + } else { + val << 8 + } + } +} + +impl fmt::Display for Class { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "0x{:06x}", self.0) + } +} + +impl ClassMask { + /// Get the raw mask value. + pub const fn as_raw(self) -> u32 { + self as u32 + } +} + +impl TryFrom for ClassMask { + type Error =3D Error; + + fn try_from(value: u32) -> Result { + match value { + 0xffffff =3D> Ok(ClassMask::Full), + 0xffff00 =3D> Ok(ClassMask::ClassSubclass), + _ =3D> Err(EINVAL), + } + } +} + +define_all_pci_classes! { + NOT_DEFINED =3D bindings::PCI_CLASS_NOT_DEFINED, = // 0x000000 + NOT_DEFINED_VGA =3D bindings::PCI_CLASS_NOT_DEFINED_VGA, = // 0x000100 + + STORAGE_SCSI =3D bindings::PCI_CLASS_STORAGE_SCSI, = // 0x010000 + STORAGE_IDE =3D bindings::PCI_CLASS_STORAGE_IDE, = // 0x010100 + STORAGE_FLOPPY =3D bindings::PCI_CLASS_STORAGE_FLOPPY, = // 0x010200 + STORAGE_IPI =3D bindings::PCI_CLASS_STORAGE_IPI, = // 0x010300 + STORAGE_RAID =3D bindings::PCI_CLASS_STORAGE_RAID, = // 0x010400 + STORAGE_SATA =3D bindings::PCI_CLASS_STORAGE_SATA, = // 0x010600 + STORAGE_SATA_AHCI =3D bindings::PCI_CLASS_STORAGE_SATA_AHCI, = // 0x010601 + STORAGE_SAS =3D bindings::PCI_CLASS_STORAGE_SAS, = // 0x010700 + STORAGE_EXPRESS =3D bindings::PCI_CLASS_STORAGE_EXPRESS, = // 0x010802 + STORAGE_OTHER =3D bindings::PCI_CLASS_STORAGE_OTHER, = // 0x018000 + + NETWORK_ETHERNET =3D bindings::PCI_CLASS_NETWORK_ETHERNET, = // 0x020000 + NETWORK_TOKEN_RING =3D bindings::PCI_CLASS_NETWORK_TOKEN_RING,= // 0x020100 + NETWORK_FDDI =3D bindings::PCI_CLASS_NETWORK_FDDI, = // 0x020200 + NETWORK_ATM =3D bindings::PCI_CLASS_NETWORK_ATM, = // 0x020300 + NETWORK_OTHER =3D bindings::PCI_CLASS_NETWORK_OTHER, = // 0x028000 + + DISPLAY_VGA =3D bindings::PCI_CLASS_DISPLAY_VGA, = // 0x030000 + DISPLAY_XGA =3D bindings::PCI_CLASS_DISPLAY_XGA, = // 0x030100 + DISPLAY_3D =3D bindings::PCI_CLASS_DISPLAY_3D, = // 0x030200 + DISPLAY_OTHER =3D bindings::PCI_CLASS_DISPLAY_OTHER, = // 0x038000 + + MULTIMEDIA_VIDEO =3D bindings::PCI_CLASS_MULTIMEDIA_VIDEO, = // 0x040000 + MULTIMEDIA_AUDIO =3D bindings::PCI_CLASS_MULTIMEDIA_AUDIO, = // 0x040100 + MULTIMEDIA_PHONE =3D bindings::PCI_CLASS_MULTIMEDIA_PHONE, = // 0x040200 + MULTIMEDIA_HD_AUDIO =3D bindings::PCI_CLASS_MULTIMEDIA_HD_AUDIO= , // 0x040300 + MULTIMEDIA_OTHER =3D bindings::PCI_CLASS_MULTIMEDIA_OTHER, = // 0x048000 + + MEMORY_RAM =3D bindings::PCI_CLASS_MEMORY_RAM, = // 0x050000 + MEMORY_FLASH =3D bindings::PCI_CLASS_MEMORY_FLASH, = // 0x050100 + MEMORY_CXL =3D bindings::PCI_CLASS_MEMORY_CXL, = // 0x050200 + MEMORY_OTHER =3D bindings::PCI_CLASS_MEMORY_OTHER, = // 0x058000 + + BRIDGE_HOST =3D bindings::PCI_CLASS_BRIDGE_HOST, = // 0x060000 + BRIDGE_ISA =3D bindings::PCI_CLASS_BRIDGE_ISA, = // 0x060100 + BRIDGE_EISA =3D bindings::PCI_CLASS_BRIDGE_EISA, = // 0x060200 + BRIDGE_MC =3D bindings::PCI_CLASS_BRIDGE_MC, = // 0x060300 + BRIDGE_PCI_NORMAL =3D bindings::PCI_CLASS_BRIDGE_PCI_NORMAL, = // 0x060400 + BRIDGE_PCI_SUBTRACTIVE =3D bindings::PCI_CLASS_BRIDGE_PCI_SUBTRACT= IVE, // 0x060401 + BRIDGE_PCMCIA =3D bindings::PCI_CLASS_BRIDGE_PCMCIA, = // 0x060500 + BRIDGE_NUBUS =3D bindings::PCI_CLASS_BRIDGE_NUBUS, = // 0x060600 + BRIDGE_CARDBUS =3D bindings::PCI_CLASS_BRIDGE_CARDBUS, = // 0x060700 + BRIDGE_RACEWAY =3D bindings::PCI_CLASS_BRIDGE_RACEWAY, = // 0x060800 + BRIDGE_OTHER =3D bindings::PCI_CLASS_BRIDGE_OTHER, = // 0x068000 + + COMMUNICATION_SERIAL =3D bindings::PCI_CLASS_COMMUNICATION_SERIA= L, // 0x070000 + COMMUNICATION_PARALLEL =3D bindings::PCI_CLASS_COMMUNICATION_PARAL= LEL, // 0x070100 + COMMUNICATION_MULTISERIAL =3D bindings::PCI_CLASS_COMMUNICATION_MULTI= SERIAL, // 0x070200 + COMMUNICATION_MODEM =3D bindings::PCI_CLASS_COMMUNICATION_MODEM= , // 0x070300 + COMMUNICATION_OTHER =3D bindings::PCI_CLASS_COMMUNICATION_OTHER= , // 0x078000 + + SYSTEM_PIC =3D bindings::PCI_CLASS_SYSTEM_PIC, = // 0x080000 + SYSTEM_PIC_IOAPIC =3D bindings::PCI_CLASS_SYSTEM_PIC_IOAPIC, = // 0x080010 + SYSTEM_PIC_IOXAPIC =3D bindings::PCI_CLASS_SYSTEM_PIC_IOXAPIC,= // 0x080020 + SYSTEM_DMA =3D bindings::PCI_CLASS_SYSTEM_DMA, = // 0x080100 + SYSTEM_TIMER =3D bindings::PCI_CLASS_SYSTEM_TIMER, = // 0x080200 + SYSTEM_RTC =3D bindings::PCI_CLASS_SYSTEM_RTC, = // 0x080300 + SYSTEM_PCI_HOTPLUG =3D bindings::PCI_CLASS_SYSTEM_PCI_HOTPLUG,= // 0x080400 + SYSTEM_SDHCI =3D bindings::PCI_CLASS_SYSTEM_SDHCI, = // 0x080500 + SYSTEM_RCEC =3D bindings::PCI_CLASS_SYSTEM_RCEC, = // 0x080700 + SYSTEM_OTHER =3D bindings::PCI_CLASS_SYSTEM_OTHER, = // 0x088000 + + INPUT_KEYBOARD =3D bindings::PCI_CLASS_INPUT_KEYBOARD, = // 0x090000 + INPUT_PEN =3D bindings::PCI_CLASS_INPUT_PEN, = // 0x090100 + INPUT_MOUSE =3D bindings::PCI_CLASS_INPUT_MOUSE, = // 0x090200 + INPUT_SCANNER =3D bindings::PCI_CLASS_INPUT_SCANNER, = // 0x090300 + INPUT_GAMEPORT =3D bindings::PCI_CLASS_INPUT_GAMEPORT, = // 0x090400 + INPUT_OTHER =3D bindings::PCI_CLASS_INPUT_OTHER, = // 0x098000 + + DOCKING_GENERIC =3D bindings::PCI_CLASS_DOCKING_GENERIC, = // 0x0a0000 + DOCKING_OTHER =3D bindings::PCI_CLASS_DOCKING_OTHER, = // 0x0a8000 + + PROCESSOR_386 =3D bindings::PCI_CLASS_PROCESSOR_386, = // 0x0b0000 + PROCESSOR_486 =3D bindings::PCI_CLASS_PROCESSOR_486, = // 0x0b0100 + PROCESSOR_PENTIUM =3D bindings::PCI_CLASS_PROCESSOR_PENTIUM, = // 0x0b0200 + PROCESSOR_ALPHA =3D bindings::PCI_CLASS_PROCESSOR_ALPHA, = // 0x0b1000 + PROCESSOR_POWERPC =3D bindings::PCI_CLASS_PROCESSOR_POWERPC, = // 0x0b2000 + PROCESSOR_MIPS =3D bindings::PCI_CLASS_PROCESSOR_MIPS, = // 0x0b3000 + PROCESSOR_CO =3D bindings::PCI_CLASS_PROCESSOR_CO, = // 0x0b4000 + + SERIAL_FIREWIRE =3D bindings::PCI_CLASS_SERIAL_FIREWIRE, = // 0x0c0000 + SERIAL_FIREWIRE_OHCI =3D bindings::PCI_CLASS_SERIAL_FIREWIRE_OHC= I, // 0x0c0010 + SERIAL_ACCESS =3D bindings::PCI_CLASS_SERIAL_ACCESS, = // 0x0c0100 + SERIAL_SSA =3D bindings::PCI_CLASS_SERIAL_SSA, = // 0x0c0200 + SERIAL_USB_UHCI =3D bindings::PCI_CLASS_SERIAL_USB_UHCI, = // 0x0c0300 + SERIAL_USB_OHCI =3D bindings::PCI_CLASS_SERIAL_USB_OHCI, = // 0x0c0310 + SERIAL_USB_EHCI =3D bindings::PCI_CLASS_SERIAL_USB_EHCI, = // 0x0c0320 + SERIAL_USB_XHCI =3D bindings::PCI_CLASS_SERIAL_USB_XHCI, = // 0x0c0330 + SERIAL_USB_CDNS =3D bindings::PCI_CLASS_SERIAL_USB_CDNS, = // 0x0c0380 + SERIAL_USB_DEVICE =3D bindings::PCI_CLASS_SERIAL_USB_DEVICE, = // 0x0c03fe + SERIAL_FIBER =3D bindings::PCI_CLASS_SERIAL_FIBER, = // 0x0c0400 + SERIAL_SMBUS =3D bindings::PCI_CLASS_SERIAL_SMBUS, = // 0x0c0500 + SERIAL_IPMI_SMIC =3D bindings::PCI_CLASS_SERIAL_IPMI_SMIC, = // 0x0c0700 + SERIAL_IPMI_KCS =3D bindings::PCI_CLASS_SERIAL_IPMI_KCS, = // 0x0c0701 + SERIAL_IPMI_BT =3D bindings::PCI_CLASS_SERIAL_IPMI_BT, = // 0x0c0702 + + WIRELESS_RF_CONTROLLER =3D bindings::PCI_CLASS_WIRELESS_RF_CONTROL= LER, // 0x0d1000 + WIRELESS_WHCI =3D bindings::PCI_CLASS_WIRELESS_WHCI, = // 0x0d1010 + + INTELLIGENT_I2O =3D bindings::PCI_CLASS_INTELLIGENT_I2O, = // 0x0e0000 + + SATELLITE_TV =3D bindings::PCI_CLASS_SATELLITE_TV, = // 0x0f0000 + SATELLITE_AUDIO =3D bindings::PCI_CLASS_SATELLITE_AUDIO, = // 0x0f0100 + SATELLITE_VOICE =3D bindings::PCI_CLASS_SATELLITE_VOICE, = // 0x0f0300 + SATELLITE_DATA =3D bindings::PCI_CLASS_SATELLITE_DATA, = // 0x0f0400 + + CRYPT_NETWORK =3D bindings::PCI_CLASS_CRYPT_NETWORK, = // 0x100000 + CRYPT_ENTERTAINMENT =3D bindings::PCI_CLASS_CRYPT_ENTERTAINMENT= , // 0x100100 + CRYPT_OTHER =3D bindings::PCI_CLASS_CRYPT_OTHER, = // 0x108000 + + SP_DPIO =3D bindings::PCI_CLASS_SP_DPIO, = // 0x110000 + SP_OTHER =3D bindings::PCI_CLASS_SP_OTHER, = // 0x118000 + + ACCELERATOR_PROCESSING =3D bindings::PCI_CLASS_ACCELERATOR_PROCESS= ING, // 0x120000 + + OTHERS =3D bindings::PCI_CLASS_OTHERS, = // 0xff0000 + UNKNOWN =3D 0xffffff, +} --=20 2.50.1 From nobody Sat Oct 4 00:32:14 2025 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2060.outbound.protection.outlook.com [40.107.243.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1731B204083; Fri, 22 Aug 2025 02:04:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828250; cv=fail; b=V1A1z4Wdq2rwmBkPG5fq9X4xgVhdBEUdecSzf1cXSHYZoGQfIErbL0GyCcbwJY+pPdhb6VeWLT+jQwg0uCHBae/Z+XJZpM0PRiMQjIscQiZhUkoy1+X5HFdKaBqYMhviXPy/ZqbjKTN0w1XhDlgEnCRLlTwHOGqCqYPZ2/Us/2s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828250; c=relaxed/simple; bh=c8EiONfr/CBre8x9Rx15sfGGK9CjCDTn+bbOM7kwthg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=NY97lh03QZg/ayiWuoTLxvqYVTt1XCoIcyh9PhAXhlgV5UhHtOwJPbGicD36ja4eZYb+3eFJfmvZd6EuMskQ0StGf+2cGVNn9eqsRqxm6BDbH+vpJ1tfw6pSF0VCOTxBCyxjuZs3nqWDQxDulc+1e1lTFeTGN9x+XzYd8xn/VDA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=sLcRpf8T; arc=fail smtp.client-ip=40.107.243.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="sLcRpf8T" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=e9xnEXmjm2P8UZQlSnZ9RfQaf7xBP9AxjViyj4tXKC2PlGDc4tQXX/FstJxisDpc34FbXeFlbh67BsmajPkZSBFZurzCqcudsYFot191BYYsVJKnBqxPY6Nh6nBX7q4q4ItepUToIITceZRZhcZkymgW01g7CUeqpC4XJd3Ol0FaKLl5K93TtGmpQZqcVqwLoi+lDJbYDMZSO43t9Hv0fUX9OKWtUFNNZDi389QNHme4eYS+rxCgfdkGuWLtbIB/xP2RLGMeJsrnDzSmpv0tu0JtOgNzAOkMxnBhtwTwx9A9yegEwC7Wt2w3kLNr03Edpt3IIuEDhLP9koWae422kA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9mO+q1LkbSBXnB79ApNUXmtaRythzMvHly5Em6u9kMk=; b=q8mYIsI5xQsD+nA2tCHjPJ8ho5Q/q30DPMwl6ybF4ZCec/EcTSOq7zAbYz1u9sk3Og0x+in1dJaZOiPuhb8WphtAg7wH1B+1oo7ev9je4ne2nZPBsA69UqUlKpx4AhsVZWKfsVFr4+jZq2o35KYJBCUBBBOgdoOS+9nE1KU6FbHK9vr35oOo0pvjBpDF1rKjMdgdUc7c/32+1GZsg2OeJN93U67/yzuQHS9RR6iZ7mtjp2SSK8R28DZ3Fvpfa+Zr+4mhmHFrLRju3ILD6WNik2X68c9ki4TYmKxIbiWXPVAHb59c9gJg7fWCctRRFXCT0h08NstB6WQj7XZEdTTpuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9mO+q1LkbSBXnB79ApNUXmtaRythzMvHly5Em6u9kMk=; b=sLcRpf8TctytywgSwBtmftWnK2Q1nb4546SMpYZJFU73pk0y/o443r7AZ3dRZslg63B858dj3oVkotV6DJ1ZjSMrg3adObIhZXSONsYo7oVLWcntDaNw6zJc9jVNEa+P3Ju/OOjpYMlGXvThze+CXYx8CafYFwcglb/JoiQbNcPj3xrtJTGu46k1IYjdmxJU88XocsF3zuRJLk632k4HMwqoEImyBS9aPI/I+4buRujtm07unfnvVHuAiAdDZXVJDDTwFFVu0v3L5+ZV1Q4SsjXzs5UnKdXqSzve7uPUpl2Z5LS/Ijqe9czRKHkjVEBo40d72+p8zwrwAorTLUshLA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) by PH0PR12MB7907.namprd12.prod.outlook.com (2603:10b6:510:28d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.15; Fri, 22 Aug 2025 02:04:00 +0000 Received: from LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4]) by LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4%6]) with mapi id 15.20.9031.023; Fri, 22 Aug 2025 02:04:00 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , David Airlie , Simona Vetter , Bjorn Helgaas , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, linux-pci@vger.kernel.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard , Elle Rhumsaa Subject: [PATCH v6 2/5] rust: pci: provide access to PCI Vendor values Date: Thu, 21 Aug 2025 19:03:51 -0700 Message-ID: <20250822020354.357406-3-jhubbard@nvidia.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250822020354.357406-1-jhubbard@nvidia.com> References: <20250822020354.357406-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR04CA0009.namprd04.prod.outlook.com (2603:10b6:a03:217::14) To LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV2PR12MB5968:EE_|PH0PR12MB7907:EE_ X-MS-Office365-Filtering-Correlation-Id: 69bf7651-2a6d-4935-e158-08dde1202914 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?EVL6+9HR3IabLJQ1vK/iToIegwhWHq+ayKaMNYL8kqdhiGITLoedE4+vSZ1E?= =?us-ascii?Q?aVrSf8GKsEWROFsOKQgmwcUs0HH9v5BuoRuQdooBtX/kwNuDd2/kAG52Q3Sm?= =?us-ascii?Q?M87UYhHudMPP4wi97gUbhdhgICrn1euqV0gqbhTrhie5pk8ghbYhQaNAsoBI?= =?us-ascii?Q?FdAzSWW7PMzX646hS2/LpsvG8s9+4a85syC9Nb9haV5rg40NCNRoT7ppvvPu?= =?us-ascii?Q?YUAdy+VMfrkzlWFbsZC8452FlMMRxrbRB+G57GSY8/NtTxj/OBuqSg64Ldyq?= =?us-ascii?Q?s/ERpfLwV+v27zzGuyPhCyKv9quEAwaKnTW15CAiTxhO/19w4A6zyWK5Nkcm?= =?us-ascii?Q?m4LyV2YiPRYsOmKnjY/mhvXb4srU2aLtiaH+k4XHMti71NTbsRe2zjiuJLqb?= =?us-ascii?Q?NYBV7io6yAvJr82Ghus1gBlCqFSzMHVfNna9Xur0Bt8b6cflRg2INYZ/NxCO?= =?us-ascii?Q?lZaTvKrPOdwKNMoTVlLNNz8TBZ5xsHaOYyglL8mVYObNYo6+I8E5iekIZ2YR?= =?us-ascii?Q?LnrTXI+AGfzUUDS4FE7Pr0iLyXnIK7RLw3ZIg4wXjHVs5KcLBdKHOif4TB5p?= =?us-ascii?Q?pydgKY+Yq3P3beAPtzmB4ea1+iYiUhU1WzIM8a22+g7Own4hTNYQs0H65WTk?= =?us-ascii?Q?zra13Tdgw+vd9OLi1Nw13oikKfke2My34PSv1xNCw2kGDNaXBXJh8X9khQ8e?= =?us-ascii?Q?QmDzrMc+JZDmel43f9rnRNQPmpwNffhsuwUqPxOxKiVZbWBFtjV0+hzOtcsg?= =?us-ascii?Q?eY3m1Xqv/lWpbQoCUGq00goYme4NYFo7JNb6toYRdUbo3icSwd2fkLjCO9BH?= =?us-ascii?Q?F86uU4nQNUYzElLKMoCmecubwHqde98Kyv9vLgpruKR2VU758N7H1yy5jttA?= =?us-ascii?Q?A/7q/NWjyuDLTc2hHi/YMCTiYIHKu04blGhS3xXmw0YkPnlWOmAhRW7Hw8Fb?= =?us-ascii?Q?c6pdUXK6gLrSXRCY/PeEYdyagLa3EMLgWoI/NKcpnWy34Wn3ipQkpgzx9plI?= =?us-ascii?Q?vHFSFr6agUPchtNDRHXIMCYCee5QVf+xMh8Kys2er97iJdvJky5nVN+U7a02?= =?us-ascii?Q?Wqo496k2tEZxC0A4wMpEJ6gdlJ4WyFdJ9nsLiJjlaAABWw5Ztc56iJUMkcA+?= =?us-ascii?Q?y8N4KNSJZIpg6xrv1PskZ+1pLArXlR9wvAf3L1qjsy+RHiu/qWNgid8B1Y1n?= =?us-ascii?Q?BK6Kutskd8552EdcDUKJiM1OsQKJWn8+71z6hRn61EUH1qUNYO7gCXsSoMqM?= =?us-ascii?Q?mHpKF9f9De1F6dS0fh1z7nMtFHJMWHsrlsZ8gitgiejRLIiNcgKKwB8QxNjP?= =?us-ascii?Q?9cSKQ3LAXjS9lzOELUCQQI3r7+3t2/Wxhpmim1jdpw8W+q5oJfq2mfusIFHj?= =?us-ascii?Q?sNmZd/2akc3UYHBhwJhxp5qI/cDGJ0T9EwNhBniJuGoriSMKZQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV2PR12MB5968.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7qWTAal0ym5TSZ4H8EPfeDljzH58s7i5Gru1xjRLLgkdliTY2YpbVp37/8QJ?= =?us-ascii?Q?4UfLjD6mYxPC4UIFBlEebkGZGbuwcRp5GSTxyX4bvNePbFNYBLKh+uIiAH8d?= =?us-ascii?Q?BpXtBeqojBo+YXuwkAOFAUOBAhUBpyIR/q/P+BcuFc+4gjv6fD1phoyEDE82?= =?us-ascii?Q?qllZ/9kmgpdhSyEfZbv7He2IPxO3oYyApcrakVgAMmIMzVuctnavfmJZ2hkL?= =?us-ascii?Q?rzVxDjTbTobKv3dOvavCTY+amKWo9MjpxqjEtkvOgB2MhUeAlRzxxdiZKPNu?= =?us-ascii?Q?o/G8dDCvV4kfy0GMTKLpdWlLNMQOravreUb4k44LxUbCxCofTjvAJ2Gtmm7C?= =?us-ascii?Q?e+7DVVaBnVgSlLihQ7Khqu2r8URISC3KvXjIpj8UolZxsLxutG3LTjbD7z/w?= =?us-ascii?Q?T0KMsVuVDiym75QYIcfYGVunvaXmN85RSoHi0awy7uzzJNnN6UmvR3rCYfed?= =?us-ascii?Q?HZoo1armgfM0n6nKIdsdGaTXFMLpSQRhMq3B4xwBjQ3PbcShXAHlnciI0I+M?= =?us-ascii?Q?bMkDHO/+4SOGLt9e8xp0gwvqlD34aqmPvVW058V2X1fBto+Z1U9+XscFquan?= =?us-ascii?Q?fYTwqBd45SvsQ1ZR8OUrQHGskT2a9DFEO6dCWotEgHolXG7/7N9++gnS34UG?= =?us-ascii?Q?kMwDhjwFEPwEz3+JxMSQCxgcdlWKjtZGg+9YDT8/O/mar/Lyi0GSKfuhBsQW?= =?us-ascii?Q?j+WDacSxemWThhKYlKlya9R9KUI7l8dAIivOXchgOMXUampVMfVBjjBaT39T?= =?us-ascii?Q?TuroIXzOFE2E5E4dhLG3P4R3/HWjpqZU4ZFZKW0d2uBtFajZrVFQC6La9P0X?= =?us-ascii?Q?/KYwbqO2jchwOhOddvRRh4tLMYlQe+SyxEzxi6/FniX7FHSHFGlSSKos0K6W?= =?us-ascii?Q?w7S8DBISrvNPeGC9Ng/A+eRR0sVZIoBCakMRJFZj/9wGqqz1X//8Jj2rt/M8?= =?us-ascii?Q?7t1ofzJZUDTl/MimjzfSxdFnt5hvq5t8KjIRtdMVIY7RumhapEjleN3sWLar?= =?us-ascii?Q?+k83tLs8x2/eo4YZlYc9u4JvGE30fusagn1f1niL5DXwDWYeKVACAPP8OriB?= =?us-ascii?Q?Hk9wOuhwriPEaAtId6R58GypSJYvDiIGvw4sYhdyq9sPuDjs77ZvkqbjGUSV?= =?us-ascii?Q?PkNk7Pw5GoGMpfiEHaqlakS4z/jey56JPaZXz7yM3LL7XWc2FCNWTY0m1b52?= =?us-ascii?Q?p5VWewnGzc4/seSuCGlQHP3YmdWxqCaxnJAfoRbqvSAIBPu7pHB9+kNt4fEp?= =?us-ascii?Q?vQG5WMOKknivG01aBOheYbjovXvZ3HLUc6AFfSVccPGTNLKu99poNUcvmST4?= =?us-ascii?Q?YYlJs5XijAysIHuLgGSlxxKH+wTMXciLfSk2RQMYvIAyYl2fH+JTApejWJXv?= =?us-ascii?Q?ej8epHmD+tKJufJdTCMqpgtx673NI6YSfO2QM/mxn2azPoBowFKxaH39oRdp?= =?us-ascii?Q?FpC9VR4qqcg4rVzMhAA920xA+ZBmZ8a3+6p6jZBLcNiBjbH7lG8xLjoK4t9+?= =?us-ascii?Q?GL7BClrFClRHzgDs9EzmQvuYayjaz5/U9TCxZFqDnAsN1KI3o0L7tlyr4+b1?= =?us-ascii?Q?C817haDQXKI0eAL+UqT1ooWezfERSet0h5oNdMbB?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69bf7651-2a6d-4935-e158-08dde1202914 X-MS-Exchange-CrossTenant-AuthSource: LV2PR12MB5968.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2025 02:04:00.3369 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xup4evK1UP5XPtWfXyT67vuFvKWJgFBTwBPrfAg4EqGGMg6leoICS/DR+39EN7WS4D2CE7d5DQa0TI1mNrCs0A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7907 Content-Type: text/plain; charset="utf-8" This allows callers to write Vendor::SOME_COMPANY instead of bindings::PCI_VENDOR_ID_SOME_COMPANY. New APIs: Vendor::SOME_COMPANY Vendor::as_raw() Vendor: From for Vendor Cc: Danilo Krummrich Cc: Alexandre Courbot Cc: Elle Rhumsaa Signed-off-by: John Hubbard --- rust/kernel/pci.rs | 2 +- rust/kernel/pci/id.rs | 355 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 355 insertions(+), 2 deletions(-) diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs index 0faec49bf8a2..d4675b7d4a86 100644 --- a/rust/kernel/pci.rs +++ b/rust/kernel/pci.rs @@ -25,7 +25,7 @@ =20 mod id; =20 -pub use self::id::{Class, ClassMask}; +pub use self::id::{Class, ClassMask, Vendor}; =20 /// An adapter for the registration of PCI drivers. pub struct Adapter(T); diff --git a/rust/kernel/pci/id.rs b/rust/kernel/pci/id.rs index 1291553b4e15..dd91e25a6890 100644 --- a/rust/kernel/pci/id.rs +++ b/rust/kernel/pci/id.rs @@ -2,7 +2,7 @@ =20 //! PCI device identifiers and related types. //! -//! This module contains PCI class codes and supporting types. +//! This module contains PCI class codes, Vendor IDs, and supporting types. =20 use crate::{bindings, error::code::EINVAL, error::Error, prelude::*}; use core::fmt; @@ -115,6 +115,74 @@ fn try_from(value: u32) -> Result { } } =20 +/// PCI vendor IDs. +/// +/// Each entry contains the 16-bit PCI vendor ID as assigned by the PCI SI= G. +/// +/// # Examples +/// +/// ``` +/// # use kernel::{device::Core, pci::{self, Vendor}, prelude::*}; +/// fn log_device_info(pdev: &pci::Device) -> Result<()> { +/// // Get the raw PCI vendor ID and convert to Vendor +/// let vendor_id =3D pdev.vendor_id(); +/// let vendor =3D Vendor::new(vendor_id.into()); +/// dev_info!( +/// pdev.as_ref(), +/// "Device: Vendor=3D{}, Device=3D0x{:x}\n", +/// vendor, +/// pdev.device_id() +/// ); +/// Ok(()) +/// } +/// ``` +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(transparent)] +pub struct Vendor(u32); + +macro_rules! define_all_pci_vendors { + ( + $($variant:ident =3D $binding:expr,)+ + ) =3D> { + + impl Vendor { + $( + #[allow(missing_docs)] + pub const $variant: Self =3D Self($binding as u32); + )+ + } + + /// Convert a raw 16-bit vendor ID to a `Vendor`. + impl From for Vendor { + fn from(value: u32) -> Self { + match value { + $(x if x =3D=3D Self::$variant.0 =3D> Self::$variant,)+ + _ =3D> Self::UNKNOWN, + } + } + } + }; +} + +/// Once constructed, a `Vendor` contains a valid PCI Vendor ID. +impl Vendor { + /// Create a new Vendor from a raw 16-bit vendor ID. + pub fn new(vendor_id: u32) -> Self { + Self::from(vendor_id) + } + + /// Get the raw 16-bit vendor ID value. + pub const fn as_raw(self) -> u32 { + self.0 + } +} + +impl fmt::Display for Vendor { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "0x{:04x}", self.0) + } +} + define_all_pci_classes! { NOT_DEFINED =3D bindings::PCI_CLASS_NOT_DEFINED, = // 0x000000 NOT_DEFINED_VGA =3D bindings::PCI_CLASS_NOT_DEFINED_VGA, = // 0x000100 @@ -237,3 +305,288 @@ fn try_from(value: u32) -> Result { OTHERS =3D bindings::PCI_CLASS_OTHERS, = // 0xff0000 UNKNOWN =3D 0xffffff, } + +define_all_pci_vendors! { + PCI_SIG =3D bindings::PCI_VENDOR_ID_PCI_SIG, = // 0x0001 + LOONGSON =3D bindings::PCI_VENDOR_ID_LOONGSON, = // 0x0014 + SOLIDIGM =3D bindings::PCI_VENDOR_ID_SOLIDIGM, = // 0x025e + TTTECH =3D bindings::PCI_VENDOR_ID_TTTECH, = // 0x0357 + DYNALINK =3D bindings::PCI_VENDOR_ID_DYNALINK, = // 0x0675 + UBIQUITI =3D bindings::PCI_VENDOR_ID_UBIQUITI, = // 0x0777 + BERKOM =3D bindings::PCI_VENDOR_ID_BERKOM, = // 0x0871 + ITTIM =3D bindings::PCI_VENDOR_ID_ITTIM, = // 0x0b48 + COMPAQ =3D bindings::PCI_VENDOR_ID_COMPAQ, = // 0x0e11 + LSI_LOGIC =3D bindings::PCI_VENDOR_ID_LSI_LOGIC, = // 0x1000 + ATI =3D bindings::PCI_VENDOR_ID_ATI, = // 0x1002 + VLSI =3D bindings::PCI_VENDOR_ID_VLSI, = // 0x1004 + ADL =3D bindings::PCI_VENDOR_ID_ADL, = // 0x1005 + NS =3D bindings::PCI_VENDOR_ID_NS, = // 0x100b + TSENG =3D bindings::PCI_VENDOR_ID_TSENG, = // 0x100c + WEITEK =3D bindings::PCI_VENDOR_ID_WEITEK, = // 0x100e + DEC =3D bindings::PCI_VENDOR_ID_DEC, = // 0x1011 + CIRRUS =3D bindings::PCI_VENDOR_ID_CIRRUS, = // 0x1013 + IBM =3D bindings::PCI_VENDOR_ID_IBM, = // 0x1014 + UNISYS =3D bindings::PCI_VENDOR_ID_UNISYS, = // 0x1018 + COMPEX2 =3D bindings::PCI_VENDOR_ID_COMPEX2, = // 0x101a + WD =3D bindings::PCI_VENDOR_ID_WD, = // 0x101c + AMI =3D bindings::PCI_VENDOR_ID_AMI, = // 0x101e + AMD =3D bindings::PCI_VENDOR_ID_AMD, = // 0x1022 + TRIDENT =3D bindings::PCI_VENDOR_ID_TRIDENT, = // 0x1023 + AI =3D bindings::PCI_VENDOR_ID_AI, = // 0x1025 + DELL =3D bindings::PCI_VENDOR_ID_DELL, = // 0x1028 + MATROX =3D bindings::PCI_VENDOR_ID_MATROX, = // 0x102B + MOBILITY_ELECTRONICS =3D bindings::PCI_VENDOR_ID_MOBILITY_ELECTRON= ICS, // 0x14f2 + CT =3D bindings::PCI_VENDOR_ID_CT, = // 0x102c + MIRO =3D bindings::PCI_VENDOR_ID_MIRO, = // 0x1031 + NEC =3D bindings::PCI_VENDOR_ID_NEC, = // 0x1033 + FD =3D bindings::PCI_VENDOR_ID_FD, = // 0x1036 + SI =3D bindings::PCI_VENDOR_ID_SI, = // 0x1039 + HP =3D bindings::PCI_VENDOR_ID_HP, = // 0x103c + HP_3PAR =3D bindings::PCI_VENDOR_ID_HP_3PAR, = // 0x1590 + PCTECH =3D bindings::PCI_VENDOR_ID_PCTECH, = // 0x1042 + ASUSTEK =3D bindings::PCI_VENDOR_ID_ASUSTEK, = // 0x1043 + DPT =3D bindings::PCI_VENDOR_ID_DPT, = // 0x1044 + OPTI =3D bindings::PCI_VENDOR_ID_OPTI, = // 0x1045 + ELSA =3D bindings::PCI_VENDOR_ID_ELSA, = // 0x1048 + STMICRO =3D bindings::PCI_VENDOR_ID_STMICRO, = // 0x104A + BUSLOGIC =3D bindings::PCI_VENDOR_ID_BUSLOGIC, = // 0x104B + TI =3D bindings::PCI_VENDOR_ID_TI, = // 0x104c + SONY =3D bindings::PCI_VENDOR_ID_SONY, = // 0x104d + WINBOND2 =3D bindings::PCI_VENDOR_ID_WINBOND2, = // 0x1050 + ANIGMA =3D bindings::PCI_VENDOR_ID_ANIGMA, = // 0x1051 + EFAR =3D bindings::PCI_VENDOR_ID_EFAR, = // 0x1055 + MOTOROLA =3D bindings::PCI_VENDOR_ID_MOTOROLA, = // 0x1057 + PROMISE =3D bindings::PCI_VENDOR_ID_PROMISE, = // 0x105a + FOXCONN =3D bindings::PCI_VENDOR_ID_FOXCONN, = // 0x105b + UMC =3D bindings::PCI_VENDOR_ID_UMC, = // 0x1060 + PICOPOWER =3D bindings::PCI_VENDOR_ID_PICOPOWER, = // 0x1066 + MYLEX =3D bindings::PCI_VENDOR_ID_MYLEX, = // 0x1069 + APPLE =3D bindings::PCI_VENDOR_ID_APPLE, = // 0x106b + YAMAHA =3D bindings::PCI_VENDOR_ID_YAMAHA, = // 0x1073 + QLOGIC =3D bindings::PCI_VENDOR_ID_QLOGIC, = // 0x1077 + CYRIX =3D bindings::PCI_VENDOR_ID_CYRIX, = // 0x1078 + CONTAQ =3D bindings::PCI_VENDOR_ID_CONTAQ, = // 0x1080 + OLICOM =3D bindings::PCI_VENDOR_ID_OLICOM, = // 0x108d + SUN =3D bindings::PCI_VENDOR_ID_SUN, = // 0x108e + NI =3D bindings::PCI_VENDOR_ID_NI, = // 0x1093 + CMD =3D bindings::PCI_VENDOR_ID_CMD, = // 0x1095 + BROOKTREE =3D bindings::PCI_VENDOR_ID_BROOKTREE, = // 0x109e + SGI =3D bindings::PCI_VENDOR_ID_SGI, = // 0x10a9 + WINBOND =3D bindings::PCI_VENDOR_ID_WINBOND, = // 0x10ad + PLX =3D bindings::PCI_VENDOR_ID_PLX, = // 0x10b5 + MADGE =3D bindings::PCI_VENDOR_ID_MADGE, = // 0x10b6 + THREECOM =3D bindings::PCI_VENDOR_ID_3COM, = // 0x10b7 + AL =3D bindings::PCI_VENDOR_ID_AL, = // 0x10b9 + NEOMAGIC =3D bindings::PCI_VENDOR_ID_NEOMAGIC, = // 0x10c8 + TCONRAD =3D bindings::PCI_VENDOR_ID_TCONRAD, = // 0x10da + ROHM =3D bindings::PCI_VENDOR_ID_ROHM, = // 0x10db + NVIDIA =3D bindings::PCI_VENDOR_ID_NVIDIA, = // 0x10de + IMS =3D bindings::PCI_VENDOR_ID_IMS, = // 0x10e0 + AMCC =3D bindings::PCI_VENDOR_ID_AMCC, = // 0x10e8 + AMPERE =3D bindings::PCI_VENDOR_ID_AMPERE, = // 0x1def + INTERG =3D bindings::PCI_VENDOR_ID_INTERG, = // 0x10ea + REALTEK =3D bindings::PCI_VENDOR_ID_REALTEK, = // 0x10ec + XILINX =3D bindings::PCI_VENDOR_ID_XILINX, = // 0x10ee + INIT =3D bindings::PCI_VENDOR_ID_INIT, = // 0x1101 + CREATIVE =3D bindings::PCI_VENDOR_ID_CREATIVE, = // 0x1102 + TTI =3D bindings::PCI_VENDOR_ID_TTI, = // 0x1103 + SIGMA =3D bindings::PCI_VENDOR_ID_SIGMA, = // 0x1105 + VIA =3D bindings::PCI_VENDOR_ID_VIA, = // 0x1106 + SIEMENS =3D bindings::PCI_VENDOR_ID_SIEMENS, = // 0x110A + VORTEX =3D bindings::PCI_VENDOR_ID_VORTEX, = // 0x1119 + EF =3D bindings::PCI_VENDOR_ID_EF, = // 0x111a + IDT =3D bindings::PCI_VENDOR_ID_IDT, = // 0x111d + FORE =3D bindings::PCI_VENDOR_ID_FORE, = // 0x1127 + PHILIPS =3D bindings::PCI_VENDOR_ID_PHILIPS, = // 0x1131 + EICON =3D bindings::PCI_VENDOR_ID_EICON, = // 0x1133 + CISCO =3D bindings::PCI_VENDOR_ID_CISCO, = // 0x1137 + ZIATECH =3D bindings::PCI_VENDOR_ID_ZIATECH, = // 0x1138 + SYSKONNECT =3D bindings::PCI_VENDOR_ID_SYSKONNECT, = // 0x1148 + DIGI =3D bindings::PCI_VENDOR_ID_DIGI, = // 0x114f + XIRCOM =3D bindings::PCI_VENDOR_ID_XIRCOM, = // 0x115d + SERVERWORKS =3D bindings::PCI_VENDOR_ID_SERVERWORKS, = // 0x1166 + ALTERA =3D bindings::PCI_VENDOR_ID_ALTERA, = // 0x1172 + SBE =3D bindings::PCI_VENDOR_ID_SBE, = // 0x1176 + TOSHIBA =3D bindings::PCI_VENDOR_ID_TOSHIBA, = // 0x1179 + TOSHIBA_2 =3D bindings::PCI_VENDOR_ID_TOSHIBA_2, = // 0x102f + ATTO =3D bindings::PCI_VENDOR_ID_ATTO, = // 0x117c + RICOH =3D bindings::PCI_VENDOR_ID_RICOH, = // 0x1180 + DLINK =3D bindings::PCI_VENDOR_ID_DLINK, = // 0x1186 + ARTOP =3D bindings::PCI_VENDOR_ID_ARTOP, = // 0x1191 + ZEITNET =3D bindings::PCI_VENDOR_ID_ZEITNET, = // 0x1193 + FUJITSU_ME =3D bindings::PCI_VENDOR_ID_FUJITSU_ME, = // 0x119e + MARVELL =3D bindings::PCI_VENDOR_ID_MARVELL, = // 0x11ab + MARVELL_EXT =3D bindings::PCI_VENDOR_ID_MARVELL_EXT, = // 0x1b4b + V3 =3D bindings::PCI_VENDOR_ID_V3, = // 0x11b0 + ATT =3D bindings::PCI_VENDOR_ID_ATT, = // 0x11c1 + SPECIALIX =3D bindings::PCI_VENDOR_ID_SPECIALIX, = // 0x11cb + ANALOG_DEVICES =3D bindings::PCI_VENDOR_ID_ANALOG_DEVICES, = // 0x11d4 + ZORAN =3D bindings::PCI_VENDOR_ID_ZORAN, = // 0x11de + COMPEX =3D bindings::PCI_VENDOR_ID_COMPEX, = // 0x11f6 + MICROSEMI =3D bindings::PCI_VENDOR_ID_MICROSEMI, = // 0x11f8 + RP =3D bindings::PCI_VENDOR_ID_RP, = // 0x11fe + CYCLADES =3D bindings::PCI_VENDOR_ID_CYCLADES, = // 0x120e + ESSENTIAL =3D bindings::PCI_VENDOR_ID_ESSENTIAL, = // 0x120f + O2 =3D bindings::PCI_VENDOR_ID_O2, = // 0x1217 + THREEDX =3D bindings::PCI_VENDOR_ID_3DFX, = // 0x121a + AVM =3D bindings::PCI_VENDOR_ID_AVM, = // 0x1244 + STALLION =3D bindings::PCI_VENDOR_ID_STALLION, = // 0x124d + AT =3D bindings::PCI_VENDOR_ID_AT, = // 0x1259 + ASIX =3D bindings::PCI_VENDOR_ID_ASIX, = // 0x125b + ESS =3D bindings::PCI_VENDOR_ID_ESS, = // 0x125d + SATSAGEM =3D bindings::PCI_VENDOR_ID_SATSAGEM, = // 0x1267 + ENSONIQ =3D bindings::PCI_VENDOR_ID_ENSONIQ, = // 0x1274 + TRANSMETA =3D bindings::PCI_VENDOR_ID_TRANSMETA, = // 0x1279 + ROCKWELL =3D bindings::PCI_VENDOR_ID_ROCKWELL, = // 0x127A + ITE =3D bindings::PCI_VENDOR_ID_ITE, = // 0x1283 + ALTEON =3D bindings::PCI_VENDOR_ID_ALTEON, = // 0x12ae + NVIDIA_SGS =3D bindings::PCI_VENDOR_ID_NVIDIA_SGS, = // 0x12d2 + PERICOM =3D bindings::PCI_VENDOR_ID_PERICOM, = // 0x12D8 + AUREAL =3D bindings::PCI_VENDOR_ID_AUREAL, = // 0x12eb + ELECTRONICDESIGNGMBH =3D bindings::PCI_VENDOR_ID_ELECTRONICDESIGNG= MBH, // 0x12f8 + ESDGMBH =3D bindings::PCI_VENDOR_ID_ESDGMBH, = // 0x12fe + CB =3D bindings::PCI_VENDOR_ID_CB, = // 0x1307 + SIIG =3D bindings::PCI_VENDOR_ID_SIIG, = // 0x131f + RADISYS =3D bindings::PCI_VENDOR_ID_RADISYS, = // 0x1331 + MICRO_MEMORY =3D bindings::PCI_VENDOR_ID_MICRO_MEMORY, = // 0x1332 + DOMEX =3D bindings::PCI_VENDOR_ID_DOMEX, = // 0x134a + INTASHIELD =3D bindings::PCI_VENDOR_ID_INTASHIELD, = // 0x135a + QUATECH =3D bindings::PCI_VENDOR_ID_QUATECH, = // 0x135C + SEALEVEL =3D bindings::PCI_VENDOR_ID_SEALEVEL, = // 0x135e + HYPERCOPE =3D bindings::PCI_VENDOR_ID_HYPERCOPE, = // 0x1365 + DIGIGRAM =3D bindings::PCI_VENDOR_ID_DIGIGRAM, = // 0x1369 + KAWASAKI =3D bindings::PCI_VENDOR_ID_KAWASAKI, = // 0x136b + CNET =3D bindings::PCI_VENDOR_ID_CNET, = // 0x1371 + LMC =3D bindings::PCI_VENDOR_ID_LMC, = // 0x1376 + NETGEAR =3D bindings::PCI_VENDOR_ID_NETGEAR, = // 0x1385 + APPLICOM =3D bindings::PCI_VENDOR_ID_APPLICOM, = // 0x1389 + MOXA =3D bindings::PCI_VENDOR_ID_MOXA, = // 0x1393 + CCD =3D bindings::PCI_VENDOR_ID_CCD, = // 0x1397 + EXAR =3D bindings::PCI_VENDOR_ID_EXAR, = // 0x13a8 + MICROGATE =3D bindings::PCI_VENDOR_ID_MICROGATE, = // 0x13c0 + THREEWARE =3D bindings::PCI_VENDOR_ID_3WARE, = // 0x13C1 + IOMEGA =3D bindings::PCI_VENDOR_ID_IOMEGA, = // 0x13ca + ABOCOM =3D bindings::PCI_VENDOR_ID_ABOCOM, = // 0x13D1 + SUNDANCE =3D bindings::PCI_VENDOR_ID_SUNDANCE, = // 0x13f0 + CMEDIA =3D bindings::PCI_VENDOR_ID_CMEDIA, = // 0x13f6 + ADVANTECH =3D bindings::PCI_VENDOR_ID_ADVANTECH, = // 0x13fe + MEILHAUS =3D bindings::PCI_VENDOR_ID_MEILHAUS, = // 0x1402 + LAVA =3D bindings::PCI_VENDOR_ID_LAVA, = // 0x1407 + TIMEDIA =3D bindings::PCI_VENDOR_ID_TIMEDIA, = // 0x1409 + ICE =3D bindings::PCI_VENDOR_ID_ICE, = // 0x1412 + MICROSOFT =3D bindings::PCI_VENDOR_ID_MICROSOFT, = // 0x1414 + OXSEMI =3D bindings::PCI_VENDOR_ID_OXSEMI, = // 0x1415 + CHELSIO =3D bindings::PCI_VENDOR_ID_CHELSIO, = // 0x1425 + EDIMAX =3D bindings::PCI_VENDOR_ID_EDIMAX, = // 0x1432 + ADLINK =3D bindings::PCI_VENDOR_ID_ADLINK, = // 0x144a + SAMSUNG =3D bindings::PCI_VENDOR_ID_SAMSUNG, = // 0x144d + GIGABYTE =3D bindings::PCI_VENDOR_ID_GIGABYTE, = // 0x1458 + AMBIT =3D bindings::PCI_VENDOR_ID_AMBIT, = // 0x1468 + MYRICOM =3D bindings::PCI_VENDOR_ID_MYRICOM, = // 0x14c1 + MEDIATEK =3D bindings::PCI_VENDOR_ID_MEDIATEK, = // 0x14c3 + TITAN =3D bindings::PCI_VENDOR_ID_TITAN, = // 0x14D2 + PANACOM =3D bindings::PCI_VENDOR_ID_PANACOM, = // 0x14d4 + SIPACKETS =3D bindings::PCI_VENDOR_ID_SIPACKETS, = // 0x14d9 + AFAVLAB =3D bindings::PCI_VENDOR_ID_AFAVLAB, = // 0x14db + AMPLICON =3D bindings::PCI_VENDOR_ID_AMPLICON, = // 0x14dc + BCM_GVC =3D bindings::PCI_VENDOR_ID_BCM_GVC, = // 0x14a4 + BROADCOM =3D bindings::PCI_VENDOR_ID_BROADCOM, = // 0x14e4 + TOPIC =3D bindings::PCI_VENDOR_ID_TOPIC, = // 0x151f + MAINPINE =3D bindings::PCI_VENDOR_ID_MAINPINE, = // 0x1522 + ENE =3D bindings::PCI_VENDOR_ID_ENE, = // 0x1524 + SYBA =3D bindings::PCI_VENDOR_ID_SYBA, = // 0x1592 + MORETON =3D bindings::PCI_VENDOR_ID_MORETON, = // 0x15aa + VMWARE =3D bindings::PCI_VENDOR_ID_VMWARE, = // 0x15ad + ZOLTRIX =3D bindings::PCI_VENDOR_ID_ZOLTRIX, = // 0x15b0 + MELLANOX =3D bindings::PCI_VENDOR_ID_MELLANOX, = // 0x15b3 + DFI =3D bindings::PCI_VENDOR_ID_DFI, = // 0x15bd + QUICKNET =3D bindings::PCI_VENDOR_ID_QUICKNET, = // 0x15e2 + ADDIDATA =3D bindings::PCI_VENDOR_ID_ADDIDATA, = // 0x15B8 + PDC =3D bindings::PCI_VENDOR_ID_PDC, = // 0x15e9 + FARSITE =3D bindings::PCI_VENDOR_ID_FARSITE, = // 0x1619 + ARIMA =3D bindings::PCI_VENDOR_ID_ARIMA, = // 0x161f + BROCADE =3D bindings::PCI_VENDOR_ID_BROCADE, = // 0x1657 + SIBYTE =3D bindings::PCI_VENDOR_ID_SIBYTE, = // 0x166d + ATHEROS =3D bindings::PCI_VENDOR_ID_ATHEROS, = // 0x168c + NETCELL =3D bindings::PCI_VENDOR_ID_NETCELL, = // 0x169c + CENATEK =3D bindings::PCI_VENDOR_ID_CENATEK, = // 0x16CA + SYNOPSYS =3D bindings::PCI_VENDOR_ID_SYNOPSYS, = // 0x16c3 + USR =3D bindings::PCI_VENDOR_ID_USR, = // 0x16ec + VITESSE =3D bindings::PCI_VENDOR_ID_VITESSE, = // 0x1725 + LINKSYS =3D bindings::PCI_VENDOR_ID_LINKSYS, = // 0x1737 + ALTIMA =3D bindings::PCI_VENDOR_ID_ALTIMA, = // 0x173b + CAVIUM =3D bindings::PCI_VENDOR_ID_CAVIUM, = // 0x177d + TECHWELL =3D bindings::PCI_VENDOR_ID_TECHWELL, = // 0x1797 + BELKIN =3D bindings::PCI_VENDOR_ID_BELKIN, = // 0x1799 + RDC =3D bindings::PCI_VENDOR_ID_RDC, = // 0x17f3 + GLI =3D bindings::PCI_VENDOR_ID_GLI, = // 0x17a0 + LENOVO =3D bindings::PCI_VENDOR_ID_LENOVO, = // 0x17aa + QCOM =3D bindings::PCI_VENDOR_ID_QCOM, = // 0x17cb + CDNS =3D bindings::PCI_VENDOR_ID_CDNS, = // 0x17cd + ARECA =3D bindings::PCI_VENDOR_ID_ARECA, = // 0x17d3 + S2IO =3D bindings::PCI_VENDOR_ID_S2IO, = // 0x17d5 + SITECOM =3D bindings::PCI_VENDOR_ID_SITECOM, = // 0x182d + TOPSPIN =3D bindings::PCI_VENDOR_ID_TOPSPIN, = // 0x1867 + COMMTECH =3D bindings::PCI_VENDOR_ID_COMMTECH, = // 0x18f7 + SILAN =3D bindings::PCI_VENDOR_ID_SILAN, = // 0x1904 + RENESAS =3D bindings::PCI_VENDOR_ID_RENESAS, = // 0x1912 + SOLARFLARE =3D bindings::PCI_VENDOR_ID_SOLARFLARE, = // 0x1924 + TDI =3D bindings::PCI_VENDOR_ID_TDI, = // 0x192E + NXP =3D bindings::PCI_VENDOR_ID_NXP, = // 0x1957 + PASEMI =3D bindings::PCI_VENDOR_ID_PASEMI, = // 0x1959 + ATTANSIC =3D bindings::PCI_VENDOR_ID_ATTANSIC, = // 0x1969 + JMICRON =3D bindings::PCI_VENDOR_ID_JMICRON, = // 0x197B + KORENIX =3D bindings::PCI_VENDOR_ID_KORENIX, = // 0x1982 + HUAWEI =3D bindings::PCI_VENDOR_ID_HUAWEI, = // 0x19e5 + NETRONOME =3D bindings::PCI_VENDOR_ID_NETRONOME, = // 0x19ee + QMI =3D bindings::PCI_VENDOR_ID_QMI, = // 0x1a32 + AZWAVE =3D bindings::PCI_VENDOR_ID_AZWAVE, = // 0x1a3b + REDHAT_QUMRANET =3D bindings::PCI_VENDOR_ID_REDHAT_QUMRANET, = // 0x1af4 + ASMEDIA =3D bindings::PCI_VENDOR_ID_ASMEDIA, = // 0x1b21 + REDHAT =3D bindings::PCI_VENDOR_ID_REDHAT, = // 0x1b36 + WCHIC =3D bindings::PCI_VENDOR_ID_WCHIC, = // 0x1c00 + SILICOM_DENMARK =3D bindings::PCI_VENDOR_ID_SILICOM_DENMARK, = // 0x1c2c + AMAZON_ANNAPURNA_LABS =3D bindings::PCI_VENDOR_ID_AMAZON_ANNAPURNA_= LABS, // 0x1c36 + CIRCUITCO =3D bindings::PCI_VENDOR_ID_CIRCUITCO, = // 0x1cc8 + AMAZON =3D bindings::PCI_VENDOR_ID_AMAZON, = // 0x1d0f + ZHAOXIN =3D bindings::PCI_VENDOR_ID_ZHAOXIN, = // 0x1d17 + ROCKCHIP =3D bindings::PCI_VENDOR_ID_ROCKCHIP, = // 0x1d87 + HYGON =3D bindings::PCI_VENDOR_ID_HYGON, = // 0x1d94 + META =3D bindings::PCI_VENDOR_ID_META, = // 0x1d9b + FUNGIBLE =3D bindings::PCI_VENDOR_ID_FUNGIBLE, = // 0x1dad + HXT =3D bindings::PCI_VENDOR_ID_HXT, = // 0x1dbf + TEKRAM =3D bindings::PCI_VENDOR_ID_TEKRAM, = // 0x1de1 + RPI =3D bindings::PCI_VENDOR_ID_RPI, = // 0x1de4 + ALIBABA =3D bindings::PCI_VENDOR_ID_ALIBABA, = // 0x1ded + CXL =3D bindings::PCI_VENDOR_ID_CXL, = // 0x1e98 + TEHUTI =3D bindings::PCI_VENDOR_ID_TEHUTI, = // 0x1fc9 + SUNIX =3D bindings::PCI_VENDOR_ID_SUNIX, = // 0x1fd4 + HINT =3D bindings::PCI_VENDOR_ID_HINT, = // 0x3388 + THREEDLABS =3D bindings::PCI_VENDOR_ID_3DLABS, = // 0x3d3d + NETXEN =3D bindings::PCI_VENDOR_ID_NETXEN, = // 0x4040 + AKS =3D bindings::PCI_VENDOR_ID_AKS, = // 0x416c + WCHCN =3D bindings::PCI_VENDOR_ID_WCHCN, = // 0x4348 + ACCESSIO =3D bindings::PCI_VENDOR_ID_ACCESSIO, = // 0x494f + S3 =3D bindings::PCI_VENDOR_ID_S3, = // 0x5333 + DUNORD =3D bindings::PCI_VENDOR_ID_DUNORD, = // 0x5544 + DCI =3D bindings::PCI_VENDOR_ID_DCI, = // 0x6666 + GLENFLY =3D bindings::PCI_VENDOR_ID_GLENFLY, = // 0x6766 + INTEL =3D bindings::PCI_VENDOR_ID_INTEL, = // 0x8086 + WANGXUN =3D bindings::PCI_VENDOR_ID_WANGXUN, = // 0x8088 + SCALEMP =3D bindings::PCI_VENDOR_ID_SCALEMP, = // 0x8686 + COMPUTONE =3D bindings::PCI_VENDOR_ID_COMPUTONE, = // 0x8e0e + KTI =3D bindings::PCI_VENDOR_ID_KTI, = // 0x8e2e + ADAPTEC =3D bindings::PCI_VENDOR_ID_ADAPTEC, = // 0x9004 + ADAPTEC2 =3D bindings::PCI_VENDOR_ID_ADAPTEC2, = // 0x9005 + HOLTEK =3D bindings::PCI_VENDOR_ID_HOLTEK, = // 0x9412 + NETMOS =3D bindings::PCI_VENDOR_ID_NETMOS, = // 0x9710 + THREECOM_2 =3D bindings::PCI_VENDOR_ID_3COM_2, = // 0xa727 + SOLIDRUN =3D bindings::PCI_VENDOR_ID_SOLIDRUN, = // 0xd063 + DIGIUM =3D bindings::PCI_VENDOR_ID_DIGIUM, = // 0xd161 + TIGERJET =3D bindings::PCI_VENDOR_ID_TIGERJET, = // 0xe159 + XILINX_RME =3D bindings::PCI_VENDOR_ID_XILINX_RME, = // 0xea60 + XEN =3D bindings::PCI_VENDOR_ID_XEN, = // 0x5853 + OCZ =3D bindings::PCI_VENDOR_ID_OCZ, = // 0x1b85 + NCUBE =3D bindings::PCI_VENDOR_ID_NCUBE, = // 0x10ff + UNKNOWN =3D 0xffff, +} --=20 2.50.1 From nobody Sat Oct 4 00:32:14 2025 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2060.outbound.protection.outlook.com [40.107.243.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 738B41F5821; Fri, 22 Aug 2025 02:04:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828246; cv=fail; b=nk3GaCOrN2V5+z9TpM9GD1Uws1oVeMbZ/GbnuEqsVlXYUni/zmI/WyZtu1hIL718jiqITna+z8O1i1DvdN/OqDh6WMetQRr9+7qGLTuDwTEFuscYm3SruDSaLFDsWmfdVOc+NGOBhy8TMozfrL4y0q6ipNzSGkhLwGWan1RHqkE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828246; c=relaxed/simple; bh=zyEWpQOzI8elfRxrg5lXL9RyjxSJmcYkiuGpB54tQX0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=G3CB/CYm4pe5USnYTytgvvee5NuvSRPHm4Jnc0IyqE6OGz8fruY6LN2Jx9tlrPut8IlOfwpaxlmC1bSU5rDObt/ldl+MSddKPwD77BLdwNaCFzDmIF6POxCSKNk61GrxGl92+hdbeTrgz2D5JYACEf8QfuJ1jql6nnnl6RYXeM8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=NppO4JQa; arc=fail smtp.client-ip=40.107.243.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="NppO4JQa" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W4/4AFvmF+RDKV70XxfxyL2v6j0dCvVxNQ0jwcNq9ygaEVEGrvDP/E0MkgfdPhzzWW/psTzNPyj3jWTlgLBFzOSMkLsT69eRsruTE/svVguVbGA2/kBFkRYPIZ2U4hsyEBp8DJbfaAu0+G1SzTos078SjkZHZPOfiR/24GjfyWRfzd93I9Hyd9JL3ePJvwl68/keowkkQKaTs/UX/9vEqwLYp5j2rc1CMIxX+/BuAnAKHZhAZrlNO49kz2Dbz18A6bu7kG1BVBflx9sdFRcVdAWkdsQK7D5X4ojm8DYz0U+Ov70ZyhWKdb8bNSihXGEE/zQBS9cBJ6mdXXJA2NWXug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+USrqwEzeiv0JfQtBdHhqDthV+QkNEZRfk50sbV45hU=; b=qE8+HAmh/gJmOYw89JMcgUGRMV5awHkSej8tbJz5teBdPGQtBVUYFyzh1pteOBKyr9kMy/PGrzkOxMkzjCDaqJ1IVWoCN7h+wclLAL9OSHy2K2B/G8n7OUFn80hyCVE47WOjmTAatNi97GoTy0xyno9v7vWlWwQwbQFk62b9Rv8kr07xzDGOCho97pm0cak+OOfxwv3Cn3b43bhji/jRuUE2TVDJXwGuegvWSYiSPa03L6AHAFGOej15ZErMM9d3uG8tHt2fi58w+lVpNZpfM6jgwXDqWAR7DTNg2yT1CdZFPWbS62h3IDZijRebW6zDaQJG2W82MVgXaM69JXLjzw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+USrqwEzeiv0JfQtBdHhqDthV+QkNEZRfk50sbV45hU=; b=NppO4JQaNnYqwxIPi0IwUsPmXOZ999bubs6tgPyDqHQbMSaxEIWRdLfXhwJaQgV3rm+t5epigiUT8JSkH0PqFoKQcNL6yEs82LdD9o9Cf+D5JxfItp3EyNB/kH3pdz6NiVN2mFuOI3nkFkwul3E8aC1JnvnPTxDvYDKheKSMVZTfQlf07HyI4UZGsIbb4s5TiE7TFvKhH3INQpUWv6umq+0aF0h2egKyGhhDamrQpczx5gn7vbIB+Rnfm6Ys50jhF1qMocf2IK+K9M3sI/htnvhNs4eHsfETpoGzbfbaOcPFXp4p6qhW8TyasEYUNIvgLwnGQpbfPq56iOP0e8wfGQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) by PH0PR12MB7907.namprd12.prod.outlook.com (2603:10b6:510:28d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.15; Fri, 22 Aug 2025 02:04:02 +0000 Received: from LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4]) by LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4%6]) with mapi id 15.20.9031.023; Fri, 22 Aug 2025 02:04:02 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , David Airlie , Simona Vetter , Bjorn Helgaas , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, linux-pci@vger.kernel.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard , Elle Rhumsaa Subject: [PATCH v6 3/5] rust: pci: add DeviceId::from_class_and_vendor() method Date: Thu, 21 Aug 2025 19:03:52 -0700 Message-ID: <20250822020354.357406-4-jhubbard@nvidia.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250822020354.357406-1-jhubbard@nvidia.com> References: <20250822020354.357406-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0130.namprd13.prod.outlook.com (2603:10b6:a03:2c6::15) To LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV2PR12MB5968:EE_|PH0PR12MB7907:EE_ X-MS-Office365-Filtering-Correlation-Id: fab910d4-bb0a-46fb-ed94-08dde1202a33 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?+ccmlOgNaL0fYCIfcqm9yRMG796pyVAtInGmzoWPg5/XbQ28kWXe7CRXGT+2?= =?us-ascii?Q?jCCZAA27NFUoqj80YF6OglyyybuGmy3qcgmS6mfn9ghQm3eiZnUqwXsxRrtq?= =?us-ascii?Q?DI4SWLL1upidLS9ylUy3dpswFguEI/6CX048FOq2OxSgUGI+WNUtoXuhkhY6?= =?us-ascii?Q?NmbRBAYe+qBOInRqcgvTlSKawjuB6DEgVEm4ELgmNHCUyMNk7qvBKNk9Bmem?= =?us-ascii?Q?+B+HrOX/sxaaz20U3hMP60WjsyEKf+L5KFlvOK+GL7Vmm1IHDhwvJAW66Xtw?= =?us-ascii?Q?i/Ooydl2ChZ7gM7M9bKvv93XsomydPMoonaySYWjhJ5Pjcu2cT63pkbetXTz?= =?us-ascii?Q?sEFYFyMXXUsZQH12YqzWpUuoRh23M5vs5abf/HDghH6vk8a9bJLpI4sN0Zi2?= =?us-ascii?Q?YscD0+mADtzrvT47uQkqPNEc2YsTXpLgVw64n5Zns9rKJQflxV0aF/fG7IWe?= =?us-ascii?Q?cJEbw6ZigC3tvdrgoQzNdFjWvEanLHdpPbjbXY0OLlYn2PUhFg4aBB39A5j2?= =?us-ascii?Q?3OirhJm77gtTMCMOoiajwdC7vTO7K2CPba0NpWpuq4h7/POUHRDFL0bv8ixz?= =?us-ascii?Q?gDFgrMifgktJLxZmZgZHN4sT9FjDNZGzicjI9rv37iwpeLUWFI6iyL2vtKbA?= =?us-ascii?Q?EbwmRmThqiLbd8nBINgF/4Rg7T6+xTqOmP4CjxQYqSkaPJ7XcmcCm0Pingth?= =?us-ascii?Q?9PzbzoBk8Jl1LIOrWiv2hjAFzVxWuASBlr1+GDRwgQYYEUFekyjmDn76/nOG?= =?us-ascii?Q?pNFbjILjCKZnsuc8EnG4lxVh1iWTeMoRf4DlbRF30tnt6E707UscywR37OWK?= =?us-ascii?Q?zdMS5BbCjOnoLeq4YJMHdkfoXvsoawUmT2QOoqnNAG30bexDrHNd8MrJ2f4u?= =?us-ascii?Q?vo/XJKNOjynOy/Vou1Zc14kbDMnqJVmwl95QYVx56vFhnFH6Llug1fkALwng?= =?us-ascii?Q?txDyTaS5HuNINjOkTwNO1PGsFp00RKoh+o9G1EtIn4qbAWkTM8uUsk8sjsy/?= =?us-ascii?Q?zRAk3izbH19N0HilkC28qPsTtbrBnGT9hduuQEp5EMIFW/0XfxET1JNJTebS?= =?us-ascii?Q?nRlaH6A2VP2rc/6L+H0L/wrP5ecm0Rk2lnMcJZg3IoEkMUJ6oj3lFtavx/5e?= =?us-ascii?Q?wMetJkrKVn46vwhuihN+As01omeQ4VYZWexKI8RCrWKBBPVSO//G1ijcyz5k?= =?us-ascii?Q?Hw4Fk33MpGWh3srU3ySuur0g2rqYvLaeYq0jblMClwTs2I0v4av1TlOsgEhZ?= =?us-ascii?Q?nkL983I642VoofRjGgMdAKEPHd52F2U8i55w6q5HXDyBp5TSf4Ls4zxDkPIW?= =?us-ascii?Q?Yzdf8FnujLha7qx6qkdQNkZFE+PAtUdsmmExI1Wuu6/AueMU0/B5Ydj22Z+0?= =?us-ascii?Q?PE2jc3hqcjjb9k50lDgYvo2OpJjZM+O7zvANyGhp21buZ0+om9UkH+jiowgZ?= =?us-ascii?Q?7kqOQmDYKY4=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV2PR12MB5968.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?D1COqKnKktmswls8XFymPaBFTKYgi+Tms0AJD8wiySW8oaAshS8+GLhuesj6?= =?us-ascii?Q?N/lNKBUglGd8YT8yrwVzUuIrr05iFCprRZ7a+CqbXChyfJ7PGatHEgjF6jpC?= =?us-ascii?Q?WahwLlSRqwv91fvsHIUnGhZSZGuxDLp3VhXhBvjiXwFPQp+s1bXN0s6Z9b6u?= =?us-ascii?Q?Dql3/zxHlPh85jTAPI8ReGrmuCIpOPChNuuhjeuBvaPfiRDjQjk8X2Oz5iy7?= =?us-ascii?Q?0JYDEJV2TsfMl9d+czk8EBW2LoIVkXzIL/8SKiHcbKtm8MTB+mjGzA4IkSWP?= =?us-ascii?Q?oZCycs8VvwHshbdyzW+/yg8LPe4EAYnBdWDfs45amJR6NxTfHaC8g+FGKNlq?= =?us-ascii?Q?VXgVjlIbcDZwneslKS/HaRk7EnXTtv0z9IlotV1QQ2lVPdNoiJjVmkh3h6HK?= =?us-ascii?Q?Z1VLjMMIKoVlgWtKGI+YlYFu+zLh8f8AnJKJJZ/gxSgzMYroi3mLLelB78yv?= =?us-ascii?Q?b+tI0m6b9MM+5fDJj3J5ObtSGXB/0PQGjzhovBDFjm5zUJqu9OZHnjn0btRz?= =?us-ascii?Q?ca4JrUeWZ/4ZyKx4vvbQUj0ofxuMRKRAoh/ZT9EFIb3UMO7YSMl6BR5kT8Ka?= =?us-ascii?Q?3AmI9g+R6EVCMyqSSNh0LhIiJsPP0dH0Bp/kTk/nJAZHFhcORwXhM4b9Fhzu?= =?us-ascii?Q?feVuaJIrn2kIDWLprHfYVCzKNtRrElxlR74lpuFofcvSXj+eXiUbuV5aYJz5?= =?us-ascii?Q?3W0wubeo6G97VLiUD7sZTvcKtkr0xnhNSAytMWNushmPio5U42dw+oJdyWJf?= =?us-ascii?Q?w3YoAgKMjuQZAcJLpUyTHEEfmpupbhgBybnKPZNCD7aA/pLfEvkE9qbQaVRd?= =?us-ascii?Q?z9G2lkT1YLghTwS+/6WzLks72ECRm3fAchlZqJiOQwmlVQ4ncU3CdHVDtKVA?= =?us-ascii?Q?AEWzigFzRk7YS8z5ioRYGvGB+breQwpdyFc29mrN4RtDw2nk8mzcdd6TFxES?= =?us-ascii?Q?ABcXrVEeDOxbTRUWlSUYmCy+rXFgOhLZ0Ctsb/KcxlEwQUuJ7UdE1VI0GKBa?= =?us-ascii?Q?eH9u+uvVOjexacW8WBaTKCXalMjohS5+ioimK+rgCw8r3EmKjuhSpcDh43Kh?= =?us-ascii?Q?Pel4njWhxCoSkWYLLmuKdsARhUlG6e1A4P/MyOO2HO3XN7tiIuh6FW7GV8z0?= =?us-ascii?Q?8auOr346McFZW8jFAD6Ccrko5PLM+Dzz92DU2yLy2QQ1uVea8KhdIydVCAPl?= =?us-ascii?Q?hKgdAidXLRaTi3Fr/lSqDnVeEGjg+PWAN4dDIN5bsS0KU+zOxsR83OtyUv9d?= =?us-ascii?Q?8aAm5QITDYTlLnmFVkJLU/rUNb3s0fcKCWziX9IBlfrUkDWvCIGdSSuwXP2N?= =?us-ascii?Q?64Nr+kKsXfXlKvb1y+VyrzJv71foCzcY3tMUK+em+v7JJ2GmKgFuGQK3sk3x?= =?us-ascii?Q?AjN52+IAqfdYM8Eb2dS5aHsPEZR2qtE+w5YkVEScndN6/7kdbligpjBDUcXf?= =?us-ascii?Q?BsG6AgM7SoH93144lsxM/OjbTJ+9Zipj5qdaAS5Zs5GFoF7u8NkYwtyD3FpZ?= =?us-ascii?Q?NEbM+0sKCwQCVHLQNXZ2Q7KmEsIU/G6AsRZDUF9u6koxCwA2bowPHuIEkGFr?= =?us-ascii?Q?xr4KVAAfKrCGST/Ekcvc8XU1Evt6wDAxZ09ePh3g?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fab910d4-bb0a-46fb-ed94-08dde1202a33 X-MS-Exchange-CrossTenant-AuthSource: LV2PR12MB5968.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2025 02:04:02.1193 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SNpvkKzIJCHXT5EYq7CAPS0mMvXFDH5Nc3T8hG2Z/5UEZSTcLsvOT5ZwxxK8JDJwNfagchePqU0KaZWMrYc+Lw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7907 Content-Type: text/plain; charset="utf-8" Add a new method to create PCI DeviceIds that match both a specific vendor and PCI class. This is more targeted than the existing from_class() method as it filters on both vendor and class criteria. Cc: Danilo Krummrich Cc: Alexandre Courbot Cc: Elle Rhumsaa Signed-off-by: John Hubbard --- rust/kernel/pci.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs index d4675b7d4a86..504593c882c9 100644 --- a/rust/kernel/pci.rs +++ b/rust/kernel/pci.rs @@ -161,6 +161,27 @@ pub const fn from_class(class: u32, class_mask: u32) -= > Self { override_only: 0, }) } + + /// Create a new `pci::DeviceId` from a class number, mask, and specif= ic vendor. + /// + /// This is more targeted than [`DeviceId::from_class`]: in addition t= o matching by Vendor, it + /// also matches the PCI Class (up to the entire 24 bits, depending on= the mask). + pub const fn from_class_and_vendor( + class: Class, + class_mask: ClassMask, + vendor: Vendor, + ) -> Self { + Self(bindings::pci_device_id { + vendor: vendor.as_raw(), + device: DeviceId::PCI_ANY_ID, + subvendor: DeviceId::PCI_ANY_ID, + subdevice: DeviceId::PCI_ANY_ID, + class: class.as_raw(), + class_mask: class_mask.as_raw(), + driver_data: 0, + override_only: 0, + }) + } } =20 // SAFETY: `DeviceId` is a `#[repr(transparent)]` wrapper of `pci_device_i= d` and does not add --=20 2.50.1 From nobody Sat Oct 4 00:32:14 2025 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2060.outbound.protection.outlook.com [40.107.243.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 405812101AE; Fri, 22 Aug 2025 02:04:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828247; cv=fail; b=GSggs1Y8j48jaKLbRHklevOs+zO2PO9E97vV0bxA8sIAY0L67VZ1TtG3mLdzLeIYjEhZTitzL9Gudp/bl1Js2aWZea08zyEgz/BJC1/A4rv5nFQprbMB6R3s6jucIpZqMnciYWvjGp7bHgMnTvaxBP8zqz3B+WIXjqsG5M8hZi8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828247; c=relaxed/simple; bh=gJVGVgmPJULYZc2O/HmwRnUBDTz1MshPTMqu7UNhhag=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=GkIc4BKlEqRn3ceKhII1m9bznYrId/O0rgXWP3wF2dcJe7sYxlr79T5oPDRTySJjX3sMvZ406cX2vbeWkN80D7FtT07KrMoVPve1fgXpcBVA03JBhOLJtwDZHZG5PfO89J4ANP47MVqPRo8gXBXzigF7s9U0JgdU/YenW8xjkko= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=O0gU1V+h; arc=fail smtp.client-ip=40.107.243.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="O0gU1V+h" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ow3YhKCzmFWBfTwy/RNT3GHW2WE5snXH1EwrLAx99XYmYTVsNAe3HgOeAZOZ/McQT8Y7QsVrT1xxqy6jXS8B5dgU4tHlSWk7qJSLrHfqGowvmvtbZhAybB/7r8SyKO30kfU2S1oNQ277/6yZIO7mgxe3QGSCgHvkJ8Usl40dHSNHeNIjgLjLWvsTc/Vzmn1SZzKboPv3e70RM5Rh4JR71q4MV4a0uUob5ImFCMlQA81Iz6j8bf1/ssm7erJg+PKDMamJW44yqlqEaAyaxjWHkeLzh+9RT1lE+oUwrLefYvrv1TBu/wsa4Wjt64AsBl7CTGc02Hjg5zh228zNCmZsLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YbEfdLwhoaC7iQITFG3BVrx0LY8hd2RLOOpPZQxcSkQ=; b=PYTSMqo1PDozZNsrnOG2AXJMwRTD95KLauZJrXbxGmcxePkwbzkGz44gPdEt5Lgjia9n8JoxLMQdrQs6Q/DYCbKuBrCYECZSOImghT5qvHEMOsv++biZNsOS+Mqq1boDYO+YkFeiYvmAP0ibS+aK/Mh1CYj4f4VhMiE1AbwQu6Bd7BmxZXgKMfutZGXALH7UT25FK77a7yy2sIoA+2lojwVtJVZLT5yfat55jKiylpiDV7PlEYQ++DSIrbEkUxCkwEXBF7Xw3IRuEdr6ZS+o/gUguO4+0DLsyJBcFamQ6CdrwPxkQA4iZdsSdD7LaEFXYhX/xsakCXEBAPlPi/oqmA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YbEfdLwhoaC7iQITFG3BVrx0LY8hd2RLOOpPZQxcSkQ=; b=O0gU1V+h1gInYDH/fCzuRLz2+/pzR9bIMMBvxHN9AuWY1GBgJPtj2NIVFBrHuRAF8NqzAOlVruf581LKEDjGs1T9bIVXk9hstvYBy7xvH8ZGkDMtRZOnKFR70KBQ/Li9AEDj/XxdKbIp1enPojLpqSJ3c1pKzRsMJ89Yczj9ClnTjBMwWIfMTl9NcSdgZDXUMN24D2iJjzc4UEmMwhZIR8EIf4WTF1F4G9v40Z5rJsisqs8Mznac/M63mS3cEyc6TlhE0nLzNUMHUUx98Gleww9VVn/ntZ4NirEVdwwo+JSCXURMLtY+TMAmRAMX4xG+bKVQ+qKQAOs4XFWGBfTdqA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) by PH0PR12MB7907.namprd12.prod.outlook.com (2603:10b6:510:28d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.15; Fri, 22 Aug 2025 02:04:04 +0000 Received: from LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4]) by LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4%6]) with mapi id 15.20.9031.023; Fri, 22 Aug 2025 02:04:04 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , David Airlie , Simona Vetter , Bjorn Helgaas , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, linux-pci@vger.kernel.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard , Elle Rhumsaa Subject: [PATCH v6 4/5] gpu: nova-core: avoid probing non-display/compute PCI functions Date: Thu, 21 Aug 2025 19:03:53 -0700 Message-ID: <20250822020354.357406-5-jhubbard@nvidia.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250822020354.357406-1-jhubbard@nvidia.com> References: <20250822020354.357406-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR04CA0005.namprd04.prod.outlook.com (2603:10b6:a03:217::10) To LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV2PR12MB5968:EE_|PH0PR12MB7907:EE_ X-MS-Office365-Filtering-Correlation-Id: 92a44324-aacc-4a54-39d8-08dde1202b63 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?LEWxI+wejpLYEUk0pNLhJOmX/C8r9msi4HGN9k+smhw9XqeAJ3tGZqksM7Ch?= =?us-ascii?Q?oStj26APdCwyja7/O5N16sV6G/83b0L1NCWKxyM7pmjqMa+H3t+xe2PXyNYD?= =?us-ascii?Q?Ji2LwhaW04GjQK4UxwLYxcbBuk/d6hY48kTAyScFZ4sKzWbDhwNosVl4kaVr?= =?us-ascii?Q?MQ/y6XuS9+cnUGnIlIhLL1dtENItD6dmBq9/B8c/jkt+3r9hsdgfWSJj6Fmx?= =?us-ascii?Q?7ZeztZ9qY/njfJLmLVN7l1SlEWv4tHNaQVC4ffzf3Uan9kpRgk58TVFv1wTs?= =?us-ascii?Q?0VMNnqTPbcke65Q7GLWcMmB2Nzn1ECAOjGnYihzPJxMTUU9pDtKuu1RB3RxL?= =?us-ascii?Q?jSO8kZNTBrGwG5Nd9YFfQe44bdhH/kchf0sEB3fU+fqtPzpVMqOa6QRCZk+U?= =?us-ascii?Q?ds5b9ZWdhHOzdeV1s4Xd9lIpMo3DT6bEF0bNC5QepQNUhMfBsgyXRPxt9jQ7?= =?us-ascii?Q?z/4ys3wM1O8pFLcMX5nobDHNTFsuyTPcDpxvxbNO/CO5664yaPNYhZe1Dn7r?= =?us-ascii?Q?e5aS2wj/X8l9efSABW5+opIg/5J1Jd2JNGfPpbDONyxVoC7nHN0lzL0J6FGX?= =?us-ascii?Q?8HpXt07IEt/vC20uLB9fFcQmj+xAWA+IulLA0F2HdPQU0SiQrtg1dNF5PUoL?= =?us-ascii?Q?ICplmTTrNhgAokLmVjPKDK8qYTp8fAyYvsZiMTsU4m30khcbGmMKQSQz1qBx?= =?us-ascii?Q?8gt81oArUzc5Yso+2asSra4vgKNUlC4i7DTPpMl2l2I0j7AcRebhOCVsyx0l?= =?us-ascii?Q?LWblzs8rdItqEV5mJxXd6tcHCYOyIMkvmEZfvqwPnPAUXWm+41OuyjAJjJ+R?= =?us-ascii?Q?Wpm9WfK8VJf6e7Nkimlu9rqC3Q03tb2dIC9J/kZf7tQV5x2c/DwcIy8Htr1q?= =?us-ascii?Q?0IbENkt9hwTe0ygLRVkC2COUSTzN0CHDpXjLKiw68zqRIOSbNDMvAMLodS7g?= =?us-ascii?Q?6Fs1PdifR7knDHpDnjSpuYTI+UtgmY/UaKrp3UhM2LgP9qszTUWa7E6SUae1?= =?us-ascii?Q?z0EKDkz3XchMammb+3VdMTLkBVwRvmRcphtNJprOb6IC534A0yiyDztnFjJc?= =?us-ascii?Q?RfqQfrA9x+YU2kB06Nrj5/iMQsrysQ03LCL025p0mW67nbZUIFhjU12+MI0e?= =?us-ascii?Q?BsNmRh7ActO22HHixvIszYgLSmdqOev7WB7aBPpaVRGvBAjItd2nnnzhrLeH?= =?us-ascii?Q?u7uZYPVLspAwtaLwsrJG/Jdw+Xo9L1vriuQBnmOkLd6JuXfsEEQmXSe2sKtW?= =?us-ascii?Q?P/Mj5CgAlM8O2iZCaZTKvh0n10z9IDMebnAl+3Gp2mAuXErn6MRkWoGJWI7P?= =?us-ascii?Q?2gjbVDxYXCnaT2RdFB0kYqiL0KNNk3FjcfisiOcMTKVwz4vrp3fEEoQPKCML?= =?us-ascii?Q?CtKDByf8wuOQvmvNzMFjAQUEGDXQ2p4LZO3w3WPPBHEu3jDIzDhHxmJVfw6H?= =?us-ascii?Q?qWcn9GqB4rU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV2PR12MB5968.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mTZnmOQZcVdmn28lB/V9pNLzsiFR7aK2QCZV/fZBxI5wcOgMNWZTxPHXDVjm?= =?us-ascii?Q?aUXOUnv3/JO2eAkZg7/+9YpguPGsfN6J345IfLBr268RKHdCyOnN5bWdLK+Y?= =?us-ascii?Q?Nh0npj5kH+erMsGwHoHIWuZlJx2vaAuPBP9TMdo1UIO7dnzh3Zusx8J1S5l0?= =?us-ascii?Q?0i7QoXSlooLK5s64uVTmyvk/g804cBz5OoT64LQj4lLzSWjRcD4idsCBuUYt?= =?us-ascii?Q?CcQh133/FH3WkPi1ARBI0dSwbCdF+Dvj51iF55CoixpEmx207FzVyfUL6c8c?= =?us-ascii?Q?482OVvUVYQx1ffTeF3zLuw0zw7r34UQJ2zq83vo49BNoCeNt2jlnzVvT1nlf?= =?us-ascii?Q?TfigOJo2ModnQK5iHiZcHmMlK35i9h0cloco4k++pJ3xhWzKQWvGMeMo1vqf?= =?us-ascii?Q?WtfdWyNnFzvgQYFtgsAeuq3UPbVfv5Ttwk9ghYni2m6+6et5zvDMLv+59tnl?= =?us-ascii?Q?g59XcAEvYrINvP0+T9hWGyI0E7W7TMnvKzA/6wK0MgSuemBhI31OeaX87172?= =?us-ascii?Q?+2FQyF+gKa2FeYsO/aBoM8UuurzW7gFYNFjj+rNVn9KKONHywLGx/7L7WF5W?= =?us-ascii?Q?i6f23BNqKl5jCAZSkSa7eHUQK4qK3dGJ2Bvp8i42uJ9H7y+ij2ZPaIDDNLqy?= =?us-ascii?Q?tEQ8L/+GZWCCEvOG6cjLbZXGeLxnOofBdvMPO+FHUayryF5tCtn6paYjw96P?= =?us-ascii?Q?aF+AK38tPKHDctLhIkMLMKZ2exvT3nIQOWuXVQ76LD9GHH5I7NCvR0tAeoqa?= =?us-ascii?Q?9Kj0kIiUZ1yngLhYQXlRO0ga8eFrlKqjSu6WTkSZhJOtAhrSCLb8VzyWFuEa?= =?us-ascii?Q?21qr6LTFM5U13h725bHPRuF8twNDNZnUAODhb4U//FaAjYbIDasy175PcVTb?= =?us-ascii?Q?pOJ+fSj3vVSwRaVG0ZGtXAHwXNkzDUZabN22Lm08BfwZjNgTsGLy1mMFEMxp?= =?us-ascii?Q?h47uhCUAk3NRuiKW7M61YKiR/8yjbiltClNgIBVxXzYInNp5qI7n/7iPZXh/?= =?us-ascii?Q?ImxlizT0zhIbIvIOsCGlDfasRVyOgYdQNxY9SkeSHGIR9cNcaxNdt70aAzns?= =?us-ascii?Q?vczTIM3CjI/dF46juFFG5cmcYtUge5SvrZAp/b26LX8N6kYGv4tmobiZTITC?= =?us-ascii?Q?37sXMrqlVt3oWGKI16NaT0ywbsYvklK16HlF9eADwWzrlN3fJRfWPJCxfIXM?= =?us-ascii?Q?pEUpEJtwpxjnQ1Ia5OUCul/kQojppZqez3HdObvj7yC1YVFkIaw9zCQFHmVy?= =?us-ascii?Q?qgalHcwL5r/nK7yA1wDKFHgkyAi3YQXIukS9eLm/HwpNJbNHTL97xTP5gnvK?= =?us-ascii?Q?cb6h38gxezflM4Kmrzwheackrxyg+0NWe2xZdaoRWR3lx3qhAf4mTDqaIqQc?= =?us-ascii?Q?AKc6JEnAazXMUBJ6wcmdQOxX7VhKnXhzKJe9Q1mEznhGMAyTWTIT27GR6bF9?= =?us-ascii?Q?kmE8SU//larxuY2g+fUeu3eJiUsdhIWVccUjoDcHOMicqaF0wEbHW6n1Ql7t?= =?us-ascii?Q?+m/S7K77Wc2H0Y4fTW8KpJxx/EtwG6G+pgKL/49NhVX3ZxKAXgui0PUqZGMh?= =?us-ascii?Q?O2+lK53TM2GjPjnApA9J+zcxNWc1qd+f9dB9qmBI?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 92a44324-aacc-4a54-39d8-08dde1202b63 X-MS-Exchange-CrossTenant-AuthSource: LV2PR12MB5968.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2025 02:04:04.1750 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rb0RUJeK5cKswOH1yNZy0LiOoCDqeU7eGFvDZT6bdtPABepdbAWJsBWtJ1iTifi6Ej+drDL1CYwWgLV3mQ8Szg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7907 Content-Type: text/plain; charset="utf-8" NovaCore has so far been too imprecise about figuring out if .probe() has found a supported PCI PF (Physical Function). By that I mean: .probe() sets up BAR0 (which involves a lot of very careful devres and Device details behind the scenes). And then if it is dealing with a non-supported device such as the .1 audio PF on many GPUs, it fails out due to an unexpected BAR0 size. We have been fortunate that the BAR0 sizes are different. Really, we should be filtering on PCI class ID instead. These days I think we can confidently pick out Nova's supported PF's via PCI class ID. And if not, then we'll revisit. The approach here is to filter on "Display VGA" or "Display 3D", which is how PCI class IDs express "this is a modern GPU's PF". Cc: Danilo Krummrich Cc: Alexandre Courbot Cc: Elle Rhumsaa Signed-off-by: John Hubbard --- drivers/gpu/nova-core/driver.rs | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver= .rs index 274989ea1fb4..5d23a91f51dd 100644 --- a/drivers/gpu/nova-core/driver.rs +++ b/drivers/gpu/nova-core/driver.rs @@ -1,6 +1,14 @@ // SPDX-License-Identifier: GPL-2.0 =20 -use kernel::{auxiliary, bindings, c_str, device::Core, pci, prelude::*, si= zes::SZ_16M, sync::Arc}; +use kernel::{ + auxiliary, c_str, + device::Core, + pci, + pci::{Class, ClassMask, Vendor}, + prelude::*, + sizes::SZ_16M, + sync::Arc, +}; =20 use crate::gpu::Gpu; =20 @@ -18,10 +26,25 @@ pub(crate) struct NovaCore { PCI_TABLE, MODULE_PCI_TABLE, ::IdInfo, - [( - pci::DeviceId::from_id(bindings::PCI_VENDOR_ID_NVIDIA, bindings::P= CI_ANY_ID as u32), - () - )] + [ + // Modern NVIDIA GPUs will show up as either VGA or 3D controllers. + ( + pci::DeviceId::from_class_and_vendor( + Class::DISPLAY_VGA, + ClassMask::ClassSubclass, + Vendor::NVIDIA + ), + () + ), + ( + pci::DeviceId::from_class_and_vendor( + Class::DISPLAY_3D, + ClassMask::ClassSubclass, + Vendor::NVIDIA + ), + () + ), + ] ); =20 impl pci::Driver for NovaCore { --=20 2.50.1 From nobody Sat Oct 4 00:32:14 2025 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2060.outbound.protection.outlook.com [40.107.243.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B23CC2356CE; Fri, 22 Aug 2025 02:04:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828252; cv=fail; b=aSwvFFoOGRBFIWVafhCf2ewZPWkduejtrAGhFPukRUa29YKWqk46h03+Ghv8fkchZTRBwLOMH8sl0yEmR2ycBwgC8CHBbVfHrGpaBYP9WMpv7MvLwEqMdhK++d6laEM2JjE/Zc5DPls7Ir8Y7PLj0X4aldNl30tAdZO/7Jd09rM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755828252; c=relaxed/simple; bh=5AJeXBRDTlAoDMPi6jWxbZaK57UqYzS/zbVFqJ3zQGU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=CZDKETUc9RnoOvdB7wzo4dpfm6bvHsW1PT1fbmynuqVJi0TfuHtKsyXLrjQF7dg/pl7hBEan81YGDWtsSxhQ33xRwTZr5/9Wg/y8mT1YIYqVX6fNdBHke22DS8yFJu+xE7K1yd2QxZg9iVdBP2Mo5Oo7Ql8M+7A9vb8NFvMdaEQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=f8Y17+YF; arc=fail smtp.client-ip=40.107.243.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="f8Y17+YF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DCC/KFcKdfw86AS1/HVVfkJnqNl79M5r8z9PpOp8bYgSpCSZSJ8RvZ+OSEwjbM+tHO/WsPwvz6U39oCSTtl5gIKg8jomP4zWWaiJy8e65oJ0TXOSEvDb6PQ7ireRL8vUzkb2no61i4Uzsj2Kbag6U1cfcVCWfmHNayEnENvswKYK2Et7P7hOPvb0Kxgr09KLINt9iCG3vh52VM5nVdnzpGnSVJuGcjXZrfHDqIqsUHjihRlxbBpv+4gJW9ZhVLWAQJDy/FrYlCzKPfa/2ld7R4/0II1phdCuB2/9E8DbBC5UmRXDw9fFPmzH5oW+/NVeAQclzr7NKoM0IHYLkubFRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HwprLk1/bgQy2DkCRo6s7iZqGCW0Vu6JYpizHHK5xFk=; b=UJ8uwWkR+ksfatO7vcujJCBtenloIHozqKwRIoIE6VJkMFv40/nXxNxekBMeRNKhZK7ReuLUxp/tzfJChW0ZvLm1ylfJmkb2NnthGgl6SXLhLcJHcN7W/GKayuhVeI9rdjrkvGNjS93aZH+5yEm45elW/6QdC54b6SUMirNakKqUiRwQ13oIzI4K+2y5zENnM4xFC6sHyRyleTdVoL9ZZfmRQi9y4TgMvQ+wwF5q9hPN39pSNK7pELSSIsXkCAsxcPrlPnv4h0eKFVWtrpyEXi0mwygOnvJa0t/EgGslYfet3mD8y4D4N0YqnWL5+Wv4NWd8wA1C+kV8ykAZsz6qIA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HwprLk1/bgQy2DkCRo6s7iZqGCW0Vu6JYpizHHK5xFk=; b=f8Y17+YFMW22tIykZYVQxZc5qXyMzdnpJ27STKmHRT0IzjL6JN7I+WyEMfAWfsCG8xlnb55ovPeE4gMEBJ0mJVuYPNnHk4wEj2cWV+aj++F7EFf5rzlnRuX/U6sclEukvC4dv5VvB80S3pykLeNKFgzsp+96PXr2soRJakVCSnAQfsLt2ohODdJ/9Y/IGkApp+5Q5HIg2m2y2T/L5hLG0yKMdTQGo3B8vJuMcfJzGfHlfOdSh70jgqU2EQWv1TpT7Sct+FTIPzSf6dSVmLdCUWzcUo90yeUeXoOpV3c0EqjhqG4Xqf/7HJss41KDHFrwe+YleWeHUHelE8ZKQ40jqg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) by PH0PR12MB7907.namprd12.prod.outlook.com (2603:10b6:510:28d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.15; Fri, 22 Aug 2025 02:04:05 +0000 Received: from LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4]) by LV2PR12MB5968.namprd12.prod.outlook.com ([fe80::e6dd:1206:6677:f9c4%6]) with mapi id 15.20.9031.023; Fri, 22 Aug 2025 02:04:05 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , David Airlie , Simona Vetter , Bjorn Helgaas , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, linux-pci@vger.kernel.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard , Elle Rhumsaa Subject: [PATCH v6 5/5] rust: pci: use pci::Vendor instead of bindings::PCI_VENDOR_ID_* Date: Thu, 21 Aug 2025 19:03:54 -0700 Message-ID: <20250822020354.357406-6-jhubbard@nvidia.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250822020354.357406-1-jhubbard@nvidia.com> References: <20250822020354.357406-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0137.namprd13.prod.outlook.com (2603:10b6:a03:2c6::22) To LV2PR12MB5968.namprd12.prod.outlook.com (2603:10b6:408:14f::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV2PR12MB5968:EE_|PH0PR12MB7907:EE_ X-MS-Office365-Filtering-Correlation-Id: b71fc90c-5fc9-4957-785f-08dde1202c59 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?mqSwt8qyIJB419ek0XGhNXXwrtaG0gKhqMjVCLj9dWPvoNjNr8d32ocwLvYG?= =?us-ascii?Q?RKiZMoBpneHye7FU3b7b4WZ+lRQ9hAsqGio56NaOj3adI8mSVisLoaRNX13h?= =?us-ascii?Q?LSqoWc2wlc0FGaAal9utb2gBB5lBANg6aa6r/D8kVEZk8eMtNjBPuH038crS?= =?us-ascii?Q?7bmvgnPU4lc21mExUgqjQNBAK0vo2+B/GPBVym3WmLyJrOEKzYPLzxbX7B1p?= =?us-ascii?Q?yCK2gzqRIKnqRfusAjKxKv++zvxP/PVtmhv/fwb8kITQfMO/Fs9jsS/S1IpM?= =?us-ascii?Q?IluwB0/les2i944SByKLWvFnYgH1CX/+ECokHYHVbCXlB1WGhj0zj0/1juSH?= =?us-ascii?Q?8/gE3rYhb/RBkLv2Br3Gyzrh2wJzsEfQx3xRJZd+goLGrpncte4kequxKHxC?= =?us-ascii?Q?8aghB42TcmyN55Cf8WV3DxnQyT4b60N++v9ggmM/XkTN7Db2tYbtcL4/jMn5?= =?us-ascii?Q?WX4bPmofPZpsOOFOaIXxguplGQGhEdXz40OnHvcawZQJFNQj01Qp4EB614Rz?= =?us-ascii?Q?XKRkLv9hjXBA2ZhzBpo9bQghMVNsxnEkaF6i5RRhyS0+g9CGHvNinnldb1UC?= =?us-ascii?Q?ZTTbCgO9dco0KDUZa2DVv+WOliF5y6ZiFRS2/RBpUuI1/EXUf1LlPcDK8shL?= =?us-ascii?Q?MS6GlMHaTd4wDG9WxGmHlXYf6T3cE1oLZe6Cibd6dD0aC8ahnain6pkjoj9N?= =?us-ascii?Q?KMg1OAnLzkj8m0Xz/QJwj+vEqZg3ljeS4s9cllZS8z/tHa2s3ST/6p3NAypT?= =?us-ascii?Q?1Zl4ijLP6qCttt9ZQxR38x5dBvyj8eJn3zqolQY16kPYJz3ScNYIKB37sIIV?= =?us-ascii?Q?FceyFzkCXNu28vUl2BSUy5LdpmY6mT1kFfmDUgiApHC0GNVWdD7Gj17GYi8I?= =?us-ascii?Q?2u4KfVh7WiKFbp8TB10C0dBccIz0L4BYrKOyBb73huM5k12WUv49VlXnndxO?= =?us-ascii?Q?qjwgVcu0czirzTcCnZ8/YnOe294jpag9y+RRT46SQbADhESmgAL3RbOBxWWu?= =?us-ascii?Q?yowo/fsWBylZYbiKttM9bcGGnmJdF/H/+tVFb5OP8B0EMz0WJqn/2o9isXXI?= =?us-ascii?Q?/xUYLaSD8CM/vptPPLFX/+juN7bp/R13R8K9LCGCHm7EZzzmnxhQ1+XrpWVi?= =?us-ascii?Q?WD31o0wO2b2SJIArgt30ptCHzylhnavAzwa+mN3J76NIY/EsQc4Xd4dR8+Pm?= =?us-ascii?Q?aLnHSZ7TTvhCiYtdbO9LV1Bn4YziAVREIqpnGD19OUfS1o/V2eTJHbDo9wRX?= =?us-ascii?Q?EsRbECmYkr75VdGfb1eAfle63+dwoNe9bWQhbhPyjd0Vr1z7jNsWIdTBGezI?= =?us-ascii?Q?BQja4Ux6Fv6wvKKjmypDQTTCXlEcY77EzS23KAAyWIgMeHXQXSW9ZiJ9Dq3E?= =?us-ascii?Q?gm2Kx5yaP7vyBtcn9SumxqVAM3xIPjpQJ8Hvimhuvmks3XERi6qiBHl3fjg4?= =?us-ascii?Q?Re+x3u42Kso=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV2PR12MB5968.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?DZihcJsOaxBcxGqYyqn3cg8YVgZJbr9Wu4ceKxJtExyhP6ivxLjbStcO4IYc?= =?us-ascii?Q?Gi5lQFmhNNkD6J7XJoZxAUPvRA0vx31esIc/+sHCtgyMhr0EJx5FXMRFWDEI?= =?us-ascii?Q?5TzxV9VlhqEIFs1Jq3rX72UZa0oIQI4vCo3LV7dHwlPqdwkCwQ03A5910ZiH?= =?us-ascii?Q?uWtDEN/npcmQiLkzJQjq1wvYmmGj8U2kAA8ZRQkoFo6/GuabRiIYyuulb6sv?= =?us-ascii?Q?QxwUh8tAtExcyke6TU+/+kUmbKbLkExZL0DnZJx10QSto/2HGWeAC+SvFpZ3?= =?us-ascii?Q?oJtMpYLc8c4cm8u4aaJHNgrU6FNEVWM5RhKAUOezaLBCuoHO3J49zFVMP9pL?= =?us-ascii?Q?jPvG46ZEOhAtXqGFB3XuDLKe8rmxNjYggqpUIaFUkmEYK1OKBOZHludoWimy?= =?us-ascii?Q?ze/vy4dX+XpE6mCatc3EmpNo8YzxxHqGWLFvtRXXKiWeH+3WAzWveBm2YfOL?= =?us-ascii?Q?nAnCiF3nTIypjNe7teJMawENigvoF8XS9w65oiHyd16N5NfQOesHc1QxxFkY?= =?us-ascii?Q?FX12+bcBRIBnJBRDtIoeRyrRFf+fRMn6P0tqFB686rOL3KAj9HpAhuloMgqM?= =?us-ascii?Q?l3ssO5N5Cop4SgXZmdaGrEG5XgYZL08ixyiphBcGvP/KZzpjpjLlkBmPNlkn?= =?us-ascii?Q?/Cl9szINLRa7c5IKbzEsSmjhEfbkBGZYlXtd33LeK2ctJP1Ci2MnqabO+J3o?= =?us-ascii?Q?WTKy0dy0T9d93VqpkdLzLgn2lyddAFDQCHkFaohmGdomqoW9zcOQAyhSMUQr?= =?us-ascii?Q?7Rr31MeJdCh1KgabuY2PMjzALLhCLTe3CAU982fu0iZu1cmMdLqIl9oJbd6N?= =?us-ascii?Q?dopIoU6voITp0r04LYLZ6roFyp87Rgwbtq11KnhCxrvJUFmRyZhuGiKesGK+?= =?us-ascii?Q?fb6aierDE/aGFJ9E42g4Y/c5Wsdz93dArt8D6iiEqxKExQnLvulDNm4RLBZi?= =?us-ascii?Q?IUo4nBxVP/Q9lgZp0f01cRHab+W4lIZxxG+X/IkzzwScR1tNohTAzYsRNZ/A?= =?us-ascii?Q?drJVkDUicT5EzgjWolF9aGDxY8CnLHNnIMTq2m30LUKQeSlZUfkst0hV1SqM?= =?us-ascii?Q?PxIYZFdbJJEntSyM7o1qz0n8NOg1O1KEFvEmChtLMon1xJYHf86L+b+xGryy?= =?us-ascii?Q?rzyJUZ4snsN0OUkEUPdzZftZTCNZTfhbwQOngm9odR9niqp/41IqPVLpFBXz?= =?us-ascii?Q?EN7zLF4nmdifGzHwTDyv4/1DGKxJc4KZlhPFN+2g0CueVdRrLEGyAvHXMCnF?= =?us-ascii?Q?/nzwhInXmW8WABokpO6vcHPJYrtIfLDrXAJIfBbD/Wbi5zi8jZpghTfjGKUU?= =?us-ascii?Q?smAD19+IznV7npBGoGLmcYfJqvUC7JKBdHrnqVEzeO4Vq9EJ+a/iisz+XshI?= =?us-ascii?Q?40AYQMUEQ81XGj7wdzpl7U3mEICBnXLIT4VVE6orTYhlHz+ZRKmAAnvweDEE?= =?us-ascii?Q?gv//naC20qqESm7uGBAmUFOeqgRmWpz6k+2Z33zkLGKTClhkdNnYfXq0APyK?= =?us-ascii?Q?sPGo3o7EKx2XQ7aFmj4h/ROk8iie+2l+GHtc+MhBoXMd2Xfp4pg1CnxWCzml?= =?us-ascii?Q?30cAM8IzOso5DI9s0rYdavxd2/n4MHrHwOs+cRr0?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b71fc90c-5fc9-4957-785f-08dde1202c59 X-MS-Exchange-CrossTenant-AuthSource: LV2PR12MB5968.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2025 02:04:05.7327 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BUWqCtMJS9IVHiB1sQUZWLaifIptgzfZGLQyGCoMARR8pxc2TqJf83s7suKyycHyIk6ubiYgZM714dmkT7qkCw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7907 Content-Type: text/plain; charset="utf-8" Change Device::vendor_id() to return a Vendor type, and change DeviceId::from_id() to accept a Vendor type. Use the new pci::Vendor in the various Rust for Linux callers who were previously using bindings::PCI_VENDOR_ID_*. Doing so also allows removing "use kernel::bindings" entirely from most of the affected files here. Cc: Danilo Krummrich Cc: Alexandre Courbot Cc: Elle Rhumsaa Signed-off-by: John Hubbard --- rust/kernel/pci.rs | 15 ++++++++------- rust/kernel/pci/id.rs | 5 ++--- samples/rust/rust_dma.rs | 6 +----- samples/rust/rust_driver_auxiliary.rs | 12 +++++------- samples/rust/rust_driver_pci.rs | 9 +++++---- 5 files changed, 21 insertions(+), 26 deletions(-) diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs index 504593c882c9..0ef8754f83e5 100644 --- a/rust/kernel/pci.rs +++ b/rust/kernel/pci.rs @@ -132,10 +132,10 @@ impl DeviceId { =20 /// Equivalent to C's `PCI_DEVICE` macro. /// - /// Create a new `pci::DeviceId` from a vendor and device ID number. - pub const fn from_id(vendor: u32, device: u32) -> Self { + /// Create a new `pci::DeviceId` from a vendor and device ID. + pub const fn from_id(vendor: Vendor, device: u32) -> Self { Self(bindings::pci_device_id { - vendor, + vendor: vendor.as_raw(), device, subvendor: DeviceId::PCI_ANY_ID, subdevice: DeviceId::PCI_ANY_ID, @@ -231,7 +231,7 @@ macro_rules! pci_device_table { /// ::IdInfo, /// [ /// ( -/// pci::DeviceId::from_id(bindings::PCI_VENDOR_ID_REDHAT, bin= dings::PCI_ANY_ID as u32), +/// pci::DeviceId::from_id(pci::Vendor::REDHAT, bindings::PCI_= ANY_ID as u32), /// (), /// ) /// ] @@ -412,10 +412,11 @@ fn as_raw(&self) -> *mut bindings::pci_dev { } =20 impl Device { - /// Returns the PCI vendor ID. - pub fn vendor_id(&self) -> u16 { + /// Returns the PCI vendor ID as a validated Vendor. + pub fn vendor_id(&self) -> Vendor { // SAFETY: `self.as_raw` is a valid pointer to a `struct pci_dev`. - unsafe { (*self.as_raw()).vendor } + let vendor_id =3D unsafe { (*self.as_raw()).vendor }; + Vendor::new(u32::from(vendor_id)) } =20 /// Returns the PCI device ID. diff --git a/rust/kernel/pci/id.rs b/rust/kernel/pci/id.rs index dd91e25a6890..2e4c7edc48a4 100644 --- a/rust/kernel/pci/id.rs +++ b/rust/kernel/pci/id.rs @@ -124,9 +124,8 @@ fn try_from(value: u32) -> Result { /// ``` /// # use kernel::{device::Core, pci::{self, Vendor}, prelude::*}; /// fn log_device_info(pdev: &pci::Device) -> Result<()> { -/// // Get the raw PCI vendor ID and convert to Vendor -/// let vendor_id =3D pdev.vendor_id(); -/// let vendor =3D Vendor::new(vendor_id.into()); +/// // Get the validated PCI vendor ID +/// let vendor =3D pdev.vendor_id(); /// dev_info!( /// pdev.as_ref(), /// "Device: Vendor=3D{}, Device=3D0x{:x}\n", diff --git a/samples/rust/rust_dma.rs b/samples/rust/rust_dma.rs index c5e7cce68654..f3385c4a7e5b 100644 --- a/samples/rust/rust_dma.rs +++ b/samples/rust/rust_dma.rs @@ -5,7 +5,6 @@ //! To make this driver probe, QEMU must be run with `-device pci-testdev`. =20 use kernel::{ - bindings, device::Core, dma::{CoherentAllocation, Device, DmaMask}, pci, @@ -45,10 +44,7 @@ unsafe impl kernel::transmute::FromBytes for MyStruct {} PCI_TABLE, MODULE_PCI_TABLE, ::IdInfo, - [( - pci::DeviceId::from_id(bindings::PCI_VENDOR_ID_REDHAT, 0x5), - () - )] + [(pci::DeviceId::from_id(pci::Vendor::REDHAT, 0x5), ())] ); =20 impl pci::Driver for DmaSampleDriver { diff --git a/samples/rust/rust_driver_auxiliary.rs b/samples/rust/rust_driv= er_auxiliary.rs index f2a820683fc3..55ece336ee45 100644 --- a/samples/rust/rust_driver_auxiliary.rs +++ b/samples/rust/rust_driver_auxiliary.rs @@ -5,7 +5,7 @@ //! To make this driver probe, QEMU must be run with `-device pci-testdev`. =20 use kernel::{ - auxiliary, bindings, c_str, device::Core, driver, error::Error, pci, p= relude::*, InPlaceModule, + auxiliary, c_str, device::Core, driver, error::Error, pci, prelude::*,= InPlaceModule, }; =20 use pin_init::PinInit; @@ -50,10 +50,7 @@ struct ParentDriver { PCI_TABLE, MODULE_PCI_TABLE, ::IdInfo, - [( - pci::DeviceId::from_id(bindings::PCI_VENDOR_ID_REDHAT, 0x5), - () - )] + [(pci::DeviceId::from_id(pci::Vendor::REDHAT, 0x5), ())] ); =20 impl pci::Driver for ParentDriver { @@ -81,11 +78,12 @@ fn connect(adev: &auxiliary::Device) -> Result<()> { let parent =3D adev.parent().ok_or(EINVAL)?; let pdev: &pci::Device =3D parent.try_into()?; =20 + let vendor =3D pdev.vendor_id(); dev_info!( adev.as_ref(), - "Connect auxiliary {} with parent: VendorID=3D{:#x}, DeviceID= =3D{:#x}\n", + "Connect auxiliary {} with parent: VendorID=3D{}, DeviceID=3D{= :#x}\n", adev.id(), - pdev.vendor_id(), + vendor, pdev.device_id() ); =20 diff --git a/samples/rust/rust_driver_pci.rs b/samples/rust/rust_driver_pci= .rs index 606946ff4d7f..f3819ac4bad6 100644 --- a/samples/rust/rust_driver_pci.rs +++ b/samples/rust/rust_driver_pci.rs @@ -4,7 +4,7 @@ //! //! To make this driver probe, QEMU must be run with `-device pci-testdev`. =20 -use kernel::{bindings, c_str, device::Core, devres::Devres, pci, prelude::= *, types::ARef}; +use kernel::{c_str, device::Core, devres::Devres, pci, prelude::*, types::= ARef}; =20 struct Regs; =20 @@ -38,7 +38,7 @@ struct SampleDriver { MODULE_PCI_TABLE, ::IdInfo, [( - pci::DeviceId::from_id(bindings::PCI_VENDOR_ID_REDHAT, 0x5), + pci::DeviceId::from_id(pci::Vendor::REDHAT, 0x5), TestIndex::NO_EVENTFD )] ); @@ -66,10 +66,11 @@ impl pci::Driver for SampleDriver { const ID_TABLE: pci::IdTable =3D &PCI_TABLE; =20 fn probe(pdev: &pci::Device, info: &Self::IdInfo) -> Result>> { + let vendor =3D pdev.vendor_id(); dev_dbg!( pdev.as_ref(), - "Probe Rust PCI driver sample (PCI ID: 0x{:x}, 0x{:x}).\n", - pdev.vendor_id(), + "Probe Rust PCI driver sample (PCI ID: {}, 0x{:x}).\n", + vendor, pdev.device_id() ); =20 --=20 2.50.1