asm-generic/hyperv: update hv_interrupt_entry
authorWei Liu <wei.liu@kernel.org>
Wed, 3 Feb 2021 15:04:31 +0000 (15:04 +0000)
committerWei Liu <wei.liu@kernel.org>
Thu, 11 Feb 2021 08:47:06 +0000 (08:47 +0000)
We will soon use the same structure to handle IO-APIC interrupts as
well. Introduce an enum to identify the source and a data structure for
IO-APIC RTE.

While at it, update pci-hyperv.c to use the enum.

No functional change.

Signed-off-by: Wei Liu <wei.liu@kernel.org>
Acked-by: Rob Herring <robh@kernel.org>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Link: https://lore.kernel.org/r/20210203150435.27941-13-wei.liu@kernel.org
drivers/pci/controller/pci-hyperv.c
include/asm-generic/hyperv-tlfs.h

index 6db8d96a78ebcae34c16d9cc8a039ad68882555e..87aa62ee0368350ec4370dcc8f5089313afd167b 100644 (file)
@@ -1216,7 +1216,7 @@ static void hv_irq_unmask(struct irq_data *data)
        params = &hbus->retarget_msi_interrupt_params;
        memset(params, 0, sizeof(*params));
        params->partition_id = HV_PARTITION_ID_SELF;
-       params->int_entry.source = 1; /* MSI(-X) */
+       params->int_entry.source = HV_INTERRUPT_SOURCE_MSI;
        hv_set_msi_entry_from_desc(&params->int_entry.msi_entry, msi_desc);
        params->device_id = (hbus->hdev->dev_instance.b[5] << 24) |
                           (hbus->hdev->dev_instance.b[4] << 16) |
index 8ac797e6a91a573ab05c522ce760fc4defec6752..723f487f3edcdd5fb527aafdfc31450e12c00a1d 100644 (file)
@@ -481,6 +481,11 @@ struct hv_create_vp {
        u64 flags;
 } __packed;
 
+enum hv_interrupt_source {
+       HV_INTERRUPT_SOURCE_MSI = 1, /* MSI and MSI-X */
+       HV_INTERRUPT_SOURCE_IOAPIC,
+};
+
 union hv_msi_address_register {
        u32 as_uint32;
        struct {
@@ -514,10 +519,37 @@ union hv_msi_entry {
        } __packed;
 };
 
+union hv_ioapic_rte {
+       u64 as_uint64;
+
+       struct {
+               u32 vector:8;
+               u32 delivery_mode:3;
+               u32 destination_mode:1;
+               u32 delivery_status:1;
+               u32 interrupt_polarity:1;
+               u32 remote_irr:1;
+               u32 trigger_mode:1;
+               u32 interrupt_mask:1;
+               u32 reserved1:15;
+
+               u32 reserved2:24;
+               u32 destination_id:8;
+       };
+
+       struct {
+               u32 low_uint32;
+               u32 high_uint32;
+       };
+} __packed;
+
 struct hv_interrupt_entry {
-       u32 source;                     /* 1 for MSI(-X) */
+       u32 source;
        u32 reserved1;
-       union hv_msi_entry msi_entry;
+       union {
+               union hv_msi_entry msi_entry;
+               union hv_ioapic_rte ioapic_rte;
+       };
 } __packed;
 
 /*