> +//! ### Example
> +//!
> +//! ```
> +//! # use qemu_api::prelude::*;
> +//! # use qemu_api::{c_str, cell::BqlRefCell, irq::InterruptSource, 
> irq::IRQState};
> +//! # use qemu_api::{sysbus::SysBusDevice, qom::Owned, qom::ParentField};
> +//! # const N_GPIOS: usize = 8;
> +//! # struct PL061Registers { /* ... */ }
> +//! # unsafe impl ObjectType for PL061Device {
> +//! #     type Class = <SysBusDevice as ObjectType>::Class;
> +//! #     const TYPE_NAME: &'static std::ffi::CStr = c_str!("pl061");
> +//! # }
> +//! struct PL061Device {

Maybe PL061State?

> +//!     parent_obj: ParentField<SysBusDevice>,
> +//!
> +//!     // Configuration is read-only after initialization
> +//!     pullups: u32,
> +//!     pulldowns: u32,
> +//!
> +//!     // Same for sub-objects of the device
> +//!     out: [Owned<IRQState>; N_GPIOS],

Should this be InterruptSource type?

Just have a quick look at pl061.c:

qdev_init_gpio_out(dev, s->out, N_GPIOS);

So in Rust side, `out` would be initialized by
DeviceMethods::init_gpio_out().


Others are fine for me ~ with above nits fixed,

Reviewed-by: Zhao Liu <zhao1....@intel.com>


Reply via email to