xref: /qemu/include/hw/i386/microvm.h (revision b34f2fd1)
10ebf007dSSergio Lopez /*
20ebf007dSSergio Lopez  * Copyright (c) 2018 Intel Corporation
30ebf007dSSergio Lopez  * Copyright (c) 2019 Red Hat, Inc.
40ebf007dSSergio Lopez  *
50ebf007dSSergio Lopez  * This program is free software; you can redistribute it and/or modify it
60ebf007dSSergio Lopez  * under the terms and conditions of the GNU General Public License,
70ebf007dSSergio Lopez  * version 2 or later, as published by the Free Software Foundation.
80ebf007dSSergio Lopez  *
90ebf007dSSergio Lopez  * This program is distributed in the hope it will be useful, but WITHOUT
100ebf007dSSergio Lopez  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
110ebf007dSSergio Lopez  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
120ebf007dSSergio Lopez  * more details.
130ebf007dSSergio Lopez  *
140ebf007dSSergio Lopez  * You should have received a copy of the GNU General Public License along with
150ebf007dSSergio Lopez  * this program.  If not, see <http://www.gnu.org/licenses/>.
160ebf007dSSergio Lopez  */
170ebf007dSSergio Lopez 
180ebf007dSSergio Lopez #ifndef HW_I386_MICROVM_H
190ebf007dSSergio Lopez #define HW_I386_MICROVM_H
200ebf007dSSergio Lopez 
210ebf007dSSergio Lopez #include "exec/hwaddr.h"
220ebf007dSSergio Lopez #include "qemu/notify.h"
230ebf007dSSergio Lopez 
240ebf007dSSergio Lopez #include "hw/boards.h"
250ebf007dSSergio Lopez #include "hw/i386/x86.h"
268045df14SGerd Hoffmann #include "hw/acpi/acpi_dev_interface.h"
2724db877aSGerd Hoffmann #include "hw/pci-host/gpex.h"
28db1015e9SEduardo Habkost #include "qom/object.h"
290ebf007dSSergio Lopez 
30ebf18775SGerd Hoffmann /*
31ebf18775SGerd Hoffmann  *  IRQ    |  pc        | microvm (acpi=on)
32ebf18775SGerd Hoffmann  * --------+------------+------------------
33ebf18775SGerd Hoffmann  *   0     |  pit       |
34ebf18775SGerd Hoffmann  *   1     |  kbd       |
35ebf18775SGerd Hoffmann  *   2     |  cascade   |
36ebf18775SGerd Hoffmann  *   3     |  serial 1  |
37ebf18775SGerd Hoffmann  *   4     |  serial 0  | serial
38ebf18775SGerd Hoffmann  *   5     |  -         |
39ebf18775SGerd Hoffmann  *   6     |  floppy    |
40ebf18775SGerd Hoffmann  *   7     |  parallel  |
41ebf18775SGerd Hoffmann  *   8     |  rtc       | rtc (rtc=on)
42ebf18775SGerd Hoffmann  *   9     |  acpi      | acpi (ged)
43d4a42e85SGerd Hoffmann  *  10     |  pci lnk   | xhci (usb=on)
44ebf18775SGerd Hoffmann  *  11     |  pci lnk   |
4524db877aSGerd Hoffmann  *  12     |  ps2       | pcie
4624db877aSGerd Hoffmann  *  13     |  fpu       | pcie
4724db877aSGerd Hoffmann  *  14     |  ide 0     | pcie
4824db877aSGerd Hoffmann  *  15     |  ide 1     | pcie
49ebf18775SGerd Hoffmann  *  16-23  |  pci gsi   | virtio
50ebf18775SGerd Hoffmann  */
51ebf18775SGerd Hoffmann 
520ebf007dSSergio Lopez /* Platform virtio definitions */
53c8b47359SGerd Hoffmann #define VIRTIO_MMIO_BASE      0xfeb00000
540ebf007dSSergio Lopez #define VIRTIO_CMDLINE_MAXLEN 64
550ebf007dSSergio Lopez 
568045df14SGerd Hoffmann #define GED_MMIO_BASE         0xfea00000
578045df14SGerd Hoffmann #define GED_MMIO_BASE_MEMHP   (GED_MMIO_BASE + 0x100)
588045df14SGerd Hoffmann #define GED_MMIO_BASE_REGS    (GED_MMIO_BASE + 0x200)
598045df14SGerd Hoffmann #define GED_MMIO_IRQ          9
608045df14SGerd Hoffmann 
61d4a42e85SGerd Hoffmann #define MICROVM_XHCI_BASE     0xfe900000
62d4a42e85SGerd Hoffmann #define MICROVM_XHCI_IRQ      10
63d4a42e85SGerd Hoffmann 
6424db877aSGerd Hoffmann #define PCIE_MMIO_BASE        0xc0000000
6524db877aSGerd Hoffmann #define PCIE_MMIO_SIZE        0x20000000
6624db877aSGerd Hoffmann #define PCIE_ECAM_BASE        0xe0000000
6724db877aSGerd Hoffmann #define PCIE_ECAM_SIZE        0x10000000
6824db877aSGerd Hoffmann 
690ebf007dSSergio Lopez /* Machine type options */
700ebf007dSSergio Lopez #define MICROVM_MACHINE_RTC                 "rtc"
7124db877aSGerd Hoffmann #define MICROVM_MACHINE_PCIE                "pcie"
724d01b899SGerd Hoffmann #define MICROVM_MACHINE_IOAPIC2             "ioapic2"
730ebf007dSSergio Lopez #define MICROVM_MACHINE_ISA_SERIAL          "isa-serial"
740ebf007dSSergio Lopez #define MICROVM_MACHINE_OPTION_ROMS         "x-option-roms"
750ebf007dSSergio Lopez #define MICROVM_MACHINE_AUTO_KERNEL_CMDLINE "auto-kernel-cmdline"
760ebf007dSSergio Lopez 
77db1015e9SEduardo Habkost struct MicrovmMachineClass {
780ebf007dSSergio Lopez     X86MachineClass parent;
790ebf007dSSergio Lopez     HotplugHandler *(*orig_hotplug_handler)(MachineState *machine,
800ebf007dSSergio Lopez                                            DeviceState *dev);
81db1015e9SEduardo Habkost };
820ebf007dSSergio Lopez 
83db1015e9SEduardo Habkost struct MicrovmMachineState {
840ebf007dSSergio Lopez     X86MachineState parent;
850ebf007dSSergio Lopez 
860ebf007dSSergio Lopez     /* Machine type options */
870ebf007dSSergio Lopez     OnOffAuto rtc;
8824db877aSGerd Hoffmann     OnOffAuto pcie;
894d01b899SGerd Hoffmann     OnOffAuto ioapic2;
900ebf007dSSergio Lopez     bool isa_serial;
910ebf007dSSergio Lopez     bool option_roms;
920ebf007dSSergio Lopez     bool auto_kernel_cmdline;
930ebf007dSSergio Lopez 
940ebf007dSSergio Lopez     /* Machine state */
953d09c007SGerd Hoffmann     uint32_t pcie_irq_base;
96d4e9d577SGerd Hoffmann     uint32_t virtio_irq_base;
97c214a7bcSGerd Hoffmann     uint32_t virtio_num_transports;
980ebf007dSSergio Lopez     bool kernel_cmdline_fixed;
998045df14SGerd Hoffmann     Notifier machine_done;
1008045df14SGerd Hoffmann     Notifier powerdown_req;
10124db877aSGerd Hoffmann     struct GPEXConfig gpex;
102*f5918a99SGerd Hoffmann 
103*f5918a99SGerd Hoffmann     /* device tree */
104*f5918a99SGerd Hoffmann     void *fdt;
105*f5918a99SGerd Hoffmann     uint32_t ioapic_phandle[2];
106db1015e9SEduardo Habkost };
1070ebf007dSSergio Lopez 
1080ebf007dSSergio Lopez #define TYPE_MICROVM_MACHINE   MACHINE_TYPE_NAME("microvm")
109a489d195SEduardo Habkost OBJECT_DECLARE_TYPE(MicrovmMachineState, MicrovmMachineClass, MICROVM_MACHINE)
1100ebf007dSSergio Lopez 
1110ebf007dSSergio Lopez #endif
112