summaryrefslogtreecommitdiff
path: root/tools/debugging
diff options
context:
space:
mode:
authorDanilo Krummrich <dakr@redhat.com>2024-06-14 19:30:06 +0200
committerDanilo Krummrich <dakr@kernel.org>2024-08-13 15:54:13 +0200
commit41bf8ed78cc51e13c60dbc7ff755a74ca968b91f (patch)
tree732f351e951df17ec172ad99766e8f7ebe4774ab /tools/debugging
parentbbdc4bcccfa3ab4533ac1cf01b863a0cb5e12c04 (diff)
rust: add `io::Io` base type
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. `Io` 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 `Io` accordingly. To ensure that I/O mapped memory can't out-live the device it may be bound to, subsystems should embedd the corresponding I/O memory type (e.g. pci::Bar) into a `Devres` container, such that it gets revoked once the device is unbound. Co-developed-by: Philipp Stanner <pstanner@redhat.com> Signed-off-by: Philipp Stanner <pstanner@redhat.com> Signed-off-by: Danilo Krummrich <dakr@redhat.com>
Diffstat (limited to 'tools/debugging')
0 files changed, 0 insertions, 0 deletions