linux/rust/kernel
Zhi Wang 4dc0bacb1d rust: pci: add config space read/write support
Drivers might need to access PCI config space for querying capability
structures and access the registers inside the structures.

For Rust drivers need to access PCI config space, the Rust PCI abstraction
needs to support it in a way that upholds Rust's safety principles.

Introduce a `ConfigSpace` wrapper in Rust PCI abstraction to provide safe
accessors for PCI config space. The new type implements the `Io` trait and
`IoCapable<T>` for u8, u16, and u32 to share offset validation and
bound-checking logic with other I/O backends.

The `ConfigSpace` type uses marker types (`Normal` and `Extended`) to
represent configuration space sizes at the type level.

Cc: Alexandre Courbot <acourbot@nvidia.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Gary Guo <gary@garyguo.net>
Cc: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Zhi Wang <zhiw@nvidia.com>
Reviewed-by: Gary Guo <gary@garyguo.net>
Link: https://lore.kernel.org/all/DFV4IJDQC2J6.1Q91JOAL6CJSG@kernel.org/ [1]
Link: https://patch.msgid.link/20260121202212.4438-5-zhiw@nvidia.com
[ Applied the diff from [1], considering subsequent comment; remove
  #[expect(unused)] from define_{read,write}!(). - Danilo ]
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
2026-01-23 21:23:16 +01:00
..
alloc rust: alloc: use kernel::fmt 2025-10-20 04:04:23 +02:00
block rust: block: update ARef and AlwaysRefCounted imports from sync::aref 2025-11-05 18:24:10 -07:00
debugfs rust: debugfs: use "kernel vertical" style for imports 2025-12-22 17:04:07 +01:00
device rust: device: replace kernel::c_str! with C-Strings 2025-12-22 17:30:24 +01:00
drm drm-next for 6.19-rc1: 2025-12-04 08:53:30 -08:00
fs rust: fs: add file::Offset type alias 2025-11-05 00:05:38 +01:00
io rust: io: separate generic I/O helpers from MMIO implementation 2026-01-23 21:20:11 +01:00
irq rust: irq: replace kernel::c_str! with C-Strings 2025-12-22 17:30:32 +01:00
list rust: list: remove nonexistent generic parameter in link 2025-07-20 19:29:19 +02:00
mm mm: introduce VMA flags bitmap type 2025-11-29 10:41:09 -08:00
net Networking changes for 6.18. 2025-10-02 15:17:01 -07:00
num rust: num: bounded: rename try_into_bitint to try_into_bounded 2025-11-24 16:38:23 +01:00
pci rust: pci: add config space read/write support 2026-01-23 21:23:16 +01:00
str rust: str: add radix prefixed integer parsing functions 2025-11-03 14:40:45 +01:00
sync rust: sync: atomic: separate import "blocks" 2025-12-06 08:44:10 -08:00
time rust: add udelay() function 2025-11-04 13:25:29 +01:00
.gitignore rust: Add warn_on macro 2025-07-23 02:05:58 +02:00
acpi.rs rust: acpi: replace core::mem::zeroed with pin_init::zeroed 2025-10-27 20:27:05 +01:00
alloc.rs Summary of significant series in this pull request: 2025-10-02 18:18:33 -07:00
auxiliary.rs rust: auxiliary: fix remove_callback invariant comment 2026-01-13 12:35:00 +01:00
bitmap.rs rust: bitmap: add BitmapVec::new_inline() 2025-11-26 11:25:35 -05:00
bits.rs rust: bits: add support for bits/genmask macros 2025-07-19 23:18:18 +02:00
block.rs rust: block: add block related constants 2025-09-02 05:23:56 -06:00
bug.rs rust: Add warn_on macro 2025-07-23 02:05:58 +02:00
build_assert.rs
clk.rs rust: clk: use CStr::as_char_ptr 2025-10-22 07:15:19 +02:00
configfs.rs rust: configfs: use CStr::as_char_ptr 2025-10-22 07:14:57 +02:00
cpu.rs rust: kernel: cpu: mark CpuId::current() inline 2025-09-14 23:58:45 +02:00
cpufreq.rs Merge 6.18-rc3 into driver-core-next 2025-10-27 08:02:50 +01:00
cpumask.rs rust: cpumask: Mark CpumaskVar as transparent 2025-08-14 09:55:47 +05:30
cred.rs Char/Misc/IIO/Binder changes for 6.18-rc1 2025-10-04 16:26:32 -07:00
debugfs.rs rust: debugfs: Use kernel Atomic type in docs example 2026-01-19 15:02:46 +01:00
device_id.rs rust: device_id: replace incorrect word in safety documentation 2025-12-29 14:09:18 +01:00
device.rs Linux 6.19-rc5 2026-01-12 13:33:24 +01:00
devres.rs rust: io: separate generic I/O helpers from MMIO implementation 2026-01-23 21:20:11 +01:00
dma.rs rust: dma: fix broken intra-doc links 2026-01-02 19:04:12 +01:00
driver.rs Linux 6.19-rc5 2026-01-12 13:33:24 +01:00
error.rs rust: replace CStr with core::ffi::CStr 2025-10-22 07:47:27 +02:00
faux.rs rust: faux: use "kernel vertical" style for imports 2026-01-07 19:56:00 +01:00
firmware.rs rust: firmware: replace kernel::c_str! with C-Strings 2025-11-17 00:53:47 +01:00
fmt.rs rust: support formatting of foreign types 2025-10-22 07:15:31 +02:00
fs.rs rust: fs: add Kiocb struct 2025-09-06 13:27:20 +02:00
generated_arch_reachable_asm.rs.S rust: Add warn_on macro 2025-07-23 02:05:58 +02:00
generated_arch_static_branch_asm.rs.S
generated_arch_warn_asm.rs.S rust: Add warn_on macro 2025-07-23 02:05:58 +02:00
i2c.rs rust: i2c: prepare for core::ffi::CStr 2025-11-24 09:14:47 +13:00
id_pool.rs rust: id_pool: do not immediately acquire new ids 2025-12-02 14:17:09 -05:00
init.rs rust: allow clippy::disallowed_names for doctests 2025-11-17 22:53:27 +01:00
io.rs rust: pci: add config space read/write support 2026-01-23 21:23:16 +01:00
ioctl.rs
iov.rs rust: iov: add iov_iter abstractions for ITER_DEST 2025-09-06 13:27:20 +02:00
irq.rs rust: irq: add support for threaded IRQs and handlers 2025-08-12 20:22:09 +02:00
jump_label.rs
kunit.rs linux_kselftest-kunit-6.18-rc1 2025-10-01 19:15:11 -07:00
lib.rs rust: Add soc_device support 2025-12-28 12:43:56 +01:00
list.rs rust: list: add warning to List::remove docs about mem::take 2025-11-26 13:26:59 +01:00
maple_tree.rs rust: maple_tree: rcu_read_lock() in destructor to silence lockdep 2025-12-23 11:23:15 -08:00
miscdevice.rs Char/Misc/IIO/Binder changes for 6.18-rc1 2025-10-04 16:26:32 -07:00
mm.rs rust: mm: update ARef and AlwaysRefCounted imports from sync::aref 2025-09-13 16:55:15 -07:00
module_param.rs Modules changes for v6.19-rc1 2025-12-06 08:27:07 -08:00
net.rs
num.rs rust: num: add Bounded integer wrapping type 2025-11-19 00:22:24 +01:00
of.rs rust: of: use core::ffi::CStr method names 2025-09-16 09:26:59 +02:00
opp.rs Rust changes for v6.19 2025-12-03 14:16:49 -08:00
page.rs Char/Misc/IIO/Binder changes for 6.18-rc1 2025-10-04 16:26:32 -07:00
pci.rs rust: pci: add config space read/write support 2026-01-23 21:23:16 +01:00
pid_namespace.rs rust: pid_namespace: update AlwaysRefCounted imports from sync::aref 2025-08-19 13:08:41 +02:00
platform.rs rust: platform: fix remove_callback invariant comment 2026-01-13 12:35:06 +01:00
prelude.rs drm-next for 6.19-rc1: 2025-12-04 08:53:30 -08:00
print.rs rust: use kernel::{fmt,prelude::fmt!} 2025-07-21 01:16:35 +02:00
processor.rs rust: Add cpu_relax() helper 2025-08-21 16:58:07 +02:00
ptr.rs rust: remove spurious use core::fmt::Debug 2025-10-20 04:04:24 +02:00
pwm.rs pwm: Fix Rust formatting 2025-11-13 10:21:01 +01:00
rbtree.rs rust: rbtree: add immutable cursor 2025-11-16 21:56:57 +01:00
regulator.rs rust: regulator: use CStr::as_char_ptr 2025-10-22 07:14:57 +02:00
revocable.rs Rust changes for v6.17 2025-08-03 13:49:10 -07:00
scatterlist.rs rust: scatterlist: Update ARef imports to use sync::aref 2025-12-18 17:25:45 +01:00
security.rs rust_binder: add Rust Binder driver 2025-09-19 09:40:46 +02:00
seq_file.rs rust: replace CStr with core::ffi::CStr 2025-10-22 07:47:27 +02:00
sizes.rs rust: sizes: add constants up to SZ_2G 2025-06-23 18:12:30 +02:00
slice.rs rust: slice: fix broken intra-doc links 2025-11-20 10:13:35 +00:00
soc.rs rust: Add soc_device support 2025-12-28 12:43:56 +01:00
static_assert.rs
std_vendor.rs
str.rs Modules changes for v6.19-rc1 2025-12-06 08:27:07 -08:00
sync.rs Modules changes for v6.19-rc1 2025-12-06 08:27:07 -08:00
task.rs rust: task: update ARef and AlwaysRefCounted imports from sync::aref 2025-09-08 00:11:19 +02:00
time.rs rust: time: Implement basic arithmetic operations for Delta 2025-09-04 16:56:48 +02:00
tracepoint.rs
transmute.rs rust: transmute: add from_bytes_prefix family of methods 2025-11-05 20:29:34 +09:00
types.rs rust: allow clippy::disallowed_names for doctests 2025-11-17 22:53:27 +01:00
uaccess.rs rust: uaccess: add UserSliceWriter::write_slice_file() 2025-11-05 00:35:37 +01:00
usb.rs rust: Add trait to convert a device reference to a bus device reference 2025-11-18 11:00:51 +13:00
workqueue.rs rust: pin-init: add pin projections to #[pin_data] 2025-09-11 23:26:20 +02:00
xarray.rs rust: types: add FOREIGN_ALIGN to ForeignOwnable 2025-07-14 23:55:24 +02:00