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 rust: add `build_error!` to the prelude 2025-01-10 00:19:09 +01:00
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.rs Linux 6.19-rc5 2026-01-12 13:33:24 +01:00
device_id.rs rust: device_id: replace incorrect word in safety documentation 2025-12-29 14:09:18 +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 rust: jump_label: skip formatting generated file 2024-11-20 13:32:42 -05:00
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 rust: jump_label: skip formatting generated file 2024-11-20 13:32:42 -05:00
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 rust: use absolute paths in macros referencing core and kernel 2025-05-23 00:12:14 +02:00
std_vendor.rs rust: convert raw URLs to Markdown autolinks in comments 2025-05-12 00:20:25 +02:00
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 rust: add tracepoint support 2024-11-04 16:21:44 -05:00
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