mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
Introduce safe Rust wrappers around struct fwctl_device and struct fwctl_uctx. This lets Rust drivers register fwctl devices and implement firmware RPC callbacks through a typed trait interface. The abstraction keeps lifetime and reference-count handling inside the wrapper, exposes pinned per-FD user contexts to drivers, and validates the layout assumptions required by the C fwctl allocation model. Allocation sizes are padded so the kmalloc-backed C allocations also satisfy Rust alignment requirements. Registration owns driver private data with a lifetime tied to the bound parent device and verifies the parent identity before registration. Callbacks access that data through a higher-ranked closure, preventing its erased lifetime from escaping, while Device remains only the refcounted fwctl object. This avoids requiring Rust drop glue from the fwctl_device release path after unregister or module teardown. RPC callbacks receive typed scope information, a mutable request/response buffer, and the userspace output-buffer size. Response pointer conversion, length validation, and raw output-length handling remain inside the abstraction. Add the Rust sources to the FWCTL MAINTAINERS entry and add myself as the maintainer for the Rust abstractions. Link: https://patch.msgid.link/r/20260813152312.1311142-2-zhiw@nvidia.com Co-developed-by: Danilo Krummrich <dakr@kernel.org> Signed-off-by: Danilo Krummrich <dakr@kernel.org> Signed-off-by: Zhi Wang <zhiw@nvidia.com> Reviewed-by: Alexandre Courbot <acourbot@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
57 lines
1.9 KiB
Plaintext
57 lines
1.9 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
menuconfig FWCTL
|
|
tristate "fwctl device firmware access framework"
|
|
help
|
|
fwctl provides a userspace API for restricted access to communicate
|
|
with on-device firmware. The communication channel is intended to
|
|
support a wide range of lockdown compatible device behaviors including
|
|
manipulating device FLASH, debugging, and other activities that don't
|
|
fit neatly into an existing subsystem.
|
|
|
|
if FWCTL
|
|
|
|
config RUST_FWCTL_ABSTRACTIONS
|
|
bool "Rust fwctl abstractions"
|
|
depends on RUST && FWCTL=y
|
|
help
|
|
This enables the Rust abstractions for the fwctl device firmware
|
|
access framework. It provides safe wrappers around struct fwctl_device
|
|
and struct fwctl_uctx, allowing Rust drivers to register fwctl devices
|
|
and implement their control and RPC logic in safe Rust.
|
|
|
|
If unsure, say N.
|
|
|
|
config FWCTL_BNXT
|
|
tristate "bnxt control fwctl driver"
|
|
depends on BNXT
|
|
help
|
|
BNXT provides interface for the user process to access the debug and
|
|
configuration registers of the Broadcom NIC hardware family.
|
|
This will allow configuration and debug tools to work out of the box on
|
|
mainstream kernel.
|
|
|
|
If you don't know what to do here, say N.
|
|
|
|
config FWCTL_MLX5
|
|
tristate "mlx5 ConnectX control fwctl driver"
|
|
depends on MLX5_CORE
|
|
help
|
|
MLX5 provides interface for the user process to access the debug and
|
|
configuration registers of the ConnectX hardware family
|
|
(NICs, PCI switches and SmartNIC SoCs).
|
|
This will allow configuration and debug tools to work out of the box on
|
|
mainstream kernel.
|
|
|
|
If you don't know what to do here, say N.
|
|
|
|
config FWCTL_PDS
|
|
tristate "AMD/Pensando pds fwctl driver"
|
|
depends on PDS_CORE
|
|
help
|
|
The pds_fwctl driver provides an fwctl interface for a user process
|
|
to access the debug and configuration information of the AMD/Pensando
|
|
DSC hardware family.
|
|
|
|
If you don't know what to do here, say N.
|
|
endif
|