HV: vuart: send msi for pci vuart type

if vuart type is pci-vuart, then use MSI interrupt

split vuart_toggle_intr() control flow into vuart_trigger_level_intr() &
trigger_vmcs9900_msix(), because MSI is edge triggered, no deassertion
operation. Only trigger MSI for pci-vuart when assert interrupt.

Tracked-On: #5394
Signed-off-by: Tao Yuhong <yuhong.tao@intel.com>
Reviewed-by: Wang, Yu1 <yu1.wang@intel.com>
Acked-by: Eddie Dong <eddie.dong@Intel.com>
This commit is contained in:
Tao Yuhong
2020-10-12 11:29:04 -04:00
committed by wenlingz
parent 55b7fae67a
commit 691abe90ff
3 changed files with 42 additions and 9 deletions

View File

@@ -14,6 +14,23 @@
#define MCS9900_MMIO_BAR 0U
#define MCS9900_MSIX_BAR 1U
/*
* @pre vdev != NULL
*/
void trigger_vmcs9900_msix(struct pci_vdev *vdev)
{
struct acrn_vm *vm = vpci2vm(vdev->vpci);
int32_t ret = -1;
struct msix_table_entry *entry = &vdev->msix.table_entries[0];
ret = vlapic_inject_msi(vm, entry->addr, entry->data);
if (ret != 0) {
pr_warn("%2x:%2x.%dfaild injecting msi msi_addr:0x%lx msi_data:0x%x",
vdev->bdf.bits.b, vdev->bdf.bits.d, vdev->bdf.bits.f, entry->addr, entry->data);
}
}
static int32_t read_vmcs9900_cfg(const struct pci_vdev *vdev,
uint32_t offset, uint32_t bytes,
uint32_t * val)