mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
![]() I/O memory is typically either mapped through direct calls to ioremap() or subsystem / bus specific ones such as pci_iomap(). Even though subsystem / bus specific functions to map I/O memory are based on ioremap() / iounmap() it is not desirable to re-implement them in Rust. Instead, implement a base type for I/O mapped memory, which generically provides the corresponding accessors, such as `Io::readb` or `Io:try_readb`. `Io` supports an optional const generic, such that a driver can indicate the minimal expected and required size of the mapping at compile time. Correspondingly, calls to the 'non-try' accessors, support compile time checks of the I/O memory offset to read / write, while the 'try' accessors, provide boundary checks on runtime. `IoRaw` is meant to be embedded into a structure (e.g. pci::Bar or io::IoMem) which creates the actual I/O memory mapping and initializes `IoRaw` accordingly. To ensure that I/O mapped memory can't out-live the device it may be bound to, subsystems must embed the corresponding I/O memory type (e.g. pci::Bar) into a `Devres` container, such that it gets revoked once the device is unbound. Reviewed-by: Alice Ryhl <aliceryhl@google.com> Tested-by: Daniel Almeida <daniel.almeida@collabora.com> Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com> Signed-off-by: Danilo Krummrich <dakr@kernel.org> Tested-by: Dirk Behme <dirk.behme@de.bosch.com> Link: https://lore.kernel.org/r/20241219170425.12036-8-dakr@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
||
---|---|---|
.. | ||
alloc | ||
block | ||
fs | ||
init | ||
list | ||
net | ||
sync | ||
.gitignore | ||
alloc.rs | ||
block.rs | ||
build_assert.rs | ||
cred.rs | ||
device_id.rs | ||
device.rs | ||
driver.rs | ||
error.rs | ||
firmware.rs | ||
fs.rs | ||
generated_arch_static_branch_asm.rs.S | ||
init.rs | ||
io.rs | ||
ioctl.rs | ||
jump_label.rs | ||
kunit.rs | ||
lib.rs | ||
list.rs | ||
miscdevice.rs | ||
net.rs | ||
page.rs | ||
pid_namespace.rs | ||
prelude.rs | ||
print.rs | ||
rbtree.rs | ||
revocable.rs | ||
security.rs | ||
seq_file.rs | ||
sizes.rs | ||
static_assert.rs | ||
std_vendor.rs | ||
str.rs | ||
sync.rs | ||
task.rs | ||
time.rs | ||
tracepoint.rs | ||
transmute.rs | ||
types.rs | ||
uaccess.rs | ||
workqueue.rs |