mod api;
pub mod cache;
use crate::vmm::vm_list::get_vm_by_id;
use axaddrspace::{GuestPhysAddr, device::AccessWidth};
use axplat_riscv64_qemu_virt_hv::config::devices::PLIC_PADDR;
use axvisor_api::vmm::current_vm_id;
pub fn hardware_check() {
}
pub fn inject_interrupt(irq_id: usize) {
debug!("injecting interrupt id: {}", irq_id);
let vplic = get_vm_by_id(current_vm_id())
.unwrap()
.get_devices()
.find_mmio_dev(GuestPhysAddr::from_usize(PLIC_PADDR))
.unwrap();
let reg_offset = riscv_vplic::PLIC_PENDING_OFFSET + (irq_id / 32) * 4;
let addr = GuestPhysAddr::from_usize(PLIC_PADDR + reg_offset);
let width = AccessWidth::Dword;
let val: u32 = 1 << (irq_id % 32);
let _ = vplic.handle_write(addr, width, val as _);
}