mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
rust: add bindings for memattrs
The MemTxAttrs structure contains bitfield members, and bindgen is unable to generate an equivalent macro definition for MEMTXATTRS_UNSPECIFIED. Therefore, manually define a global constant variable MEMTXATTRS_UNSPECIFIED to support calls from Rust code. Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Link: https://lore.kernel.org/r/20250125125137.1223277-6-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
9a96d41007
commit
d015d4cbb4
3 changed files with 16 additions and 2 deletions
|
@ -2,7 +2,7 @@
|
||||||
// Author(s): Paolo Bonzini <pbonzini@redhat.com>
|
// Author(s): Paolo Bonzini <pbonzini@redhat.com>
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
//! Bindings for `MemoryRegion` and `MemoryRegionOps`
|
//! Bindings for `MemoryRegion`, `MemoryRegionOps` and `MemTxAttrs`
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
ffi::{CStr, CString},
|
ffi::{CStr, CString},
|
||||||
|
@ -11,7 +11,7 @@ use std::{
|
||||||
ptr::addr_of,
|
ptr::addr_of,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use bindings::hwaddr;
|
pub use bindings::{hwaddr, MemTxAttrs};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
bindings::{self, device_endian, memory_region_init_io},
|
bindings::{self, device_endian, memory_region_init_io},
|
||||||
|
@ -189,3 +189,15 @@ unsafe impl ObjectType for MemoryRegion {
|
||||||
unsafe { CStr::from_bytes_with_nul_unchecked(bindings::TYPE_MEMORY_REGION) };
|
unsafe { CStr::from_bytes_with_nul_unchecked(bindings::TYPE_MEMORY_REGION) };
|
||||||
}
|
}
|
||||||
qom_isa!(MemoryRegion: Object);
|
qom_isa!(MemoryRegion: Object);
|
||||||
|
|
||||||
|
/// A special `MemTxAttrs` constant, used to indicate that no memory
|
||||||
|
/// attributes are specified.
|
||||||
|
///
|
||||||
|
/// Bus masters which don't specify any attributes will get this,
|
||||||
|
/// which has all attribute bits clear except the topmost one
|
||||||
|
/// (so that we can distinguish "all attributes deliberately clear"
|
||||||
|
/// from "didn't specify" if necessary).
|
||||||
|
pub const MEMTXATTRS_UNSPECIFIED: MemTxAttrs = MemTxAttrs {
|
||||||
|
unspecified: true,
|
||||||
|
..Zeroable::ZERO
|
||||||
|
};
|
||||||
|
|
|
@ -101,3 +101,4 @@ impl_zeroable!(crate::bindings::VMStateDescription);
|
||||||
impl_zeroable!(crate::bindings::MemoryRegionOps__bindgen_ty_1);
|
impl_zeroable!(crate::bindings::MemoryRegionOps__bindgen_ty_1);
|
||||||
impl_zeroable!(crate::bindings::MemoryRegionOps__bindgen_ty_2);
|
impl_zeroable!(crate::bindings::MemoryRegionOps__bindgen_ty_2);
|
||||||
impl_zeroable!(crate::bindings::MemoryRegionOps);
|
impl_zeroable!(crate::bindings::MemoryRegionOps);
|
||||||
|
impl_zeroable!(crate::bindings::MemTxAttrs);
|
||||||
|
|
|
@ -62,3 +62,4 @@ typedef enum memory_order {
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "migration/vmstate.h"
|
#include "migration/vmstate.h"
|
||||||
#include "chardev/char-serial.h"
|
#include "chardev/char-serial.h"
|
||||||
|
#include "exec/memattrs.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue