use vmm_sys_util::fam::{FamStruct, FamStructWrapper};
use super::bindings::*;
const RISCV64_REGS_MAX: usize = 200;
generate_fam_struct_impl!(kvm_reg_list, u64, reg, u64, n, RISCV64_REGS_MAX);
impl PartialEq for kvm_reg_list {
fn eq(&self, other: &kvm_reg_list) -> bool {
self.n == other.n
}
}
pub type RegList = FamStructWrapper<kvm_reg_list>;
generate_fam_struct_impl!(
kvm_irq_routing,
kvm_irq_routing_entry,
entries,
u32,
nr,
1024
);
impl PartialEq for kvm_irq_routing {
fn eq(&self, other: &kvm_irq_routing) -> bool {
self.nr == other.nr && self.flags == other.flags
}
}
pub type KvmIrqRouting = FamStructWrapper<kvm_irq_routing>;
#[cfg(test)]
mod tests {
use super::KvmIrqRouting;
use super::RegList;
use vmm_sys_util::fam::FamStruct;
#[test]
fn test_reg_list_eq() {
let mut wrapper = RegList::new(1).unwrap();
assert_eq!(wrapper.as_slice().len(), 1);
let mut wrapper2 = wrapper.clone();
assert!(wrapper == wrapper2);
wrapper.as_mut_slice()[0] = 1;
assert!(wrapper != wrapper2);
wrapper2.as_mut_slice()[0] = 1;
assert!(wrapper == wrapper2);
}
#[test]
fn test_kvm_irq_routing() {
let wrapper = KvmIrqRouting::new(1).unwrap();
assert_eq!(wrapper.as_slice().len(), 1);
assert_eq!(wrapper.as_fam_struct_ref().len(), 1);
assert_eq!(wrapper.as_fam_struct_ref().nr, 1);
}
}