mirror of https://gitee.com/openkylin/qemu.git
intel_iommu: handle interrupt remap enable
Handle writting to IRE bit in global command register. Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
a58614391d
commit
80de52ba87
|
@ -1183,6 +1183,22 @@ static void vtd_handle_gcmd_te(IntelIOMMUState *s, bool en)
|
|||
}
|
||||
}
|
||||
|
||||
/* Handle Interrupt Remap Enable/Disable */
|
||||
static void vtd_handle_gcmd_ire(IntelIOMMUState *s, bool en)
|
||||
{
|
||||
VTD_DPRINTF(CSR, "Interrupt Remap Enable %s", (en ? "on" : "off"));
|
||||
|
||||
if (en) {
|
||||
s->intr_enabled = true;
|
||||
/* Ok - report back to driver */
|
||||
vtd_set_clear_mask_long(s, DMAR_GSTS_REG, 0, VTD_GSTS_IRES);
|
||||
} else {
|
||||
s->intr_enabled = false;
|
||||
/* Ok - report back to driver */
|
||||
vtd_set_clear_mask_long(s, DMAR_GSTS_REG, VTD_GSTS_IRES, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Handle write to Global Command Register */
|
||||
static void vtd_handle_gcmd_write(IntelIOMMUState *s)
|
||||
{
|
||||
|
@ -1207,6 +1223,10 @@ static void vtd_handle_gcmd_write(IntelIOMMUState *s)
|
|||
/* Set/update the interrupt remapping root-table pointer */
|
||||
vtd_handle_gcmd_sirtp(s);
|
||||
}
|
||||
if (changed & VTD_GCMD_IRE) {
|
||||
/* Interrupt remap enable/disable */
|
||||
vtd_handle_gcmd_ire(s, val & VTD_GCMD_IRE);
|
||||
}
|
||||
}
|
||||
|
||||
/* Handle write to Context Command Register */
|
||||
|
|
Loading…
Reference in New Issue