Chen Miao
unread,Nov 27, 2025, 11:35:45 PM11/27/25Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to chao...@openatom.club, luo...@openatom.club, dz...@openatom.club, plu...@openatom.club, hust-os-ker...@googlegroups.com, chenmiao, Chao Liu
From: chenmiao <chen...@openatom.club>
A Rust version implementation has been designed for BusState,
which will be used for the subsequent I2CBus implementation.
Signed-off-by: Chen Miao <chen...@openatom.club>
Signed-off-by: Chao Liu <chao...@openatom.club>
---
rust/hw/core/meson.build | 1 +
rust/hw/core/src/bus.rs | 44 ++++++++++++++++++++++++++++++++++++++++
rust/hw/core/src/lib.rs | 3 +++
3 files changed, 48 insertions(+)
create mode 100644 rust/hw/core/src/bus.rs
diff --git a/rust/hw/core/meson.build b/rust/hw/core/meson.build
index 1560dd20c6..efcda50fef 100644
--- a/rust/hw/core/meson.build
+++ b/rust/hw/core/meson.build
@@ -50,6 +50,7 @@ _hwcore_rs = static_library(
[
'src/lib.rs',
'src/bindings.rs',
+ 'src/bus.rs',
'src/irq.rs',
'src/qdev.rs',
'src/sysbus.rs',
diff --git a/rust/hw/core/src/bus.rs b/rust/hw/core/src/bus.rs
new file mode 100644
index 0000000000..d3fbf519d4
--- /dev/null
+++ b/rust/hw/core/src/bus.rs
@@ -0,0 +1,44 @@
+// Copyright 2025 HUST OpenAtom Open Source Club.
+// Author(s): Chen Miao <chen...@openatom.club>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+use std::ffi::CStr;
+
+pub use bindings::BusClass;
+use common::Opaque;
+use qom::{qom_isa, IsA, Object, ObjectDeref, ObjectType};
+
+use crate::{bindings, DeviceImpl};
+
+#[repr(transparent)]
+#[derive(Debug, common::Wrapper)]
+pub struct BusState(Opaque<bindings::BusState>);
+
+unsafe impl Send for BusState {}
+unsafe impl Sync for BusState {}
+
+unsafe impl ObjectType for BusState {
+ type Class = BusClass;
+ const TYPE_NAME: &'static std::ffi::CStr =
+ unsafe { CStr::from_bytes_with_nul_unchecked(bindings::TYPE_BUS) };
+}
+
+qom_isa!(BusState: Object);
+
+pub trait BusStateImpl: DeviceImpl + IsA<BusState> {}
+
+impl BusClass {
+ pub fn class_init<T: BusStateImpl>(self: &mut BusClass) {
+ self.parent_class.class_init::<T>();
+ }
+}
+
+pub trait BusMethods: ObjectDeref
+where
+ Self::Target: IsA<BusState>,
+{
+ // TODO: Since the bus does not currently provide services to other
+ // components, we have not implemented any functions yet.
+}
+
+impl<R: ObjectDeref> BusMethods for R where R::Target: IsA<BusState> {}
diff --git a/rust/hw/core/src/lib.rs b/rust/hw/core/src/lib.rs
index b40801eb84..10cc516664 100644
--- a/rust/hw/core/src/lib.rs
+++ b/rust/hw/core/src/lib.rs
@@ -13,3 +13,6 @@
mod sysbus;
pub use sysbus::*;
+
+mod bus;
+pub use bus::*;
--
2.51.1