QOM devices are aliased from the moment that they are added to the
QOM tree, and therefore must not use &mut. This has been a known
issue since the beginning of the Rust in QEMU project, and since
then a solution was developed in the form of BqlCell and BqlRefCell.
This series moves the MMIO code and registers from PL011State to
a new struct PL011Registers, which is wrapped with BqlRefCell.
This also allows to remove device-specific code from the device's
MemoryRegionOps callbacks, paving the way for MemoryRegionOps
bindings.
I am making this series a prerequisite to the usage of Resettable,
because it allows reset to reset take a shared reference to the
device. Thus the Resettable implementation will not have to
temporarily take a mut reference.
Paolo
Paolo Bonzini (10):
rust: pl011: remove unnecessary "extern crate"
rust: pl011: hide unnecessarily "pub" items from outside pl011::device
rust: pl011: extract conversion to RegisterOffset
rust: pl011: extract CharBackend receive logic into a separate function
rust: pl011: pull interrupt updates out of read/write ops
rust: pl011: extract PL011Registers
rust: pl011: wrap registers with BqlRefCell
rust: pl011: remove duplicate definitions
rust: pl011: pull device-specific code out of MemoryRegionOps callbacks
rust: qdev: make reset take a shared reference
rust/hw/char/pl011/src/device.rs | 458 ++++++++++++++-----------
rust/hw/char/pl011/src/device_class.rs | 52 +--
rust/hw/char/pl011/src/lib.rs | 61 ++--
rust/hw/char/pl011/src/memory_ops.rs | 23 +-
rust/qemu-api/src/qdev.rs | 2 +-
5 files changed, 314 insertions(+), 282 deletions(-)
--
2.47.1