With this series, the only remaining use of unsafe is for vmstate's post load callback, which is small and self contained. All functionality used by pl011 and HPET devices are wrapped in Rust APIs, so they look like what a "real" from-scratch Rust device would be.
Patch 2 is best reviewed with "git diff -b --color-moved" or similar. Paolo Paolo Bonzini (5): rust: chardev: provide basic bindings to character devices rust: pl011: move register definitions out of lib.rs rust: pl011: clean up visibilities rust: pl011: switch to safe chardev operation rust: pl011: pass around registers::Data rust/hw/char/pl011/src/device.rs | 146 +++----- rust/hw/char/pl011/src/lib.rs | 509 +--------------------------- rust/hw/char/pl011/src/registers.rs | 507 +++++++++++++++++++++++++++ rust/qemu-api/meson.build | 17 +- rust/qemu-api/src/chardev.rs | 237 ++++++++++++- rust/qemu-api/src/zeroable.rs | 1 + 6 files changed, 800 insertions(+), 617 deletions(-) create mode 100644 rust/hw/char/pl011/src/registers.rs -- 2.48.1