rust: irq: define ObjectType for IRQState

This is a small preparation in order to use an Owned<IRQState> for the argument
to sysbus_connect_irq.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2025-02-03 11:04:07 +01:00
parent 590faa03ee
commit 61faf6ac7b

View file

@ -5,11 +5,12 @@
//! Bindings for interrupt sources //! Bindings for interrupt sources
use core::ptr; use core::ptr;
use std::{marker::PhantomData, os::raw::c_int}; use std::{ffi::CStr, marker::PhantomData, os::raw::c_int};
use crate::{ use crate::{
bindings::{qemu_set_irq, IRQState}, bindings::{self, qemu_set_irq},
prelude::*, prelude::*,
qom::ObjectClass,
}; };
/// Interrupt sources are used by devices to pass changes to a value (typically /// Interrupt sources are used by devices to pass changes to a value (typically
@ -21,7 +22,8 @@ use crate::{
/// method sends a `true` value to the sink. If the guest has to see a /// method sends a `true` value to the sink. If the guest has to see a
/// different polarity, that change is performed by the board between the /// different polarity, that change is performed by the board between the
/// device and the interrupt controller. /// device and the interrupt controller.
/// pub type IRQState = bindings::IRQState;
/// Interrupts are implemented as a pointer to the interrupt "sink", which has /// Interrupts are implemented as a pointer to the interrupt "sink", which has
/// type [`IRQState`]. A device exposes its source as a QOM link property using /// type [`IRQState`]. A device exposes its source as a QOM link property using
/// a function such as [`SysBusDeviceMethods::init_irq`], and /// a function such as [`SysBusDeviceMethods::init_irq`], and
@ -91,3 +93,10 @@ impl Default for InterruptSource {
} }
} }
} }
unsafe impl ObjectType for IRQState {
type Class = ObjectClass;
const TYPE_NAME: &'static CStr =
unsafe { CStr::from_bytes_with_nul_unchecked(bindings::TYPE_IRQ) };
}
qom_isa!(IRQState: Object);