rust: re-export qemu macros from common/qom/hwcore
This is just a bit nicer. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Link: https://lore.kernel.org/r/20250827104147.717203-22-marcandre.lureau@redhat.com Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
b0f6bf8a5b
commit
e4444d71e8
34 changed files with 35 additions and 45 deletions
|
|
@ -278,7 +278,7 @@ a raw pointer, for use in calls to C functions. It can be used for
|
||||||
example as follows::
|
example as follows::
|
||||||
|
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(Debug, qemu_api_macros::Wrapper)]
|
#[derive(Debug, common::Wrapper)]
|
||||||
pub struct Object(Opaque<bindings::Object>);
|
pub struct Object(Opaque<bindings::Object>);
|
||||||
|
|
||||||
where the special ``derive`` macro provides useful methods such as
|
where the special ``derive`` macro provides useful methods such as
|
||||||
|
|
|
||||||
8
rust/Cargo.lock
generated
8
rust/Cargo.lock
generated
|
|
@ -58,7 +58,6 @@ dependencies = [
|
||||||
"bql",
|
"bql",
|
||||||
"common",
|
"common",
|
||||||
"migration",
|
"migration",
|
||||||
"qemu_macros",
|
|
||||||
"qom",
|
"qom",
|
||||||
"util",
|
"util",
|
||||||
]
|
]
|
||||||
|
|
@ -68,6 +67,7 @@ name = "common"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
|
"qemu_macros",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -93,7 +93,6 @@ dependencies = [
|
||||||
"common",
|
"common",
|
||||||
"hwcore",
|
"hwcore",
|
||||||
"migration",
|
"migration",
|
||||||
"qemu_macros",
|
|
||||||
"qom",
|
"qom",
|
||||||
"system",
|
"system",
|
||||||
"util",
|
"util",
|
||||||
|
|
@ -133,7 +132,6 @@ name = "migration"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"common",
|
"common",
|
||||||
"qemu_macros",
|
|
||||||
"util",
|
"util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -149,7 +147,6 @@ dependencies = [
|
||||||
"common",
|
"common",
|
||||||
"hwcore",
|
"hwcore",
|
||||||
"migration",
|
"migration",
|
||||||
"qemu_macros",
|
|
||||||
"qom",
|
"qom",
|
||||||
"system",
|
"system",
|
||||||
"util",
|
"util",
|
||||||
|
|
@ -232,7 +229,6 @@ name = "system"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"common",
|
"common",
|
||||||
"qemu_macros",
|
|
||||||
"qom",
|
"qom",
|
||||||
"util",
|
"util",
|
||||||
]
|
]
|
||||||
|
|
@ -246,7 +242,6 @@ dependencies = [
|
||||||
"common",
|
"common",
|
||||||
"hwcore",
|
"hwcore",
|
||||||
"migration",
|
"migration",
|
||||||
"qemu_macros",
|
|
||||||
"qom",
|
"qom",
|
||||||
"system",
|
"system",
|
||||||
"util",
|
"util",
|
||||||
|
|
@ -266,7 +261,6 @@ dependencies = [
|
||||||
"common",
|
"common",
|
||||||
"foreign",
|
"foreign",
|
||||||
"libc",
|
"libc",
|
||||||
"qemu_macros",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ bql = { path = "../bql" }
|
||||||
migration = { path = "../migration" }
|
migration = { path = "../migration" }
|
||||||
qom = { path = "../qom" }
|
qom = { path = "../qom" }
|
||||||
util = { path = "../util" }
|
util = { path = "../util" }
|
||||||
qemu_macros = { path = "../qemu-macros" }
|
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|
|
||||||
|
|
@ -38,4 +38,4 @@ _chardev_rs = static_library(
|
||||||
dependencies: [common_rs, qemu_macros],
|
dependencies: [common_rs, qemu_macros],
|
||||||
)
|
)
|
||||||
|
|
||||||
chardev_rs = declare_dependency(link_with: [_chardev_rs], dependencies: [qemu_macros, chardev, qemuutil])
|
chardev_rs = declare_dependency(link_with: [_chardev_rs], dependencies: [chardev, qemuutil])
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ use crate::bindings;
|
||||||
|
|
||||||
/// A safe wrapper around [`bindings::Chardev`].
|
/// A safe wrapper around [`bindings::Chardev`].
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(qemu_macros::Wrapper)]
|
#[derive(common::Wrapper)]
|
||||||
pub struct Chardev(Opaque<bindings::Chardev>);
|
pub struct Chardev(Opaque<bindings::Chardev>);
|
||||||
|
|
||||||
pub type ChardevClass = bindings::ChardevClass;
|
pub type ChardevClass = bindings::ChardevClass;
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ rust-version.workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libc.workspace = true
|
libc.workspace = true
|
||||||
|
qemu_macros = { path = "../qemu-macros" }
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ _common_rs = static_library(
|
||||||
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
||||||
rust_abi: 'rust',
|
rust_abi: 'rust',
|
||||||
rust_args: _common_cfg,
|
rust_args: _common_cfg,
|
||||||
dependencies: [libc_rs],
|
dependencies: [libc_rs, qemu_macros],
|
||||||
)
|
)
|
||||||
|
|
||||||
common_rs = declare_dependency(link_with: [_common_rs])
|
common_rs = declare_dependency(link_with: [_common_rs])
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
pub use qemu_macros::{TryInto, Wrapper};
|
||||||
|
|
||||||
pub mod assertions;
|
pub mod assertions;
|
||||||
|
|
||||||
pub mod bitops;
|
pub mod bitops;
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,7 @@ impl<T: Default> Opaque<T> {
|
||||||
|
|
||||||
/// Annotates [`Self`] as a transparent wrapper for another type.
|
/// Annotates [`Self`] as a transparent wrapper for another type.
|
||||||
///
|
///
|
||||||
/// Usually defined via the [`qemu_macros::Wrapper`] derive macro.
|
/// Usually defined via the [`crate::Wrapper`] derive macro.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
|
|
@ -227,8 +227,6 @@ impl<T: Default> Opaque<T> {
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// They are not defined here to allow them to be `const`.
|
/// They are not defined here to allow them to be `const`.
|
||||||
///
|
|
||||||
/// [`qemu_macros::Wrapper`]: ../../qemu_macros/derive.Wrapper.html
|
|
||||||
pub unsafe trait Wrapper {
|
pub unsafe trait Wrapper {
|
||||||
type Wrapped;
|
type Wrapped;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ qom = { path = "../../../qom" }
|
||||||
chardev = { path = "../../../chardev" }
|
chardev = { path = "../../../chardev" }
|
||||||
system = { path = "../../../system" }
|
system = { path = "../../../system" }
|
||||||
hwcore = { path = "../../../hw/core" }
|
hwcore = { path = "../../../hw/core" }
|
||||||
qemu_macros = { path = "../../../qemu-macros" }
|
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@ _libpl011_rs = static_library(
|
||||||
util_rs,
|
util_rs,
|
||||||
migration_rs,
|
migration_rs,
|
||||||
bql_rs,
|
bql_rs,
|
||||||
qemu_macros,
|
|
||||||
qom_rs,
|
qom_rs,
|
||||||
chardev_rs,
|
chardev_rs,
|
||||||
system_rs,
|
system_rs,
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ pub struct PL011Registers {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(qemu_macros::Object, qemu_macros::Device)]
|
#[derive(qom::Object, hwcore::Device)]
|
||||||
/// PL011 Device Model in QEMU
|
/// PL011 Device Model in QEMU
|
||||||
pub struct PL011State {
|
pub struct PL011State {
|
||||||
pub parent_obj: ParentField<SysBusDevice>,
|
pub parent_obj: ParentField<SysBusDevice>,
|
||||||
|
|
@ -683,7 +683,7 @@ pub unsafe extern "C" fn pl011_create(
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(qemu_macros::Object, qemu_macros::Device)]
|
#[derive(qom::Object, hwcore::Device)]
|
||||||
/// PL011 Luminary device model.
|
/// PL011 Luminary device model.
|
||||||
pub struct PL011Luminary {
|
pub struct PL011Luminary {
|
||||||
parent_obj: ParentField<PL011State>,
|
parent_obj: ParentField<PL011State>,
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ use migration::{impl_vmstate_bitsized, impl_vmstate_forward};
|
||||||
#[doc(alias = "offset")]
|
#[doc(alias = "offset")]
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
#[repr(u64)]
|
#[repr(u64)]
|
||||||
#[derive(Debug, Eq, PartialEq, qemu_macros::TryInto)]
|
#[derive(Debug, Eq, PartialEq, common::TryInto)]
|
||||||
pub enum RegisterOffset {
|
pub enum RegisterOffset {
|
||||||
/// Data Register
|
/// Data Register
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ repository.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
qemu_macros = { path = "../../qemu-macros" }
|
||||||
common = { path = "../../common" }
|
common = { path = "../../common" }
|
||||||
bql = { path = "../../bql" }
|
bql = { path = "../../bql" }
|
||||||
qom = { path = "../../qom" }
|
qom = { path = "../../qom" }
|
||||||
|
|
@ -20,7 +21,6 @@ chardev = { path = "../../chardev" }
|
||||||
migration = { path = "../../migration" }
|
migration = { path = "../../migration" }
|
||||||
system = { path = "../../system" }
|
system = { path = "../../system" }
|
||||||
util = { path = "../../util" }
|
util = { path = "../../util" }
|
||||||
qemu_macros = { path = "../../qemu-macros" }
|
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ test('rust-hwcore-rs-integration',
|
||||||
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
||||||
rust_args: ['--test'],
|
rust_args: ['--test'],
|
||||||
install: false,
|
install: false,
|
||||||
dependencies: [common_rs, hwcore_rs, bql_rs, migration_rs, qemu_macros, util_rs]),
|
dependencies: [common_rs, hwcore_rs, bql_rs, migration_rs, util_rs]),
|
||||||
args: [
|
args: [
|
||||||
'--test', '--test-threads', '1',
|
'--test', '--test-threads', '1',
|
||||||
'--format', 'pretty',
|
'--format', 'pretty',
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ use crate::bindings::{self, qemu_set_irq};
|
||||||
|
|
||||||
/// An opaque wrapper around [`bindings::IRQState`].
|
/// An opaque wrapper around [`bindings::IRQState`].
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(Debug, qemu_macros::Wrapper)]
|
#[derive(Debug, common::Wrapper)]
|
||||||
pub struct IRQState(Opaque<bindings::IRQState>);
|
pub struct IRQState(Opaque<bindings::IRQState>);
|
||||||
|
|
||||||
/// 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
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
pub use qemu_macros::Device;
|
||||||
pub use qom;
|
pub use qom;
|
||||||
|
|
||||||
pub mod bindings;
|
pub mod bindings;
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ use crate::{
|
||||||
|
|
||||||
/// A safe wrapper around [`bindings::Clock`].
|
/// A safe wrapper around [`bindings::Clock`].
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(Debug, qemu_macros::Wrapper)]
|
#[derive(Debug, common::Wrapper)]
|
||||||
pub struct Clock(Opaque<bindings::Clock>);
|
pub struct Clock(Opaque<bindings::Clock>);
|
||||||
|
|
||||||
unsafe impl Send for Clock {}
|
unsafe impl Send for Clock {}
|
||||||
|
|
@ -31,7 +31,7 @@ unsafe impl Sync for Clock {}
|
||||||
|
|
||||||
/// A safe wrapper around [`bindings::DeviceState`].
|
/// A safe wrapper around [`bindings::DeviceState`].
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(Debug, qemu_macros::Wrapper)]
|
#[derive(Debug, common::Wrapper)]
|
||||||
pub struct DeviceState(Opaque<bindings::DeviceState>);
|
pub struct DeviceState(Opaque<bindings::DeviceState>);
|
||||||
|
|
||||||
unsafe impl Send for DeviceState {}
|
unsafe impl Send for DeviceState {}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ use crate::{
|
||||||
|
|
||||||
/// A safe wrapper around [`bindings::SysBusDevice`].
|
/// A safe wrapper around [`bindings::SysBusDevice`].
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(Debug, qemu_macros::Wrapper)]
|
#[derive(Debug, common::Wrapper)]
|
||||||
pub struct SysBusDevice(Opaque<bindings::SysBusDevice>);
|
pub struct SysBusDevice(Opaque<bindings::SysBusDevice>);
|
||||||
|
|
||||||
unsafe impl Send for SysBusDevice {}
|
unsafe impl Send for SysBusDevice {}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ pub const VMSTATE: VMStateDescription<DummyState> = VMStateDescriptionBuilder::<
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(qemu_macros::Object, qemu_macros::Device)]
|
#[derive(qom::Object, hwcore::Device)]
|
||||||
pub struct DummyState {
|
pub struct DummyState {
|
||||||
parent: ParentField<DeviceState>,
|
parent: ParentField<DeviceState>,
|
||||||
#[property(rename = "migrate-clk", default = true)]
|
#[property(rename = "migrate-clk", default = true)]
|
||||||
|
|
@ -54,7 +54,7 @@ impl DeviceImpl for DummyState {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(qemu_macros::Object, qemu_macros::Device)]
|
#[derive(qom::Object, hwcore::Device)]
|
||||||
pub struct DummyChildState {
|
pub struct DummyChildState {
|
||||||
parent: ParentField<DummyState>,
|
parent: ParentField<DummyState>,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ migration = { path = "../../../migration" }
|
||||||
bql = { path = "../../../bql" }
|
bql = { path = "../../../bql" }
|
||||||
qom = { path = "../../../qom" }
|
qom = { path = "../../../qom" }
|
||||||
system = { path = "../../../system" }
|
system = { path = "../../../system" }
|
||||||
qemu_macros = { path = "../../../qemu-macros" }
|
|
||||||
hwcore = { path = "../../../hw/core" }
|
hwcore = { path = "../../../hw/core" }
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ _libhpet_rs = static_library(
|
||||||
util_rs,
|
util_rs,
|
||||||
migration_rs,
|
migration_rs,
|
||||||
bql_rs,
|
bql_rs,
|
||||||
qemu_macros,
|
|
||||||
qom_rs,
|
qom_rs,
|
||||||
system_rs,
|
system_rs,
|
||||||
hwcore_rs,
|
hwcore_rs,
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ const HPET_TN_CFG_FSB_CAP_SHIFT: usize = 15;
|
||||||
/// Timer N Interrupt Routing Capability (bits 32:63)
|
/// Timer N Interrupt Routing Capability (bits 32:63)
|
||||||
const HPET_TN_CFG_INT_ROUTE_CAP_SHIFT: usize = 32;
|
const HPET_TN_CFG_INT_ROUTE_CAP_SHIFT: usize = 32;
|
||||||
|
|
||||||
#[derive(qemu_macros::TryInto)]
|
#[derive(common::TryInto)]
|
||||||
#[repr(u64)]
|
#[repr(u64)]
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
/// Timer registers, masked by 0x18
|
/// Timer registers, masked by 0x18
|
||||||
|
|
@ -110,7 +110,7 @@ enum TimerRegister {
|
||||||
ROUTE = 16,
|
ROUTE = 16,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(qemu_macros::TryInto)]
|
#[derive(common::TryInto)]
|
||||||
#[repr(u64)]
|
#[repr(u64)]
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
/// Global registers
|
/// Global registers
|
||||||
|
|
@ -520,7 +520,7 @@ impl HPETTimer {
|
||||||
|
|
||||||
/// HPET Event Timer Block Abstraction
|
/// HPET Event Timer Block Abstraction
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(qemu_macros::Object)]
|
#[derive(qom::Object)]
|
||||||
pub struct HPETState {
|
pub struct HPETState {
|
||||||
parent_obj: ParentField<SysBusDevice>,
|
parent_obj: ParentField<SysBusDevice>,
|
||||||
iomem: MemoryRegion,
|
iomem: MemoryRegion,
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,9 @@ proc_macro2_rs_native = dependency('proc-macro2-1-rs', native: true)
|
||||||
|
|
||||||
genrs = []
|
genrs = []
|
||||||
|
|
||||||
subdir('common')
|
|
||||||
subdir('qemu-macros')
|
subdir('qemu-macros')
|
||||||
|
|
||||||
|
subdir('common')
|
||||||
subdir('bits')
|
subdir('bits')
|
||||||
subdir('util')
|
subdir('util')
|
||||||
subdir('migration')
|
subdir('migration')
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ rust-version.workspace = true
|
||||||
[dependencies]
|
[dependencies]
|
||||||
common = { path = "../common" }
|
common = { path = "../common" }
|
||||||
util = { path = "../util" }
|
util = { path = "../util" }
|
||||||
qemu_macros = { path = "../qemu-macros" }
|
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
pub use qemu_macros::Object;
|
||||||
|
|
||||||
pub mod bindings;
|
pub mod bindings;
|
||||||
|
|
||||||
// preserve one-item-per-"use" syntax, it is clearer
|
// preserve one-item-per-"use" syntax, it is clearer
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ pub use crate::bindings::{type_register_static, ObjectClass};
|
||||||
|
|
||||||
/// A safe wrapper around [`bindings::Object`].
|
/// A safe wrapper around [`bindings::Object`].
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(Debug, qemu_macros::Wrapper)]
|
#[derive(Debug, common::Wrapper)]
|
||||||
pub struct Object(Opaque<bindings::Object>);
|
pub struct Object(Opaque<bindings::Object>);
|
||||||
|
|
||||||
unsafe impl Send for Object {}
|
unsafe impl Send for Object {}
|
||||||
|
|
@ -173,7 +173,7 @@ macro_rules! qom_isa {
|
||||||
///
|
///
|
||||||
/// ```ignore
|
/// ```ignore
|
||||||
/// #[repr(C)]
|
/// #[repr(C)]
|
||||||
/// #[derive(qemu_macros::Object)]
|
/// #[derive(qom::Object)]
|
||||||
/// pub struct MyDevice {
|
/// pub struct MyDevice {
|
||||||
/// parent: ParentField<DeviceState>,
|
/// parent: ParentField<DeviceState>,
|
||||||
/// ...
|
/// ...
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@ rust-version.workspace = true
|
||||||
common = { path = "../common" }
|
common = { path = "../common" }
|
||||||
qom = { path = "../qom" }
|
qom = { path = "../qom" }
|
||||||
util = { path = "../util" }
|
util = { path = "../util" }
|
||||||
qemu_macros = { path = "../qemu-macros" }
|
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|
|
||||||
|
|
@ -39,4 +39,4 @@ _system_rs = static_library(
|
||||||
)
|
)
|
||||||
|
|
||||||
system_rs = declare_dependency(link_with: [_system_rs],
|
system_rs = declare_dependency(link_with: [_system_rs],
|
||||||
dependencies: [qemu_macros, hwcore])
|
dependencies: [hwcore])
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ impl<T> Default for MemoryRegionOpsBuilder<T> {
|
||||||
|
|
||||||
/// A safe wrapper around [`bindings::MemoryRegion`].
|
/// A safe wrapper around [`bindings::MemoryRegion`].
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(qemu_macros::Wrapper)]
|
#[derive(common::Wrapper)]
|
||||||
pub struct MemoryRegion(Opaque<bindings::MemoryRegion>);
|
pub struct MemoryRegion(Opaque<bindings::MemoryRegion>);
|
||||||
|
|
||||||
unsafe impl Send for MemoryRegion {}
|
unsafe impl Send for MemoryRegion {}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ hwcore = { path = "../hw/core" }
|
||||||
migration = { path = "../migration" }
|
migration = { path = "../migration" }
|
||||||
util = { path = "../util" }
|
util = { path = "../util" }
|
||||||
bql = { path = "../bql" }
|
bql = { path = "../bql" }
|
||||||
qemu_macros = { path = "../qemu-macros" }
|
|
||||||
qom = { path = "../qom" }
|
qom = { path = "../qom" }
|
||||||
system = { path = "../system" }
|
system = { path = "../system" }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ anyhow = { workspace = true }
|
||||||
foreign = { workspace = true }
|
foreign = { workspace = true }
|
||||||
libc = { workspace = true }
|
libc = { workspace = true }
|
||||||
common = { path = "../common" }
|
common = { path = "../common" }
|
||||||
qemu_macros = { path = "../qemu-macros" }
|
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ _util_rs = static_library(
|
||||||
),
|
),
|
||||||
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
||||||
rust_abi: 'rust',
|
rust_abi: 'rust',
|
||||||
dependencies: [anyhow_rs, libc_rs, foreign_rs, common_rs, qemu_macros, qom, qemuutil],
|
dependencies: [anyhow_rs, libc_rs, foreign_rs, common_rs, qom, qemuutil],
|
||||||
)
|
)
|
||||||
|
|
||||||
util_rs = declare_dependency(link_with: [_util_rs], dependencies: [qemuutil, qom])
|
util_rs = declare_dependency(link_with: [_util_rs], dependencies: [qemuutil, qom])
|
||||||
|
|
|
||||||
|
|
@ -15,14 +15,14 @@ use crate::bindings::{
|
||||||
|
|
||||||
/// A safe wrapper around [`bindings::QEMUTimer`].
|
/// A safe wrapper around [`bindings::QEMUTimer`].
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(Debug, qemu_macros::Wrapper)]
|
#[derive(Debug, common::Wrapper)]
|
||||||
pub struct Timer(Opaque<bindings::QEMUTimer>);
|
pub struct Timer(Opaque<bindings::QEMUTimer>);
|
||||||
|
|
||||||
unsafe impl Send for Timer {}
|
unsafe impl Send for Timer {}
|
||||||
unsafe impl Sync for Timer {}
|
unsafe impl Sync for Timer {}
|
||||||
|
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(qemu_macros::Wrapper)]
|
#[derive(common::Wrapper)]
|
||||||
pub struct TimerListGroup(Opaque<bindings::QEMUTimerListGroup>);
|
pub struct TimerListGroup(Opaque<bindings::QEMUTimerListGroup>);
|
||||||
|
|
||||||
unsafe impl Send for TimerListGroup {}
|
unsafe impl Send for TimerListGroup {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue