xref: /openbmc/qemu/include/hw/xen/xen-pvh-common.h (revision f22e598a)
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