rust: qdev: add minimal clock bindings

Add the minimal support that is needed by pl011's event and tracepoint.

Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-ID: <20250929154938.594389-11-pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Paolo Bonzini 2025-09-29 17:49:32 +02:00 committed by Stefan Hajnoczi
parent 54140102d2
commit fe791b4004

View file

@ -411,6 +411,39 @@ where
impl<R: ObjectDeref> DeviceMethods for R where R::Target: IsA<DeviceState> {}
impl Clock {
pub const PERIOD_1SEC: u64 = bindings::CLOCK_PERIOD_1SEC;
pub const fn period_from_ns(ns: u64) -> u64 {
ns * Self::PERIOD_1SEC / 1_000_000_000
}
pub const fn period_from_hz(hz: u64) -> u64 {
if hz == 0 {
0
} else {
Self::PERIOD_1SEC / hz
}
}
pub const fn period_to_hz(period: u64) -> u64 {
if period == 0 {
0
} else {
Self::PERIOD_1SEC / period
}
}
pub const fn period(&self) -> u64 {
// SAFETY: Clock is returned by init_clock_in with zero value for period
unsafe { &*self.0.as_ptr() }.period
}
pub const fn hz(&self) -> u64 {
Self::period_to_hz(self.period())
}
}
unsafe impl ObjectType for Clock {
type Class = ObjectClass;
const TYPE_NAME: &'static CStr =