xref: /qemu/include/hw/i386/microvm.h (revision 0ebf007d)
1*0ebf007dSSergio Lopez /*
2*0ebf007dSSergio Lopez  * Copyright (c) 2018 Intel Corporation
3*0ebf007dSSergio Lopez  * Copyright (c) 2019 Red Hat, Inc.
4*0ebf007dSSergio Lopez  *
5*0ebf007dSSergio Lopez  * This program is free software; you can redistribute it and/or modify it
6*0ebf007dSSergio Lopez  * under the terms and conditions of the GNU General Public License,
7*0ebf007dSSergio Lopez  * version 2 or later, as published by the Free Software Foundation.
8*0ebf007dSSergio Lopez  *
9*0ebf007dSSergio Lopez  * This program is distributed in the hope it will be useful, but WITHOUT
10*0ebf007dSSergio Lopez  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*0ebf007dSSergio Lopez  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12*0ebf007dSSergio Lopez  * more details.
13*0ebf007dSSergio Lopez  *
14*0ebf007dSSergio Lopez  * You should have received a copy of the GNU General Public License along with
15*0ebf007dSSergio Lopez  * this program.  If not, see <http://www.gnu.org/licenses/>.
16*0ebf007dSSergio Lopez  */
17*0ebf007dSSergio Lopez 
18*0ebf007dSSergio Lopez #ifndef HW_I386_MICROVM_H
19*0ebf007dSSergio Lopez #define HW_I386_MICROVM_H
20*0ebf007dSSergio Lopez 
21*0ebf007dSSergio Lopez #include "qemu-common.h"
22*0ebf007dSSergio Lopez #include "exec/hwaddr.h"
23*0ebf007dSSergio Lopez #include "qemu/notify.h"
24*0ebf007dSSergio Lopez 
25*0ebf007dSSergio Lopez #include "hw/boards.h"
26*0ebf007dSSergio Lopez #include "hw/i386/x86.h"
27*0ebf007dSSergio Lopez 
28*0ebf007dSSergio Lopez /* Platform virtio definitions */
29*0ebf007dSSergio Lopez #define VIRTIO_MMIO_BASE      0xc0000000
30*0ebf007dSSergio Lopez #define VIRTIO_IRQ_BASE       5
31*0ebf007dSSergio Lopez #define VIRTIO_NUM_TRANSPORTS 8
32*0ebf007dSSergio Lopez #define VIRTIO_CMDLINE_MAXLEN 64
33*0ebf007dSSergio Lopez 
34*0ebf007dSSergio Lopez /* Machine type options */
35*0ebf007dSSergio Lopez #define MICROVM_MACHINE_PIT                 "pit"
36*0ebf007dSSergio Lopez #define MICROVM_MACHINE_PIC                 "pic"
37*0ebf007dSSergio Lopez #define MICROVM_MACHINE_RTC                 "rtc"
38*0ebf007dSSergio Lopez #define MICROVM_MACHINE_ISA_SERIAL          "isa-serial"
39*0ebf007dSSergio Lopez #define MICROVM_MACHINE_OPTION_ROMS         "x-option-roms"
40*0ebf007dSSergio Lopez #define MICROVM_MACHINE_AUTO_KERNEL_CMDLINE "auto-kernel-cmdline"
41*0ebf007dSSergio Lopez 
42*0ebf007dSSergio Lopez typedef struct {
43*0ebf007dSSergio Lopez     X86MachineClass parent;
44*0ebf007dSSergio Lopez     HotplugHandler *(*orig_hotplug_handler)(MachineState *machine,
45*0ebf007dSSergio Lopez                                            DeviceState *dev);
46*0ebf007dSSergio Lopez } MicrovmMachineClass;
47*0ebf007dSSergio Lopez 
48*0ebf007dSSergio Lopez typedef struct {
49*0ebf007dSSergio Lopez     X86MachineState parent;
50*0ebf007dSSergio Lopez 
51*0ebf007dSSergio Lopez     /* Machine type options */
52*0ebf007dSSergio Lopez     OnOffAuto pic;
53*0ebf007dSSergio Lopez     OnOffAuto pit;
54*0ebf007dSSergio Lopez     OnOffAuto rtc;
55*0ebf007dSSergio Lopez     bool isa_serial;
56*0ebf007dSSergio Lopez     bool option_roms;
57*0ebf007dSSergio Lopez     bool auto_kernel_cmdline;
58*0ebf007dSSergio Lopez 
59*0ebf007dSSergio Lopez     /* Machine state */
60*0ebf007dSSergio Lopez     bool kernel_cmdline_fixed;
61*0ebf007dSSergio Lopez } MicrovmMachineState;
62*0ebf007dSSergio Lopez 
63*0ebf007dSSergio Lopez #define TYPE_MICROVM_MACHINE   MACHINE_TYPE_NAME("microvm")
64*0ebf007dSSergio Lopez #define MICROVM_MACHINE(obj) \
65*0ebf007dSSergio Lopez     OBJECT_CHECK(MicrovmMachineState, (obj), TYPE_MICROVM_MACHINE)
66*0ebf007dSSergio Lopez #define MICROVM_MACHINE_GET_CLASS(obj) \
67*0ebf007dSSergio Lopez     OBJECT_GET_CLASS(MicrovmMachineClass, obj, TYPE_MICROVM_MACHINE)
68*0ebf007dSSergio Lopez #define MICROVM_MACHINE_CLASS(class) \
69*0ebf007dSSergio Lopez     OBJECT_CLASS_CHECK(MicrovmMachineClass, class, TYPE_MICROVM_MACHINE)
70*0ebf007dSSergio Lopez 
71*0ebf007dSSergio Lopez #endif
72