#include "hyperv.h" static void synic_ctl(u8 ctl, u8 vcpu_id, u8 sint) { outl((ctl << 16)|((vcpu_id) << 8)|sint, 0x3000); } void synic_sint_create(int vcpu, int sint, int vec, bool auto_eoi) { wrmsr(HV_X64_MSR_SINT0 + sint, (u64)vec | ((auto_eoi) ? HV_SYNIC_SINT_AUTO_EOI : 0)); synic_ctl(HV_TEST_DEV_SINT_ROUTE_CREATE, vcpu, sint); } void synic_sint_set(int vcpu, int sint) { synic_ctl(HV_TEST_DEV_SINT_ROUTE_SET_SINT, vcpu, sint); } void synic_sint_destroy(int vcpu, int sint) { wrmsr(HV_X64_MSR_SINT0 + sint, 0xFF|HV_SYNIC_SINT_MASKED); synic_ctl(HV_TEST_DEV_SINT_ROUTE_DESTROY, vcpu, sint); }