1258b2a40SEdgar E. Iglesias /* 2258b2a40SEdgar E. Iglesias * QEMU Xen PVH machine - common code. 3258b2a40SEdgar E. Iglesias * 4258b2a40SEdgar E. Iglesias * Copyright (c) 2024 Advanced Micro Devices, Inc. 5258b2a40SEdgar E. Iglesias * 6258b2a40SEdgar E. Iglesias * SPDX-License-Identifier: GPL-2.0-or-later 7258b2a40SEdgar E. Iglesias */ 8258b2a40SEdgar E. Iglesias 9258b2a40SEdgar E. Iglesias #ifndef XEN_PVH_COMMON_H__ 10258b2a40SEdgar E. Iglesias #define XEN_PVH_COMMON_H__ 11258b2a40SEdgar E. Iglesias 12258b2a40SEdgar E. Iglesias #include <assert.h> 13258b2a40SEdgar E. Iglesias #include "hw/sysbus.h" 14258b2a40SEdgar E. Iglesias #include "hw/hw.h" 15258b2a40SEdgar E. Iglesias #include "hw/xen/xen-hvm-common.h" 16258b2a40SEdgar E. Iglesias #include "hw/pci-host/gpex.h" 17258b2a40SEdgar E. Iglesias 18258b2a40SEdgar E. Iglesias #define TYPE_XEN_PVH_MACHINE MACHINE_TYPE_NAME("xen-pvh-base") 19258b2a40SEdgar E. Iglesias OBJECT_DECLARE_TYPE(XenPVHMachineState, XenPVHMachineClass, 20258b2a40SEdgar E. Iglesias XEN_PVH_MACHINE) 21258b2a40SEdgar E. Iglesias 22258b2a40SEdgar E. Iglesias struct XenPVHMachineClass { 23258b2a40SEdgar E. Iglesias MachineClass parent; 24258b2a40SEdgar E. Iglesias 25258b2a40SEdgar E. Iglesias /* PVH implementation specific init. */ 26258b2a40SEdgar E. Iglesias void (*init)(MachineState *state); 27258b2a40SEdgar E. Iglesias 28258b2a40SEdgar E. Iglesias /* 29*f22e598aSEdgar E. Iglesias * set_pci_intx_irq - Deliver INTX irqs to the guest. 30*f22e598aSEdgar E. Iglesias * 31*f22e598aSEdgar E. Iglesias * @opaque: pointer to XenPVHMachineState. 32*f22e598aSEdgar E. Iglesias * @irq: IRQ after swizzling, between 0-3. 33*f22e598aSEdgar E. Iglesias * @level: IRQ level. 34*f22e598aSEdgar E. Iglesias */ 35*f22e598aSEdgar E. Iglesias void (*set_pci_intx_irq)(void *opaque, int irq, int level); 36*f22e598aSEdgar E. Iglesias 37*f22e598aSEdgar E. Iglesias /* 38*f22e598aSEdgar E. Iglesias * set_pci_link_route: - optional implementation call to setup 39*f22e598aSEdgar E. Iglesias * routing between INTX IRQ (0 - 3) and GSI's. 40*f22e598aSEdgar E. Iglesias * 41*f22e598aSEdgar E. Iglesias * @line: line the INTx line (0 => A .. 3 => B) 42*f22e598aSEdgar E. Iglesias * @irq: GSI 43*f22e598aSEdgar E. Iglesias */ 44*f22e598aSEdgar E. Iglesias int (*set_pci_link_route)(uint8_t line, uint8_t irq); 45*f22e598aSEdgar E. Iglesias 46*f22e598aSEdgar E. Iglesias /* 47258b2a40SEdgar E. Iglesias * Each implementation can optionally enable features that it 48258b2a40SEdgar E. Iglesias * supports and are known to work. 49258b2a40SEdgar E. Iglesias */ 50*f22e598aSEdgar E. Iglesias bool has_pci; 51258b2a40SEdgar E. Iglesias bool has_tpm; 52258b2a40SEdgar E. Iglesias bool has_virtio_mmio; 53258b2a40SEdgar E. Iglesias }; 54258b2a40SEdgar E. Iglesias 55258b2a40SEdgar E. Iglesias struct XenPVHMachineState { 56258b2a40SEdgar E. Iglesias /*< private >*/ 57258b2a40SEdgar E. Iglesias MachineState parent; 58258b2a40SEdgar E. Iglesias 59258b2a40SEdgar E. Iglesias XenIOState ioreq; 60258b2a40SEdgar E. Iglesias 61258b2a40SEdgar E. Iglesias struct { 62258b2a40SEdgar E. Iglesias MemoryRegion low; 63258b2a40SEdgar E. Iglesias MemoryRegion high; 64258b2a40SEdgar E. Iglesias } ram; 65258b2a40SEdgar E. Iglesias 66258b2a40SEdgar E. Iglesias struct { 67*f22e598aSEdgar E. Iglesias GPEXHost gpex; 68*f22e598aSEdgar E. Iglesias MemoryRegion mmio_alias; 69*f22e598aSEdgar E. Iglesias MemoryRegion mmio_high_alias; 70*f22e598aSEdgar E. Iglesias } pci; 71*f22e598aSEdgar E. Iglesias 72*f22e598aSEdgar E. Iglesias struct { 73258b2a40SEdgar E. Iglesias MemMapEntry ram_low, ram_high; 74258b2a40SEdgar E. Iglesias MemMapEntry tpm; 75258b2a40SEdgar E. Iglesias 76258b2a40SEdgar E. Iglesias /* Virtio-mmio */ 77258b2a40SEdgar E. Iglesias MemMapEntry virtio_mmio; 78258b2a40SEdgar E. Iglesias uint32_t virtio_mmio_num; 79258b2a40SEdgar E. Iglesias uint32_t virtio_mmio_irq_base; 80*f22e598aSEdgar E. Iglesias 81*f22e598aSEdgar E. Iglesias /* PCI */ 82*f22e598aSEdgar E. Iglesias MemMapEntry pci_ecam, pci_mmio, pci_mmio_high; 83*f22e598aSEdgar E. Iglesias uint32_t pci_intx_irq_base; 84258b2a40SEdgar E. Iglesias } cfg; 85258b2a40SEdgar E. Iglesias }; 86258b2a40SEdgar E. Iglesias 87258b2a40SEdgar E. Iglesias void xen_pvh_class_setup_common_props(XenPVHMachineClass *xpc); 88258b2a40SEdgar E. Iglesias #endif 89