From nobody Sat Oct 4 11:13:54 2025 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2068.outbound.protection.outlook.com [40.107.244.68]) (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 097751DF256; Mon, 18 Aug 2025 01:33:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.68 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755480794; cv=fail; b=VC6i8iurubgdIF/9LlsMfESX/thxBePa9GVx7StT/TFLb0VaKBp5x0uoxStmgYT5KkzK1iA/BisBq0KLANUjTCGfuQWxLTncLCEGYPbstn4PV+yN7Ucu+PRqY1QBAwVa5IRFz4kttnqpEnZjyC+Qxa1ytBeepGDjhBC0GI1oH4s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755480794; c=relaxed/simple; bh=8Oz0JNxqu27LNPFlipS5p3pEHytsXIq5CsoaOyzzKlI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Ym17/BLHcHponE8pkDjyLk0N8jAkohDDJkMQ6/2P5qDnzv2Q2RLYrO+zUegQ/T4PW4+D0E4Ae+VS0aOCMUpaowCpiLdTAze1JuI/A8teWUrzXXjkc8I3n+3yKWWbW0yS4eGhoPeLsB7cS991/+9Lig6/tcYOpBxIuhyg+1mGDSY= 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=pbpB/+bu; arc=fail smtp.client-ip=40.107.244.68 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="pbpB/+bu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KuE48ADDutohXQygjDjNroxEpQffiO46QzTdwQ/j4iZ7eBkkADu3xa0UjpexWacZAj9Fp4nIUDWFUr0eh+GAQLlGrVSeyxov6gLIQO/0XXEYTd10NRa2jsBlc0Jyj/DZQeTWFdqSMEfP+U59PzEuezVrbATD6ZcbW9ZEhdP5fyq3lFHQUTTl88qHm8D9S6QLaVIQk9ci9BLiW4h4qZg/w/Ii8Ktwz9Zi5PWwxxhOXm44NyB99U2mtz5Uo0WG3rwAyOLcBhm1ZiFi9/x4aY7f3y9eGoPXkNgiV/MTuYNgWL4RLm2ViXdzTn0Qd3qF3bjiPcueleIQsK6FjFZEHK2wEQ== 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=rT0PylKn4yeSa8tQvME1vmXinyVSWLsklioTWw4CPvs=; b=ZkPdkLQ38m83XPe2K4Ax3eJFxoyT3Tk8Hh5pLg4JAqrhRWGRvAbC0QIVjqyEALVudnf0PA0dI2B5l8LPfI4c0i8BpdCO0l74c0l3iIuwTh+lJ6DnL1eCrYPoVEsvBQbYmVMAfM2WuejOAQYEtCZE2JGvrC0IFhPZLS6NcdAqSdThjR47quUONB9eIYBLmf8jCTUuGyH9nq5WSMAbfz2djUJmojcHFP8zI+NnQGipsBo/PssK39fmxnQ2Qc3uLh1d6Ww+rq3pwx7EX9NWWqPM+5upKxT7cdaxfo8y2vNs9Hy3kv/COMQFvIJvE8prFbym5Zd7eNj2A5/61678/xRAMQ== 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=rT0PylKn4yeSa8tQvME1vmXinyVSWLsklioTWw4CPvs=; b=pbpB/+buyaZqAeWhu8A0yfpswIYsR9toN3Reum4bts/cqku49k8pvuTZNgpANxeNpqh3uPsdxj8hBHZyglhjNsvPoI0q88x8Xj8M7yzJvzONpN7VJ+JMPh3Jp3dJdyOAVXnjbsLLpRJIvnho7subrtiS/MRsSlI+x0IUe6f6XcpWtcs8Z9xvbl33/2iPS9nbfm6ShRjQoRkmpQLMkzdQeEGN89jRGAxnk/rdz2itY7Cy1NnG6Xn3T/CFWA2VMyJg6GmYr5Ae2gle/d+d8t/NL3OnaY3b3SFq2LIv6krq1KQQ+g8x8Bv2Gchd7U7luXlWXCF7vEEGzuxSkWtBzO1mKQ== 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 SA1PR12MB9513.namprd12.prod.outlook.com (2603:10b6:806:45c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.23; Mon, 18 Aug 2025 01:33:10 +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; Mon, 18 Aug 2025 01:33:10 +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 Subject: [PATCH v2 1/3] rust: pci: provide access to PCI Class, subclass, implementation values Date: Sun, 17 Aug 2025 18:33:03 -0700 Message-ID: <20250818013305.1089446-2-jhubbard@nvidia.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250818013305.1089446-1-jhubbard@nvidia.com> References: <20250818013305.1089446-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0069.namprd03.prod.outlook.com (2603:10b6:a03:331::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_|SA1PR12MB9513:EE_ X-MS-Office365-Filtering-Correlation-Id: ba10eda6-ce77-4bb3-278f-08ddddf7310c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?niWZCt592J78krWghojGrXH9AS6/KvRqFOMXDoOFuZnkoxuMVNMOrfXG93Wu?= =?us-ascii?Q?VXzKUmOnfbXGKCKPBAM/YVUODi0wbQWj2W6GxrhexVtW+WfOwrU/mWxmtCKS?= =?us-ascii?Q?Cd2wk+jIbKwG+FjsJ0BaIoSOM62nTdBWXEnbN7HDzQdIqelmO1s69WZNc5hm?= =?us-ascii?Q?EyyisCohfN4inr6tTlXm7bcpuvq8MrBEvJLzXYqm1wikzhFiYJxk0Te5Q9P6?= =?us-ascii?Q?A29NBMmk/T6Zj02E5W0MRLOJgXTYWEaow80rs8AD0238scZ6ZakQZR5YpoVg?= =?us-ascii?Q?NLske3/Q2Ztl8jO/p1RqVqT3sQcr/RfDbD7XWqa18vPYPxchA4bIt4nhYOQ7?= =?us-ascii?Q?aovTHZ5fHEnOiPZDiEahVqHTsVXJ8AEZnKLw3sbhcu895Xf4CcSPW7nzzw3I?= =?us-ascii?Q?muhW0PmMJCgg68WLRkUQvxKvMOXURlxHmuaQv1FKXWI67C5OeDVFUOpFFsOa?= =?us-ascii?Q?jgTGkUIrPQgVWgNTzVVDgvwpbe3I92L/na2RDsqA9EdVZiNEPexheVW9ZinS?= =?us-ascii?Q?ZyhUfvscBvuA3KJalPU0nbUHhzizplvzzA8dLDrxmhncQEh9oMxnCFjd1V11?= =?us-ascii?Q?Q7NrJ72VZPbl3QiUNBdqdadGQnFYZ5Dgrf6bDL9RcLUPtn2ErUA7Gr4sAnEL?= =?us-ascii?Q?lU6pLRD5FMpRGfDohBat6GaSqF0Vf7atPEnd7dmJdupoBJ5Iec1dlFyQ4JT0?= =?us-ascii?Q?8PRYnDOp2bRK8kx4YQc4g80LDuBPZOK2j3ld6Abcjx2iK4FgnKbx84+FWU/F?= =?us-ascii?Q?e0fmQ1RT5tvnvfJyWEpfUjN5wl+dVBW7habeGzvKi1Bl3xvtoyBDhbx1+3Oe?= =?us-ascii?Q?wil5KfSWD4VUGM5790q3nA/nJhbaq4No/JxggN5JiaKENncYag30A0LgS6Ws?= =?us-ascii?Q?dtC9xh8zUh9Muo+1JESxBIixrBWkv2g+0Tf7UXIGmPbSfIRmZ16yrKrUUtUv?= =?us-ascii?Q?e5B/Tbt06eUUunPf9watEuCi1VtksoBNoTfHtv6ZwFwDChv5ZJzMW3r1aEcq?= =?us-ascii?Q?QzEf5ctXDN0wY6JPuSVnTJynhkh0k8GNRe/roZZGpsV9LYy/LS07diMEDxd3?= =?us-ascii?Q?nn3kehJSfvrA8jb0HETbtRA0pzu7N1OgLi5pFK9+j363ke9dLLBywlgqkYyl?= =?us-ascii?Q?Zg++KpSDJQBjPNQgSurYcT8CK4rMYGY5PpIPl1zyft7eDyJc53fj/4hA3XIy?= =?us-ascii?Q?ar9toaM6t9reQAmNObXHJFnzBvUjp77B3neGMrMa9w/jIXJztMmb+IGQWNIg?= =?us-ascii?Q?MKLSTNpzglLL0GwWOeLbLTdx1XzhUqwfDOgHIRtCoHP3yLuJvcz7PzDS5kpU?= =?us-ascii?Q?bTKXs0Y0X4BYpdMEuXtJq8Oq4uBNw8jmI+S6oIw7qOhA2QQUPMO7iE96jBET?= =?us-ascii?Q?WwhStEAr5ouC7s8FWhNKkospWsN658yFqGo1weiNoNOCD2WhZ8Ytkgyrpq27?= =?us-ascii?Q?Sn0BWkqMepM=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)(366016)(1800799024)(7416014)(376014)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+S5MjIHdGbYgOIrGgkK9Ti7ULPvdhckA686Tx6HE0NhwfhOcvYMyF4aCgHVF?= =?us-ascii?Q?XtbzBHyDlH2CFMX2F1s/JbsvNLi9PFvy/41G8G6Gob/HNXKaXlgiBEoygk+S?= =?us-ascii?Q?I2PB01sWcDXeqqAu2w4N2JmaFPOrhZDLTVweefxl9aSuJlHDpS8zDePFto8K?= =?us-ascii?Q?DkjZ5FQx2O9XFOW1OwZ7n4lJ1Bs8zf8o5laDoQ4h7sirsJUpQmmsdHqB3ZF6?= =?us-ascii?Q?J2YMxivy4C2R0dSKKbwkjiZY2jukZaYj39bmoMrXnnRPxcOc+nmTdI0iaVwJ?= =?us-ascii?Q?8OzBISOXChbtT94YyzJFcqQvyxwlsZzr8N37iVxgJIrUejasQ6OM3SIFPoXV?= =?us-ascii?Q?f1IITH0FSQ038Cjsm2IVj3EgUEo2Yop351JBRcSSyZqrWgrj//O/XzZkptzh?= =?us-ascii?Q?MrUDVHjAh8JqcCt080wTJg62us2VsatKZyH6LxpnXM4o2hg2bMdvw4G3kEjw?= =?us-ascii?Q?ZBvbKqQXNl4HmXifscLPvt9cUTfrBdGiNMS+9P1DeqR/UzZo0nQQsOy4e5U5?= =?us-ascii?Q?IQF6oLBSTKDmzvyoEICQQEo7Dqid2R/0xRv7B4fdS0ODT6rtKmx+MhR14fVc?= =?us-ascii?Q?3iwd6P7XZAkMfkgFQ6IKpkytVxpDfiyTFicd/pXzIy9CwmR3qh7sKiLFBSX9?= =?us-ascii?Q?7zisdme14VQWQwP6XRRn6+G50w81kbZKr1SNkEPTUnkI35T3ZTY1TSSVGXF9?= =?us-ascii?Q?pxw7XSMP1G2BNhkzKWBhCH6R856zrus0KQoVt3ULoCsugwENU2bhj+2olHI4?= =?us-ascii?Q?ALkx6Ka01w1tAPKvqajq/1cSOyaCnMSEJAk+er5xzGnUYCzuIdwUI1Z7i29W?= =?us-ascii?Q?AIB80ao9ZFqKcXmoGvJ7Vjl5bTSc+Iifc9cE/uNjSTGKCI6Tpkh+ttgTgGfm?= =?us-ascii?Q?c6NHnLJXC1uNVMiTP7APWkUMz3qcv+sm1dF6VTl0rh0HqRv0t92+gkNnaDZ3?= =?us-ascii?Q?bSl70mesi+XEaTPCP3MWUzCXrWzifCTa5xS6vSuXYXPjuwhOIV4iqjPdT1+O?= =?us-ascii?Q?vAyDboVpo7yZns4TRRFJ7hnlGcmfESsGV315j2wnYViWp40v8WedMQGrmf/H?= =?us-ascii?Q?8E74HMyuYtnbKAe9aU2nRS5QY7w2gzARPNciYikPEZ45EgTp+XadoaeJMVsz?= =?us-ascii?Q?NwfHbogUJs8gTj/iuDtH+MlPnxRzibTOkOLt+haypEbBh0MMD6V/TR+Ip6lu?= =?us-ascii?Q?706t0CDwUEr57wLTKSex9JsOfw3Wfkg19w5HGEGAE4DmcvO1VZ0er+IWkfWB?= =?us-ascii?Q?w6nsOu6zFQpGyRPt9pUXfk7gYfLJ9KJMn2I/8z5dNqxLANuSI30JqpHEsFsK?= =?us-ascii?Q?Cfi7mbLP8Kk+KxQK2icIKrpQhtO3h79gtEZhAaNKS4q/4Zs4bky4aNbZXwuC?= =?us-ascii?Q?8dghuRpHf4rPHKF+kUHYW770x7ueqq8+3YVhU2HLL+4ClWzEo1zhEx41Nv2q?= =?us-ascii?Q?0S9hO/+7ubwdPm5/Izt5syI7E3ceQHTKrHc6EJsFxQup4O/r4WKx6CnGahsP?= =?us-ascii?Q?0VyeYtxQ86qeflGmjU5A4ZcQPTZqbxEEU24TMEEbEPGNBLPc18/qN6iekTdP?= =?us-ascii?Q?aalj18KgoaNFBKPzwWxHxYuJXJ4jFGMq5CAmkpxh?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ba10eda6-ce77-4bb3-278f-08ddddf7310c X-MS-Exchange-CrossTenant-AuthSource: LV2PR12MB5968.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2025 01:33:10.7240 (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: FFpp1hJx2EeT4MCzwVQJum1mvRvu91Ijtx8yhVOk2XSfi/Eot43f4m7u6tfin0QoWcJFyAUFDAZwzXtws2Ph+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB9513 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::from_u32(), as_u32() Class::MASK_FULL, MASK_CLASS_SUBCLASS DeviceId::from_class_and_vendor() Device::class_code_raw(), class_enum() Cc: Danilo Krummrich Signed-off-by: John Hubbard Reviewed-by: Elle Rhumsaa --- rust/kernel/pci.rs | 202 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs index 887ee611b553..9caa1d342d52 100644 --- a/rust/kernel/pci.rs +++ b/rust/kernel/pci.rs @@ -23,6 +23,179 @@ }; use kernel::prelude::*; =20 +macro_rules! define_all_pci_classes { + ( + $($variant:ident =3D $binding:expr,)+ + ) =3D> { + /// Converts a PCI class constant to 24-bit format. + /// + /// Many device drivers use only the upper 16 bits (base class and= subclass), but some + /// use the full 24 bits. In order to support both cases, store th= e class 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 } + } + + /// 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). + /// + #[derive(Debug, Clone, Copy, PartialEq, Eq)] + #[repr(transparent)] + pub struct Class(u32); + + impl Class { + $( + #[allow(missing_docs)] + pub const $variant: Self =3D Self(to_24bit_class($binding)= ); + )+ + + /// Match the full class code. + pub const MASK_FULL: u32 =3D 0xffffff; + + /// Match the upper 16 bits of the class code (base class and = subclass only). + pub const MASK_CLASS_SUBCLASS: u32 =3D 0xffff00; + + /// Create a `Class` from the raw class code value, or `None` = if the value doesn't + /// match any known class. + pub fn from_u32(value: u32) -> Option { + match value { + $(x if x =3D=3D Self::$variant.0 =3D> Some(Self::$vari= ant),)+ + _ =3D> None, + } + } + + /// Get the raw 24-bit class code value. + pub const fn as_u32(self) -> u32 { + 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 + + 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 +} + /// An adapter for the registration of PCI drivers. pub struct Adapter(T); =20 @@ -157,6 +330,23 @@ 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: u32, vend= or: u32) -> Self { + Self(bindings::pci_device_id { + vendor, + device: DeviceId::PCI_ANY_ID, + subvendor: DeviceId::PCI_ANY_ID, + subdevice: DeviceId::PCI_ANY_ID, + class: class.as_u32(), + class_mask, + driver_data: 0, + override_only: 0, + }) + } } =20 // SAFETY: `DeviceId` is a `#[repr(transparent)]` wrapper of `pci_device_i= d` and does not add @@ -410,6 +600,18 @@ 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 full 24-bit PCI class code as stored in hardware. + /// This includes base class, subclass, and programming interface. + pub fn class_code_raw(&self) -> u32 { + // SAFETY: `self.as_raw` is a valid pointer to a `struct pci_dev`. + unsafe { (*self.as_raw()).class } + } + + /// Returns the PCI class as a `Class` struct, or `None` if the class = code is invalid. + pub fn class_enum(&self) -> Option { + Class::from_u32(self.class_code_raw()) + } } =20 impl Device { --=20 2.50.1 From nobody Sat Oct 4 11:13:54 2025 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2068.outbound.protection.outlook.com [40.107.244.68]) (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 0353B22F386; Mon, 18 Aug 2025 01:33:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.68 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755480796; cv=fail; b=olqy0G3/esncQ2/SwhMV9nYplyFuRbUWNa3sPACAORJK19n69sjtZXztxTglnWoAGt3QwPU1L4uC/scd+RB5BlSphjCXuPGBiTDivSsOwtUNJzRA7xha7uTvvo9El00Ia5rKTQNeqq4zCrmQ373tiGuKY6T2P6+Rye+kkuseGzQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755480796; c=relaxed/simple; bh=/U2qljAWmaCq9oda63/+OkeOx+82bEKrjMGAg27p3lM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UNVOOIrdBbckdmbhm2VHKncMinRLhVXGE1zgVqC2dm4CtqSeVDezQhjkMcPRD2vd2EdEAJ6hJPkuLlsKKNyz0yJufkD9gL38L0/SVJAg6niDzI9mJ4XT5zJvD8wqx4b9P+B8a5IT1mQwhu4YenbGok12kWlK9bOZe5ozSkSqCKI= 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=YC5KdXPz; arc=fail smtp.client-ip=40.107.244.68 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="YC5KdXPz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fN/Go+ol90BY1XfAZ62Gira/oTt6voyshlg+KGdT681rq1QX9l4fNHJXrh7wgcOGwPsHrUJlqv7bWaHyNwIc3PNQ2zeWA3Gv89NgS2wR2wUMsK/cZ//PMUMEe5tS2/018yUTaec1Ln9yUTjl00/m1826UDTLi1HdU8XEibAdmRZ9E2Yc1YohwiJagnZOqFaLufK5+uYdkOiifk9XJs4iZ/GcnMz6vxsWx6IWf6VZTOFa+gnzhNtI8/VHpNGqWuBNmv1V0R9TLn4oOLWFotD6v5YhsZC8JCjiw3M1rB9VTM9d5B+E4wiOd+lUFJuJsDOeaicCEOGG8PnRFccO+sQYoA== 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=tQpM8RYKkxE1VNtqUd31Ft6JnWOdFCQmpPJUugzcLDw=; b=d7cMgyOZ7nfpkEtObs/EqbqIKH7c7Lw+zpy7Vf8LdwYPm6IUDp3Wu7nIMqXxBzfdLiYS1Q6df7/mTxs8g05dGUdnh1k8nONJROpLVy/rwb6kf9AG8j/XRJUjTPfkOEak3Y2rN3Us2our8EAPwXTGPcB/lobJ1DVkQL8Dd6SSZjjgG03PqWfb/BlZbB/UxbXD0Y3a9sqvW6AKkWgXjpnsfDMSNQyJA0oM2vD23KdTpn4XF86jJThQIjGcVGeuN4Cs4d98kBznxc27paWzK4O/lAsXzVx/mBv+SCLfMO8RHCZtdR3HwkF+oQ2VbrZRT4c67Zo2BfdQFGDN4uiw3P+4Uw== 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=tQpM8RYKkxE1VNtqUd31Ft6JnWOdFCQmpPJUugzcLDw=; b=YC5KdXPzqL7UyC1l6xgJjO0htcQ6G5F8qsN+MJ89SzJmQS/6C3qAnompO58uHXfRM3g6ioIOSdJ4zoQlYPqgjX8Wr9ZDp/abE5dZryO08IJVQqga9iCEbQ14r1xEqMVQIczFIFDIuOYWf42l4fEzY7rjFFVbwYu5U4zgv/wDK6ELC+vZ4kuNERfRpC27PmTd3UEOexRtj8UPa2l0IwMVePdsZES+FBMHxdyChz8QWIpoIjCvizdYYzjFrFj9gmBYH2OMChupuHwa6obK0od0iRJnxCfqJUHZJCHYKtadjSCXJUFMC08+HlhxiekxYSTRuyzTHOHKATOFS4PvvY/SvA== 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 SA1PR12MB9513.namprd12.prod.outlook.com (2603:10b6:806:45c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.23; Mon, 18 Aug 2025 01:33:12 +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; Mon, 18 Aug 2025 01:33:12 +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 Subject: [PATCH v2 2/3] gpu: nova-core: avoid probing non-display/compute PCI functions Date: Sun, 17 Aug 2025 18:33:04 -0700 Message-ID: <20250818013305.1089446-3-jhubbard@nvidia.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250818013305.1089446-1-jhubbard@nvidia.com> References: <20250818013305.1089446-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0054.namprd13.prod.outlook.com (2603:10b6:a03:2c2::29) 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_|SA1PR12MB9513:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c7e0d48-b70c-4436-3142-08ddddf731e0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Ow0+TnTUN58fuBzrv635QNl7K525uD00Z6jYKnM/8Gr9dNqpaQeJRQ3VWA/y?= =?us-ascii?Q?nWZcg7QIGLrlyzUec4LYJ1LvJZez5vw1NYQEy+yPTGFEFq8Tmo8T+HOqRZ6s?= =?us-ascii?Q?YDjR5meGUz6EYxI44aNmB6xjYeA0geD0FfKlK5oLdIKe6laWApG0PkuS7MLH?= =?us-ascii?Q?HilHqFFGvqAqBMBxbyWVK8a5nfVjiQ6wzFznmW2YKMxkmvl7ujsyPXTvdaX6?= =?us-ascii?Q?bW5xNZdOsv1wIaNbfPTvVDCddP2EZCQ71JLn8wJpaCYzoycMxwj1lFYZaBB3?= =?us-ascii?Q?IVQ0JaTnC7QeCPM0RJgoK12kPbAyjR+6aMBLlRFZiGP8sX/nG3LI5JbNJ/m1?= =?us-ascii?Q?7faHiw+rXdTVSV7yE7FaWAqKZiEj7m7tqjnSfqL3lzJabs1HFRxFDxYUPkvw?= =?us-ascii?Q?o2wSharH9wU2cPuvsiFWpoiWfr965MMexLvEhwh2taViRuh0glNrAn6t2wix?= =?us-ascii?Q?16MO6LAPZWomoohltJcDOBK7iWXU6niT6iPTw1zNhG6lqxxJOq4GEmvxgtBd?= =?us-ascii?Q?pCfTKcsNGTfGDNy/1VF1t9X0lVI/n0M/l2HUCFqn6t4v9X+zaD+8O2dIyDl8?= =?us-ascii?Q?00ky89AqlRxUgahhaAndBWBMp1sLjGUKAr8v2B8vC4bjARZe6HIi3XgPOWSj?= =?us-ascii?Q?7JX4DO2ncht0HrpSZY5FITMu91w0ESviFqIiPnlyaGxat/Qsp7IT9vYTPOV/?= =?us-ascii?Q?1ysBo76AS2ARSTDGT38s4Kcvvygby7ai4o+d9qYTRcklMHKbK0W+Vj37RJKv?= =?us-ascii?Q?q7gbTfrjmxI5r2QOWCLvNwtQo/tm8hK3UTmB4CynXdMukCAczKyWRwX/tBht?= =?us-ascii?Q?X4AZghwvDFkkg9LRtv+r9Row0AbBu70uuQ0BCdtNY1WoWrjb5DNYHXZgzCsu?= =?us-ascii?Q?IMARBBjTWxFtlux6j83vvD2URqmSyhTlcnM4Xcw2F5GB7lUW9EWSnkX8D5O5?= =?us-ascii?Q?zDjWfFSDbXYlhuFQ+8iiuXUf3mxpxaiF8laT1q0OIy8C/ocErbqVz0H4N1Ui?= =?us-ascii?Q?1H/UBcSUEF7vtizTrmri3bo7ncFR+bmzBwUeYcuIWwPeziQgh20q+Li5m9C6?= =?us-ascii?Q?oBkZTXUX+Lxec3Q+67nZkfI/xxcnjqLxfSgRsGclN6yqhJYe7qEx0YdBi56w?= =?us-ascii?Q?2VbHnr7PqkQfaLey9537RoWR3UZHsLHlfkObVdTR3xSUpjp1JdAmtLnB3Wf4?= =?us-ascii?Q?DekgexpJnMV7+/jdTu8W0Z4st3I1b5/5/Thzf9A/UXm+8rU6N5FBHyqs+MzM?= =?us-ascii?Q?ZOvcq4qNehgznwUX2RnQ5JdWXATDMwzMjS6CRy2Qi44ZUv9Do5OZbh1g799j?= =?us-ascii?Q?YjVsWcFpr15/SdxH093MSqVEMP4APUUsGKvWyfl/Nv1F6RdH5PuTFh7VIYT0?= =?us-ascii?Q?e+lAFSAxsoqEqw4kx1fn8jNN6IxvuJEWmOng4UXCVm3IsVG5TLfhEUkMDeTe?= =?us-ascii?Q?0JyLTG1QrLk=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)(366016)(1800799024)(7416014)(376014)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?u8ayyYB8imIA9h6xqccjaGMYKRm6RiRGyjPa1xWkhflTp06PdfGf/+awj8UB?= =?us-ascii?Q?QI8+QkV72/CdX2FV+1iYSMZBWqXifu4DQNqvN/MXaiWD1Ebnp+qqD1392kp2?= =?us-ascii?Q?cPjHuxeb615kBP5LJVKcZsWaidUbesZ9UTdOu+9SHtouEiTT6Y4hzLHegZ1Z?= =?us-ascii?Q?yiOFMcFjbs1k6WqeGWj/YcXTnLL07wvN5gmoz+InOHpTYFss2ulqO4KfFRUc?= =?us-ascii?Q?wET0rhPG9kPavhCykI+FhvQC6fIZTJEJ33NLtz8vEGG26lt3t/KCWZQGpqMd?= =?us-ascii?Q?TIN82SsQrTQlxgSVTqaaEAa4Pam2moEk9vRq4uxWk3+4fSAZ5cy1thEqQu89?= =?us-ascii?Q?E1jspm8As+h6crUvkd3vlEgfJjYjVWokRd9ctu3/q5949fpUr2MhVQfCLzx5?= =?us-ascii?Q?Mi1cz8qReQHDNtTQ3sua4chht/8XcsLWqDQA/ql3Y2BPkjdT1NVB9GwDmCYv?= =?us-ascii?Q?8w3SBpGY+ROgf9p08kdoqUF89J7q3v3Mjeq7vvVfvhJFL8qY9Bk2u9LjMhj2?= =?us-ascii?Q?QCv0cg1c7/ZlitsEr7iqDMZb4cbKMrC7aFptFiueJMbq1htW0MJ7wbr8Z1iX?= =?us-ascii?Q?VJSZLR69dmHGJ/z1HXg5YB1l+ya4TcnyxcIaWp5yi9PYMxmLz0uGLbfDvmBz?= =?us-ascii?Q?dLvIe35cYMN7xAZke7Z5qFE05xl9Wu486I1XJKuvL5xrHGv4oBpB8YhnCn5x?= =?us-ascii?Q?sIgb6upqMctAGjOxP/M+2LCWVPqVQFuP8CNlGNmLnFAgvhGxzG1zC1KFiSRu?= =?us-ascii?Q?pWnn60vp7KfTRQ1VzvGRgxaDHcBYXpO+u23bW8yN3084LAKdvb+wH71vao5O?= =?us-ascii?Q?7pE4UkVf93mB4RJg00dGHQmDak9uqK/GKuT4LpGuI08b4c5Wz2bQ/3yOK4Z8?= =?us-ascii?Q?58lqL77uGPQoGs5OLIzApK+7fWz9/+/XVjuTtmFYdohxcbSK1DVCoWtXxOsF?= =?us-ascii?Q?2q68nVLkbOCo0RxWfJR5pD9I2AZbB+Gqg3D0+/v0DtTN75J9XzQKEmo31a7M?= =?us-ascii?Q?HPotLlW5noAmDFcbGqf2gcUPHNfMNTFOpjU4FBYG2LYSgbSF/Ey34KstavHO?= =?us-ascii?Q?I1QYTmUlLV1/m5DvydEyJ43mkVwLYZUaRyz1JfEStNoi+O2L0b/T6ChAV34u?= =?us-ascii?Q?ulCDzfI0L7UxM9kfdFiwHg8B52M5Ol0o3TiYusFhWGCiv/o3fQ/IkOY1TFTx?= =?us-ascii?Q?uyn9GN+r/8yOZnPif210OwHsnq9zf/74+Ii3GccHH0r39D3tiQ9WEbsS9Ngd?= =?us-ascii?Q?l5Z9hUf5YP3AyCl3iAl1wAS+yPTnOt8DETcZ1+qyZliCLYRGJq2q076Vx00a?= =?us-ascii?Q?z2O0vmh+wzw3bs+ss+91ns7lRkdgf5i/bbaS7IVN5+lVtuGskYVw1jk++/NB?= =?us-ascii?Q?rYACs2EoA/KlFRcnh5r8iildktjZLUr+Pmi9GA+je0U9D6i322JF46KbkD2t?= =?us-ascii?Q?ra436OKxrCbl/afjnxvKQqKLLZZCNkm8ifO42w0fkTRyFg+341z5hSQozjUg?= =?us-ascii?Q?urQPx+kq5c6/SgZJhe0HMn6Yw02L76PN6VohSxM5Z4F0rD7bDoDgjWNFL6yM?= =?us-ascii?Q?TpkioohpAWI1MxtGMHpEcwXmxv21+BWbfDBZ4Utt?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3c7e0d48-b70c-4436-3142-08ddddf731e0 X-MS-Exchange-CrossTenant-AuthSource: LV2PR12MB5968.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2025 01:33:12.1562 (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: Or9iQayOicorRwCdEPQbXmewXnX3VKRvKgzVRhZcP/naXBwhJuKmggZHeEq1kdy1beeNfZ4tlHlQixtKUA0WZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB9513 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 Signed-off-by: John Hubbard Reviewed-by: Elle Rhumsaa --- drivers/gpu/nova-core/driver.rs | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver= .rs index 274989ea1fb4..4ec5b861a345 100644 --- a/drivers/gpu/nova-core/driver.rs +++ b/drivers/gpu/nova-core/driver.rs @@ -1,6 +1,8 @@ // 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, bindings, c_str, device::Core, pci, pci::Class, prelude::*,= sizes::SZ_16M, sync::Arc, +}; =20 use crate::gpu::Gpu; =20 @@ -18,10 +20,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, + Class::MASK_CLASS_SUBCLASS, + bindings::PCI_VENDOR_ID_NVIDIA + ), + () + ), + ( + pci::DeviceId::from_class_and_vendor( + Class::DISPLAY_3D, + Class::MASK_CLASS_SUBCLASS, + bindings::PCI_VENDOR_ID_NVIDIA + ), + () + ), + ] ); =20 impl pci::Driver for NovaCore { --=20 2.50.1 From nobody Sat Oct 4 11:13:54 2025 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2070.outbound.protection.outlook.com [40.107.244.70]) (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 2F469238C33; Mon, 18 Aug 2025 01:33:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755480801; cv=fail; b=JTu57rFCk9680J2lojtcSGIVNEsy3EZymYnpNLC6oogKKHNMnHgYiPbdQKdlM8YZkHgsbnuLUravpSJO9xv8P3Nk6yZJ9FWhk1yKLT4Fb6XvtBKR5bYzx+MzXQtK/vyvIXfOnQP1kQO7l41uESNRf58TvqBettAKyjePg9FfWUI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755480801; c=relaxed/simple; bh=W5fO6L3lnEoXzOMeW+5iDjKRrhqeTLOJISW4WKBqQJI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=BWglPGPL4673c/+NrSFcn3K8uBK9Eyz8V2iewevtWuueJ2ub1oh417pNty9cIG/nJBy745DUfgC6y+p4IvoDFiDUEK6w7W3jfR2PU+9pEEmyegLPW3DEnOLX9EuCizjOP2rAeU103b2Yakx314V8mevD7c1Qj6ObDeu8H3v365U= 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=a+2k/gVn; arc=fail smtp.client-ip=40.107.244.70 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="a+2k/gVn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HOahzsVr4xORFoRNClafJmqBX2uLLuRAy/LpXkyjLbNSzAX98FshtUJ0Y+y30afcs6mb/xHIZnwr49JPS0olfUG3Oj28fL49AQfozskLQBnPXZQGr0sZxgdygQr4Zpbc6UoNmge93OIWPqCYwZhO3LMSenHJKfU5xb76iu+fmjpdmOtzNEuxC/AkYZYsJi05R7B+XYsBNMIDmP9f+PdsczW/LJjNMHVNg9y48FV7VBsXyI7SpFDeeO8iVKoZvSCnPxhWzPOYf+dBBlxaNdEi6y8fB/fMp+Y6ioU0ojeObvvVxdC5Y1RwYFTvfqhy3YkDOF5cK7caiiXIA1Nqalufsw== 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=54QdR6ci/jYxEVkaqmPNg9Ht+VbLaUTMC+4T51qbBcI=; b=eBkk7qcVzPzJOUXrppXPnWSwhzdCJNrQi+9UUA5FM64lxcM7h7V5H8FWFijmOTNgzTiDZDzGfGH6EWgdcfEpa1me8ccaUEqhohXTr4ztpeubmAfCEgCoG9E9xBZJRe0kvSWmPEGrffZuMg7mxSApYIKGb2j5AQRJwihpL7XeBNFTig57Zx8VA3kPZeLQ+lV4NGKNm5ypWf3qNVSKDZuHdIWCnDG2llGDfQHKy/RXSfjpY8uggkcesgVJcUFE1pXCzvcjaIyJNwXkVIQUetcsfZVwX/XMSCQaA4bmE/N3VS3QDQ4f0nZvcftBMJSUYXZizWSxE4/qwg+Qm0GbfOJVqA== 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=54QdR6ci/jYxEVkaqmPNg9Ht+VbLaUTMC+4T51qbBcI=; b=a+2k/gVnhIKDnCwupV98dWg0Jk1/nXLv6VsTdgGxADYknQCg2QMqfYS+KlECNXWMUhxMIEPQrLzWm+9p0AKG3ZxAegFywZihHVxHCMAveyd8t4bbPEe93ulOXSGO7SDgsDt0gjiw6UWkPB90kpc4srVCW5fHqMNvbRJbZbhWk70xvC+Efv9YqRO2KZa8A6s+KCAx47iLtyYi8BuBg26kxshmSKZLmnNOcSKY0YFoocL0QNTKgDpmw4dvFJOXtLchk0N70DJoGVHb9Mog+yYcchuViFiF3bP1J655Xfu0yfamZDymZ+qrWMD7UzcWG4gvXcQQNxt39vWhkY8/w1pxyQ== 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 SA1PR12MB9513.namprd12.prod.outlook.com (2603:10b6:806:45c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.23; Mon, 18 Aug 2025 01:33:14 +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; Mon, 18 Aug 2025 01:33:14 +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 Subject: [PATCH v2 3/3] rust: pci: provide access to PCI Vendor values Date: Sun, 17 Aug 2025 18:33:05 -0700 Message-ID: <20250818013305.1089446-4-jhubbard@nvidia.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250818013305.1089446-1-jhubbard@nvidia.com> References: <20250818013305.1089446-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0108.namprd03.prod.outlook.com (2603:10b6:a03:333::23) 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_|SA1PR12MB9513:EE_ X-MS-Office365-Filtering-Correlation-Id: 93858a68-36fe-4b75-b339-08ddddf732df X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?L++zLUTYzmIR2WbpPIjg8Rm2/wMoVi6kcg71IYmexuqThRqWY3gg6UZVJs8t?= =?us-ascii?Q?F2+wh4/l44yWxwd5nUg+arvc/fUSJXSVweKdavlY+t697pC47SwwdkvB3HBP?= =?us-ascii?Q?xc53PssjzZiRX5c46a/mP+fPoYfG5cXotK5xFcr4g8m+HsomnPSwhho5njvl?= =?us-ascii?Q?9nAOLsC3ZOskauChN65XCpXNlGMLBKkNTmpLf4CH56tUI1tQPeQY5VJnysjy?= =?us-ascii?Q?33umoUjnRkVAX3DHFcj1fGUOd0Dez+JdmZhmQQeD3DW1V1ri4b7yyh/CVX7f?= =?us-ascii?Q?l1wKxkMhtyK6fRJFahD/TyIlD7OoR/3z9tS/6TM3Zbv1ki+YDa/0OUU6Ewao?= =?us-ascii?Q?PPutx2S9tlo3SCz/KP1o4CEkbl0H9KGLzIGHGYYUwJiKtbLloFdePJrjTaDB?= =?us-ascii?Q?lFLhB5yp1zXNYjkNGwglIDbSqHh20L00JAO/I91MaCHx5hrJQKbyAhjKn1Pm?= =?us-ascii?Q?YDEUgTuvmjA+XRYBeof//5m7dgyL7srOxnHpLvRYl6WysRd0Cmlkpg2J5ntH?= =?us-ascii?Q?3npR6usj1+wznXkC9+9vp84kF5ZW+auozuWG2vWwptIpq0OSTFHkA4BIduc7?= =?us-ascii?Q?D6JPYdscRzOfrwoDYD0OBdep3QqOKcG47CyMCkkxv0/znx2HFqTrXvAp3wSp?= =?us-ascii?Q?DEx0FdHCRFzL+vcel2b7MhaIEMeGJbcz1wIDgnGC39vlrM/hoaalMTwNb54q?= =?us-ascii?Q?z+7588YUp9Xgkg+NhByq5GY81afWww6KO/OKff2CA+5QRpujGpNSSdWuQti/?= =?us-ascii?Q?PGjffJVF8TC/YoQTu5suKdqVDXFFYKHS8MCmM81g79CgHeyxa1EkESUHZtGK?= =?us-ascii?Q?RoIDTefeAZIC2fH75FKPnRn7whRICo9lIIh+Ldi62byJWbBaC5DPdRBGyAi0?= =?us-ascii?Q?Z646Aa2BuWt1AR0MG+QFoQRjDrAA/VrN+EaPHQdTbd3TitNW1QaUNB0ggUT1?= =?us-ascii?Q?+pL+2mIej5ZwHoUXSLfSy2EtB6oAMlcVI00p7XTifh+VqGpLcI4i0IlI/EE8?= =?us-ascii?Q?sb1PjChDbOCywelPKJaXzQrZI4R1eXaESzBUomdaAygcLnBsoyx6tkk1PB6F?= =?us-ascii?Q?zR2Sd+KbVFOb9HXcwbbK2hL0hu9c1kAfUelNOy0eRg5zFgqdyOC4OV0aZiHC?= =?us-ascii?Q?kVqg23+zumfTNWGfwssNxaSAeVzuFXi+F9jrggkJWdApBE+alUUscs4gM4yc?= =?us-ascii?Q?NcSz0q6Gf2WV62F4Npbf29VXXe1q8KXs0lFoLIxo00vy7TlUc6WbMxMsEbeB?= =?us-ascii?Q?+vjSDnCeNUyKX7y5x8dLIvXc78BRnPQmA3qa2wgr/KWhQnD/DNsba8ihidiy?= =?us-ascii?Q?mO1V0aOcC6m54/aA21OQWwOl+K5EKHxvWNzUkQqgNdkUe24F58GYJWRWUNRM?= =?us-ascii?Q?Fy4gNx0X6w1rJHsrW9lOk0M29KQ89vo3uRTB1oxiBSWJIcdfsQ=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)(366016)(1800799024)(7416014)(376014)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Z5apS02MJ6LPrlBVj+GsNcXYchUA9H5vAPrBpGtSaJtYS7JbzHrWYCZzZYzQ?= =?us-ascii?Q?cPdDbbcXq2/qFN9k9agjaMxSJyrf9V4sUTUUgBOKZj4y53nEhb65J/2ofYWm?= =?us-ascii?Q?uBiCRTSTIe47xHifE1PRdySLNurDA4WDZQQNyxc5Q73FXTaL2GKhQu8iXlwc?= =?us-ascii?Q?K75KVD90aweXolbjc2ADnl9iDW6mVUqL5mGHc+ILbRQUiiv+oetJcj9JQurx?= =?us-ascii?Q?WLYfYYZY8UR1zEUeKvcFryn7qdlNT5EUf6fqFVgQrw0gWVXugqwZ6NHcPbqo?= =?us-ascii?Q?NNKbn0S30GBKS/ttpnVfOPKVyBtybgdldtkSSpuOQFhilqkSRm0pwr2jivbG?= =?us-ascii?Q?p0BamxM5SFQZnMBEhfvgKgeGRtu+DknBaM6JqF6fjZuy0sL5ku+/N9xhL2Lm?= =?us-ascii?Q?JWNCqZlZeW5IHwpVUryEAlT4WdY/pXxmPv+apFP/rxESQ7ZENR3s9Uvb2vBk?= =?us-ascii?Q?TF5ObJ4dK1ifHuXiv2hecHCf3Mruu1IPVUL+3/+r0uG+ymdyor2CaAqGuocF?= =?us-ascii?Q?i7g7mFRFwz6C1G9I4DcsmC26IN21BBuzOPhznc2JAPctrdx790zxk67r9ArF?= =?us-ascii?Q?641N5s/XDVBUvq9Y4aMfMQyoaLmtxpFeSXE6Kz9RKcCmy1N3zTNbzrV1KRkI?= =?us-ascii?Q?Ii3UTCPdJSZPjZ+inQkM3wLyUWpWzHQThpCPz7YqjPLoUi8gHw1AIit2Mbue?= =?us-ascii?Q?1nvEQrqeuHcXdf9cjz9ECYh4l00lUJ9To2exH05E7LDrg/bUeGbGGl1AQUfo?= =?us-ascii?Q?YFJGuhb+cThUuZWJ5cCnVkuTg9+vn2mdgZ1Ogxqs7OuMNdioE1LitzS0klkZ?= =?us-ascii?Q?K+efnJEZAvnJ4hqvvcjrFxU8EGl+WPYIii3HXnyRi+o1eZN35nMy7caK2pDF?= =?us-ascii?Q?ICOObhzR8J7Z+loZ0K/nUyuLktb0dC8Ly+XHTOuqL/TFBUECx2oG/hLRHmPZ?= =?us-ascii?Q?Uf6fnpvZjU00ENw3rk0ovYJm3H2hbUeOF+uHI5RjhwR40Lvauak+gjASiaek?= =?us-ascii?Q?7Yd2lHCRuDhxgT99WsFe3AiQQLL9yOY4EaqGvN3P53du5hYFO/M+Jt70Stz/?= =?us-ascii?Q?9FqGltWWx0sm2BBSCTgODmQZhGe0lTZmJ+as+oAqQTgBQWVC50LwBC/eb+uF?= =?us-ascii?Q?GiKGb52x2k0TbnjWLhQn7S7W+nhKflLJ4pR63sOoXzwdr4u+53u3ba+Dg240?= =?us-ascii?Q?VeSIiy84m9+n3tgT1JLLuRfXtTUGn90T7h/pZFwZ+WuKjjCmKXvRdHI3ohsk?= =?us-ascii?Q?EmLTPUpVyV/0RqXMHgqoN+npTyeswMDTsia9n04OoSjd8q1cQ2vMQZiOWCw1?= =?us-ascii?Q?12q/uldjCWHk5a4zqzf9b8XBkLGsD0Xdfjc1XZuaYrwkXL3D3It8mOKPyp5o?= =?us-ascii?Q?QUk5I/Pnn4OnIsUIyymbbmRV+GQMetSkpDrC54sIrtpQWbUTVdCROSkT2UC8?= =?us-ascii?Q?hOqObF5kPYXfFUEJ2/X/zczHYMU8/GJtfkhpt/MM0rS6mEz96Pl/uYBRoi/9?= =?us-ascii?Q?u4TmONIa/fxKT0GcQFXzTUQT46Exp8GcUjzKvGZh7w/7umJrRjkLHc+e7QUZ?= =?us-ascii?Q?+SMEWHphnXaduuXRQfzFwL26NEX+rpb9tOXI1rHu?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 93858a68-36fe-4b75-b339-08ddddf732df X-MS-Exchange-CrossTenant-AuthSource: LV2PR12MB5968.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2025 01:33:13.9076 (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: NVRgikdWQi853y4YTx6d+E2VlZetYseCod6ZE+fkUdcIPb1baCGJeA92gQjU66FizYXKMsEd8iFB2OOFYvAJzg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB9513 Content-Type: text/plain; charset="utf-8" This allows callers to write Vendor::SOME_COMPANY instead of bindings::PCI_VENDOR_ID_SOME_COMPANY. It also allows removing "use kernel::bindings" entirely from most of the affected files here. Apply this to the various Rust for Linux callers who were previously using bindings::PCI_VENDOR_ID_*. New APIs: Vendor::SOME_COMPANY Vendor::from_u32(), as_u32() DeviceId::from_class_and_vendor() now takes Vendor type Cc: Danilo Krummrich Signed-off-by: John Hubbard Reviewed-by: Elle Rhumsaa --- drivers/gpu/nova-core/driver.rs | 12 +- rust/kernel/pci.rs | 327 +++++++++++++++++++++++++- samples/rust/rust_dma.rs | 3 +- samples/rust/rust_driver_auxiliary.rs | 4 +- samples/rust/rust_driver_pci.rs | 4 +- 5 files changed, 338 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver= .rs index 4ec5b861a345..d0272289f863 100644 --- a/drivers/gpu/nova-core/driver.rs +++ b/drivers/gpu/nova-core/driver.rs @@ -1,7 +1,13 @@ // SPDX-License-Identifier: GPL-2.0 =20 use kernel::{ - auxiliary, bindings, c_str, device::Core, pci, pci::Class, prelude::*,= sizes::SZ_16M, sync::Arc, + auxiliary, c_str, + device::Core, + pci, + pci::{Class, Vendor}, + prelude::*, + sizes::SZ_16M, + sync::Arc, }; =20 use crate::gpu::Gpu; @@ -26,7 +32,7 @@ pub(crate) struct NovaCore { pci::DeviceId::from_class_and_vendor( Class::DISPLAY_VGA, Class::MASK_CLASS_SUBCLASS, - bindings::PCI_VENDOR_ID_NVIDIA + Vendor::NVIDIA ), () ), @@ -34,7 +40,7 @@ pub(crate) struct NovaCore { pci::DeviceId::from_class_and_vendor( Class::DISPLAY_3D, Class::MASK_CLASS_SUBCLASS, - bindings::PCI_VENDOR_ID_NVIDIA + Vendor::NVIDIA ), () ), diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs index 9caa1d342d52..7a42b91ad873 100644 --- a/rust/kernel/pci.rs +++ b/rust/kernel/pci.rs @@ -196,6 +196,327 @@ pub const fn as_u32(self) -> u32 { OTHERS =3D bindings::PCI_CLASS_OTHERS, = // 0xff0000 } =20 +macro_rules! define_all_pci_vendors { + ( + $($variant:ident =3D $binding:expr,)+ + ) =3D> { + /// PCI vendor IDs. + /// + /// Each entry contains the 16-bit PCI vendor ID as assigned by th= e PCI SIG. + /// These IDs uniquely identify the manufacturer of a PCI device. + /// All values are derived from kernel constants. + #[derive(Debug, Clone, Copy, PartialEq, Eq)] + #[repr(transparent)] + pub struct Vendor(u32); + + impl Vendor { + // Associated constants derived from kernel bindings + $( + #[allow(missing_docs)] + pub const $variant: Self =3D Self($binding); + )+ + + /// Create a `Vendor` from the raw vendor ID value, or `None` = if the value doesn't + /// match any known vendor. + pub fn from_u32(value: u32) -> Option { + match value { + $(x if x =3D=3D Self::$variant.0 =3D> Some(Self::$vari= ant),)+ + _ =3D> None, + } + } + + /// Get the raw 16-bit vendor ID value. + pub const fn as_u32(self) -> u32 { + self.0 + } + } + }; +} + +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 +} + /// An adapter for the registration of PCI drivers. pub struct Adapter(T); =20 @@ -335,9 +656,9 @@ pub const fn from_class(class: u32, class_mask: u32) ->= Self { /// /// 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: u32, vend= or: u32) -> Self { + pub const fn from_class_and_vendor(class: Class, class_mask: u32, vend= or: Vendor) -> Self { Self(bindings::pci_device_id { - vendor, + vendor: vendor.as_u32(), device: DeviceId::PCI_ANY_ID, subvendor: DeviceId::PCI_ANY_ID, subdevice: DeviceId::PCI_ANY_ID, @@ -396,7 +717,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.as_u32(), bindi= ngs::PCI_ANY_ID as u32), /// (), /// ) /// ] diff --git a/samples/rust/rust_dma.rs b/samples/rust/rust_dma.rs index c5e7cce68654..520c59b930dc 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, @@ -46,7 +45,7 @@ unsafe impl kernel::transmute::FromBytes for MyStruct {} MODULE_PCI_TABLE, ::IdInfo, [( - pci::DeviceId::from_id(bindings::PCI_VENDOR_ID_REDHAT, 0x5), + pci::DeviceId::from_id(pci::Vendor::REDHAT.as_u32(), 0x5), () )] ); diff --git a/samples/rust/rust_driver_auxiliary.rs b/samples/rust/rust_driv= er_auxiliary.rs index f2a820683fc3..d8470e4bf88b 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; @@ -51,7 +51,7 @@ struct ParentDriver { MODULE_PCI_TABLE, ::IdInfo, [( - pci::DeviceId::from_id(bindings::PCI_VENDOR_ID_REDHAT, 0x5), + pci::DeviceId::from_id(pci::Vendor::REDHAT.as_u32(), 0x5), () )] ); diff --git a/samples/rust/rust_driver_pci.rs b/samples/rust/rust_driver_pci= .rs index 606946ff4d7f..a3a7a0837961 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.as_u32(), 0x5), TestIndex::NO_EVENTFD )] ); --=20 2.50.1