xref: /qemu/include/hw/i386/microvm.h (revision c8b47359)
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 "qemu-common.h"
220ebf007dSSergio Lopez #include "exec/hwaddr.h"
230ebf007dSSergio Lopez #include "qemu/notify.h"
240ebf007dSSergio Lopez 
250ebf007dSSergio Lopez #include "hw/boards.h"
260ebf007dSSergio Lopez #include "hw/i386/x86.h"
270ebf007dSSergio Lopez 
280ebf007dSSergio Lopez /* Platform virtio definitions */
29*c8b47359SGerd Hoffmann #define VIRTIO_MMIO_BASE      0xfeb00000
300ebf007dSSergio Lopez #define VIRTIO_IRQ_BASE       5
310ebf007dSSergio Lopez #define VIRTIO_NUM_TRANSPORTS 8
320ebf007dSSergio Lopez #define VIRTIO_CMDLINE_MAXLEN 64
330ebf007dSSergio Lopez 
340ebf007dSSergio Lopez /* Machine type options */
350ebf007dSSergio Lopez #define MICROVM_MACHINE_PIT                 "pit"
360ebf007dSSergio Lopez #define MICROVM_MACHINE_PIC                 "pic"
370ebf007dSSergio Lopez #define MICROVM_MACHINE_RTC                 "rtc"
380ebf007dSSergio Lopez #define MICROVM_MACHINE_ISA_SERIAL          "isa-serial"
390ebf007dSSergio Lopez #define MICROVM_MACHINE_OPTION_ROMS         "x-option-roms"
400ebf007dSSergio Lopez #define MICROVM_MACHINE_AUTO_KERNEL_CMDLINE "auto-kernel-cmdline"
410ebf007dSSergio Lopez 
420ebf007dSSergio Lopez typedef struct {
430ebf007dSSergio Lopez     X86MachineClass parent;
440ebf007dSSergio Lopez     HotplugHandler *(*orig_hotplug_handler)(MachineState *machine,
450ebf007dSSergio Lopez                                            DeviceState *dev);
460ebf007dSSergio Lopez } MicrovmMachineClass;
470ebf007dSSergio Lopez 
480ebf007dSSergio Lopez typedef struct {
490ebf007dSSergio Lopez     X86MachineState parent;
500ebf007dSSergio Lopez 
510ebf007dSSergio Lopez     /* Machine type options */
520ebf007dSSergio Lopez     OnOffAuto pic;
530ebf007dSSergio Lopez     OnOffAuto pit;
540ebf007dSSergio Lopez     OnOffAuto rtc;
550ebf007dSSergio Lopez     bool isa_serial;
560ebf007dSSergio Lopez     bool option_roms;
570ebf007dSSergio Lopez     bool auto_kernel_cmdline;
580ebf007dSSergio Lopez 
590ebf007dSSergio Lopez     /* Machine state */
600ebf007dSSergio Lopez     bool kernel_cmdline_fixed;
610ebf007dSSergio Lopez } MicrovmMachineState;
620ebf007dSSergio Lopez 
630ebf007dSSergio Lopez #define TYPE_MICROVM_MACHINE   MACHINE_TYPE_NAME("microvm")
640ebf007dSSergio Lopez #define MICROVM_MACHINE(obj) \
650ebf007dSSergio Lopez     OBJECT_CHECK(MicrovmMachineState, (obj), TYPE_MICROVM_MACHINE)
660ebf007dSSergio Lopez #define MICROVM_MACHINE_GET_CLASS(obj) \
670ebf007dSSergio Lopez     OBJECT_GET_CLASS(MicrovmMachineClass, obj, TYPE_MICROVM_MACHINE)
680ebf007dSSergio Lopez #define MICROVM_MACHINE_CLASS(class) \
690ebf007dSSergio Lopez     OBJECT_CLASS_CHECK(MicrovmMachineClass, class, TYPE_MICROVM_MACHINE)
700ebf007dSSergio Lopez 
710ebf007dSSergio Lopez #endif
72