[PATCH v5 11/13] include/hw/hyperv: adjust hv_interrupt_control structure for arm64
Aastha Rawat <[email protected]>
| Newsgroups | org.nongnu.qemu-arm,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <20260717-mshv_accel_arm64_supp-v5-11-ef07d4c6b337@linux.microsoft.com> |
From: "Anirudh Rayabharam (Microsoft)" <[email protected]> Add the arm64 specific fields to the hv_interrupt_control struct and adjust the existing usage accordingly. mshv_request_interrupt is only needed only for x86 so compile it out entirely for arm64. Signed-off-by: Anirudh Rayabharam (Microsoft) <[email protected]> --- accel/mshv/irq.c | 2 ++ include/hw/hyperv/hvgdk_mini.h | 24 ++++++++++++++++++++++++ include/system/mshv.h | 2 ++ 3 files changed, 28 insertions(+) diff --git a/accel/mshv/irq.c b/accel/mshv/irq.c index 4828ac51ac..f18e6a0f66 100644 --- a/accel/mshv/irq.c +++ b/accel/mshv/irq.c @@ -259,6 +259,7 @@ int mshv_irqchip_update_msi_route(int virq, MSIMessage msg, PCIDevice *dev) return 0; } +#if defined(__x86_64__) int mshv_request_interrupt(MshvState *mshv_state, uint32_t interrupt_type, uint32_t vector, uint32_t vp_index, bool logical_dest_mode, bool level_triggered) @@ -295,6 +296,7 @@ int mshv_request_interrupt(MshvState *mshv_state, uint32_t interrupt_type, uint3 } return 0; } +#endif void mshv_irqchip_commit_routes(MshvState *s) { diff --git a/include/hw/hyperv/hvgdk_mini.h b/include/hw/hyperv/hvgdk_mini.h index 63f05b01a6..477898d919 100644 --- a/include/hw/hyperv/hvgdk_mini.h +++ b/include/hw/hyperv/hvgdk_mini.h @@ -539,14 +539,38 @@ typedef struct hv_input_set_vp_registers { } QEMU_PACKED hv_input_set_vp_registers; #define MSHV_VP_MAX_REGISTERS 128 +enum hv_interrupt_type { +#if defined(__x86_64__) + HV_X64_INTERRUPT_TYPE_FIXED = 0x0000, + HV_X64_INTERRUPT_TYPE_LOWESTPRIORITY = 0x0001, + HV_X64_INTERRUPT_TYPE_SMI = 0x0002, + HV_X64_INTERRUPT_TYPE_REMOTEREAD = 0x0003, + HV_X64_INTERRUPT_TYPE_NMI = 0x0004, + HV_X64_INTERRUPT_TYPE_INIT = 0x0005, + HV_X64_INTERRUPT_TYPE_SIPI = 0x0006, + HV_X64_INTERRUPT_TYPE_EXTINT = 0x0007, + HV_X64_INTERRUPT_TYPE_LOCALINT0 = 0x0008, + HV_X64_INTERRUPT_TYPE_LOCALINT1 = 0x0009, + HV_X64_INTERRUPT_TYPE_MAXIMUM = 0x000A, +#elif defined(__aarch64__) + HV_ARM64_INTERRUPT_TYPE_FIXED = 0x0000, + HV_ARM64_INTERRUPT_TYPE_MAXIMUM = 0x0008, +#endif +}; union hv_interrupt_control { uint64_t as_uint64; struct { uint32_t interrupt_type; /* enum hv_interrupt type */ +#if defined(__x86_64__) uint32_t level_triggered:1; uint32_t logical_dest_mode:1; uint32_t rsvd:30; +#elif defined(__aarch64__) + uint32_t rsvd1:2; + uint32_t asserted:1; + uint32_t rsvd2:29; +#endif }; }; diff --git a/include/system/mshv.h b/include/system/mshv.h index 46fe3fcebc..6e20b32247 100644 --- a/include/system/mshv.h +++ b/include/system/mshv.h @@ -55,10 +55,12 @@ DECLARE_INSTANCE_CHECKER(MshvState, MSHV_STATE, extern MshvState *mshv_state; +#if defined(__x86_64__) /* interrupt */ int mshv_request_interrupt(MshvState *mshv_state, uint32_t interrupt_type, uint32_t vector, uint32_t vp_index, bool logical_destination_mode, bool level_triggered); +#endif int mshv_irqchip_add_msi_route(AccelRouteChange *c, int vector, PCIDevice *dev); int mshv_irqchip_update_msi_route(int virq, MSIMessage msg, PCIDevice *dev); -- 2.45.4